[MERGE] trunk
bzr revid: fp@openerp.com-20130803175004-ivqkxtsd7vh4npwe
This commit is contained in:
commit
54631bda2a
|
@ -719,7 +719,7 @@ class account_journal(osv.osv):
|
||||||
'user_id': fields.many2one('res.users', 'User', help="The user responsible for this journal"),
|
'user_id': fields.many2one('res.users', 'User', help="The user responsible for this journal"),
|
||||||
'groups_id': fields.many2many('res.groups', 'account_journal_group_rel', 'journal_id', 'group_id', 'Groups'),
|
'groups_id': fields.many2many('res.groups', 'account_journal_group_rel', 'journal_id', 'group_id', 'Groups'),
|
||||||
'currency': fields.many2one('res.currency', 'Currency', help='The currency used to enter statement'),
|
'currency': fields.many2one('res.currency', 'Currency', help='The currency used to enter statement'),
|
||||||
'entry_posted': fields.boolean('Skip \'Draft\' State for Manual Entries', help='Check this box if you don\'t want new journal entries to pass through the \'draft\' state and instead goes directly to the \'posted state\' without any manual validation. \nNote that journal entries that are automatically created by the system are always skipping that state.'),
|
'entry_posted': fields.boolean('Autopost Created Moves', help='Check this box to automatically post entries of this journal. Note that legally, some entries may be automatically posted when the source document is validated (Invoices), whatever the status of this field.'),
|
||||||
'company_id': fields.many2one('res.company', 'Company', required=True, select=1, help="Company related to this journal"),
|
'company_id': fields.many2one('res.company', 'Company', required=True, select=1, help="Company related to this journal"),
|
||||||
'allow_date':fields.boolean('Check Date in Period', help= 'If set to True then do not accept the entry if the entry date is not into the period dates'),
|
'allow_date':fields.boolean('Check Date in Period', help= 'If set to True then do not accept the entry if the entry date is not into the period dates'),
|
||||||
|
|
||||||
|
|
|
@ -612,6 +612,13 @@
|
||||||
</field>
|
</field>
|
||||||
</page>
|
</page>
|
||||||
</notebook>
|
</notebook>
|
||||||
|
<group class="oe_subtotal_footer oe_right" colspan="2" name="sale_total">
|
||||||
|
<div class="oe_subtotal_footer_separator oe_inline">
|
||||||
|
<label for="balance_end" />
|
||||||
|
</div>
|
||||||
|
<field name="balance_end" nolabel="1" class="oe_subtotal_footer_separator" widget='monetary' options="{'currency_field': 'currency_id'}"/>
|
||||||
|
</group>
|
||||||
|
<div class="oe_clear"/>
|
||||||
</sheet>
|
</sheet>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
|
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-06-27 14:01+0000\n"
|
"PO-Revision-Date: 2013-07-02 06:32+0000\n"
|
||||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
"Last-Translator: Chertykov Denis <chertykov@gmail.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-06-28 05:42+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-03 05:14+0000\n"
|
||||||
"X-Generator: Launchpad (build 16681)\n"
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
#. module: account
|
#. module: account
|
||||||
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
|
#: model:process.transition,name:account.process_transition_supplierreconcilepaid0
|
||||||
|
@ -4707,7 +4707,7 @@ msgstr "Месяц"
|
||||||
#: code:addons/account/account.py:668
|
#: code:addons/account/account.py:668
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "You cannot change the code of account which contains journal items!"
|
msgid "You cannot change the code of account which contains journal items!"
|
||||||
msgstr ""
|
msgstr "Нальзя изменить код счета который содержит проводки!"
|
||||||
|
|
||||||
#. module: account
|
#. module: account
|
||||||
#: field:account.config.settings,purchase_sequence_prefix:0
|
#: field:account.config.settings,purchase_sequence_prefix:0
|
||||||
|
@ -4826,7 +4826,7 @@ msgstr "Отметьте, если хотите выводить счета с 0
|
||||||
#. module: account
|
#. module: account
|
||||||
#: field:account.move.reconcile,opening_reconciliation:0
|
#: field:account.move.reconcile,opening_reconciliation:0
|
||||||
msgid "Opening Entries Reconciliation"
|
msgid "Opening Entries Reconciliation"
|
||||||
msgstr ""
|
msgstr "Сверка проводок открытия"
|
||||||
|
|
||||||
#. module: account
|
#. module: account
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -366,12 +366,13 @@ class aged_trial_report(report_sxw.rml_parse, common_report_header):
|
||||||
return period or 0.0
|
return period or 0.0
|
||||||
|
|
||||||
def _get_partners(self,data):
|
def _get_partners(self,data):
|
||||||
|
# TODO: deprecated, to remove in trunk
|
||||||
if data['form']['result_selection'] == 'customer':
|
if data['form']['result_selection'] == 'customer':
|
||||||
return 'Receivable Accounts'
|
return self._translate('Receivable Accounts')
|
||||||
elif data['form']['result_selection'] == 'supplier':
|
elif data['form']['result_selection'] == 'supplier':
|
||||||
return 'Payable Accounts'
|
return self._translate('Payable Accounts')
|
||||||
elif data['form']['result_selection'] == 'customer_supplier':
|
elif data['form']['result_selection'] == 'customer_supplier':
|
||||||
return 'Receivable and Payable Accounts'
|
return self._translate('Receivable and Payable Accounts')
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
report_sxw.report_sxw('report.account.aged_trial_balance', 'res.partner',
|
report_sxw.report_sxw('report.account.aged_trial_balance', 'res.partner',
|
||||||
|
|
|
@ -147,7 +147,9 @@
|
||||||
<para style="terp_default_Centre_8">[[ data['form']['period_length'] ]]</para>
|
<para style="terp_default_Centre_8">[[ data['form']['period_length'] ]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Centre_8">[[ get_partners(data) ]]</para>
|
<para style="terp_default_Centre_8">Receivable Accounts[[ data['form']['result_selection'] == 'customer' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_default_Centre_8">Payable Accounts[[ data['form']['result_selection'] == 'supplier' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_default_Centre_8">Receivable and Payable Accounts[[ data['form']['result_selection'] == 'customer_supplier' or removeParentNode('para') ]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Centre_8">[[ data['form']['direction_selection'] ]]</para>
|
<para style="terp_default_Centre_8">[[ data['form']['direction_selection'] ]]</para>
|
||||||
|
@ -166,7 +168,8 @@
|
||||||
<para style="terp_tblheader_Details">Partners</para>
|
<para style="terp_tblheader_Details">Partners</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_tblheader_Details_Right">[[ data['form']['direction_selection'] == 'future' and 'Due' or 'Not due' ]]</para>
|
<para style="terp_tblheader_Details_Right">Due[[ data['form']['direction_selection'] == 'future' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_tblheader_Details_Right">Not due[[ data['form']['direction_selection'] != 'future' and ' ' or removeParentNode('para') ]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_tblheader_Details_Right">[[ data['form']['4']['name'] ]]</para>
|
<para style="terp_tblheader_Details_Right">[[ data['form']['4']['name'] ]]</para>
|
||||||
|
|
|
@ -211,8 +211,10 @@
|
||||||
</para>
|
</para>
|
||||||
<blockTable colWidths="130.0,80.0,100.0,140.0,90.0" style="Table8">
|
<blockTable colWidths="130.0,80.0,100.0,140.0,90.0" style="Table8">
|
||||||
<tr>
|
<tr>
|
||||||
<td><para style="terp_tblheader_General_Centre">[[ data['model']=='account.account' and 'Company'or removeParentNode('para') ]]</para>
|
<td>
|
||||||
<para style="terp_tblheader_General_Centre"> [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para></td>
|
<para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_tblheader_General_Centre">Fiscal Year</para>
|
<para style="terp_tblheader_General_Centre">Fiscal Year</para>
|
||||||
</td>
|
</td>
|
||||||
|
@ -233,7 +235,11 @@
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para>
|
<para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td><para style="terp_default_Centre_8">[[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']]</para></td>
|
<td>
|
||||||
|
<para style="terp_default_Centre_7">All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_default_Centre_7">With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_default_Centre_7">With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
</td>
|
||||||
<td> <para style="terp_default_Centre_8">[[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]] </para>
|
<td> <para style="terp_default_Centre_8">[[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]] </para>
|
||||||
<blockTable colWidths="60.0,60.0" style="Table5">[[ data['form']['filter']=='filter_date' or removeParentNode('blockTable') ]]
|
<blockTable colWidths="60.0,60.0" style="Table5">[[ data['form']['filter']=='filter_date' or removeParentNode('blockTable') ]]
|
||||||
<tr>
|
<tr>
|
||||||
|
|
|
@ -220,8 +220,8 @@
|
||||||
</blockTable>
|
</blockTable>
|
||||||
<blockTable colWidths="80.0,100,80.0,150.0,100.0" style="Table2">
|
<blockTable colWidths="80.0,100,80.0,150.0,100.0" style="Table2">
|
||||||
<tr>
|
<tr>
|
||||||
<td><para style="terp_tblheader_General_Centre">[[ data['model']=='account.journal.period' and 'Company' or removeParentNode('para') ]]</para>
|
<td><para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.journal.period' and ' ' or removeParentNode('para') ]]</para>
|
||||||
<para style="terp_tblheader_General_Centre"> [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para></td>
|
<para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para></td>
|
||||||
<td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td>
|
<td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td>
|
||||||
<td><para style="terp_tblheader_General_Centre">Journals</para></td>
|
<td><para style="terp_tblheader_General_Centre">Journals</para></td>
|
||||||
<td><para style="terp_tblheader_General_Centre">Filter By [[ data['form']['filter']!='filter_no' and get_filter(data) ]]</para></td>
|
<td><para style="terp_tblheader_General_Centre">Filter By [[ data['form']['filter']!='filter_no' and get_filter(data) ]]</para></td>
|
||||||
|
|
|
@ -360,9 +360,8 @@
|
||||||
<blockTable colWidths="110.0,110.0,110.0,110.0,128.0,93.0,110.0" style="Table1">
|
<blockTable colWidths="110.0,110.0,110.0,110.0,128.0,93.0,110.0" style="Table1">
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_tblheader_General_Centre">[[ data['model']=='account.account' and 'Company' or removeParentNode('para') ]]</para>
|
<para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]]</para>
|
||||||
<para style="terp_tblheader_General_Centre">[[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para>
|
<para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para></td>
|
||||||
</td>
|
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_tblheader_General_Centre">Fiscal Year</para>
|
<para style="terp_tblheader_General_Centre">Fiscal Year</para>
|
||||||
</td>
|
</td>
|
||||||
|
@ -395,7 +394,9 @@
|
||||||
<para style="terp_default_Centre_7">[[', '.join([ lt or '' for lt in get_journal(data) ]) ]]</para>
|
<para style="terp_default_Centre_7">[[', '.join([ lt or '' for lt in get_journal(data) ]) ]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Centre_7">[[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']]</para>
|
<para style="terp_default_Centre_7">All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_default_Centre_7">With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_default_Centre_7">With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Centre_7">[[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]]</para>
|
<para style="terp_default_Centre_7">[[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]]</para>
|
||||||
|
|
|
@ -189,11 +189,12 @@ class journal_print(report_sxw.rml_parse, common_report_header):
|
||||||
return data['form']['amount_currency']
|
return data['form']['amount_currency']
|
||||||
|
|
||||||
def _get_sortby(self, data):
|
def _get_sortby(self, data):
|
||||||
|
# TODO: deprecated, to remove in trunk
|
||||||
if self.sort_selection == 'date':
|
if self.sort_selection == 'date':
|
||||||
return 'Date'
|
return self._translate('Date')
|
||||||
elif self.sort_selection == 'ref':
|
elif self.sort_selection == 'ref':
|
||||||
return 'Reference Number'
|
return self._translate('Reference Number')
|
||||||
return 'Date'
|
return self._translate('Date')
|
||||||
|
|
||||||
report_sxw.report_sxw('report.account.journal.period.print', 'account.journal.period', 'addons/account/report/account_journal.rml', parser=journal_print, header='external')
|
report_sxw.report_sxw('report.account.journal.period.print', 'account.journal.period', 'addons/account/report/account_journal.rml', parser=journal_print, header='external')
|
||||||
report_sxw.report_sxw('report.account.journal.period.print.sale.purchase', 'account.journal.period', 'addons/account/report/account_journal_sale_purchase.rml', parser=journal_print, header='external')
|
report_sxw.report_sxw('report.account.journal.period.print.sale.purchase', 'account.journal.period', 'addons/account/report/account_journal_sale_purchase.rml', parser=journal_print, header='external')
|
||||||
|
|
|
@ -186,8 +186,8 @@
|
||||||
</para>
|
</para>
|
||||||
<blockTable colWidths="85.0,80.0,80.0,120.0,70.0,100.0" style="Table2">
|
<blockTable colWidths="85.0,80.0,80.0,120.0,70.0,100.0" style="Table2">
|
||||||
<tr>
|
<tr>
|
||||||
<td><para style="terp_tblheader_General_Centre"> [[ data['model']=='account.journal.period'and 'Company' or removeParentNode('para') ]]</para>
|
<td><para style="terp_tblheader_General_Centre">Company[[ data['model']=='account.journal.period'and ' ' or removeParentNode('para') ]]</para>
|
||||||
<para style="terp_tblheader_General_Centre">[[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]]</para></td>
|
<para style="terp_tblheader_General_Centre">Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]]</para></td>
|
||||||
<td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td>
|
<td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td>
|
||||||
<td><para style="terp_tblheader_General_Centre">Journal</para></td>
|
<td><para style="terp_tblheader_General_Centre">Journal</para></td>
|
||||||
<td><para style="terp_tblheader_General_Centre">Period</para></td>
|
<td><para style="terp_tblheader_General_Centre">Period</para></td>
|
||||||
|
@ -199,8 +199,10 @@
|
||||||
<td><para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para></td>
|
<td><para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para></td>
|
||||||
<td><para style="terp_default_Centre_8">[[ o.journal_id.name ]]</para></td>
|
<td><para style="terp_default_Centre_8">[[ o.journal_id.name ]]</para></td>
|
||||||
<td><para style="terp_default_Centre_8">[[ o.period_id.name ]] </para></td>
|
<td><para style="terp_default_Centre_8">[[ o.period_id.name ]] </para></td>
|
||||||
<td><para style="terp_default_Centre_8">[[ get_sortby(data) ]]</para></td>
|
<td>
|
||||||
<td><para style="terp_default_Centre_8">[[ get_target_move(data) ]] </para></td>
|
<para style="terp_default_Centre_8">Date[[ data['form'].get('sort_selection', 'date') == 'date' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_default_Centre_8">Reference Number[[ data['form'].get('sort_selection', 'date') == 'ref' and ' ' or removeParentNode('para') ]]</para>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</blockTable>
|
</blockTable>
|
||||||
<para style="P9">
|
<para style="P9">
|
||||||
|
|
|
@ -267,12 +267,13 @@ class third_party_ledger(report_sxw.rml_parse, common_report_header):
|
||||||
return result_tmp + result_init
|
return result_tmp + result_init
|
||||||
|
|
||||||
def _get_partners(self):
|
def _get_partners(self):
|
||||||
|
# TODO: deprecated, to remove in trunk
|
||||||
if self.result_selection == 'customer':
|
if self.result_selection == 'customer':
|
||||||
return 'Receivable Accounts'
|
return _('Receivable Accounts')
|
||||||
elif self.result_selection == 'supplier':
|
elif self.result_selection == 'supplier':
|
||||||
return 'Payable Accounts'
|
return _('Payable Accounts')
|
||||||
elif self.result_selection == 'customer_supplier':
|
elif self.result_selection == 'customer_supplier':
|
||||||
return 'Receivable and Payable Accounts'
|
return _('Receivable and Payable Accounts')
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def _sum_currency_amount_account(self, account, form):
|
def _sum_currency_amount_account(self, account, form):
|
||||||
|
|
|
@ -423,7 +423,9 @@
|
||||||
</para>
|
</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Centre_8">[[ get_partners() ]]</para>
|
<para style="terp_default_Centre_8">Receivable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_default_Centre_8">Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'supplier' or removeParentNode('para') ]]</para>
|
||||||
|
<para style="terp_default_Centre_8">Receivable and Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer_supplier' or removeParentNode('para') ]]</para>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<para style="terp_default_Centre_8">[[ get_target_move(data) ]]</para>
|
<para style="terp_default_Centre_8">[[ get_target_move(data) ]]</para>
|
||||||
|
|
|
@ -17,7 +17,7 @@ By far the most beautiful and full featured accounting software. OpenERP Account
|
||||||
Activate features on demand, from integrated analytic accounting to budget, assets and multiple companies consolidation.
|
Activate features on demand, from integrated analytic accounting to budget, assets and multiple companies consolidation.
|
||||||
</p>
|
</p>
|
||||||
<div class="oe_centeralign oe_websiteonly">
|
<div class="oe_centeralign oe_websiteonly">
|
||||||
<a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a>
|
<a href="http://www.openerp.com/start?app=account" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -84,7 +84,7 @@ openerp.account.quickadd = function (instance) {
|
||||||
},
|
},
|
||||||
search_by_journal_period: function() {
|
search_by_journal_period: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
var domain = [];
|
var domain = ['|',['debit', '!=', 0], ['credit', '!=', 0]];
|
||||||
if (self.current_journal !== null) domain.push(["journal_id", "=", self.current_journal]);
|
if (self.current_journal !== null) domain.push(["journal_id", "=", self.current_journal]);
|
||||||
if (self.current_period !== null) domain.push(["period_id", "=", self.current_period]);
|
if (self.current_period !== null) domain.push(["period_id", "=", self.current_period]);
|
||||||
self.last_context["journal_id"] = self.current_journal === null ? false : self.current_journal;
|
self.last_context["journal_id"] = self.current_journal === null ? false : self.current_journal;
|
||||||
|
|
|
@ -175,7 +175,7 @@ class account_common_report(osv.osv_memory):
|
||||||
data['form'][field] = data['form'][field][0]
|
data['form'][field] = data['form'][field][0]
|
||||||
used_context = self._build_contexts(cr, uid, ids, data, context=context)
|
used_context = self._build_contexts(cr, uid, ids, data, context=context)
|
||||||
data['form']['periods'] = used_context.get('periods', False) and used_context['periods'] or []
|
data['form']['periods'] = used_context.get('periods', False) and used_context['periods'] or []
|
||||||
data['form']['used_context'] = used_context
|
data['form']['used_context'] = dict(used_context, lang=context.get('lang', 'en_US'))
|
||||||
return self._print_report(cr, uid, ids, data, context=context)
|
return self._print_report(cr, uid, ids, data, context=context)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,19 +8,19 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||||
"PO-Revision-Date: 2012-04-13 22:35+0000\n"
|
"PO-Revision-Date: 2013-07-30 22:25+0000\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: Masaki Yamaya <Unknown>\n"
|
||||||
"Language-Team: Japanese <ja@li.org>\n"
|
"Language-Team: Japanese <ja@li.org>\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-03-16 05:47+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-31 05:16+0000\n"
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
"X-Generator: Launchpad (build 16718)\n"
|
||||||
|
|
||||||
#. module: account_accountant
|
#. module: account_accountant
|
||||||
#: model:ir.actions.client,name:account_accountant.action_client_account_menu
|
#: model:ir.actions.client,name:account_accountant.action_client_account_menu
|
||||||
msgid "Open Accounting Menu"
|
msgid "Open Accounting Menu"
|
||||||
msgstr ""
|
msgstr "会計メニューを開く"
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "\n"
|
#~ "\n"
|
||||||
|
|
|
@ -248,9 +248,12 @@
|
||||||
<field name="model">account.analytic.default</field>
|
<field name="model">account.analytic.default</field>
|
||||||
<field name="inherit_id" ref="account_analytic_default.view_account_analytic_default_tree"/>
|
<field name="inherit_id" ref="account_analytic_default.view_account_analytic_default_tree"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="analytic_id" required="1" position="replace">
|
<xpath expr="//field[@name='analytic_id']" position="attributes">
|
||||||
|
<attribute name="invisible">1</attribute>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//field[@name='analytic_id']" position="after">
|
||||||
<field name="analytics_id" required="1"/>
|
<field name="analytics_id" required="1"/>
|
||||||
</field>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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-05-15 10:09+0000\n"
|
"PO-Revision-Date: 2013-07-24 08:53+0000\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: Sumonchai ( เหลา ) <sumonchai@gmail.com>\n"
|
||||||
"Language-Team: Thai <th@li.org>\n"
|
"Language-Team: Thai <th@li.org>\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-05-16 05:12+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-25 05:13+0000\n"
|
||||||
"X-Generator: Launchpad (build 16626)\n"
|
"X-Generator: Launchpad (build 16700)\n"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:account.asset.asset:0
|
#: view:account.asset.asset:0
|
||||||
|
@ -42,7 +42,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:asset.asset.report:0
|
#: view:asset.asset.report:0
|
||||||
msgid "Group By..."
|
msgid "Group By..."
|
||||||
msgstr ""
|
msgstr "จัดกลุ่มตาม..."
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:asset.asset.report,gross_value:0
|
#: field:asset.asset.report,gross_value:0
|
||||||
|
@ -58,7 +58,7 @@ msgstr ""
|
||||||
#: field:asset.asset.report,asset_id:0
|
#: field:asset.asset.report,asset_id:0
|
||||||
#: model:ir.model,name:account_asset.model_account_asset_asset
|
#: model:ir.model,name:account_asset.model_account_asset_asset
|
||||||
msgid "Asset"
|
msgid "Asset"
|
||||||
msgstr ""
|
msgstr "สินทรัพย์"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: help:account.asset.asset,prorata:0
|
#: help:account.asset.asset,prorata:0
|
||||||
|
@ -72,7 +72,7 @@ msgstr ""
|
||||||
#: selection:account.asset.asset,method:0
|
#: selection:account.asset.asset,method:0
|
||||||
#: selection:account.asset.category,method:0
|
#: selection:account.asset.category,method:0
|
||||||
msgid "Linear"
|
msgid "Linear"
|
||||||
msgstr ""
|
msgstr "เชิงเส้น"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,company_id:0
|
#: field:account.asset.asset,company_id:0
|
||||||
|
@ -80,24 +80,24 @@ msgstr ""
|
||||||
#: view:asset.asset.report:0
|
#: view:asset.asset.report:0
|
||||||
#: field:asset.asset.report,company_id:0
|
#: field:asset.asset.report,company_id:0
|
||||||
msgid "Company"
|
msgid "Company"
|
||||||
msgstr ""
|
msgstr "บริษัท"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:asset.modify:0
|
#: view:asset.modify:0
|
||||||
msgid "Modify"
|
msgid "Modify"
|
||||||
msgstr ""
|
msgstr "ปรับเปลี่ยน"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: selection:account.asset.asset,state:0
|
#: selection:account.asset.asset,state:0
|
||||||
#: view:asset.asset.report:0
|
#: view:asset.asset.report:0
|
||||||
#: selection:asset.asset.report,state:0
|
#: selection:asset.asset.report,state:0
|
||||||
msgid "Running"
|
msgid "Running"
|
||||||
msgstr ""
|
msgstr "กำลังทำงานอยู่"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:account.asset.asset:0
|
#: view:account.asset.asset:0
|
||||||
msgid "Set to Draft"
|
msgid "Set to Draft"
|
||||||
msgstr ""
|
msgstr "กำหนดให้เป็นแบบร่าง"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:asset.asset.report:0
|
#: view:asset.asset.report:0
|
||||||
|
@ -110,7 +110,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:asset.modify,name:0
|
#: field:asset.modify,name:0
|
||||||
msgid "Reason"
|
msgid "Reason"
|
||||||
msgstr ""
|
msgstr "เหตุผล"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,method_progress_factor:0
|
#: field:account.asset.asset,method_progress_factor:0
|
||||||
|
@ -122,7 +122,7 @@ msgstr ""
|
||||||
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_normal
|
#: 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
|
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_list_normal
|
||||||
msgid "Asset Categories"
|
msgid "Asset Categories"
|
||||||
msgstr ""
|
msgstr "หมวดหมู่สินทรัพย์"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:account.asset.asset:0
|
#: view:account.asset.asset:0
|
||||||
|
@ -173,7 +173,7 @@ msgstr ""
|
||||||
#: model:ir.ui.menu,name:account_asset.menu_finance_assets
|
#: model:ir.ui.menu,name:account_asset.menu_finance_assets
|
||||||
#: model:ir.ui.menu,name:account_asset.menu_finance_config_assets
|
#: model:ir.ui.menu,name:account_asset.menu_finance_config_assets
|
||||||
msgid "Assets"
|
msgid "Assets"
|
||||||
msgstr ""
|
msgstr "สินทรัพย์"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.category,account_depreciation_id:0
|
#: field:account.asset.category,account_depreciation_id:0
|
||||||
|
@ -187,7 +187,7 @@ msgstr ""
|
||||||
#: view:asset.modify:0
|
#: view:asset.modify:0
|
||||||
#: field:asset.modify,note:0
|
#: field:asset.modify,note:0
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr ""
|
msgstr "บันทึกย่อ"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.depreciation.line,move_id:0
|
#: field:account.asset.depreciation.line,move_id:0
|
||||||
|
@ -221,7 +221,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,code:0
|
#: field:account.asset.asset,code:0
|
||||||
msgid "Reference"
|
msgid "Reference"
|
||||||
msgstr ""
|
msgstr "อ้างถึง"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:account.asset.asset:0
|
#: view:account.asset.asset:0
|
||||||
|
@ -246,7 +246,7 @@ msgstr ""
|
||||||
#: view:asset.asset.report:0
|
#: view:asset.asset.report:0
|
||||||
#: selection:asset.asset.report,state:0
|
#: selection:asset.asset.report,state:0
|
||||||
msgid "Draft"
|
msgid "Draft"
|
||||||
msgstr ""
|
msgstr "ฉบับร่าง"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:asset.asset.report:0
|
#: view:asset.asset.report:0
|
||||||
|
@ -273,13 +273,13 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.category,account_analytic_id:0
|
#: field:account.asset.category,account_analytic_id:0
|
||||||
msgid "Analytic account"
|
msgid "Analytic account"
|
||||||
msgstr ""
|
msgstr "วิเคราะห์บัญชี"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,method:0
|
#: field:account.asset.asset,method:0
|
||||||
#: field:account.asset.category,method:0
|
#: field:account.asset.category,method:0
|
||||||
msgid "Computation Method"
|
msgid "Computation Method"
|
||||||
msgstr ""
|
msgstr "วิธีการคำนวณ"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: constraint:account.asset.asset:0
|
#: constraint:account.asset.asset:0
|
||||||
|
@ -308,7 +308,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,salvage_value:0
|
#: field:account.asset.asset,salvage_value:0
|
||||||
msgid "Salvage Value"
|
msgid "Salvage Value"
|
||||||
msgstr ""
|
msgstr "มูลค่าซาก"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,category_id:0
|
#: field:account.asset.asset,category_id:0
|
||||||
|
@ -364,20 +364,20 @@ msgstr ""
|
||||||
#: field:account.asset.category,method_time:0
|
#: field:account.asset.category,method_time:0
|
||||||
#: field:account.asset.history,method_time:0
|
#: field:account.asset.history,method_time:0
|
||||||
msgid "Time Method"
|
msgid "Time Method"
|
||||||
msgstr ""
|
msgstr "วิธีการจัดการเวลา"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:asset.depreciation.confirmation.wizard:0
|
#: view:asset.depreciation.confirmation.wizard:0
|
||||||
#: view:asset.modify:0
|
#: view:asset.modify:0
|
||||||
msgid "or"
|
msgid "or"
|
||||||
msgstr ""
|
msgstr "หรือ"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,note:0
|
#: field:account.asset.asset,note:0
|
||||||
#: field:account.asset.category,note:0
|
#: field:account.asset.category,note:0
|
||||||
#: field:account.asset.history,note:0
|
#: field:account.asset.history,note:0
|
||||||
msgid "Note"
|
msgid "Note"
|
||||||
msgstr ""
|
msgstr "บันทึกย่อ"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: help:account.asset.history,method_time:0
|
#: help:account.asset.history,method_time:0
|
||||||
|
@ -409,7 +409,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:account.asset.asset:0
|
#: view:account.asset.asset:0
|
||||||
msgid "Closed"
|
msgid "Closed"
|
||||||
msgstr ""
|
msgstr "ปิด"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: help:account.asset.asset,state:0
|
#: help:account.asset.asset,state:0
|
||||||
|
@ -425,13 +425,13 @@ msgstr ""
|
||||||
#: field:account.asset.asset,state:0
|
#: field:account.asset.asset,state:0
|
||||||
#: field:asset.asset.report,state:0
|
#: field:asset.asset.report,state:0
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr ""
|
msgstr "สถานะ"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,partner_id:0
|
#: field:account.asset.asset,partner_id:0
|
||||||
#: field:asset.asset.report,partner_id:0
|
#: field:asset.asset.report,partner_id:0
|
||||||
msgid "Partner"
|
msgid "Partner"
|
||||||
msgstr ""
|
msgstr "พาร์ทเนอร์"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:asset.asset.report:0
|
#: view:asset.asset.report:0
|
||||||
|
@ -451,7 +451,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.history,user_id:0
|
#: field:account.asset.history,user_id:0
|
||||||
msgid "User"
|
msgid "User"
|
||||||
msgstr ""
|
msgstr "ผู้ใช้"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.category,account_asset_id:0
|
#: field:account.asset.category,account_asset_id:0
|
||||||
|
@ -482,12 +482,12 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,active:0
|
#: field:account.asset.asset,active:0
|
||||||
msgid "Active"
|
msgid "Active"
|
||||||
msgstr ""
|
msgstr "เปิดใช้งาน"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.depreciation.line,parent_state:0
|
#: field:account.asset.depreciation.line,parent_state:0
|
||||||
msgid "State of Asset"
|
msgid "State of Asset"
|
||||||
msgstr ""
|
msgstr "สถานะของสินทรัพย์"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.depreciation.line,name:0
|
#: field:account.asset.depreciation.line,name:0
|
||||||
|
@ -498,12 +498,12 @@ msgstr ""
|
||||||
#: view:account.asset.asset:0
|
#: view:account.asset.asset:0
|
||||||
#: field:account.asset.asset,history_ids:0
|
#: field:account.asset.asset,history_ids:0
|
||||||
msgid "History"
|
msgid "History"
|
||||||
msgstr ""
|
msgstr "ประวัติ"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:asset.depreciation.confirmation.wizard:0
|
#: view:asset.depreciation.confirmation.wizard:0
|
||||||
msgid "Compute Asset"
|
msgid "Compute Asset"
|
||||||
msgstr ""
|
msgstr "คำนวณสินทรัพย์"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:asset.depreciation.confirmation.wizard,period_id:0
|
#: field:asset.depreciation.confirmation.wizard,period_id:0
|
||||||
|
@ -513,7 +513,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:account.asset.asset:0
|
#: view:account.asset.asset:0
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr ""
|
msgstr "ทั่วไป"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,prorata:0
|
#: field:account.asset.asset,prorata:0
|
||||||
|
@ -524,7 +524,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: model:ir.model,name:account_asset.model_account_invoice
|
#: model:ir.model,name:account_asset.model_account_invoice
|
||||||
msgid "Invoice"
|
msgid "Invoice"
|
||||||
msgstr ""
|
msgstr "ใบแจ้งหนี้"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: view:account.asset.asset:0
|
#: view:account.asset.asset:0
|
||||||
|
@ -535,13 +535,13 @@ msgstr ""
|
||||||
#: view:asset.depreciation.confirmation.wizard:0
|
#: view:asset.depreciation.confirmation.wizard:0
|
||||||
#: view:asset.modify:0
|
#: view:asset.modify:0
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr "ยกเลิก"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: selection:account.asset.asset,state:0
|
#: selection:account.asset.asset,state:0
|
||||||
#: selection:asset.asset.report,state:0
|
#: selection:asset.asset.report,state:0
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "ปิด"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: model:ir.model,name:account_asset.model_account_move_line
|
#: model:ir.model,name:account_asset.model_account_move_line
|
||||||
|
@ -558,7 +558,7 @@ msgstr ""
|
||||||
#: view:asset.asset.report:0
|
#: view:asset.asset.report:0
|
||||||
#: field:asset.asset.report,purchase_date:0
|
#: field:asset.asset.report,purchase_date:0
|
||||||
msgid "Purchase Date"
|
msgid "Purchase Date"
|
||||||
msgstr ""
|
msgstr "วันที่ซื้อ"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: selection:account.asset.asset,method:0
|
#: selection:account.asset.asset,method:0
|
||||||
|
@ -606,7 +606,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,currency_id:0
|
#: field:account.asset.asset,currency_id:0
|
||||||
msgid "Currency"
|
msgid "Currency"
|
||||||
msgstr ""
|
msgstr "สกุลเงิน"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.category,journal_id:0
|
#: field:account.asset.category,journal_id:0
|
||||||
|
@ -637,7 +637,7 @@ msgstr ""
|
||||||
#: view:asset.asset.report:0
|
#: view:asset.asset.report:0
|
||||||
#: field:asset.asset.report,move_check:0
|
#: field:asset.asset.report,move_check:0
|
||||||
msgid "Posted"
|
msgid "Posted"
|
||||||
msgstr ""
|
msgstr "ลงบัญชีแล้ว"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: model:ir.actions.act_window,help:account_asset.action_asset_asset_report
|
#: model:ir.actions.act_window,help:account_asset.action_asset_asset_report
|
||||||
|
@ -660,7 +660,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.category,name:0
|
#: field:account.asset.category,name:0
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr ""
|
msgstr "ชื่อ"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: help:account.asset.category,open_asset:0
|
#: help:account.asset.category,open_asset:0
|
||||||
|
@ -672,7 +672,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:asset.asset.report,name:0
|
#: field:asset.asset.report,name:0
|
||||||
msgid "Year"
|
msgid "Year"
|
||||||
msgstr ""
|
msgstr "ปี"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: model:ir.model,name:account_asset.model_account_asset_depreciation_line
|
#: model:ir.model,name:account_asset.model_account_asset_depreciation_line
|
||||||
|
@ -693,7 +693,7 @@ msgid "Amount of Depreciation Lines"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: code:addons/account_asset/wizard/wizard_asset_compute.py:49
|
#: code:addons/account_asset/wizard/wizard_asset_compute.py:50
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Created Asset Moves"
|
msgid "Created Asset Moves"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -701,7 +701,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.depreciation.line,sequence:0
|
#: field:account.asset.depreciation.line,sequence:0
|
||||||
msgid "Sequence"
|
msgid "Sequence"
|
||||||
msgstr ""
|
msgstr "ลำดับ"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: help:account.asset.category,method_period:0
|
#: help:account.asset.category,method_period:0
|
||||||
|
@ -711,7 +711,7 @@ msgstr ""
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.history,date:0
|
#: field:account.asset.history,date:0
|
||||||
msgid "Date"
|
msgid "Date"
|
||||||
msgstr ""
|
msgstr "วันที่"
|
||||||
|
|
||||||
#. module: account_asset
|
#. module: account_asset
|
||||||
#: field:account.asset.asset,method_number:0
|
#: field:account.asset.asset,method_number:0
|
||||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
"PO-Revision-Date: 2012-06-13 17:16+0000\n"
|
"PO-Revision-Date: 2013-07-30 22:29+0000\n"
|
||||||
"Last-Translator: Akira Hiyama <Unknown>\n"
|
"Last-Translator: Masaki Yamaya <Unknown>\n"
|
||||||
"Language-Team: Japanese <ja@li.org>\n"
|
"Language-Team: Japanese <ja@li.org>\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-03-16 05:34+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-31 05:16+0000\n"
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
"X-Generator: Launchpad (build 16718)\n"
|
||||||
|
|
||||||
#. module: account_budget
|
#. module: account_budget
|
||||||
#: view:account.budget.analytic:0
|
#: view:account.budget.analytic:0
|
||||||
|
@ -418,7 +418,7 @@ msgstr "からの分析"
|
||||||
#. module: account_budget
|
#. module: account_budget
|
||||||
#: view:crossovered.budget:0
|
#: view:crossovered.budget:0
|
||||||
msgid "Draft Budgets"
|
msgid "Draft Budgets"
|
||||||
msgstr "ドラフト予算"
|
msgstr "予算案"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
#~ msgid "The General Budget '%s' has no Accounts!"
|
#~ msgid "The General Budget '%s' has no Accounts!"
|
||||||
|
|
|
@ -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 ""
|
|
@ -8,19 +8,19 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
"PO-Revision-Date: 2010-12-21 14:22+0000\n"
|
"PO-Revision-Date: 2013-06-30 16:08+0000\n"
|
||||||
"Last-Translator: OpenERP Administrators <Unknown>\n"
|
"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n"
|
||||||
"Language-Team: Vietnamese <vi@li.org>\n"
|
"Language-Team: Vietnamese <vi@li.org>\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-03-16 05:42+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-01 05:14+0000\n"
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
#. module: account_cancel
|
#. module: account_cancel
|
||||||
#: view:account.invoice:0
|
#: view:account.invoice:0
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr "Hủy bỏ"
|
||||||
|
|
||||||
#~ msgid "Account Cancel"
|
#~ msgid "Account Cancel"
|
||||||
#~ msgstr "Hủy bỏ Tài khoản"
|
#~ msgstr "Hủy bỏ Tài khoản"
|
||||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
"Project-Id-Version: OpenERP Server 5.0.0\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-04-26 16:01+0000\n"
|
"PO-Revision-Date: 2013-07-10 09:54+0000\n"
|
||||||
"Last-Translator: Els Van Vossel (Agaplan) <Unknown>\n"
|
"Last-Translator: Els Van Vossel (Agaplan) <Unknown>\n"
|
||||||
"Language-Team: Els Van Vossel\n"
|
"Language-Team: Els Van Vossel\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-04-27 05:44+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-11 05:17+0000\n"
|
||||||
"X-Generator: Launchpad (build 16580)\n"
|
"X-Generator: Launchpad (build 16696)\n"
|
||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
|
@ -28,7 +28,7 @@ msgid "account.config.settings"
|
||||||
msgstr "account.config.settings"
|
msgstr "account.config.settings"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:369
|
#: code:addons/account_voucher/account_voucher.py:417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Write-Off"
|
msgid "Write-Off"
|
||||||
msgstr "Afschrijving"
|
msgstr "Afschrijving"
|
||||||
|
@ -132,7 +132,7 @@ msgid "Voucher Statistics"
|
||||||
msgstr "Boekingsstatistieken"
|
msgstr "Boekingsstatistieken"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1547
|
#: code:addons/account_voucher/account_voucher.py:1641
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can not change the journal as you already reconciled some statement "
|
"You can not change the journal as you already reconciled some statement "
|
||||||
|
@ -233,8 +233,8 @@ msgid "Journal Item"
|
||||||
msgstr "Boekingslijn"
|
msgstr "Boekingslijn"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:508
|
#: code:addons/account_voucher/account_voucher.py:558
|
||||||
#: code:addons/account_voucher/account_voucher.py:981
|
#: code:addons/account_voucher/account_voucher.py:1073
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Error!"
|
msgid "Error!"
|
||||||
msgstr "Fout"
|
msgstr "Fout"
|
||||||
|
@ -261,7 +261,7 @@ msgid "Cancelled"
|
||||||
msgstr "Geannuleerd"
|
msgstr "Geannuleerd"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1153
|
#: code:addons/account_voucher/account_voucher.py:1249
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"You have to configure account base code and account tax code on the '%s' tax!"
|
"You have to configure account base code and account tax code on the '%s' tax!"
|
||||||
|
@ -313,7 +313,7 @@ msgid "Tax"
|
||||||
msgstr "Btw"
|
msgstr "Btw"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:879
|
#: code:addons/account_voucher/account_voucher.py:971
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Invalid Action!"
|
msgid "Invalid Action!"
|
||||||
msgstr "Ongeldige actie"
|
msgstr "Ongeldige actie"
|
||||||
|
@ -366,10 +366,10 @@ msgid "Import Invoices"
|
||||||
msgstr "Facturen importeren"
|
msgstr "Facturen importeren"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1112
|
#: code:addons/account_voucher/account_voucher.py:1208
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Wrong voucher line"
|
msgid "Wrong voucher line"
|
||||||
msgstr ""
|
msgstr "Verkeerde betalingsregel"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: selection:account.voucher,pay_now:0
|
#: selection:account.voucher,pay_now:0
|
||||||
|
@ -385,7 +385,7 @@ msgid "Receipt"
|
||||||
msgstr "Reçu"
|
msgstr "Reçu"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1018
|
#: code:addons/account_voucher/account_voucher.py:1110
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"You should configure the 'Gain Exchange Rate Account' in the accounting "
|
"You should configure the 'Gain Exchange Rate Account' in the accounting "
|
||||||
|
@ -409,7 +409,7 @@ msgstr "Periode"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: view:account.voucher:0
|
#: view:account.voucher:0
|
||||||
#: code:addons/account_voucher/account_voucher.py:211
|
#: code:addons/account_voucher/account_voucher.py:231
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Supplier"
|
msgid "Supplier"
|
||||||
msgstr "Leverancier"
|
msgstr "Leverancier"
|
||||||
|
@ -430,7 +430,7 @@ msgid "Debit"
|
||||||
msgstr "Debet"
|
msgstr "Debet"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1547
|
#: code:addons/account_voucher/account_voucher.py:1641
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Unable to change journal !"
|
msgid "Unable to change journal !"
|
||||||
msgstr "Het dagboek kan niet worden gewijzigd"
|
msgstr "Het dagboek kan niet worden gewijzigd"
|
||||||
|
@ -469,6 +469,12 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" Klik hier als u een nieuwe leveranciersbetaling wilt maken.\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" Met OpenERP kunt u betalingen aan leveranciers opvolgen.\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: view:account.voucher:0
|
#: view:account.voucher:0
|
||||||
|
@ -536,7 +542,7 @@ msgid "Pay Invoice"
|
||||||
msgstr "Factuur betalen"
|
msgstr "Factuur betalen"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1153
|
#: code:addons/account_voucher/account_voucher.py:1249
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No Account Base Code and Account Tax Code!"
|
msgid "No Account Base Code and Account Tax Code!"
|
||||||
msgstr "Geen rekening voor basisvak en btw-vak"
|
msgstr "Geen rekening voor basisvak en btw-vak"
|
||||||
|
@ -590,15 +596,15 @@ msgid "To Review"
|
||||||
msgstr "Te controleren"
|
msgstr "Te controleren"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1025
|
#: code:addons/account_voucher/account_voucher.py:1120
|
||||||
#: code:addons/account_voucher/account_voucher.py:1039
|
#: code:addons/account_voucher/account_voucher.py:1134
|
||||||
#: code:addons/account_voucher/account_voucher.py:1194
|
#: code:addons/account_voucher/account_voucher.py:1286
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "change"
|
msgid "change"
|
||||||
msgstr "wijzigen"
|
msgstr "wijzigen"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1014
|
#: code:addons/account_voucher/account_voucher.py:1106
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"You should configure the 'Loss Exchange Rate Account' in the accounting "
|
"You should configure the 'Loss Exchange Rate Account' in the accounting "
|
||||||
|
@ -656,6 +662,7 @@ msgstr "Maand"
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: field:account.voucher,currency_id:0
|
#: field:account.voucher,currency_id:0
|
||||||
#: field:account.voucher.line,currency_id:0
|
#: field:account.voucher.line,currency_id:0
|
||||||
|
#: model:ir.model,name:account_voucher.model_res_currency
|
||||||
#: field:sale.receipt.report,currency_id:0
|
#: field:sale.receipt.report,currency_id:0
|
||||||
msgid "Currency"
|
msgid "Currency"
|
||||||
msgstr "Munt"
|
msgstr "Munt"
|
||||||
|
@ -699,7 +706,7 @@ msgid "Reconcile Payment Balance"
|
||||||
msgstr "Betalingssaldo afpunten"
|
msgstr "Betalingssaldo afpunten"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:975
|
#: code:addons/account_voucher/account_voucher.py:1067
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Configuration Error !"
|
msgid "Configuration Error !"
|
||||||
msgstr "Configuratiefout"
|
msgstr "Configuratiefout"
|
||||||
|
@ -764,7 +771,7 @@ msgid "October"
|
||||||
msgstr "Oktober"
|
msgstr "Oktober"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:976
|
#: code:addons/account_voucher/account_voucher.py:1068
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please activate the sequence of selected journal !"
|
msgid "Please activate the sequence of selected journal !"
|
||||||
msgstr "Gelieve de nummering van het gekozen journaal te activeren."
|
msgstr "Gelieve de nummering van het gekozen journaal te activeren."
|
||||||
|
@ -844,7 +851,7 @@ msgid "Previous Payments ?"
|
||||||
msgstr "Vorige betalingen?"
|
msgstr "Vorige betalingen?"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1112
|
#: code:addons/account_voucher/account_voucher.py:1208
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The invoice you are willing to pay is not valid anymore."
|
msgid "The invoice you are willing to pay is not valid anymore."
|
||||||
msgstr "De factuur die u wilt betalen, is niet meer geldig."
|
msgstr "De factuur die u wilt betalen, is niet meer geldig."
|
||||||
|
@ -876,7 +883,7 @@ msgid "Active"
|
||||||
msgstr "Actief"
|
msgstr "Actief"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:982
|
#: code:addons/account_voucher/account_voucher.py:1074
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please define a sequence on the journal."
|
msgid "Please define a sequence on the journal."
|
||||||
msgstr "Gelieve een reeks in te stellen voor het journaal."
|
msgstr "Gelieve een reeks in te stellen voor het journaal."
|
||||||
|
@ -1004,7 +1011,7 @@ msgid "Journal Items"
|
||||||
msgstr "Boekingslijnen"
|
msgstr "Boekingslijnen"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:508
|
#: code:addons/account_voucher/account_voucher.py:558
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please define default credit/debit accounts on the journal \"%s\"."
|
msgid "Please define default credit/debit accounts on the journal \"%s\"."
|
||||||
msgstr "Stel een standaard debet-/creditrekening in voor journaal \"%s\"."
|
msgstr "Stel een standaard debet-/creditrekening in voor journaal \"%s\"."
|
||||||
|
@ -1221,7 +1228,7 @@ msgstr ""
|
||||||
"Het bedrag van het reçu moet gelijk zijn aan het bedrag op de uittreksellijn."
|
"Het bedrag van het reçu moet gelijk zijn aan het bedrag op de uittreksellijn."
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:879
|
#: code:addons/account_voucher/account_voucher.py:971
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Cannot delete voucher(s) which are already opened or paid."
|
msgid "Cannot delete voucher(s) which are already opened or paid."
|
||||||
msgstr "Een openstaand of betaald reçu kan niet meer worden verwijderd."
|
msgstr "Een openstaand of betaald reçu kan niet meer worden verwijderd."
|
||||||
|
@ -1284,8 +1291,8 @@ msgid "Status <b>changed</b>"
|
||||||
msgstr "Status <b>vgewijzigd</b>"
|
msgstr "Status <b>vgewijzigd</b>"
|
||||||
|
|
||||||
#. module: account_voucher
|
#. module: account_voucher
|
||||||
#: code:addons/account_voucher/account_voucher.py:1014
|
#: code:addons/account_voucher/account_voucher.py:1106
|
||||||
#: code:addons/account_voucher/account_voucher.py:1018
|
#: code:addons/account_voucher/account_voucher.py:1110
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Insufficient Configuration!"
|
msgid "Insufficient Configuration!"
|
||||||
msgstr "Niet volledig geconfigureerd"
|
msgstr "Niet volledig geconfigureerd"
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
automatically based on your activities.
|
automatically based on your activities.
|
||||||
</p>
|
</p>
|
||||||
<div class="oe_centeralign oe_websiteonly">
|
<div class="oe_centeralign oe_websiteonly">
|
||||||
<a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a>
|
<a href="http://www.openerp.com/start?app=account_voucher" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -42,7 +42,7 @@ class Controller(http.Controller):
|
||||||
}
|
}
|
||||||
return config
|
return config
|
||||||
|
|
||||||
@http.route('/auth_signup/retrieve', type='json', auth="user")
|
@http.route('/auth_signup/retrieve', type='json', auth="none")
|
||||||
def retrieve(self, dbname, token):
|
def retrieve(self, dbname, token):
|
||||||
""" retrieve the user info (name, login or email) corresponding to a signup token """
|
""" retrieve the user info (name, login or email) corresponding to a signup token """
|
||||||
registry = RegistryManager.get(dbname)
|
registry = RegistryManager.get(dbname)
|
||||||
|
@ -51,7 +51,7 @@ class Controller(http.Controller):
|
||||||
user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token)
|
user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token)
|
||||||
return user_info
|
return user_info
|
||||||
|
|
||||||
@http.route('/auth_signup/signup', type='json', auth="user")
|
@http.route('/auth_signup/signup', type='json', auth="none")
|
||||||
def signup(self, dbname, token, **values):
|
def signup(self, dbname, token, **values):
|
||||||
""" sign up a user (new or existing)"""
|
""" sign up a user (new or existing)"""
|
||||||
try:
|
try:
|
||||||
|
@ -66,7 +66,7 @@ class Controller(http.Controller):
|
||||||
res_users = registry.get('res.users')
|
res_users = registry.get('res.users')
|
||||||
res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
|
res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
|
||||||
|
|
||||||
@http.route('/auth_signup/reset_password', type='json', auth="user")
|
@http.route('/auth_signup/reset_password', type='json', auth="none")
|
||||||
def reset_password(self, dbname, login):
|
def reset_password(self, dbname, login):
|
||||||
""" retrieve user, and perform reset password """
|
""" retrieve user, and perform reset password """
|
||||||
registry = RegistryManager.get(dbname)
|
registry = RegistryManager.get(dbname)
|
||||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
"PO-Revision-Date: 2013-04-16 04:33+0000\n"
|
"PO-Revision-Date: 2013-07-02 08:11+0000\n"
|
||||||
"Last-Translator: Key <key.diagram@gmail.com>\n"
|
"Last-Translator: DWXXX <Unknown>\n"
|
||||||
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
|
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\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-04-17 05:15+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-03 05:14+0000\n"
|
||||||
"X-Generator: Launchpad (build 16567)\n"
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: field:res.partner,signup_type:0
|
#: field:res.partner,signup_type:0
|
||||||
|
@ -29,7 +29,7 @@ msgstr "允许外部用户登录"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
|
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:19
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Confirm Password"
|
msgid "Confirm Password"
|
||||||
msgstr "确认密码"
|
msgstr "确认密码"
|
||||||
|
@ -37,7 +37,7 @@ msgstr "确认密码"
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: help:base.config.settings,auth_signup_uninvited:0
|
#: help:base.config.settings,auth_signup_uninvited:0
|
||||||
msgid "If unchecked, only invited users may sign up."
|
msgid "If unchecked, only invited users may sign up."
|
||||||
msgstr ""
|
msgstr "如果不勾选,只有被邀请用户才能注册。"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: model:ir.model,name:auth_signup.model_base_config_settings
|
#: model:ir.model,name:auth_signup.model_base_config_settings
|
||||||
|
@ -45,15 +45,15 @@ msgid "base.config.settings"
|
||||||
msgstr "base.config.settings"
|
msgstr "base.config.settings"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: code:addons/auth_signup/res_users.py:265
|
#: code:addons/auth_signup/res_users.py:266
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Cannot send email: user has no email address."
|
msgid "Cannot send email: user has no email address."
|
||||||
msgstr ""
|
msgstr "无法发送邮件:用户邮件地址为空。"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
|
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27
|
||||||
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:28
|
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:31
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Reset password"
|
msgid "Reset password"
|
||||||
msgstr "重设密码"
|
msgstr "重设密码"
|
||||||
|
@ -70,7 +70,7 @@ msgstr "重置密码"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:117
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:120
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please enter a password and confirm it."
|
msgid "Please enter a password and confirm it."
|
||||||
msgstr "请输入密码并确认。"
|
msgstr "请输入密码并确认。"
|
||||||
|
@ -78,12 +78,12 @@ msgstr "请输入密码并确认。"
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: view:res.users:0
|
#: view:res.users:0
|
||||||
msgid "Send an email to the user to (re)set their password."
|
msgid "Send an email to the user to (re)set their password."
|
||||||
msgstr ""
|
msgstr "向用户发送重置密码邮件。"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
|
|
||||||
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:26
|
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:26
|
||||||
|
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:29
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Sign Up"
|
msgid "Sign Up"
|
||||||
msgstr "注册"
|
msgstr "注册"
|
||||||
|
@ -119,10 +119,10 @@ msgstr ""
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:111
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:114
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please enter a name."
|
msgid "Please enter a name."
|
||||||
msgstr ""
|
msgstr "请输入名字"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: model:ir.model,name:auth_signup.model_res_users
|
#: model:ir.model,name:auth_signup.model_res_users
|
||||||
|
@ -136,10 +136,10 @@ msgstr "注册 URL"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:114
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:117
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please enter a username."
|
msgid "Please enter a username."
|
||||||
msgstr ""
|
msgstr "请输入您的用户名"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: selection:res.users,state:0
|
#: selection:res.users,state:0
|
||||||
|
@ -147,7 +147,7 @@ msgid "Active"
|
||||||
msgstr "启用"
|
msgstr "启用"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: code:addons/auth_signup/res_users.py:269
|
#: code:addons/auth_signup/res_users.py:270
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot send email: no outgoing email server configured.\n"
|
"Cannot send email: no outgoing email server configured.\n"
|
||||||
|
@ -170,10 +170,10 @@ msgstr "姓名"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:170
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:173
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please enter a username or email address."
|
msgid "Please enter a username or email address."
|
||||||
msgstr ""
|
msgstr "请输入用户名和邮件地址"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: selection:res.users,state:0
|
#: selection:res.users,state:0
|
||||||
|
@ -199,7 +199,7 @@ msgstr ""
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
|
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Log in"
|
msgid "Log in"
|
||||||
msgstr "登录"
|
msgstr "登录"
|
||||||
|
@ -211,35 +211,35 @@ msgstr "注册令牌( Token )是有效的"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:108
|
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:111
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:111
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:114
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:114
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:117
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:117
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:120
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:120
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:167
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:123
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:170
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:170
|
||||||
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:173
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Login"
|
msgid "Login"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:94
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:97
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Invalid signup token"
|
msgid "Invalid signup token"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:120
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:123
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Passwords do not match; please retype them."
|
msgid "Passwords do not match; please retype them."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:108
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:111
|
||||||
#: code:addons/auth_signup/static/src/js/auth_signup.js:167
|
#: code:addons/auth_signup/static/src/js/auth_signup.js:170
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No database selected !"
|
msgid "No database selected !"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -256,7 +256,7 @@ msgstr ""
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#. openerp-web
|
#. openerp-web
|
||||||
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27
|
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Back to Login"
|
msgid "Back to Login"
|
||||||
msgstr "返回登录页面"
|
msgstr "返回登录页面"
|
||||||
|
@ -266,12 +266,12 @@ msgstr "返回登录页面"
|
||||||
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
|
#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Sign up"
|
msgid "Sign up"
|
||||||
msgstr ""
|
msgstr "注册"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: model:ir.model,name:auth_signup.model_res_partner
|
#: model:ir.model,name:auth_signup.model_res_partner
|
||||||
msgid "Partner"
|
msgid "Partner"
|
||||||
msgstr "业务伙伴"
|
msgstr "合作伙伴"
|
||||||
|
|
||||||
#. module: auth_signup
|
#. module: auth_signup
|
||||||
#: field:res.partner,signup_token:0
|
#: field:res.partner,signup_token:0
|
||||||
|
|
|
@ -1510,7 +1510,7 @@ rule or repeating pattern of time to exclude from the recurring rule."),
|
||||||
continue
|
continue
|
||||||
if r['class']=='private':
|
if r['class']=='private':
|
||||||
for f in r.keys():
|
for f in r.keys():
|
||||||
if f not in ('id','date','date_deadline','duration','user_id','state'):
|
if f not in ('id','date','date_deadline','duration','user_id','state','interval','count'):
|
||||||
if isinstance(r[f], list):
|
if isinstance(r[f], list):
|
||||||
r[f] = []
|
r[f] = []
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
"PO-Revision-Date: 2012-11-28 16:50+0000\n"
|
"PO-Revision-Date: 2013-06-29 05:34+0000\n"
|
||||||
"Last-Translator: Joshua Jan(SHINEIT) <popkar77@gmail.com>\n"
|
"Last-Translator: David.Xu <xzxyxu@gmail.com>\n"
|
||||||
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
|
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\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-03-16 05:45+0000\n"
|
"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n"
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: selection:calendar.alarm,trigger_related:0
|
#: selection:calendar.alarm,trigger_related:0
|
||||||
|
@ -42,7 +42,7 @@ msgstr "这属性定义循环日程的日期/时间异常列表。"
|
||||||
#: selection:calendar.todo,rrule_type:0
|
#: selection:calendar.todo,rrule_type:0
|
||||||
#: selection:crm.meeting,rrule_type:0
|
#: selection:crm.meeting,rrule_type:0
|
||||||
msgid "Week(s)"
|
msgid "Week(s)"
|
||||||
msgstr ""
|
msgstr "周"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: field:calendar.event,we:0
|
#: field:calendar.event,we:0
|
||||||
|
@ -248,7 +248,7 @@ msgid "To"
|
||||||
msgstr "到"
|
msgstr "到"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: code:addons/base_calendar/base_calendar.py:1260
|
#: code:addons/base_calendar/base_calendar.py:1262
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Error!"
|
msgid "Error!"
|
||||||
msgstr "错误!"
|
msgstr "错误!"
|
||||||
|
@ -300,7 +300,7 @@ msgstr "与会者的参与状况"
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: view:crm.meeting:0
|
#: view:crm.meeting:0
|
||||||
msgid "Mail To"
|
msgid "Mail To"
|
||||||
msgstr ""
|
msgstr "收信人"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: field:crm.meeting,name:0
|
#: field:crm.meeting,name:0
|
||||||
|
@ -361,9 +361,9 @@ msgstr "保存复杂的摘要(消息数量,……等)。为了插入到看板视
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: code:addons/base_calendar/base_calendar.py:399
|
#: code:addons/base_calendar/base_calendar.py:399
|
||||||
#: code:addons/base_calendar/base_calendar.py:441
|
#: code:addons/base_calendar/base_calendar.py:441
|
||||||
#: code:addons/base_calendar/base_calendar.py:1013
|
|
||||||
#: code:addons/base_calendar/base_calendar.py:1015
|
#: code:addons/base_calendar/base_calendar.py:1015
|
||||||
#: code:addons/base_calendar/base_calendar.py:1460
|
#: code:addons/base_calendar/base_calendar.py:1017
|
||||||
|
#: code:addons/base_calendar/base_calendar.py:1462
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Warning!"
|
msgid "Warning!"
|
||||||
msgstr "警告!"
|
msgstr "警告!"
|
||||||
|
@ -478,7 +478,7 @@ msgstr "日期"
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: field:crm.meeting,message_follower_ids:0
|
#: field:crm.meeting,message_follower_ids:0
|
||||||
msgid "Followers"
|
msgid "Followers"
|
||||||
msgstr ""
|
msgstr "关注者"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: field:calendar.event,location:0
|
#: field:calendar.event,location:0
|
||||||
|
@ -522,7 +522,7 @@ msgid "Event alarm information"
|
||||||
msgstr "事件提醒信息"
|
msgstr "事件提醒信息"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: code:addons/base_calendar/base_calendar.py:1015
|
#: code:addons/base_calendar/base_calendar.py:1017
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Count cannot be negative or 0."
|
msgid "Count cannot be negative or 0."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -530,21 +530,21 @@ msgstr ""
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: field:crm.meeting,create_date:0
|
#: field:crm.meeting,create_date:0
|
||||||
msgid "Creation Date"
|
msgid "Creation Date"
|
||||||
msgstr ""
|
msgstr "创建日期"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: view:crm.meeting:0
|
#: view:crm.meeting:0
|
||||||
#: model:ir.model,name:base_calendar.model_crm_meeting
|
#: model:ir.model,name:base_calendar.model_crm_meeting
|
||||||
#: model:res.request.link,name:base_calendar.request_link_meeting
|
#: model:res.request.link,name:base_calendar.request_link_meeting
|
||||||
msgid "Meeting"
|
msgid "Meeting"
|
||||||
msgstr ""
|
msgstr "会议"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: selection:calendar.event,rrule_type:0
|
#: selection:calendar.event,rrule_type:0
|
||||||
#: selection:calendar.todo,rrule_type:0
|
#: selection:calendar.todo,rrule_type:0
|
||||||
#: selection:crm.meeting,rrule_type:0
|
#: selection:crm.meeting,rrule_type:0
|
||||||
msgid "Month(s)"
|
msgid "Month(s)"
|
||||||
msgstr ""
|
msgstr "月"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: view:calendar.event:0
|
#: view:calendar.event:0
|
||||||
|
@ -566,7 +566,7 @@ msgstr "Caldav 服务的URL"
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: model:ir.model,name:base_calendar.model_mail_wizard_invite
|
#: model:ir.model,name:base_calendar.model_mail_wizard_invite
|
||||||
msgid "Invite wizard"
|
msgid "Invite wizard"
|
||||||
msgstr ""
|
msgstr "邀请向导"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: selection:calendar.event,month_list:0
|
#: selection:calendar.event,month_list:0
|
||||||
|
@ -590,7 +590,7 @@ msgstr "周四"
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: view:crm.meeting:0
|
#: view:crm.meeting:0
|
||||||
msgid "Meeting Details"
|
msgid "Meeting Details"
|
||||||
msgstr ""
|
msgstr "会议详情"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: field:calendar.attendee,child_ids:0
|
#: field:calendar.attendee,child_ids:0
|
||||||
|
@ -601,21 +601,21 @@ msgstr "代表人"
|
||||||
#: code:addons/base_calendar/crm_meeting.py:102
|
#: code:addons/base_calendar/crm_meeting.py:102
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The following contacts have no email address :"
|
msgid "The following contacts have no email address :"
|
||||||
msgstr ""
|
msgstr "下列联系人没有电子邮件地址:"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: selection:calendar.event,rrule_type:0
|
#: selection:calendar.event,rrule_type:0
|
||||||
#: selection:calendar.todo,rrule_type:0
|
#: selection:calendar.todo,rrule_type:0
|
||||||
#: selection:crm.meeting,rrule_type:0
|
#: selection:crm.meeting,rrule_type:0
|
||||||
msgid "Year(s)"
|
msgid "Year(s)"
|
||||||
msgstr ""
|
msgstr "年"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: view:crm.meeting.type:0
|
#: view:crm.meeting.type:0
|
||||||
#: model:ir.actions.act_window,name:base_calendar.action_crm_meeting_type
|
#: model:ir.actions.act_window,name:base_calendar.action_crm_meeting_type
|
||||||
#: model:ir.ui.menu,name:base_calendar.menu_crm_meeting_type
|
#: model:ir.ui.menu,name:base_calendar.menu_crm_meeting_type
|
||||||
msgid "Meeting Types"
|
msgid "Meeting Types"
|
||||||
msgstr ""
|
msgstr "会议类型"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: field:calendar.event,create_date:0
|
#: field:calendar.event,create_date:0
|
||||||
|
@ -633,7 +633,7 @@ msgstr "全员可见"
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: view:crm.meeting:0
|
#: view:crm.meeting:0
|
||||||
msgid "hours"
|
msgid "hours"
|
||||||
msgstr ""
|
msgstr "小时"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: field:calendar.attendee,partner_id:0
|
#: field:calendar.attendee,partner_id:0
|
||||||
|
@ -655,7 +655,7 @@ msgstr "重复直到"
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: view:crm.meeting:0
|
#: view:crm.meeting:0
|
||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr ""
|
msgstr "选项"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: selection:calendar.event,byday:0
|
#: selection:calendar.event,byday:0
|
||||||
|
@ -694,7 +694,7 @@ msgstr "周二"
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: field:crm.meeting,categ_ids:0
|
#: field:crm.meeting,categ_ids:0
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr ""
|
msgstr "标签"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: view:calendar.event:0
|
#: view:calendar.event:0
|
||||||
|
@ -741,7 +741,7 @@ msgid "Declined"
|
||||||
msgstr "已拒绝"
|
msgstr "已拒绝"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: code:addons/base_calendar/base_calendar.py:1460
|
#: code:addons/base_calendar/base_calendar.py:1462
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Group by date is not supported, use the calendar view instead."
|
msgid "Group by date is not supported, use the calendar view instead."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1200,7 +1200,7 @@ msgid "Select Weekdays"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: code:addons/base_calendar/base_calendar.py:1519
|
#: code:addons/base_calendar/base_calendar.py:1521
|
||||||
#: selection:calendar.attendee,availability:0
|
#: selection:calendar.attendee,availability:0
|
||||||
#: selection:calendar.event,show_as:0
|
#: selection:calendar.event,show_as:0
|
||||||
#: selection:calendar.todo,show_as:0
|
#: selection:calendar.todo,show_as:0
|
||||||
|
@ -1453,7 +1453,7 @@ msgid "Weekday"
|
||||||
msgstr "工作日"
|
msgstr "工作日"
|
||||||
|
|
||||||
#. module: base_calendar
|
#. module: base_calendar
|
||||||
#: code:addons/base_calendar/base_calendar.py:1013
|
#: code:addons/base_calendar/base_calendar.py:1015
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Interval cannot be negative."
|
msgid "Interval cannot be negative."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
|
@ -8,19 +8,19 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2012-12-03 16:03+0000\n"
|
"POT-Creation-Date: 2012-12-03 16:03+0000\n"
|
||||||
"PO-Revision-Date: 2011-07-20 09:55+0000\n"
|
"PO-Revision-Date: 2013-06-30 16:09+0000\n"
|
||||||
"Last-Translator: OpenBMS JSC <Unknown>\n"
|
"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n"
|
||||||
"Language-Team: Vietnamese <vi@li.org>\n"
|
"Language-Team: Vietnamese <vi@li.org>\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-03-16 05:49+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-01 05:14+0000\n"
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
#. module: base_crypt
|
#. module: base_crypt
|
||||||
#: model:ir.model,name:base_crypt.model_res_users
|
#: model:ir.model,name:base_crypt.model_res_users
|
||||||
msgid "Users"
|
msgid "Users"
|
||||||
msgstr ""
|
msgstr "Người dùng"
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
#~ msgid "Error"
|
#~ msgid "Error"
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
# 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>."
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Vietnamese translation for openobject-addons
|
||||||
|
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
|
"PO-Revision-Date: 2013-06-30 16:10+0000\n"
|
||||||
|
"Last-Translator: Hung Tran <vanda6688@yahoo.com>\n"
|
||||||
|
"Language-Team: Vietnamese <vi@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-01 05:14+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
|
#. module: claim_from_delivery
|
||||||
|
#: view:stock.picking.out:0
|
||||||
|
msgid "Claims"
|
||||||
|
msgstr "Các khiếu nại"
|
||||||
|
|
||||||
|
#. module: claim_from_delivery
|
||||||
|
#: model:res.request.link,name:claim_from_delivery.request_link_claim_from_delivery
|
||||||
|
msgid "Delivery Order"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: claim_from_delivery
|
||||||
|
#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery
|
||||||
|
msgid "Claim From Delivery"
|
||||||
|
msgstr ""
|
|
@ -0,0 +1,37 @@
|
||||||
|
# Korean translation for openobject-addons
|
||||||
|
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
|
"PO-Revision-Date: 2013-06-28 09:32+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Korean <ko@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
|
#. module: contacts
|
||||||
|
#: model:ir.actions.act_window,help:contacts.action_contacts
|
||||||
|
msgid ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" Click to add a contact in your address book.\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" OpenERP helps you easily track all activities related to\n"
|
||||||
|
" a customer; discussions, history of business opportunities,\n"
|
||||||
|
" documents, etc.\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: contacts
|
||||||
|
#: model:ir.actions.act_window,name:contacts.action_contacts
|
||||||
|
#: model:ir.ui.menu,name:contacts.menu_contacts
|
||||||
|
msgid "Contacts"
|
||||||
|
msgstr "연락처"
|
|
@ -14,13 +14,7 @@
|
||||||
<field name="condition">True</field>
|
<field name="condition">True</field>
|
||||||
<field name="type">ir.actions.server</field>
|
<field name="type">ir.actions.server</field>
|
||||||
<field name="state">email</field>
|
<field name="state">email</field>
|
||||||
<field name="email">object.user_id.email</field>
|
<field name="template_id" ref="email_template_opportunity_reminder_mail"/>
|
||||||
<field name="subject">Reminder on Lead: [[object.id ]] [[object.partner_id and 'of ' +object.partner_id.name or '']]</field>
|
|
||||||
<field name="message">Warning unprocessed incoming lead is more than 5 day old.
|
|
||||||
Name: [[object.name ]]
|
|
||||||
ID: [[object.id ]]
|
|
||||||
Description: [[object.description]]
|
|
||||||
</field>
|
|
||||||
</record>
|
</record>
|
||||||
<record id="rule_set_reminder_lead" model="base.action.rule">
|
<record id="rule_set_reminder_lead" model="base.action.rule">
|
||||||
<field name="name">Set Auto Reminder on leads which are not open since 5 days.</field>
|
<field name="name">Set Auto Reminder on leads which are not open since 5 days.</field>
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from openerp.addons.base_status.base_stage import base_stage
|
|
||||||
import crm
|
import crm
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
@ -68,7 +67,7 @@ CRM_LEAD_PENDING_STATES = (
|
||||||
crm.AVAILABLE_STATES[4][0], # Pending
|
crm.AVAILABLE_STATES[4][0], # Pending
|
||||||
)
|
)
|
||||||
|
|
||||||
class crm_lead(base_stage, format_address, osv.osv):
|
class crm_lead(format_address, osv.osv):
|
||||||
""" CRM Lead Case """
|
""" CRM Lead Case """
|
||||||
_name = "crm.lead"
|
_name = "crm.lead"
|
||||||
_description = "Lead/Opportunity"
|
_description = "Lead/Opportunity"
|
||||||
|
@ -93,20 +92,6 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
context['empty_list_help_document_name'] = _("leads")
|
context['empty_list_help_document_name'] = _("leads")
|
||||||
return super(crm_lead, self).get_empty_list_help(cr, uid, help, context=context)
|
return super(crm_lead, self).get_empty_list_help(cr, uid, help, context=context)
|
||||||
|
|
||||||
def create(self, cr, uid, vals, context=None):
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if not vals.get('stage_id'):
|
|
||||||
ctx = context.copy()
|
|
||||||
if vals.get('section_id'):
|
|
||||||
ctx['default_section_id'] = vals['section_id']
|
|
||||||
if vals.get('type'):
|
|
||||||
ctx['default_type'] = vals['type']
|
|
||||||
vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx)
|
|
||||||
# context: no_log, because subtype already handle this
|
|
||||||
create_context = dict(context, mail_create_nolog=True)
|
|
||||||
return super(crm_lead, self).create(cr, uid, vals, context=create_context)
|
|
||||||
|
|
||||||
def _get_default_section_id(self, cr, uid, context=None):
|
def _get_default_section_id(self, cr, uid, context=None):
|
||||||
""" Gives default section by checking if present in the context """
|
""" Gives default section by checking if present in the context """
|
||||||
return self._resolve_section_id_from_context(cr, uid, context=context) or False
|
return self._resolve_section_id_from_context(cr, uid, context=context) or False
|
||||||
|
@ -126,8 +111,7 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
if type(context.get('default_section_id')) in (int, long):
|
if type(context.get('default_section_id')) in (int, long):
|
||||||
return context.get('default_section_id')
|
return context.get('default_section_id')
|
||||||
if isinstance(context.get('default_section_id'), basestring):
|
if isinstance(context.get('default_section_id'), basestring):
|
||||||
section_name = context['default_section_id']
|
section_ids = self.pool.get('crm.case.section').name_search(cr, uid, name=context['default_section_id'], context=context)
|
||||||
section_ids = self.pool.get('crm.case.section').name_search(cr, uid, name=section_name, context=context)
|
|
||||||
if len(section_ids) == 1:
|
if len(section_ids) == 1:
|
||||||
return int(section_ids[0][0])
|
return int(section_ids[0][0])
|
||||||
return None
|
return None
|
||||||
|
@ -326,8 +310,7 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'active': 1,
|
'active': 1,
|
||||||
'type': 'lead',
|
'type': 'lead',
|
||||||
'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c),
|
'user_id': lambda s, cr, uid, c: uid,
|
||||||
'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
|
|
||||||
'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
|
'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
|
||||||
'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
|
'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
|
||||||
'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),
|
||||||
|
@ -341,30 +324,29 @@ class crm_lead(base_stage, 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)
|
||||||
if not stage.on_change:
|
if not stage.on_change:
|
||||||
return {'value':{}}
|
return {'value': {}}
|
||||||
return {'value':{'probability': stage.probability}}
|
return {'value': {'probability': stage.probability}}
|
||||||
|
|
||||||
def on_change_partner(self, cr, uid, ids, partner_id, context=None):
|
def on_change_partner_id(self, cr, uid, ids, partner_id, context=None):
|
||||||
result = {}
|
|
||||||
values = {}
|
values = {}
|
||||||
if partner_id:
|
if partner_id:
|
||||||
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||||
values = {
|
values = {
|
||||||
'partner_name' : partner.name,
|
'partner_name': partner.name,
|
||||||
'street' : partner.street,
|
'street': partner.street,
|
||||||
'street2' : partner.street2,
|
'street2': partner.street2,
|
||||||
'city' : partner.city,
|
'city': partner.city,
|
||||||
'state_id' : partner.state_id and partner.state_id.id or False,
|
'state_id': partner.state_id and partner.state_id.id or False,
|
||||||
'country_id' : partner.country_id and partner.country_id.id or False,
|
'country_id': partner.country_id and partner.country_id.id or False,
|
||||||
'email_from' : partner.email,
|
'email_from': partner.email,
|
||||||
'phone' : partner.phone,
|
'phone': partner.phone,
|
||||||
'mobile' : partner.mobile,
|
'mobile': partner.mobile,
|
||||||
'fax' : partner.fax,
|
'fax': partner.fax,
|
||||||
}
|
}
|
||||||
return {'value' : values}
|
return {'value': values}
|
||||||
|
|
||||||
def on_change_user(self, cr, uid, ids, user_id, context=None):
|
def on_change_user(self, cr, uid, ids, user_id, context=None):
|
||||||
""" When changing the user, also set a section_id or restrict section id
|
""" When changing the user, also set a section_id or restrict section id
|
||||||
|
@ -405,7 +387,7 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
# collect all section_ids
|
# collect all section_ids
|
||||||
section_ids = []
|
section_ids = []
|
||||||
types = ['both']
|
types = ['both']
|
||||||
if not cases :
|
if not cases:
|
||||||
type = context.get('default_type')
|
type = context.get('default_type')
|
||||||
types += [type]
|
types += [type]
|
||||||
if section_id:
|
if section_id:
|
||||||
|
@ -433,24 +415,18 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
return stage_ids[0]
|
return stage_ids[0]
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def case_cancel(self, cr, uid, ids, context=None):
|
def stage_set(self, cr, uid, ids, stage_id, context=None):
|
||||||
""" Overrides case_cancel from base_stage to set probability """
|
""" Set the new stage. Now just writes the stage.
|
||||||
res = super(crm_lead, self).case_cancel(cr, uid, ids, context=context)
|
TDE TODO: remove me when removing state
|
||||||
self.write(cr, uid, ids, {'probability' : 0.0}, context=context)
|
"""
|
||||||
return res
|
return self.write(cr, uid, ids, {'stage_id': stage_id}, context=context)
|
||||||
|
|
||||||
def case_reset(self, cr, uid, ids, context=None):
|
|
||||||
""" Overrides case_reset from base_stage to set probability """
|
|
||||||
res = super(crm_lead, self).case_reset(cr, uid, ids, context=context)
|
|
||||||
self.write(cr, uid, ids, {'probability': 0.0}, context=context)
|
|
||||||
return res
|
|
||||||
|
|
||||||
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)], context=context)
|
||||||
if stage_id:
|
if stage_id:
|
||||||
self.case_set(cr, uid, [lead.id], values_to_update={'probability': 0.0}, new_stage_id=stage_id, context=context)
|
self.stage_set(cr, uid, [lead.id], stage_id, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def case_mark_won(self, cr, uid, ids, context=None):
|
def case_mark_won(self, cr, uid, ids, context=None):
|
||||||
|
@ -458,7 +434,21 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
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)], context=context)
|
||||||
if stage_id:
|
if stage_id:
|
||||||
self.case_set(cr, uid, [lead.id], values_to_update={'probability': 100.0}, new_stage_id=stage_id, context=context)
|
self.stage_set(cr, uid, [lead.id], stage_id, context=context)
|
||||||
|
return True
|
||||||
|
|
||||||
|
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
|
return True
|
||||||
|
|
||||||
def set_priority(self, cr, uid, ids, priority):
|
def set_priority(self, cr, uid, ids, priority):
|
||||||
|
@ -631,7 +621,7 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
attachment.write(values)
|
attachment.write(values)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def merge_opportunity(self, cr, uid, ids, context=None):
|
def merge_opportunity(self, cr, uid, ids, user_id=False, section_id=False, context=None):
|
||||||
"""
|
"""
|
||||||
Different cases of merge:
|
Different cases of merge:
|
||||||
- merge leads together = 1 new lead
|
- merge leads together = 1 new lead
|
||||||
|
@ -665,6 +655,11 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
fields = list(CRM_LEAD_FIELDS_TO_MERGE)
|
fields = list(CRM_LEAD_FIELDS_TO_MERGE)
|
||||||
merged_data = self._merge_data(cr, uid, ids, highest, fields, context=context)
|
merged_data = self._merge_data(cr, uid, ids, highest, fields, context=context)
|
||||||
|
|
||||||
|
if user_id:
|
||||||
|
merged_data['user_id'] = user_id
|
||||||
|
if section_id:
|
||||||
|
merged_data['section_id'] = section_id
|
||||||
|
|
||||||
# Merge messages and attachements into the first opportunity
|
# Merge messages and attachements into the first opportunity
|
||||||
self._merge_opportunity_history(cr, uid, highest.id, tail_opportunities, context=context)
|
self._merge_opportunity_history(cr, uid, highest.id, tail_opportunities, context=context)
|
||||||
self._merge_opportunity_attachments(cr, uid, highest.id, tail_opportunities, context=context)
|
self._merge_opportunity_attachments(cr, uid, highest.id, tail_opportunities, context=context)
|
||||||
|
@ -932,49 +927,23 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def write(self, cr, uid, ids, vals, context=None):
|
def create(self, cr, uid, vals, context=None):
|
||||||
if vals.get('stage_id') and not vals.get('probability'):
|
|
||||||
# change probability of lead(s) if required by stage
|
|
||||||
stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context)
|
|
||||||
if stage.on_change:
|
|
||||||
vals['probability'] = stage.probability
|
|
||||||
return super(crm_lead, self).write(cr, uid, ids, vals, context=context)
|
|
||||||
|
|
||||||
def new_mail_send(self, cr, uid, ids, context=None):
|
|
||||||
'''
|
|
||||||
This function opens a window to compose an email, with the edi sale template message loaded by default
|
|
||||||
'''
|
|
||||||
assert len(ids) == 1, 'This option should only be used for a single id at a time.'
|
|
||||||
ir_model_data = self.pool.get('ir.model.data')
|
|
||||||
try:
|
|
||||||
template_id = ir_model_data.get_object_reference(cr, uid, 'crm', 'email_template_opportunity_mail')[1]
|
|
||||||
except ValueError:
|
|
||||||
template_id = False
|
|
||||||
try:
|
|
||||||
compose_form_id = ir_model_data.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')[1]
|
|
||||||
except ValueError:
|
|
||||||
compose_form_id = False
|
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
ctx = context.copy()
|
if vals.get('type') and not context.get('default_type'):
|
||||||
ctx.update({
|
context['default_type'] = vals.get('type')
|
||||||
'default_model': 'crm.lead',
|
if vals.get('section_id') and not context.get('default_section_id'):
|
||||||
'default_res_id': ids[0],
|
context['default_section_id'] = vals.get('section_id')
|
||||||
'default_use_template': bool(template_id),
|
|
||||||
'default_template_id': template_id,
|
# context: no_log, because subtype already handle this
|
||||||
'default_composition_mode': 'comment',
|
create_context = dict(context, mail_create_nolog=True)
|
||||||
})
|
return super(crm_lead, self).create(cr, uid, vals, context=create_context)
|
||||||
return {
|
|
||||||
'name': _('Compose Email'),
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
'type': 'ir.actions.act_window',
|
if vals.get('stage_id') and not vals.get('probability'):
|
||||||
'view_type': 'form',
|
onchange_stage_values = self.onchange_stage_id(cr, uid, ids, vals.get('stage_id'), context=context)['value']
|
||||||
'view_mode': 'form',
|
vals.update(onchange_stage_values)
|
||||||
'res_model': 'mail.compose.message',
|
return super(crm_lead, self).write(cr, uid, ids, vals, context=context)
|
||||||
'views': [(compose_form_id, 'form')],
|
|
||||||
'view_id': compose_form_id,
|
|
||||||
'target': 'new',
|
|
||||||
'context': ctx,
|
|
||||||
}
|
|
||||||
|
|
||||||
# ----------------------------------------
|
# ----------------------------------------
|
||||||
# Mail Gateway
|
# Mail Gateway
|
||||||
|
@ -1024,7 +993,7 @@ class crm_lead(base_stage, format_address, osv.osv):
|
||||||
'user_id': False,
|
'user_id': False,
|
||||||
}
|
}
|
||||||
if msg.get('author_id'):
|
if msg.get('author_id'):
|
||||||
defaults.update(self.on_change_partner(cr, uid, None, msg.get('author_id'), context=context)['value'])
|
defaults.update(self.on_change_partner_id(cr, uid, None, msg.get('author_id'), context=context)['value'])
|
||||||
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES):
|
||||||
defaults['priority'] = msg.get('priority')
|
defaults['priority'] = msg.get('priority')
|
||||||
defaults.update(custom_values)
|
defaults.update(custom_values)
|
||||||
|
|
|
@ -220,6 +220,20 @@
|
||||||
<field name="email_to">${not object.partner_id and object.email_from}</field>
|
<field name="email_to">${not object.partner_id and object.email_from}</field>
|
||||||
<field name="body_html"></field>
|
<field name="body_html"></field>
|
||||||
</record>
|
</record>
|
||||||
|
<record id="email_template_opportunity_reminder_mail" model="email.template">
|
||||||
|
<field name="name">Reminder to User</field>
|
||||||
|
<field name="model_id" ref="crm.model_crm_lead"/>
|
||||||
|
<field name="auto_delete" eval="True"/>
|
||||||
|
<field name="email_from">admin@example.com</field>
|
||||||
|
<field name="email_to">${object.user_id != False and object.user_id.email}</field>
|
||||||
|
<field name="subject">Reminder on Lead: ${object.id} from ${object.partner_id != False and object.partner_id.name or object.contact_name}</field>
|
||||||
|
<field name="body_html"><![CDATA[<p>This opportunity did not have any activity since at least 5 days. Here are some details:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Name: ${object.name}</li>
|
||||||
|
<li>ID: ${object.id}</li>
|
||||||
|
<li>Description: ${object.description}</field></li>
|
||||||
|
</ul>]]></field>
|
||||||
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -263,13 +263,6 @@ Andrew</field>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Call Function to Cancel the leads (set as Dead) -->
|
|
||||||
<function model="crm.lead" name="case_cancel"
|
|
||||||
eval="[ ref('crm_case_12'), ref('crm_case_7'),
|
|
||||||
ref('crm_case_3'), ref('crm_case_8')],
|
|
||||||
{'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'),
|
||||||
|
|
|
@ -95,10 +95,6 @@
|
||||||
<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"/>
|
states="draft,open,pending" help="Convert to Opportunity" class="oe_highlight"/>
|
||||||
<button name="case_reset" string="Reset" type="object"
|
|
||||||
states="cancel"/>
|
|
||||||
<button name="case_cancel" string="Cancel Case" type="object"
|
|
||||||
states="draft,open,pending"/>
|
|
||||||
<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)"/>
|
||||||
|
@ -118,7 +114,7 @@
|
||||||
<field name="partner_name" string="Company Name"/>
|
<field name="partner_name" string="Company Name"/>
|
||||||
<!-- Preload all the partner's information -->
|
<!-- Preload all the partner's information -->
|
||||||
<field name="partner_id" string="Customer"
|
<field name="partner_id" string="Customer"
|
||||||
on_change="on_change_partner(partner_id)"
|
on_change="on_change_partner_id(partner_id)"
|
||||||
options='{"create_name_field": "name"}'
|
options='{"create_name_field": "name"}'
|
||||||
context="{'default_name': contact_name, 'default_street': street, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_function': function, 'default_phone': phone, 'default_mobile': mobile, 'default_fax': fax, 'default_email': email_from, 'default_user_id': user_id, 'default_section_id': section_id}"/>
|
context="{'default_name': contact_name, 'default_street': street, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_function': function, 'default_phone': phone, 'default_mobile': mobile, 'default_fax': fax, 'default_email': email_from, 'default_user_id': user_id, 'default_section_id': section_id}"/>
|
||||||
<label for="street" string="Address"/>
|
<label for="street" string="Address"/>
|
||||||
|
@ -412,7 +408,7 @@
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<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)"
|
||||||
string="Customer"
|
string="Customer"
|
||||||
context="{'default_name': partner_name, 'default_email': email_from, 'default_phone': phone}"/>
|
context="{'default_name': partner_name, 'default_email': email_from, 'default_phone': phone}"/>
|
||||||
<field name="email_from" string="Email"/>
|
<field name="email_from" string="Email"/>
|
||||||
|
@ -617,7 +613,7 @@
|
||||||
<field name="state">code</field>
|
<field name="state">code</field>
|
||||||
<field name="code">
|
<field name="code">
|
||||||
if context.get('active_model') == 'crm.lead' and context.get('active_ids'):
|
if context.get('active_model') == 'crm.lead' and context.get('active_ids'):
|
||||||
self.case_cancel(cr, uid, context['active_ids'], context=context)
|
self.case_mark_lost(cr, uid, context['active_ids'], context=context)
|
||||||
</field>
|
</field>
|
||||||
<field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/>
|
<field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
<field name="view_mode">tree,calendar</field>
|
<field name="view_mode">tree,calendar</field>
|
||||||
<field name="view_id" ref="crm_case_inbound_phone_tree_view"/>
|
<field name="view_id" ref="crm_case_inbound_phone_tree_view"/>
|
||||||
<field name="domain">[]</field>
|
<field name="domain">[]</field>
|
||||||
<field name="context">{}</field>
|
<field name="context">{'default_state': 'done'}</field>
|
||||||
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
<field name="search_view_id" ref="crm.view_crm_case_phonecalls_filter"/>
|
||||||
<field name="help" type="html">
|
<field name="help" type="html">
|
||||||
<p class="oe_view_nocontent_create">
|
<p class="oe_view_nocontent_create">
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
.. _changelog:
|
||||||
|
|
||||||
|
Changelog
|
||||||
|
=========
|
||||||
|
|
||||||
|
`trunk (saas-2)`
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- ``crm``, ``crm_claim``: removed inheritance from ``base_stage`` class. Missing
|
||||||
|
methods have been added into ``crm`` and ``crm_claim``. Also removed inheritance
|
||||||
|
in ``crm_helpdesk`` because it uses states, not stages.
|
|
@ -0,0 +1,13 @@
|
||||||
|
CRM module documentation
|
||||||
|
========================
|
||||||
|
|
||||||
|
CRM documentation topics
|
||||||
|
'''''''''''''''''''''''''
|
||||||
|
|
||||||
|
Changelog
|
||||||
|
'''''''''
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
changelog.rst
|
|
@ -7,14 +7,19 @@ 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-06-21 07:11+0000\n"
|
"PO-Revision-Date: 2013-07-25 13:52+0000\n"
|
||||||
"Last-Translator: krnkris <Unknown>\n"
|
"Last-Translator: krnkris <Unknown>\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-06-22 05:36+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-26 05:14+0000\n"
|
||||||
"X-Generator: Launchpad (build 16677)\n"
|
"X-Generator: Launchpad (build 16700)\n"
|
||||||
|
|
||||||
|
#. module: crm
|
||||||
|
#: model:crm.case.stage,name:crm.stage_lead3
|
||||||
|
msgid "Qualification"
|
||||||
|
msgstr "Besorolás"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead.report:0
|
#: view:crm.lead.report:0
|
||||||
|
@ -236,7 +241,7 @@ msgstr "Kilép"
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
#: field:crm.lead,state_id:0
|
#: field:crm.lead,state_id:0
|
||||||
msgid "State"
|
msgid "State"
|
||||||
msgstr "Állapot"
|
msgstr "Állam/Megye"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:res.partner,meeting_count:0
|
#: field:res.partner,meeting_count:0
|
||||||
|
@ -2686,11 +2691,6 @@ msgstr "Valószínűség automatikus változtatása"
|
||||||
msgid "My Phone Calls"
|
msgid "My Phone Calls"
|
||||||
msgstr "Telefonhívásaim"
|
msgstr "Telefonhívásaim"
|
||||||
|
|
||||||
#. module: crm
|
|
||||||
#: model:crm.case.stage,name:crm.stage_lead3
|
|
||||||
msgid "Qualification"
|
|
||||||
msgstr "Besorolás"
|
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.lead2opportunity.partner,name:0
|
#: field:crm.lead2opportunity.partner,name:0
|
||||||
#: field:crm.lead2opportunity.partner.mass,name:0
|
#: field:crm.lead2opportunity.partner.mass,name:0
|
||||||
|
@ -3961,9 +3961,19 @@ msgstr ""
|
||||||
#~ msgid "Can not add note!"
|
#~ msgid "Can not add note!"
|
||||||
#~ msgstr "Nem lehet hozzáadni megjegyzést!"
|
#~ msgstr "Nem lehet hozzáadni megjegyzést!"
|
||||||
|
|
||||||
|
#, python-format
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Opportunity must have Partner assigned before merging with other Opportunity."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Csak a Partnerhez rendelt Lehetőséget lehet más Lehetőséggel összefűzni."
|
||||||
|
|
||||||
#~ msgid "_Merge"
|
#~ msgid "_Merge"
|
||||||
#~ msgstr "Össze_fésülés"
|
#~ msgstr "Össze_fésülés"
|
||||||
|
|
||||||
|
#, python-format
|
||||||
|
#~ msgid "The opportunity '%s' has been marked as lost."
|
||||||
|
#~ msgstr "A '%s' lehetőséget elvesztettnek jelöltem."
|
||||||
|
|
||||||
#, python-format
|
#, python-format
|
||||||
#~ msgid "Lead '%s' has been converted to an opportunity."
|
#~ msgid "Lead '%s' has been converted to an opportunity."
|
||||||
#~ msgstr "A '%s'"
|
#~ msgstr "A '%s'"
|
||||||
|
@ -3991,3 +4001,17 @@ msgstr ""
|
||||||
|
|
||||||
#~ msgid "Convert To Opportunity"
|
#~ msgid "Convert To Opportunity"
|
||||||
#~ msgstr "Átalakítás lehetőséggé"
|
#~ msgstr "Átalakítás lehetőséggé"
|
||||||
|
|
||||||
|
#~ msgid "Edit all Occurrences of recurrent Meeting."
|
||||||
|
#~ msgstr "Az ismétlődő találkozók összes eseményének szerkesztése."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Leads Analysis allows you to check different CRM related information. Check "
|
||||||
|
#~ "for treatment delays, number of responses given and emails sent. You can "
|
||||||
|
#~ "sort out your leads analysis by different groups to get accurate grained "
|
||||||
|
#~ "analysis."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Az érdeklődések elemzése több CRM-hez kapcsolódó információt nyújt. "
|
||||||
|
#~ "Ellenőrizhetjük az eljárás elnapolását, a kiküldött válaszok és e-mailek "
|
||||||
|
#~ "számát. A részletes eredmény érdekében az érdeklődéseket különféle "
|
||||||
|
#~ "csoportosítások szerint is elemezhetjük."
|
||||||
|
|
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: 2012-12-19 07:22+0000\n"
|
"PO-Revision-Date: 2013-07-23 03:21+0000\n"
|
||||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@gmail.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-03-16 05:10+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-24 05:31+0000\n"
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
"X-Generator: Launchpad (build 16700)\n"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead.report:0
|
#: view:crm.lead.report:0
|
||||||
|
@ -29,7 +29,7 @@ msgid ""
|
||||||
msgstr "允许你设置接收邮件服务器,并从收到的邮件中创建线索"
|
msgstr "允许你设置接收邮件服务器,并从收到的邮件中创建线索"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:881
|
#: code:addons/crm/crm_lead.py:898
|
||||||
#: selection:crm.case.stage,type:0
|
#: selection:crm.case.stage,type:0
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
#: selection:crm.lead,type:0
|
#: selection:crm.lead,type:0
|
||||||
|
@ -54,6 +54,11 @@ msgid ""
|
||||||
"Description: [[object.description]]\n"
|
"Description: [[object.description]]\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"警告收到的新线索已超过5天未处理\n"
|
||||||
|
"名称:[[object.name]]\n"
|
||||||
|
"编号:[[object.id]]\n"
|
||||||
|
"描述:[[object.description]]\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.opportunity2phonecall,action:0
|
#: field:crm.opportunity2phonecall,action:0
|
||||||
|
@ -64,7 +69,7 @@ msgstr "动作"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.actions.server,name:crm.action_set_team_sales_department
|
#: model:ir.actions.server,name:crm.action_set_team_sales_department
|
||||||
msgid "Set team to Sales Department"
|
msgid "Set team to Sales Department"
|
||||||
msgstr ""
|
msgstr "设置团队 到销售部"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead2opportunity.partner.mass:0
|
#: view:crm.lead2opportunity.partner.mass:0
|
||||||
|
@ -151,7 +156,7 @@ msgstr "规则名称"
|
||||||
#: code:addons/crm/crm_phonecall.py:280
|
#: code:addons/crm/crm_phonecall.py:280
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "It's only possible to convert one phonecall at a time."
|
msgid "It's only possible to convert one phonecall at a time."
|
||||||
msgstr ""
|
msgstr "每次只能转换一个电话呼叫"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.case.resource.type:0
|
#: view:crm.case.resource.type:0
|
||||||
|
@ -180,11 +185,11 @@ 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 ""
|
msgstr "保留复杂的摘要(消息数量,……等)。为了插入到看板视图,这一摘要直接是是HTML格式。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:624
|
#: code:addons/crm/crm_lead.py:640
|
||||||
#: code:addons/crm/crm_lead.py:744
|
#: code:addons/crm/crm_lead.py:761
|
||||||
#: code:addons/crm/crm_phonecall.py:280
|
#: code:addons/crm/crm_phonecall.py:280
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Warning!"
|
msgid "Warning!"
|
||||||
|
@ -232,7 +237,7 @@ msgstr "状态"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:res.partner,meeting_count:0
|
#: field:res.partner,meeting_count:0
|
||||||
msgid "# Meetings"
|
msgid "# Meetings"
|
||||||
msgstr ""
|
msgstr "#会议"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.actions.server,name:crm.action_email_reminder_lead
|
#: model:ir.actions.server,name:crm.action_email_reminder_lead
|
||||||
|
@ -252,7 +257,7 @@ msgstr "排除的答案:"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.model,name:crm.model_crm_merge_opportunity
|
#: model:ir.model,name:crm.model_crm_merge_opportunity
|
||||||
msgid "Merge opportunities"
|
msgid "Merge opportunities"
|
||||||
msgstr ""
|
msgstr "合并商机"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead.report:0
|
#: view:crm.lead.report:0
|
||||||
|
@ -265,7 +270,7 @@ msgstr "线索分析"
|
||||||
#: code:addons/crm/crm_lead.py:1010
|
#: code:addons/crm/crm_lead.py:1010
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "<b>%s a call</b> for the <em>%s</em>."
|
msgid "<b>%s a call</b> for the <em>%s</em>."
|
||||||
msgstr ""
|
msgstr "<b>%s 一个电话</b> 为了 <em>%s</em>."
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.actions.act_window,name:crm.crm_case_resource_type_act
|
#: model:ir.actions.act_window,name:crm.crm_case_resource_type_act
|
||||||
|
@ -293,7 +298,7 @@ msgid "Prospect Partner"
|
||||||
msgstr "潜在业务伙伴"
|
msgstr "潜在业务伙伴"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:982
|
#: code:addons/crm/crm_lead.py:1002
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "No Subject"
|
msgid "No Subject"
|
||||||
msgstr "无主题"
|
msgstr "无主题"
|
||||||
|
@ -323,6 +328,18 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" "
|
||||||
|
"点击创建新客户分组\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" "
|
||||||
|
"创建指定的分类用于赋值给你的联系人\n"
|
||||||
|
" "
|
||||||
|
"以便更好管理你和他们的联系。分组工具\n"
|
||||||
|
" "
|
||||||
|
"可以根据你预设的条件给联系人分配组。\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.opportunity2phonecall,contact_name:0
|
#: field:crm.opportunity2phonecall,contact_name:0
|
||||||
|
@ -445,16 +462,16 @@ msgid "#Opportunities"
|
||||||
msgstr "#商机"
|
msgstr "#商机"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:624
|
#: code:addons/crm/crm_lead.py:640
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Please select more than one element (lead or opportunity) from the list view."
|
"Please select more than one element (lead or opportunity) from the list view."
|
||||||
msgstr ""
|
msgstr "请从列表视图中选择一个以上元素(线索或机会)。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
msgid "Leads that are assigned to one of the sale teams I manage, or to me"
|
msgid "Leads that are assigned to one of the sale teams I manage, or to me"
|
||||||
msgstr ""
|
msgstr "分配给我锁管理的某个销售队伍,或给我的线索。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.lead,partner_address_email:0
|
#: field:crm.lead,partner_address_email:0
|
||||||
|
@ -473,6 +490,16 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" "
|
||||||
|
"点击创建新的销售团队\n"
|
||||||
|
" <p></p>\n"
|
||||||
|
" "
|
||||||
|
"使用销售团队,把不同销售员或部门组织成独立的团队。\n"
|
||||||
|
" "
|
||||||
|
"每个团队会使用自己的商机列表工作。\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:process.transition,note:crm.process_transition_opportunitymeeting0
|
#: model:process.transition,note:crm.process_transition_opportunitymeeting0
|
||||||
|
@ -511,7 +538,7 @@ msgstr "邮件"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:mail.message.subtype,description:crm.mt_lead_stage
|
#: model:mail.message.subtype,description:crm.mt_lead_stage
|
||||||
msgid "Stage changed"
|
msgid "Stage changed"
|
||||||
msgstr ""
|
msgstr "任务阶段已改变"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: selection:crm.lead.report,creation_month:0
|
#: selection:crm.lead.report,creation_month:0
|
||||||
|
@ -572,7 +599,7 @@ msgstr "合并"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:email.template,subject:crm.email_template_opportunity_mail
|
#: model:email.template,subject:crm.email_template_opportunity_mail
|
||||||
msgid "Opportunity ${object.name | h})"
|
msgid "Opportunity ${object.name | h})"
|
||||||
msgstr ""
|
msgstr "商机${object.name | h})"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.case.categ:0
|
#: view:crm.case.categ:0
|
||||||
|
@ -590,6 +617,8 @@ msgid ""
|
||||||
"Reminder on Lead: [[object.id ]] [[object.partner_id and 'of ' "
|
"Reminder on Lead: [[object.id ]] [[object.partner_id and 'of ' "
|
||||||
"+object.partner_id.name or '']]"
|
"+object.partner_id.name or '']]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"线索:[[object.id ]] [[object.partner_id and 'of ' +object.partner_id.name or "
|
||||||
|
"'']]的提醒"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.segmentation:0
|
#: view:crm.segmentation:0
|
||||||
|
@ -630,6 +659,13 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" 点击创建新类型\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" "
|
||||||
|
"创建指定的电话类型,更好地定义系统中记录的电话类型\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: help:crm.case.section,reply_to:0
|
#: help:crm.case.section,reply_to:0
|
||||||
|
@ -712,7 +748,7 @@ msgid "Statistics Dashboard"
|
||||||
msgstr "统计控制台"
|
msgstr "统计控制台"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:861
|
#: code:addons/crm/crm_lead.py:878
|
||||||
#: model:crm.case.stage,name:crm.stage_lead2
|
#: model:crm.case.stage,name:crm.stage_lead2
|
||||||
#: selection:crm.case.stage,type:0
|
#: selection:crm.case.stage,type:0
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -738,7 +774,7 @@ msgstr "转为商机"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.model,name:crm.model_sale_config_settings
|
#: model:ir.model,name:crm.model_sale_config_settings
|
||||||
msgid "sale.config.settings"
|
msgid "sale.config.settings"
|
||||||
msgstr ""
|
msgstr "sale.config.settings"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.segmentation:0
|
#: view:crm.segmentation:0
|
||||||
|
@ -759,7 +795,7 @@ msgstr "查询电话访问"
|
||||||
#: view:crm.lead.report:0
|
#: view:crm.lead.report:0
|
||||||
msgid ""
|
msgid ""
|
||||||
"Leads/Opportunities that are assigned to one of the sale teams I manage"
|
"Leads/Opportunities that are assigned to one of the sale teams I manage"
|
||||||
msgstr ""
|
msgstr "分配给我所管理的某个销售团队的线索/商机。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:calendar.attendee,categ_id:0
|
#: field:calendar.attendee,categ_id:0
|
||||||
|
@ -772,7 +808,7 @@ msgid "Exclusive"
|
||||||
msgstr "唯一的"
|
msgstr "唯一的"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:584
|
#: code:addons/crm/crm_lead.py:600
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "From %s : %s"
|
msgid "From %s : %s"
|
||||||
msgstr "发自: %s:%s"
|
msgstr "发自: %s:%s"
|
||||||
|
@ -866,7 +902,7 @@ msgstr "标记为已赢得"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.filters,name:crm.filter_usa_lead
|
#: model:ir.filters,name:crm.filter_usa_lead
|
||||||
msgid "Leads from USA"
|
msgid "Leads from USA"
|
||||||
msgstr ""
|
msgstr "来自USA的线索"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -917,7 +953,7 @@ msgstr "参考"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Opportunities that are assigned to either me or one of the sale teams I "
|
"Opportunities that are assigned to either me or one of the sale teams I "
|
||||||
"manage"
|
"manage"
|
||||||
msgstr ""
|
msgstr "分配给我或者我管理的某个销售团队的商机。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: help:crm.case.section,resource_calendar_id:0
|
#: help:crm.case.section,resource_calendar_id:0
|
||||||
|
@ -940,7 +976,7 @@ msgid "Next Action"
|
||||||
msgstr "下一动作"
|
msgstr "下一动作"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:763
|
#: 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 ""
|
||||||
|
@ -983,6 +1019,8 @@ msgid ""
|
||||||
"Allows you to track your customers/suppliers claims and grievances.\n"
|
"Allows you to track your customers/suppliers claims and grievances.\n"
|
||||||
" This installs the module crm_claim."
|
" This installs the module crm_claim."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"允许你记录客户/供应商的索赔和抱怨。\n"
|
||||||
|
" 将安装crm_claim模块"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:crm.case.stage,name:crm.stage_lead6
|
#: model:crm.case.stage,name:crm.stage_lead6
|
||||||
|
@ -1030,10 +1068,10 @@ msgid "Creation Date"
|
||||||
msgstr "创建日期"
|
msgstr "创建日期"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:698
|
#: code:addons/crm/crm_lead.py:715
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Lead <b>converted into an Opportunity</b>"
|
msgid "Lead <b>converted into an Opportunity</b>"
|
||||||
msgstr ""
|
msgstr "线索 <b>已转换成商机</b>"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: selection:crm.segmentation.line,expr_name:0
|
#: selection:crm.segmentation.line,expr_name:0
|
||||||
|
@ -1094,7 +1132,7 @@ msgstr "删除"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:mail.message.subtype,description:crm.mt_lead_create
|
#: model:mail.message.subtype,description:crm.mt_lead_create
|
||||||
msgid "Opportunity created"
|
msgid "Opportunity created"
|
||||||
msgstr ""
|
msgstr "商机已创建"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -1123,6 +1161,17 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" 点击创建新的商机\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" OpenERP帮你记录你的销售管道\n"
|
||||||
|
" 跟踪潜在销售并更好地预测未来收益\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" 你可以对商机安排会议或电话,\n"
|
||||||
|
" 将他们转化成报价单,附上相关\n"
|
||||||
|
" 文档,跟踪所有的讨论等等。\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.segmentation,partner_id:0
|
#: field:crm.segmentation,partner_id:0
|
||||||
|
@ -1186,13 +1235,13 @@ msgstr "如果你勾选了这里,这个阶段会作为每个销售团队的默
|
||||||
msgid ""
|
msgid ""
|
||||||
"This field is used to distinguish stages related to Leads from stages "
|
"This field is used to distinguish stages related to Leads from stages "
|
||||||
"related to Opportunities, or to specify stages available for both types."
|
"related to Opportunities, or to specify stages available for both types."
|
||||||
msgstr ""
|
msgstr "此域用于区分用于线索的阶段和用于商机的阶段,或者指示同时可用于两个类型。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:mail.message.subtype,name:crm.mt_lead_create
|
#: model:mail.message.subtype,name:crm.mt_lead_create
|
||||||
#: model:mail.message.subtype,name:crm.mt_salesteam_lead
|
#: model:mail.message.subtype,name:crm.mt_salesteam_lead
|
||||||
msgid "Lead Created"
|
msgid "Lead Created"
|
||||||
msgstr ""
|
msgstr "线索已创建"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: help:crm.segmentation,sales_purchase_active:0
|
#: help:crm.segmentation,sales_purchase_active:0
|
||||||
|
@ -1217,7 +1266,9 @@ msgid "Days to Close"
|
||||||
msgstr "结束日期"
|
msgstr "结束日期"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
|
#: code:addons/crm/crm_lead.py:1057
|
||||||
#: field:crm.case.section,complete_name:0
|
#: field:crm.case.section,complete_name:0
|
||||||
|
#, python-format
|
||||||
msgid "unknown"
|
msgid "unknown"
|
||||||
msgstr "未知"
|
msgstr "未知"
|
||||||
|
|
||||||
|
@ -1264,7 +1315,7 @@ msgid ""
|
||||||
"progress the Status is set to 'Open'. When the case is over, the Status is "
|
"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 "
|
"set to 'Done'. If the case needs to be reviewed then the Status is set to "
|
||||||
"'Pending'."
|
"'Pending'."
|
||||||
msgstr ""
|
msgstr "当一个创建时,状态设为‘草稿’。如果此案在进行中,被设为‘打开‘。当案子结束,状态被设为’结束‘。如果需要被审阅,状态被设为’等待‘"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:crm.case.section,name:crm.crm_case_section_1
|
#: model:crm.case.section,name:crm.crm_case_section_1
|
||||||
|
@ -1300,7 +1351,7 @@ msgid "Lead Description"
|
||||||
msgstr "销售线索描述"
|
msgstr "销售线索描述"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:565
|
#: code:addons/crm/crm_lead.py:581
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Merged opportunities"
|
msgid "Merged opportunities"
|
||||||
msgstr "合并商机"
|
msgstr "合并商机"
|
||||||
|
@ -1373,7 +1424,7 @@ msgstr "待办事项"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:mail.message.subtype,description:crm.mt_lead_lost
|
#: model:mail.message.subtype,description:crm.mt_lead_lost
|
||||||
msgid "Opportunity lost"
|
msgid "Opportunity lost"
|
||||||
msgstr ""
|
msgstr "丢掉的商机"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.lead2opportunity.partner,action:0
|
#: field:crm.lead2opportunity.partner,action:0
|
||||||
|
@ -1422,7 +1473,7 @@ msgstr "用户"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:mail.message.subtype,name:crm.mt_lead_stage
|
#: model:mail.message.subtype,name:crm.mt_lead_stage
|
||||||
msgid "Stage Changed"
|
msgid "Stage Changed"
|
||||||
msgstr ""
|
msgstr "阶段已改变"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.case.stage,section_ids:0
|
#: field:crm.case.stage,section_ids:0
|
||||||
|
@ -1495,7 +1546,7 @@ msgstr "信息和通信历史记录"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
msgid "Show Countries"
|
msgid "Show Countries"
|
||||||
msgstr ""
|
msgstr "显示国家"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -1567,7 +1618,7 @@ msgid ""
|
||||||
"The status of your document will automatically change regarding the selected "
|
"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 "
|
"stage. For example, if a stage is related to the status 'Close', when your "
|
||||||
"document reaches this stage, it is automatically closed."
|
"document reaches this stage, it is automatically closed."
|
||||||
msgstr ""
|
msgstr "文档的状态会根据选中的阶段自动改变。如果一个阶段关联了‘关闭’状态,当文档到达这个阶段就自动被关闭。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead2opportunity.partner.mass:0
|
#: view:crm.lead2opportunity.partner.mass:0
|
||||||
|
@ -1588,7 +1639,7 @@ msgstr "通话月份"
|
||||||
#: code:addons/crm/crm_phonecall.py:290
|
#: code:addons/crm/crm_phonecall.py:290
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Partner has been <b>created</b>."
|
msgid "Partner has been <b>created</b>."
|
||||||
msgstr ""
|
msgstr "合作伙伴已<b>创建</b>"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:sale.config.settings,module_crm_claim:0
|
#: field:sale.config.settings,module_crm_claim:0
|
||||||
|
@ -1602,6 +1653,7 @@ msgid ""
|
||||||
"the treatment delays or number of leads per state. You can sort out your "
|
"the treatment delays or number of leads per state. You can sort out your "
|
||||||
"leads analysis by different groups to get accurate grained analysis."
|
"leads analysis by different groups to get accurate grained analysis."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"线索分析允许你检查不同的关联CRM的信息,例如延迟或每个状态的线索的数量。你可以使用不同的分组对线索分析进行整理已获得精确细致的分析结果。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:crm.case.categ,name:crm.categ_oppor3
|
#: model:crm.case.categ,name:crm.categ_oppor3
|
||||||
|
@ -1822,7 +1874,7 @@ msgstr "销售团队"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.case.stage,case_default:0
|
#: field:crm.case.stage,case_default:0
|
||||||
msgid "Default to New Sales Team"
|
msgid "Default to New Sales Team"
|
||||||
msgstr ""
|
msgstr "默认分配给新建销售团队"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -1861,10 +1913,10 @@ msgid "Leads"
|
||||||
msgstr "线索"
|
msgstr "线索"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:563
|
#: code:addons/crm/crm_lead.py:579
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Merged leads"
|
msgid "Merged leads"
|
||||||
msgstr ""
|
msgstr "合并的线索"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:crm.case.categ,name:crm.categ_oppor5
|
#: model:crm.case.categ,name:crm.categ_oppor5
|
||||||
|
@ -1887,7 +1939,7 @@ msgstr "待办"
|
||||||
#: model:mail.message.subtype,name:crm.mt_lead_convert_to_opportunity
|
#: model:mail.message.subtype,name:crm.mt_lead_convert_to_opportunity
|
||||||
#: model:mail.message.subtype,name:crm.mt_salesteam_lead_opportunity
|
#: model:mail.message.subtype,name:crm.mt_salesteam_lead_opportunity
|
||||||
msgid "Lead to Opportunity"
|
msgid "Lead to Opportunity"
|
||||||
msgstr ""
|
msgstr "线索到商机"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.lead,user_email:0
|
#: field:crm.lead,user_email:0
|
||||||
|
@ -1955,7 +2007,6 @@ msgid "Global CC"
|
||||||
msgstr "完整抄送"
|
msgstr "完整抄送"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
|
||||||
#: view:crm.phonecall:0
|
#: view:crm.phonecall:0
|
||||||
#: model:ir.actions.act_window,name:crm.crm_case_categ_phone0
|
#: model:ir.actions.act_window,name:crm.crm_case_categ_phone0
|
||||||
#: model:ir.ui.menu,name:crm.menu_crm_case_phone
|
#: model:ir.ui.menu,name:crm.menu_crm_case_phone
|
||||||
|
@ -2089,7 +2140,7 @@ msgstr "转换选项"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Follow this salesteam to automatically track the events associated to users "
|
"Follow this salesteam to automatically track the events associated to users "
|
||||||
"of this team."
|
"of this team."
|
||||||
msgstr ""
|
msgstr "跟踪此销售团队,自动跟踪此团队中用户关联的事件。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -2101,7 +2152,7 @@ msgstr "地址"
|
||||||
msgid ""
|
msgid ""
|
||||||
"The email address associated with this team. New emails received will "
|
"The email address associated with this team. New emails received will "
|
||||||
"automatically create new leads assigned to the team."
|
"automatically create new leads assigned to the team."
|
||||||
msgstr ""
|
msgstr "此邮件地址关联此团队。收到的新邮件将自动创建线索并分配给此团队。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -2193,13 +2244,24 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" 点击安排一个销售电话\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" "
|
||||||
|
"OpenERP允许你容易地定义销售团队要打的\n"
|
||||||
|
" 电话并根据跟踪处理。 "
|
||||||
|
" \n"
|
||||||
|
" </p><p> \n"
|
||||||
|
" 你可以使用导入功能来导入新列表\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: help:crm.case.stage,fold:0
|
#: help:crm.case.stage,fold:0
|
||||||
msgid ""
|
msgid ""
|
||||||
"This stage is not visible, for example in status bar or kanban view, when "
|
"This stage is not visible, for example in status bar or kanban view, when "
|
||||||
"there are no records in that stage to display."
|
"there are no records in that stage to display."
|
||||||
msgstr ""
|
msgstr "此阶段无记录可显示时,在状态栏或看板视图等处不可见。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.lead.report,nbr:0
|
#: field:crm.lead.report,nbr:0
|
||||||
|
@ -2245,7 +2307,7 @@ msgstr "运行中"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:mail.message.subtype,description:crm.mt_lead_convert_to_opportunity
|
#: model:mail.message.subtype,description:crm.mt_lead_convert_to_opportunity
|
||||||
msgid "Lead converted into an opportunity"
|
msgid "Lead converted into an opportunity"
|
||||||
msgstr ""
|
msgstr "装换成商机的线索"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -2255,7 +2317,7 @@ msgstr "未分配的线索"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:mail.message.subtype,description:crm.mt_lead_won
|
#: model:mail.message.subtype,description:crm.mt_lead_won
|
||||||
msgid "Opportunity won"
|
msgid "Opportunity won"
|
||||||
msgstr ""
|
msgstr "获胜的商机"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.case.categ,object_id:0
|
#: field:crm.case.categ,object_id:0
|
||||||
|
@ -2321,7 +2383,7 @@ msgstr "在这报表中,你能分析你的销售团队在电话访问上的业
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.case.stage,fold:0
|
#: field:crm.case.stage,fold:0
|
||||||
msgid "Fold by Default"
|
msgid "Fold by Default"
|
||||||
msgstr ""
|
msgstr "默认折叠"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.case.stage,state:0
|
#: field:crm.case.stage,state:0
|
||||||
|
@ -2357,7 +2419,7 @@ msgstr "已确认"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.model,name:crm.model_crm_partner_binding
|
#: model:ir.model,name:crm.model_crm_partner_binding
|
||||||
msgid "Handle partner binding or generation in CRM wizards."
|
msgid "Handle partner binding or generation in CRM wizards."
|
||||||
msgstr ""
|
msgstr "在CRM向导中处理合作伙伴的绑定或生成。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.actions.act_window,name:crm.act_oppor_stage_user
|
#: model:ir.actions.act_window,name:crm.act_oppor_stage_user
|
||||||
|
@ -2408,11 +2470,23 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" 点击创建一个未验证的线索。\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" 如果你在创建一个商机或者客户前\n"
|
||||||
|
" 需要验证,使用线索。可以是一张收到的\n"
|
||||||
|
" 名片,网站上收到的一个联系方式,或者\n"
|
||||||
|
" 你导入系统的一个文件数据。\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" 一旦被确定,线索可以被装换成商机\n"
|
||||||
|
" 以及/或者你的地址簿中的新客户。\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:sale.config.settings,fetchmail_lead:0
|
#: field:sale.config.settings,fetchmail_lead:0
|
||||||
msgid "Create leads from incoming mails"
|
msgid "Create leads from incoming mails"
|
||||||
msgstr ""
|
msgstr "从收到的邮件创建线索"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -2480,6 +2554,19 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" 点击创建电话总结\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" OpenERP "
|
||||||
|
"允许你快速记录打入的电话,用来\n"
|
||||||
|
" "
|
||||||
|
"跟踪与用户沟通的历史,或通知另一个销售团队。\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" "
|
||||||
|
"为了跟踪处理一个电话,你可以触发请求另一次电话,\n"
|
||||||
|
" 一次会议或者一个商机。\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:process.node,note:crm.process_node_leads0
|
#: model:process.node,note:crm.process_node_leads0
|
||||||
|
@ -2526,6 +2613,20 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" "
|
||||||
|
"点击新建一个销售标签\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" "
|
||||||
|
"创建指定的适合公司活动的标签\n"
|
||||||
|
" "
|
||||||
|
"用于更好地分析你的线索和商机。\n"
|
||||||
|
" "
|
||||||
|
"标签分类可以反映你的商品结构或者\n"
|
||||||
|
" "
|
||||||
|
"不同的销售类型。\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: selection:crm.lead.report,creation_month:0
|
#: selection:crm.lead.report,creation_month:0
|
||||||
|
@ -2538,7 +2639,7 @@ msgstr "8月"
|
||||||
#: model:mail.message.subtype,name:crm.mt_lead_lost
|
#: model:mail.message.subtype,name:crm.mt_lead_lost
|
||||||
#: model:mail.message.subtype,name:crm.mt_salesteam_lead_lost
|
#: model:mail.message.subtype,name:crm.mt_salesteam_lead_lost
|
||||||
msgid "Opportunity Lost"
|
msgid "Opportunity Lost"
|
||||||
msgstr ""
|
msgstr "丢失的商机"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.lead.report,deadline_month:0
|
#: field:crm.lead.report,deadline_month:0
|
||||||
|
@ -2634,7 +2735,7 @@ msgstr "通话日志"
|
||||||
#: model:mail.message.subtype,name:crm.mt_lead_won
|
#: model:mail.message.subtype,name:crm.mt_lead_won
|
||||||
#: model:mail.message.subtype,name:crm.mt_salesteam_lead_won
|
#: model:mail.message.subtype,name:crm.mt_salesteam_lead_won
|
||||||
msgid "Opportunity Won"
|
msgid "Opportunity Won"
|
||||||
msgstr ""
|
msgstr "获胜的商机"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.actions.act_window,name:crm.crm_case_section_act_tree
|
#: model:ir.actions.act_window,name:crm.crm_case_section_act_tree
|
||||||
|
@ -2773,7 +2874,7 @@ msgstr "电话访问"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.phonecall.report:0
|
#: view:crm.phonecall.report:0
|
||||||
msgid "Phone calls that are assigned to one of the sale teams I manage"
|
msgid "Phone calls that are assigned to one of the sale teams I manage"
|
||||||
msgstr ""
|
msgstr "分配给某个我所管理的销售团队的电话。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -2848,6 +2949,19 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" "
|
||||||
|
"点击定义一个新渠道\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" "
|
||||||
|
"使用渠道来记录你的线索和商机的来源。\n"
|
||||||
|
" "
|
||||||
|
"主要用于市场工作相关的销售分析报告。\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" "
|
||||||
|
"渠道例子:公司网站,电话,市场活动,经销商等\n"
|
||||||
|
" <p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -2885,7 +2999,7 @@ msgid "Working Hours"
|
||||||
msgstr "工作时间"
|
msgstr "工作时间"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:968
|
#: code:addons/crm/crm_lead.py:986
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
#: field:crm.lead2opportunity.partner,partner_id:0
|
#: field:crm.lead2opportunity.partner,partner_id:0
|
||||||
#: field:crm.lead2opportunity.partner.mass,partner_id:0
|
#: field:crm.lead2opportunity.partner.mass,partner_id:0
|
||||||
|
@ -3007,7 +3121,7 @@ msgstr "时事通信"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:mail.message.subtype,name:crm.mt_salesteam_lead_stage
|
#: model:mail.message.subtype,name:crm.mt_salesteam_lead_stage
|
||||||
msgid "Opportunity Stage Changed"
|
msgid "Opportunity Stage Changed"
|
||||||
msgstr ""
|
msgstr "商机状态已改变"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:ir.actions.act_window,help:crm.crm_lead_stage_act
|
#: model:ir.actions.act_window,help:crm.crm_lead_stage_act
|
||||||
|
@ -3021,6 +3135,16 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" "
|
||||||
|
"点击设置你的线索/商机管道的新阶段。\n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" "
|
||||||
|
"阶段允许销售人员记录特定的线索或商机\n"
|
||||||
|
" "
|
||||||
|
"在销售循环中的位置。\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#~ msgid "My Draft "
|
#~ msgid "My Draft "
|
||||||
#~ msgstr "我的草稿 "
|
#~ msgstr "我的草稿 "
|
||||||
|
|
|
@ -56,7 +56,7 @@ class res_partner(osv.osv):
|
||||||
|
|
||||||
default.update({'opportunity_ids': [], 'meeting_ids' : [], 'phonecall_ids' : []})
|
default.update({'opportunity_ids': [], 'meeting_ids' : [], 'phonecall_ids' : []})
|
||||||
|
|
||||||
super(res_partner, self).copy(cr, uid, record_id, default, context)
|
return super(res_partner, self).copy(cr, uid, record_id, default, context)
|
||||||
|
|
||||||
def redirect_partner_form(self, cr, uid, partner_id, context=None):
|
def redirect_partner_form(self, cr, uid, partner_id, context=None):
|
||||||
search_view = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'view_res_partner_filter')
|
search_view = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'view_res_partner_filter')
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
Manage your sales funnel with no effort. Attract leads, follow-up on phone calls and meetings. Analyse the quality of your leads to make informed decisions and save time by integrating emails directly into the application.
|
Manage your sales funnel with no effort. Attract leads, follow-up on phone calls and meetings. Analyse the quality of your leads to make informed decisions and save time by integrating emails directly into the application.
|
||||||
</p>
|
</p>
|
||||||
<div class="oe_centeralign oe_websiteonly">
|
<div class="oe_centeralign oe_websiteonly">
|
||||||
<a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a>
|
<a href="http://www.openerp.com/start?app=crm" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -4,37 +4,6 @@
|
||||||
!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})
|
||||||
self.case_cancel(cr, uid, [ref("crm_case_1")])
|
|
||||||
-
|
|
||||||
I check cancelled lead.
|
|
||||||
-
|
|
||||||
!python {model: crm.lead}: |
|
|
||||||
lead = self.browse(cr, uid, ref('crm_case_1'))
|
|
||||||
assert lead.stage_id.id == ref('crm.stage_lead7'), "Stage should be 'Dead' and is %s." % (lead.stage_id.name)
|
|
||||||
assert lead.state == 'cancel', "Opportunity is not in 'cancel' state."
|
|
||||||
assert lead.probability == 0.0, 'Opportunity is probably wrong and should be 0.0.'
|
|
||||||
-
|
|
||||||
I reset cancelled lead into unqualified lead.
|
|
||||||
-
|
|
||||||
!python {model: crm.lead}: |
|
|
||||||
self.case_reset(cr, uid, [ref("crm_case_1")])
|
|
||||||
-
|
|
||||||
I check unqualified lead after reset.
|
|
||||||
-
|
|
||||||
!assert {model: crm.lead, id: crm.crm_case_1, string: Lead is in draft state}:
|
|
||||||
- state == "draft"
|
|
||||||
-
|
|
||||||
I re-open the lead
|
|
||||||
-
|
|
||||||
!python {model: crm.lead}: |
|
|
||||||
self.case_open(cr, uid, [ref("crm_case_1")])
|
|
||||||
-
|
|
||||||
I check stage and state of the re-opened lead
|
|
||||||
-
|
|
||||||
!python {model: crm.lead}: |
|
|
||||||
lead = self.browse(cr, uid, ref('crm.crm_case_1'))
|
|
||||||
assert lead.stage_id.id == ref('crm.stage_lead2'), "Opportunity stage should be 'Qualification'."
|
|
||||||
assert lead.state == 'open', "Opportunity should be in 'open' state."
|
|
||||||
-
|
-
|
||||||
I escalate the lead to parent team.
|
I escalate the lead to parent team.
|
||||||
-
|
-
|
||||||
|
|
|
@ -20,9 +20,4 @@
|
||||||
-
|
-
|
||||||
!record {model: crm.phonecall, id: crm_phonecall_5}:
|
!record {model: crm.phonecall, id: crm_phonecall_5}:
|
||||||
name: 'Bad time'
|
name: 'Bad time'
|
||||||
partner_id: base.res_partner_5
|
partner_id: base.res_partner_5
|
||||||
-
|
|
||||||
I set the next stage to "New" for the lead.
|
|
||||||
-
|
|
||||||
!python {model: crm.lead}: |
|
|
||||||
self.stage_next(cr, uid, [ref("crm_case_4")], context={'stage_type': 'lead'})
|
|
|
@ -1,25 +1,15 @@
|
||||||
-
|
-
|
||||||
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 open a lead.
|
|
||||||
-
|
|
||||||
!python {model: crm.lead}: |
|
|
||||||
self.case_open(cr, uid, [ref("crm_case_4")])
|
|
||||||
-
|
|
||||||
I check if the lead state is "Open".
|
|
||||||
-
|
|
||||||
!assert {model: crm.lead, id: crm.crm_case_4, string: Lead state is Open}:
|
|
||||||
- state == "open"
|
|
||||||
-
|
-
|
||||||
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_4")], ref("base.res_partner_2"))
|
self.convert_opportunity(cr, uid ,[ref("crm_case_1")], 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_4'))
|
lead = self.browse(cr, uid, ref('crm_case_1'))
|
||||||
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!'
|
||||||
|
@ -28,7 +18,7 @@
|
||||||
-
|
-
|
||||||
!python {model: crm.opportunity2phonecall}: |
|
!python {model: crm.opportunity2phonecall}: |
|
||||||
import time
|
import time
|
||||||
context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_4')]})
|
context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_1')]})
|
||||||
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)
|
||||||
|
@ -36,28 +26,28 @@
|
||||||
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_4'))])
|
ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_1'))])
|
||||||
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_4')])
|
self.action_makeMeeting(cr, uid, [ref('crm_case_1')])
|
||||||
-
|
-
|
||||||
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_4')], 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_1')], 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_4")])
|
self.case_mark_won(cr, uid, [ref("crm_case_1")])
|
||||||
-
|
-
|
||||||
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_4'))
|
lead = self.browse(cr, uid, ref('crm_case_1'))
|
||||||
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.state == 'done', "Opportunity is not in 'done' state!"
|
||||||
assert lead.probability == 100.0, "Revenue probability should be 100.0!"
|
assert lead.probability == 100.0, "Revenue probability should be 100.0!"
|
||||||
|
@ -104,7 +94,6 @@
|
||||||
-
|
-
|
||||||
!python {model: crm.meeting}: |
|
!python {model: crm.meeting}: |
|
||||||
context.update({'active_model': 'crm.meeting'})
|
context.update({'active_model': 'crm.meeting'})
|
||||||
self.case_open(cr, uid, [ref('base_calendar.crm_meeting_4')])
|
|
||||||
-
|
-
|
||||||
I invite a user for meeting.
|
I invite a user for meeting.
|
||||||
-
|
-
|
||||||
|
|
|
@ -35,6 +35,8 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
('merge', 'Merge with existing opportunities')
|
('merge', 'Merge with existing opportunities')
|
||||||
], 'Conversion Action', required=True),
|
], 'Conversion Action', required=True),
|
||||||
'opportunity_ids': fields.many2many('crm.lead', string='Opportunities'),
|
'opportunity_ids': fields.many2many('crm.lead', string='Opportunities'),
|
||||||
|
'user_id': fields.many2one('res.users', 'Salesperson', select=True),
|
||||||
|
'section_id': fields.many2one('crm.case.section', 'Sales Team', select=True),
|
||||||
}
|
}
|
||||||
|
|
||||||
def default_get(self, cr, uid, fields, context=None):
|
def default_get(self, cr, uid, fields, context=None):
|
||||||
|
@ -74,9 +76,27 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
res.update({'name' : len(tomerge) >= 2 and 'merge' or 'convert'})
|
res.update({'name' : len(tomerge) >= 2 and 'merge' or 'convert'})
|
||||||
if 'opportunity_ids' in fields and len(tomerge) >= 2:
|
if 'opportunity_ids' in fields and len(tomerge) >= 2:
|
||||||
res.update({'opportunity_ids': list(tomerge)})
|
res.update({'opportunity_ids': list(tomerge)})
|
||||||
|
if lead.user_id:
|
||||||
|
res.update({'user_id': lead.user_id.id})
|
||||||
|
if lead.section_id:
|
||||||
|
res.update({'section_id': lead.section_id.id})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def on_change_user(self, cr, uid, ids, user_id, section_id, context=None):
|
||||||
|
""" When changing the user, also set a section_id or restrict section id
|
||||||
|
to the ones user_id is member of. """
|
||||||
|
if user_id:
|
||||||
|
if section_id:
|
||||||
|
user_in_section = self.pool.get('crm.case.section').search(cr, uid, [('id', '=', section_id), '|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context, count=True)
|
||||||
|
else:
|
||||||
|
user_in_section = False
|
||||||
|
if not user_in_section:
|
||||||
|
section_id = False
|
||||||
|
section_ids = self.pool.get('crm.case.section').search(cr, uid, ['|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context)
|
||||||
|
if section_ids:
|
||||||
|
section_id = section_ids[0]
|
||||||
|
return {'value': {'section_id': section_id}}
|
||||||
|
|
||||||
def view_init(self, cr, uid, fields, context=None):
|
def view_init(self, cr, uid, fields, context=None):
|
||||||
"""
|
"""
|
||||||
Check some preconditions before the wizard executes.
|
Check some preconditions before the wizard executes.
|
||||||
|
@ -118,15 +138,15 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
w = self.browse(cr, uid, ids, context=context)[0]
|
w = self.browse(cr, uid, ids, context=context)[0]
|
||||||
opp_ids = [o.id for o in w.opportunity_ids]
|
opp_ids = [o.id for o in w.opportunity_ids]
|
||||||
if w.name == 'merge':
|
if w.name == 'merge':
|
||||||
lead_id = self.pool.get('crm.lead').merge_opportunity(cr, uid, opp_ids, context=context)
|
lead_id = self.pool.get('crm.lead').merge_opportunity(cr, uid, opp_ids, w.user_id.id, w.section_id.id, context=context)
|
||||||
lead_ids = [lead_id]
|
lead_ids = [lead_id]
|
||||||
lead = self.pool.get('crm.lead').read(cr, uid, lead_id, ['type'], context=context)
|
lead = self.pool.get('crm.lead').read(cr, uid, lead_id, ['type'], context=context)
|
||||||
if lead['type'] == "lead":
|
if lead['type'] == "lead":
|
||||||
context.update({'active_ids': lead_ids})
|
context.update({'active_ids': lead_ids})
|
||||||
self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids}, context=context)
|
self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids, 'user_ids': [w.user_id.id], 'section_id': w.section_id.id}, context=context)
|
||||||
else:
|
else:
|
||||||
lead_ids = context.get('active_ids', [])
|
lead_ids = context.get('active_ids', [])
|
||||||
self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids}, context=context)
|
self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids, 'user_ids': [w.user_id.id], 'section_id': w.section_id.id}, context=context)
|
||||||
|
|
||||||
return self.pool.get('crm.lead').redirect_opportunity_view(cr, uid, lead_ids[0], context=context)
|
return self.pool.get('crm.lead').redirect_opportunity_view(cr, uid, lead_ids[0], context=context)
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,10 @@
|
||||||
<group name="name">
|
<group name="name">
|
||||||
<field name="name" class="oe_inline"/>
|
<field name="name" class="oe_inline"/>
|
||||||
</group>
|
</group>
|
||||||
|
<group string="Assign opportunities to">
|
||||||
|
<field name="user_id" class="oe_inline" on_change="on_change_user(user_id, section_id, context)"/>
|
||||||
|
<field name="section_id" class="oe_inline"/>
|
||||||
|
</group>
|
||||||
<group string="Opportunities">
|
<group string="Opportunities">
|
||||||
<field name="opportunity_ids" attrs="{'invisible': [('name', '!=', 'merge')]}" nolabel="1">
|
<field name="opportunity_ids" attrs="{'invisible': [('name', '!=', 'merge')]}" nolabel="1">
|
||||||
<tree>
|
<tree>
|
||||||
|
@ -56,6 +60,10 @@
|
||||||
attrs="{'required': [('action', '=', 'exist')], 'invisible':[('action','!=','exist')]}"
|
attrs="{'required': [('action', '=', 'exist')], 'invisible':[('action','!=','exist')]}"
|
||||||
class="oe_inline"/>
|
class="oe_inline"/>
|
||||||
</group>
|
</group>
|
||||||
|
<group string="Assign opportunities to" attrs="{'invisible': [('name', '=', '')]}">
|
||||||
|
<field name="section_id" groups="base.group_multi_salesteams"/>
|
||||||
|
<field name="user_ids" widget="many2many_tags"/>
|
||||||
|
</group>
|
||||||
<group string="Select Opportunities" attrs="{'invisible': [('name', '!=', 'merge')]}">
|
<group string="Select Opportunities" attrs="{'invisible': [('name', '!=', 'merge')]}">
|
||||||
<field name="opportunity_ids" colspan="4" nolabel="1" attrs="{'invisible': [('name', '=', 'convert')]}">
|
<field name="opportunity_ids" colspan="4" nolabel="1" attrs="{'invisible': [('name', '=', 'convert')]}">
|
||||||
<tree>
|
<tree>
|
||||||
|
@ -72,12 +80,6 @@
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
<group string="Assign opportunities to" attrs="{'invisible': [('name', '=', '')]}">
|
|
||||||
<field name="section_id" groups="base.group_multi_salesteams"/>
|
|
||||||
<field name="user_ids" widget="many2many_tags"/>
|
|
||||||
</group>
|
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<button name="mass_convert" string="Convert to Opportunities" type="object" class="oe_highlight"/>
|
<button name="mass_convert" string="Convert to Opportunities" type="object" class="oe_highlight"/>
|
||||||
or
|
or
|
||||||
|
|
|
@ -34,6 +34,8 @@ class crm_merge_opportunity(osv.osv_memory):
|
||||||
_description = 'Merge opportunities'
|
_description = 'Merge opportunities'
|
||||||
_columns = {
|
_columns = {
|
||||||
'opportunity_ids': fields.many2many('crm.lead', rel='merge_opportunity_rel', id1='merge_id', id2='opportunity_id', string='Leads/Opportunities'),
|
'opportunity_ids': fields.many2many('crm.lead', rel='merge_opportunity_rel', id1='merge_id', id2='opportunity_id', string='Leads/Opportunities'),
|
||||||
|
'user_id': fields.many2one('res.users', 'Salesperson', select=True),
|
||||||
|
'section_id': fields.many2one('crm.case.section', 'Sales Team', select=True),
|
||||||
}
|
}
|
||||||
|
|
||||||
def action_merge(self, cr, uid, ids, context=None):
|
def action_merge(self, cr, uid, ids, context=None):
|
||||||
|
@ -47,7 +49,7 @@ class crm_merge_opportunity(osv.osv_memory):
|
||||||
#TODO: why is this passed through the context ?
|
#TODO: why is this passed through the context ?
|
||||||
context['lead_ids'] = [opportunity2merge_ids[0].id]
|
context['lead_ids'] = [opportunity2merge_ids[0].id]
|
||||||
|
|
||||||
merge_id = lead_obj.merge_opportunity(cr, uid, [x.id for x in opportunity2merge_ids], context=context)
|
merge_id = lead_obj.merge_opportunity(cr, uid, [x.id for x in opportunity2merge_ids], wizard.user_id.id, wizard.section_id.id, context=context)
|
||||||
|
|
||||||
# The newly created lead might be a lead or an opp: redirect toward the right view
|
# The newly created lead might be a lead or an opp: redirect toward the right view
|
||||||
merge_result = lead_obj.browse(cr, uid, merge_id, context=context)
|
merge_result = lead_obj.browse(cr, uid, merge_id, context=context)
|
||||||
|
@ -79,4 +81,19 @@ class crm_merge_opportunity(osv.osv_memory):
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def on_change_user(self, cr, uid, ids, user_id, section_id, context=None):
|
||||||
|
""" When changing the user, also set a section_id or restrict section id
|
||||||
|
to the ones user_id is member of. """
|
||||||
|
if user_id:
|
||||||
|
if section_id:
|
||||||
|
user_in_section = self.pool.get('crm.case.section').search(cr, uid, [('id', '=', section_id), '|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context, count=True)
|
||||||
|
else:
|
||||||
|
user_in_section = False
|
||||||
|
if not user_in_section:
|
||||||
|
section_id = False
|
||||||
|
section_ids = self.pool.get('crm.case.section').search(cr, uid, ['|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context)
|
||||||
|
if section_ids:
|
||||||
|
section_id = section_ids[0]
|
||||||
|
return {'value': {'section_id': section_id}}
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -8,20 +8,25 @@
|
||||||
<field name="model">crm.merge.opportunity</field>
|
<field name="model">crm.merge.opportunity</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Merge Leads/Opportunities" version="7.0">
|
<form string="Merge Leads/Opportunities" version="7.0">
|
||||||
<separator string="Select Leads/Opportunities"/>
|
<group string="Assign opportunities to">
|
||||||
<field name="opportunity_ids">
|
<field name="user_id" class="oe_inline" on_change="on_change_user(user_id, context)"/>
|
||||||
<tree>
|
<field name="section_id" class="oe_inline"/>
|
||||||
<field name="create_date"/>
|
</group>
|
||||||
<field name="name"/>
|
<group string="Select Leads/Opportunities">
|
||||||
<field name="type"/>
|
<field name="opportunity_ids" nolabel="1">
|
||||||
<field name="contact_name"/>
|
<tree>
|
||||||
<field name="email_from"/>
|
<field name="create_date"/>
|
||||||
<field name="phone"/>
|
<field name="name"/>
|
||||||
<field name="stage_id"/>
|
<field name="type"/>
|
||||||
<field name="user_id"/>
|
<field name="contact_name"/>
|
||||||
<field name="section_id" groups="base.group_multi_salesteams"/>
|
<field name="email_from"/>
|
||||||
</tree>
|
<field name="phone"/>
|
||||||
</field>
|
<field name="stage_id"/>
|
||||||
|
<field name="user_id"/>
|
||||||
|
<field name="section_id" groups="base.group_multi_salesteams"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_merge" type="object" string="Merge" class="oe_highlight"/>
|
<button name="action_merge" type="object" string="Merge" class="oe_highlight"/>
|
||||||
or
|
or
|
||||||
|
|
|
@ -19,20 +19,12 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from openerp.addons.base_status.base_stage import base_stage
|
|
||||||
import binascii
|
|
||||||
from openerp.addons.crm import crm
|
from openerp.addons.crm import crm
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
import time
|
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp.tools import html2plaintext
|
from openerp.tools import html2plaintext
|
||||||
|
|
||||||
CRM_CLAIM_PENDING_STATES = (
|
|
||||||
crm.AVAILABLE_STATES[2][0], # Cancelled
|
|
||||||
crm.AVAILABLE_STATES[3][0], # Done
|
|
||||||
crm.AVAILABLE_STATES[4][0], # Pending
|
|
||||||
)
|
|
||||||
|
|
||||||
class crm_claim_stage(osv.osv):
|
class crm_claim_stage(osv.osv):
|
||||||
""" Model for claim stages. This models the main stages of a claim
|
""" Model for claim stages. This models the main stages of a claim
|
||||||
|
@ -51,8 +43,6 @@ class crm_claim_stage(osv.osv):
|
||||||
'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."),
|
'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_refused': fields.boolean('Refused stage',
|
|
||||||
help='Refused stages are specific stages for done.'),
|
|
||||||
'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',
|
||||||
|
@ -63,10 +53,9 @@ class crm_claim_stage(osv.osv):
|
||||||
'sequence': lambda *args: 1,
|
'sequence': lambda *args: 1,
|
||||||
'state': 'draft',
|
'state': 'draft',
|
||||||
'fold': False,
|
'fold': False,
|
||||||
'case_refused': False,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class crm_claim(base_stage, osv.osv):
|
class crm_claim(osv.osv):
|
||||||
""" Crm claim
|
""" Crm claim
|
||||||
"""
|
"""
|
||||||
_name = "crm.claim"
|
_name = "crm.claim"
|
||||||
|
@ -74,6 +63,15 @@ class crm_claim(base_stage, osv.osv):
|
||||||
_order = "priority,date desc"
|
_order = "priority,date desc"
|
||||||
_inherit = ['mail.thread']
|
_inherit = ['mail.thread']
|
||||||
|
|
||||||
|
def _get_default_section_id(self, cr, uid, context=None):
|
||||||
|
""" Gives default section by checking if present in the context """
|
||||||
|
return self.pool.get('crm.lead')._resolve_section_id_from_context(cr, uid, context=context) or False
|
||||||
|
|
||||||
|
def _get_default_stage_id(self, cr, uid, context=None):
|
||||||
|
""" Gives default stage_id """
|
||||||
|
section_id = self._get_default_section_id(cr, uid, context=context)
|
||||||
|
return self.stage_find(cr, uid, [], section_id, [('state', '=', 'draft')], context=context)
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'id': fields.integer('ID', readonly=True),
|
'id': fields.integer('ID', readonly=True),
|
||||||
'name': fields.char('Claim Subject', size=128, required=True),
|
'name': fields.char('Claim Subject', size=128, required=True),
|
||||||
|
@ -117,15 +115,13 @@ class crm_claim(base_stage, osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c),
|
'user_id': lambda s, cr, uid, c: uid,
|
||||||
'partner_id': lambda s, cr, uid, c: s._get_default_partner(cr, uid, c),
|
|
||||||
'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
|
|
||||||
'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
|
'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
|
||||||
'date': fields.datetime.now,
|
'date': fields.datetime.now(),
|
||||||
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c),
|
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c),
|
||||||
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
|
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
|
||||||
'active': lambda *a: 1,
|
'active': lambda *a: 1,
|
||||||
'stage_id':lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c)
|
'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
|
def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
|
||||||
|
@ -158,27 +154,24 @@ class crm_claim(base_stage, osv.osv):
|
||||||
return stage_ids[0]
|
return stage_ids[0]
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def case_refuse(self, cr, uid, ids, context=None):
|
def onchange_partner_id(self, cr, uid, ids, partner_id, email=False, context=None):
|
||||||
""" Mark the case as refused: state=done and case_refused=True """
|
|
||||||
for lead in self.browse(cr, uid, ids):
|
|
||||||
stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, ['&', ('state', '=', 'done'), ('case_refused', '=', True)], context=context)
|
|
||||||
if stage_id:
|
|
||||||
self.case_set(cr, uid, [lead.id], values_to_update={}, new_stage_id=stage_id, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def onchange_partner_id(self, cr, uid, ids, part, email=False):
|
|
||||||
"""This function returns value of partner address based on partner
|
"""This function returns value of partner address based on partner
|
||||||
:param part: Partner's id
|
|
||||||
:param email: ignored
|
:param email: ignored
|
||||||
"""
|
"""
|
||||||
if not part:
|
if not partner_id:
|
||||||
return {'value': {'email_from': False,
|
return {'value': {'email_from': False, 'partner_phone': False}}
|
||||||
'partner_phone': False
|
address = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||||
}
|
|
||||||
}
|
|
||||||
address = self.pool.get('res.partner').browse(cr, uid, part)
|
|
||||||
return {'value': {'email_from': address.email, 'partner_phone': address.phone}}
|
return {'value': {'email_from': address.email, 'partner_phone': address.phone}}
|
||||||
|
|
||||||
|
def create(self, cr, uid, vals, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
if vals.get('section_id') and not context.get('default_section_id'):
|
||||||
|
context['default_section_id'] = vals.get('section_id')
|
||||||
|
|
||||||
|
# context: no_log, because subtype already handle this
|
||||||
|
return super(crm_claim, self).create(cr, uid, vals, context=context)
|
||||||
|
|
||||||
# -------------------------------------------------------
|
# -------------------------------------------------------
|
||||||
# Mail gateway
|
# Mail gateway
|
||||||
# -------------------------------------------------------
|
# -------------------------------------------------------
|
||||||
|
|
|
@ -52,7 +52,6 @@
|
||||||
<field name="case_default"/>
|
<field name="case_default"/>
|
||||||
<field name="sequence"/>
|
<field name="sequence"/>
|
||||||
<field name="state"/>
|
<field name="state"/>
|
||||||
<field name="case_refused"/>
|
|
||||||
<field name="fold"/>
|
<field name="fold"/>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
@ -102,10 +101,6 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Claim" version="7.0">
|
<form string="Claim" version="7.0">
|
||||||
<header>
|
<header>
|
||||||
<button name="case_close" string="Settle" type="object" class="oe_highlight"
|
|
||||||
states="draft,open,pending" groups="base.group_user"/>
|
|
||||||
<button name="case_cancel" string="Reject" type="object" groups="base.group_user"
|
|
||||||
states="draft,open,pending"/>
|
|
||||||
<field name="stage_id" widget="statusbar" clickable="True"/>
|
<field name="stage_id" widget="statusbar" clickable="True"/>
|
||||||
</header>
|
</header>
|
||||||
<sheet string="Claims">
|
<sheet string="Claims">
|
||||||
|
|
|
@ -21,25 +21,9 @@
|
||||||
-
|
-
|
||||||
!python {model: crm.claim}: |
|
!python {model: crm.claim}: |
|
||||||
claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
||||||
self.case_open(cr, uid, claim_ids)
|
|
||||||
-
|
-
|
||||||
I check Claim Details after open.
|
I check Claim Details after open.
|
||||||
-
|
-
|
||||||
!python {model: crm.claim}: |
|
!python {model: crm.claim}: |
|
||||||
claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
||||||
claim = self.browse(cr, uid, claim_ids[0])
|
claim = self.browse(cr, uid, claim_ids[0])
|
||||||
assert claim.state == "open", "Claim is not in Open state"
|
|
||||||
assert claim.stage_id.id == ref("crm.stage_lead2"), "Claim is not in Qualification stage"
|
|
||||||
-
|
|
||||||
After complete all service from our side, I close this claim.
|
|
||||||
-
|
|
||||||
!python {model: crm.claim}: |
|
|
||||||
claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
|
||||||
self.case_close(cr, uid, claim_ids)
|
|
||||||
-
|
|
||||||
I check Claim details after closed.
|
|
||||||
-
|
|
||||||
!python {model: crm.claim}: |
|
|
||||||
claim_ids = self.search(cr, uid, [('email_from','=', 'Mr. John Right <info@customer.com>')])
|
|
||||||
claim = self.browse(cr, uid, claim_ids[0])
|
|
||||||
assert claim.state == "done", "Claim is not in close state"
|
|
||||||
|
|
|
@ -20,20 +20,14 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from openerp.addons.base_status.base_state import base_state
|
from openerp.addons.base_status.base_state import base_state
|
||||||
from openerp.addons.base_status.base_stage import base_stage
|
|
||||||
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
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp.tools import html2plaintext
|
from openerp.tools import html2plaintext
|
||||||
|
|
||||||
CRM_HELPDESK_STATES = (
|
|
||||||
crm.AVAILABLE_STATES[2][0], # Cancelled
|
|
||||||
crm.AVAILABLE_STATES[3][0], # Done
|
|
||||||
crm.AVAILABLE_STATES[4][0], # Pending
|
|
||||||
)
|
|
||||||
|
|
||||||
class crm_helpdesk(base_state, base_stage, osv.osv):
|
class crm_helpdesk(base_state, osv.osv):
|
||||||
""" Helpdesk Cases """
|
""" Helpdesk Cases """
|
||||||
|
|
||||||
_name = "crm.helpdesk"
|
_name = "crm.helpdesk"
|
||||||
|
@ -80,9 +74,7 @@ class crm_helpdesk(base_state, base_stage, osv.osv):
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'active': lambda *a: 1,
|
'active': lambda *a: 1,
|
||||||
'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c),
|
'user_id': lambda s, cr, uid, c: uid,
|
||||||
'partner_id': lambda s, cr, uid, c: s._get_default_partner(cr, uid, c),
|
|
||||||
'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
|
|
||||||
'state': lambda *a: 'draft',
|
'state': lambda *a: 'draft',
|
||||||
'date': lambda *a: fields.datetime.now(),
|
'date': lambda *a: fields.datetime.now(),
|
||||||
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
|
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
|
||||||
|
|
|
@ -38,7 +38,7 @@ You can also use the geolocalization without using the GPS coordinates.
|
||||||
""",
|
""",
|
||||||
'author': 'OpenERP SA',
|
'author': 'OpenERP SA',
|
||||||
'depends': ['crm', 'account', 'portal'],
|
'depends': ['crm', 'account', 'portal'],
|
||||||
'demo': ['res_partner_demo.xml'],
|
'demo': ['res_partner_demo.xml', 'crm_lead_demo.xml'],
|
||||||
'data': [
|
'data': [
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
'res_partner_view.xml',
|
'res_partner_view.xml',
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<openerp>
|
||||||
|
<data noupdate="1">
|
||||||
|
|
||||||
|
<!-- Demo Leads -->
|
||||||
|
<record id="crm_case_partner_assign_1" model="crm.lead">
|
||||||
|
<field name="type">lead</field>
|
||||||
|
<field name="name">Specifications and price of your phones</field>
|
||||||
|
<field name="contact_name">Steve Martinez</field>
|
||||||
|
<field name="partner_name"></field>
|
||||||
|
<field name="partner_id" ref=""/>
|
||||||
|
<field name="function">Reseller</field>
|
||||||
|
<field name="country_id" ref="base.uk"/>
|
||||||
|
<field name="city">Edinburgh</field>
|
||||||
|
<field name="type_id" ref="crm.type_lead8"/>
|
||||||
|
<field name="categ_ids" eval="[(6, 0, [ref('crm.categ_oppor1')])]"/>
|
||||||
|
<field name="channel_id" ref="crm.crm_case_channel_email"/>
|
||||||
|
<field name="priority">2</field>
|
||||||
|
<field name="section_id" ref="crm.crm_case_section_2"/>
|
||||||
|
<field name="user_id" ref=""/>
|
||||||
|
<field name="stage_id" ref="crm.stage_lead1"/>
|
||||||
|
<field name="description">Hi,
|
||||||
|
|
||||||
|
Please, can you give me more details about your phones, including their specifications and their prices.
|
||||||
|
|
||||||
|
Regards,
|
||||||
|
Steve</field>
|
||||||
|
<field eval="1" name="active"/>
|
||||||
|
<field name="partner_assigned_id" ref="portal.partner_demo_portal"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -8,14 +8,14 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
"PO-Revision-Date: 2012-12-14 13:50+0000\n"
|
"PO-Revision-Date: 2013-07-23 06:22+0000\n"
|
||||||
"Last-Translator: 盈通 ccdos <ccdos@163.com>\n"
|
"Last-Translator: fanvil <fanvil@hotmail.com>\n"
|
||||||
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
|
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\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-03-16 05:47+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-24 05:31+0000\n"
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
"X-Generator: Launchpad (build 16700)\n"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.report.assign,delay_close:0
|
#: field:crm.lead.report.assign,delay_close:0
|
||||||
|
@ -37,7 +37,7 @@ msgstr "计划收入"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Message type: email for email message, notification for system message, "
|
"Message type: email for email message, notification for system message, "
|
||||||
"comment for other messages such as user replies"
|
"comment for other messages such as user replies"
|
||||||
msgstr ""
|
msgstr "消息类型:Email 用于 邮件消息, 通知用户系统消息,评论用于其他消息,例如用户回复。"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.report.assign,nbr:0
|
#: field:crm.lead.report.assign,nbr:0
|
||||||
|
@ -53,7 +53,7 @@ msgstr "分组..."
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,body:0
|
#: help:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Automatically sanitized HTML contents"
|
msgid "Automatically sanitized HTML contents"
|
||||||
msgstr ""
|
msgstr "自动整理HTML内容"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -68,7 +68,7 @@ msgstr "geolocalization定位"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,starred:0
|
#: field:crm.lead.forward.to.partner,starred:0
|
||||||
msgid "Starred"
|
msgid "Starred"
|
||||||
msgstr ""
|
msgstr "加星号的邮件"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead.forward.to.partner:0
|
#: view:crm.lead.forward.to.partner:0
|
||||||
|
@ -80,7 +80,7 @@ msgstr "正文"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Email address of the sender. This field is set when no matching partner is "
|
"Email address of the sender. This field is set when no matching partner is "
|
||||||
"found for incoming emails."
|
"found for incoming emails."
|
||||||
msgstr ""
|
msgstr "发送者的Email地址。当收取的email没有对应的合作伙伴时,此字段被设置"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.partner.report.assign:0
|
#: view:crm.partner.report.assign:0
|
||||||
|
@ -111,7 +111,7 @@ msgstr "公司"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,notification_ids:0
|
#: field:crm.lead.forward.to.partner,notification_ids:0
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr ""
|
msgstr "通知"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.report.assign,date_assign:0
|
#: field:crm.lead.report.assign,date_assign:0
|
||||||
|
@ -123,7 +123,7 @@ msgstr "业务伙伴日期"
|
||||||
#: view:crm.partner.report.assign:0
|
#: view:crm.partner.report.assign:0
|
||||||
#: view:res.partner:0
|
#: view:res.partner:0
|
||||||
msgid "Salesperson"
|
msgid "Salesperson"
|
||||||
msgstr ""
|
msgstr "销售员"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: selection:crm.lead.report.assign,priority:0
|
#: selection:crm.lead.report.assign,priority:0
|
||||||
|
@ -170,7 +170,7 @@ msgstr "指派的geolocalization"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: model:ir.model,name:crm_partner_assign.model_crm_lead_forward_to_partner
|
#: model:ir.model,name:crm_partner_assign.model_crm_lead_forward_to_partner
|
||||||
msgid "Email composition wizard"
|
msgid "Email composition wizard"
|
||||||
msgstr ""
|
msgstr "Email撰写向导"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.partner.report.assign,turnover:0
|
#: field:crm.partner.report.assign,turnover:0
|
||||||
|
@ -192,7 +192,7 @@ msgstr "为线索指定一个业务伙伴的概率(0表示没指派)"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:res.partner:0
|
#: view:res.partner:0
|
||||||
msgid "Partner Activation"
|
msgid "Partner Activation"
|
||||||
msgstr ""
|
msgstr "激活合作伙伴"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: selection:crm.lead.forward.to.partner,type:0
|
#: selection:crm.lead.forward.to.partner,type:0
|
||||||
|
@ -203,7 +203,7 @@ msgstr "系统通知"
|
||||||
#: code:addons/crm_partner_assign/wizard/crm_forward_to_partner.py:74
|
#: code:addons/crm_partner_assign/wizard/crm_forward_to_partner.py:74
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Lead forward"
|
msgid "Lead forward"
|
||||||
msgstr ""
|
msgstr "转发的线索"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.report.assign,probability:0
|
#: field:crm.lead.report.assign,probability:0
|
||||||
|
@ -284,7 +284,7 @@ msgstr "最低"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.partner.report.assign:0
|
#: view:crm.partner.report.assign:0
|
||||||
msgid "Date Invoice"
|
msgid "Date Invoice"
|
||||||
msgstr ""
|
msgstr "发票排程"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,template_id:0
|
#: field:crm.lead.forward.to.partner,template_id:0
|
||||||
|
@ -309,7 +309,7 @@ msgstr "创建日期"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: model:ir.model,name:crm_partner_assign.model_res_partner_activation
|
#: model:ir.model,name:crm_partner_assign.model_res_partner_activation
|
||||||
msgid "res.partner.activation"
|
msgid "res.partner.activation"
|
||||||
msgstr ""
|
msgstr "res.partner.activation"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,parent_id:0
|
#: field:crm.lead.forward.to.partner,parent_id:0
|
||||||
|
@ -344,7 +344,7 @@ msgstr "7月"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.partner.report.assign:0
|
#: view:crm.partner.report.assign:0
|
||||||
msgid "Date Review"
|
msgid "Date Review"
|
||||||
msgstr ""
|
msgstr "回顾排程"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead.report.assign:0
|
#: view:crm.lead.report.assign:0
|
||||||
|
@ -356,12 +356,12 @@ msgstr "阶段"
|
||||||
#: view:crm.lead.report.assign:0
|
#: view:crm.lead.report.assign:0
|
||||||
#: field:crm.lead.report.assign,state:0
|
#: field:crm.lead.report.assign,state:0
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr ""
|
msgstr "状态"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,to_read:0
|
#: field:crm.lead.forward.to.partner,to_read:0
|
||||||
msgid "To read"
|
msgid "To read"
|
||||||
msgstr ""
|
msgstr "查看"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: code:addons/crm_partner_assign/wizard/crm_forward_to_partner.py:74
|
#: code:addons/crm_partner_assign/wizard/crm_forward_to_partner.py:74
|
||||||
|
@ -416,12 +416,12 @@ msgstr "到期天数"
|
||||||
#: help:crm.lead.forward.to.partner,notified_partner_ids:0
|
#: help:crm.lead.forward.to.partner,notified_partner_ids:0
|
||||||
msgid ""
|
msgid ""
|
||||||
"Partners that have a notification pushing this message in their mailboxes"
|
"Partners that have a notification pushing this message in their mailboxes"
|
||||||
msgstr ""
|
msgstr "推送此通知消息进他们邮箱的合作伙伴"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: selection:crm.lead.forward.to.partner,type:0
|
#: selection:crm.lead.forward.to.partner,type:0
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr ""
|
msgstr "评论"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:res.partner,partner_weight:0
|
#: field:res.partner,partner_weight:0
|
||||||
|
@ -449,7 +449,7 @@ msgstr "12月"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,vote_user_ids:0
|
#: help:crm.lead.forward.to.partner,vote_user_ids:0
|
||||||
msgid "Users that voted for this message"
|
msgid "Users that voted for this message"
|
||||||
msgstr ""
|
msgstr "投票给这条消息的用户"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead.report.assign:0
|
#: view:crm.lead.report.assign:0
|
||||||
|
@ -465,13 +465,13 @@ msgstr "开启日期"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,child_ids:0
|
#: field:crm.lead.forward.to.partner,child_ids:0
|
||||||
msgid "Child Messages"
|
msgid "Child Messages"
|
||||||
msgstr ""
|
msgstr "子信息"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.partner.report.assign,date_review:0
|
#: field:crm.partner.report.assign,date_review:0
|
||||||
#: field:res.partner,date_review:0
|
#: field:res.partner,date_review:0
|
||||||
msgid "Latest Partner Review"
|
msgid "Latest Partner Review"
|
||||||
msgstr ""
|
msgstr "最新合作伙伴评论"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,subject:0
|
#: field:crm.lead.forward.to.partner,subject:0
|
||||||
|
@ -481,17 +481,17 @@ msgstr "主题"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead.forward.to.partner:0
|
#: view:crm.lead.forward.to.partner:0
|
||||||
msgid "or"
|
msgid "or"
|
||||||
msgstr ""
|
msgstr "或"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,body:0
|
#: field:crm.lead.forward.to.partner,body:0
|
||||||
msgid "Contents"
|
msgid "Contents"
|
||||||
msgstr ""
|
msgstr "内容"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,vote_user_ids:0
|
#: field:crm.lead.forward.to.partner,vote_user_ids:0
|
||||||
msgid "Votes"
|
msgid "Votes"
|
||||||
msgstr ""
|
msgstr "投票"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead.report.assign:0
|
#: view:crm.lead.report.assign:0
|
||||||
|
@ -501,13 +501,13 @@ msgstr "#商机"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,starred:0
|
#: help:crm.lead.forward.to.partner,starred:0
|
||||||
msgid "Current user has a starred notification linked to this message"
|
msgid "Current user has a starred notification linked to this message"
|
||||||
msgstr ""
|
msgstr "当前用户用 星号 提醒关联到这条消息"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.partner.report.assign,date_partnership:0
|
#: field:crm.partner.report.assign,date_partnership:0
|
||||||
#: field:res.partner,date_partnership:0
|
#: field:res.partner,date_partnership:0
|
||||||
msgid "Partnership Date"
|
msgid "Partnership Date"
|
||||||
msgstr ""
|
msgstr "合作关系日期"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -661,7 +661,7 @@ msgstr ""
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.partner.report.assign,period_id:0
|
#: field:crm.partner.report.assign,period_id:0
|
||||||
msgid "Invoice Period"
|
msgid "Invoice Period"
|
||||||
msgstr ""
|
msgstr "发票期间"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: model:ir.model,name:crm_partner_assign.model_res_partner_grade
|
#: model:ir.model,name:crm_partner_assign.model_res_partner_grade
|
||||||
|
@ -682,7 +682,7 @@ msgstr "附件"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,record_name:0
|
#: field:crm.lead.forward.to.partner,record_name:0
|
||||||
msgid "Message Record Name"
|
msgid "Message Record Name"
|
||||||
msgstr ""
|
msgstr "消息记录名称"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:res.partner.activation,sequence:0
|
#: field:res.partner.activation,sequence:0
|
||||||
|
@ -696,7 +696,7 @@ msgstr "序列"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot contact geolocation servers. Please make sure that your internet "
|
"Cannot contact geolocation servers. Please make sure that your internet "
|
||||||
"connection is up and running (%s)."
|
"connection is up and running (%s)."
|
||||||
msgstr ""
|
msgstr "无法连接地理信息服务器。请确保你的互联网链接畅通(%s)。"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: selection:crm.lead.report.assign,month:0
|
#: selection:crm.lead.report.assign,month:0
|
||||||
|
@ -722,7 +722,7 @@ msgstr "开启"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,subtype_id:0
|
#: field:crm.lead.forward.to.partner,subtype_id:0
|
||||||
msgid "Subtype"
|
msgid "Subtype"
|
||||||
msgstr ""
|
msgstr "子类型"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:res.partner,date_localization:0
|
#: field:res.partner,date_localization:0
|
||||||
|
@ -737,12 +737,12 @@ msgstr "当前的"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: model:ir.model,name:crm_partner_assign.model_crm_lead
|
#: model:ir.model,name:crm_partner_assign.model_crm_lead
|
||||||
msgid "Lead/Opportunity"
|
msgid "Lead/Opportunity"
|
||||||
msgstr ""
|
msgstr "线索/商机"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,notified_partner_ids:0
|
#: field:crm.lead.forward.to.partner,notified_partner_ids:0
|
||||||
msgid "Notified partners"
|
msgid "Notified partners"
|
||||||
msgstr ""
|
msgstr "已通知的合作伙伴"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead.forward.to.partner:0
|
#: view:crm.lead.forward.to.partner:0
|
||||||
|
@ -773,7 +773,7 @@ msgstr "可能收入"
|
||||||
#: field:res.partner,activation:0
|
#: field:res.partner,activation:0
|
||||||
#: view:res.partner.activation:0
|
#: view:res.partner.activation:0
|
||||||
msgid "Activation"
|
msgid "Activation"
|
||||||
msgstr ""
|
msgstr "激活"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
|
@ -784,12 +784,12 @@ msgstr "指定的业务伙伴"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:res.partner,grade_id:0
|
#: field:res.partner,grade_id:0
|
||||||
msgid "Partner Level"
|
msgid "Partner Level"
|
||||||
msgstr ""
|
msgstr "合作伙伴级别"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: help:crm.lead.forward.to.partner,to_read:0
|
#: help:crm.lead.forward.to.partner,to_read:0
|
||||||
msgid "Current user has an unread notification linked to this message"
|
msgid "Current user has an unread notification linked to this message"
|
||||||
msgstr ""
|
msgstr "当前用户有关联到这条消息的未读的提醒"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: selection:crm.lead.report.assign,type:0
|
#: selection:crm.lead.report.assign,type:0
|
||||||
|
@ -815,7 +815,7 @@ msgstr "名称"
|
||||||
#: model:ir.actions.act_window,name:crm_partner_assign.res_partner_activation_act
|
#: model:ir.actions.act_window,name:crm_partner_assign.res_partner_activation_act
|
||||||
#: model:ir.ui.menu,name:crm_partner_assign.res_partner_activation_config_mi
|
#: model:ir.ui.menu,name:crm_partner_assign.res_partner_activation_config_mi
|
||||||
msgid "Partner Activations"
|
msgid "Partner Activations"
|
||||||
msgstr ""
|
msgstr "合作伙伴激活"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: view:crm.lead.report.assign:0
|
#: view:crm.lead.report.assign:0
|
||||||
|
@ -872,7 +872,7 @@ msgstr "客户关系管理 线索报表"
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,composition_mode:0
|
#: field:crm.lead.forward.to.partner,composition_mode:0
|
||||||
msgid "Composition mode"
|
msgid "Composition mode"
|
||||||
msgstr ""
|
msgstr "写作模式"
|
||||||
|
|
||||||
#. module: crm_partner_assign
|
#. module: crm_partner_assign
|
||||||
#: field:crm.lead.forward.to.partner,model:0
|
#: field:crm.lead.forward.to.partner,model:0
|
||||||
|
|
|
@ -16,12 +16,8 @@
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
|
|
||||||
<field string="Timebox" name="timebox_id"/>
|
<field string="Timebox" name="timebox_id"/>
|
||||||
<button name="prev_timebox" type="object" icon="gtk-go-back" string="Previous" states="draft,pending,open"/>
|
<button name="prev_timebox" type="object" string="Previous"/>
|
||||||
<button name="next_timebox" type="object" icon="gtk-go-forward" string="Next" states="draft,pending,open"/>
|
<button name="next_timebox" type="object" string="Next"/>
|
||||||
|
|
||||||
<field name="state"/>
|
|
||||||
<button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/>
|
|
||||||
<button name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close" help="For changing to done state"/>
|
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</page>
|
</page>
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
# Korean translation for openobject-addons
|
||||||
|
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
|
"PO-Revision-Date: 2013-06-28 09:31+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Korean <ko@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
|
#. module: decimal_precision
|
||||||
|
#: field:decimal.precision,digits:0
|
||||||
|
msgid "Digits"
|
||||||
|
msgstr "자리수"
|
||||||
|
|
||||||
|
#. module: decimal_precision
|
||||||
|
#: model:ir.actions.act_window,name:decimal_precision.action_decimal_precision_form
|
||||||
|
#: model:ir.ui.menu,name:decimal_precision.menu_decimal_precision_form
|
||||||
|
msgid "Decimal Accuracy"
|
||||||
|
msgstr "소숫점 정확성"
|
||||||
|
|
||||||
|
#. module: decimal_precision
|
||||||
|
#: field:decimal.precision,name:0
|
||||||
|
msgid "Usage"
|
||||||
|
msgstr "사용량"
|
||||||
|
|
||||||
|
#. module: decimal_precision
|
||||||
|
#: sql_constraint:decimal.precision:0
|
||||||
|
msgid "Only one value can be defined for each given usage!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: decimal_precision
|
||||||
|
#: view:decimal.precision:0
|
||||||
|
msgid "Decimal Precision"
|
||||||
|
msgstr "소수점 정확성"
|
||||||
|
|
||||||
|
#. module: decimal_precision
|
||||||
|
#: model:ir.model,name:decimal_precision.model_decimal_precision
|
||||||
|
msgid "decimal.precision"
|
||||||
|
msgstr "decimal.precision"
|
|
@ -66,7 +66,7 @@ class document_page(osv.osv):
|
||||||
'create_date': fields.datetime("Created on", select=True, readonly=True),
|
'create_date': fields.datetime("Created on", select=True, readonly=True),
|
||||||
'create_uid': fields.many2one('res.users', 'Author', select=True, readonly=True),
|
'create_uid': fields.many2one('res.users', 'Author', select=True, readonly=True),
|
||||||
'write_date': fields.datetime("Modification Date", select=True, readonly=True),
|
'write_date': fields.datetime("Modification Date", select=True, readonly=True),
|
||||||
'write_uid': fields.many2one('res.users', "Last Contributor", select=True),
|
'write_uid': fields.many2one('res.users', "Last Contributor", select=True, readonly=True),
|
||||||
}
|
}
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'type':'content',
|
'type':'content',
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
# Icelandic 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-10 12:09+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Icelandic <is@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-11 05:17+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16696)\n"
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#. openerp-web
|
||||||
|
#: code:addons/edi/static/src/js/edi.js:67
|
||||||
|
#, python-format
|
||||||
|
msgid "Reason:"
|
||||||
|
msgstr "Ástæða:"
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#. openerp-web
|
||||||
|
#: code:addons/edi/static/src/js/edi.js:60
|
||||||
|
#, python-format
|
||||||
|
msgid "The document has been successfully imported!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#. openerp-web
|
||||||
|
#: code:addons/edi/static/src/js/edi.js:65
|
||||||
|
#, python-format
|
||||||
|
msgid "Sorry, the document could not be imported."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#: model:ir.model,name:edi.model_res_company
|
||||||
|
msgid "Companies"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#: model:ir.model,name:edi.model_res_currency
|
||||||
|
msgid "Currency"
|
||||||
|
msgstr "Gjaldmiðill"
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#. openerp-web
|
||||||
|
#: code:addons/edi/static/src/js/edi.js:71
|
||||||
|
#, python-format
|
||||||
|
msgid "Document Import Notification"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#: code:addons/edi/models/edi.py:130
|
||||||
|
#, python-format
|
||||||
|
msgid "Missing application."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#: code:addons/edi/models/edi.py:131
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"The document you are trying to import requires the OpenERP `%s` application. "
|
||||||
|
"You can install it by connecting as the administrator and opening the "
|
||||||
|
"configuration assistant."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#: code:addons/edi/models/edi.py:47
|
||||||
|
#, python-format
|
||||||
|
msgid "'%s' is an invalid external ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#: model:ir.model,name:edi.model_res_partner
|
||||||
|
msgid "Partner"
|
||||||
|
msgstr "Viðskipta aðili"
|
||||||
|
|
||||||
|
#. module: edi
|
||||||
|
#: model:ir.model,name:edi.model_edi_edi
|
||||||
|
msgid "EDI Subsystem"
|
||||||
|
msgstr ""
|
|
@ -22,5 +22,6 @@
|
||||||
import email_template
|
import email_template
|
||||||
import wizard
|
import wizard
|
||||||
import res_partner
|
import res_partner
|
||||||
|
import ir_actions
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -59,6 +59,7 @@ campaigns on any OpenERP document.
|
||||||
'wizard/email_template_preview_view.xml',
|
'wizard/email_template_preview_view.xml',
|
||||||
'email_template_view.xml',
|
'email_template_view.xml',
|
||||||
'res_partner_view.xml',
|
'res_partner_view.xml',
|
||||||
|
'ir_actions_view.xml',
|
||||||
'wizard/mail_compose_message_view.xml',
|
'wizard/mail_compose_message_view.xml',
|
||||||
'security/ir.model.access.csv'
|
'security/ir.model.access.csv'
|
||||||
],
|
],
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
.. _changelog:
|
||||||
|
|
||||||
|
Changelog
|
||||||
|
=========
|
||||||
|
|
||||||
|
`trunk (saas-2)`
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- ``mail.compose.message``: added support of ``mail_server_id`` from template
|
||||||
|
- Server action update
|
||||||
|
|
||||||
|
- added `email` server action type, now entirely based on email templates.
|
|
@ -0,0 +1,13 @@
|
||||||
|
Email Template module documentation
|
||||||
|
===================================
|
||||||
|
|
||||||
|
Email Template documentation topics
|
||||||
|
'''''''''''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
Changelog
|
||||||
|
'''''''''
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
changelog.rst
|
|
@ -0,0 +1,86 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# OpenERP, Open Source Business Applications
|
||||||
|
# Copyright (c) 2013 OpenERP S.A. <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
|
||||||
|
|
||||||
|
|
||||||
|
class actions_server(osv.Model):
|
||||||
|
""" Add email option in server actions. """
|
||||||
|
_name = 'ir.actions.server'
|
||||||
|
_inherit = ['ir.actions.server']
|
||||||
|
|
||||||
|
def _get_states(self, cr, uid, context=None):
|
||||||
|
res = super(actions_server, self)._get_states(cr, uid, context=context)
|
||||||
|
res.insert(0, ('email', 'Send Email'))
|
||||||
|
return res
|
||||||
|
|
||||||
|
_columns = {
|
||||||
|
'email_from': fields.char('From',
|
||||||
|
help="Sender address; define the template to see its value. If not set, the default "
|
||||||
|
"value will be the author's email alias if configured, or email address."),
|
||||||
|
'email_to': fields.char('To (Emails)',
|
||||||
|
help="Comma-separated recipient addresses; define the template to see its value"),
|
||||||
|
'partner_to': fields.char('To (Partners)',
|
||||||
|
help="Comma-separated ids of recipient partners; define the template to see its value"),
|
||||||
|
'subject': fields.char('Subject',
|
||||||
|
help="Email subject; define the template to see its value"),
|
||||||
|
'body_html': fields.text('Body',
|
||||||
|
help="Rich-text/HTML version of the message; define the template to see its value"),
|
||||||
|
'template_id': fields.many2one('email.template', 'Email Template', ondelete='set null',
|
||||||
|
help="Define the email template to use for the email to send.")
|
||||||
|
}
|
||||||
|
|
||||||
|
def on_change_template_id(self, cr, uid, ids, template_id, context=None):
|
||||||
|
""" Render the raw template in the server action fields. """
|
||||||
|
if template_id:
|
||||||
|
fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids']
|
||||||
|
template_values = self.pool.get('email.template').read(cr, uid, template_id, fields, context)
|
||||||
|
values = dict((field, template_values[field]) for field in fields if template_values.get(field))
|
||||||
|
if not values.get('email_from'):
|
||||||
|
return {'warning': {'title': 'Incomplete template', 'message': 'Your template should define email_from'}, 'value': values}
|
||||||
|
else:
|
||||||
|
values = self.default_get(cr, uid, ['subject', 'body_html', 'email_from', 'email_to', 'partner_to'], context=context)
|
||||||
|
|
||||||
|
return {'value': values}
|
||||||
|
|
||||||
|
def create(self, cr, uid, values, context=None):
|
||||||
|
if values.get('template_id'):
|
||||||
|
fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids']
|
||||||
|
template_values = self.pool.get('email.template').read(cr, uid, values.get('template_id'), fields, context)
|
||||||
|
values.update(dict((field, template_values[field]) for field in fields if template_values.get(field)))
|
||||||
|
return super(actions_server, self).create(cr, uid, values, context=context)
|
||||||
|
|
||||||
|
def write(self, cr, uid, ids, values, context=None):
|
||||||
|
if values.get('template_id'):
|
||||||
|
fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids']
|
||||||
|
template_values = self.pool.get('email.template').read(cr, uid, values.get('template_id'), fields, context)
|
||||||
|
values.update(dict((field, template_values[field]) for field in fields if template_values.get(field)))
|
||||||
|
return super(actions_server, self).write(cr, uid, ids, values, context=context)
|
||||||
|
|
||||||
|
def run_action_email(self, cr, uid, action, eval_context=None, context=None):
|
||||||
|
if not action.template_id or not context.get('active_id'):
|
||||||
|
return False
|
||||||
|
self.pool['email.template'].send_mail(cr, uid, action.template_id.id, context.get('active_id'),
|
||||||
|
force_send=False, raise_exception=False, context=context)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,49 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="view_server_action_form_template">
|
||||||
|
<field name="name">ir.actions.server.form</field>
|
||||||
|
<field name="model">ir.actions.server</field>
|
||||||
|
<field name="inherit_id" ref="base.view_server_action_form"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//page[@name='code']" position="after">
|
||||||
|
<page string="Email" autofocus="autofocus"
|
||||||
|
attrs="{'invisible': [('state', '!=', 'email')]}">
|
||||||
|
<p attrs="{'invisible': [('model_id', '!=', False)]}">
|
||||||
|
Please set the Base Model before setting the action details.
|
||||||
|
</p>
|
||||||
|
<group attrs="{'invisible': [('model_id', '=', False)]}">
|
||||||
|
<field name="template_id"
|
||||||
|
on_change='on_change_template_id(template_id)'
|
||||||
|
domain="[('model_id', '=', model_id)]"
|
||||||
|
attrs="{'required': [('state', '=', 'email')]}"/>
|
||||||
|
<p colspan="2" attrs="{'invisible': [('template_id', '!=', False)]}">
|
||||||
|
Choose a template to display its values.
|
||||||
|
</p>
|
||||||
|
<p colspan="2" attrs="{'invisible': [('template_id', '=', False)]}">
|
||||||
|
The values displayed hereunder are informative. When sending the email, the values
|
||||||
|
will be taken from the email template.
|
||||||
|
</p>
|
||||||
|
</group>
|
||||||
|
<group attrs="{'invisible': ['|', ('model_id', '=', False), ('template_id', '=', False)]}">
|
||||||
|
<label for="email_from"/>
|
||||||
|
<div>
|
||||||
|
<field name="email_from" nolabel="1'" readonly="1"
|
||||||
|
attrs="{'required': [('state', '=', 'email')]}"/>
|
||||||
|
<p attrs="{'invisible': [('email_from', '!=', False)]}">
|
||||||
|
Your template does not defined any email_from. Please update your template.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<field name="email_to" readonly="1"/>
|
||||||
|
<field name="partner_to" readonly="1"/>
|
||||||
|
<field name="subject" readonly="1" attrs="{'required': [('state', '=', 'email')]}"/>
|
||||||
|
<field name="body_html" readonly="1" attrs="{'required': [('state', '=', 'email')]}"/>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -18,10 +18,11 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from . import test_mail
|
from . import test_mail, test_ir_actions
|
||||||
|
|
||||||
checks = [
|
checks = [
|
||||||
test_mail,
|
test_mail,
|
||||||
|
test_ir_actions,
|
||||||
]
|
]
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,55 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# OpenERP, Open Source Business Applications
|
||||||
|
# Copyright (c) 2013-TODAY OpenERP S.A. <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.addons.base.tests.test_ir_actions import TestServerActionsBase
|
||||||
|
|
||||||
|
|
||||||
|
class TestServerActionsEmail(TestServerActionsBase):
|
||||||
|
|
||||||
|
def test_00_state_email(self):
|
||||||
|
""" Test ir.actions.server email type """
|
||||||
|
cr, uid = self.cr, self.uid
|
||||||
|
|
||||||
|
# create email_template
|
||||||
|
template_id = self.registry('email.template').create(cr, uid, {
|
||||||
|
'name': 'TestTemplate',
|
||||||
|
'email_from': 'myself@example.com',
|
||||||
|
'email_to': 'brigitte@example.com',
|
||||||
|
'partner_to': '[%s]' % self.test_partner_id,
|
||||||
|
'model_id': self.res_partner_model_id,
|
||||||
|
'subject': 'About ${object.name}',
|
||||||
|
'body_html': '<p>Dear ${object.name}, your parent is ${object.parent_id and object.parent_id.name or "False"}</p>',
|
||||||
|
})
|
||||||
|
|
||||||
|
self.ir_actions_server.write(cr, uid, self.act_id, {
|
||||||
|
'state': 'email',
|
||||||
|
'template_id': template_id,
|
||||||
|
})
|
||||||
|
run_res = self.ir_actions_server.run(cr, uid, [self.act_id], context=self.context)
|
||||||
|
self.assertFalse(run_res, 'ir_actions_server: email server action correctly finished should return False')
|
||||||
|
|
||||||
|
# check an email is waiting for sending
|
||||||
|
mail_ids = self.registry('mail.mail').search(cr, uid, [('subject', '=', 'About TestingPartner')])
|
||||||
|
self.assertEqual(len(mail_ids), 1, 'ir_actions_server: TODO')
|
||||||
|
# check email content
|
||||||
|
mail = self.registry('mail.mail').browse(cr, uid, mail_ids[0])
|
||||||
|
self.assertEqual(mail.body, '<p>Dear TestingPartner, your parent is False</p>',
|
||||||
|
'ir_actions_server: TODO')
|
|
@ -22,6 +22,7 @@
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import osv, fields
|
||||||
|
|
||||||
|
|
||||||
def _reopen(self, res_id, model):
|
def _reopen(self, res_id, model):
|
||||||
return {'type': 'ir.actions.act_window',
|
return {'type': 'ir.actions.act_window',
|
||||||
'view_mode': 'form',
|
'view_mode': 'form',
|
||||||
|
@ -34,7 +35,8 @@ def _reopen(self, res_id, model):
|
||||||
'context': {
|
'context': {
|
||||||
'default_model': model,
|
'default_model': model,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class mail_compose_message(osv.TransientModel):
|
class mail_compose_message(osv.TransientModel):
|
||||||
_inherit = 'mail.compose.message'
|
_inherit = 'mail.compose.message'
|
||||||
|
@ -58,7 +60,7 @@ class mail_compose_message(osv.TransientModel):
|
||||||
context = {}
|
context = {}
|
||||||
wizard_context = dict(context)
|
wizard_context = dict(context)
|
||||||
for wizard in self.browse(cr, uid, ids, context=context):
|
for wizard in self.browse(cr, uid, ids, context=context):
|
||||||
if wizard.template_id and not wizard.template_id.user_signature:
|
if wizard.template_id:
|
||||||
wizard_context['mail_notify_user_signature'] = False # template user_signature is added when generating body_html
|
wizard_context['mail_notify_user_signature'] = False # template user_signature is added when generating body_html
|
||||||
if not wizard.attachment_ids or wizard.composition_mode == 'mass_mail' or not wizard.template_id:
|
if not wizard.attachment_ids or wizard.composition_mode == 'mass_mail' or not wizard.template_id:
|
||||||
continue
|
continue
|
||||||
|
@ -75,7 +77,7 @@ class mail_compose_message(osv.TransientModel):
|
||||||
""" - mass_mailing: we cannot render, so return the template values
|
""" - mass_mailing: we cannot render, so return the template values
|
||||||
- normal mode: return rendered values """
|
- normal mode: return rendered values """
|
||||||
if template_id and composition_mode == 'mass_mail':
|
if template_id and composition_mode == 'mass_mail':
|
||||||
fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids']
|
fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids', 'mail_server_id']
|
||||||
template_values = self.pool.get('email.template').read(cr, uid, template_id, fields, context)
|
template_values = self.pool.get('email.template').read(cr, uid, template_id, fields, context)
|
||||||
values = dict((field, template_values[field]) for field in fields if template_values.get(field))
|
values = dict((field, template_values[field]) for field in fields if template_values.get(field))
|
||||||
elif template_id:
|
elif template_id:
|
||||||
|
@ -95,7 +97,7 @@ class mail_compose_message(osv.TransientModel):
|
||||||
}
|
}
|
||||||
values['attachment_ids'].append(ir_attach_obj.create(cr, uid, data_attach, context=context))
|
values['attachment_ids'].append(ir_attach_obj.create(cr, uid, data_attach, context=context))
|
||||||
else:
|
else:
|
||||||
values = self.default_get(cr, uid, ['subject', 'body', 'email_from', 'email_to', 'email_cc', 'partner_to', 'reply_to', 'attachment_ids'], context=context)
|
values = self.default_get(cr, uid, ['subject', 'body', 'email_from', 'email_to', 'email_cc', 'partner_to', 'reply_to', 'attachment_ids', 'mail_server_id'], context=context)
|
||||||
|
|
||||||
if values.get('body_html'):
|
if values.get('body_html'):
|
||||||
values['body'] = values.pop('body_html')
|
values['body'] = values.pop('body_html')
|
||||||
|
@ -150,7 +152,7 @@ class mail_compose_message(osv.TransientModel):
|
||||||
mail.compose.message, transform email_cc and email_to into partner_ids """
|
mail.compose.message, transform email_cc and email_to into partner_ids """
|
||||||
template_values = self.pool.get('email.template').generate_email(cr, uid, template_id, res_id, context=context)
|
template_values = self.pool.get('email.template').generate_email(cr, uid, template_id, res_id, context=context)
|
||||||
# filter template values
|
# filter template values
|
||||||
fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids', 'attachments']
|
fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids', 'attachments', 'mail_server_id']
|
||||||
values = dict((field, template_values[field]) for field in fields if template_values.get(field))
|
values = dict((field, template_values[field]) for field in fields if template_values.get(field))
|
||||||
values['body'] = values.pop('body_html', '')
|
values['body'] = values.pop('body_html', '')
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,322 @@
|
||||||
|
# Korean translation for openobject-addons
|
||||||
|
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
|
"PO-Revision-Date: 2013-06-28 09:25+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Korean <ko@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: selection:fetchmail.server,state:0
|
||||||
|
msgid "Confirmed"
|
||||||
|
msgstr "확정됨"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,server:0
|
||||||
|
msgid "Server Name"
|
||||||
|
msgstr "서버 이름"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "POP"
|
||||||
|
msgstr "POP"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: help:fetchmail.server,priority:0
|
||||||
|
msgid "Defines the order of processing, lower values mean higher priority"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: help:fetchmail.server,is_ssl:0
|
||||||
|
msgid ""
|
||||||
|
"Connections are encrypted with SSL/TLS through a dedicated port (default: "
|
||||||
|
"IMAPS=993, POP3S=995)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,attach:0
|
||||||
|
msgid "Keep Attachments"
|
||||||
|
msgstr "첨부파일 보관"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,is_ssl:0
|
||||||
|
msgid "SSL/TLS"
|
||||||
|
msgstr "SSL/TLS"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: help:fetchmail.server,original:0
|
||||||
|
msgid ""
|
||||||
|
"Whether a full original copy of each email should be kept for referenceand "
|
||||||
|
"attached to each processed message. This will usually double the size of "
|
||||||
|
"your message database."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:base.config.settings:0
|
||||||
|
msgid "Configure the incoming email gateway"
|
||||||
|
msgstr "수신 이메일 게이트웨이 구성"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Fetch Now"
|
||||||
|
msgstr "지금 가져오기"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree
|
||||||
|
#: model:ir.ui.menu,name:fetchmail.menu_action_fetchmail_server_tree
|
||||||
|
msgid "Incoming Mail Servers"
|
||||||
|
msgstr "수신 메일 서버"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Server type IMAP."
|
||||||
|
msgstr "서버유형 IMAP."
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "POP/IMAP Servers"
|
||||||
|
msgstr "POP/IMAP 서버"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: selection:fetchmail.server,type:0
|
||||||
|
msgid "Local Server"
|
||||||
|
msgstr "로컬 서버"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,state:0
|
||||||
|
msgid "Status"
|
||||||
|
msgstr "상태"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: model:ir.model,name:fetchmail.model_fetchmail_server
|
||||||
|
msgid "POP/IMAP Server"
|
||||||
|
msgstr "POP/IMAP 서버"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Reset Confirmation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "SSL"
|
||||||
|
msgstr "SSL"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: model:ir.model,name:fetchmail.model_fetchmail_config_settings
|
||||||
|
msgid "fetchmail.config.settings"
|
||||||
|
msgstr "fetchmail.config.settings"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,date:0
|
||||||
|
msgid "Last Fetch Date"
|
||||||
|
msgstr "마지막으로 가져온 날짜"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: help:fetchmail.server,action_id:0
|
||||||
|
msgid ""
|
||||||
|
"Optional custom server action to trigger for each incoming mail, on the "
|
||||||
|
"record that was created or updated by this mail"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "# of emails"
|
||||||
|
msgstr "이메일 개수"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,original:0
|
||||||
|
msgid "Keep Original"
|
||||||
|
msgstr "원본 유지"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Advanced Options"
|
||||||
|
msgstr "고급 옵션"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
#: field:fetchmail.server,configuration:0
|
||||||
|
msgid "Configuration"
|
||||||
|
msgstr "구성"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,script:0
|
||||||
|
msgid "Script"
|
||||||
|
msgstr "스크립트"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Incoming Mail Server"
|
||||||
|
msgstr "수신 메일 서버"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: code:addons/fetchmail/fetchmail.py:163
|
||||||
|
#, python-format
|
||||||
|
msgid "Connection test failed!"
|
||||||
|
msgstr "연결 시험에 실패함!"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,user:0
|
||||||
|
msgid "Username"
|
||||||
|
msgstr "사용자명"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: help:fetchmail.server,server:0
|
||||||
|
msgid "Hostname or IP of the mail server"
|
||||||
|
msgstr "메일서버의 호스트이름 또는 IP"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,name:0
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "이름"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: code:addons/fetchmail/fetchmail.py:163
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Here is what we got instead:\n"
|
||||||
|
" %s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Test & Confirm"
|
||||||
|
msgstr "시험 & 확정"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,action_id:0
|
||||||
|
msgid "Server Action"
|
||||||
|
msgstr "서버 동작"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:mail.mail,fetchmail_server_id:0
|
||||||
|
msgid "Inbound Mail Server"
|
||||||
|
msgstr "수신메일서버"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,message_ids:0
|
||||||
|
#: model:ir.actions.act_window,name:fetchmail.act_server_history
|
||||||
|
msgid "Messages"
|
||||||
|
msgstr "메시지"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Search Incoming Mail Servers"
|
||||||
|
msgstr "수신메일서버 검색"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,active:0
|
||||||
|
msgid "Active"
|
||||||
|
msgstr "활성"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: help:fetchmail.server,attach:0
|
||||||
|
msgid ""
|
||||||
|
"Whether attachments should be downloaded. If not enabled, incoming emails "
|
||||||
|
"will be stripped of any attachments before being processed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: model:ir.model,name:fetchmail.model_mail_mail
|
||||||
|
msgid "Outgoing Mails"
|
||||||
|
msgstr "발신 이메일"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,priority:0
|
||||||
|
msgid "Server Priority"
|
||||||
|
msgstr "서버 우선 순위"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: selection:fetchmail.server,type:0
|
||||||
|
msgid "IMAP Server"
|
||||||
|
msgstr "IMAP 서버"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "IMAP"
|
||||||
|
msgstr "IMAP"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Server type POP."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,password:0
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "암호"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Actions to Perform on Incoming Mails"
|
||||||
|
msgstr "수신 메일에 실행할 동작"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,type:0
|
||||||
|
msgid "Server Type"
|
||||||
|
msgstr "서버 유형"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Login Information"
|
||||||
|
msgstr "로그인 정보"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Server Information"
|
||||||
|
msgstr "서버 정보"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "If SSL required."
|
||||||
|
msgstr "SSL이 필요할 경우."
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr "고급"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: view:fetchmail.server:0
|
||||||
|
msgid "Server & Login"
|
||||||
|
msgstr "서버 & 로그인"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: help:fetchmail.server,object_id:0
|
||||||
|
msgid ""
|
||||||
|
"Process each incoming mail as part of a conversation corresponding to this "
|
||||||
|
"document type. This will create new documents for new conversations, or "
|
||||||
|
"attach follow-up emails to the existing conversations (documents)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,object_id:0
|
||||||
|
msgid "Create a New Record"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: selection:fetchmail.server,state:0
|
||||||
|
msgid "Not Confirmed"
|
||||||
|
msgstr "확정되지 않음"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: selection:fetchmail.server,type:0
|
||||||
|
msgid "POP Server"
|
||||||
|
msgstr "POP 서버"
|
||||||
|
|
||||||
|
#. module: fetchmail
|
||||||
|
#: field:fetchmail.server,port:0
|
||||||
|
msgid "Port"
|
||||||
|
msgstr "포트"
|
|
@ -28,7 +28,7 @@ import urllib2
|
||||||
import simplejson
|
import simplejson
|
||||||
|
|
||||||
|
|
||||||
class google_service(osv.osv):
|
class google_service(osv.osv_memory):
|
||||||
_name = 'google.service'
|
_name = 'google.service'
|
||||||
|
|
||||||
def generate_refresh_token(self, cr, uid, service, authorization_code, context=None):
|
def generate_refresh_token(self, cr, uid, service, authorization_code, context=None):
|
||||||
|
@ -51,10 +51,10 @@ class google_service(osv.osv):
|
||||||
content = simplejson.loads(content)
|
content = simplejson.loads(content)
|
||||||
return content.get('refresh_token')
|
return content.get('refresh_token')
|
||||||
|
|
||||||
def _get_google_token_uri(self, cr, uid, service, context=None):
|
def _get_google_token_uri(self, cr, uid, service, scope, context=None):
|
||||||
ir_config = self.pool['ir.config_parameter']
|
ir_config = self.pool['ir.config_parameter']
|
||||||
params = {
|
params = {
|
||||||
'scope': 'https://www.googleapis.com/auth/drive',
|
'scope': scope,
|
||||||
'redirect_uri': ir_config.get_param(cr, SUPERUSER_ID, 'google_redirect_uri'),
|
'redirect_uri': ir_config.get_param(cr, SUPERUSER_ID, 'google_redirect_uri'),
|
||||||
'client_id': ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % service),
|
'client_id': ir_config.get_param(cr, SUPERUSER_ID, 'google_%s_client_id' % service),
|
||||||
'response_type': 'code',
|
'response_type': 'code',
|
||||||
|
|
|
@ -54,58 +54,69 @@ class config(osv.osv):
|
||||||
attachment = attach_pool.browse(cr, uid, attach_ids[0], context)
|
attachment = attach_pool.browse(cr, uid, attach_ids[0], context)
|
||||||
url = attachment.url
|
url = attachment.url
|
||||||
else:
|
else:
|
||||||
url = self.copy_doc(cr, uid, res_id, template_id, name_gdocs, model.model, context)
|
url = self.copy_doc(cr, uid, res_id, template_id, name_gdocs, model.model, context).get('url')
|
||||||
return url
|
return url
|
||||||
|
|
||||||
def copy_doc(self, cr, uid, res_id, template_id, name_gdocs, res_model, context=None):
|
def get_access_token(self, cr, uid, scope=None, context=None):
|
||||||
ir_config = self.pool['ir.config_parameter']
|
ir_config = self.pool['ir.config_parameter']
|
||||||
google_drive_refresh_token = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_refresh_token')
|
google_drive_refresh_token = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_refresh_token')
|
||||||
|
group_config = self.pool['ir.model.data'].get_object_reference(cr, uid, 'base', 'group_erp_manager')[1]
|
||||||
|
user = self.pool['res.users'].read(cr, uid, uid, "groups_id")
|
||||||
if not google_drive_refresh_token:
|
if not google_drive_refresh_token:
|
||||||
raise self.pool.get('res.config.settings').get_config_warning(cr, _("You haven't configured 'Authorization Code' generated from google, Please generate and configure it in %(menu:base_setup.menu_general_configuration)s."), context=context)
|
if group_config in user['groups_id']:
|
||||||
|
raise self.pool.get('res.config.settings').get_config_warning(cr, _("You haven't configured 'Authorization Code' generated from google, Please generate and configure it in %(menu:base_setup.menu_general_configuration)s."), context=context)
|
||||||
|
else:
|
||||||
|
raise osv.except_osv(_('Error!'), _("Google Drive is not yet configured. Please contact your administrator."))
|
||||||
google_drive_client_id = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_client_id')
|
google_drive_client_id = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_client_id')
|
||||||
google_drive_client_secret = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_client_secret')
|
google_drive_client_secret = ir_config.get_param(cr, SUPERUSER_ID, 'google_drive_client_secret')
|
||||||
google_web_base_url = ir_config.get_param(cr, SUPERUSER_ID, 'web.base.url')
|
|
||||||
|
|
||||||
#For Getting New Access Token With help of old Refresh Token
|
#For Getting New Access Token With help of old Refresh Token
|
||||||
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept-Encoding": "gzip, deflate"}
|
|
||||||
data = dict(client_id=google_drive_client_id,
|
|
||||||
refresh_token=google_drive_refresh_token,
|
|
||||||
client_secret=google_drive_client_secret,
|
|
||||||
grant_type="refresh_token")
|
|
||||||
|
|
||||||
data = urllib.urlencode(data)
|
data = urllib.urlencode(dict(client_id=google_drive_client_id,
|
||||||
|
refresh_token=google_drive_refresh_token,
|
||||||
|
client_secret=google_drive_client_secret,
|
||||||
|
grant_type="refresh_token",
|
||||||
|
scope=scope or 'https://www.googleapis.com/auth/drive'))
|
||||||
|
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept-Encoding": "gzip, deflate"}
|
||||||
try:
|
try:
|
||||||
req = urllib2.Request('https://accounts.google.com/o/oauth2/token', data, headers)
|
req = urllib2.Request('https://accounts.google.com/o/oauth2/token', data, headers)
|
||||||
content = urllib2.urlopen(req).read()
|
content = urllib2.urlopen(req).read()
|
||||||
except urllib2.HTTPError:
|
except urllib2.HTTPError:
|
||||||
raise self.pool.get('res.config.settings').get_config_warning(cr, _("Something went wrong during the token generation. Please request again an authorization code in %(menu:base_setup.menu_general_configuration)s."), context=context)
|
if group_config in user['groups_id']:
|
||||||
|
raise self.pool.get('res.config.settings').get_config_warning(cr, _("Something went wrong during the token generation. Please request again an authorization code in %(menu:base_setup.menu_general_configuration)s."), context=context)
|
||||||
|
else:
|
||||||
|
raise osv.except_osv(_('Error!'), _("Google Drive is not yet configured. Please contact your administrator."))
|
||||||
content = json.loads(content)
|
content = json.loads(content)
|
||||||
|
return content.get('access_token')
|
||||||
|
|
||||||
|
def copy_doc(self, cr, uid, res_id, template_id, name_gdocs, res_model, context=None):
|
||||||
|
ir_config = self.pool['ir.config_parameter']
|
||||||
|
google_web_base_url = ir_config.get_param(cr, SUPERUSER_ID, 'web.base.url')
|
||||||
|
access_token = self.get_access_token(cr, uid, context=context)
|
||||||
# Copy template in to drive with help of new access token
|
# Copy template in to drive with help of new access token
|
||||||
if 'access_token' in content:
|
request_url = "https://www.googleapis.com/drive/v2/files/%s?fields=parents/id&access_token=%s" % (template_id, access_token)
|
||||||
request_url = "https://www.googleapis.com/drive/v2/files/%s?fields=parents/id&access_token=%s" % (template_id, content['access_token'])
|
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept-Encoding": "gzip, deflate"}
|
||||||
try:
|
try:
|
||||||
req = urllib2.Request(request_url, None, headers)
|
req = urllib2.Request(request_url, None, headers)
|
||||||
parents = urllib2.urlopen(req).read()
|
parents = urllib2.urlopen(req).read()
|
||||||
except urllib2.HTTPError:
|
except urllib2.HTTPError:
|
||||||
raise self.pool.get('res.config.settings').get_config_warning(cr, _("The Google Template cannot be found. Maybe it has been deleted."), context=context)
|
raise self.pool.get('res.config.settings').get_config_warning(cr, _("The Google Template cannot be found. Maybe it has been deleted."), context=context)
|
||||||
parents_dict = json.loads(parents)
|
parents_dict = json.loads(parents)
|
||||||
|
|
||||||
record_url = "Click on link to open Record in OpenERP\n %s/?db=%s#id=%s&model=%s" % (google_web_base_url, cr.dbname, res_id, res_model)
|
record_url = "Click on link to open Record in OpenERP\n %s/?db=%s#id=%s&model=%s" % (google_web_base_url, cr.dbname, res_id, res_model)
|
||||||
data = {"title": name_gdocs, "description": record_url, "parents": parents_dict['parents']}
|
data = {"title": name_gdocs, "description": record_url, "parents": parents_dict['parents']}
|
||||||
request_url = "https://www.googleapis.com/drive/v2/files/%s/copy?access_token=%s" % (template_id, content['access_token'])
|
request_url = "https://www.googleapis.com/drive/v2/files/%s/copy?access_token=%s" % (template_id, access_token)
|
||||||
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
|
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
|
||||||
data_json = json.dumps(data)
|
data_json = json.dumps(data)
|
||||||
# resp, content = Http().request(request_url, "POST", data_json, headers)
|
# resp, content = Http().request(request_url, "POST", data_json, headers)
|
||||||
req = urllib2.Request(request_url, data_json, headers)
|
req = urllib2.Request(request_url, data_json, headers)
|
||||||
content = urllib2.urlopen(req).read()
|
content = urllib2.urlopen(req).read()
|
||||||
content = json.loads(content)
|
content = json.loads(content)
|
||||||
res = False
|
res = {}
|
||||||
if 'alternateLink' in content.keys():
|
if content.get('alternateLink'):
|
||||||
attach_pool = self.pool.get("ir.attachment")
|
attach_pool = self.pool.get("ir.attachment")
|
||||||
attach_vals = {'res_model': res_model, 'name': name_gdocs, 'res_id': res_id, 'type': 'url', 'url': content['alternateLink']}
|
attach_vals = {'res_model': res_model, 'name': name_gdocs, 'res_id': res_id, 'type': 'url', 'url': content['alternateLink']}
|
||||||
attach_pool.create(cr, uid, attach_vals)
|
res['id'] = attach_pool.create(cr, uid, attach_vals)
|
||||||
res = content['alternateLink']
|
res['url'] = content['alternateLink']
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def get_google_drive_config(self, cr, uid, res_model, res_id, context=None):
|
def get_google_drive_config(self, cr, uid, res_model, res_id, context=None):
|
||||||
|
@ -166,6 +177,7 @@ class config(osv.osv):
|
||||||
'google_drive_resource_id': fields.function(_resource_get, type="char", string='Resource Id'),
|
'google_drive_resource_id': fields.function(_resource_get, type="char", string='Resource Id'),
|
||||||
'google_drive_client_id': fields.function(_client_id_get, type="char", string='Google Client '),
|
'google_drive_client_id': fields.function(_client_id_get, type="char", string='Google Client '),
|
||||||
'name_template': fields.char('Google Drive Name Pattern', size=64, help='Choose how the new google drive will be named, on google side. Eg. gdoc_%(field_name)s', required=True),
|
'name_template': fields.char('Google Drive Name Pattern', size=64, help='Choose how the new google drive will be named, on google side. Eg. gdoc_%(field_name)s', required=True),
|
||||||
|
'active': fields.boolean('Active'),
|
||||||
}
|
}
|
||||||
|
|
||||||
def onchange_model_id(self, cr, uid, ids, model_id, context=None):
|
def onchange_model_id(self, cr, uid, ids, model_id, context=None):
|
||||||
|
@ -179,6 +191,7 @@ class config(osv.osv):
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'name_template': 'Document %(name)s',
|
'name_template': 'Document %(name)s',
|
||||||
|
'active': True,
|
||||||
}
|
}
|
||||||
|
|
||||||
def _check_model_id(self, cr, uid, ids, context=None):
|
def _check_model_id(self, cr, uid, ids, context=None):
|
||||||
|
@ -191,6 +204,9 @@ class config(osv.osv):
|
||||||
(_check_model_id, 'Model of selected filter is not matching with model of current template.', ['model_id', 'filter_id']),
|
(_check_model_id, 'Model of selected filter is not matching with model of current template.', ['model_id', 'filter_id']),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def get_google_scope(self):
|
||||||
|
return 'https://www.googleapis.com/auth/drive'
|
||||||
|
|
||||||
config()
|
config()
|
||||||
|
|
||||||
|
|
||||||
|
@ -202,7 +218,7 @@ class base_config_settings(osv.osv):
|
||||||
'google_drive_uri': fields.char('URI', readonly=True, help="The URL to generate the authorization code from Google"),
|
'google_drive_uri': fields.char('URI', readonly=True, help="The URL to generate the authorization code from Google"),
|
||||||
}
|
}
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'google_drive_uri': lambda s, cr, uid, c: s.pool['google.service']._get_google_token_uri(cr, uid, 'drive', context=c),
|
'google_drive_uri': lambda s, cr, uid, c: s.pool['google.service']._get_google_token_uri(cr, uid, 'drive', scope=s.pool['google.drive.config'].get_google_scope(), context=c),
|
||||||
}
|
}
|
||||||
|
|
||||||
def set_google_authorization_code(self, cr, uid, ids, context=None):
|
def set_google_authorization_code(self, cr, uid, ids, context=None):
|
||||||
|
|
|
@ -4,12 +4,12 @@
|
||||||
|
|
||||||
<record id="config_google_drive_client_id" model="ir.config_parameter">
|
<record id="config_google_drive_client_id" model="ir.config_parameter">
|
||||||
<field name="key">google_drive_client_id</field>
|
<field name="key">google_drive_client_id</field>
|
||||||
<field name="value">39623646228-eg3ggo3mk6o40m7rguobi3rkl9frh4tb.apps.googleusercontent.com</field>
|
<field name="value">598905559630.apps.googleusercontent.com</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="config_google_drive_client_secret" model="ir.config_parameter">
|
<record id="config_google_drive_client_secret" model="ir.config_parameter">
|
||||||
<field name="key">google_drive_client_secret</field>
|
<field name="key">google_drive_client_secret</field>
|
||||||
<field name="value">Ul-PtmnSWs3euWs20fdono0e</field>
|
<field name="value">vTmou73c-njP-1qCxm7qx7QE</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -8,20 +8,19 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2013-06-27 16:03+0000\n"
|
"POT-Creation-Date: 2013-06-27 16:03+0000\n"
|
||||||
"PO-Revision-Date: 2012-12-07 22:47+0000\n"
|
"PO-Revision-Date: 2013-07-20 22:32+0000\n"
|
||||||
"Last-Translator: Fábio Martinelli - http://zupy.com.br "
|
"Last-Translator: Claudio de Araujo Santos <claudioaraujosantos@gmail.com>\n"
|
||||||
"<webmaster@guaru.net>\n"
|
|
||||||
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
|
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\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-06-28 05:42+0000\n"
|
"X-Launchpad-Export-Date: 2013-07-22 05:34+0000\n"
|
||||||
"X-Generator: Launchpad (build 16681)\n"
|
"X-Generator: Launchpad (build 16696)\n"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: model:ir.ui.menu,name:google_drive.menu_google_drive_config
|
#: model:ir.ui.menu,name:google_drive.menu_google_drive_config
|
||||||
msgid "Google Drive configuration"
|
msgid "Google Drive configuration"
|
||||||
msgstr ""
|
msgstr "Configuração do Google Drive"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:48
|
#: code:addons/google_drive/google_drive.py:48
|
||||||
|
@ -40,6 +39,13 @@ msgid ""
|
||||||
"in your Google Drive and in OpenERP attachment will be named\n"
|
"in your Google Drive and in OpenERP attachment will be named\n"
|
||||||
" 'Agrolait_SO0001_Sales'."
|
" 'Agrolait_SO0001_Sales'."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"O nome do documento em anexo pode usar dados fixos ou variáveis. Para "
|
||||||
|
"distinguir entre documentos\n"
|
||||||
|
" Google Drive, usar palavras fixos e campos. "
|
||||||
|
"Por exemplo, no exemplo acima, se escreveu Agrolait_% (nome) s_Sales\n"
|
||||||
|
" no campo Nome da unidade do Google, o "
|
||||||
|
"documento em seu Google Drive e em OpenERP anexo será nomeado\n"
|
||||||
|
" 'Agrolait_SO0001_Sales \"."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:google.drive.config:0
|
#: view:google.drive.config:0
|
||||||
|
@ -47,16 +53,18 @@ msgid ""
|
||||||
"- If filter is not specified, link of google document will appear in "
|
"- If filter is not specified, link of google document will appear in "
|
||||||
"\"More\" option for all users for all opportunities."
|
"\"More\" option for all users for all opportunities."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"- Se o filtro não for especificado, ligação de documento google aparecerá na "
|
||||||
|
"opção \"Mais\" para todos os usuários de todas as oportunidades."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:google.drive.config:0
|
#: view:google.drive.config:0
|
||||||
msgid "To create a new filter:"
|
msgid "To create a new filter:"
|
||||||
msgstr ""
|
msgstr "Para criar um novo filtro:"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: model:ir.model,name:google_drive.model_base_config_settings
|
#: model:ir.model,name:google_drive.model_base_config_settings
|
||||||
msgid "base.config.settings"
|
msgid "base.config.settings"
|
||||||
msgstr ""
|
msgstr "base.config.settings"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config
|
#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config
|
||||||
|
@ -74,17 +82,30 @@ msgid ""
|
||||||
" </p>\n"
|
" </p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" Clique para adicionar um novo modelo.\n"
|
||||||
|
" </ P>\n"
|
||||||
|
" <p>\n"
|
||||||
|
" Vincular seus próprios modelos Google Drive para "
|
||||||
|
"qualquer registro de OpenERP. Se você tem documentos específicos que você "
|
||||||
|
"realmente deseja que seu colaborador preencher, por exemplo, usar uma "
|
||||||
|
"planilha para controlar a qualidade do seu produto ou rever a lista de "
|
||||||
|
"entrega para cada ordem em um país estrangeiro, ... É muito fácil de "
|
||||||
|
"gerenciá-los, associá-los a OpenERP e usá-los para colaborar com seus "
|
||||||
|
"empregados.\n"
|
||||||
|
" </ P>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:150
|
#: code:addons/google_drive/google_drive.py:150
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Incorrect URL!"
|
msgid "Incorrect URL!"
|
||||||
msgstr ""
|
msgstr "URL incorreto!"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:base.config.settings:0
|
#: view:base.config.settings:0
|
||||||
msgid "Configure your templates"
|
msgid "Configure your templates"
|
||||||
msgstr ""
|
msgstr "Configure seus modelos"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: help:google.drive.config,name_template:0
|
#: help:google.drive.config,name_template:0
|
||||||
|
@ -92,6 +113,8 @@ msgid ""
|
||||||
"Choose how the new google drive will be named, on google side. Eg. "
|
"Choose how the new google drive will be named, on google side. Eg. "
|
||||||
"gdoc_%(field_name)s"
|
"gdoc_%(field_name)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Escolha como a nova unidade google será nomeado, no lado google. Por "
|
||||||
|
"exemplo. gdoc_% (field_name) s"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:google.drive.config:0
|
#: view:google.drive.config:0
|
||||||
|
@ -99,6 +122,8 @@ msgid ""
|
||||||
"- Go to the OpenERP document you want to filter. For instance, go to "
|
"- Go to the OpenERP document you want to filter. For instance, go to "
|
||||||
"Opportunities and search on Sales Department."
|
"Opportunities and search on Sales Department."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"- Vá para o documento OpenERP você deseja filtrar. Por exemplo, ir para "
|
||||||
|
"Oportunidades e de pesquisa no Departamento de Vendas."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:google.drive.config:0
|
#: view:google.drive.config:0
|
||||||
|
@ -106,6 +131,8 @@ msgid ""
|
||||||
"- In this \"Search\" view, select the option \"Save Current Filter\", enter "
|
"- In this \"Search\" view, select the option \"Save Current Filter\", enter "
|
||||||
"the name (Ex: Sales Department)"
|
"the name (Ex: Sales Department)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"- Neste ponto de vista \"Pesquisar\", selecione a opção \"Salvar Filtro "
|
||||||
|
"Atual\", digite o nome (Ex: Departamento de Vendas)"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:google.drive.config:0
|
#: view:google.drive.config:0
|
||||||
|
@ -114,6 +141,9 @@ msgid ""
|
||||||
"\"More\" options will appear for all users in opportunities of Sales "
|
"\"More\" options will appear for all users in opportunities of Sales "
|
||||||
"Department."
|
"Department."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"- Se você selecionar \"Compartilhar com todos os usuários\", ligação de "
|
||||||
|
"documento google na opção \"Mais\" será exibido para todos os usuários em "
|
||||||
|
"oportunidades do Departamento de Vendas."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:google.drive.config:0
|
#: view:google.drive.config:0
|
||||||
|
@ -122,23 +152,28 @@ msgid ""
|
||||||
"\"More\" options will not appear for other users in opportunities of Sales "
|
"\"More\" options will not appear for other users in opportunities of Sales "
|
||||||
"Department."
|
"Department."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"- Se você não selecionar \"Compartilhar com todos os usuários\", link do "
|
||||||
|
"documento google em \"More\" opções não aparecerá para outros usuários em "
|
||||||
|
"oportunidades do Departamento de Vendas."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:48
|
#: code:addons/google_drive/google_drive.py:48
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "At least one key cannot be found in your Google Drive name pattern"
|
msgid "At least one key cannot be found in your Google Drive name pattern"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Pelo menos uma chave não pode ser encontrado em seu padrão de nome de Google "
|
||||||
|
"Drive"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:150
|
#: code:addons/google_drive/google_drive.py:150
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please enter a valid Google Document URL."
|
msgid "Please enter a valid Google Document URL."
|
||||||
msgstr ""
|
msgstr "Por favor insira um URL Documento Google válida."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,google_drive_client_id:0
|
#: field:google.drive.config,google_drive_client_id:0
|
||||||
msgid "Google Client "
|
msgid "Google Client "
|
||||||
msgstr ""
|
msgstr "Google Cliente "
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:google.drive.config:0
|
#: view:google.drive.config:0
|
||||||
|
@ -146,43 +181,46 @@ msgid ""
|
||||||
"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu"
|
"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu"
|
||||||
"a4/edit"
|
"a4/edit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu"
|
||||||
|
"a4/edit"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,filter_id:0
|
#: field:google.drive.config,filter_id:0
|
||||||
msgid "Filter"
|
msgid "Filter"
|
||||||
msgstr ""
|
msgstr "Filtro"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,name_template:0
|
#: field:google.drive.config,name_template:0
|
||||||
msgid "Google Drive Name Pattern"
|
msgid "Google Drive Name Pattern"
|
||||||
msgstr ""
|
msgstr "Nome Padrão Google Drive"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: help:base.config.settings,google_drive_uri:0
|
#: help:base.config.settings,google_drive_uri:0
|
||||||
msgid "The URL to generate the authorization code from Google"
|
msgid "The URL to generate the authorization code from Google"
|
||||||
msgstr ""
|
msgstr "O URL para gerar o código de autorização do Google"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: model:ir.filters,name:google_drive.filter_partner
|
#: model:ir.filters,name:google_drive.filter_partner
|
||||||
msgid "Customer"
|
msgid "Customer"
|
||||||
msgstr ""
|
msgstr "Cliente"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,google_drive_resource_id:0
|
#: field:google.drive.config,google_drive_resource_id:0
|
||||||
msgid "Resource Id"
|
msgid "Resource Id"
|
||||||
msgstr ""
|
msgstr "ID Recurso"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:91
|
#: code:addons/google_drive/google_drive.py:91
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The Google Template cannot be found. Maybe it has been deleted."
|
msgid "The Google Template cannot be found. Maybe it has been deleted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"O modelo do Google não pode ser encontrado. Talvez tenha sido excluído."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config
|
#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config
|
||||||
#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config
|
#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config
|
||||||
msgid "Google Drive Templates"
|
msgid "Google Drive Templates"
|
||||||
msgstr ""
|
msgstr "Templates do Google Drive"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:81
|
#: code:addons/google_drive/google_drive.py:81
|
||||||
|
@ -191,23 +229,25 @@ msgid ""
|
||||||
"Something went wrong during the token generation. Please request again an "
|
"Something went wrong during the token generation. Please request again an "
|
||||||
"authorization code in %(menu:base_setup.menu_general_configuration)s."
|
"authorization code in %(menu:base_setup.menu_general_configuration)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Algo deu errado durante a geração de token. Por favor, solicite novamente um "
|
||||||
|
"código de autorização em%(menu:base_setup.menu_general_configuration)s."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:124
|
#: code:addons/google_drive/google_drive.py:124
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Google Drive Error!"
|
msgid "Google Drive Error!"
|
||||||
msgstr ""
|
msgstr "Google Drive Error!"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:base.config.settings,google_drive_uri:0
|
#: field:base.config.settings,google_drive_uri:0
|
||||||
msgid "URI"
|
msgid "URI"
|
||||||
msgstr ""
|
msgstr "URL"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:124
|
#: code:addons/google_drive/google_drive.py:124
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Creating google drive may only be done by one at a time."
|
msgid "Creating google drive may only be done by one at a time."
|
||||||
msgstr ""
|
msgstr "Criação de unidade google só pode ser feito por um de cada vez."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,model:0
|
#: field:google.drive.config,model:0
|
||||||
|
@ -218,38 +258,40 @@ msgstr "Modelo"
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:google.drive.config:0
|
#: view:google.drive.config:0
|
||||||
msgid "Google Drive Configuration"
|
msgid "Google Drive Configuration"
|
||||||
msgstr ""
|
msgstr "Configuração do acionamento Google"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,name:0
|
#: field:google.drive.config,name:0
|
||||||
msgid "Template Name"
|
msgid "Template Name"
|
||||||
msgstr ""
|
msgstr "Nome do modelo"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: constraint:google.drive.config:0
|
#: constraint:google.drive.config:0
|
||||||
msgid ""
|
msgid ""
|
||||||
"Model of selected filter is not matching with model of current template."
|
"Model of selected filter is not matching with model of current template."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Modelo de filtro selecionado não está combinando com o modelo do modelo "
|
||||||
|
"atual."
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,google_drive_template_url:0
|
#: field:google.drive.config,google_drive_template_url:0
|
||||||
msgid "Template URL"
|
msgid "Template URL"
|
||||||
msgstr ""
|
msgstr "Modelo de URL"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:base.config.settings:0
|
#: view:base.config.settings:0
|
||||||
msgid "and paste it here"
|
msgid "and paste it here"
|
||||||
msgstr ""
|
msgstr "e cole-o aqui"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:base.config.settings,google_drive_authorization_code:0
|
#: field:base.config.settings,google_drive_authorization_code:0
|
||||||
msgid "Authorization Code"
|
msgid "Authorization Code"
|
||||||
msgstr ""
|
msgstr "Código de Autorização"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: model:ir.model,name:google_drive.model_google_drive_config
|
#: model:ir.model,name:google_drive.model_google_drive_config
|
||||||
msgid "Google Drive templates config"
|
msgid "Google Drive templates config"
|
||||||
msgstr ""
|
msgstr "Google Drive templates de configuração"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:64
|
#: code:addons/google_drive/google_drive.py:64
|
||||||
|
@ -258,3 +300,6 @@ msgid ""
|
||||||
"You haven't configured 'Authorization Code' generated from google, Please "
|
"You haven't configured 'Authorization Code' generated from google, Please "
|
||||||
"generate and configure it in %(menu:base_setup.menu_general_configuration)s."
|
"generate and configure it in %(menu:base_setup.menu_general_configuration)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Você não configurou \"Código de Autorização\" gerado a partir do Google, por "
|
||||||
|
"favor, gerar e configurá-lo em "
|
||||||
|
"%(menu:base_setup.menu_general_configuration)s."
|
||||||
|
|
|
@ -8,19 +8,19 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-addons\n"
|
"Project-Id-Version: openobject-addons\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2013-06-27 16:03+0000\n"
|
"POT-Creation-Date: 2013-06-27 16:03+0000\n"
|
||||||
"PO-Revision-Date: 2013-01-04 11:38+0000\n"
|
"PO-Revision-Date: 2013-06-29 04:39+0000\n"
|
||||||
"Last-Translator: Roc Wu <irocwu@gmail.com>\n"
|
"Last-Translator: David.Xu <xzxyxu@gmail.com>\n"
|
||||||
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
|
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\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-06-28 05:42+0000\n"
|
"X-Launchpad-Export-Date: 2013-06-30 05:56+0000\n"
|
||||||
"X-Generator: Launchpad (build 16681)\n"
|
"X-Generator: Launchpad (build 16692)\n"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: model:ir.ui.menu,name:google_drive.menu_google_drive_config
|
#: model:ir.ui.menu,name:google_drive.menu_google_drive_config
|
||||||
msgid "Google Drive configuration"
|
msgid "Google Drive configuration"
|
||||||
msgstr ""
|
msgstr "Google Drive配置"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: code:addons/google_drive/google_drive.py:48
|
#: code:addons/google_drive/google_drive.py:48
|
||||||
|
@ -50,7 +50,7 @@ msgstr ""
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:google.drive.config:0
|
#: view:google.drive.config:0
|
||||||
msgid "To create a new filter:"
|
msgid "To create a new filter:"
|
||||||
msgstr ""
|
msgstr "创建新过滤器"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: model:ir.model,name:google_drive.model_base_config_settings
|
#: model:ir.model,name:google_drive.model_base_config_settings
|
||||||
|
@ -78,12 +78,12 @@ msgstr ""
|
||||||
#: code:addons/google_drive/google_drive.py:150
|
#: code:addons/google_drive/google_drive.py:150
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Incorrect URL!"
|
msgid "Incorrect URL!"
|
||||||
msgstr ""
|
msgstr "错误的URL"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: view:base.config.settings:0
|
#: view:base.config.settings:0
|
||||||
msgid "Configure your templates"
|
msgid "Configure your templates"
|
||||||
msgstr ""
|
msgstr "配置你的模版"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: help:google.drive.config,name_template:0
|
#: help:google.drive.config,name_template:0
|
||||||
|
@ -132,7 +132,7 @@ msgstr ""
|
||||||
#: code:addons/google_drive/google_drive.py:150
|
#: code:addons/google_drive/google_drive.py:150
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Please enter a valid Google Document URL."
|
msgid "Please enter a valid Google Document URL."
|
||||||
msgstr ""
|
msgstr "请输入一个有效的Google文档URL"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,google_drive_client_id:0
|
#: field:google.drive.config,google_drive_client_id:0
|
||||||
|
@ -149,7 +149,7 @@ msgstr ""
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,filter_id:0
|
#: field:google.drive.config,filter_id:0
|
||||||
msgid "Filter"
|
msgid "Filter"
|
||||||
msgstr ""
|
msgstr "过滤器"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,name_template:0
|
#: field:google.drive.config,name_template:0
|
||||||
|
@ -222,7 +222,7 @@ msgstr ""
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:google.drive.config,name:0
|
#: field:google.drive.config,name:0
|
||||||
msgid "Template Name"
|
msgid "Template Name"
|
||||||
msgstr ""
|
msgstr "模板名称"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: constraint:google.drive.config:0
|
#: constraint:google.drive.config:0
|
||||||
|
@ -243,7 +243,7 @@ msgstr ""
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: field:base.config.settings,google_drive_authorization_code:0
|
#: field:base.config.settings,google_drive_authorization_code:0
|
||||||
msgid "Authorization Code"
|
msgid "Authorization Code"
|
||||||
msgstr ""
|
msgstr "授权码"
|
||||||
|
|
||||||
#. module: google_drive
|
#. module: google_drive
|
||||||
#: model:ir.model,name:google_drive.model_google_drive_config
|
#: model:ir.model,name:google_drive.model_google_drive_config
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
<field name="model" invisible="1" />
|
<field name="model" invisible="1" />
|
||||||
<group>
|
<group>
|
||||||
<field name="name" />
|
<field name="name" />
|
||||||
|
<field name="active" />
|
||||||
<field name="model_id" on_change="onchange_model_id(model_id)" />
|
<field name="model_id" on_change="onchange_model_id(model_id)" />
|
||||||
<label for='filter_id' />
|
<label for='filter_id' />
|
||||||
<div>
|
<div>
|
||||||
|
@ -54,7 +55,7 @@
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model='ir.actions.act_window' id='action_google_drive_users_config'>
|
<record model='ir.actions.act_window' id='action_google_drive_users_config'>
|
||||||
<field name='name'>Google Drive Templates</field>
|
<field name='name'>Templates</field>
|
||||||
<field name='res_model'>google.drive.config</field>
|
<field name='res_model'>google.drive.config</field>
|
||||||
<field name='type'>ir.actions.act_window</field>
|
<field name='type'>ir.actions.act_window</field>
|
||||||
<field name='view_type'>form</field>
|
<field name='view_type'>form</field>
|
||||||
|
@ -87,7 +88,7 @@
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<menuitem name='Google Drive configuration' id='menu_google_drive_config' parent='base.menu_administration' />
|
<menuitem name='Google Drive' id='menu_google_drive_config' parent='base.menu_administration' />
|
||||||
<menuitem id='menu_google_drive_model_config' parent='menu_google_drive_config' action='action_google_drive_users_config' />
|
<menuitem id='menu_google_drive_model_config' parent='menu_google_drive_config' action='action_google_drive_users_config' />
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -29,19 +29,24 @@ openerp.google_drive = function (instance, m) {
|
||||||
ds.call('get_google_drive_config', [view.dataset.model, res_id, context]).done(function (r) {
|
ds.call('get_google_drive_config', [view.dataset.model, res_id, context]).done(function (r) {
|
||||||
if (!_.isEmpty(r)) {
|
if (!_.isEmpty(r)) {
|
||||||
_.each(r, function (res) {
|
_.each(r, function (res) {
|
||||||
var g_item = _.indexOf(_.pluck(self.items.other, 'label'), res.name);
|
var already_there = false;
|
||||||
if (g_item !== -1) {
|
for (var i = 0;i < self.items.other.length;i++){
|
||||||
self.items.other.splice(g_item, 1);
|
if (self.items.other[i].classname === "oe_share_gdoc" && self.items.other[i].label.indexOf(res.name) > -1){
|
||||||
|
already_there = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!already_there){
|
||||||
|
self.add_items('other', [{
|
||||||
|
label: res.name+ '<img style="position:absolute;right:5px;height:20px;width:20px;" title="Google Drive" src="google_drive/static/src/img/drive_icon.png"/>',
|
||||||
|
config_id: res.id,
|
||||||
|
res_id: res_id,
|
||||||
|
res_model: view.dataset.model,
|
||||||
|
callback: self.on_google_doc,
|
||||||
|
classname: 'oe_share_gdoc'
|
||||||
|
},
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
self.add_items('other', [{
|
|
||||||
label: res.name+ '<img style="position:absolute;right:5px;height:20px;width:20px;" title="Google Drive" src="google_drive/static/src/img/drive_icon.png"/>',
|
|
||||||
config_id: res.id,
|
|
||||||
res_id: res_id,
|
|
||||||
res_model: view.dataset.model,
|
|
||||||
callback: self.on_google_doc,
|
|
||||||
classname: 'oe_share_gdoc'
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
import google_spreadsheet
|
|
@ -0,0 +1,43 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# OpenERP, Open Source Management Solution
|
||||||
|
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
'name': 'Google Spreadsheet',
|
||||||
|
'version': '1.0',
|
||||||
|
'category': 'Tools',
|
||||||
|
'description': """
|
||||||
|
The module adds the possibility to display data from OpenERP in Google Spreadsheets in real time.
|
||||||
|
========================================
|
||||||
|
""",
|
||||||
|
'author': 'OpenERP SA',
|
||||||
|
'website': 'http://www.openerp.com',
|
||||||
|
'depends': ['board', 'google_drive'],
|
||||||
|
'js': [
|
||||||
|
'static/src/js/search.js',
|
||||||
|
],
|
||||||
|
'qweb': ['static/src/xml/*.xml'],
|
||||||
|
'data': ['google_spreadsheet_view.xml', 'google_spreadsheet_data.xml'],
|
||||||
|
'demo': [],
|
||||||
|
'installable': True,
|
||||||
|
'auto_install': False,
|
||||||
|
}
|
||||||
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,119 @@
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# OpenERP, Open Source Management Solution
|
||||||
|
# Copyright (C) 2004-2012 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/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
import simplejson
|
||||||
|
import logging
|
||||||
|
from lxml import etree
|
||||||
|
import re
|
||||||
|
import urllib
|
||||||
|
import urllib2
|
||||||
|
|
||||||
|
from openerp.osv import osv
|
||||||
|
from openerp import SUPERUSER_ID
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class config(osv.osv):
|
||||||
|
_inherit = 'google.drive.config'
|
||||||
|
|
||||||
|
def get_google_scope(self):
|
||||||
|
scope = super(config, self).get_google_scope()
|
||||||
|
return '%s https://spreadsheets.google.com/feeds' % scope
|
||||||
|
|
||||||
|
def write_config_formula(self, cr, uid, attachment_id, spreadsheet_key, model, domain, groupbys, view_id, context=None):
|
||||||
|
access_token = self.get_access_token(cr, uid, scope='https://spreadsheets.google.com/feeds', context=context)
|
||||||
|
|
||||||
|
fields = self.pool.get(model).fields_view_get(cr, uid, view_id=view_id, view_type='tree')
|
||||||
|
doc = etree.XML(fields.get('arch'))
|
||||||
|
display_fields = []
|
||||||
|
for node in doc.xpath("//field"):
|
||||||
|
if node.get('modifiers'):
|
||||||
|
modifiers = simplejson.loads(node.get('modifiers'))
|
||||||
|
if not modifiers.get('invisible') and not modifiers.get('tree_invisible'):
|
||||||
|
display_fields.append(node.get('name'))
|
||||||
|
fields = " ".join(display_fields)
|
||||||
|
domain = domain.replace("'", r"\'").replace('"', "'")
|
||||||
|
if groupbys:
|
||||||
|
fields = "%s %s" % (groupbys, fields)
|
||||||
|
formula = '=oe_read_group("%s";"%s";"%s";"%s")' % (model, fields, groupbys, domain)
|
||||||
|
else:
|
||||||
|
formula = '=oe_browse("%s";"%s";"%s")' % (model, fields, domain)
|
||||||
|
url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
|
||||||
|
dbname = cr.dbname
|
||||||
|
user = self.pool['res.users'].read(cr, uid, uid, ['login', 'password'], context=context)
|
||||||
|
username = user['login']
|
||||||
|
password = user['password']
|
||||||
|
if self.pool['ir.module.module'].search_count(cr, SUPERUSER_ID, ['&', ('name', '=', 'auth_crypt'), ('state', '=', 'installed')]) == 1:
|
||||||
|
config_formula = '=oe_settings("%s";"%s")' % (url, dbname)
|
||||||
|
else:
|
||||||
|
config_formula = '=oe_settings("%s";"%s";"%s";"%s")' % (url, dbname, username, password)
|
||||||
|
request = '''<feed xmlns="http://www.w3.org/2005/Atom"
|
||||||
|
xmlns:batch="http://schemas.google.com/gdata/batch"
|
||||||
|
xmlns:gs="http://schemas.google.com/spreadsheets/2006">
|
||||||
|
<id>https://spreadsheets.google.com/feeds/cells/%s/od6/private/full</id>
|
||||||
|
<entry>
|
||||||
|
<batch:id>A1</batch:id>
|
||||||
|
<batch:operation type="update"/>
|
||||||
|
<id>https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R1C1</id>
|
||||||
|
<link rel="edit" type="application/atom+xml"
|
||||||
|
href="https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R1C1"/>
|
||||||
|
<gs:cell row="1" col="1" inputValue="%s"/>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<batch:id>A2</batch:id>
|
||||||
|
<batch:operation type="update"/>
|
||||||
|
<id>https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15</id>
|
||||||
|
<link rel="edit" type="application/atom+xml"
|
||||||
|
href="https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/R60C15"/>
|
||||||
|
<gs:cell row="60" col="15" inputValue="%s"/>
|
||||||
|
</entry>
|
||||||
|
</feed>''' % (spreadsheet_key, spreadsheet_key, spreadsheet_key, formula.replace('"', '"'), spreadsheet_key, spreadsheet_key, config_formula.replace('"', '"'))
|
||||||
|
|
||||||
|
try:
|
||||||
|
req = urllib2.Request(
|
||||||
|
'https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/batch?%s' % (spreadsheet_key, urllib.urlencode({'v': 3, 'access_token': access_token})),
|
||||||
|
data=request,
|
||||||
|
headers={'content-type': 'application/atom+xml', 'If-Match': '*'})
|
||||||
|
urllib2.urlopen(req)
|
||||||
|
except (urllib2.HTTPError, urllib2.URLError):
|
||||||
|
_logger.warning("An error occured while writting the formula on the Google Spreadsheet.")
|
||||||
|
|
||||||
|
description = '''
|
||||||
|
formula: %s
|
||||||
|
''' % formula
|
||||||
|
if attachment_id:
|
||||||
|
self.pool['ir.attachment'].write(cr, uid, attachment_id, {'description': description}, context=context)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def set_spreadsheet(self, cr, uid, model, domain, groupbys, view_id, context=None):
|
||||||
|
try:
|
||||||
|
config_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'google_spreadsheet', 'google_spreadsheet_template')[1]
|
||||||
|
except ValueError:
|
||||||
|
raise
|
||||||
|
config = self.browse(cr, uid, config_id, context=context)
|
||||||
|
title = 'Spreadsheet %s' % model
|
||||||
|
res = self.copy_doc(cr, uid, False, config.google_drive_resource_id, title, model, context=context)
|
||||||
|
|
||||||
|
mo = re.search("(key=|/d/)([A-Za-z0-9-_]+)", res['url'])
|
||||||
|
if mo:
|
||||||
|
key = mo.group(2)
|
||||||
|
|
||||||
|
self.write_config_formula(cr, uid, res.get('id'), key, model, domain, groupbys, view_id, context=context)
|
||||||
|
return res
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
<record id="google_spreadsheet_template" model="google.drive.config">
|
||||||
|
<field name="name">Base Spreadsheet Template</field>
|
||||||
|
<field name="model_id" ref="base.model_res_partner"/>
|
||||||
|
<field name="google_drive_template_url">https://docs.google.com/spreadsheet/ccc?key=0ApGVjjwUC-ygdDZ0TG5EQnRlLVFQNlFGdFN5b1ZrY1E</field>
|
||||||
|
<field name="name_template">Reporting %(name)s</field>
|
||||||
|
<field name="active" eval="0" />
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -0,0 +1,65 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<!-- add google drive config field in user form -->
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="view_ir_attachment_google_spreadsheet_tree">
|
||||||
|
<field name="name">ir.attachment.google.spreadsheet.tree</field>
|
||||||
|
<field name="model">ir.attachment</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Google Spreadsheets" version="7.0">
|
||||||
|
<field name="name" string="Name"/>
|
||||||
|
<field name="url" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.ui.view" id="view_ir_attachment_google_spreadsheet_form">
|
||||||
|
<field name="name">ir.attachment.google.spreadsheet.form</field>
|
||||||
|
<field name="model">ir.attachment</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Google Spreadsheets" version="7.0">
|
||||||
|
<sheet>
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="name" string="Name"/>
|
||||||
|
<field name="url" widget="url"/>
|
||||||
|
</group>
|
||||||
|
<group colspan="2">
|
||||||
|
<label for="description" colspan="2"/>
|
||||||
|
<field name="description" nolabel="1" colspan="2"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_ir_attachment_google_spreadsheet_tree" model="ir.actions.act_window">
|
||||||
|
<field name="name">Google Spreadsheets</field>
|
||||||
|
<field name="res_model">ir.attachment</field>
|
||||||
|
<field name="view_type">form</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
<field name="context">{}</field>
|
||||||
|
<field name="domain">[('url', 'like', '/spreadsheet/')]</field>
|
||||||
|
<field name="help">Google Spreadsheets</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_ir_attachment_google_spreadsheet_tree_view" model="ir.actions.act_window.view">
|
||||||
|
<field eval="1" name="sequence"/>
|
||||||
|
<field name="view_mode">tree</field>
|
||||||
|
<field name="view_id" ref="view_ir_attachment_google_spreadsheet_tree"/>
|
||||||
|
<field name="act_window_id" ref="action_ir_attachment_google_spreadsheet_tree"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_ir_attachment_google_spreadsheet_form_view" model="ir.actions.act_window.view">
|
||||||
|
<field eval="2" name="sequence"/>
|
||||||
|
<field name="view_mode">form</field>
|
||||||
|
<field name="view_id" ref="view_ir_attachment_google_spreadsheet_form"/>
|
||||||
|
<field name="act_window_id" ref="action_ir_attachment_google_spreadsheet_tree"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="menu_reporting_dashboard_google_spreadsheets" parent="base.menu_reporting_dashboard" action="action_ir_attachment_google_spreadsheet_tree"/>
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -0,0 +1,42 @@
|
||||||
|
# Translation of OpenERP Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * google_spreadsheet
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: OpenERP Server 8.0alpha1\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2013-07-25 12:39+0000\n"
|
||||||
|
"PO-Revision-Date: 2013-07-25 12:39+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: google_spreadsheet
|
||||||
|
#: model:ir.actions.act_window,help:google_spreadsheet.action_ir_attachment_google_spreadsheet_tree
|
||||||
|
#: model:ir.actions.act_window,name:google_spreadsheet.action_ir_attachment_google_spreadsheet_tree
|
||||||
|
#: view:ir.attachment:0
|
||||||
|
#: model:ir.ui.menu,name:google_spreadsheet.menu_reporting_dashboard_google_spreadsheets
|
||||||
|
msgid "Google Spreadsheets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: google_spreadsheet
|
||||||
|
#. openerp-web
|
||||||
|
#: code:addons/google_spreadsheet/static/src/xml/addtospreadsheet.xml:3
|
||||||
|
#, python-format
|
||||||
|
msgid "Add to Google Spreadsheet"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: google_spreadsheet
|
||||||
|
#: view:ir.attachment:0
|
||||||
|
msgid "Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: google_spreadsheet
|
||||||
|
#: model:ir.model,name:google_spreadsheet.model_google_drive_config
|
||||||
|
msgid "Google Drive templates config"
|
||||||
|
msgstr ""
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
openerp.google_spreadsheet = function(instance) {
|
||||||
|
var _t = instance.web._t;
|
||||||
|
instance.web.FormView.include({
|
||||||
|
on_processed_onchange: function(result, processed) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var fields = self.fields;
|
||||||
|
_(result.selection).each(function (selection, fieldname) {
|
||||||
|
var field = fields[fieldname];
|
||||||
|
if (!field) { return; }
|
||||||
|
field.field.selection = selection;
|
||||||
|
field.values = selection;
|
||||||
|
field.renderElement();
|
||||||
|
});
|
||||||
|
return this._super(result, processed);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
instance.board.AddToGoogleSpreadsheet = instance.web.search.Input.extend({
|
||||||
|
template: 'SearchView.addtogooglespreadsheet',
|
||||||
|
_in_drawer: true,
|
||||||
|
start: function () {
|
||||||
|
var self = this;
|
||||||
|
this.$el.on('click', 'h4', function(){
|
||||||
|
var view = self.view;
|
||||||
|
var data = view.build_search_data();
|
||||||
|
var model = view.model;
|
||||||
|
var list_view = self.view.getParent().views['list'];
|
||||||
|
var view_id = list_view ? list_view.view_id : false;
|
||||||
|
var context = new instance.web.CompoundContext(view.dataset.get_context() || []);
|
||||||
|
var domain = new instance.web.CompoundDomain(view.dataset.get_domain() || []);
|
||||||
|
_.each(data.contexts, context.add, context);
|
||||||
|
_.each(data.domains, domain.add, domain);
|
||||||
|
domain = JSON.stringify(domain.eval());
|
||||||
|
var groupbys = instance.web.pyeval.eval('groupbys', data.groupbys).join(" ");
|
||||||
|
var view_id = view_id;
|
||||||
|
var ds = new instance.web.DataSet(self, 'google.drive.config');
|
||||||
|
ds.call('set_spreadsheet', [model, domain, groupbys, view_id]).done(function (res) {
|
||||||
|
if (res['url']){
|
||||||
|
window.open(res['url'], '_blank');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
instance.web.SearchView.include({
|
||||||
|
add_common_inputs: function() {
|
||||||
|
this._super();
|
||||||
|
var vm = this.getParent().getParent();
|
||||||
|
if (vm.inner_action && vm.inner_action.views) {
|
||||||
|
(new instance.board.AddToGoogleSpreadsheet(this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
|
@ -0,0 +1,5 @@
|
||||||
|
<template>
|
||||||
|
<div t-name="SearchView.addtogooglespreadsheet" class="oe_searchview_dashboard">
|
||||||
|
<h4>Add to Google Spreadsheet</h4>
|
||||||
|
</div>
|
||||||
|
</template>
|
|
@ -51,9 +51,9 @@ class hr_employee_category(osv.osv):
|
||||||
_name = "hr.employee.category"
|
_name = "hr.employee.category"
|
||||||
_description = "Employee Category"
|
_description = "Employee Category"
|
||||||
_columns = {
|
_columns = {
|
||||||
'name': fields.char("Category", size=64, required=True),
|
'name': fields.char("Employee Tag", size=64, required=True),
|
||||||
'complete_name': fields.function(_name_get_fnc, type="char", string='Name'),
|
'complete_name': fields.function(_name_get_fnc, type="char", string='Name'),
|
||||||
'parent_id': fields.many2one('hr.employee.category', 'Parent Category', select=True),
|
'parent_id': fields.many2one('hr.employee.category', 'Parent Employee Tag', select=True),
|
||||||
'child_ids': fields.one2many('hr.employee.category', 'parent_id', 'Child Categories'),
|
'child_ids': fields.one2many('hr.employee.category', 'parent_id', 'Child Categories'),
|
||||||
'employee_ids': fields.many2many('hr.employee', 'employee_category_rel', 'category_id', 'emp_id', 'Employees'),
|
'employee_ids': fields.many2many('hr.employee', 'employee_category_rel', 'category_id', 'emp_id', 'Employees'),
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ class hr_job(osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
_sql_constraints = [
|
_sql_constraints = [
|
||||||
('name_company_uniq', 'unique(name, company_id)', 'The name of the job position must be unique per company!'),
|
('name_company_uniq', 'unique(name, company_id, department_id)', 'The name of the job position must be unique per department in company!'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -156,6 +156,8 @@ class hr_employee(osv.osv):
|
||||||
_inherits = {'resource.resource': "resource_id"}
|
_inherits = {'resource.resource': "resource_id"}
|
||||||
_inherit = ['mail.thread']
|
_inherit = ['mail.thread']
|
||||||
|
|
||||||
|
_mail_post_access = 'read'
|
||||||
|
|
||||||
def _get_image(self, cr, uid, ids, name, args, context=None):
|
def _get_image(self, cr, uid, ids, name, args, context=None):
|
||||||
result = dict.fromkeys(ids, False)
|
result = dict.fromkeys(ids, False)
|
||||||
for obj in self.browse(cr, uid, ids, context=context):
|
for obj in self.browse(cr, uid, ids, context=context):
|
||||||
|
@ -324,22 +326,6 @@ class hr_employee(osv.osv):
|
||||||
(_check_recursion, 'Error! You cannot create recursive hierarchy of Employee(s).', ['parent_id']),
|
(_check_recursion, 'Error! You cannot create recursive hierarchy of Employee(s).', ['parent_id']),
|
||||||
]
|
]
|
||||||
|
|
||||||
# ---------------------------------------------------
|
|
||||||
# Mail gateway
|
|
||||||
# ---------------------------------------------------
|
|
||||||
|
|
||||||
def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None):
|
|
||||||
""" mail.message document permission rule: can post a new message if can read
|
|
||||||
because of portal document. """
|
|
||||||
if not model_obj:
|
|
||||||
model_obj = self
|
|
||||||
employee_ids = model_obj.search(cr, uid, [('user_id', '=', uid)], context=context)
|
|
||||||
if employee_ids and operation == 'create':
|
|
||||||
model_obj.check_access_rights(cr, uid, 'read')
|
|
||||||
model_obj.check_access_rule(cr, uid, mids, 'read', context=context)
|
|
||||||
else:
|
|
||||||
return super(hr_employee, self).check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context)
|
|
||||||
|
|
||||||
|
|
||||||
class hr_department(osv.osv):
|
class hr_department(osv.osv):
|
||||||
_description = "Department"
|
_description = "Department"
|
||||||
|
|
|
@ -17,7 +17,7 @@ Get all your HR operations managed easily: knowledge sharing, recruitments, appr
|
||||||
Each need is provided by a specific app that you activate on demand.
|
Each need is provided by a specific app that you activate on demand.
|
||||||
</p>
|
</p>
|
||||||
<div class="oe_centeralign oe_websiteonly">
|
<div class="oe_centeralign oe_websiteonly">
|
||||||
<a href="http://www.openerp.com/start" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a>
|
<a href="http://www.openerp.com/start?app=hr" class="oe_button oe_big oe_tacky">Start your <span class="oe_emph">free</span> trial</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -86,7 +86,7 @@
|
||||||
</group>
|
</group>
|
||||||
<notebook>
|
<notebook>
|
||||||
<page string="Description">
|
<page string="Description">
|
||||||
<field name="line_ids" context="{'currency_id': currency_id, 'default_analytic_account': context.get('analytic_account')}">
|
<field name="line_ids" context="{'currency_id': currency_id, 'default_analytic_account': context.get('analytic_account', '')}">
|
||||||
<form string="Expense Lines" version="7.0">
|
<form string="Expense Lines" version="7.0">
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
|
|
|
@ -79,7 +79,7 @@ class hr_holidays_status(osv.osv):
|
||||||
'categ_id': fields.many2one('crm.meeting.type', 'Meeting Type',
|
'categ_id': fields.many2one('crm.meeting.type', 'Meeting Type',
|
||||||
help='Once a leave is validated, OpenERP will create a corresponding meeting of this type in the calendar.'),
|
help='Once a leave is validated, OpenERP will create a corresponding meeting of this type in the calendar.'),
|
||||||
'color_name': fields.selection([('red', 'Red'),('blue','Blue'), ('lightgreen', 'Light Green'), ('lightblue','Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'),('lightcyan', 'Light Cyan'),('black', 'Black'),('lightpink', 'Light Pink'),('brown', 'Brown'),('violet', 'Violet'),('lightcoral', 'Light Coral'),('lightsalmon', 'Light Salmon'),('lavender', 'Lavender'),('wheat', 'Wheat'),('ivory', 'Ivory')],'Color in Report', required=True, help='This color will be used in the leaves summary located in Reporting\Leaves by Department.'),
|
'color_name': fields.selection([('red', 'Red'),('blue','Blue'), ('lightgreen', 'Light Green'), ('lightblue','Light Blue'), ('lightyellow', 'Light Yellow'), ('magenta', 'Magenta'),('lightcyan', 'Light Cyan'),('black', 'Black'),('lightpink', 'Light Pink'),('brown', 'Brown'),('violet', 'Violet'),('lightcoral', 'Light Coral'),('lightsalmon', 'Light Salmon'),('lavender', 'Lavender'),('wheat', 'Wheat'),('ivory', 'Ivory')],'Color in Report', required=True, help='This color will be used in the leaves summary located in Reporting\Leaves by Department.'),
|
||||||
'limit': fields.boolean('Allow to Override Limit', help='If you select this check box, the system allows the employees to take more leaves than the available ones for this type and take them into account for the "Remaining Legal Leaves" defined on the employee form.'),
|
'limit': fields.boolean('Allow to Override Limit', help='If you select this check box, the system allows the employees to take more leaves than the available ones for this type and will not take them into account for the "Remaining Legal Leaves" defined on the employee form.'),
|
||||||
'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the leave type without removing it."),
|
'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the leave type without removing it."),
|
||||||
'max_leaves': fields.function(_user_left_days, string='Maximum Allowed', help='This value is given by the sum of all holidays requests with a positive value.', multi='user_left_days'),
|
'max_leaves': fields.function(_user_left_days, string='Maximum Allowed', help='This value is given by the sum of all holidays requests with a positive value.', multi='user_left_days'),
|
||||||
'leaves_taken': fields.function(_user_left_days, string='Leaves Already Taken', help='This value is given by the sum of all holidays requests with a negative value.', multi='user_left_days'),
|
'leaves_taken': fields.function(_user_left_days, string='Leaves Already Taken', help='This value is given by the sum of all holidays requests with a negative value.', multi='user_left_days'),
|
||||||
|
|
|
@ -322,7 +322,7 @@
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</page>
|
</page>
|
||||||
<page string="Other Information">
|
<page string="Accounting Information">
|
||||||
<group>
|
<group>
|
||||||
<group string="Miscellaneous">
|
<group string="Miscellaneous">
|
||||||
<field name="company_id" groups="base.group_multi_company"/>
|
<field name="company_id" groups="base.group_multi_company"/>
|
||||||
|
|
|
@ -47,7 +47,6 @@ You can define the different phases of interviews and easily rate the applicant
|
||||||
'fetchmail',
|
'fetchmail',
|
||||||
],
|
],
|
||||||
'data': [
|
'data': [
|
||||||
'wizard/hr_recruitment_employee_hired.xml',
|
|
||||||
'wizard/hr_recruitment_create_partner_job_view.xml',
|
'wizard/hr_recruitment_create_partner_job_view.xml',
|
||||||
'hr_recruitment_view.xml',
|
'hr_recruitment_view.xml',
|
||||||
'hr_recruitment_menu.xml',
|
'hr_recruitment_menu.xml',
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<field name="res_model">hr.applicant</field>
|
<field name="res_model">hr.applicant</field>
|
||||||
<field name="view_type">form</field>
|
<field name="view_type">form</field>
|
||||||
<field name="view_mode">tree,form</field>
|
<field name="view_mode">tree,form</field>
|
||||||
<field name="domain">[('state','in',('draft','open'))]</field>
|
<field name="domain">[('stage_id.fold', '!=', True)]</field>
|
||||||
<field name="view_id" ref="view_applicants_status_tree"/>
|
<field name="view_id" ref="view_applicants_status_tree"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
.. _changelog:
|
||||||
|
|
||||||
|
Changelog
|
||||||
|
=========
|
||||||
|
|
||||||
|
`trunk (saas-2)`
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Stage/state update
|
||||||
|
|
||||||
|
- ``hr.applicant``: removed inheritance from ``base_stage`` class and removed
|
||||||
|
``state`` field. Added ``date_last_stage_update`` field holding last stage_id
|
||||||
|
modification. Removed ``date`` field not used anywhere. Updated reports.
|
||||||
|
- ``hr.recruitment.stage``: removed ``state`` field.
|
||||||
|
|
||||||
|
- Removed ``hired.employee`` wizard.
|
|
@ -0,0 +1,22 @@
|
||||||
|
=====================
|
||||||
|
HR Recruitment DevDoc
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Hr Recruitment module documentation
|
||||||
|
===================================
|
||||||
|
|
||||||
|
Documentation topics
|
||||||
|
''''''''''''''''''''
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
stage_status.rst
|
||||||
|
|
||||||
|
Changelog
|
||||||
|
'''''''''
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
changelog.rst
|
|
@ -0,0 +1,54 @@
|
||||||
|
.. _stage_status:
|
||||||
|
|
||||||
|
Stage and Status
|
||||||
|
================
|
||||||
|
|
||||||
|
.. versionchanged:: 8.0 saas-2 state/stage cleaning
|
||||||
|
|
||||||
|
Stage
|
||||||
|
+++++
|
||||||
|
|
||||||
|
This revision removed the concept of state on hr.applicant objects. The ``state``
|
||||||
|
field has been totally removed and replaced by stages, using ``stage_id``. The
|
||||||
|
following models are impacted:
|
||||||
|
|
||||||
|
- ``hr.applicant`` now use only stages. However a convention still exists about
|
||||||
|
'New' stage. An applicant is consdered as ``new`` when it has the following
|
||||||
|
properties:
|
||||||
|
|
||||||
|
- ``stage_id and stage_id.sequence = 1``
|
||||||
|
|
||||||
|
- ``hr.recruitment.stage`` do not have any ``state`` field anymore.
|
||||||
|
- ``hr.recruitment.report`` do not have any ``state`` field anymore.
|
||||||
|
|
||||||
|
By default a newly created applicant be 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.
|
||||||
|
Employee creation is still feasible directly from a link button in the form view.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
``hr.recruitment.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 ``hr.applicant``:
|
||||||
|
|
||||||
|
- ``mt_applicant_new``: new applicants. Condition: ``obj.stage_id and obj.stage_id.sequence == 1``
|
||||||
|
- ``mt_applicant_stage_changed``: stage changed. Condition: ``obj.stage_id and obj.stage_id.sequence != 1``
|
||||||
|
|
||||||
|
The following subtype is trigerred on ``hr.job``:
|
||||||
|
|
||||||
|
- ``mt_job_new_applicant``: new applicant in the job.
|
|
@ -19,23 +19,13 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import time
|
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
|
|
||||||
from openerp.addons.base_status.base_stage import base_stage
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp.tools import html2plaintext
|
from openerp.tools import html2plaintext
|
||||||
|
|
||||||
AVAILABLE_STATES = [
|
|
||||||
('draft', 'New'),
|
|
||||||
('cancel', 'Refused'),
|
|
||||||
('open', 'In Progress'),
|
|
||||||
('pending', 'Pending'),
|
|
||||||
('done', 'Hired')
|
|
||||||
]
|
|
||||||
|
|
||||||
AVAILABLE_PRIORITIES = [
|
AVAILABLE_PRIORITIES = [
|
||||||
('', ''),
|
('', ''),
|
||||||
('5', 'Not Good'),
|
('5', 'Not Good'),
|
||||||
|
@ -62,13 +52,11 @@ class hr_recruitment_stage(osv.osv):
|
||||||
'name': fields.char('Name', size=64, required=True, translate=True),
|
'name': fields.char('Name', size=64, required=True, translate=True),
|
||||||
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of stages."),
|
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of stages."),
|
||||||
'department_id':fields.many2one('hr.department', 'Specific to a Department', help="Stages of the recruitment process may be different per department. If this stage is common to all departments, keep this field empty."),
|
'department_id':fields.many2one('hr.department', 'Specific to a Department', help="Stages of the recruitment process may be different per department. If this stage is common to all departments, keep this field empty."),
|
||||||
'state': fields.selection(AVAILABLE_STATES, 'Status', required=True, help="The related status for the stage. The status of your document will automatically change according to the selected stage. Example, a stage is related to the status 'Close', when your document reach this stage, it will be automatically closed."),
|
|
||||||
'fold': fields.boolean('Hide in views if empty', help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."),
|
'fold': fields.boolean('Hide in views if empty', help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."),
|
||||||
'requirements': fields.text('Requirements'),
|
'requirements': fields.text('Requirements'),
|
||||||
}
|
}
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'sequence': 1,
|
'sequence': 1,
|
||||||
'state': 'draft',
|
|
||||||
'fold': False,
|
'fold': False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,18 +75,15 @@ class hr_recruitment_degree(osv.osv):
|
||||||
('name_uniq', 'unique (name)', 'The name of the Degree of Recruitment must be unique!')
|
('name_uniq', 'unique (name)', 'The name of the Degree of Recruitment must be unique!')
|
||||||
]
|
]
|
||||||
|
|
||||||
class hr_applicant(base_stage, osv.Model):
|
class hr_applicant(osv.Model):
|
||||||
_name = "hr.applicant"
|
_name = "hr.applicant"
|
||||||
_description = "Applicant"
|
_description = "Applicant"
|
||||||
_order = "id desc"
|
_order = "id desc"
|
||||||
_inherit = ['mail.thread', 'ir.needaction_mixin']
|
_inherit = ['mail.thread', 'ir.needaction_mixin']
|
||||||
_track = {
|
_track = {
|
||||||
'state': {
|
|
||||||
'hr_recruitment.mt_applicant_hired': lambda self, cr, uid, obj, ctx=None: obj.state == 'done',
|
|
||||||
'hr_recruitment.mt_applicant_refused': lambda self, cr, uid, obj, ctx=None: obj.state == 'cancel',
|
|
||||||
},
|
|
||||||
'stage_id': {
|
'stage_id': {
|
||||||
'hr_recruitment.mt_stage_changed': lambda self, cr, uid, obj, ctx=None: obj.state not in ['done', 'cancel'],
|
'hr_recruitment.mt_applicant_new': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence == 1,
|
||||||
|
'hr_recruitment.mt_applicant_stage_changed': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence != 1,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +94,7 @@ class hr_applicant(base_stage, osv.Model):
|
||||||
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 """
|
||||||
department_id = self._get_default_department_id(cr, uid, context=context)
|
department_id = self._get_default_department_id(cr, uid, context=context)
|
||||||
return self.stage_find(cr, uid, [], department_id, [('state', '=', 'draft')], context=context)
|
return self.stage_find(cr, uid, [], department_id, [('sequence', '=', '1')], context=context)
|
||||||
|
|
||||||
def _resolve_department_id_from_context(self, cr, uid, context=None):
|
def _resolve_department_id_from_context(self, cr, uid, context=None):
|
||||||
""" Returns ID of department based on the value of 'default_department_id'
|
""" Returns ID of department based on the value of 'default_department_id'
|
||||||
|
@ -197,20 +182,12 @@ class hr_applicant(base_stage, osv.Model):
|
||||||
'write_date': fields.datetime('Update Date', readonly=True),
|
'write_date': fields.datetime('Update Date', readonly=True),
|
||||||
'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage', track_visibility='onchange',
|
'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage', track_visibility='onchange',
|
||||||
domain="['|', ('department_id', '=', department_id), ('department_id', '=', False)]"),
|
domain="['|', ('department_id', '=', department_id), ('department_id', '=', False)]"),
|
||||||
'state': fields.related('stage_id', 'state', type="selection", store=True,
|
|
||||||
selection=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\'.'),
|
|
||||||
'categ_ids': fields.many2many('hr.applicant_category', string='Tags'),
|
'categ_ids': fields.many2many('hr.applicant_category', string='Tags'),
|
||||||
'company_id': fields.many2one('res.company', 'Company'),
|
'company_id': fields.many2one('res.company', 'Company'),
|
||||||
'user_id': fields.many2one('res.users', 'Responsible', track_visibility='onchange'),
|
'user_id': fields.many2one('res.users', 'Responsible', track_visibility='onchange'),
|
||||||
# Applicant Columns
|
|
||||||
'date_closed': fields.datetime('Closed', readonly=True, select=True),
|
'date_closed': fields.datetime('Closed', readonly=True, select=True),
|
||||||
'date_open': fields.datetime('Opened', readonly=True, select=True),
|
'date_open': fields.datetime('Assigned', readonly=True, select=True),
|
||||||
'date': fields.datetime('Date'),
|
'date_last_stage_update': fields.datetime('Last Stage Update', select=True),
|
||||||
'date_action': fields.date('Next Action Date'),
|
'date_action': fields.date('Next Action Date'),
|
||||||
'title_action': fields.char('Next Action', size=64),
|
'title_action': fields.char('Next Action', size=64),
|
||||||
'priority': fields.selection(AVAILABLE_PRIORITIES, 'Appreciation'),
|
'priority': fields.selection(AVAILABLE_PRIORITIES, 'Appreciation'),
|
||||||
|
@ -234,37 +211,35 @@ class hr_applicant(base_stage, osv.Model):
|
||||||
'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),
|
||||||
'color': fields.integer('Color Index'),
|
'color': fields.integer('Color Index'),
|
||||||
'emp_id': fields.many2one('hr.employee', 'employee'),
|
'emp_id': fields.many2one('hr.employee', string='Employee',
|
||||||
|
help='Employee linked to the applicant.'),
|
||||||
'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True),
|
'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True),
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'active': lambda *a: 1,
|
'active': lambda *a: 1,
|
||||||
'user_id': lambda s, cr, uid, c: uid,
|
'user_id': lambda s, cr, uid, c: uid,
|
||||||
'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
|
|
||||||
'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
|
'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
|
||||||
'department_id': lambda s, cr, uid, c: s._get_default_department_id(cr, uid, c),
|
'department_id': lambda s, cr, uid, c: s._get_default_department_id(cr, uid, c),
|
||||||
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.applicant', context=c),
|
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'hr.applicant', context=c),
|
||||||
'color': 0,
|
'color': 0,
|
||||||
|
'date_last_stage_update': fields.datetime.now(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_group_by_full = {
|
_group_by_full = {
|
||||||
'stage_id': _read_group_stage_ids
|
'stage_id': _read_group_stage_ids
|
||||||
}
|
}
|
||||||
|
|
||||||
def onchange_job(self, cr, uid, ids, job, context=None):
|
def onchange_job(self, cr, uid, ids, job_id=False, context=None):
|
||||||
result = {}
|
if job_id:
|
||||||
|
job_record = self.pool.get('hr.job').browse(cr, uid, job_id, context=context)
|
||||||
|
if job_record and job_record.department_id:
|
||||||
|
return {'value': {'department_id': job_record.department_id.id}}
|
||||||
|
return {}
|
||||||
|
|
||||||
if job:
|
def onchange_department_id(self, cr, uid, ids, department_id=False, stage_id=False, context=None):
|
||||||
job_obj = self.pool.get('hr.job')
|
if not stage_id:
|
||||||
result['department_id'] = job_obj.browse(cr, uid, job, context=context).department_id.id
|
stage_id = self.stage_find(cr, uid, [], department_id, [('sequence', '=', '1')], context=context)
|
||||||
return {'value': result}
|
|
||||||
return {'value': {'department_id': False}}
|
|
||||||
|
|
||||||
def onchange_department_id(self, cr, uid, ids, department_id=False, context=None):
|
|
||||||
obj_recru_stage = self.pool.get('hr.recruitment.stage')
|
|
||||||
stage_ids = obj_recru_stage.search(cr, uid, ['|',('department_id','=',department_id),('department_id','=',False)], context=context)
|
|
||||||
stage_id = stage_ids and stage_ids[0] or False
|
|
||||||
return {'value': {'stage_id': stage_id}}
|
return {'value': {'stage_id': stage_id}}
|
||||||
|
|
||||||
def onchange_partner_id(self, cr, uid, ids, partner_id, context=None):
|
def onchange_partner_id(self, cr, uid, ids, partner_id, context=None):
|
||||||
|
@ -403,27 +378,31 @@ class hr_applicant(base_stage, osv.Model):
|
||||||
return super(hr_applicant, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context)
|
return super(hr_applicant, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context)
|
||||||
|
|
||||||
def create(self, cr, uid, vals, context=None):
|
def create(self, cr, uid, vals, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
|
if vals.get('department_id') and not context.get('default_department_id'):
|
||||||
|
context['default_department_id'] = vals.get('department_id')
|
||||||
|
|
||||||
obj_id = super(hr_applicant, self).create(cr, uid, vals, context=context)
|
obj_id = super(hr_applicant, self).create(cr, uid, vals, context=context)
|
||||||
applicant = self.browse(cr, uid, obj_id, context=context)
|
applicant = self.browse(cr, uid, obj_id, context=context)
|
||||||
if applicant.job_id:
|
if applicant.job_id:
|
||||||
self.pool.get('hr.job').message_post(cr, uid, [applicant.job_id.id], body=_('Applicant <b>created</b>'), subtype="hr_recruitment.mt_job_new_applicant", context=context)
|
self.pool.get('hr.job').message_post(cr, uid, [applicant.job_id.id], body=_('Applicant <b>created</b>'), subtype="hr_recruitment.mt_job_new_applicant", context=context)
|
||||||
return obj_id
|
return obj_id
|
||||||
|
|
||||||
def case_open(self, cr, uid, ids, context=None):
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
"""
|
if isinstance(ids, (int, long)):
|
||||||
open Request of the applicant for the hr_recruitment
|
ids = [ids]
|
||||||
"""
|
# stage change: update date_last_stage_update
|
||||||
res = super(hr_applicant, self).case_open(cr, uid, ids, context)
|
if 'stage_id' in vals:
|
||||||
date = self.read(cr, uid, ids, ['date_open'])[0]
|
vals['date_last_stage_update'] = fields.datetime.now()
|
||||||
if not date['date_open']:
|
# user_id change: update date_start
|
||||||
self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S'),})
|
if vals.get('user_id'):
|
||||||
return res
|
vals['date_start'] = fields.datetime.now()
|
||||||
|
|
||||||
def case_close(self, cr, uid, ids, context=None):
|
return super(hr_applicant, self).write(cr, uid, ids, vals, context=context)
|
||||||
res = super(hr_applicant, self).case_close(cr, uid, ids, context)
|
|
||||||
return res
|
|
||||||
|
|
||||||
def case_close_with_emp(self, cr, uid, ids, context=None):
|
def create_employee_from_applicant(self, cr, uid, ids, context=None):
|
||||||
|
""" Create an hr.employee from the hr.applicants """
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
hr_employee = self.pool.get('hr.employee')
|
hr_employee = self.pool.get('hr.employee')
|
||||||
|
@ -433,17 +412,16 @@ class hr_applicant(base_stage, osv.Model):
|
||||||
for applicant in self.browse(cr, uid, ids, context=context):
|
for applicant in self.browse(cr, uid, ids, context=context):
|
||||||
address_id = contact_name = False
|
address_id = contact_name = False
|
||||||
if applicant.partner_id:
|
if applicant.partner_id:
|
||||||
address_id = self.pool.get('res.partner').address_get(cr,uid,[applicant.partner_id.id],['contact'])['contact']
|
address_id = self.pool.get('res.partner').address_get(cr, uid, [applicant.partner_id.id], ['contact'])['contact']
|
||||||
contact_name = self.pool.get('res.partner').name_get(cr,uid,[applicant.partner_id.id])[0][1]
|
contact_name = self.pool.get('res.partner').name_get(cr, uid, [applicant.partner_id.id])[0][1]
|
||||||
if applicant.job_id and (applicant.partner_name or contact_name):
|
if applicant.job_id and (applicant.partner_name or contact_name):
|
||||||
applicant.job_id.write({'no_of_recruitment': applicant.job_id.no_of_recruitment - 1})
|
applicant.job_id.write({'no_of_recruitment': applicant.job_id.no_of_recruitment - 1})
|
||||||
emp_id = hr_employee.create(cr,uid,{'name': applicant.partner_name or contact_name,
|
emp_id = hr_employee.create(cr, uid, {'name': applicant.partner_name or contact_name,
|
||||||
'job_id': applicant.job_id.id,
|
'job_id': applicant.job_id.id,
|
||||||
'address_home_id': address_id,
|
'address_home_id': address_id,
|
||||||
'department_id': applicant.department_id.id
|
'department_id': applicant.department_id.id
|
||||||
})
|
})
|
||||||
self.write(cr, uid, [applicant.id], {'emp_id': emp_id}, context=context)
|
self.write(cr, uid, [applicant.id], {'emp_id': emp_id}, context=context)
|
||||||
self.case_close(cr, uid, [applicant.id], context)
|
|
||||||
else:
|
else:
|
||||||
raise osv.except_osv(_('Warning!'), _('You must define an Applied Job and a Contact Name for this applicant.'))
|
raise osv.except_osv(_('Warning!'), _('You must define an Applied Job and a Contact Name for this applicant.'))
|
||||||
|
|
||||||
|
@ -454,26 +432,6 @@ class hr_applicant(base_stage, osv.Model):
|
||||||
dict_act_window['view_mode'] = 'form,tree'
|
dict_act_window['view_mode'] = 'form,tree'
|
||||||
return dict_act_window
|
return dict_act_window
|
||||||
|
|
||||||
def case_cancel(self, cr, uid, ids, context=None):
|
|
||||||
"""Overrides cancel for crm_case for setting probability
|
|
||||||
"""
|
|
||||||
res = super(hr_applicant, self).case_cancel(cr, uid, ids, context)
|
|
||||||
self.write(cr, uid, ids, {'probability': 0.0})
|
|
||||||
return res
|
|
||||||
|
|
||||||
def case_pending(self, cr, uid, ids, context=None):
|
|
||||||
"""Marks case as pending"""
|
|
||||||
res = super(hr_applicant, self).case_pending(cr, uid, ids, context)
|
|
||||||
self.write(cr, uid, ids, {'probability': 0.0})
|
|
||||||
return res
|
|
||||||
|
|
||||||
def case_reset(self, cr, uid, ids, context=None):
|
|
||||||
"""Resets case as draft
|
|
||||||
"""
|
|
||||||
res = super(hr_applicant, self).case_reset(cr, uid, ids, context)
|
|
||||||
self.write(cr, uid, ids, {'date_open': False, 'date_closed': False})
|
|
||||||
return res
|
|
||||||
|
|
||||||
def set_priority(self, cr, uid, ids, priority, *args):
|
def set_priority(self, cr, uid, ids, priority, *args):
|
||||||
"""Set applicant priority
|
"""Set applicant priority
|
||||||
"""
|
"""
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue