[Merge] Merge to get update of crm from bth's branch for social chatter.

bzr revid: jra@tinyerp.com-20120319070700-dvv1ild5nwuzozlx
This commit is contained in:
Jiten (OpenERP)
2012-03-19 12:37:00 +05:30
41 changed files with 1061 additions and 241 deletions
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
"PO-Revision-Date: 2011-11-03 22:52+0000\n"
"PO-Revision-Date: 2012-03-13 16:49+0000\n"
"Last-Translator: Milan Milosevic <Unknown>\n"
"Language-Team: Serbian latin <sr@latin@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: 2012-02-09 06:32+0000\n"
"X-Generator: Launchpad (build 14763)\n"
"X-Launchpad-Export-Date: 2012-03-14 04:42+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: account_analytic_analysis
#: field:account.analytic.account,revenue_per_hour:0
msgid "Revenue per Time (real)"
msgstr ""
msgstr "Prihod po vremenu (realnom)"
#. module: account_analytic_analysis
#: help:account.analytic.account,remaining_ca:0
@@ -38,11 +38,13 @@ msgid ""
"The contracts to be renewed because the deadline is passed or the working "
"hours are higher than the allocated hours"
msgstr ""
"Ugovor treba da se obnovi jer je rok pređen, ili ima više radnih sati od "
"određenih sati"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Pending contracts to renew with your customer"
msgstr ""
msgstr "Ugovori na čekanju za potvrdu sa Vašom strankom"
#. module: account_analytic_analysis
#: help:account.analytic.account,hours_qtt_non_invoiced:0
@@ -50,26 +52,28 @@ msgid ""
"Number of time (hours/days) (from journal of type 'general') that can be "
"invoiced if you invoice based on analytic account."
msgstr ""
"Broj vremena (dana/sati) (iz dnevnika tipa 'opšte') koji se može fakturisati "
"ako Vam je fakturisanje bazirano na analitičkom kontu."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Analytic Accounts with a past deadline in one month."
msgstr ""
msgstr "Analitička konta sa pređenim rokom u jednom mesecu."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Group By..."
msgstr ""
msgstr "Grupiši po..."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "End Date"
msgstr ""
msgstr "Datum završetka"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Create Invoice"
msgstr ""
msgstr "Napravi fakturu"
#. module: account_analytic_analysis
#: field:account.analytic.account,last_invoice_date:0
@@ -87,16 +91,18 @@ msgid ""
"Number of time you spent on the analytic account (from timesheet). It "
"computes quantities on all journal of type 'general'."
msgstr ""
"Vreme potrošeno na analitički konto (s vremenske tabele). Obračunava "
"kvantitete na sve dnevnike tipa 'opšte'."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Contracts in progress"
msgstr ""
msgstr "Ugovori u toku"
#. module: account_analytic_analysis
#: field:account.analytic.account,is_overdue_quantity:0
msgid "Overdue Quantity"
msgstr ""
msgstr "Preloraečnja"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,help:account_analytic_analysis.action_account_analytic_overdue
@@ -108,6 +114,11 @@ msgid ""
"pending accounts and reopen or close the according to the negotiation with "
"the customer."
msgstr ""
"Naći ćete ovde ugovore koje treba obnoviti jer je rok istekao, ili su radni "
"sati veći od određenih. OpenERP automatski postavlja ta analitička konta na "
"stanje 'na čekanju', da bi se iznelo upozorenje za vreme sačuvavanja u "
"tabelama vremena. Prodavci bi trebalo da provere sva konta na čekanju i "
"zatvore ili ih ponovo otvore, u zavisnosti od dogovora sa strankama."
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_theorical:0
@@ -117,7 +128,7 @@ msgstr "Teoretski prihod"
#. module: account_analytic_analysis
#: field:account.analytic.account,hours_qtt_non_invoiced:0
msgid "Uninvoiced Time"
msgstr ""
msgstr "Neobračunato vreme"
#. module: account_analytic_analysis
#: help:account.analytic.account,last_worked_invoiced_date:0
@@ -131,7 +142,7 @@ msgstr ""
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "To Renew"
msgstr ""
msgstr "Za obnovu"
#. module: account_analytic_analysis
#: field:account.analytic.account,last_worked_date:0
@@ -141,24 +152,25 @@ msgstr "Datum poslednje Cene / Rada"
#. module: account_analytic_analysis
#: field:account.analytic.account,hours_qtt_invoiced:0
msgid "Invoiced Time"
msgstr ""
msgstr "Obračunato vreme"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid ""
"A contract in OpenERP is an analytic account having a partner set on it."
msgstr ""
"Ugovor u OpenERP-u je analitički konto sa partnerom koji mu je pripisan."
#. module: account_analytic_analysis
#: field:account.analytic.account,remaining_hours:0
msgid "Remaining Time"
msgstr ""
msgstr "Preostalo vreme"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_overdue
msgid "Contracts to Renew"
msgstr ""
msgstr "Ugovori za obnovu"
#. module: account_analytic_analysis
#: field:account.analytic.account,theorical_margin:0
@@ -168,7 +180,7 @@ msgstr "Teoretska stopa marže"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid " +1 Month"
msgstr ""
msgstr " +1 mesec"
#. module: account_analytic_analysis
#: help:account.analytic.account,ca_theorical:0
@@ -183,7 +195,7 @@ msgstr ""
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Pending"
msgstr ""
msgstr "Na čekanju"
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_to_invoice:0
@@ -198,7 +210,7 @@ msgstr "Izračunato pomoću formule: Fakturisani iznos - Ukupni troškovi."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Parent"
msgstr ""
msgstr "Parent"
#. module: account_analytic_analysis
#: field:account.analytic.account,user_ids:0
@@ -214,7 +226,7 @@ msgstr "Izračunava se pomoću formule: (Realna marža / ukupni troškovi) * 100
#. module: account_analytic_analysis
#: model:ir.model,name:account_analytic_analysis.model_account_analytic_analysis_summary_user
msgid "Hours Summary by User"
msgstr "Ukupno sati po Korisniku"
msgstr "Ukupno sati po korisniku"
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_invoiced:0
@@ -229,7 +241,7 @@ msgstr "Datum poslednjeg obračunatog troška"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Contract"
msgstr ""
msgstr "Ugovor"
#. module: account_analytic_analysis
#: field:account.analytic.account,real_margin_rate:0
@@ -264,7 +276,7 @@ msgstr "Preostali prihod"
#. module: account_analytic_analysis
#: help:account.analytic.account,remaining_hours:0
msgid "Computed using the formula: Maximum Time - Total Time"
msgstr ""
msgstr "Obračunato koristeći formulu: Maksimalno vreme - ukupno vreme"
#. module: account_analytic_analysis
#: help:account.analytic.account,hours_qtt_invoiced:0
@@ -272,6 +284,8 @@ msgid ""
"Number of time (hours/days) that can be invoiced plus those that already "
"have been invoiced."
msgstr ""
"Trajanje vremena (dani/sati) koji se mogu obračunati, plus ono koje je već "
"obračunato."
#. module: account_analytic_analysis
#: help:account.analytic.account,ca_to_invoice:0
@@ -285,7 +299,7 @@ msgstr ""
#. module: account_analytic_analysis
#: help:account.analytic.account,revenue_per_hour:0
msgid "Computed using the formula: Invoiced Amount / Total Time"
msgstr ""
msgstr "Izračunato koristeći formulu: obračunat iznos / ukupno vreme"
#. module: account_analytic_analysis
#: field:account.analytic.account,total_cost:0
@@ -304,18 +318,18 @@ msgstr "Mesec"
#: field:account_analytic_analysis.summary.user,account_id:0
#: model:ir.model,name:account_analytic_analysis.model_account_analytic_account
msgid "Analytic Account"
msgstr "Analitički nalog"
msgstr "Analitički konto"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue_all
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_overdue_all
msgid "Contracts"
msgstr ""
msgstr "Ugovori"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Manager"
msgstr ""
msgstr "Rukovodilac"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_hr_tree_invoiced_all
@@ -326,22 +340,22 @@ msgstr "Sve neobračunate stavke"
#. module: account_analytic_analysis
#: help:account.analytic.account,last_invoice_date:0
msgid "If invoice from the costs, this is the date of the latest invoiced."
msgstr ""
msgstr "ako se obračunava iz troškova, ovo je datum poslednjeg obračuna."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Associated Partner"
msgstr ""
msgstr "Povezani partner"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Open"
msgstr ""
msgstr "Otvori"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Contracts that are not assigned to an account manager."
msgstr ""
msgstr "Ugovori koji oš nisu pripisani rukovodiocu naloga."
#. module: account_analytic_analysis
#: field:account.analytic.account,hours_quantity:0
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
"PO-Revision-Date: 2012-03-07 18:50+0000\n"
"PO-Revision-Date: 2012-03-13 16:55+0000\n"
"Last-Translator: Milan Milosevic <Unknown>\n"
"Language-Team: Serbian Latin <sr@latin@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: 2012-03-08 04:43+0000\n"
"X-Generator: Launchpad (build 14914)\n"
"X-Launchpad-Export-Date: 2012-03-14 04:43+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
@@ -274,7 +274,7 @@ msgstr "Podređeni kodovi"
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
msgid "Are you sure you want to confirm the selected Bank Statement lines ?"
msgstr "Da li zaista želite da izabrane redove izvoda banke?"
msgstr "Da li zaista želite sa potvrdite izabrane redove izvoda banke?"
#. module: account_bank_statement_extensions
#: constraint:account.bank.statement.line:0
@@ -300,82 +300,82 @@ msgstr "Nacrt redova izvoda."
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Glob. Am."
msgstr ""
msgstr "Glob.izn."
#. module: account_bank_statement_extensions
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr ""
msgstr "Red izvoda banke"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,code:0
msgid "Code"
msgstr ""
msgstr "Kod"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,counterparty_name:0
msgid "Counterparty Name"
msgstr ""
msgstr "Ime druge strane"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,name:0
msgid "Communication"
msgstr ""
msgstr "Komunikacija"
#. module: account_bank_statement_extensions
#: model:ir.model,name:account_bank_statement_extensions.model_res_partner_bank
msgid "Bank Accounts"
msgstr ""
msgstr "Bankovni računi"
#. module: account_bank_statement_extensions
#: constraint:account.bank.statement:0
msgid "The journal and period chosen have to belong to the same company."
msgstr ""
msgstr "Dnevnik i izabrani period treba da pripadaju istom preduzeću."
#. module: account_bank_statement_extensions
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement
msgid "Bank Statement"
msgstr ""
msgstr "Izvod banke"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Statement Line"
msgstr ""
msgstr "Red izvoda"
#. module: account_bank_statement_extensions
#: sql_constraint:account.bank.statement.line.global:0
msgid "The code must be unique !"
msgstr ""
msgstr "Kod mora biti jedinstven !"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,bank_statement_line_ids:0
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_bank_statement_line
#: model:ir.ui.menu,name:account_bank_statement_extensions.bank_statement_line
msgid "Bank Statement Lines"
msgstr ""
msgstr "Redovi izvoda banke"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line.global:0
msgid "Child Batch Payments"
msgstr ""
msgstr "Podređena grupna plaćanja"
#. module: account_bank_statement_extensions
#: view:cancel.statement.line:0
#: view:confirm.statement.line:0
msgid "Cancel"
msgstr ""
msgstr "Otkaži"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Statement Lines"
msgstr ""
msgstr "Redovi izvoda"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Total Amount"
msgstr ""
msgstr "Ukupan iznos"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,globalisation_id:0
msgid "Globalisation ID"
msgstr ""
msgstr "ID globalizacije"
+94
View File
@@ -0,0 +1,94 @@
# Gujarati translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-03-12 15:04+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Gujarati <gu@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: 2012-03-13 05:08+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: base_iban
#: constraint:res.partner.bank:0
msgid ""
"\n"
"Please define BIC/Swift code on bank for bank type IBAN Account to make "
"valid payments"
msgstr ""
#. module: base_iban
#: code:addons/base_iban/base_iban.py:139
#, python-format
msgid "This IBAN does not pass the validation check, please verify it"
msgstr ""
#. module: base_iban
#: model:res.partner.bank.type,format_layout:base_iban.bank_iban
msgid "%(bank_name)s: IBAN %(acc_number)s - BIC %(bank_bic)s"
msgstr ""
#. module: base_iban
#: model:res.partner.bank.type.field,name:base_iban.bank_swift_field
msgid "bank_bic"
msgstr ""
#. module: base_iban
#: model:res.partner.bank.type.field,name:base_iban.bank_zip_field
msgid "zip"
msgstr ""
#. module: base_iban
#: help:res.partner.bank,iban:0
msgid "International Bank Account Number"
msgstr ""
#. module: base_iban
#: model:ir.model,name:base_iban.model_res_partner_bank
msgid "Bank Accounts"
msgstr ""
#. module: base_iban
#: model:res.partner.bank.type.field,name:base_iban.bank_country_field
msgid "country_id"
msgstr ""
#. module: base_iban
#: code:addons/base_iban/base_iban.py:136
#, python-format
msgid ""
"The IBAN does not seem to be correct. You should have entered something like "
"this %s"
msgstr ""
#. module: base_iban
#: field:res.partner.bank,iban:0
msgid "IBAN"
msgstr ""
#. module: base_iban
#: code:addons/base_iban/base_iban.py:140
#, python-format
msgid "The IBAN is invalid, it should begin with the country code"
msgstr ""
#. module: base_iban
#: model:res.partner.bank.type,name:base_iban.bank_iban
msgid "IBAN Account"
msgstr ""
#. module: base_iban
#: constraint:res.partner.bank:0
msgid "The RIB and/or IBAN is not valid"
msgstr ""
#~ msgid "Invalid XML for View Architecture!"
#~ msgstr "દ્રશ્ય બંધારણ માટે અમાન્ય એક્સ.એમ.એલ!"
+19
View File
@@ -258,19 +258,37 @@ class crm_base(object):
data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
return {'value': data}
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
return ''
def case_open_send_note(self, cr, uid, ids, context=None):
for id in ids:
msg = '%s has been <b>opened</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
return True
def case_close_send_note(self, cr, uid, ids, context=None):
for id in ids:
msg = '%s has been <b>closed</b>.'% (self.case_get_note_msg_prefix(cr, uid, id, context=context))
self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
return True
def case_cancel_send_note(self, cr, uid, ids, context=None):
for id in ids:
msg = '%s has been <b>canceled</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
return True
def case_pending_send_note(self, cr, uid, ids, context=None):
for id in ids:
msg = '%s is now <b>pending</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
return True
def case_reset_send_note(self, cr, uid, ids, context=None):
for id in ids:
msg = '%s has been <b>renewed</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
return True
def case_open(self, cr, uid, ids, context=None):
@@ -483,6 +501,7 @@ class crm_case(crm_base):
cases = self.browse(cr, uid, ids)
cases[0].state # to fill the browse record cache
self.write(cr, uid, ids, {'state': state, 'active': True})
self.case_reset_send_note(cr, uid, ids, context=context)
self._action(cr, uid, cases, state)
return True
+32 -54
View File
@@ -226,7 +226,7 @@ class crm_lead(crm_case, osv.osv):
def create(self, cr, uid, vals, context=None):
obj_id = super(crm_lead, self).create(cr, uid, vals, context)
self.case_create_send_note(cr, uid, [obj_id], context=context)
self.create_send_note(cr, uid, [obj_id], context=context)
return obj_id
@@ -271,41 +271,30 @@ class crm_lead(crm_case, osv.osv):
def stage_find_won(self, cr, uid, section_id):
return self.stage_find_percent(cr, uid, 100.0, section_id)
def get_needaction_user_id(self, cr, uid, ids, name, arg, context=None):
result = {}
def get_needaction_user_ids(self, cr, uid, ids, context=None):
result = dict.fromkeys(ids, [])
for obj in self.browse(cr, uid, ids, context=context):
result[obj.id] = False
if (obj.state == 'draft' and obj.user_id):
result[obj.id] = obj.user_id.id
if obj.state == 'draft' and obj.user_id:
result[obj.id] = [obj.user_id.id]
return result
def case_reset_send_note(self, cr, uid, ids, context=None):
for lead in self.browse(cr, uid, ids, context=context):
message = _("%s has been <b>renewed</b>.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead')
lead.message_append_note('' ,message)
return True
def message_get_subscribers(self, cr, uid, ids, context=None):
sub_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context);
for obj in self.browse(cr, uid, ids, context=context):
if obj.user_id:
sub_ids.append(obj.user_id.id)
return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
def case_create_send_note(self, cr, uid, ids, context=None):
for lead in self.browse(cr, uid, ids, context=context):
self.message_subscribe(cr, uid, ids, [lead.user_id.id], context=context)
message = _("%s has been <b>created</b>.") % ('Opportunity' if lead.type == 'opportunity' and lead.state == 'draft' else 'Lead')
self.message_append_note(cr, uid, ids, _('System notification'),
def create_send_note(self, cr, uid, ids, context=None):
for id in ids:
message = _("%s has been <b>created</b>.")% (self.case_get_note_msg_prefix(cr, uid, id, context=context))
self.message_append_note(cr, uid, [id], _('System notification'),
message, type='notification', context=context)
return True
def case_open_send_note(self, cr, uid, ids, context=None):
for lead in self.browse(cr, uid, ids, context=context):
if lead.state == 'draft' and lead.state == 'pending':
return False
message = _("%s has been <b>opened</b>.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead')
lead.message_append_note('' ,message)
return True
def case_close_send_note(self, cr, uid, ids, context=None):
for lead in self.browse(cr, uid, ids, context=context):
message = _("%s has been <b>closed</b>.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead')
lead.message_append_note('' ,message)
return True
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
lead = self.browse(cr, uid, [id], context=context)[0]
return ('Opportunity' if lead.type == 'opportunity' else 'Lead')
def case_mark_lost_send_note(self, cr, uid, ids, context=None):
for opportunity in self.browse(cr, uid, ids, context=context):
@@ -319,44 +308,33 @@ class crm_lead(crm_case, osv.osv):
opportunity.message_append_note('' ,message)
return True
def case_cancel_send_note(self, cr, uid, ids, context=None):
for lead in self.browse(cr, uid, ids, context=context):
message = _("%s has been <b>cancelled</b>.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead')
lead.message_append_note('' ,message)
return True
def case_pending_send_note(self, cr, uid, ids, context=None):
for lead in self.browse(cr, uid, ids, context=context):
message = _("%s is <b>pending</b>.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead')
lead.message_append_note('' ,message)
return True
def case_escalate_send_note(self, cr, uid, ids, context=None):
for lead in self.browse(cr, uid, ids, context=context):
message = _("Lead has been <b>escalated</b>.")
lead.message_append_note('' ,message)
return True
def case_phonecall_send_note(self, cr, uid, ids, case, phonecall, action, context=None):
def schedule_phonecall_send_note(self, cr, uid, ids, case, phonecall, action, context=None):
for obj in phonecall.browse(cr, uid, ids, context=context):
message = _("<b>%s a call</b> for the <em>%s</em>.") % (action, obj.date)
case.message_append_note('', message)
def case_partner_send_note(self, cr, uid, ids, context=None):
def _lead_set_partner_send_note(self, cr, uid, ids, context=None):
for lead in self.browse(cr, uid, ids, context=context):
message = _("Partner has been <b>created</b>")
lead.message_append_note('' ,message)
return True
def case_open(self, cr, uid, ids, context=None):
res = super(crm_lead, self).case_open(cr, uid, ids, context)
for lead in self.browse(cr, uid, ids, context=context):
value = {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}
self.write(cr, uid, [lead.id], value)
if lead.type == 'opportunity' and not lead.stage_id:
stage_id = self.stage_find(cr, uid, lead.section_id.id or False, [('sequence','>',0)])
if stage_id:
self.stage_set(cr, uid, [lead.id], stage_id)
if lead.state == 'draft':
value = {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}
self.write(cr, uid, [lead.id], value)
if lead.type == 'opportunity' and not lead.stage_id:
stage_id = self.stage_find(cr, uid, lead.section_id.id or False, [('sequence','>',0)])
if stage_id:
self.stage_set(cr, uid, [lead.id], stage_id)
res = super(crm_lead, self).case_open(cr, uid, ids, context)
return res
def case_close(self, cr, uid, ids, context=None):
@@ -376,7 +354,6 @@ class crm_lead(crm_case, osv.osv):
"""
res = super(crm_lead, self).case_reset(cr, uid, ids, context)
self.write(cr, uid, ids, {'stage_id': False, 'probability': 0.0})
self.case_reset_send_note(cr, uid, ids, context=context)
return res
def case_mark_lost(self, cr, uid, ids, context=None):
@@ -505,7 +482,7 @@ class crm_lead(crm_case, osv.osv):
subject = subject[0] + ", ".join(subject[1:])
details = "\n\n".join(details)
return opportunity.message_append_note(subject, body=details)
return self.message_append_note(cr, uid, [opportunity_id], subject, body=details)
def _merge_opportunity_history(self, cr, uid, opportunity_id, opportunities, context=None):
message = self.pool.get('mail.message')
@@ -661,7 +638,8 @@ class crm_lead(crm_case, osv.osv):
res_partner.write(cr, uid, partner_id, {'section_id': lead.section_id.id or False})
contact_id = res_partner.address_get(cr, uid, [partner_id])['default']
res = lead.write({'partner_id' : partner_id, 'partner_address_id': contact_id}, context=context)
self.case_partner_send_note(cr, uid, [lead.id], context)
self._lead_set_partner_send_note(cr, uid, [lead.id], context)
return res
def _lead_create_partner_address(self, cr, uid, lead, partner_id, context=None):
@@ -767,7 +745,7 @@ class crm_lead(crm_case, osv.osv):
if action == 'log':
phonecall.case_close(cr, uid, [new_id])
phonecall_dict[lead.id] = new_id
self.case_phonecall_send_note(cr, uid, [new_id], lead, phonecall, action, context=context)
self.schedule_phonecall_send_note(cr, uid, [new_id], lead, phonecall, action, context=context)
return phonecall_dict
+4 -9
View File
@@ -77,10 +77,6 @@
icon="gtk-go-forward" context="{'stage_type': 'lead'}" />
</group>
<field name="type" invisible="1"/>
<label colspan="6" string=""/>
<button string="Send New Email"
name="%(mail.action_email_compose_message_wizard)d"
icon="terp-mail-message-new" type="action"/>
</group>
<notebook colspan="4">
<page string="Lead">
@@ -279,7 +275,10 @@
<field name="company_currency"/>
</t>
</td>
<td valign="top" width="22"><img t-att-src="kanban_gravatar(record.user_email.value, 22)" class="oe_kanban_gravatar" t-att-title="record.user_id.value"/></td>
<td valign="top" width="22">
<img t-att-src="kanban_image('res.users', 'avatar_mini', record.user_id.raw_value[0])" t-att-title="record.user_id.value"
width="22" height="22" class="oe_kanban_gravatar"/>
</td>
</tr>
</table>
@@ -440,10 +439,6 @@
<field name="priority" string="Priority"/>
<newline/>
<field name="type" invisible="1"/>
<label colspan="6" string=""/>
<button string="Send New Email"
name="%(mail.action_email_compose_message_wizard)d"
icon="terp-mail-message-new" type="action"/>
</group>
<notebook colspan="4">
<page string="Opportunity">
+2 -2
View File
@@ -82,7 +82,7 @@ class crm_meeting(crm_base, osv.osv):
def create(self, cr, uid, vals, context=None):
obj_id = super(crm_meeting, self).create(cr, uid, vals, context=context)
self.case_create_send_note(cr, uid, [obj_id], context=context)
self.create_send_note(cr, uid, [obj_id], context=context)
return obj_id
def get_needaction_user_id(self, cr, uid, ids, name, arg, context=None):
@@ -93,7 +93,7 @@ class crm_meeting(crm_base, osv.osv):
result[obj.id] = obj.user_id.id
return result
def case_create_send_note(self, cr, uid, ids, context=None):
def create_send_note(self, cr, uid, ids, context=None):
lead_obj = self.pool.get('crm.lead')
phonecall_obj = self.pool.get('crm.phonecall')
for obj in self.browse(cr, uid, ids, context=context):
+5 -2
View File
@@ -91,6 +91,9 @@ class crm_phonecall(crm_base, osv.osv):
'active': 1,
}
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
return ''
def create(self, cr, uid, vals, context=None):
obj_id = super(crm_phonecall, self).create(cr, uid, vals, context)
for phonecall in self.browse(cr, uid, [obj_id], context=context):
@@ -137,7 +140,7 @@ class crm_phonecall(crm_base, osv.osv):
phonecall.message_append_note('' ,message)
return True
def case_partner_send_note(self, cr, uid, ids, context=None):
def set_partner_send_note(self, cr, uid, ids, context=None):
for phonecall in self.browse(cr, uid, ids, context=context):
message = _("Partner has been <b>created</b>")
phonecall.message_append_note('' ,message)
@@ -231,7 +234,7 @@ class crm_phonecall(crm_base, osv.osv):
def _call_set_partner(self, cr, uid, ids, partner_id, context=None):
self.write(cr, uid, ids, {'partner_id' : partner_id}, context=context)
self.case_partner_send_note(cr, uid, ids, context)
self.set_partner_send_note(cr, uid, ids, context)
def _call_create_partner_address(self, cr, uid, phonecall, partner_id, context=None):
address = self.pool.get('res.partner.address')
+4
View File
@@ -0,0 +1,4 @@
CRM kanban avatar specs
=======================
Kanban view of opportunities has been updated to use the newly-introduced avatar_mini field of res.users. The avatar is placed in the right-side of the containing kanban box.
+6
View File
@@ -0,0 +1,6 @@
:orphan:
CRM module documentation
========================
.. include:: index.rst.inc
+8
View File
@@ -0,0 +1,8 @@
CRM Module
''''''''''
.. toctree::
:maxdepth: 1
crm_kanban_avatar
+7 -7
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: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-02-15 20:06+0000\n"
"PO-Revision-Date: 2012-03-12 08:00+0000\n"
"Last-Translator: Carlos @ smile-iberia <Unknown>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-02-16 05:06+0000\n"
"X-Generator: Launchpad (build 14781)\n"
"X-Launchpad-Export-Date: 2012-03-13 05:08+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: crm_claim
#: field:crm.claim.report,nbr:0
@@ -254,7 +254,7 @@ msgstr "Acción siguiente"
#. module: crm_claim
#: view:crm.claim.report:0
msgid "My Sales Team(s)"
msgstr ""
msgstr "Mi(s) equipo(s) de ventas"
#. module: crm_claim
#: model:crm.case.stage,name:crm_claim.stage_claim3
@@ -475,7 +475,7 @@ msgstr "Junio"
#. module: crm_claim
#: view:res.partner:0
msgid "Partners Claim"
msgstr ""
msgstr "Reclamaciones de empresas"
#. module: crm_claim
#: field:crm.claim,partner_phone:0
@@ -490,7 +490,7 @@ msgstr "Usuario"
#. module: crm_claim
#: field:crm.claim,active:0
msgid "Active"
msgstr ""
msgstr "Activo"
#. module: crm_claim
#: selection:crm.claim.report,month:0
@@ -786,7 +786,7 @@ msgstr "ID"
#. module: crm_claim
#: constraint:res.partner:0
msgid "Error ! You cannot create recursive associated members."
msgstr ""
msgstr "¡Error! No puede crear miembros asociados recursivamente."
#. module: crm_claim
#: view:crm.claim:0
+1
View File
@@ -37,6 +37,7 @@ It defines a new kind of service products that offers you the possibility to cho
'depends': ['event','sale','sale_crm'],
'update_xml': [
'event_sale_view.xml',
'event_demo.xml',
],
'test':['test/confirm.yml'],
'installable': True,
+25
View File
@@ -0,0 +1,25 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="event_technical_training" model="event.event">
<field name="name">Technical training in Grand-Rosiere</field>
<field eval="(DateTime.now() + timedelta(15)).strftime('%Y-%m-%d 7:00:00')" name="date_begin"/>
<field eval="(DateTime.now() + timedelta(20)).strftime('%Y-%m-%d 16:00:00')" name="date_end"/>
<field name="type" ref="event.event_type_4"/>
<field name="user_id" ref="base.user_root"/>
</record>
<record id="event_product" model="product.product">
<field name="name">Technical Training</field>
<field name="event_ok">True</field>
<field name="event_type_id" ref="event.event_type_4"/>
<field name="categ_id" ref="product.cat1"/>
<field name="type">service</field>
<field name="list_price">2500.0</field>
<field name="standard_price">1000.0</field>
<field name="supply_method">produce</field>
<field name="uom_id" ref="product.product_uom_unit"/>
<field name="uom_po_id" ref="product.product_uom_unit"/>
</record>
</data>
</openerp>
+21
View File
@@ -0,0 +1,21 @@
# -*- 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/>.
#
##############################################################################
+40
View File
@@ -0,0 +1,40 @@
# -*- 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': 'Events Sales layout',
'version': '0.1',
'category': 'Tools',
'complexity': "easy",
'description': """
This module ensures the compatibility of the changes made on the sale.order.line form view in event_sale with the sale_layout module (that is replacing the whole field in the view by another one). Its installation is automatically triggered when both modules are installed.
""",
'author': 'OpenERP SA',
'depends': ['event_sale','sale_layout'],
'update_xml': [
'event_sale_layout.xml',
],
'installable': True,
'auto_install':True,
'category': 'Hidden',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -0,0 +1,18 @@
<openerp>
<data>
<record model="ir.ui.view" id="view_order_form_inherit_1">
<field name="name">event.sale.order</field>
<field name="model">sale.order</field>
<field name="type">form</field>
<field name="priority">10000</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="arch" type="xml">
<xpath expr="//field[@name='discount']" position="after">
<field name="event_id" colspan="3" domain="[('type', 'in', list(set((event_type_id,False))))]" attrs="{'invisible': [('event_ok', '=', False)],'required': [('event_ok', '!=', False)]}"/>
<field name="event_type_id" invisible='1'/>
<field name="event_ok" invisible='1'/>
</xpath>
</field>
</record>
</data>
</openerp>
+120
View File
@@ -0,0 +1,120 @@
# French translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-03-12 21:03+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: French <fr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-03-13 05:08+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: google_base_account
#: field:res.users,gmail_user:0
msgid "Username"
msgstr "Utilisateur"
#. module: google_base_account
#: model:ir.actions.act_window,name:google_base_account.act_google_login_form
msgid "Google Login"
msgstr ""
#. module: google_base_account
#: code:addons/google_base_account/wizard/google_login.py:29
#, python-format
msgid "Google Contacts Import Error!"
msgstr ""
#. module: google_base_account
#: view:res.users:0
msgid " Synchronization "
msgstr " Synchronisation "
#. module: google_base_account
#: sql_constraint:res.users:0
msgid "You can not have two users with the same login !"
msgstr "Vous ne pouvez pas avoir deux utilisateurs avec le même login !"
#. module: google_base_account
#: code:addons/google_base_account/wizard/google_login.py:75
#, python-format
msgid "Error"
msgstr "Erreur"
#. module: google_base_account
#: view:google.login:0
msgid "Google login"
msgstr "Login Google"
#. module: google_base_account
#: model:ir.model,name:google_base_account.model_res_users
msgid "res.users"
msgstr "res.users"
#. module: google_base_account
#: field:google.login,password:0
msgid "Google Password"
msgstr "Mot de passe Google"
#. module: google_base_account
#: view:google.login:0
msgid "_Cancel"
msgstr "Annuler"
#. module: google_base_account
#: view:res.users:0
msgid "Google Account"
msgstr "Compte Google"
#. module: google_base_account
#: field:google.login,user:0
msgid "Google Username"
msgstr ""
#. module: google_base_account
#: code:addons/google_base_account/wizard/google_login.py:29
#, python-format
msgid ""
"Please install gdata-python-client from http://code.google.com/p/gdata-"
"python-client/downloads/list"
msgstr ""
#. module: google_base_account
#: model:ir.model,name:google_base_account.model_google_login
msgid "Google Contact"
msgstr ""
#. module: google_base_account
#: view:google.login:0
msgid "_Login"
msgstr ""
#. module: google_base_account
#: constraint:res.users:0
msgid "The chosen company is not in the allowed companies for this user"
msgstr "La société choisie n'est pas autorisée pour cet utilisateur."
#. module: google_base_account
#: field:res.users,gmail_password:0
msgid "Password"
msgstr "Mot de passe"
#. module: google_base_account
#: code:addons/google_base_account/wizard/google_login.py:75
#, python-format
msgid "Authentication fail check the user and password !"
msgstr ""
"Echec de l'uthentification, vérifier l'utilisateur et le mot de passe!"
#. module: google_base_account
#: view:google.login:0
msgid "ex: user@gmail.com"
msgstr "ex: nom.prenom@gmail.com"
+8
View File
@@ -0,0 +1,8 @@
HR photo specs
==============
This revision modifies the photo for HR employees. Two fields now exist in the hr.employee model:
- photo, a binary field holding the image
- photo_mini, a binary field holding an automatically resized version of the avatar. Dimensions of the resized avatar are 180x150.
Employee photo should be used only when dealing with employees, using the photo_mini field. When dealing with users, use the res.users avatar_mini field instead.
+6
View File
@@ -0,0 +1,6 @@
:orphan:
HR module documentation
=======================
.. include:: index.rst.inc
+8
View File
@@ -0,0 +1,8 @@
HR Module
'''''''''
.. toctree::
:maxdepth: 1
hr_employee_img
+21 -17
View File
@@ -149,24 +149,28 @@ class hr_employee(osv.osv):
_description = "Employee"
_inherits = {'resource.resource': "resource_id"}
def onchange_photo_mini(self, cr, uid, ids, value, context=None):
return {'value': {'photo': value, 'photo_mini': self._photo_resize(cr, uid, value) } }
def _set_photo_mini(self, cr, uid, id, name, value, args, context=None):
return self.write(cr, uid, [id], {'photo': value}, context=context)
def _photo_resize(self, cr, uid, photo, context=None):
image_stream = io.BytesIO(photo.decode('base64'))
img = Image.open(image_stream)
img.thumbnail((180, 150), Image.ANTIALIAS)
img_stream = StringIO.StringIO()
img.save(img_stream, "JPEG")
return img_stream.getvalue().encode('base64')
def _get_photo_mini(self, cr, uid, ids, name, args, context=None):
result = {}
for obj in self.browse(cr, uid, ids, context=context):
if not obj.photo:
result[obj.id] = False
continue
image_stream = io.BytesIO(obj.photo.decode('base64'))
img = Image.open(image_stream)
img.thumbnail((180, 150), Image.ANTIALIAS)
img_stream = StringIO.StringIO()
img.save(img_stream, "JPEG")
result[obj.id] = img_stream.getvalue().encode('base64')
for hr_empl in self.browse(cr, uid, ids, context=context):
if not hr_empl.photo:
result[hr_empl.id] = False
else:
result[hr_empl.id] = self._photo_resize(cr, uid, hr_empl.photo, context=context)
return result
def _set_photo_mini(self, cr, uid, id, name, value, args, context=None):
self.write(cr, uid, [id], {'photo': value}, context=context)
return True
_columns = {
'country_id': fields.many2one('res.country', 'Nationality'),
@@ -244,11 +248,11 @@ class hr_employee(osv.osv):
def _get_photo(self, cr, uid, context=None):
photo_path = addons.get_module_resource('hr','images','photo.png')
return open(photo_path, 'rb').read().encode('base64')
return self._photo_resize(cr, uid, open(photo_path, 'rb').read().encode('base64'))
_defaults = {
'active': 1,
'photo': _get_photo,
'photo_mini': _get_photo,
'marital': 'single',
'color': 0,
}
+2 -2
View File
@@ -33,7 +33,7 @@
<field name="parent_id" />
</group>
<group colspan="2" col="1">
<field name="photo_mini" widget='image' nolabel="1"/>
<field name="photo_mini" widget='image' nolabel="1" on_change="onchange_photo_mini(photo_mini)"/>
</group>
</group>
<notebook colspan="6">
@@ -135,7 +135,7 @@
<t t-name="kanban-box">
<div class="oe_employee_vignette">
<div class="oe_employee_image">
<a type="edit"><img t-att-src="kanban_image('hr.employee', 'photo', record.id.value)" class="oe_employee_picture"/></a>
<a type="edit"><img t-att-src="kanban_image('hr.employee', 'photo_mini', record.id.value)" class="oe_employee_picture"/></a>
</div>
<div class="oe_employee_details">
<h4><a type="edit"><field name="name"/> (<field name="login"/>)</a></h4>
+17 -11
View File
@@ -358,12 +358,18 @@ class hr_holidays(osv.osv):
# OpenChatter and notifications
# -----------------------------
def get_needaction_user_id(self, cr, uid, ids, name, arg, context=None):
result = {}
def get_needaction_user_ids(self, cr, uid, ids, context=None):
result = dict.fromkeys(ids, [])
for obj in self.browse(cr, uid, ids, context=context):
result[obj.id] = False
if (obj.state == 'confirm' and obj.employee_id.parent_id):
result[obj.id] = obj.employee_id.parent_id.user_id.id
if obj.state == 'confirm' and obj.employee_id.parent_id:
result[obj.id] = [obj.employee_id.parent_id.user_id.id]
elif obj.state == 'validate1' or obj.state == 'validate':
# get group_hr_manager: everyone will be warned of second validation
res = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'group_hr_manager') or False
obj_id = res and res[1] or False
if obj_id:
hr_manager_group = self.pool.get('res.groups').read(cr, uid, [obj_id], ['users'], context=context)[0]
result[obj.id] = hr_manager_group['users']
return result
def message_get_subscribers(self, cr, uid, ids, context=None):
@@ -377,37 +383,37 @@ class hr_holidays(osv.osv):
def create_notificate(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids, context=context):
self.message_append_note(cr, uid, ids, _('System notification'),
_("The %s request has been created and is waiting confirmation")
_("The %s request has been <b>created</b> and is waiting confirmation")
% ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
return True
def holidays_confirm_notificate(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids):
self.message_append_note(cr, uid, [obj.id], _('System notification'),
_("The %s request has been confirmed and is waiting for validation by the manager.")
_("The %s request has been <b>confirmed</b> and is waiting for validation by the manager.")
% ('leave' if obj.type == 'remove' else 'allocation',), type='notification')
def holidays_validate_notificate(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids):
if obj.holiday_status_id.double_validation:
self.message_append_note(cr, uid, [obj.id], _('System notification'),
_("The %s request has been validated. A second validation is necessary and is now pending.")
_("The %s request has been <b>validated</b>. A second validation is necessary and is now pending.")
% ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
else:
self.message_append_note(cr, uid, [obj.id], _('System notification'),
_("The %s request has been validated. The validation process is now over.")
_("The %s request has been <b>validated</b>. The validation process is now over.")
% ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
def holidays_valid2_notificate(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids):
self.message_append_note(cr, uid, [obj.id], _('System notification'),
_("The %s request has been double validated. The validation process is now over.")
_("The %s request has been <b>double validated</b>. The validation process is now over.")
% ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
def holidays_refuse_notificate(self, cr, uid, ids, approval, context=None):
for obj in self.browse(cr, uid, ids):
self.message_append_note(cr, uid, [obj.id], _('System notification'),
_("The %s request has been refused. The validation process is now over.")
_("The %s request has been <b>refused</b>. The validation process is now over.")
% ('leave' if obj.type == 'remove' else 'allocation',), type='notification', context=context)
hr_holidays()
-3
View File
@@ -95,9 +95,6 @@
<button string="Approved" name="second_validate" states="validate1" type="workflow" icon="gtk-apply" groups="base.group_hr_user"/>
<button string="Set to Draft" name="set_to_draft" states="refuse,validate" type="object" icon="gtk-convert" groups="base.group_hr_user"/>
</group>
<separator string="Temporary Need Action" colspan="4"/>
<field name="need_action_user_id"/>
<newline/>
<field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/>
</page>
</notebook>
@@ -516,7 +516,7 @@ class hr_timesheet_line(osv.osv):
store={
'hr_timesheet_sheet.sheet': (_get_hr_timesheet_sheet, ['employee_id', 'date_from', 'date_to'], 10),
'account.analytic.line': (_get_account_analytic_line, ['user_id', 'date'], 10),
'hr.analytic.timesheet': (lambda self,cr,uid,ids,context=None: ids, ['line_id'], 10),
'hr.analytic.timesheet': (lambda self,cr,uid,ids,context=None: ids, None, 10),
},
),
}
@@ -69,6 +69,7 @@
- account_id: account.analytic_sednacom
date: !eval time.strftime('%Y-%m-%d')
name: 'Develop yaml for hr module'
user_id: base.user_qdp
unit_amount: 6.00
amount: -90.00
product_id: product.product_consultant
@@ -96,6 +97,7 @@
date: !eval time.strftime('%Y-%m-%d')
name: 'Develop yaml for hr module'
unit_amount: 2.00
user_id: base.user_qdp
amount: -90.00
product_id: product.product_consultant
general_account_id: account.a_expense
+5 -4
View File
@@ -61,7 +61,7 @@ class mail_thread(osv.osv):
'''
_name = 'mail.thread'
_description = 'Email Thread'
_inherit = ['res.needaction']
_inherit = ['base.needaction']
def _get_message_ids(self, cr, uid, ids, name, arg, context=None):
res = {}
@@ -73,7 +73,8 @@ class mail_thread(osv.osv):
# OpenSocial: message_ids_social is a dummy field that should not be used
_columns = {
'message_ids_social': fields.function(_get_message_ids, method=True,
type='one2many', obj='mail.message', string='Temp messages'),
type='one2many', obj='mail.message', string='Temp messages',
_fields_id = 'res_id'),
}
#------------------------------------------------------
@@ -144,8 +145,8 @@ class mail_thread(osv.osv):
# parse message to get requested users
user_to_push_ids += self.message_parse_users(cr, uid, [msg_id], vals['body_text'], context=context)
# push to need_action_user_id if set
if thread_obj.need_action_user_id and thread_obj.need_action_user_id.id not in user_to_push_ids:
user_to_push_ids.append(thread_obj.need_action_user_id.id)
#if thread_obj.need_action_user_id and thread_obj.need_action_user_id.id not in user_to_push_ids:
#user_to_push_ids.append(thread_obj.need_action_user_id.id)
# effectively push message to users
for id in user_to_push_ids:
+38
View File
@@ -0,0 +1,38 @@
# Slovenian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
"PO-Revision-Date: 2012-03-13 10:50+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Slovenian <sl@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-03-14 04:43+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: pad_project
#: constraint:project.task:0
msgid "Error ! Task end-date must be greater then task start-date"
msgstr ""
#. module: pad_project
#: model:ir.model,name:pad_project.model_project_task
msgid "Task"
msgstr ""
#. module: pad_project
#: view:project.task:0
msgid "Pad"
msgstr ""
#. module: pad_project
#: constraint:project.task:0
msgid "Error ! You cannot create recursive tasks."
msgstr ""
@@ -43,5 +43,4 @@
I test that the total of the attached invoice is correct
-
!assert {model: pos.order, id: pos_order_pos1, string: Invoice not correct}:
- bool(invoice_id)
- invoice_id.amount_total == (450*2 + 300*3*1.05)*0.95
- amount_total == (450*2 + 300*3*1.05)*0.95
+285
View File
@@ -0,0 +1,285 @@
# Gujarati translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
"PO-Revision-Date: 2012-03-12 15:08+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Gujarati <gu@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: 2012-03-13 05:08+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: product_margin
#: view:product.product:0
#: field:product.product,turnover:0
msgid "Turnover"
msgstr ""
#. module: product_margin
#: field:product.product,expected_margin_rate:0
msgid "Expected Margin (%)"
msgstr ""
#. module: product_margin
#: field:product.margin,from_date:0
msgid "From"
msgstr "તરફથી"
#. module: product_margin
#: help:product.product,sale_expected:0
msgid ""
"Sum of Multification of Sale Catalog price and quantity of Customer Invoices"
msgstr ""
#. module: product_margin
#: help:product.product,total_margin:0
msgid "Turnorder - Standard price"
msgstr ""
#. module: product_margin
#: field:product.margin,to_date:0
msgid "To"
msgstr "પ્રતિ"
#. module: product_margin
#: field:product.product,date_to:0
msgid "To Date"
msgstr ""
#. module: product_margin
#: field:product.product,date_from:0
msgid "From Date"
msgstr ""
#. module: product_margin
#: selection:product.margin,invoice_state:0
#: selection:product.product,invoice_state:0
msgid "Draft, Open and Paid"
msgstr ""
#. module: product_margin
#: field:product.product,purchase_avg_price:0
#: field:product.product,sale_avg_price:0
msgid "Avg. Unit Price"
msgstr ""
#. module: product_margin
#: model:ir.model,name:product_margin.model_product_product
msgid "Product"
msgstr ""
#. module: product_margin
#: view:product.product:0
msgid "Catalog Price"
msgstr ""
#. module: product_margin
#: selection:product.margin,invoice_state:0
#: selection:product.product,invoice_state:0
msgid "Paid"
msgstr ""
#. module: product_margin
#: help:product.product,sales_gap:0
msgid "Expected Sale - Turn Over"
msgstr ""
#. module: product_margin
#: field:product.product,sale_expected:0
msgid "Expected Sale"
msgstr ""
#. module: product_margin
#: view:product.product:0
msgid "Standard Price"
msgstr ""
#. module: product_margin
#: help:product.product,purchase_num_invoiced:0
msgid "Sum of Quantity in Supplier Invoices"
msgstr ""
#. module: product_margin
#: help:product.product,normal_cost:0
msgid "Sum of Multification of Cost price and quantity of Supplier Invoices"
msgstr ""
#. module: product_margin
#: help:product.product,expected_margin:0
msgid "Expected Sale - Normal Cost"
msgstr ""
#. module: product_margin
#: field:product.product,purchase_num_invoiced:0
#: field:product.product,sale_num_invoiced:0
msgid "# Invoiced"
msgstr ""
#. module: product_margin
#: view:product.product:0
#: field:product.product,total_cost:0
msgid "Total Cost"
msgstr ""
#. module: product_margin
#: field:product.product,expected_margin:0
msgid "Expected Margin"
msgstr ""
#. module: product_margin
#: view:product.product:0
msgid "#Purchased"
msgstr ""
#. module: product_margin
#: help:product.product,turnover:0
msgid ""
"Sum of Multification of Invoice price and quantity of Customer Invoices"
msgstr ""
#. module: product_margin
#: help:product.product,expected_margin_rate:0
msgid "Expected margin * 100 / Expected Sale"
msgstr ""
#. module: product_margin
#: help:product.product,sale_avg_price:0
msgid "Avg. Price in Customer Invoices)"
msgstr ""
#. module: product_margin
#: help:product.product,total_cost:0
msgid ""
"Sum of Multification of Invoice price and quantity of Supplier Invoices "
msgstr ""
#. module: product_margin
#: field:product.margin,invoice_state:0
#: field:product.product,invoice_state:0
msgid "Invoice State"
msgstr ""
#. module: product_margin
#: help:product.product,purchase_gap:0
msgid "Normal Cost - Total Cost"
msgstr ""
#. module: product_margin
#: field:product.product,total_margin:0
msgid "Total Margin"
msgstr ""
#. module: product_margin
#: view:product.product:0
#: field:product.product,sales_gap:0
msgid "Sales Gap"
msgstr ""
#. module: product_margin
#: field:product.product,normal_cost:0
msgid "Normal Cost"
msgstr ""
#. module: product_margin
#: view:product.product:0
msgid "Purchases"
msgstr "ખરીદીઓ"
#. module: product_margin
#: help:product.product,purchase_avg_price:0
msgid "Avg. Price in Supplier Invoices "
msgstr ""
#. module: product_margin
#: view:product.margin:0
msgid "Properties categories"
msgstr ""
#. module: product_margin
#: help:product.product,total_margin_rate:0
msgid "Total margin * 100 / Turnover"
msgstr ""
#. module: product_margin
#: view:product.product:0
msgid "Analysis Criteria"
msgstr ""
#. module: product_margin
#: selection:product.margin,invoice_state:0
#: selection:product.product,invoice_state:0
msgid "Open and Paid"
msgstr ""
#. module: product_margin
#: view:product.product:0
msgid "Sales"
msgstr "વેચાણ"
#. module: product_margin
#: code:addons/product_margin/wizard/product_margin.py:73
#: model:ir.actions.act_window,name:product_margin.product_margin_act_window
#: model:ir.ui.menu,name:product_margin.menu_action_product_margin
#: view:product.product:0
#, python-format
msgid "Product Margins"
msgstr ""
#. module: product_margin
#: view:product.margin:0
msgid "General Information"
msgstr ""
#. module: product_margin
#: constraint:product.product:0
msgid "Error: Invalid ean code"
msgstr ""
#. module: product_margin
#: field:product.product,purchase_gap:0
msgid "Purchase Gap"
msgstr ""
#. module: product_margin
#: field:product.product,total_margin_rate:0
msgid "Total Margin (%)"
msgstr ""
#. module: product_margin
#: view:product.margin:0
msgid "Open Margins"
msgstr ""
#. module: product_margin
#: view:product.margin:0
msgid "Cancel"
msgstr "રદ કરો"
#. module: product_margin
#: view:product.product:0
msgid "Margins"
msgstr ""
#. module: product_margin
#: help:product.product,sale_num_invoiced:0
msgid "Sum of Quantity in Customer Invoices"
msgstr ""
#. module: product_margin
#: model:ir.model,name:product_margin.model_product_margin
msgid "Product Margin"
msgstr ""
#~ msgid "Reporting"
#~ msgstr "અહેવાલીકરણ"
#~ msgid "Invalid XML for View Architecture!"
#~ msgstr "દ્રશ્ય બંધારણ માટે અમાન્ય એક્સ.એમ.એલ!"
-3
View File
@@ -67,9 +67,6 @@ Dashboard for project members that includes:
'test/project_process.yml',
'test/task_process.yml',
],
'css': [
'static/src/css/project_task.css',
],
'installable': True,
'auto_install': False,
'application': True,
+6
View File
@@ -0,0 +1,6 @@
:orphan:
Project module documentation
============================
.. include:: index.rst.inc
+8
View File
@@ -0,0 +1,8 @@
Project Module
''''''''''''''
.. toctree::
:maxdepth: 1
task_kanban_avatar
@@ -0,0 +1,4 @@
Task kanban avatar specs
========================
Kanban view of tasks has been updated to use the newly-introduced avatar_mini field of res.users. The avatar is placed in the right-side of the containing kanban box.
+38 -39
View File
@@ -346,46 +346,45 @@
<t t-if="record.kanban_state.raw_value === 'done'" t-set="border">oe_kanban_color_green</t>
<div t-attf-class="#{kanban_color(record.color.raw_value)} #{border || ''}">
<div class="oe_kanban_box oe_kanban_color_border">
<div class="oe_proj_task_avatar_box">
<img t-att-src="kanban_image('res.users', 'avatar_mini', record.user_id.raw_value[0])" class="oe_kanban_avatar" t-att-title="record.user_id.value"/>
</div>
<div class="oe_proj_task_content_box">
<table class="oe_kanban_table oe_kanban_box_header oe_kanban_color_bgdark oe_kanban_color_border oe_kanban_draghandle">
<tr>
<td align="left" valign="middle" width="16">
<a t-if="record.priority.raw_value == 1" icon="star-on" type="object" name="set_normal_priority"/>
<a t-if="record.priority.raw_value != 1" icon="star-off" type="object" name="set_high_priority" style="opacity:0.6; filter:alpha(opacity=60);"/>
</td>
<td align="left" valign="middle" class="oe_kanban_title" tooltip="task_details">
<field name="name"/>
</td>
</tr>
</table>
<div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger">
<div class="oe_kanban_description">
<t t-esc="kanban_text_ellipsis(record.description.value, 160)"/>
<i t-if="record.date_deadline.raw_value">
<t t-if="record.description.raw_value">, </t>
<field name="date_deadline"/>
</i>
<span class="oe_kanban_project_times" style="white-space: nowrap; padding-left: 5px;">
<t t-set="hours" t-value="record.remaining_hours.raw_value"/>
<t t-set="times" t-value="[
[1, (hours gte 1 and hours lt 2)]
,[2, (hours gte 2 and hours lt 5)]
,[5, (hours gte 5 and hours lt 10)]
,[10, (hours gte 10)]
]"/>
<t t-foreach="times" t-as="time"
><a t-if="!time[1]" t-attf-data-name="set_remaining_time_#{time[0]}"
type="object" class="oe_kanban_button"><t t-esc="time[0]"/></a
><b t-if="time[1]" class="oe_kanban_button oe_kanban_button_active"><t t-esc="Math.round(hours)"/></b
></t>
<a name="do_open" states="draft" string="Validate planned time and open task" type="object" class="oe_kanban_button oe_kanban_button_active">!</a>
</span>
</div>
<div class="oe_kanban_clear"/>
<table class="oe_kanban_table oe_kanban_box_header oe_kanban_color_bgdark oe_kanban_color_border oe_kanban_draghandle">
<tr>
<td align="left" valign="middle" width="16">
<a t-if="record.priority.raw_value == 1" icon="star-on" type="object" name="set_normal_priority"/>
<a t-if="record.priority.raw_value != 1" icon="star-off" type="object" name="set_high_priority" style="opacity:0.6; filter:alpha(opacity=60);"/>
</td>
<td align="left" valign="middle" class="oe_kanban_title" tooltip="task_details">
<field name="name"/>
</td>
<td valign="top" width="22">
<img t-att-src="kanban_image('res.users', 'avatar_mini', record.user_id.raw_value[0])" t-att-title="record.user_id.value"
width="22" height="22" class="oe_kanban_gravatar"/>
</td>
</tr>
</table>
<div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger">
<div class="oe_kanban_description">
<t t-esc="kanban_text_ellipsis(record.description.value, 160)"/>
<i t-if="record.date_deadline.raw_value">
<t t-if="record.description.raw_value">, </t>
<field name="date_deadline"/>
</i>
<span class="oe_kanban_project_times" style="white-space: nowrap; padding-left: 5px;">
<t t-set="hours" t-value="record.remaining_hours.raw_value"/>
<t t-set="times" t-value="[
[1, (hours gte 1 and hours lt 2)]
,[2, (hours gte 2 and hours lt 5)]
,[5, (hours gte 5 and hours lt 10)]
,[10, (hours gte 10)]
]"/>
<t t-foreach="times" t-as="time"
><a t-if="!time[1]" t-attf-data-name="set_remaining_time_#{time[0]}"
type="object" class="oe_kanban_button"><t t-esc="time[0]"/></a
><b t-if="time[1]" class="oe_kanban_button oe_kanban_button_active"><t t-esc="Math.round(hours)"/></b
></t>
<a name="do_open" states="draft" string="Validate planned time and open task" type="object" class="oe_kanban_button oe_kanban_button_active">!</a>
</span>
</div>
<div class="oe_kanban_clear"/>
</div>
<div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick">
<div class="oe_kanban_left">
@@ -1,21 +0,0 @@
.openerp .oe_proj_task_content_box {
margin-right: 41px;
}
.openerp .oe_proj_task_avatar_box {
float: right;
width: 40px;
}
.openerp .oe_kanban_avatar {
display: block;
width: 40px;
height: auto;
clip: rect(5px, 40px, 45px, 0px);
}
.openerp .oe_kanban_avatar_wide {
height: 40px;
width: auto;
clip: rect(0px, 45px, 40px, 05px);
}
+127
View File
@@ -0,0 +1,127 @@
# Gujarati translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
"PO-Revision-Date: 2012-03-12 15:08+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Gujarati <gu@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: 2012-03-13 05:08+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: project_mrp
#: sql_constraint:sale.order:0
msgid "Order Reference must be unique per Company!"
msgstr ""
#. module: project_mrp
#: model:process.node,note:project_mrp.process_node_procuretasktask0
msgid "For each product, on type service and on order"
msgstr ""
#. module: project_mrp
#: model:process.transition,name:project_mrp.process_transition_procuretask0
msgid "Procurement Task"
msgstr ""
#. module: project_mrp
#: model:ir.model,name:project_mrp.model_sale_order
msgid "Sales Order"
msgstr ""
#. module: project_mrp
#: field:procurement.order,sale_line_id:0
msgid "Sale order line"
msgstr ""
#. module: project_mrp
#: model:process.transition,note:project_mrp.process_transition_createtask0
msgid "Product type is service, then its creates the task."
msgstr ""
#. module: project_mrp
#: model:process.transition,note:project_mrp.process_transition_procuretask0
msgid "if product type is 'service' then it creates the task."
msgstr ""
#. module: project_mrp
#: constraint:project.task:0
msgid "Error ! Task end-date must be greater then task start-date"
msgstr ""
#. module: project_mrp
#: model:process.node,name:project_mrp.process_node_saleordertask0
msgid "Sale Order Task"
msgstr ""
#. module: project_mrp
#: model:ir.model,name:project_mrp.model_product_product
msgid "Product"
msgstr ""
#. module: project_mrp
#: constraint:product.product:0
msgid "Error: Invalid ean code"
msgstr ""
#. module: project_mrp
#: field:product.product,project_id:0
msgid "Project"
msgstr ""
#. module: project_mrp
#: model:ir.model,name:project_mrp.model_procurement_order
#: field:project.task,procurement_id:0
msgid "Procurement"
msgstr ""
#. module: project_mrp
#: model:ir.model,name:project_mrp.model_project_task
#: model:process.node,name:project_mrp.process_node_mrptask0
#: model:process.node,name:project_mrp.process_node_procuretasktask0
#: field:procurement.order,task_id:0
msgid "Task"
msgstr "કાર્ય"
#. module: project_mrp
#: model:process.node,note:project_mrp.process_node_mrptask0
msgid "A task is created to provide the service."
msgstr ""
#. module: project_mrp
#: model:process.transition,name:project_mrp.process_transition_ordertask0
msgid "Order Task"
msgstr ""
#. module: project_mrp
#: constraint:project.task:0
msgid "Error ! You cannot create recursive tasks."
msgstr ""
#. module: project_mrp
#: model:process.transition,name:project_mrp.process_transition_createtask0
msgid "Create Task"
msgstr ""
#. module: project_mrp
#: model:process.transition,note:project_mrp.process_transition_ordertask0
msgid "If procurement method is Make to order and supply method is produce"
msgstr ""
#. module: project_mrp
#: model:process.node,note:project_mrp.process_node_saleordertask0
msgid "In case you sell services on sale order"
msgstr ""
#. module: project_mrp
#: field:project.task,sale_line_id:0
msgid "Sale Order Line"
msgstr ""
+6 -6
View File
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:37+0000\n"
"PO-Revision-Date: 2011-11-25 14:47+0000\n"
"Last-Translator: lholivier <olivier.lenoir@free.fr>\n"
"PO-Revision-Date: 2012-03-12 08:37+0000\n"
"Last-Translator: Numérigraphe <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-02-09 06:06+0000\n"
"X-Generator: Launchpad (build 14763)\n"
"X-Launchpad-Export-Date: 2012-03-13 05:08+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: project_scrum
#: view:project.scrum.backlog.assign.sprint:0
@@ -549,7 +549,7 @@ msgstr "Mois"
#. module: project_scrum
#: view:project.scrum.product.backlog:0
msgid "Draft Backlogs"
msgstr "Retards Brouillon"
msgstr "Arriérés brouillons"
#. module: project_scrum
#: field:project.scrum.meeting,question_blocks:0
@@ -798,7 +798,7 @@ msgstr "Informations"
#: code:addons/project_scrum/wizard/project_scrum_backlog_sprint.py:57
#, python-format
msgid "Product Backlog '%s' is converted into Task %d."
msgstr ""
msgstr "L'arriéré sur le produit '%s' a été converti en la tâche %d."
#. module: project_scrum
#: view:project.scrum.product.backlog:0
+2 -2
View File
@@ -246,7 +246,7 @@
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="product_uom_qty">15</field>
<field name="price_unit">250</field>
<field name="type">make_to_order</field>
<field name="type">make_to_stock</field>
<field name="delay">15</field>
</record>
<record id="order7_line1" model="sale.order.line">
@@ -256,7 +256,7 @@
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="product_uom_qty">5</field>
<field name="price_unit">500</field>
<field name="type">make_to_order</field>
<field name="type">make_to_stock</field>
<field name="delay">15</field>
</record>
+6 -6
View File
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
"PO-Revision-Date: 2012-03-05 14:29+0000\n"
"Last-Translator: gde (OpenERP) <Unknown>\n"
"PO-Revision-Date: 2012-03-12 08:35+0000\n"
"Last-Translator: Numérigraphe <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-03-06 04:48+0000\n"
"X-Generator: Launchpad (build 14900)\n"
"X-Launchpad-Export-Date: 2012-03-13 05:07+0000\n"
"X-Generator: Launchpad (build 14933)\n"
#. module: stock
#: field:stock.inventory.line,product_uom:0
@@ -105,7 +105,7 @@ msgstr "Mouvements du produit"
#. module: stock
#: model:ir.ui.menu,name:stock.menu_stock_uom_categ_form_action
msgid "UoM Categories"
msgstr ""
msgstr "Catégories des UdM"
#. module: stock
#: model:ir.actions.act_window,name:stock.action_stock_move_report
@@ -1231,7 +1231,7 @@ msgstr "Mars"
#: model:ir.model,name:stock.model_stock_inventory_line_split
#: view:stock.inventory:0 view:stock.inventory.line:0
msgid "Split inventory lines"
msgstr "Eclater les lignes d'inventaire"
msgstr "Diviser les lignes d'inventaire"
#. module: stock
#: view:stock.inventory:0