[MERGE] merged with trunk-addons-development

bzr revid: hmo@tinyerp.com-20110225074706-pjzvvfqe1200zwji
This commit is contained in:
Harry (OpenERP) 2011-02-25 13:17:06 +05:30
commit 85e8c93460
51 changed files with 1617 additions and 642 deletions

View File

@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-02-23 06:02+0000\n"
"Last-Translator: Ginandjar Satyanagara <Unknown>\n"
"PO-Revision-Date: 2011-02-24 07:59+0000\n"
"Last-Translator: moelyana <Unknown>\n"
"Language-Team: Indonesian <id@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: account
@ -332,6 +332,7 @@ msgstr "St."
#, python-format
msgid "Invoice line account company does not match with invoice company."
msgstr ""
"Baris tagihan dari rekening perusahaan tidak sesuai dengan tagihan perusahaan"
#. module: account
#: field:account.journal.column,field:0
@ -427,7 +428,7 @@ msgstr "Situasi Pembukaan/ Penutupan"
#. module: account
#: help:account.journal,currency:0
msgid "The currency used to enter statement"
msgstr "Mata uang yang digunakan untuk memasukkan pernyataan"
msgstr "Mata uang yang digunakan untuk masukkan pernyataan"
#. module: account
#: field:account.open.closed.fiscalyear,fyear_id:0
@ -9724,12 +9725,12 @@ msgstr ""
#. module: account
#: selection:account.aged.trial.balance,direction_selection:0
msgid "Future"
msgstr ""
msgstr "Masa Depan"
#. module: account
#: view:account.move.line:0
msgid "Search Journal Items"
msgstr ""
msgstr "Cari Jurnal Produk"
#. module: account
#: help:account.tax,base_sign:0
@ -9746,12 +9747,12 @@ msgstr ""
#. module: account
#: model:ir.model,name:account.model_account_fiscal_position_account_template
msgid "Template Account Fiscal Mapping"
msgstr ""
msgstr "Template Akun Pemetaan Fiskal"
#. module: account
#: field:account.chart.template,property_account_expense:0
msgid "Expense Account on Product Template"
msgstr ""
msgstr "Beban Account pada Template Produk"
#. module: account
#: field:account.analytic.line,amount_currency:0
@ -9762,13 +9763,13 @@ msgstr ""
#: code:addons/account/wizard/account_report_aged_partner_balance.py:55
#, python-format
msgid "You must enter a period length that cannot be 0 or below !"
msgstr ""
msgstr "Jumlah mata uang"
#. module: account
#: code:addons/account/account.py:501
#, python-format
msgid "You cannot remove an account which has account entries!. "
msgstr ""
msgstr "Anda tidak dapat menghapus akun yang akunnya sudah tercatat "
#. module: account
#: model:ir.actions.act_window,help:account.action_account_form
@ -9788,8 +9789,8 @@ msgid ""
"The residual amount on a receivable or payable of a journal entry expressed "
"in its currency (maybe different of the company currency)."
msgstr ""
"Jumlah sisa piutang/ hutang dari catatan jurnal dinyatakan dalam mata "
"uangnya (yang mungkin berbeda dari mata uang perusahaan)."
"Jumlah residual pada piutang / hutang dari catatan jurnal dinyatakan dalam "
"mata uang (mungkin berbeda dari mata uang perusahaan)."
#~ msgid "Asset"
#~ msgstr "Aktiva"

View File

@ -114,7 +114,7 @@
<filter string="Salesman" name='user' icon="terp-personal" context="{'group_by':'user_id'}"/>
<separator orientation="vertical"/>
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id','set_visible':True,'residual_invisible':True}"/>
<filter string="Category of Product" icon="terp-stock_symbol-selection" context="{'group_by':'categ_id','residual_invisible':True}"/>
<filter string="Category of Product" name="category_product" icon="terp-stock_symbol-selection" context="{'group_by':'categ_id','residual_invisible':True}"/>
<separator orientation="vertical"/>
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
<filter string="Type" icon="terp-stock_symbol-selection" context="{'group_by':'type'}"/>
@ -139,7 +139,7 @@
<field name="res_model">account.invoice.report</field>
<field name="view_type">form</field>
<field name="view_mode">tree,graph</field>
<field name="context">{'search_default_current':1, 'search_default_partner':1, 'search_default_customer':1, 'search_default_date': time.strftime('%Y-01-01'), 'group_by':[], 'group_by_no_leaf':1,}</field>
<field name="context">{'search_default_current':1, 'search_default_category_product':1, 'search_default_customer':1, 'search_default_date': time.strftime('%Y-01-01'), 'group_by':[], 'group_by_no_leaf':1,}</field>
<field name="search_view_id" ref="view_account_invoice_report_search"/>
<field name="help">From this report, you can have an overview of the amount invoiced to your customer as well as payment delays. The tool search can also be used to personalise your Invoices reports and so, match this analysis to your needs.</field>

View File

@ -142,16 +142,16 @@
<para style="terp_default_8">[[ repeatIn(objects,'o') ]]</para>
<para style="terp_default_8">[[ setLang(o.partner_id.lang) ]]</para>
<pto_header><!-- Must be after setLang() -->
<blockTable colWidths="202.0,87.0,71.0,57.0,42.0,71.0" style="Table7">
<tr>
<td> <para style="terp_tblheader_Details">Description</para> </td>
<td> <para style="terp_tblheader_Details_Centre">Taxes</para> </td>
<td> <para style="terp_tblheader_Details_Centre">Quantity</para> </td>
<td> <para style="terp_tblheader_Details_Right">Unit Price </para> </td>
<td> <para style="terp_tblheader_Details_Right">Disc.(%)</para> </td>
<td> <para style="terp_tblheader_Details_Right">Price</para> </td>
</tr>
</blockTable>
<blockTable colWidths="202.0,87.0,71.0,57.0,42.0,71.0" style="Table7">
<tr>
<td> <para style="terp_tblheader_Details">Description</para> </td>
<td> <para style="terp_tblheader_Details_Centre">Taxes</para> </td>
<td> <para style="terp_tblheader_Details_Centre">Quantity</para> </td>
<td> <para style="terp_tblheader_Details_Right">Unit Price </para> </td>
<td> <para style="terp_tblheader_Details_Right">Disc.(%)</para> </td>
<td> <para style="terp_tblheader_Details_Right">Price</para> </td>
</tr>
</blockTable>
</pto_header>
<blockTable colWidths="297.0,233.0" style="Table_Partner_Address">
<tr>
@ -194,7 +194,7 @@
<td>
<para style="terp_tblheader_General_Centre">Invoice Date</para>
</td>
<td>
<td>
<para style="terp_tblheader_General_Centre">Origin</para>
</td>
<td>
@ -210,7 +210,7 @@
<td>
<para style="terp_default_Centre_9">[[ formatLang(o.date_invoice,date=True) ]]</para>
</td>
<td>
<td>
<para style="terp_default_Centre_9">[[ o.origin or '' ]]</para>
</td>
<td>

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: account_invoice_layout

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: analytic

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: anonymization

View File

@ -44,11 +44,11 @@
<group col="3" colspan="2" attrs="{'invisible': [('trg_date_type', '=', 'none')]}">
<field name="trg_date_range" string="Delay After Trigger Date"/>
<field name="trg_date_range_type" nolabel="1"/>
</group>
</group>
</group>
<separator colspan="4" string="Note"/>
<label align="0.0" colspan="4" width="900"
string="The rule uses the AND operator. The model must match all non-empty fields so that the rule executes the action described in the 'Actions' tab." />
string="The rule uses the AND operator. The model must match all non-empty fields so that the rule executes the action described in the 'Actions' tab." />
</page>
<page string="Actions">
<separator colspan="4" string="Fields to Change"/>
@ -74,7 +74,7 @@
<field colspan="4" name="act_email_cc"/>
<separator colspan="4" string="Email Body"/>
<field colspan="4" name="act_mail_body" height="250"
nolabel="1" attrs="{'required':[('act_remind_user','=',True)]}" />
nolabel="1" attrs="{'required':[('act_remind_user','=',True)]}" />
<separator colspan="4" string="Special Keywords to Be Used in The Body"/>
<label align="0.0" string="%%(object_id)s = Object ID" colspan="2"/>
<label align="0.0" string="%%(object_subject)s = Object subject" colspan="2"/>

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: caldav

View File

@ -218,12 +218,14 @@ class crm_case(object):
def stage_change(self, cr, uid, ids, context=None, order='sequence'):
if context is None:
context = {}
stage_pool = self.pool.get('crm.case.stage')
stage_type = context and context.get('stage_type','')
current_seq = False
next_stage_id = False
for case in self.browse(cr, uid, ids, context=context):
next_stage = False
value = {}
if case.section_id.id :
@ -281,13 +283,12 @@ class crm_case(object):
@param part: Partner's id
@email: Partner's email ID
"""
if not part:
return {'value': {'partner_address_id': False,
'email_from': False,
'phone': False
}}
addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
data = {'partner_address_id': addr['contact']}
data={}
if part:
addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
data = {'partner_address_id': addr['contact']}
#<<<<<<<<<<= MERGE
data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
return {'value': data}

View File

@ -246,46 +246,28 @@ class crm_lead(crm_case, osv.osv):
context.update({'active_ids': ids})
data_obj = self.pool.get('ir.model.data')
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_action')
value = {}
view_id = False
if data_id:
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
for case in self.browse(cr, uid, ids):
for case in self.browse(cr, uid, ids, context=context):
context.update({'active_id': case.id})
if not case.partner_id:
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_partner')
view_id1 = False
if data_id:
view_id1 = data_obj.browse(cr, uid, data_id, context=context).res_id
value = {
'name': _('Create Partner'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'crm.lead2opportunity.partner',
'view_id': False,
'context': context,
'views': [(view_id1, 'form')],
'type': 'ir.actions.act_window',
'target': 'new',
'nodestroy': True
}
break
else:
value = {
'name': _('Create Opportunity'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'crm.lead2opportunity.action',
'view_id': False,
'context': context,
'views': [(view_id, 'form')],
'type': 'ir.actions.act_window',
'target': 'new',
'nodestroy': True
}
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_partner')
view_id1 = False
if data_id:
view_id1 = data_obj.browse(cr, uid, data_id, context=context).res_id
value = {
'name': _('Create Partner'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'crm.lead2opportunity.partner',
'view_id': False,
'context': context,
'views': [(view_id1, 'form')],
'type': 'ir.actions.act_window',
'target': 'new',
'nodestroy': True
}
return value
def write(self, cr, uid, ids, vals, context=None):
@ -294,6 +276,17 @@ class crm_lead(crm_case, osv.osv):
if 'date_closed' in vals:
return super(crm_lead,self).write(cr, uid, ids, vals, context=context)
if 'stage_id' in vals and vals['stage_id']:
stage_obj = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context)
self.history(cr, uid, ids, _("Changed Stage to: ") + stage_obj.name, details=_("Changed Stage to: ") + stage_obj.name)
message=''
for case in self.browse(cr, uid, ids, context=context):
if case.type == 'lead' or context.get('stage_type',False)=='lead':
message = _("The stage of lead '%s' has been changed to '%s'.") % (case.name, stage_obj.name)
elif case.type == 'opportunity':
message = _("The stage of opportunity '%s' has been changed to '%s'.") % (case.name, stage_obj.name)
self.log(cr, uid, case.id, message)
return super(crm_lead,self).write(cr, uid, ids, vals, context)
def stage_historize(self, cr, uid, ids, stage, context=None):
@ -310,16 +303,21 @@ class crm_lead(crm_case, osv.osv):
def stage_next(self, cr, uid, ids, context=None):
stage = super(crm_lead, self).stage_next(cr, uid, ids, context=context)
if stage:
self.stage_historize(cr, uid, ids, stage, context=context)
stage_obj = self.pool.get('crm.case.stage').browse(cr, uid, stage, context=context)
if stage_obj.on_change:
data = {'probability': stage_obj.probability}
self.write(cr, uid, ids, data)
return stage
def stage_previous(self, cr, uid, ids, context=None):
stage = super(crm_lead, self).stage_previous(cr, uid, ids, context)
stage = super(crm_lead, self).stage_previous(cr, uid, ids, context=context)
if stage:
self.stage_historize(cr, uid, ids, stage, context=context)
stage_obj = self.pool.get('crm.case.stage').browse(cr, uid, stage, context=context)
if stage_obj.on_change:
data = {'probability': stage_obj.probability}
self.write(cr, uid, ids, data)
return stage
def message_new(self, cr, uid, msg, context=None):
"""
Automatically calls when new email message arrives
@ -417,12 +415,12 @@ class crm_lead(crm_case, osv.osv):
if optin:
return {'value':{'optin':optin,'optout':False}}
return {}
def on_chnage_optout(self, cr, uid, ids, optout):
if optout:
return {'value':{'optout':optout,'optin':False}}
return {}
crm_lead()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -104,8 +104,12 @@
<field name="state_id"/>
</group>
<group colspan="2" col="3">
<separator string="Communication History" colspan="4" col="3"/>
<separator string="Communication" colspan="4" col="3"/>
<field name="email_from" widget="email"/>
<button string="Send Email"
name="%(emails.action_email_compose_message_wizard)d"
context="{'email_model':'crm.lead'}"
icon="terp-mail-message-new" type="action" colspan="1"/>
<newline/>
<field name="phone"/>
<newline/>
@ -114,7 +118,7 @@
<field name="mobile"/>
<newline/>
<separator string="Links" colspan="4" col="3"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" string="Customer"/>
<field name="partner_id" string="Customer"/>
<button
name="%(action_crm_lead2partner)d"
icon="terp-partner" type="action"

View File

@ -18,7 +18,7 @@
domain="[('type','=','opportunity'),('section_ids', '=', section_id)]"/>
<button name="stage_previous"
states="draft,open,pending" type="object"
icon="gtk-go-back" string="" />
icon="gtk-go-back" string="" context="{'stage_type': 'opportunity'}"/>
<button name="stage_next" states="draft,open,pending"
type="object" icon="gtk-go-forward" string="" context="{'stage_type': 'opportunity'}"/>
</group>
@ -57,8 +57,15 @@
string="Contact"
on_change="onchange_partner_address_id(partner_address_id, email_from)"
colspan="1" />
<field name="email_from" string="Email" />
<group col="3" colspan="2">
<field name="email_from" string="Email" />
<button string="Send Email"
name="%(emails.action_email_compose_message_wizard)d"
context="{'email_model': 'crm.lead'}"
icon="terp-mail-message-new" type="action"/>
</group>
<field name="phone"/>
</group>
<group col="2" colspan="2">
<separator colspan="2" string="Categorization"/>
@ -148,21 +155,21 @@
<field name="date"/>
<field name="email_to" size="512"/>
<field name="email_cc" size="512"/>
<field name="name" colspan="4"/>
<field name="name" colspan="4" attrs="{'invisible': [('history', '=', True)]}"/>
<field name="display_text" colspan="4" attrs="{'invisible': [('history', '=', False)]}"/>
<field name="history" invisible="1"/>
</group>
<notebook colspan="4">
<page string="Details">
<group attrs="{'invisible': [('history', '!=', True)]}">
<field name="description" colspan="4" nolabel="1" height="250"/>
<button colspan="4" string="Reply"
name="%(emails.action_email_compose_message_wizard)d"
context="{'mail':'reply', 'message_id':active_id}"
icon="terp-mail-replied" type="action"/>
</group>
<group attrs="{'invisible': [('history', '=', True)]}">
<field name="display_text" colspan="4" nolabel="1" height="250"/>
<field name="description" colspan="4" nolabel="1"/>
<group attrs="{'invisible': [('history', '!=', True)]}">
<button colspan="4"
string="Reply"
name="%(emails.action_email_compose_message_wizard)d"
context="{'mail':'reply', 'message_id':active_id}"
icon="terp-mail-replied" type="action" />
</group>
</page>
<page string="Attachments">
<field name="attachment_ids" colspan="4" readonly="1" nolabel="1"/>
@ -321,6 +328,7 @@
<filter string="Salesman" icon="terp-personal"
domain="[]" context="{'group_by':'user_id'}" />
<filter string="Team" help="Sales Team" icon="terp-personal+" domain="[]" context="{'group_by':'section_id'}"/>
<filter string="Customer" help="Partner" icon="terp-personal+" domain="[]" context="{'group_by':'partner_id'}"/>
<separator orientation="vertical" />
<filter string="Stage" icon="terp-stage" domain="[]"
context="{'group_by':'stage_id'}" />
@ -361,5 +369,7 @@
</field>
</record>
</data>
</openerp>

View File

@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: crm

View File

@ -87,9 +87,9 @@ class crm_lead_report(osv.osv):
CREATE OR REPLACE VIEW crm_lead_report AS (
SELECT
id,
to_char(c.create_date, 'YYYY') as name,
to_char(c.create_date, 'MM') as month,
to_char(c.create_date, 'YYYY-MM-DD') as day,
to_char(c.date_deadline, 'YYYY') as name,
to_char(c.date_deadline, 'MM') as month,
to_char(c.date_deadline, 'YYYY-MM-DD') as day,
to_char(c.create_date, 'YYYY-MM-DD') as creation_date,
to_char(c.date_open, 'YYYY-MM-DD') as opening_date,
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,

View File

@ -71,6 +71,15 @@
<field name="arch" type="xml">
<search string="Leads Analysis">
<group col="20" colspan="8">
<filter icon="terp-personal"
string="Lead"
domain="[('type','=', 'lead')]"
help="Show only lead"/>
<filter icon="terp-personal+"
string="Opportunity"
domain="[('type','=','opportunity')]"
help="Show only opportunity"/>
<separator orientation="vertical" />
<filter string=" Year " icon="terp-go-year"
domain="[('create_date','&lt;=', time.strftime('%%Y-%%m-%%d')),('create_date','&gt;=',time.strftime('%%Y-01-01'))]"
help="Leads/Opportunities created in current year"/>
@ -133,7 +142,7 @@
<filter string="Country" icon="terp-go-home" context="{'group_by':'country_id'}" />
<filter string="Company" icon="terp-go-home"
domain="[]"
context="{'group_by':'company_id'}"
context="{'group_by':'company_id'}"
groups="base.group_multi_company"/>
<separator orientation="vertical" />
<filter string="Stage" name="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>

View File

@ -60,24 +60,12 @@
-
!record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_0}:
action: 'create'
-
I click on "Continue" button of this wizard.
-
!python {model: crm.lead2opportunity.partner}: |
self.make_partner(cr, uid, [ref("crm_lead2opportunity_partner_create_0")], {'active_ids': [ref("crm_lead_newcustomer0")]})
-
Now, I give value to this wizard field.
-
!record {model: crm.lead2opportunity, id: crm_lead2opportunity_stonage_0}:
name: Capegemini
planned_revenue: 0.00
probability: 0.00
name: 'convert'
-
Then, Click on "Create Opportunity" button of this wizard.
-
!python {model: crm.lead2opportunity}: |
self.action_apply(cr, uid, [ref('crm_lead2opportunity_stonage_0')], {'active_id': ref('crm_lead_newcustomer0')})
!python {model: crm.lead2opportunity.partner}: |
self.action_apply(cr, uid, [ref("crm_lead2opportunity_partner_create_0")], {'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")})
- |
In order to check the opportunity is created or not, I check type.
-

View File

@ -32,15 +32,14 @@
-
I find that this lead can be converted to opportunity.
-
!record {model: crm.lead2opportunity, id: crm_lead2opportunity0}:
name: OpenERP Presentation
probability: 60.0
planned_revenue: 45000.0
!record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner0}:
action: 'create'
name: 'convert'
-
So I convert the lead to opportunity.
-
!python {model: crm.lead2opportunity}: |
self.action_apply(cr, uid, [ref('crm_lead2opportunity0')], context={'active_id': ref('crm_lead_openerppresentation0')})
!python {model: crm.lead2opportunity.partner}: |
self.action_apply(cr, uid, [ref('crm_lead2opportunity_partner0')], context={'active_ids': [ref('crm_lead_openerppresentation0')]})
-
I check that lead is now converted to opportunity.
-

View File

@ -47,7 +47,7 @@ class crm_add_note(osv.osv_memory):
attach = [
(x.name, base64.decodestring(x.binary)) for x in obj.attachment_ids
]
case_pool.history(cr, uid, [case], _("Note"), history=False,
case_pool.history(cr, uid, [case], self.pool.get('email.message').truncate_data(cr, uid, obj.body, context=context), history=False,
details=obj.body, email_from=user_name, attach=attach)
if obj.state == 'unchanged':

View File

@ -9,24 +9,9 @@
<field name="model">crm.add.note</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Add Note" col="4">
<separator string="Add Note" colspan="6"/>
<notebook colspan="6">
<page string="Note">
<field name="body" nolabel="1" colspan="4" default_focus="1"/>
</page>
<page string="Attachments">
<field name="attachment_ids" colspan="4" nolabel="1">
<form string="Attachment">
<field name="binary" filename="name" />
<field name="name" />
</form>
<tree string="Attachments">
<field name="name" />
</tree>
</field>
</page>
</notebook>
<form string="Add Note">
<separator string="Add Note" colspan="4" />
<field name="body" nolabel="1" colspan="4" default_focus="1"/>
<separator string="" colspan="6"/>
<group colspan="6" col="4" >
<field name="state" />

View File

@ -22,22 +22,106 @@
from osv import osv, fields
from tools.translate import _
import time
class crm_lead2opportunity(osv.osv_memory):
_name = 'crm.lead2opportunity'
_description = 'Lead To Opportunity'
class crm_lead2opportunity_partner(osv.osv_memory):
_name = 'crm.lead2opportunity.partner'
_description = 'Lead To Opportunity Partner'
_inherit = 'crm.lead2partner'
def action_cancel(self, cr, uid, ids, context=None):
_columns = {
'action': fields.selection([('exist', 'Link to an existing partner'), \
('create', 'Create a new partner'), \
('nothing', 'Do not link to a partner')], \
'Action', required=True),
'name': fields.selection([('convert', 'Convert to Opportunity'), ('merge', 'Merge with existing Opportunity')],'Select Action', required=True),
'opportunity_ids': fields.many2many('crm.lead', 'merge_opportunity_rel', 'merge_id', 'opportunity_id', 'Opportunities', domain=[('type', '=', 'opportunity')]),
}
def default_get(self, cr, uid, fields, context=None):
"""
Closes Lead To Opportunity form
Default get for name, opportunity_ids
if there is an exisitng partner link to the lead, find all existing opportunity link with this partnet to merge
all information together
"""
lead_obj = self.pool.get('crm.lead')
res = super(crm_lead2opportunity_partner, self).default_get(cr, uid, fields, context=context)
opportunities = res.get('opportunity_ids') or []
partner_id = False
for lead in lead_obj.browse(cr, uid, opportunities, context=context):
partner_id = lead.partner_id and lead.partner_id.id or False
if not partner_id and res.get('partner_id'):
partner_id = res.get('partner_id')
ids = []
if partner_id:
ids = lead_obj.search(cr, uid, [('partner_id', '=', partner_id), ('type', '=', 'opportunity')])
opportunities += ids
if 'action' in fields:
res.update({'action' : partner_id and 'exist' or 'create'})
if 'partner_id' in fields:
res.update({'partner_id' : partner_id})
if 'name' in fields:
res.update({'name' : ids and 'merge' or 'convert'})
if 'opportunity_ids' in fields:
res.update({'opportunity_ids': opportunities})
return res
def view_init(self, cr, uid, fields, context=None):
"""
This function checks for precondition before wizard executes
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Lead to Partner's IDs
@param fields: List of fields for default value
@param context: A standard dictionary for contextual values
"""
return {'type': 'ir.actions.act_window_close'}
if context is None:
context = {}
lead_obj = self.pool.get('crm.lead')
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
if lead.state in ['done', 'cancel']:
raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
Leads Could not convert into Opportunity"))
return False
def _convert(self, cr, uid, ids, lead, partner_id, stage_ids, context=None):
leads = self.pool.get('crm.lead')
address_id = self.pool.get('res.partner.address').search(cr, uid,
[('partner_id', '=', partner_id)],
order='create_date desc',
limit=1)
vals = {
'planned_revenue': lead.planned_revenue,
'probability': lead.probability,
'name': lead.name,
'partner_id': partner_id,
'user_id': (lead.user_id and lead.user_id.id),
'type': 'opportunity',
'stage_id': stage_ids and stage_ids[0] or False,
'date_action': time.strftime('%Y-%m-%d %H:%M:%S'),
}
if address_id:
vals['partner_address_id'] = address_id[0]
lead.write(vals, context=context)
leads.history(cr, uid, [lead], _('Converted to opportunity'), details='Converted to Opportunity', context=context)
if lead.partner_id:
msg_ids = [ x.id for x in lead.message_ids]
self.pool.get('email.message').write(cr, uid, msg_ids, {
'partner_id': lead.partner_id.id
}, context=context)
leads.log(cr, uid, lead.id, _("Lead '%s' has been converted to an opportunity.") % lead.name)
def action_apply(self, cr, uid, ids, context=None):
"""
@ -46,7 +130,7 @@ class crm_lead2opportunity(osv.osv_memory):
@return : View dictionary opening the Opportunity form view
"""
record_id = context and context.get('active_id') or False
record_id = context and context.get('active_ids') or False
if not record_id:
return {'type': 'ir.actions.act_window_close'}
@ -69,30 +153,24 @@ class crm_lead2opportunity(osv.osv_memory):
opportunity_view_tree = models_data.browse(
cr, uid, opportunity_view_tree, context=context).res_id
lead = leads.browse(cr, uid, record_id, context=context)
if(lead.section_id):
stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('type','=','opportunity'),('sequence','>=',1), ('section_ids','=', lead.section_id.id)])
else:
stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('type','=','opportunity'),('sequence','>=',1)])
for this in self.browse(cr, uid, ids, context=context):
vals ={
'planned_revenue': this.planned_revenue,
'probability': this.probability,
'name': this.name,
'partner_id': this.partner_id.id,
'user_id': (this.partner_id.user_id and this.partner_id.user_id.id) or (lead.user_id and lead.user_id.id),
'type': 'opportunity',
'stage_id': stage_ids and stage_ids[0] or False
}
lead.write(vals, context=context)
leads.history(cr, uid, [lead], _('Opportunity'), details='Converted to Opportunity', context=context)
if lead.partner_id:
msg_ids = [ x.id for x in lead.message_ids]
self.pool.get('email.message').write(cr, uid, msg_ids, {
'partner_id': lead.partner_id.id
}, context=context)
leads.log(cr, uid, lead.id,
_("Lead '%s' has been converted to an opportunity.") % lead.name)
for lead in leads.browse(cr, uid, record_id, context=context):
if(lead.section_id):
stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('type','=','opportunity'),('sequence','>=',1), ('section_ids','=', lead.section_id.id)])
else:
stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('type','=','opportunity'),('sequence','>=',1)])
data = self.browse(cr, uid, ids[0], context=context)
partner_ids = []
if data.action == 'create':
partner_ids = self._create_partner(cr, uid, ids, context=context)
partner_id = partner_ids and partner_ids[0] or data.partner_id.id
self._convert(cr, uid, ids, lead, partner_id, stage_ids, context=context)
if data.name == 'merge':
merge_obj = self.pool.get('crm.merge.opportunity')
self.write(cr, uid, ids, {'opportunity_ids' : [(6,0, [data.opportunity_ids[0].id])]}, context=context)
context.update({'lead_ids' : record_id})
return merge_obj.merge(cr, uid, data.opportunity_ids, context=context)
return {
'name': _('Opportunity'),
@ -109,220 +187,6 @@ class crm_lead2opportunity(osv.osv_memory):
'search_view_id': opportunity_view_search
}
_columns = {
'name' : fields.char('Opportunity', size=64, required=True, select=1),
'probability': fields.float('Success Rate (%)'),
'planned_revenue': fields.float('Expected Revenue'),
'partner_id': fields.many2one('res.partner', 'Partner'),
}
def view_init(self, cr, uid, fields, context=None):
"""
This function checks for precondition before wizard executes
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param fields: List of fields for default value
@param context: A standard dictionary for contextual values
"""
if context is None:
context = {}
lead_obj = self.pool.get('crm.lead')
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
if lead.state in ['done', 'cancel']:
raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
Leads Could not convert into Opportunity"))
return False
def default_get(self, cr, uid, fields, context=None):
"""
This function gets default values
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param fields: List of fields for default value
@param context: A standard dictionary for contextual values
@return : default values of fields.
"""
lead_obj = self.pool.get('crm.lead')
data = context and context.get('active_ids', []) or []
res = super(crm_lead2opportunity, self).default_get(cr, uid, fields, context=context)
for lead in lead_obj.browse(cr, uid, data, context=context):
if 'name' in fields:
res.update({'name': lead.name})
if 'partner_id' in fields:
res.update({'partner_id': lead.partner_id.id or False})
return res
crm_lead2opportunity()
class crm_lead2opportunity_partner(osv.osv_memory):
_name = 'crm.lead2opportunity.partner'
_description = 'Lead To Opportunity Partner'
_inherit = 'crm.lead2partner'
_columns = {
'partner_id': fields.many2one('res.partner', 'Partner'),
'action': fields.selection([('exist', 'Link to an existing partner'), ('create', 'Create a new partner'), ('no','Do not create a partner')], 'Action'),
}
def make_partner(self, cr, uid, ids, context=None):
"""
This function Makes partner based on action.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Lead to Partner's IDs
@param context: A standard dictionary for contextual values
@return : Dictionary value for created Partner form.
"""
if context is None:
context = {}
partner_ids = self._create_partner(cr, uid, ids, context=context)
value = {}
data_obj = self.pool.get('ir.model.data')
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_action')
view_id = False
if data_id:
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
context.update({'partner_id': partner_ids})
value = {
'name': _('Create Opportunity'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'crm.lead2opportunity.action',
'view_id': False,
'context': context,
'views': [(view_id, 'form')],
'type': 'ir.actions.act_window',
'target': 'new',
}
return value
def action_skip(self, cr, uid, ids, context=None):
"""
This skips partner creation
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Lead to Opportunity IDs
@param context: A standard dictionary for contextual values
@return : Dictionary value for Opportunity form
"""
value = {}
if context is None:
context = {}
data_obj = self.pool.get('ir.model.data')
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_create')
view_id = False
if data_id:
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
context.update({'partner_id': False})
value = {
'name': _('Create Opportunity'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'crm.lead2opportunity',
'view_id': False,
'context': context,
'views': [(view_id, 'form')],
'type': 'ir.actions.act_window',
'target': 'new',
}
return value
def view_init(self, cr, uid, fields, context=None):
"""
This function checks for precondition before wizard executes
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param fields: List of fields for default value
@param context: A standard dictionary for contextual values
"""
if context is None:
context = {}
lead_obj = self.pool.get('crm.lead')
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
if lead.state in ['done', 'cancel']:
raise osv.except_osv(_("Warning !"), _("Closed/Cancelled \
Leads Could not convert into Opportunity"))
return False
crm_lead2opportunity_partner()
class crm_lead2opportunity_action(osv.osv_memory):
'''
Merge with Existing Opportunity or Convert to Opportunity
'''
_name = 'crm.lead2opportunity.action'
_description = 'Convert/Merge Opportunity'
_columns = {
'name': fields.selection([('convert', 'Convert to Opportunity'), ('merge', 'Merge with existing Opportunity')],'Select Action', required=True),
}
_defaults = {
'name': 'convert',
}
def do_action(self, cr, uid, ids, context=None):
"""
This function opens form according to selected Action
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Lead to Opportunity IDs
@param context: A standard dictionary for contextual values
@return : Dictionary value for Opportunity form
"""
value = {}
if context is None:
context = {}
data_obj = self.pool.get('ir.model.data')
view_id = False
for this in self.browse(cr, uid, ids, context=context):
if this.name == 'convert':
data_id = data_obj._get_id(cr, uid, 'crm', 'view_crm_lead2opportunity_create')
if data_id:
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
value = {
'name': _('Create Opportunity'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'crm.lead2opportunity',
'view_id': False,
'context': context,
'views': [(view_id, 'form')],
'type': 'ir.actions.act_window',
'target': 'new',
}
elif this.name == 'merge':
data_id = data_obj._get_id(cr, uid, 'crm', 'merge_opportunity_form')
if data_id:
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
value = {
'name': _('Merge with Existing Opportunity'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'crm.merge.opportunity',
'view_id': False,
'context': context,
'views': [(view_id, 'form')],
'type': 'ir.actions.act_window',
'target': 'new',
}
return value
crm_lead2opportunity_action()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,85 +1,38 @@
<openerp>
<data>
<!-- Lead to Opportunity view -->
<record id="view_crm_lead2opportunity_create" model="ir.ui.view">
<field name="name">crm.lead2opportunity.create</field>
<field name="model">crm.lead2opportunity</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Convert To Opportunity">
<field name="name"/>
<group attrs="{'invisible':[('partner_id','=',False)]}" col="2" colspan="2">
<field name="partner_id"/>
</group>
<newline/>
<field name="planned_revenue"/>
<field name="probability"/>
<separator colspan="4"/>
<group col="4" colspan="4">
<label string="" colspan="2"/>
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="action_apply" string="Create Opportunity" type="object" icon="gtk-go-forward"/>
</group>
</form>
</field>
</record>
<!-- Lead to Opportunity action -->
<record id="action_crm_lead2opportunity" model="ir.actions.act_window">
<field name="name">Create Opportunity</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">crm.lead2opportunity</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<record id="view_crm_lead2opportunity_partner" model="ir.ui.view">
<field name="name">crm.lead2opportunity.partner.form</field>
<field name="model">crm.lead2opportunity.partner</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Create a Partner">
<label string="Are you sure you want to create a partner based on this lead ?" colspan="4"/>
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
<group colspan="4" col="1" attrs="{'invisible':[('msg','=',False)]}">
<field name="msg" colspan="4" nolabel="1" height="50"/>
</group>
<newline />
<field name="action"/>
<group attrs="{'invisible':[('action','!=','exist')]}">
<field name="partner_id" attrs="{'required': [('action', '=', 'exist')]}"/>
</group>
<separator string="" colspan="4" />
<group col="4" colspan="4">
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="make_partner" string="Continue" type="object" icon="gtk-ok"/>
</group>
</form>
</field>
</record>
<record id="view_crm_lead2opportunity_action" model="ir.ui.view">
<field name="name">crm.lead2opportunity.action.form</field>
<field name="model">crm.lead2opportunity.action</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Select Action">
<separator string="Select Action" colspan="4" />
<label string="If you select Merge with existing Opportunity, the lead details(with the communication history) will be merged with existing Opportunity of Selected partner." colspan="4"/>
<newline/>
<field name="name" colspan="4"/>
<separator colspan="4" />
<group col="4" colspan="4">
<label colspan="2"/>
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="do_action" string="Next" type="object" icon="gtk-go-forward"/>
</group>
</form>
<form string="Convert to Opportunity">
<field name="action"/>
<group attrs="{'invisible':[('action','!=','exist')]}">
<field name="partner_id" attrs="{'required': [('action', '=', 'exist')]}"/>
</group>
<separator string="Convert to Opportunity" colspan="4"/>
<field name="name" colspan="4"/>
<group col="4" colspan="4" attrs="{'invisible': [('name', '=', 'convert')]}" >
<separator string="Select Opportunities" colspan="4" />
</group>
<field name="opportunity_ids" colspan="4" nolabel="1" attrs="{'invisible': [('name', '=', 'convert')]}">
<tree>
<field name="name" />
<field name="partner_id" />
<field name="user_id" />
<field name="section_id" />
</tree>
</field>
<separator string="" colspan="4" />
<group col="4" colspan="4">
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="action_apply" string="Create Opportunity" type="object" icon="gtk-ok"/>
</group>
</form>
</field>
</record>

View File

@ -34,8 +34,7 @@ class crm_lead2partner(osv.osv_memory):
('create', 'Create a new partner')], \
'Action', required=True),
'partner_id': fields.many2one('res.partner', 'Partner'),
'msg': fields.text('Message', readonly=True)
}
}
def view_init(self, cr, uid, fields, context=None):
"""
@ -66,6 +65,7 @@ class crm_lead2partner(osv.osv_memory):
@return : default values of fields.
"""
lead_obj = self.pool.get('crm.lead')
partner_obj = self.pool.get('res.partner')
contact_obj = self.pool.get('res.partner.address')
@ -80,8 +80,8 @@ class crm_lead2partner(osv.osv_memory):
email = re.findall(r'([^ ,<@]+@[^> ,]+)', lead.email_from or '')
email = map(lambda x: "'" + x + "'", email)
if email:
cr.execute("""select id from res_partner_address
where
cr.execute("""select id from res_partner_address
where
substring(email from '([^ ,<@]+@[^> ,]+)') in (%s)""" % (','.join(email)))
address_ids = map(lambda x: x[0], cr.fetchall())
if address_ids:
@ -92,38 +92,20 @@ class crm_lead2partner(osv.osv_memory):
if not partner_ids and lead.partner_name:
partner_ids = partner_obj.search(cr, uid, [('name', '=', lead.partner_name)], context=context)
if not partner_ids:
cr.execute("""SELECT p.id from res_partner p
cr.execute("""SELECT p.id from res_partner p
where regexp_replace(lower(p.name), '[^a-z]*', '', 'g') = regexp_replace(%s, '[^a-z]*', '', 'g')""", (lead.name.lower(), ))
partner_ids = map(lambda x: x[0], cr.fetchall())
partner_id = partner_ids and partner_ids[0] or False
if not partner_id:
label = False
opp_ids = []
if email:
# Find email of existing opportunity matches the email_from of the lead
cr.execute("""select id from crm_lead
where type='opportunity' and
substring(email_from from '([^ ,<@]+@[^> ,]+)') in (%s)""" % (','.join(email)))
opp_ids = map(lambda x:x[0], cr.fetchall())
label = opp_ids and 'email' or False
if not opp_ids:
# Find name of existing opportunity matches the name of the lead
cr.execute("""SELECT l.id from crm_lead l
where type = 'opportunity' and
regexp_replace(lower(l.name), '[^a-z]*', '', 'g') = regexp_replace(%s, '[^a-z]*', '', 'g')""", (lead.name.lower(), ))
opp_ids = map(lambda x: x[0], cr.fetchall())
label = opp_ids and 'name' or False
if label:
res.update({'msg': "An existing opportunity seems to match the %s of this lead, you should double-check before converting it." % (label)})
if 'partner_id' in fields:
res.update({'partner_id': partner_id})
if 'action' in fields:
res.update({'action': partner_id and 'exist' or 'create'})
if 'opportunity_ids' in fields:
res.update({'opportunity_ids': data})
return res
def open_create_partner(self, cr, uid, ids, context=None):
"""
This function Opens form of create partner.
@ -203,18 +185,15 @@ class crm_lead2partner(osv.osv_memory):
if data.partner_id:
partner_id = data.partner_id.id
contact_id = partner_obj.address_get(cr, uid, [partner_id])['default']
self.assign_partner(cr, uid, lead.id, partner_id)
partner_ids.append(partner_id)
if data.action<>'no':
vals = {}
if partner_id:
vals.update({'partner_id': partner_id})
if contact_id:
vals.update({'partner_address_id': contact_id})
lead_obj.write(cr, uid, [lead.id], vals)
return partner_ids
def assign_partner(self, cr, uid, lead_id, partner_id):
self.pool.get("crm.lead").write(cr, uid, [lead_id], {'partner_id' : partner_id})
def make_partner(self, cr, uid, ids, context=None):
"""
This function Makes partner based on action.
@ -233,19 +212,8 @@ class crm_lead2partner(osv.osv_memory):
mod_obj = self.pool.get('ir.model.data')
result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
res = mod_obj.read(cr, uid, result, ['res_id'])
value = {
'domain': "[]",
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'res.partner',
'res_id': partner_ids and int(partner_ids[0]) or False,
'view_id': False,
'context': context,
'type': 'ir.actions.act_window',
'search_view_id': res['res_id']
}
return value
print partner_ids
return {'type': 'ir.actions.act_window_close'}
crm_lead2partner()

View File

@ -10,8 +10,6 @@
<field name="arch" type="xml">
<form string="Create a Partner">
<separator string="Create a Partner" colspan="4" />
<label string="Are you sure you want to create a partner based on this lead ?" colspan="4"/>
<label string="You may have to verify that this partner does not exist already." colspan="4"/>
<field name="action"/>
<group attrs="{'invisible':[('action','!=','exist')]}">
<field name="partner_id" attrs="{'required': [('action', '=', 'exist')]}"/>
@ -25,9 +23,9 @@
</field>
</record>
<!-- Lead to Partner wizard -->
<record id="action_crm_lead2partner" model="ir.actions.act_window">
<!-- Lead to Partner wizard -->
<record id="action_crm_lead2partner" model="ir.actions.act_window">
<field name="name">Create a Partner</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">crm.lead2partner</field>

View File

@ -18,7 +18,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from crm import crm
from osv import osv, fields
from tools.translate import _
@ -28,91 +27,175 @@ class crm_merge_opportunity(osv.osv_memory):
_name = 'crm.merge.opportunity'
_description = 'Merge two Opportunities'
def view_init(self, cr, uid, fields, context=None):
"""
This function checks for precondition before wizard executes
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param fields: List of fields for default value
@param context: A standard dictionary for contextual values
def _get_first_not_null_id(self, attr, ops):
for op in ops:
if hasattr(op, attr) and getattr(op, attr):
return getattr(op, attr).id
return False
def _get_first_not_null(self, attr, ops):
for op in ops:
if hasattr(op, attr) and getattr(op, attr):
return getattr(op, attr)
return False
def _concat_all(self, attr, ops):
return ', '.join([getattr(op, attr) for op in ops if hasattr(op, attr) and getattr(op, attr)])
def get_attachments(self, cr, uid, id, context=None):
attach_obj = self.pool.get('ir.attachment')
result = []
attach_ids = attach_obj.search(cr, uid, [('res_model' , '=', 'crm.lead'), ('res_id', '=', id)])
return attach_ids
def set_attachements_res_id(self, cr, uid, op_id, attach_ids, context=None):
attach_obj = self.pool.get('ir.attachment')
attach_obj.write(cr, uid, attach_ids, {'res_id' : op_id})
def merge(self, cr, uid, op_ids, context=None):
"""
record_id = context and context.get('active_id', False) or False
if record_id:
opp_obj = self.pool.get('crm.lead')
opp = opp_obj.browse(cr, uid, record_id, context=context)
if not opp.partner_id:
raise osv.except_osv(_('Warning!'), _('Opportunity must have Partner assigned before merging with other Opportunity.'))
#Search for Opportunity for the same partner
opp_ids = opp_obj.search(cr, uid, [('partner_id', '=', opp.partner_id.id), ('type', '=', 'opportunity'), ('state', 'in', ('open', 'pending'))])
# Removing current opportunity
if record_id in opp_ids:
opp_ids.remove(record_id)
if not opp_ids:
raise osv.except_osv(_('Warning!'), _("There are no other 'Open' or 'Pending' Opportunities for the partner '%s'.") % (opp.partner_id.name))
pass
@param opp_ids : list of opportunities ids to merge
"""
opp_obj = self.pool.get('crm.lead')
message_obj = self.pool.get('email.message')
lead_ids = context and context.pop('lead_ids', []) or []
if len(op_ids) <= 1:
raise osv.except_osv(_('Warning !'),_('Please select more than one opportunities.'))
opportunities = opp_obj.browse(cr, uid, lead_ids, context=context)
opportunities_list = list(set(op_ids) - set(opportunities))
if opportunities :
first_opportunity = opportunities[0]
tail_opportunities = opportunities_list
else:
first_opportunity = opportunities_list[0]
tail_opportunities = opportunities_list[1:]
data = {
'partner_id': self._get_first_not_null_id('partner_id', op_ids), # !!
'title': self._get_first_not_null_id('title', op_ids),
'name' : self._concat_all('name', op_ids), #not lost
'categ_id' : self._get_first_not_null_id('categ_id', op_ids), # !!
'channel_id' : self._get_first_not_null_id('channel_id', op_ids), # !!
'city' : self._get_first_not_null('city', op_ids), # !!
'company_id' : self._get_first_not_null_id('company_id', op_ids), #!!
'contact_name' : self._concat_all('contact_name', op_ids), #not lost
'country_id' : self._get_first_not_null_id('country_id', op_ids), #!!
'partner_address_id' : self._get_first_not_null_id('partner_address_id', op_ids), #!!
'partner_assigned_id' : hasattr(opp_obj,'partner_assigned_id') and self._get_first_not_null_id('partner_assigned_id', op_ids), #!!
'type_id' : self._get_first_not_null_id('type_id', op_ids), #!!
'user_id' : self._get_first_not_null_id('user_id', op_ids), #!!
'section_id' : self._get_first_not_null_id('section_id', op_ids), #!!
'state_id' : self._get_first_not_null_id('state_id', op_ids),
'description' : self._concat_all('description', op_ids), #not lost
'email' : self._get_first_not_null('email', op_ids), # !!
'fax' : self._get_first_not_null('fax', op_ids),
'mobile' : self._get_first_not_null('mobile', op_ids),
'partner_latitude' : hasattr(opp_obj,'partner_latitude') and self._get_first_not_null('partner_latitude', op_ids),
'partner_longitude' : hasattr(opp_obj,'partner_longitude') and self._get_first_not_null('partner_longitude', op_ids),
'partner_name' : self._get_first_not_null('partner_name', op_ids),
'phone' : self._get_first_not_null('phone', op_ids),
'probability' : self._get_first_not_null('probability', op_ids),
'planned_revenue' : self._get_first_not_null('planned_revenue', op_ids),
'street' : self._get_first_not_null('street', op_ids),
'street2' : self._get_first_not_null('street2', op_ids),
'zip' : self._get_first_not_null('zip', op_ids),
}
#copy message into the first opportunity + merge attachement
for opp in tail_opportunities:
attach_ids = self.get_attachments(cr, uid, opp, context=context)
self.set_attachements_res_id(cr, uid, first_opportunity.id, attach_ids)
for history in opp.message_ids:
new_history = message_obj.copy(cr, uid, history.id, default={'res_id': opp.id})
#Notification about loss of information
details = []
subject = ['Merged opportunities :']
for opp in op_ids:
subject.append(opp.name)
details.append(_('Merged Opportunity: %s\n Partner: %s\n Stage: %s\n Section: %s\n Salesman: %s\n Category: %s\n Channel: %s\n Company: %s\n Contact name: %s\n Email: %s\n Phone number: %s\n Fax: %s\n Mobile: %s\n State: %s\n Description: %s\n Probability: %s\n Planned revennue: %s\n Country: %s\n City: %s\n Street: %s\n Street 2: %s\n Zip 2: %s') % ( opp.name, opp.partner_id.name or '',
opp.stage_id.name or '',
opp.section_id.name or '',
opp.user_id.name or '',
opp.categ_id.name or '',
opp.channel_id.name or '',
opp.company_id.name or '',
opp.contact_name or '',
opp.email_from or '',
opp.phone or '',
opp.fax or '',
opp.mobile or '',
opp.state_id.name or '',
opp.description or '',
opp.probability or '',
opp.planned_revenue or '',
opp.country_id.name or '',
opp.city or '',
opp.street or '',
opp.street2 or '',
opp.zip or '',
))
subject = subject[0] + ", ".join(subject[1:])
details = "\n\n".join(details)
opp_obj._history(cr, uid, [first_opportunity], subject, details=details)
#data.update({'message_ids' : [(6, 0 ,self._concat_o2m('message_ids', op_ids))]})
opp_obj.write(cr, uid, [first_opportunity.id], data)
unlink_ids = map(lambda x: x.id, tail_opportunities)
opp_obj.unlink(cr, uid, unlink_ids, context=context)
models_data = self.pool.get('ir.model.data')
# Get Opportunity views
result = models_data._get_id(
cr, uid, 'crm', 'view_crm_case_opportunities_filter')
opportunity_view_form = models_data._get_id(
cr, uid, 'crm', 'crm_case_form_view_oppor')
opportunity_view_tree = models_data._get_id(
cr, uid, 'crm', 'crm_case_tree_view_oppor')
if opportunity_view_form:
opportunity_view_form = models_data.browse(
cr, uid, opportunity_view_form, context=context).res_id
if opportunity_view_tree:
opportunity_view_tree = models_data.browse(
cr, uid, opportunity_view_tree, context=context).res_id
return {
'name': _('Opportunity'),
'view_type': 'form',
'view_mode': 'tree, form',
'res_model': 'crm.lead',
'domain': [('type', '=', 'opportunity')],
'res_id': int(first_opportunity.id),
'view_id': False,
'views': [(opportunity_view_form, 'form'),
(opportunity_view_tree, 'tree'),
(False, 'calendar'), (False, 'graph')],
'type': 'ir.actions.act_window',
}
def action_merge(self, cr, uid, ids, context=None):
"""
This function merges two opportunities
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Phonecall to Opportunity IDs
@param context: A standard dictionary for contextual values
@return : Dictionary value for created Opportunity form
"""
record_id = context and context.get('active_id', False) or False
if record_id:
opp_obj = self.pool.get('crm.lead')
message_obj = self.pool.get('email.message')
current_opp = opp_obj.browse(cr, uid, record_id, context=context)
for this in self.browse(cr, uid, ids, context=context):
for opp in this.opportunity_ids:
opp_obj.write(cr, uid, [opp.id], {
'stage_id': opp.stage_id.id or current_opp.stage_id.id or False,
'priority': opp.priority or current_opp.priority,
'email_from': opp.email_from or current_opp.email_from,
'phone': opp.phone or current_opp.phone,
'section_id': opp.section_id.id or current_opp.section_id.id or False,
'categ_id': opp.categ_id.id or current_opp.categ_id.id or False,
'description': (opp.description or '') + '\n' + (current_opp.description or ''),
'partner_name': opp.partner_name or current_opp.partner_name,
'title': opp.title.id or current_opp.title.id or False,
'function': opp.function or current_opp.function,
'street': opp.street or current_opp.street,
'street2': opp.street2 or current_opp.street2,
'zip': opp.zip or current_opp.zip,
'city': opp.city or current_opp.city,
'country_id': opp.country_id.id or current_opp.country_id.id or False,
'state_id': opp.state_id.id or current_opp.state_id.id or False,
'fax': opp.fax or current_opp.fax,
'mobile': opp.mobile or current_opp.mobile,
'email_cc': ','.join(filter(lambda x: x, [opp.email_cc, current_opp.email_cc]))
})
for history in current_opp.message_ids:
if history.history:
new_history = message_obj.copy(cr, uid, history.id, default={'res_id': opp.id})
opp_obj._history(cr, uid, [current_opp], _('Merged into Opportunity: %s') % (opp.id))
if this.state == 'unchanged':
pass
elif this.state == 'done':
opp_obj.case_close(cr, uid, [record_id])
elif this.state == 'draft':
opp_obj.case_reset(cr, uid, [record_id])
elif this.state in ['cancel', 'open', 'pending']:
act = 'case_' + this.state
getattr(opp_obj, act)(cr, uid, [record_id])
return {'type': 'ir.actions.act_window_close'}
obj_opportunity = self.browse(cr, uid, ids[0], context=context)
op_ids = obj_opportunity.opportunity_ids
self.write(cr, uid, ids, {'opportunity_ids' : [(6,0, [op_ids[0].id])]}, context=context)
context['lead_ids'] = [op_ids[0].id]
return self.merge(cr, uid, op_ids, context)
_columns = {
'opportunity_ids' : fields.many2many('crm.lead', 'merge_opportunity_rel', 'merge_id', 'opportunity_id', 'Opportunities', domain=[('type', '=', 'opportunity')]),
'state': fields.selection(crm.AVAILABLE_STATES + [('unchanged', 'Unchanged')], string='Set State To', required=True),
}
def default_get(self, cr, uid, fields, context=None):
@ -126,21 +209,12 @@ class crm_merge_opportunity(osv.osv_memory):
@return : default values of fields.
"""
record_id = context and context.get('active_id', False) or False
record_ids = context and context.get('active_ids', False) or False
res = super(crm_merge_opportunity, self).default_get(cr, uid, fields, context=context)
if record_id:
opp_obj = self.pool.get('crm.lead')
opp = opp_obj.browse(cr, uid, record_id, context=context)
opp_ids = opp_obj.search(cr, uid, [('partner_id', '=', opp.partner_id.id), ('type', '=', 'opportunity'), ('state', 'in', ('open', 'pending'))])
# Removing current opportunity
if record_id in opp_ids:
opp_ids.remove(record_id)
if record_ids:
if 'opportunity_ids' in fields:
res.update({'opportunity_ids': opp_ids})
if 'state' in fields:
res.update({'state': u'cancel'})
res.update({'opportunity_ids': record_ids})
return res

View File

@ -11,10 +11,16 @@
<field name="arch" type="xml">
<form string="Merge Opportunities">
<separator string="Select Opportunities" colspan="4"/>
<field name="opportunity_ids" nolabel="1" colspan="4" width="550" height="300"/>
<field name="opportunity_ids" nolabel="1" colspan="4" width="550" height="300" >
<tree>
<field name="name" />
<field name="partner_id" />
<field name="user_id" />
<field name="section_id" />
</tree>
</field>
<separator colspan="4"/>
<group col="4" colspan="4">
<field name="state" />
<button string="_Cancel" icon="gtk-cancel" special="cancel" />
<button name="action_merge" type="object"
string="_Merge" icon="gtk-ok" />

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: crm_fundraising

View File

@ -37,6 +37,7 @@ based on geolocalization.
'crm_lead_view.xml',
'report/crm_lead_report_view.xml',
],
'test': ['test/test_crm_partner_assign.yml'],
'installable': True,
'active': False,
'certificate': '00503409558942442061',

View File

@ -37,6 +37,9 @@
</data>
</field>
</record>
<record id="view_crm_opportunity_geo_assign_tree" model="ir.ui.view">
<field name="name">crm.lead.geo_assign.tree.inherit</field>
<field name="model">crm.lead</field>
@ -48,5 +51,21 @@
</field>
</field>
</record>
<record model="ir.ui.view" id="crm_opportunity_partner_filter">
<field name="name">crm.opportunity.partner.filter.assigned</field>
<field name="model">crm.lead</field>
<field name="type">search</field>
<field name="inherit_id" ref="crm.view_crm_case_opportunities_filter"/>
<field name="arch" type="xml">
<filter string="Team" position="after">
<filter string="Referred Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
</filter>
<field name="categ_id" position="after">
<separator orientation="vertical"/>
<field name="partner_assigned_id"/>
</field>
</field>
</record>
</data>
</openerp>

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: crm_partner_assign

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: crm_partner_assign

View File

@ -26,7 +26,7 @@ import random, time
from tools.translate import _
def geo_find(addr):
try:
try:
regex = '<coordinates>([+-]?[0-9\.]+),([+-]?[0-9\.]+),([+-]?[0-9\.]+)</coordinates>'
url = 'http://maps.google.com/maps/geo?q=' + urllib.quote(addr) + '&output=xml&oe=utf8&sensor=false'
xml = urllib.urlopen(url).read()
@ -37,7 +37,7 @@ def geo_find(addr):
return None
return float(result.group(1)),float(result.group(2))
except Exception, e:
raise osv.except_osv(_('Network error'),
raise osv.except_osv(_('Network error'),
_('Could not contact geolocation servers, please make sure you have a working internet connection (%s)') % e)
@ -64,7 +64,7 @@ class res_partner(osv.osv):
'partner_weight': fields.integer('Weight',
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
'opportunity_assigned_ids': fields.one2many('crm.lead', 'partner_assigned_id',\
'Assigned Opportunities'),
'Assigned Opportunities'),
'grade_id': fields.many2one('res.partner.grade', 'Partner Grade')
}
_defaults = {
@ -105,7 +105,12 @@ class crm_lead(osv.osv):
if not partner_assigned_id:
return {'value':{'date_assign': False}}
else:
return {'value':{'date_assign': time.strftime('%Y-%m-%d')}}
partners = self.pool.get('res.partner').browse(cr, uid, [partner_assigned_id], context=context)
user_id = partners[0] and partners[0].user_id.id or False
return {'value':
{'date_assign': time.strftime('%Y-%m-%d'),
'user_id' : user_id}
}
def assign_partner(self, cr, uid, ids, context=None):
ok = False
@ -161,7 +166,7 @@ class crm_lead(osv.osv):
('country', '=', part.country_id.id),
], context=context)
# 6. sixth way: closest partner whatsoever, just to have at least one result
# 6. sixth way: closest partner whatsoever, just to have at least one result
if not part_ids:
# warning: point() type takes (longitude, latitude) as parameters in this order!
cr.execute("""SELECT id, distance
@ -183,7 +188,9 @@ class crm_lead(osv.osv):
mypartner = random.randint(0,total)
for t in toassign:
if mypartner<=t[1]:
self.write(cr, uid, [part.id], {'partner_assigned_id': t[0], 'date_assign': time.strftime('%Y-%m-%d')}, context=context)
vals = self.onchange_assign_id(cr,uid, ids, t[0], context=context)['value']
vals.update({'partner_assigned_id': t[0], 'date_assign': time.strftime('%Y-%m-%d')})
self.write(cr, uid, [part.id], vals, context=context)
break
ok = True
return ok

View File

@ -0,0 +1,73 @@
-
In order to test Forward Partner functionality, I create an opportunity and forward it to partner.
-
I assign an email address to Administrator.
-
!record {model: res.users, id: base.user_root}:
user_email: admin@openerp.com
-
I create some partner grades.
-
I create a grade 'First'.
-
!record {model: res.partner.grade, id: res_partner_grade_first0}:
name: First
sequence: 1
-
I create another grade 'Second'.
-
!record {model: res.partner.grade, id: res_partner_grade_second0}:
name: Second
sequence: 2
-
I create one more grade 'Third'.
-
!record {model: res.partner.grade, id: res_partner_grade_third0}:
name: Third
sequence: 3
-
I assign grade 'First' to the partner 'Axelor'.
-
!record {model: res.partner, id: base.res_partner_desertic_hispafuentes}:
grade_id: res_partner_grade_first0
-
I assgin a reply-to email address to Sales Team.
-
!record {model: crm.case.section, id: crm.section_sales_department}:
reply_to: sales_openerp@openerp.com
-
I create an opportunity 'Questionnaire on OpenERP'.
-
!record {model: crm.lead, id: crm_lead_questionnaireonopenerp0}:
categ_id: crm.categ_oppor7
section_id: crm.section_sales_department
country_id: base.fr
date_assign: '2011-02-07'
day_close: 0.0
day_open: 0.0
email_from: info@axelor.com
name: Questionnaire on OpenERP
partner_address_id: base.res_partner_address_3000
partner_assigned_id: base.res_partner_desertic_hispafuentes
partner_id: base.res_partner_desertic_hispafuentes
partner_latitude: 0.0
partner_longitude: 0.0
phone: +33 1 64 61 04 01
planned_revenue: 0.0
probability: 0.0
type: opportunity
-
Now I click on Forward button.
-
!python {model: crm.lead.forward.to.partner}: |
import tools
vals = {
'name': 'email',
'email_to': 'info@axelor.com',
'email_from': 'Administrator <admin@openerp.com>',
'reply_to': 'sales_openerp@openerp.com'
}
ids = self.create(cr, uid, vals, context={'active_id': ref('crm_lead_questionnaireonopenerp0'), 'active_model': 'crm.lead'})
assert tools.config.get('smtp_user', False), 'SMTP not configured !'
self.action_forward(cr, uid, [ids], context={'active_id': ref('crm_lead_questionnaireonopenerp0'), 'active_model': 'crm.lead'})

View File

@ -151,9 +151,15 @@ class crm_lead_forward_to_partner(osv.osv_memory):
if not partner_id:
return {'value' : {'email_to' : False, 'address_id': False}}
addr = self.pool.get('res.partner').address_get(cr, uid, [partner_id], ['contact'])
partner_obj = self.pool.get('res.partner')
addr = partner_obj.address_get(cr, uid, [partner_id], ['contact'])
data = {'address_id': addr['contact']}
data.update(self.on_change_address(cr, uid, ids, addr['contact'])['value'])
partner = partner_obj.browse(cr, uid, [partner_id])
user_id = partner and partner[0].user_id or False
email = user_id and user_id.user_email or ''
data.update({'email_cc' : email})
return {
'value' : data,
'domain' : {'address_id' : partner_id and "[('partner_id', '=', partner_id)]" or "[]"}

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: document_ftp

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: document_webdav

View File

@ -157,7 +157,7 @@ class mailgate_thread(osv.osv):
'model' : case._name,
'res_id': case.id,
'date': email_date or time.strftime('%Y-%m-%d %H:%M:%S'),
'description': details or (hasattr(case, 'description') and case.description or False),
'description': details,
'email_to': email,
'email_from': email_from or \
(hasattr(case, 'user_id') and case.user_id and case.user_id.address_id and \

View File

@ -1,6 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="0">
<record id="base.res_groups_email_template_admin" model="res.groups">
<field name="name">Marketing / User</field>
</record>
</data>
</openerp>

View File

@ -57,7 +57,6 @@ import time
#]
LOGGER = netsvc.Logger()
def format_date_tz(date, tz=None):
if not date:
return 'n/a'
@ -166,15 +165,7 @@ class email_message(osv.osv):
msg_txt += self.truncate_data(cr, uid, message.description, context=context)
else:
msg_txt = (message.user_id.name or '/') + _(' on ') + format_date_tz(message.date, tz) + ':\n\t'
if message.name == _('Opportunity'):
msg_txt += _("Converted to Opportunity")
elif message.name == _('Note'):
msg_txt = (message.user_id.name or '/') + _(' added note on ') + format_date_tz(message.date, tz) + ':\n\t'
msg_txt += self.truncate_data(cr, uid, message.description, context=context)
elif message.name == _('Stage'):
msg_txt += _("Changed Stage to: ") + message.description
else:
msg_txt += _("Changed Status to: ") + message.name
msg_txt += message.name
result[message.id] = msg_txt
return result

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: fetchmail

318
addons/fetchmail/i18n/tr.po Normal file
View File

@ -0,0 +1,318 @@
# Turkish translation for openobject-addons
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
"PO-Revision-Date: 2011-02-24 20:53+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Turkish <tr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: fetchmail
#: constraint:email.server:0
msgid ""
"Warning! Record for selected Model can not be created\n"
"Please choose valid Model"
msgstr ""
"UYARI! seçilen model için kayıt oluşturulamıyor\n"
"Lütfen geçerli bir model seçin"
#. module: fetchmail
#: selection:email.server,state:0
msgid "Confirmed"
msgstr "Onaylandı"
#. module: fetchmail
#: view:email.server:0
msgid "Confirm"
msgstr "Onayla"
#. module: fetchmail
#: view:email.server:0
msgid "Group By..."
msgstr "Grupla..."
#. module: fetchmail
#: view:email.server:0
#: field:email.server,state:0
msgid "State"
msgstr "Durum"
#. module: fetchmail
#: view:email.server:0
msgid "POP"
msgstr "POP"
#. module: fetchmail
#: selection:email.server,state:0
msgid "Not Confirmed"
msgstr "Onaylanmadı"
#. module: fetchmail
#: field:email.server,user:0
msgid "User Name"
msgstr "Kullanıcı Adı"
#. module: fetchmail
#: view:email.server:0
msgid "Type"
msgstr "Tip"
#. module: fetchmail
#: view:email.server:0
msgid "POP/IMAP Servers"
msgstr "POP/IMAP Sunucuları"
#. module: fetchmail
#: model:ir.module.module,shortdesc:fetchmail.module_meta_information
msgid "Fetchmail Server"
msgstr "Fetchmail Sunucusu"
#. module: fetchmail
#: view:email.server:0
#: field:email.server,note:0
msgid "Description"
msgstr "Açıklama"
#. module: fetchmail
#: help:email.server,object_id:0
msgid ""
"OpenObject Model. Generates a record of this model.\n"
"Select Object with message_new attrbutes."
msgstr ""
"OpenObject Model. Bu model için bir kayıt oluşturur.\n"
"message_new özelliği olan bir nesne seçin."
#. module: fetchmail
#: field:email.server,attach:0
msgid "Add Attachments ?"
msgstr "Ek Ekle ?"
#. module: fetchmail
#: view:email.server:0
msgid "# of emails"
msgstr "E-posta sayısı"
#. module: fetchmail
#: model:ir.actions.act_window,name:fetchmail.act_server_history
msgid "Email History"
msgstr "Eposta Geçmişi"
#. module: fetchmail
#: field:email.server,user_id:0
msgid "User"
msgstr "Kullanıcı"
#. module: fetchmail
#: field:email.server,date:0
msgid "Date"
msgstr "Tarih"
#. module: fetchmail
#: selection:email.server,state:0
msgid "Waiting for Verification"
msgstr "Onay Bekleniyor"
#. module: fetchmail
#: field:email.server,password:0
msgid "Password"
msgstr "Şifre"
#. module: fetchmail
#: view:mailgate.message:0
msgid "Emails"
msgstr "E-postalar"
#. module: fetchmail
#: view:email.server:0
msgid "Search Email Servers"
msgstr "E-posta Sunucusu Ara"
#. module: fetchmail
#: view:email.server:0
msgid "Server & Login"
msgstr "Sunucu & Kullanıcı"
#. module: fetchmail
#: view:email.server:0
msgid "Auto Reply?"
msgstr "Otomatik Cevap?"
#. module: fetchmail
#: field:email.server,name:0
msgid "Name"
msgstr "Adı"
#. module: fetchmail
#: model:ir.model,name:fetchmail.model_mailgate_message
msgid "Mailgateway Message"
msgstr "Mailgeçidi Mesajı"
#. module: fetchmail
#: model:ir.actions.act_window,name:fetchmail.action_email_server_tree
msgid "POP Servers"
msgstr "POP Sunucuları"
#. module: fetchmail
#: view:email.server:0
msgid "Set to Draft"
msgstr "Taslağa Çevir"
#. module: fetchmail
#: field:email.server,message_ids:0
#: model:ir.actions.act_window,name:fetchmail.action_view_mail_message_emails
msgid "Messages"
msgstr "Mesajlar"
#. module: fetchmail
#: model:ir.ui.menu,name:fetchmail.menu_action_fetchmail_server_tree
msgid "Fetchmail Services"
msgstr "Fetchmail Servisleri"
#. module: fetchmail
#: field:email.server,server:0
msgid "Server"
msgstr "Sunucu"
#. module: fetchmail
#: field:email.server,active:0
msgid "Active"
msgstr "Aktif"
#. module: fetchmail
#: view:email.server:0
msgid "Process Parameter"
msgstr "İşlem Parametresi"
#. module: fetchmail
#: field:email.server,is_ssl:0
msgid "SSL ?"
msgstr "SSL ?"
#. module: fetchmail
#: selection:email.server,type:0
#: selection:mailgate.message,server_type:0
msgid "IMAP Server"
msgstr "IMAP sunucusu"
#. module: fetchmail
#: field:email.server,object_id:0
msgid "Model"
msgstr "Model"
#. module: fetchmail
#: view:email.server:0
msgid "IMAP"
msgstr "IMAP"
#. module: fetchmail
#: view:email.server:0
#: model:ir.model,name:fetchmail.model_email_server
msgid "POP/IMAP Server"
msgstr "POP/IMAP Sunucu"
#. module: fetchmail
#: constraint:email.server:0
msgid "Warning! Can't have duplicate server configuration!"
msgstr "UYARI! Mükerrer sunucu ayarı yapamazsınız!"
#. module: fetchmail
#: field:email.server,type:0
#: field:mailgate.message,server_type:0
msgid "Server Type"
msgstr "Sunucu Türü"
#. module: fetchmail
#: view:email.server:0
msgid "Login Information"
msgstr "Kullanıcı Bilgileri"
#. module: fetchmail
#: view:email.server:0
msgid "Server Information"
msgstr "Sunucu Bilgileri"
#. module: fetchmail
#: help:email.server,attach:0
msgid "Fetches mail with attachments if true."
msgstr "Eğer doğru işe e-postaları ekleriyle birlikte çeker."
#. module: fetchmail
#: selection:email.server,type:0
#: selection:mailgate.message,server_type:0
msgid "POP Server"
msgstr "POP Sunucu"
#. module: fetchmail
#: field:email.server,port:0
msgid "Port"
msgstr "Port"
#. module: fetchmail
#: model:ir.module.module,description:fetchmail.module_meta_information
msgid ""
"Fetchmail: \n"
" * Fetch email from Pop / IMAP server\n"
" * Support SSL\n"
" * Integrated with all Modules\n"
" * Automatic Email Receive\n"
" * Email based Records (Add, Update)\n"
" "
msgstr ""
"Fetchmail: \n"
" * POP/IMAP sunuculardan e-postaları çeker\n"
" * SSL Destekler\n"
" * Bütün Modüllerle entegre çalışır\n"
" * Otomatik E-posta çekimi\n"
" * E-posta temelli kayıtlar (ekle,Güncelle)\n"
" "
#. module: fetchmail
#: view:email.server:0
msgid "SSL"
msgstr "SSL"
#. module: fetchmail
#: help:email.server,action_id:0
msgid ""
"An Email Server Action. It will be run whenever an e-mail is fetched from "
"server."
msgstr ""
"E-posta sunucu eylemi. Sunucudan bir mesaj çekildiğinde bu eylem "
"çalıştırılır."
#. module: fetchmail
#: help:email.server,priority:0
msgid "Priority between 0 to 10, select define the order of Processing"
msgstr ""
"İşlem sırasını belirlemek için öncelik seviyesi 0 ile 10 arası seçin."
#. module: fetchmail
#: field:email.server,action_id:0
msgid "Email Server Action"
msgstr "E-posta Sunucu Eylemi"
#. module: fetchmail
#: field:email.server,priority:0
msgid "Server Priority"
msgstr "Sunucu Önceliği"
#. module: fetchmail
#: view:mailgate.message:0
#: field:mailgate.message,server_id:0
msgid "Mail Server"
msgstr "E-Posta Sunucusu"
#. module: fetchmail
#: view:email.server:0
msgid "Fetch Emails"
msgstr "E-postaları Çeker"

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: hr_contract

View File

@ -14,13 +14,13 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: hr_payroll
#: rml:employees.salary:0
msgid "E-mail Address"
msgstr ""
msgstr "Sähköpostiosoite"
#. module: hr_payroll
#: view:hr.allounce.deduction.categoty:0
@ -52,7 +52,7 @@ msgstr ""
#: rml:employees.salary:0
#: rml:salary.structure:0
msgid "Department"
msgstr ""
msgstr "Osasto"
#. module: hr_payroll
#: rml:employees.salary:0

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: hr_payroll_account

694
addons/idea/i18n/gl.po Normal file
View File

@ -0,0 +1,694 @@
# Galician translation for openobject-addons
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
"PO-Revision-Date: 2011-02-24 22:34+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Galician <gl@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: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: idea
#: help:idea.category,visibility:0
msgid "If True creator of the idea will be visible to others"
msgstr "Se é verdadeiro, o creador da idea será visible para outros"
#. module: idea
#: model:ir.actions.act_window,name:idea.action_idea_select
msgid "Idea select"
msgstr "Seleccionar idea"
#. module: idea
#: view:idea.idea:0
#: view:idea.vote:0
#: model:ir.ui.menu,name:idea.menu_idea_vote
msgid "Votes"
msgstr "Votos"
#. module: idea
#: view:idea.idea:0
#: field:idea.idea,comment_ids:0
msgid "Comments"
msgstr "Comentarios"
#. module: idea
#: view:idea.idea:0
msgid "Submit Vote"
msgstr "Enviar voto"
#. module: idea
#: model:ir.actions.act_window,name:idea.action_report_vote_all
#: model:ir.ui.menu,name:idea.menu_report_vote_all
msgid "Ideas Analysis"
msgstr "Análisis de ideas"
#. module: idea
#: view:idea.category:0
#: view:idea.idea:0
#: view:idea.vote:0
#: view:report.vote:0
msgid "Group By..."
msgstr "Agrupar por ..."
#. module: idea
#: model:ir.module.module,description:idea.module_meta_information
msgid ""
"\n"
" This module allows your user to easily and efficiently participate in "
"the innovation of the enterprise.\n"
" It allows everybody to express ideas about different subjects.\n"
" Then, other users can comment on these ideas and vote for particular "
"ideas.\n"
" Each idea has a score based on the different votes.\n"
" The managers can obtain an easy view on best ideas from all the users.\n"
" Once installed, check the menu 'Ideas' in the 'Tools' main menu."
msgstr ""
"\n"
" Este módulo permite aos seus usuarios participar de forma fácil e eficaz "
"na innovación da empresa.\n"
"Permite a todos expresar as súas ideas sobre diferentes temas.\n"
"Logo, outros usuarios poden comentar estas ideas e votar a favor dalgunhas "
"das ideas.\n"
"Cada idea ten unha puntuación baseada nas diferentes votacións.\n"
"Os administradores poden obter unha visión fácil das mellores ideas de todos "
"os usuarios.\n"
"Unha vez instalado, aparecerá o menú 'Ideas' dentro do menú principal "
"'Ferramentas'."
#. module: idea
#: model:ir.module.module,shortdesc:idea.module_meta_information
msgid "Idea Manager"
msgstr "Xestión de ideas"
#. module: idea
#: selection:report.vote,month:0
msgid "March"
msgstr "Marzo"
#. module: idea
#: code:addons/idea/wizard/idea_post_vote.py:92
#, python-format
msgid "Idea must be in 'Open' state before vote for that idea."
msgstr ""
#. module: idea
#: view:report.vote:0
#: field:report.vote,day:0
msgid "Day"
msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "Refuse"
msgstr ""
#. module: idea
#: field:idea.idea,count_votes:0
msgid "Count of votes"
msgstr ""
#. module: idea
#: model:ir.model,name:idea.model_report_vote
msgid "Idea Vote Statistics"
msgstr ""
#. module: idea
#: selection:idea.idea,my_vote:0
#: selection:idea.post.vote,vote:0
#: selection:idea.vote,score:0
#: selection:idea.vote.stat,score:0
msgid "Bad"
msgstr ""
#. module: idea
#: selection:report.vote,idea_state:0
msgid "Cancelled"
msgstr ""
#. module: idea
#: view:idea.category:0
msgid "Category of ideas"
msgstr ""
#. module: idea
#: code:addons/idea/idea.py:253
#: code:addons/idea/wizard/idea_post_vote.py:89
#: code:addons/idea/wizard/idea_post_vote.py:92
#, python-format
msgid "Warning !"
msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "Your comment"
msgstr ""
#. module: idea
#: view:report.vote:0
msgid " Month "
msgstr ""
#. module: idea
#: model:ir.model,name:idea.model_idea_vote
msgid "Idea Vote"
msgstr ""
#. module: idea
#: field:idea.category,parent_id:0
msgid "Parent Categories"
msgstr ""
#. module: idea
#: selection:idea.idea,my_vote:0
#: selection:idea.post.vote,vote:0
#: selection:idea.vote,score:0
#: selection:idea.vote.stat,score:0
msgid "Very Bad"
msgstr ""
#. module: idea
#: view:idea.vote:0
msgid "Ideas vote"
msgstr ""
#. module: idea
#: view:report.vote:0
#: field:report.vote,nbr:0
msgid "# of Lines"
msgstr ""
#. module: idea
#: code:addons/idea/wizard/idea_post_vote.py:89
#, python-format
msgid "You can not give Vote for this idea more than %s times"
msgstr ""
#. module: idea
#: view:idea.category:0
msgid "Ideas Categories"
msgstr ""
#. module: idea
#: help:idea.idea,description:0
msgid "Content of the idea"
msgstr ""
#. module: idea
#: model:ir.model,name:idea.model_idea_category
msgid "Idea Category"
msgstr ""
#. module: idea
#: view:idea.idea:0
#: field:idea.idea,stat_vote_ids:0
msgid "Statistics"
msgstr ""
#. module: idea
#: selection:idea.idea,my_vote:0
#: selection:idea.post.vote,vote:0
#: selection:idea.vote,score:0
#: selection:idea.vote.stat,score:0
msgid "Not Voted"
msgstr ""
#. module: idea
#: sql_constraint:idea.category:0
msgid "The name of the category must be unique"
msgstr ""
#. module: idea
#: model:ir.model,name:idea.model_idea_select
msgid "select idea"
msgstr ""
#. module: idea
#: view:idea.stat:0
msgid "stat"
msgstr ""
#. module: idea
#: field:idea.category,child_ids:0
msgid "Child Categories"
msgstr ""
#. module: idea
#: view:idea.select:0
msgid "Next"
msgstr ""
#. module: idea
#: view:idea.idea:0
#: field:idea.idea,state:0
#: view:report.vote:0
#: field:report.vote,idea_state:0
msgid "State"
msgstr ""
#. module: idea
#: selection:idea.idea,my_vote:0
#: selection:idea.post.vote,vote:0
#: selection:idea.vote,score:0
#: selection:idea.vote.stat,score:0
msgid "Good"
msgstr ""
#. module: idea
#: help:idea.idea,open_date:0
msgid "Date when an idea opened"
msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "Idea Detail"
msgstr ""
#. module: idea
#: help:idea.idea,state:0
msgid ""
"When the Idea is created the state is 'Draft'.\n"
" It is opened by the user, the state is 'Opened'. \n"
"If the idea is accepted, the state is 'Accepted'."
msgstr ""
#. module: idea
#: field:idea.category,visibility:0
#: field:idea.idea,visibility:0
msgid "Open Idea?"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "July"
msgstr ""
#. module: idea
#: view:idea.idea:0
#: selection:idea.idea,state:0
#: view:report.vote:0
#: selection:report.vote,idea_state:0
msgid "Accepted"
msgstr ""
#. module: idea
#: model:ir.actions.act_window,name:idea.action_idea_category
#: model:ir.ui.menu,name:idea.menu_idea_category
msgid "Categories"
msgstr ""
#. module: idea
#: view:report.vote:0
msgid " Month-1 "
msgstr ""
#. module: idea
#: field:idea.idea,open_date:0
msgid "Open date"
msgstr ""
#. module: idea
#: field:idea.idea,vote_ids:0
#: model:ir.actions.act_window,name:idea.action_idea_post_vote
msgid "Vote"
msgstr ""
#. module: idea
#: model:ir.actions.act_window,name:idea.action_idea_vote_stat
#: model:ir.ui.menu,name:idea.menu_idea_vote_stat
msgid "Vote Statistics"
msgstr ""
#. module: idea
#: field:idea.idea,vote_limit:0
msgid "Maximum Vote per User"
msgstr ""
#. module: idea
#: view:idea.category:0
msgid "Parent Category"
msgstr ""
#. module: idea
#: field:idea.comment,content:0
#: view:idea.idea:0
#: view:idea.post.vote:0
#: field:idea.vote,comment:0
#: model:ir.model,name:idea.model_idea_comment
msgid "Comment"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "September"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "December"
msgstr ""
#. module: idea
#: view:report.vote:0
#: field:report.vote,month:0
msgid "Month"
msgstr ""
#. module: idea
#: model:ir.actions.act_window,name:idea.action_idea_idea_categ_open
#: model:ir.actions.act_window,name:idea.action_idea_idea_open
msgid "Open Ideas"
msgstr ""
#. module: idea
#: view:idea.category:0
#: field:idea.category,name:0
#: view:idea.idea:0
#: field:idea.idea,category_id:0
#: view:report.vote:0
#: field:report.vote,category_id:0
msgid "Category"
msgstr ""
#. module: idea
#: selection:idea.idea,my_vote:0
#: selection:idea.post.vote,vote:0
#: selection:idea.vote,score:0
#: selection:idea.vote.stat,score:0
msgid "Very Good"
msgstr ""
#. module: idea
#: view:report.vote:0
msgid " Year "
msgstr ""
#. module: idea
#: selection:idea.idea,state:0
#: selection:report.vote,idea_state:0
msgid "Opened"
msgstr ""
#. module: idea
#: model:ir.actions.act_window,name:idea.action_idea_vote
msgid "Idea's Votes"
msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "New Idea"
msgstr ""
#. module: idea
#: view:idea.vote.stat:0
msgid "vote_stat of ideas"
msgstr ""
#. module: idea
#: model:ir.actions.act_window,name:idea.action_idea_category_tree
#: model:ir.ui.menu,name:idea.menu_idea_category_tree
msgid "Ideas by Categories"
msgstr ""
#. module: idea
#: selection:idea.idea,state:0
#: selection:report.vote,idea_state:0
msgid "Draft"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "August"
msgstr ""
#. module: idea
#: selection:idea.idea,my_vote:0
#: selection:idea.post.vote,vote:0
#: selection:idea.vote,score:0
#: selection:idea.vote.stat,score:0
msgid "Normal"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "June"
msgstr ""
#. module: idea
#: field:report.vote,creater_id:0
#: field:report.vote,user_id:0
msgid "User Name"
msgstr ""
#. module: idea
#: model:ir.model,name:idea.model_idea_vote_stat
msgid "Idea Votes Statistics"
msgstr ""
#. module: idea
#: field:idea.comment,user_id:0
#: view:idea.vote:0
#: field:idea.vote,user_id:0
#: view:report.vote:0
msgid "User"
msgstr ""
#. module: idea
#: field:idea.vote,date:0
msgid "Date"
msgstr ""
#. module: idea
#: view:idea.post.vote:0
msgid "Post"
msgstr ""
#. module: idea
#: field:idea.idea,my_vote:0
msgid "My Vote"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "October"
msgstr ""
#. module: idea
#: field:idea.comment,create_date:0
#: field:idea.idea,created_date:0
msgid "Creation date"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "January"
msgstr ""
#. module: idea
#: model:ir.model,name:idea.model_idea_idea
msgid "idea.idea"
msgstr ""
#. module: idea
#: field:idea.category,summary:0
msgid "Summary"
msgstr ""
#. module: idea
#: field:idea.idea,name:0
msgid "Idea Summary"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "November"
msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "History"
msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "Vots Statistics"
msgstr ""
#. module: idea
#: field:report.vote,date:0
msgid "Date Order"
msgstr ""
#. module: idea
#: view:idea.idea:0
#: field:idea.idea,user_id:0
#: view:report.vote:0
msgid "Creator"
msgstr ""
#. module: idea
#: view:idea.post.vote:0
#: model:ir.ui.menu,name:idea.menu_give_vote
msgid "Give Vote"
msgstr ""
#. module: idea
#: help:idea.idea,vote_limit:0
msgid "Set to one if you require only one Vote per user"
msgstr ""
#. module: idea
#: view:idea.post.vote:0
msgid "Cancel"
msgstr ""
#. module: idea
#: view:idea.select:0
msgid "Close"
msgstr ""
#. module: idea
#: view:idea.idea:0
#: view:report.vote:0
msgid "Open"
msgstr ""
#. module: idea
#: view:report.vote:0
msgid "Idea Vote Analysis"
msgstr ""
#. module: idea
#: view:idea.idea:0
#: model:ir.actions.act_window,name:idea.action_idea_idea
#: model:ir.ui.menu,name:idea.menu_idea_idea
#: model:ir.ui.menu,name:idea.menu_ideas
#: model:ir.ui.menu,name:idea.menu_ideas1
msgid "Ideas"
msgstr ""
#. module: idea
#: model:ir.model,name:idea.model_idea_post_vote
msgid "Post vote"
msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "Current"
msgstr ""
#. module: idea
#: field:idea.vote.stat,score:0
#: field:report.vote,score:0
msgid "Score"
msgstr ""
#. module: idea
#: view:idea.vote:0
msgid "Comments:"
msgstr ""
#. module: idea
#: view:idea.category:0
#: field:idea.idea,description:0
#: field:idea.post.vote,note:0
msgid "Description"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "May"
msgstr ""
#. module: idea
#: selection:idea.idea,state:0
#: view:report.vote:0
msgid "Refused"
msgstr ""
#. module: idea
#: code:addons/idea/idea.py:253
#, python-format
msgid "Draft/Accepted/Cancelled ideas Could not be voted"
msgstr ""
#. module: idea
#: view:idea.vote:0
msgid "Vote date"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "February"
msgstr ""
#. module: idea
#: view:report.vote:0
msgid " Today "
msgstr ""
#. module: idea
#: field:idea.vote.stat,nbr:0
msgid "Number of Votes"
msgstr ""
#. module: idea
#: selection:report.vote,month:0
msgid "April"
msgstr ""
#. module: idea
#: field:idea.idea,count_comments:0
msgid "Count of comments"
msgstr ""
#. module: idea
#: field:idea.vote,score:0
msgid "Vote Status"
msgstr ""
#. module: idea
#: field:idea.idea,vote_avg:0
msgid "Average Score"
msgstr ""
#. module: idea
#: field:idea.comment,idea_id:0
#: field:idea.select,idea_id:0
#: view:idea.vote:0
#: field:idea.vote,idea_id:0
#: field:idea.vote.stat,idea_id:0
#: model:ir.ui.menu,name:idea.menu_idea_reporting
#: view:report.vote:0
#: field:report.vote,idea_id:0
msgid "Idea"
msgstr ""
#. module: idea
#: view:idea.idea:0
msgid "Accept"
msgstr ""
#. module: idea
#: field:idea.post.vote,vote:0
msgid "Post Vote"
msgstr ""
#. module: idea
#: view:report.vote:0
#: field:report.vote,year:0
msgid "Year"
msgstr ""
#. module: idea
#: view:idea.select:0
msgid "Select Idea for Vote"
msgstr ""

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: knowledge

View File

@ -10,6 +10,7 @@
<menuitem id="menu_mrp_manufacturing" name="Manufacturing" parent="base.menu_mrp_root" sequence="1"/>
<menuitem name="Master Data"
id="menu_mrp_bom"
parent="base.menu_mrp_root"

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:40+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: purchase_requisition

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#, python-format

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: sale_journal

View File

@ -14,7 +14,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-02-24 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: sale_margin

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-03 16:58+0000\n"
"PO-Revision-Date: 2011-01-17 12:58+0000\n"
"PO-Revision-Date: 2011-02-24 10:05+0000\n"
"Last-Translator: Pekka Pylvänäinen <Unknown>\n"
"Language-Team: Finnish <fi@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-01-18 04:44+0000\n"
"X-Generator: Launchpad (build 12177)\n"
"X-Launchpad-Export-Date: 2011-02-25 04:39+0000\n"
"X-Generator: Launchpad (build 12351)\n"
#. module: stock_invoice_directly
#: model:ir.model,name:stock_invoice_directly.model_stock_partial_picking
@ -30,6 +30,10 @@ msgid ""
" the invoicing wizard if the delivery is to be invoiced.\n"
" "
msgstr ""
"\n"
" Tämä moduuli käynnistää laskutusavustajan, kun laskutettavat tavarat "
"lähetetään tai toimitetaan.\n"
" "
#. module: stock_invoice_directly
#: model:ir.module.module,shortdesc:stock_invoice_directly.module_meta_information