diff --git a/addons/account/account.py b/addons/account/account.py
index bf072507aa0..46cfaf645a8 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -155,6 +155,7 @@ class account_account_type(osv.osv):
return res
def _save_report_type(self, cr, uid, account_type_id, field_name, field_value, arg, context=None):
+ field_value = field_value or 'none'
obj_data = self.pool.get('ir.model.data')
obj_financial_report = self.pool.get('account.financial.report')
#unlink if it exists somewhere in the financial reports related to BS or PL
@@ -299,7 +300,6 @@ class account_account(osv.osv):
if aml_query.strip():
wheres.append(aml_query.strip())
filters = " AND ".join(wheres)
- _logger.debug('Filters: %s',(filters))
# IN might not work ideally in case there are too many
# children_and_consolidated, in that case join on a
# values() e.g.:
@@ -315,7 +315,6 @@ class account_account(osv.osv):
" GROUP BY l.account_id")
params = (tuple(children_and_consolidated),) + query_params
cr.execute(request, params)
- _logger.debug('Status: %s',(cr.statusmessage))
for row in cr.dictfetchall():
accounts[row['id']] = row
@@ -596,10 +595,7 @@ class account_account(osv.osv):
return res
def copy(self, cr, uid, id, default=None, context=None, done_list=None, local=False):
- if default is None:
- default = {}
- else:
- default = default.copy()
+ default = {} if default is None else default.copy()
if done_list is None:
done_list = []
account = self.browse(cr, uid, id, context=context)
@@ -781,10 +777,7 @@ class account_journal(osv.osv):
]
def copy(self, cr, uid, id, default=None, context=None, done_list=None, local=False):
- if default is None:
- default = {}
- else:
- default = default.copy()
+ default = {} if default is None else default.copy()
if done_list is None:
done_list = []
journal = self.browse(cr, uid, id, context=context)
@@ -1185,6 +1178,7 @@ class account_fiscalyear(osv.osv):
}
def copy(self, cr, uid, id, default=None, context=None):
+ default = {} if default is None else default.copy()
default.update({
'period_ids': [],
'end_journal_period_id': False
@@ -1444,14 +1438,8 @@ class account_move(osv.osv):
return result
def copy(self, cr, uid, id, default=None, context=None):
- if context is None:
- default = {}
- else:
- default = default.copy()
- if context is None:
- context = {}
- else:
- context = context.copy()
+ default = {} if default is None else default.copy()
+ context = {} if context is None else context.copy()
default.update({
'state':'draft',
'name':'/',
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index 8b2a9aff257..549363ce269 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -461,9 +461,10 @@ class account_bank_statement(osv.osv):
return {}
balance_start = self._compute_balance_end_real(cr, uid, journal_id, context=context)
- journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['company_id'], context=context)
+ journal_data = self.pool.get('account.journal').read(cr, uid, journal_id, ['company_id', 'currency'], context=context)
company_id = journal_data['company_id']
- return {'value': {'balance_start': balance_start, 'company_id': company_id}}
+ currency_id = journal_data['currency'] or self.pool.get('res.company').browse(cr, uid, company_id[0], context=context).currency_id.id
+ return {'value': {'balance_start': balance_start, 'company_id': company_id, 'currency': currency_id}}
def unlink(self, cr, uid, ids, context=None):
stat = self.read(cr, uid, ids, ['state'], context=context)
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 3c2922ff141..8516fcd96ae 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -211,17 +211,17 @@
@@ -2629,12 +2626,12 @@ action = pool.get('res.config').next(cr, uid, [], context)
-
-
-
+
+
+
-
+
diff --git a/addons/account/product_view.xml b/addons/account/product_view.xml
index 5f417825032..4d64af3e154 100644
--- a/addons/account/product_view.xml
+++ b/addons/account/product_view.xml
@@ -14,8 +14,8 @@
-
-
+
+
diff --git a/addons/account/project/report/analytic_balance.rml b/addons/account/project/report/analytic_balance.rml
index 0c488eac400..1754988f7d6 100644
--- a/addons/account/project/report/analytic_balance.rml
+++ b/addons/account/project/report/analytic_balance.rml
@@ -163,7 +163,7 @@
[[ formatLang(sum_all(get_objects(data['form']['empty_acc']),data['form']['date1'],data['form']['date2'],'credit')) ]]
- [[ formatLang(sum_balance(get_objects(data['form']['empty_acc']),data['form']['date1'],data['form']['date2'])) ]] [[ company.currency_id.symbol]]
+ [[ formatLang(sum_balance(get_objects(data['form']['empty_acc']),data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id)]]
[[ formatLang(sum_all(get_objects(data['form']['empty_acc']),data['form']['date1'],data['form']['date2'],'quantity')) ]]
@@ -187,7 +187,7 @@
[[ formatLang(move_sum(o['id'],data['form']['date1'],data['form']['date2'],'credit')) ]]
- [[ formatLang(move_sum_balance(o['id'],data['form']['date1'],data['form']['date2'])) ]] [[ company.currency_id.symbol]]
+ [[ formatLang(move_sum_balance(o['id'],data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id)]]
[[ formatLang(move_sum(o['id'],data['form']['date1'],data['form']['date2'],'quantity')) ]]
@@ -211,7 +211,7 @@
[[ formatLang(move_g['credit']) ]]
- [[ formatLang(move_g['balance'])]] [[ company.currency_id.symbol ]]
+ [[ formatLang(move_g['balance'], currency_obj = company.currency_id) ]]
[[ formatLang(move_g['quantity']) ]]
diff --git a/addons/account/project/report/cost_ledger.rml b/addons/account/project/report/cost_ledger.rml
index 7500b655ab3..1099a8b8b4e 100644
--- a/addons/account/project/report/cost_ledger.rml
+++ b/addons/account/project/report/cost_ledger.rml
@@ -224,7 +224,7 @@
[[ formatLang (sum_credit(objects,data['form']['date1'],data['form']['date2'])) ]]
- [[ formatLang (sum_balance(objects,data['form']['date1'],data['form']['date2'])) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang (sum_balance(objects,data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id) ]]
@@ -245,7 +245,7 @@
[[ formatLang (account_sum_credit(account,data['form']['date1'],data['form']['date2'])) ]]
- [[ formatLang (account_sum_balance(account,data['form']['date1'],data['form']['date2']))]] [[ company.currency_id.symbol ]]
+ [[ formatLang (account_sum_balance(account,data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id) ]]
@@ -266,7 +266,7 @@
[[ formatLang( move_g['credit']) ]]
- [[ formatLang( move_g['balance']) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang( move_g['balance'], currency_obj = company.currency_id) ]]
@@ -290,7 +290,7 @@
[[ formatLang( move_a['credit']) ]]
- [[ formatLang( move_a['balance']) ]] [[ company.currency_id.symbol]]
+ [[ formatLang( move_a['balance'], currency_obj = company.currency_id)]]
diff --git a/addons/account/project/report/inverted_analytic_balance.rml b/addons/account/project/report/inverted_analytic_balance.rml
index f112ec8fbd3..54b6878c407 100644
--- a/addons/account/project/report/inverted_analytic_balance.rml
+++ b/addons/account/project/report/inverted_analytic_balance.rml
@@ -164,7 +164,7 @@
[[ formatLang(sum_credit(objects,data['form']['date1'],data['form']['date2']))]]
- [[ formatLang(sum_balance(objects,data['form']['date1'],data['form']['date2']))]] [[ company.currency_id.symbol]]
+ [[ formatLang(sum_balance(objects,data['form']['date1'],data['form']['date2']), currency_obj = company.currency_id)]]
[[ formatLang(sum_quantity(objects,data['form']['date1'],data['form']['date2'])) ]]
@@ -188,7 +188,7 @@
[[formatLang(move_g['credit'])]]
- [[ formatLang(move_g['balance'])]] [[ company.currency_id.symbol]]
+ [[ formatLang(move_g['balance'], currency_obj = company.currency_id)]]
[[formatLang(move_g['quantity']) ]]
@@ -212,7 +212,7 @@
[[ formatLang(move_a['credit']) ]]
- [[ formatLang(move_a['balance']) ]] [[ company.currency_id.symbol]]
+ [[ formatLang(move_a['balance'], currency_obj = company.currency_id)]]
[[ formatLang(move_a['quantity']) ]]
diff --git a/addons/account/report/account_analytic_entries_report_view.xml b/addons/account/report/account_analytic_entries_report_view.xml
index 8963ba97376..8a421e3cb36 100644
--- a/addons/account/report/account_analytic_entries_report_view.xml
+++ b/addons/account/report/account_analytic_entries_report_view.xml
@@ -5,7 +5,7 @@
analytic.entries.report.tree
analytic.entries.report
-
+
diff --git a/addons/account/report/account_entries_report_view.xml b/addons/account/report/account_entries_report_view.xml
index 667c61ab78f..551265252cc 100644
--- a/addons/account/report/account_entries_report_view.xml
+++ b/addons/account/report/account_entries_report_view.xml
@@ -5,7 +5,7 @@
account.entries.report.tree
account.entries.report
-
+
diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml
index c22d5d55f45..13a137e53df 100644
--- a/addons/account/report/account_invoice_report_view.xml
+++ b/addons/account/report/account_invoice_report_view.xml
@@ -5,7 +5,7 @@
account.invoice.report.tree
account.invoice.report
-
+
diff --git a/addons/account/report/account_print_overdue.py b/addons/account/report/account_print_overdue.py
index 1b617e9afa4..4ddedc102f5 100644
--- a/addons/account/report/account_print_overdue.py
+++ b/addons/account/report/account_print_overdue.py
@@ -29,34 +29,11 @@ class Overdue(report_sxw.rml_parse):
super(Overdue, self).__init__(cr, uid, name, context=context)
self.localcontext.update( {
'time': time,
- 'adr_get': self._adr_get,
'getLines': self._lines_get,
'tel_get': self._tel_get,
'message': self._message,
})
self.context = context
- def _adr_get(self, partner, type):
- res = []
- res_partner = pooler.get_pool(self.cr.dbname).get('res.partner')
- addresses = res_partner.address_get(self.cr, self.uid, [partner.id], [type])
- adr_id = addresses and addresses[type] or False
- result = {
- 'name': False,
- 'street': False,
- 'street2': False,
- 'city': False,
- 'zip': False,
- 'state_id':False,
- 'country_id': False,
- }
- if adr_id:
- result = res_partner.read(self.cr, self.uid, [adr_id], context=self.context.copy())
- result[0]['country_id'] = result[0]['country_id'] and result[0]['country_id'][1] or False
- result[0]['state_id'] = result[0]['state_id'] and result[0]['state_id'][1] or False
- return result
-
- res.append(result)
- return res
def _tel_get(self,partner):
if not partner:
diff --git a/addons/account/report/account_print_overdue.rml b/addons/account/report/account_print_overdue.rml
index 2d4238823da..577cb9142a2 100644
--- a/addons/account/report/account_print_overdue.rml
+++ b/addons/account/report/account_print_overdue.rml
@@ -126,15 +126,10 @@
- [[ repeatIn(adr_get(o, 'invoice'),'addr') ]]
[[ o.title.name or '' ]] [[ o.name ]]
- [[ addr['street'] ]]
- [[ addr['street2'] or removeParentNode('para') ]]
- [[ addr['zip'] ]] [[ addr['city'] ]]
- [[ addr['state_id'] or removeParentNode('para')]]
- [[ addr['country_id'] ]]
+ [[ display_address(o.partner_id)] ]]
@@ -216,7 +211,7 @@
[[ (line['account_id']['type'] == 'receivable' and formatLang(line['credit']) or 0) or (line['account_id']['type'] == 'payable' and formatLang(line['debit'] * -1) or 0) ]]
- [[ time.strftime('%Y-%m-%d') > formatLang((line['date_maturity'])) and formatLang(line['debit'] - line['credit']) ]] [[ company.currency_id.symbol ]]
+ [[ time.strftime('%Y-%m-%d') > formatLang((line['date_maturity'])) and formatLang(line['debit'] - line['credit'], currency_obj = company.currency_id) ]]
[[ line['blocked'] and 'X' or '' ]]
@@ -241,7 +236,7 @@
[[ formatLang((reduce(lambda x, y: x + ((y['account_id']['type'] == 'receivable' and y['credit'] or 0) or (y['account_id']['type'] == 'payable' and y['debit'] * -1 or 0)), getLines(o), 0))) ]]
- [[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] < time.strftime('%Y-%m-%d'), getLines(o)), 0))) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] < time.strftime('%Y-%m-%d'), getLines(o)), 0)), currency_obj=company.currency_id) ]]
@@ -261,7 +256,7 @@
Balance :
- [[ formatLang((reduce(lambda x, y: x +(y['debit'] - y['credit']), getLines(o), 0))) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang((reduce(lambda x, y: x +(y['debit'] - y['credit']), getLines(o), 0)), currency_obj = company.currency_id) ]]
diff --git a/addons/account/report/account_treasury_report_view.xml b/addons/account/report/account_treasury_report_view.xml
index ee21b9e5ec6..be6ae0dfdc9 100644
--- a/addons/account/report/account_treasury_report_view.xml
+++ b/addons/account/report/account_treasury_report_view.xml
@@ -5,7 +5,7 @@
account.treasury.report.tree
account.treasury.report
-
+
diff --git a/addons/account_analytic_default/i18n/hu.po b/addons/account_analytic_default/i18n/hu.po
index 557aa2e66f5..8b863f51679 100644
--- a/addons/account_analytic_default/i18n/hu.po
+++ b/addons/account_analytic_default/i18n/hu.po
@@ -7,15 +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:35+0000\n"
-"PO-Revision-Date: 2011-02-01 18:11+0000\n"
-"Last-Translator: NOVOTRADE RENDSZERHÁZ ( novotrade.hu ) "
-"\n"
+"PO-Revision-Date: 2012-10-09 13:58+0000\n"
+"Last-Translator: krnkris \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-08-28 06:22+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-10 04:44+0000\n"
+"X-Generator: Launchpad (build 16112)\n"
#. module: account_analytic_default
#: help:account.analytic.default,partner_id:0
@@ -134,12 +133,14 @@ msgstr "Gyűjtőkód alapértelmezések"
#. module: account_analytic_default
#: sql_constraint:stock.picking:0
msgid "Reference must be unique per Company!"
-msgstr ""
+msgstr "Minden vállalkozáshoz egyedi hivatkozás kell!"
#. module: account_analytic_default
#: view:account.analytic.default:0
msgid "Analytical defaults whose end date is greater than today or None"
msgstr ""
+"A mai napnál későbbi lejáratú vagy nem létező dátumú elemzések "
+"alapértelmezései"
#. module: account_analytic_default
#: help:account.analytic.default,product_id:0
diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml
index 3fab306863c..520ee733e73 100644
--- a/addons/account_asset/account_asset_view.xml
+++ b/addons/account_asset/account_asset_view.xml
@@ -106,27 +106,27 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/addons/account_asset/report/account_asset_report_view.xml b/addons/account_asset/report/account_asset_report_view.xml
index bc598011086..4865196c4a8 100644
--- a/addons/account_asset/report/account_asset_report_view.xml
+++ b/addons/account_asset/report/account_asset_report_view.xml
@@ -6,7 +6,7 @@
asset.asset.report.tree
asset.asset.report
-
+
diff --git a/addons/account_budget/i18n/hu.po b/addons/account_budget/i18n/hu.po
index c48392c7c8a..35df6ac7dc9 100644
--- a/addons/account_budget/i18n/hu.po
+++ b/addons/account_budget/i18n/hu.po
@@ -7,15 +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:35+0000\n"
-"PO-Revision-Date: 2011-01-30 16:38+0000\n"
-"Last-Translator: NOVOTRADE RENDSZERHÁZ ( novotrade.hu ) "
-"\n"
+"PO-Revision-Date: 2012-10-09 13:49+0000\n"
+"Last-Translator: krnkris \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-08-28 06:27+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-10 04:44+0000\n"
+"X-Generator: Launchpad (build 16112)\n"
#. module: account_budget
#: field:crossovered.budget,creating_user_id:0
@@ -105,6 +104,7 @@ msgid "Percentage"
msgstr "Százalék"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:crossovered.budget.report:0
msgid "to"
msgstr "-"
@@ -138,21 +138,24 @@ msgstr ""
#: code:addons/account_budget/account_budget.py:119
#, python-format
msgid "The Budget '%s' has no accounts!"
-msgstr ""
+msgstr "A '%s' költségvetésnek nincs számlaszáma!"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "%"
msgstr "%"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Description"
msgstr "Leírás"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:crossovered.budget.report:0
msgid "Currency"
msgstr "Pénznem"
@@ -187,6 +190,7 @@ msgid "Planned Amount"
msgstr "Tervezett összeg"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Perc(%)"
@@ -199,6 +203,7 @@ msgid "Done"
msgstr "Kész"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Practical Amt"
@@ -259,7 +264,7 @@ msgstr "Üzleti terv"
#. module: account_budget
#: view:crossovered.budget:0
msgid "To Approve Budgets"
-msgstr ""
+msgstr "Költségvetés jóváhagyása"
#. module: account_budget
#: code:addons/account_budget/account_budget.py:119
@@ -333,6 +338,7 @@ msgid "Account Budget crossvered summary report"
msgstr "Üzleti terv összesítő kimutatás"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Theoretical Amt"
@@ -359,9 +365,10 @@ msgstr "Nyomtatás"
#: view:crossovered.budget:0
#: field:crossovered.budget.lines,theoritical_amount:0
msgid "Theoretical Amount"
-msgstr ""
+msgstr "Elméleti mennyiség"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: field:crossovered.budget.lines,analytic_account_id:0
#: model:ir.model,name:account_budget.model_account_analytic_account
msgid "Analytic Account"
@@ -373,6 +380,7 @@ msgid "Budget :"
msgstr "Üzleti terv :"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Planned Amt"
@@ -413,6 +421,7 @@ msgid "Error! You can not create recursive analytic accounts."
msgstr "Hiba! Nem hozhat létre rekurzív gyűjtőkódokat."
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Analysis from"
@@ -421,7 +430,7 @@ msgstr "Elemzési időszak"
#. module: account_budget
#: view:crossovered.budget:0
msgid "Draft Budgets"
-msgstr ""
+msgstr "Előzetes, tervezett költségvetés"
#, python-format
#~ msgid "The General Budget '%s' has no Accounts!"
diff --git a/addons/account_budget/i18n/lo.po b/addons/account_budget/i18n/lo.po
index daa39b8a6e6..cbc81b84000 100644
--- a/addons/account_budget/i18n/lo.po
+++ b/addons/account_budget/i18n/lo.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2011-01-19 15:50+0000\n"
+"PO-Revision-Date: 2012-10-09 16:05+0000\n"
"Last-Translator: Brice Muangkhot ສຸພາ ເມືອງໂຄຕ \n"
"Language-Team: Lao \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-08-28 06:27+0000\n"
-"X-Generator: Launchpad (build 15864)\n"
+"X-Launchpad-Export-Date: 2012-10-10 04:44+0000\n"
+"X-Generator: Launchpad (build 16112)\n"
#. module: account_budget
#: field:crossovered.budget,creating_user_id:0
@@ -31,7 +31,7 @@ msgstr "ຮັບຮູ້ເເລັວ"
#: model:ir.actions.act_window,name:account_budget.open_budget_post_form
#: model:ir.ui.menu,name:account_budget.menu_budget_post_form
msgid "Budgetary Positions"
-msgstr "ຈຸດງົບປະມານ"
+msgstr "ຕໍາແຫນ່ງງົບປະມານ"
#. module: account_budget
#: report:account.budget:0
@@ -105,6 +105,7 @@ msgid "Percentage"
msgstr "ເປີເຊັນ"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:crossovered.budget.report:0
msgid "to"
msgstr "ຫາ"
@@ -126,6 +127,14 @@ msgid ""
"revenue per analytic account and monitor its evolution based on the actuals "
"realised during that period."
msgstr ""
+"ງົບປະມານແມ່ນຄາດຄະເນລາຍໄດ້ຂອງບໍລິສັດຂອງທ່ານແລະຄ່າໃຊ້ຈ່າຍຄາດວ່າຈະສໍາລັບໄລຍະເວລາ"
+"ໃນອະນາຄົດໄດ້. ມີງົບປະມານ, "
+"ບໍລິສັດສາມາດລະມັດລະວັງເບິ່ງວິທີການເງິນຫຼາຍປານເຂົາເຈົ້າໄດ້ຖືກກິນໃນໄລຍະເວລາໃນໄລ"
+"ຍະໃດຫນຶ່ງ, ແລະສະວິທີທີ່ດີທີ່ສຸດເພື່ອແບ່ງມັນໃນບັນດາປະເພດຂອງລາຍການຕ່າງໆ. "
+"ໂດຍການຮັກສາຕິດຕາມບ່ອນທີ່ເງິນຂອງທ່ານດີ, ທ່ານອາດຈະມີຫນ້ອຍອາດຈະ overspend, "
+"ແລະອື່ນໆທີ່ອາດຈະຕອບສະຫນອງໄດ້ຕາມເປົ້າຫມາຍທາງດ້ານການເງິນຂອງທ່ານ. "
+"ຄາດງົບປະມານໂດຍ detailing ລາຍຮັບຄາດວ່າຈະຕໍ່ບັນຊີແຍກທາດແລະຕິດຕາມກວດກາຂອງຕົນ "
+"evolution ອີງຕາມຕົວຈິງໃນ realized ໃນໄລຍະນັ້ນ."
#. module: account_budget
#: code:addons/account_budget/account_budget.py:119
@@ -134,18 +143,21 @@ msgid "The Budget '%s' has no accounts!"
msgstr ""
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "%"
msgstr ""
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Description"
msgstr "ຄຳອະທິບາຍ"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:crossovered.budget.report:0
msgid "Currency"
msgstr "ເງິນຕາ"
@@ -170,7 +182,7 @@ msgstr "ເພື່ອຮັບຮູ້"
#. module: account_budget
#: view:crossovered.budget:0
msgid "Reset to Draft"
-msgstr ""
+msgstr "ປັບກັບຮ່າງ"
#. module: account_budget
#: view:account.budget.post:0
@@ -180,6 +192,7 @@ msgid "Planned Amount"
msgstr "ຈໍານວນຄາດໝາຍມ້ຽນ"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Perc(%)"
@@ -192,6 +205,7 @@ msgid "Done"
msgstr "ຈົບເເລັວ"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Practical Amt"
@@ -203,7 +217,7 @@ msgstr ""
#: view:crossovered.budget:0
#: field:crossovered.budget.lines,practical_amount:0
msgid "Practical Amount"
-msgstr ""
+msgstr "ຈໍານວນເງິນປະຕິບັດໄດ້"
#. module: account_budget
#: field:crossovered.budget,date_to:0
@@ -292,7 +306,7 @@ msgstr ""
#. module: account_budget
#: selection:crossovered.budget,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "ຍົກເລີກ"
#. module: account_budget
#: view:crossovered.budget:0
@@ -326,6 +340,7 @@ msgid "Account Budget crossvered summary report"
msgstr ""
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Theoretical Amt"
@@ -355,6 +370,7 @@ msgid "Theoretical Amount"
msgstr ""
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: field:crossovered.budget.lines,analytic_account_id:0
#: model:ir.model,name:account_budget.model_account_analytic_account
msgid "Analytic Account"
@@ -366,6 +382,7 @@ msgid "Budget :"
msgstr "ງົບປະມານ"
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Planned Amt"
@@ -406,6 +423,7 @@ msgid "Error! You can not create recursive analytic accounts."
msgstr ""
#. module: account_budget
+#: report:account.analytic.account.budget:0
#: report:account.budget:0
#: report:crossovered.budget.report:0
msgid "Analysis from"
diff --git a/addons/account_check_writing/report/check_print.py b/addons/account_check_writing/report/check_print.py
index f8e048beb2d..fd52c96b9aa 100644
--- a/addons/account_check_writing/report/check_print.py
+++ b/addons/account_check_writing/report/check_print.py
@@ -32,7 +32,6 @@ class report_print_check(report_sxw.rml_parse):
'time': time,
'get_lines': self.get_lines,
'fill_stars' : self.fill_stars,
- 'get_zip_line': self.get_zip_line,
})
def fill_stars(self, amount):
amount = amount.replace('Dollars','')
@@ -41,25 +40,6 @@ class report_print_check(report_sxw.rml_parse):
return ' '.join([amount,'*'*stars])
else: return amount
-
- def get_zip_line(self, address):
- '''
- Get the address line
- '''
- ret = ''
- if address:
- if address.city:
- ret += address.city
- if address.state_id:
- if address.state_id.name:
- if ret:
- ret += ', '
- ret += address.state_id.name
- if address.zip:
- if ret:
- ret += ' '
- ret += address.zip
- return ret
def get_lines(self, voucher_lines):
result = []
diff --git a/addons/account_check_writing/report/check_print_bottom.rml b/addons/account_check_writing/report/check_print_bottom.rml
index bb499a8aac1..f9add2fe60b 100644
--- a/addons/account_check_writing/report/check_print_bottom.rml
+++ b/addons/account_check_writing/report/check_print_bottom.rml
@@ -281,10 +281,7 @@
[[ voucher.partner_id.name ]]
- [[ voucher.partner_id.street or removeParentNode('para') ]]
- [[ voucher.partner_id.street2 or removeParentNode('para') ]]
- [[ get_zip_line(voucher.partner_id) ]]
- [[ voucher.partner_id.country_id.name]]
+ [[ display_address(voucher.partner_id) or removeParentNode('para') ]]
diff --git a/addons/account_check_writing/report/check_print_middle.rml b/addons/account_check_writing/report/check_print_middle.rml
index 5a2f83f20a2..b1fffca662d 100644
--- a/addons/account_check_writing/report/check_print_middle.rml
+++ b/addons/account_check_writing/report/check_print_middle.rml
@@ -237,10 +237,7 @@
[[ voucher.partner_id.name ]]
- [[ voucher.partner_id.street or removeParentNode('para') ]]
- [[ voucher.partner_id.street2 or removeParentNode('para') ]]
- [[ get_zip_line(voucher.partner_id) ]]
- [[ voucher.partner_id.country_id.name]]
+ [[ display_address(voucher.partner_id) or removeParentNode('para') ]]
diff --git a/addons/account_check_writing/report/check_print_top.rml b/addons/account_check_writing/report/check_print_top.rml
index 41526605f47..9a4d633e680 100644
--- a/addons/account_check_writing/report/check_print_top.rml
+++ b/addons/account_check_writing/report/check_print_top.rml
@@ -153,9 +153,7 @@
[[ voucher.partner_id.name ]]
- [[ voucher.partner_id.street2 or removeParentNode('para') ]]
- [[ get_zip_line(voucher.partner_id) ]]
- [[ voucher.partner_id.country_id.name]]
+ [[ display_address(voucher.partner_id) or removeParentNode('para') ]]
diff --git a/addons/account_followup/report/account_followup_print.py b/addons/account_followup/report/account_followup_print.py
index 8d64ce30f6b..593430691aa 100644
--- a/addons/account_followup/report/account_followup_print.py
+++ b/addons/account_followup/report/account_followup_print.py
@@ -30,7 +30,6 @@ class report_rappel(report_sxw.rml_parse):
self.localcontext.update({
'time': time,
'ids_to_objects': self._ids_to_objects,
- 'adr_get': self._adr_get,
'getLines': self._lines_get,
'get_text': self._get_text
})
@@ -43,11 +42,6 @@ class report_rappel(report_sxw.rml_parse):
all_lines.append(line)
return all_lines
- def _adr_get(self, stat_line, type):
- res_partner = pooler.get_pool(self.cr.dbname).get('res.partner')
- adr = res_partner.address_get(self.cr, self.uid, [stat_line.partner_id.id], [type])[type]
- return adr and res_partner.read(self.cr, self.uid, [adr]) or [{}]
-
def _lines_get(self, stat_by_partner_line):
pool = pooler.get_pool(self.cr.dbname)
moveline_obj = pool.get('account.move.line')
diff --git a/addons/account_followup/report/account_followup_print.rml b/addons/account_followup/report/account_followup_print.rml
index 3d096ecf3ac..7f2242991de 100644
--- a/addons/account_followup/report/account_followup_print.rml
+++ b/addons/account_followup/report/account_followup_print.rml
@@ -129,15 +129,10 @@
- [[ repeatIn(adr_get(o,'invoice'),'a' )]]
[[ o.partner_id.name or '' ]]
- [[ a['street'] or '']]
- [[ a['street2'] or removeParentNode('para') ]]
- [[ a['zip'] or '' ]] [[ a['city'] or '' ]]
- [[( a['state_id'] and a['state_id'][1]) or removeParentNode('para') ]]
- [[( a['country_id'] and a['country_id'][1]) or '']]
+ [[ display_address(o.partner_id) or '']]
diff --git a/addons/account_payment/report/order.rml b/addons/account_payment/report/order.rml
index 973588e5410..7ad897890e4 100644
--- a/addons/account_payment/report/order.rml
+++ b/addons/account_payment/report/order.rml
@@ -256,10 +256,10 @@
[[line.date=='False' and '-' or formatLang(line.date,date=True) ]]
- [[formatLang(line.amount) or '-' ]] [[get_company_currency_symbol()]]
+ [[formatLang(line.amount, currency_obj= user.company_id.currency_id) or '-' ]]
- [[ formatLang(line.amount_currency) ]] [[ line.currency.symbol]]
+ [[ formatLang(line.amount_currency, currency_obj= line.currency)]]
@@ -275,10 +275,10 @@
Total:
- [[ formatLang(get_amount_total(o)) or '' ]] [[get_company_currency_symbol()]]
+ [[ formatLang(get_amount_total(o), currency_obj= user.company_id.currency_id) or '' ]]
- [[ formatLang(get_amount_total_in_currency(o)) or '' ]] [[get_company_currency_symbol()]]
+ [[ formatLang(get_amount_total_in_currency(o), currency_obj= user.company_id.currency_id) or '' ]]
diff --git a/addons/account_payment/report/payment_order.py b/addons/account_payment/report/payment_order.py
index 6872bbe3516..5f9708f876c 100644
--- a/addons/account_payment/report/payment_order.py
+++ b/addons/account_payment/report/payment_order.py
@@ -32,7 +32,6 @@ class payment_order(report_sxw.rml_parse):
'time': time,
'get_invoice_name': self._get_invoice_name,
'get_company_currency': self._get_company_currency,
- 'get_company_currency_symbol': self._get_company_currency_symbol,
'get_amount_total_in_currency': self._get_amount_total_in_currency,
'get_amount_total': self._get_amount_total,
'get_account_name': self._get_account_name,
@@ -72,12 +71,8 @@ class payment_order(report_sxw.rml_parse):
user = pool.get('res.users').browse(self.cr, self.uid, self.uid)
return user.company_id and user.company_id.currency_id and user.company_id.currency_id.symbol or False
- def _get_company_currency_symbol(self):
- pool = pooler.get_pool(self.cr.dbname)
- user = pool.get('res.users').browse(self.cr, self.uid, self.uid)
- return user.company_id and user.company_id.currency_id and user.company_id.currency_id.symbol or False
- def _get_account_name(self, bank_id):
+ def _get_account_name(self,bank_id):
if bank_id:
pool = pooler.get_pool(self.cr.dbname)
value_name = pool.get('res.partner.bank').name_get(self.cr, self.uid, [bank_id])
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index 423026251c2..f97f3f6af3c 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -1070,7 +1070,8 @@ class account_voucher(osv.osv):
if line.amount == line.amount_unreconciled:
if not line.move_line_id.amount_residual:
raise osv.except_osv(_('Wrong bank statement line'),_("You have to delete the bank statement line which the payment was reconciled to manually. Please check the payment of the partner %s by the amount of %s.")%(line.voucher_id.partner_id.name, line.voucher_id.amount))
- currency_rate_difference = line.move_line_id.amount_residual - amount
+ sign = voucher_brw.type in ('payment', 'purchase') and -1 or 1
+ currency_rate_difference = sign * (line.move_line_id.amount_residual - amount)
else:
currency_rate_difference = 0.0
move_line = {
diff --git a/addons/account_voucher/report/account_voucher_print.rml b/addons/account_voucher/report/account_voucher_print.rml
index 923e900887a..9f0f2e1f07e 100644
--- a/addons/account_voucher/report/account_voucher_print.rml
+++ b/addons/account_voucher/report/account_voucher_print.rml
@@ -219,7 +219,7 @@
[[ p['pname'] ]]
- [[ p['amount'] ]] [[ voucher.currency_id.symbol ]]
+ [[ formatLang(p['amount'], currency_obj=voucher.currency_id) ]]
@@ -323,7 +323,7 @@
- [[ voucher.amount ]] [[ voucher.currency_id.symbol ]]
+ [[ formatLang(voucher.amount, currency_obj=voucher.currency_id) ]]
diff --git a/addons/account_voucher/report/account_voucher_sales_receipt_view.xml b/addons/account_voucher/report/account_voucher_sales_receipt_view.xml
index 15b2433ec25..fbd40ee17ba 100644
--- a/addons/account_voucher/report/account_voucher_sales_receipt_view.xml
+++ b/addons/account_voucher/report/account_voucher_sales_receipt_view.xml
@@ -6,7 +6,7 @@
sale.receipt.report.tree
sale.receipt.report
-
+
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 78b76e5c9b7..e1a48c6c535 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -136,11 +136,8 @@
-
-
-
-
-
+
+
-
+
-
-
-
-
-
+
+
-
+
-
+
-
-
-
-
-
-
+
+
-
+
-
+
-
+
diff --git a/addons/audittrail/audittrail_view.xml b/addons/audittrail/audittrail_view.xml
index b041329f6bd..c26e1b5b570 100644
--- a/addons/audittrail/audittrail_view.xml
+++ b/addons/audittrail/audittrail_view.xml
@@ -145,7 +145,7 @@
audittrail.log.tree
audittrail.log
-
+
diff --git a/addons/auth_oauth/auth_oauth_data.xml b/addons/auth_oauth/auth_oauth_data.xml
index 83e9df2e44d..c07359a062c 100644
--- a/addons/auth_oauth/auth_oauth_data.xml
+++ b/addons/auth_oauth/auth_oauth_data.xml
@@ -1,6 +1,6 @@
-
+
OpenERP Accounts
diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py
index ae01df5f6f7..26016f3f0a1 100644
--- a/addons/auth_oauth/controllers/main.py
+++ b/addons/auth_oauth/controllers/main.py
@@ -4,28 +4,25 @@ import simplejson
import werkzeug.urls
import werkzeug.utils
-import openerp.modules.registry
-import openerp.addons.web.controllers.main
-import openerp.addons.web.common.http as openerpweb
-from openerp import SUPERUSER_ID
+import openerp
_logger = logging.getLogger(__name__)
-class OAuthController(openerpweb.Controller):
+class OAuthController(openerp.addons.web.http.Controller):
_cp_path = '/auth_oauth'
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def list_providers(self, req, dbname):
try:
registry = openerp.modules.registry.RegistryManager.get(dbname)
with registry.cursor() as cr:
providers = registry.get('auth.oauth.provider')
- l = providers.read(cr, SUPERUSER_ID, providers.search(cr, SUPERUSER_ID, [('enabled','=',True)]))
+ l = providers.read(cr, openerp.SUPERUSER_ID, providers.search(cr, openerp.SUPERUSER_ID, [('enabled','=',True)]))
except Exception:
l = []
return l
- @openerpweb.httprequest
+ @openerp.addons.web.http.httprequest
def signin(self, req, **kw):
state = simplejson.loads(kw['state'])
dbname = state['d']
@@ -34,7 +31,7 @@ class OAuthController(openerpweb.Controller):
with registry.cursor() as cr:
try:
u = registry.get('res.users')
- credentials = u.auth_oauth(cr, SUPERUSER_ID, provider, kw)
+ credentials = u.auth_oauth(cr, openerp.SUPERUSER_ID, provider, kw)
cr.commit()
return openerp.addons.web.controllers.main.login_and_redirect(req, *credentials)
except AttributeError:
@@ -43,7 +40,7 @@ class OAuthController(openerpweb.Controller):
url = "/#action=login&oauth_error=1"
except Exception,e:
# signup error
- _logger.exception('oops')
+ _logger.exception("OAuth2: %s" % str(e))
url = "/#action=login&oauth_error=2"
return openerp.addons.web.controllers.main.set_cookie_and_redirect(req, url)
diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py
index fd26e89c2e3..115e3136f00 100644
--- a/addons/auth_oauth/res_users.py
+++ b/addons/auth_oauth/res_users.py
@@ -15,13 +15,17 @@ class res_users(osv.Model):
_inherit = 'res.users'
_columns = {
- 'oauth_provider_id': fields.many2one('auth.oauth.provider','OAuth Provider'),
+ 'oauth_provider_id': fields.many2one('auth.oauth.provider', 'OAuth Provider'),
'oauth_uid': fields.char('OAuth User ID', help="Oauth Provider user_id"),
- 'oauth_access_token': fields.char('OAuth Token', readonly=True),
+ 'oauth_access_token': fields.char('OAuth Access Token', readonly=True),
}
+ _sql_constraints = [
+ ('uniq_users_oauth_provider_oauth_uid', 'unique(oauth_provider_id, oauth_uid)', 'OAuth UID must be unique per provider'),
+ ]
+
def auth_oauth_rpc(self, cr, uid, endpoint, access_token, context=None):
- params = urllib.urlencode({ 'access_token': access_token })
+ params = urllib.urlencode({'access_token': access_token})
if urlparse.urlparse(endpoint)[4]:
url = endpoint + '&' + params
else:
@@ -41,22 +45,26 @@ class res_users(osv.Model):
validation = self.auth_oauth_rpc(cr, uid, p.validation_endpoint, access_token)
if validation.get("error"):
- raise openerp.exceptions.AccessDenied
+ raise Exception(validation['error'])
if p.data_endpoint:
data = self.auth_oauth_rpc(cr, uid, p.data_endpoint, access_token)
validation.update(data)
# required
oauth_uid = validation['user_id']
if not oauth_uid:
- raise openerp.exceptions.AccessDenied
+ raise openerp.exceptions.AccessDenied()
email = validation.get('email', 'provider_%d_user_%d' % (p.id, oauth_uid))
# optional
name = validation.get('name', email)
- res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid)])
+ res = self.search(cr, uid, [("oauth_uid", "=", oauth_uid), ('oauth_provider_id', '=', provider)])
if res:
- self.write(cr, uid, res[0], { 'oauth_access_token': access_token })
+ assert len(res) == 1
+ self.write(cr, uid, res[0], {'oauth_access_token': access_token})
else:
- # New user
+ # New user if signup module available
+ if not hasattr(self, '_signup_create_user'):
+ raise openerp.exceptions.AccessDenied()
+
new_user = {
'name': name,
'login': email,
@@ -66,7 +74,9 @@ class res_users(osv.Model):
'oauth_access_token': access_token,
'active': True,
}
- self.auth_signup_create(cr, uid, new_user)
+ # TODO pass signup token to allow attach new user to right partner
+ self._signup_create_user(cr, uid, new_user)
+
credentials = (cr.dbname, email, access_token)
return credentials
@@ -74,7 +84,7 @@ class res_users(osv.Model):
try:
return super(res_users, self).check_credentials(cr, uid, password)
except openerp.exceptions.AccessDenied:
- res = self.search(cr, SUPERUSER_ID, [('id','=',uid),('oauth_access_token','=',password)])
+ res = self.search(cr, SUPERUSER_ID, [('id', '=', uid), ('oauth_access_token', '=', password)])
if not res:
raise
diff --git a/addons/auth_openid/controllers/main.py b/addons/auth_openid/controllers/main.py
index ebcaab4bf25..7ee562d4d29 100644
--- a/addons/auth_openid/controllers/main.py
+++ b/addons/auth_openid/controllers/main.py
@@ -23,24 +23,21 @@ import logging
import os
import tempfile
import urllib
-from openerp import SUPERUSER_ID
import werkzeug.urls
import werkzeug.exceptions
-from openerp.modules.registry import RegistryManager
-from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect
-try:
- import openerp.addons.web.common.http as openerpweb
-except ImportError:
- import web.common.http as openerpweb # noqa
-
from openid import oidutil
from openid.store import filestore
from openid.consumer import consumer
from openid.cryptutil import randomString
from openid.extensions import ax, sreg
+import openerp
+from openerp import SUPERUSER_ID
+from openerp.modules.registry import RegistryManager
+from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect
+
from .. import utils
_logger = logging.getLogger(__name__)
@@ -70,7 +67,7 @@ class GoogleAppsAwareConsumer(consumer.GenericConsumer):
return super(GoogleAppsAwareConsumer, self).complete(message, endpoint, return_to)
-class OpenIDController(openerpweb.Controller):
+class OpenIDController(openerp.addons.web.http.Controller):
_cp_path = '/auth_openid/login'
_store = filestore.FileOpenIDStore(_storedir)
@@ -118,7 +115,7 @@ class OpenIDController(openerpweb.Controller):
def _get_realm(self, req):
return req.httprequest.host_url
- @openerpweb.httprequest
+ @openerp.addons.web.http.httprequest
def verify_direct(self, req, db, url):
result = self._verify(req, db, url)
if 'error' in result:
@@ -127,7 +124,7 @@ class OpenIDController(openerpweb.Controller):
return werkzeug.utils.redirect(result['value'])
return result['value']
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def verify(self, req, db, url):
return self._verify(req, db, url)
@@ -157,7 +154,7 @@ class OpenIDController(openerpweb.Controller):
form_html = request.htmlMarkup(realm, redirect_to)
return {'action': 'post', 'value': form_html, 'session_id': req.session_id}
- @openerpweb.httprequest
+ @openerp.addons.web.http.httprequest
def process(self, req, **kw):
session = getattr(req.session, 'openid_session', None)
if not session:
@@ -225,7 +222,7 @@ class OpenIDController(openerpweb.Controller):
return set_cookie_and_redirect(req, '/#action=login&loginerror=1')
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def status(self, req):
session = getattr(req.session, 'openid_session', {})
return {'status': session.get('status'), 'message': session.get('message')}
diff --git a/addons/auth_reset_password/controllers/main.py b/addons/auth_reset_password/controllers/main.py
index 5185a65c3ce..639945cfc09 100644
--- a/addons/auth_reset_password/controllers/main.py
+++ b/addons/auth_reset_password/controllers/main.py
@@ -18,20 +18,20 @@
# along with this program. If not, see
#
##############################################################################
-
-from openerp import SUPERUSER_ID
-from openerp.modules.registry import RegistryManager
-import openerp.addons.web.common.http as openerpweb
+import logging
import werkzeug
-import logging
+import openerp
+from openerp import SUPERUSER_ID
+from openerp.modules.registry import RegistryManager
+
_logger = logging.getLogger(__name__)
-class Controller(openerpweb.Controller):
+class Controller(openerp.addons.web.http.Controller):
_cp_path = '/auth_reset_password'
- @openerpweb.httprequest
+ @openerp.addons.web.http.httprequest
def reset_password(self, req, dbname, login):
""" retrieve user, and perform reset password """
url = '/'
diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py
index 56e5e910212..54dcc5b4362 100644
--- a/addons/auth_signup/controllers/main.py
+++ b/addons/auth_signup/controllers/main.py
@@ -18,32 +18,31 @@
# along with this program. If not, see
#
##############################################################################
-
-from openerp import SUPERUSER_ID
-from openerp.modules.registry import RegistryManager
-from openerp.addons.web.controllers.main import login_and_redirect
-import openerp.addons.web.common.http as openerpweb
+import logging
import werkzeug
-import logging
+import openerp
+from openerp.modules.registry import RegistryManager
+from openerp.addons.web.controllers.main import login_and_redirect
+
_logger = logging.getLogger(__name__)
-class Controller(openerpweb.Controller):
+class Controller(openerp.addons.web.http.Controller):
_cp_path = '/auth_signup'
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def retrieve(self, req, dbname, token):
""" retrieve the user info (name, login or email) corresponding to a signup token """
registry = RegistryManager.get(dbname)
user_info = None
with registry.cursor() as cr:
res_partner = registry.get('res.partner')
- user_info = res_partner.signup_retrieve_info(cr, SUPERUSER_ID, token)
+ user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token)
return user_info
- @openerpweb.httprequest
- def signup(self, req, dbname, token, name, login, password):
+ @openerp.addons.web.http.httprequest
+ def signup(self, req, dbname, token, name, login, password, state=''):
""" sign up a user (new or existing), and log it in """
url = '/'
registry = RegistryManager.get(dbname)
@@ -51,9 +50,9 @@ class Controller(openerpweb.Controller):
try:
res_users = registry.get('res.users')
values = {'name': name, 'login': login, 'password': password}
- credentials = res_users.signup(cr, SUPERUSER_ID, values, token)
+ credentials = res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
cr.commit()
- return login_and_redirect(req, *credentials)
+ return login_and_redirect(req, *credentials, redirect_url='/#%s'%state)
except Exception as e:
# signup error
_logger.exception('error when signup')
diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py
index 7b663bd0e33..59196c4da87 100644
--- a/addons/auth_signup/res_users.py
+++ b/addons/auth_signup/res_users.py
@@ -18,6 +18,10 @@
# along with this program. If not, see
#
##############################################################################
+import random
+import time
+import urllib
+import urlparse
import openerp
from openerp.osv import osv, fields
@@ -25,11 +29,6 @@ from openerp import SUPERUSER_ID
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
from openerp.tools.safe_eval import safe_eval
-import time
-import random
-import urllib
-import urlparse
-
def random_token():
# the token has an entropy of about 120 bits (6 bits/char * 20 chars)
chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
@@ -38,7 +37,6 @@ def random_token():
def now():
return time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
-
class res_partner(osv.Model):
_inherit = 'res.partner'
@@ -132,8 +130,6 @@ class res_partner(osv.Model):
res['email'] = partner.email or ''
return res
-
-
class res_users(osv.Model):
_inherit = 'res.users'
diff --git a/addons/auth_signup/static/src/js/auth_signup.js b/addons/auth_signup/static/src/js/auth_signup.js
index 509fafa35cc..0974b73292d 100644
--- a/addons/auth_signup/static/src/js/auth_signup.js
+++ b/addons/auth_signup/static/src/js/auth_signup.js
@@ -90,6 +90,7 @@ openerp.auth_signup = function(instance) {
name: name,
login: login,
password: password,
+ state: $.param(this.params)
};
var url = "/auth_signup/signup?" + $.param(params);
window.location = url;
diff --git a/addons/base_import/__openerp__.py b/addons/base_import/__openerp__.py
index eff20bc90ab..f5a707650d8 100644
--- a/addons/base_import/__openerp__.py
+++ b/addons/base_import/__openerp__.py
@@ -26,13 +26,14 @@ Re-implement openerp's file import system:
'author': 'OpenERP SA',
'depends': ['base'],
'installable': True,
- 'auto_install': False, # set to true and allow uninstall?
+ 'auto_install': True,
'css': [
'static/lib/select2/select2.css',
'static/src/css/import.css',
],
'js': [
'static/lib/select2/select2.js',
+ 'static/lib/javascript-state-machine/state-machine.js',
'static/src/js/import.js',
],
'qweb': ['static/src/xml/import.xml'],
diff --git a/addons/base_import/controllers.py b/addons/base_import/controllers.py
index 85ff993e92e..c831ffd229d 100644
--- a/addons/base_import/controllers.py
+++ b/addons/base_import/controllers.py
@@ -1,15 +1,12 @@
# -*- coding: utf-8 -*-
import simplejson
-try:
- import openerp.addons.web.common.http as openerpweb
-except ImportError:
- import web.common.http as openerpweb
+import openerp
-class ImportController(openerpweb.Controller):
+class ImportController(openerp.addons.web.http.Controller):
_cp_path = '/base_import'
- @openerpweb.httprequest
+ @openerp.addons.web.http.httprequest
def set_file(self, req, file, import_id, jsonp='callback'):
import_id = int(import_id)
diff --git a/addons/base_import/models.py b/addons/base_import/models.py
index 1e5ad002b84..996dbf7964d 100644
--- a/addons/base_import/models.py
+++ b/addons/base_import/models.py
@@ -83,6 +83,10 @@ class ir_import(orm.TransientModel):
}]
fields_got = self.pool[model].fields_get(cr, uid, context=context)
for name, field in fields_got.iteritems():
+ # an empty string means the field is deprecated, @deprecated must
+ # be absent or False to mean not-deprecated
+ if field.get('deprecated', False) is not False:
+ continue
if field.get('readonly'):
states = field.get('states')
if not states:
@@ -97,7 +101,7 @@ class ir_import(orm.TransientModel):
'id': name,
'name': name,
'string': field['string'],
- # Y U NO ALWAYS HAVE REQUIRED
+ # Y U NO ALWAYS HAS REQUIRED
'required': bool(field.get('required')),
'fields': [],
}
@@ -124,8 +128,8 @@ class ir_import(orm.TransientModel):
"""
csv_iterator = csv.reader(
StringIO(record.file),
- quotechar=options['quoting'],
- delimiter=options['separator'])
+ quotechar=str(options['quoting']),
+ delimiter=str(options['separator']))
csv_nonempty = itertools.ifilter(None, csv_iterator)
# TODO: guess encoding with chardet? Or https://github.com/aadsm/jschardet
encoding = options.get('encoding', 'utf-8')
@@ -307,22 +311,14 @@ class ir_import(orm.TransientModel):
except ValueError, e:
return [{
'type': 'error',
- 'message': str(e),
+ 'message': unicode(e),
'record': False,
}]
- try:
- _logger.info('importing %d rows...', len(data))
- (code, record, message, _wat) = self.pool[record.res_model].import_data(
- cr, uid, import_fields, data, context=context)
- _logger.info('done')
-
- except Exception, e:
- _logger.exception("Import failed")
- # TODO: remove when exceptions stop being an "expected"
- # behavior of import_data on some (most) invalid
- # input.
- code, record, message = -1, None, str(e)
+ _logger.info('importing %d rows...', len(data))
+ import_result = self.pool[record.res_model].load(
+ cr, uid, import_fields, data, context=context)
+ _logger.info('done')
# If transaction aborted, RELEASE SAVEPOINT is going to raise
# an InternalError (ROLLBACK should work, maybe). Ignore that.
@@ -339,14 +335,4 @@ class ir_import(orm.TransientModel):
except psycopg2.InternalError:
pass
- if code != -1:
- return []
-
- # TODO: add key for error location?
- # TODO: error not within normal preview, how to display? Re-preview
- # with higher ``count``?
- return [{
- 'type': 'error',
- 'message': message,
- 'record': record or False
- }]
+ return import_result['messages']
diff --git a/addons/base_import/static/lib/javascript-state-machine/LICENSE b/addons/base_import/static/lib/javascript-state-machine/LICENSE
new file mode 100644
index 00000000000..8ad703ca4ef
--- /dev/null
+++ b/addons/base_import/static/lib/javascript-state-machine/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2012 Jake Gordon and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/addons/base_import/static/lib/javascript-state-machine/README.md b/addons/base_import/static/lib/javascript-state-machine/README.md
new file mode 100644
index 00000000000..64c045e69d7
--- /dev/null
+++ b/addons/base_import/static/lib/javascript-state-machine/README.md
@@ -0,0 +1,327 @@
+Javascript Finite State Machine (v2.1.0)
+========================================
+
+This standalone javascript micro-framework provides a finite state machine for your pleasure.
+
+ * You can find the [code here](https://github.com/jakesgordon/javascript-state-machine)
+ * You can find a [description here](http://codeincomplete.com/posts/2011/8/19/javascript_state_machine_v2/)
+ * You can find a [working demo here](http://codeincomplete.com/posts/2011/8/19/javascript_state_machine_v2/example/)
+
+Download
+========
+
+You can download [state-machine.js](https://github.com/jakesgordon/javascript-state-machine/raw/master/state-machine.js),
+or the [minified version](https://github.com/jakesgordon/javascript-state-machine/raw/master/state-machine.min.js)
+
+Alternatively:
+
+ git clone git@github.com:jakesgordon/javascript-state-machine
+
+
+ * All code is in state-machine.js
+ * Minified version provided in state-machine.min.js
+ * No 3rd party library is required
+ * Demo can be found in /index.html
+ * QUnit tests can be found in /test/index.html
+
+Usage
+=====
+
+Include `state-machine.min.js` in your application.
+
+In its simplest form, create a standalone state machine using:
+
+ var fsm = StateMachine.create({
+ initial: 'green',
+ events: [
+ { name: 'warn', from: 'green', to: 'yellow' },
+ { name: 'panic', from: 'yellow', to: 'red' },
+ { name: 'calm', from: 'red', to: 'yellow' },
+ { name: 'clear', from: 'yellow', to: 'green' }
+ ]});
+
+... will create an object with a method for each event:
+
+ * fsm.warn() - transition from 'green' to 'yellow'
+ * fsm.panic() - transition from 'yellow' to 'red'
+ * fsm.calm() - transition from 'red' to 'yellow'
+ * fsm.clear() - transition from 'yellow' to 'green'
+
+along with the following members:
+
+ * fsm.current - contains the current state
+ * fsm.is(s) - return true if state `s` is the current state
+ * fsm.can(e) - return true if event `e` can be fired in the current state
+ * fsm.cannot(e) - return true if event `e` cannot be fired in the current state
+
+Multiple 'from' and 'to' states for a single event
+==================================================
+
+If an event is allowed **from** multiple states, and always transitions to the same
+state, then simply provide an array of states in the `from` attribute of an event. However,
+if an event is allowed from multiple states, but should transition **to** a different
+state depending on the current state, then provide multiple event entries with
+the same name:
+
+ var fsm = StateMachine.create({
+ initial: 'hungry',
+ events: [
+ { name: 'eat', from: 'hungry', to: 'satisfied' },
+ { name: 'eat', from: 'satisfied', to: 'full' },
+ { name: 'eat', from: 'full', to: 'sick' },
+ { name: 'rest', from: ['hungry', 'satisfied', 'full', 'sick'], to: 'hungry' },
+ ]});
+
+This example will create an object with 2 event methods:
+
+ * fsm.eat()
+ * fsm.rest()
+
+The `rest` event will always transition to the `hungry` state, while the `eat` event
+will transition to a state that is dependent on the current state.
+
+>> NOTE: The `rest` event could use a wildcard '*' for the 'from' state if it should be
+allowed from any current state.
+
+>> NOTE: The `rest` event in the above example can also be specified as multiple events with
+the same name if you prefer the verbose approach.
+
+Callbacks
+=========
+
+4 callbacks are available if your state machine has methods using the following naming conventions:
+
+ * onbefore**event** - fired before the event
+ * onleave**state** - fired when leaving the old state
+ * onenter**state** - fired when entering the new state
+ * onafter**event** - fired after the event
+
+You can affect the event in 3 ways:
+
+ * return `false` from an `onbeforeevent` handler to cancel the event.
+ * return `false` from an `onleavestate` handler to cancel the event.
+ * return `ASYNC` from an `onleavestate` handler to perform an asynchronous state transition (see next section)
+
+For convenience, the 2 most useful callbacks can be shortened:
+
+ * on**event** - convenience shorthand for onafter**event**
+ * on**state** - convenience shorthand for onenter**state**
+
+In addition, a generic `onchangestate()` callback can be used to call a single function for _all_ state changes:
+
+All callbacks will be passed the same arguments:
+
+ * **event** name
+ * **from** state
+ * **to** state
+ * _(followed by any arguments you passed into the original event method)_
+
+Callbacks can be specified when the state machine is first created:
+
+ var fsm = StateMachine.create({
+ initial: 'green',
+ events: [
+ { name: 'warn', from: 'green', to: 'yellow' },
+ { name: 'panic', from: 'yellow', to: 'red' },
+ { name: 'calm', from: 'red', to: 'yellow' },
+ { name: 'clear', from: 'yellow', to: 'green' }
+ ],
+ callbacks: {
+ onpanic: function(event, from, to, msg) { alert('panic! ' + msg); },
+ onclear: function(event, from, to, msg) { alert('thanks to ' + msg); },
+ ongreen: function(event, from, to) { document.body.className = 'green'; },
+ onyellow: function(event, from, to) { document.body.className = 'yellow'; },
+ onred: function(event, from, to) { document.body.className = 'red'; },
+ }
+ });
+
+ fsm.panic('killer bees');
+ fsm.clear('sedatives in the honey pots');
+ ...
+
+Additionally, they can be added and removed from the state machine at any time:
+
+ fsm.ongreen = null;
+ fsm.onyellow = null;
+ fsm.onred = null;
+ fsm.onchangestate = function(event, from, to) { document.body.className = to; };
+
+Asynchronous State Transitions
+==============================
+
+Sometimes, you need to execute some asynchronous code during a state transition and ensure the
+new state is not entered until your code has completed.
+
+A good example of this is when you transition out of a `menu` state, perhaps you want to gradually
+fade the menu away, or slide it off the screen and don't want to transition to your `game` state
+until after that animation has been performed.
+
+You can now return `StateMachine.ASYNC` from your `onleavestate` handler and the state machine
+will be _'put on hold'_ until you are ready to trigger the transition using the new `transition()`
+method.
+
+For example, using jQuery effects:
+
+ var fsm = StateMachine.create({
+
+ initial: 'menu',
+
+ events: [
+ { name: 'play', from: 'menu', to: 'game' },
+ { name: 'quit', from: 'game', to: 'menu' }
+ ],
+
+ callbacks: {
+
+ onentermenu: function() { $('#menu').show(); },
+ onentergame: function() { $('#game').show(); },
+
+ onleavemenu: function() {
+ $('#menu').fadeOut('fast', function() {
+ fsm.transition();
+ });
+ return StateMachine.ASYNC; // tell StateMachine to defer next state until we call transition (in fadeOut callback above)
+ },
+
+ onleavegame: function() {
+ $('#game').slideDown('slow', function() {
+ fsm.transition();
+ };
+ return StateMachine.ASYNC; // tell StateMachine to defer next state until we call transition (in slideDown callback above)
+ }
+
+ }
+ });
+
+
+State Machine Classes
+=====================
+
+You can also turn all instances of a _class_ into an FSM by applying
+the state machine functionality to the prototype, including your callbacks
+in your prototype, and providing a `startup` event for use when constructing
+instances:
+
+ MyFSM = function() { // my constructor function
+ this.startup();
+ };
+
+ MyFSM.prototype = {
+
+ onpanic: function(event, from, to) { alert('panic'); },
+ onclear: function(event, from, to) { alert('all is clear'); },
+
+ // my other prototype methods
+
+ };
+
+ StateMachine.create({
+ target: MyFSM.prototype,
+ events: [
+ { name: 'startup', from: 'none', to: 'green' },
+ { name: 'warn', from: 'green', to: 'yellow' },
+ { name: 'panic', from: 'yellow', to: 'red' },
+ { name: 'calm', from: 'red', to: 'yellow' },
+ { name: 'clear', from: 'yellow', to: 'green' }
+ ]});
+
+
+This should be easy to adjust to fit your appropriate mechanism for object construction.
+
+Initialization Options
+======================
+
+How the state machine should initialize can depend on your application requirements, so
+the library provides a number of simple options.
+
+By default, if you dont specify any initial state, the state machine will be in the `'none'`
+state and you would need to provide an event to take it out of this state:
+
+ var fsm = StateMachine.create({
+ events: [
+ { name: 'startup', from: 'none', to: 'green' },
+ { name: 'panic', from: 'green', to: 'red' },
+ { name: 'calm', from: 'red', to: 'green' },
+ ]});
+ alert(fsm.current); // "none"
+ fsm.startup();
+ alert(fsm.current); // "green"
+
+If you specify the name of your initial event (as in all the earlier examples), then an
+implicit `startup` event will be created for you and fired when the state machine is constructed.
+
+ var fsm = StateMachine.create({
+ initial: 'green',
+ events: [
+ { name: 'panic', from: 'green', to: 'red' },
+ { name: 'calm', from: 'red', to: 'green' },
+ ]});
+ alert(fsm.current); // "green"
+
+If your object already has a `startup` method you can use a different name for the initial event
+
+ var fsm = StateMachine.create({
+ initial: { state: 'green', event: 'init' },
+ events: [
+ { name: 'panic', from: 'green', to: 'red' },
+ { name: 'calm', from: 'red', to: 'green' },
+ ]});
+ alert(fsm.current); // "green"
+
+Finally, if you want to wait to call the initial state transition event until a later date you
+can `defer` it:
+
+ var fsm = StateMachine.create({
+ initial: { state: 'green', event: 'init', defer: true },
+ events: [
+ { name: 'panic', from: 'green', to: 'red' },
+ { name: 'calm', from: 'red', to: 'green' },
+ ]});
+ alert(fsm.current); // "none"
+ fsm.init();
+ alert(fsm.current); // "green"
+
+Of course, we have now come full circle, this last example is pretty much functionally the
+same as the first example in this section where you simply define your own startup event.
+
+So you have a number of choices available to you when initializing your state machine.
+
+Handling Failures
+======================
+
+By default, if you try to call an event method that is not allowed in the current state, the
+state machine will throw an exception. If you prefer to handle the problem yourself, you can
+define a custom `error` handler:
+
+ var fsm = StateMachine.create({
+ initial: 'green',
+ error: function(eventName, from, to, args, errorCode, errorMessage) {
+ return 'event ' + eventName + ' was naughty :- ' + errorMessage;
+ },
+ events: [
+ { name: 'panic', from: 'green', to: 'red' },
+ { name: 'calm', from: 'red', to: 'green' },
+ ]});
+ alert(fsm.calm()); // "event calm was naughty :- event not allowed in current state green"
+
+Release Notes
+=============
+
+See [RELEASE NOTES](https://github.com/jakesgordon/javascript-state-machine/blob/master/RELEASE_NOTES.md) file.
+
+License
+=======
+
+See [LICENSE](https://github.com/jakesgordon/javascript-state-machine/blob/master/LICENSE) file.
+
+Contact
+=======
+
+If you have any ideas, feedback, requests or bug reports, you can reach me at
+[jake@codeincomplete.com](mailto:jake@codeincomplete.com), or via
+my website: [Code inComplete](http://codeincomplete.com/posts/2011/8/19/javascript_state_machine_v2/)
+
+
+
+
+
diff --git a/addons/base_import/static/lib/javascript-state-machine/RELEASE_NOTES.md b/addons/base_import/static/lib/javascript-state-machine/RELEASE_NOTES.md
new file mode 100644
index 00000000000..06abf402d38
--- /dev/null
+++ b/addons/base_import/static/lib/javascript-state-machine/RELEASE_NOTES.md
@@ -0,0 +1,32 @@
+Version 2.1.0 (January 7th 2012)
+--------------------------------
+
+ * Wrapped in self executing function to be more easily used with loaders like `require.js` or `curl.js` (issue #15)
+ * Allow event to be cancelled by returning `false` from `onleavestate` handler (issue #13) - WARNING: this breaks backward compatibility for async transitions (you now need to return `StateMachine.ASYNC` instead of `false`)
+ * Added explicit return values for event methods (issue #12)
+ * Added support for wildcard events that can be fired 'from' any state (issue #11)
+ * Added support for no-op events that transition 'to' the same state (issue #5)
+ * extended custom error callback to handle any exceptions caused by caller provided callbacks
+ * added custom error callback to override exception when an illegal state transition is attempted (thanks to cboone)
+ * fixed typos (thanks to cboone)
+ * fixed issue #4 - ensure before/after event hooks are called even if the event doesn't result in a state change
+
+Version 2.0.0 (August 19th 2011)
+--------------------------------
+
+ * adding support for asynchronous state transitions (see README) - with lots of qunit tests (see test/async.js).
+ * consistent arguments for ALL callbacks, first 3 args are ALWAYS event name, from state and to state, followed by whatever arguments the user passed to the original event method.
+ * added a generic `onchangestate(event,from,to)` callback to detect all state changes with a single function.
+ * allow callbacks to be declared at creation time (instead of having to attach them afterwards)
+ * renamed 'hooks' => 'callbacks'
+ * [read more...](http://codeincomplete.com/posts/2011/8/19/javascript_state_machine_v2/)
+
+Version 1.2.0 (June 21st 2011)
+------------------------------
+ * allows the same event to transition to different states, depending on the current state (see 'Multiple...' section in README.md)
+ * [read more...](http://codeincomplete.com/posts/2011/6/21/javascript_state_machine_v1_2_0/)
+
+Version 1.0.0 (June 1st 2011)
+-----------------------------
+ * initial version
+ * [read more...](http://codeincomplete.com/posts/2011/6/1/javascript_state_machine/)
diff --git a/addons/base_import/static/lib/javascript-state-machine/Rakefile b/addons/base_import/static/lib/javascript-state-machine/Rakefile
new file mode 100644
index 00000000000..beb8702a7f0
--- /dev/null
+++ b/addons/base_import/static/lib/javascript-state-machine/Rakefile
@@ -0,0 +1,8 @@
+
+desc "create minified version of state-machine.js"
+task :minify do
+ require File.expand_path(File.join(File.dirname(__FILE__), 'minifier/minifier'))
+ Minifier.enabled = true
+ Minifier.minify('state-machine.js')
+end
+
diff --git a/addons/base_import/static/lib/javascript-state-machine/index.html b/addons/base_import/static/lib/javascript-state-machine/index.html
new file mode 100644
index 00000000000..2d6cb62617b
--- /dev/null
+++ b/addons/base_import/static/lib/javascript-state-machine/index.html
@@ -0,0 +1,39 @@
+
+
+
+ Javascript Finite State Machine
+
+
+
+
+
+
+
+
+
Finite State Machine
+
+
+ clear
+ calm
+ warn
+ panic!
+
+
+
+
+
+
+ dashed lines are asynchronous state transitions (3 seconds)
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/base_import/static/lib/javascript-state-machine/state-machine.js b/addons/base_import/static/lib/javascript-state-machine/state-machine.js
new file mode 100644
index 00000000000..0d503ee7bdb
--- /dev/null
+++ b/addons/base_import/static/lib/javascript-state-machine/state-machine.js
@@ -0,0 +1,155 @@
+(function (window) {
+
+ StateMachine = {
+
+ //---------------------------------------------------------------------------
+
+ VERSION: "2.1.0",
+
+ //---------------------------------------------------------------------------
+
+ Result: {
+ SUCCEEDED: 1, // the event transitioned successfully from one state to another
+ NOTRANSITION: 2, // the event was successfull but no state transition was necessary
+ CANCELLED: 3, // the event was cancelled by the caller in a beforeEvent callback
+ ASYNC: 4, // the event is asynchronous and the caller is in control of when the transition occurs
+ },
+
+ Error: {
+ INVALID_TRANSITION: 100, // caller tried to fire an event that was innapropriate in the current state
+ PENDING_TRANSITION: 200, // caller tried to fire an event while an async transition was still pending
+ INVALID_CALLBACK: 300, // caller provided callback function threw an exception
+ },
+
+ WILDCARD: '*',
+ ASYNC: 'async',
+
+ //---------------------------------------------------------------------------
+
+ create: function(cfg, target) {
+
+ var initial = (typeof cfg.initial == 'string') ? { state: cfg.initial } : cfg.initial; // allow for a simple string, or an object with { state: 'foo', event: 'setup', defer: true|false }
+ var fsm = target || cfg.target || {};
+ var events = cfg.events || [];
+ var callbacks = cfg.callbacks || {};
+ var map = {};
+
+ var add = function(e) {
+ var from = (e.from instanceof Array) ? e.from : (e.from ? [e.from] : [StateMachine.WILDCARD]); // allow 'wildcard' transition if 'from' is not specified
+ map[e.name] = map[e.name] || {};
+ for (var n = 0 ; n < from.length ; n++)
+ map[e.name][from[n]] = e.to || from[n]; // allow no-op transition if 'to' is not specified
+ };
+
+ if (initial) {
+ initial.event = initial.event || 'startup';
+ add({ name: initial.event, from: 'none', to: initial.state });
+ }
+
+ for(var n = 0 ; n < events.length ; n++)
+ add(events[n]);
+
+ for(var name in map) {
+ if (map.hasOwnProperty(name))
+ fsm[name] = StateMachine.buildEvent(name, map[name]);
+ }
+
+ for(var name in callbacks) {
+ if (callbacks.hasOwnProperty(name))
+ fsm[name] = callbacks[name]
+ }
+
+ fsm.current = 'none';
+ fsm.is = function(state) { return this.current == state; };
+ fsm.can = function(event) { return !this.transition && (map[event].hasOwnProperty(this.current) || map[event].hasOwnProperty(StateMachine.WILDCARD)); }
+ fsm.cannot = function(event) { return !this.can(event); };
+ fsm.error = cfg.error || function(name, from, to, args, error, msg) { throw msg; }; // default behavior when something unexpected happens is to throw an exception, but caller can override this behavior if desired (see github issue #3)
+
+ if (initial && !initial.defer)
+ fsm[initial.event]();
+
+ return fsm;
+
+ },
+
+ //===========================================================================
+
+ doCallback: function(fsm, func, name, from, to, args) {
+ if (func) {
+ try {
+ return func.apply(fsm, [name, from, to].concat(args));
+ }
+ catch(e) {
+ return fsm.error(name, from, to, args, StateMachine.Error.INVALID_CALLBACK, "an exception occurred in a caller-provided callback function");
+ }
+ }
+ },
+
+ beforeEvent: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onbefore' + name], name, from, to, args); },
+ afterEvent: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onafter' + name] || fsm['on' + name], name, from, to, args); },
+ leaveState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onleave' + from], name, from, to, args); },
+ enterState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onenter' + to] || fsm['on' + to], name, from, to, args); },
+ changeState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onchangestate'], name, from, to, args); },
+
+
+ buildEvent: function(name, map) {
+ return function() {
+
+ var from = this.current;
+ var to = map[from] || map[StateMachine.WILDCARD] || from;
+ var args = Array.prototype.slice.call(arguments); // turn arguments into pure array
+
+ if (this.transition)
+ return this.error(name, from, to, args, StateMachine.Error.PENDING_TRANSITION, "event " + name + " inappropriate because previous transition did not complete");
+
+ if (this.cannot(name))
+ return this.error(name, from, to, args, StateMachine.Error.INVALID_TRANSITION, "event " + name + " inappropriate in current state " + this.current);
+
+ if (false === StateMachine.beforeEvent(this, name, from, to, args))
+ return StateMachine.CANCELLED;
+
+ if (from === to) {
+ StateMachine.afterEvent(this, name, from, to, args);
+ return StateMachine.NOTRANSITION;
+ }
+
+ // prepare a transition method for use EITHER lower down, or by caller if they want an async transition (indicated by an ASYNC return value from leaveState)
+ var fsm = this;
+ this.transition = function() {
+ fsm.transition = null; // this method should only ever be called once
+ fsm.current = to;
+ StateMachine.enterState( fsm, name, from, to, args);
+ StateMachine.changeState(fsm, name, from, to, args);
+ StateMachine.afterEvent( fsm, name, from, to, args);
+ };
+
+ var leave = StateMachine.leaveState(this, name, from, to, args);
+ if (false === leave) {
+ this.transition = null;
+ return StateMachine.CANCELLED;
+ }
+ else if ("async" === leave) {
+ return StateMachine.ASYNC;
+ }
+ else {
+ if (this.transition)
+ this.transition(); // in case user manually called transition() but forgot to return ASYNC
+ return StateMachine.SUCCEEDED;
+ }
+
+ };
+ }
+
+ }; // StateMachine
+
+ //===========================================================================
+
+ if ("function" === typeof define) {
+ define("statemachine", [], function() { return StateMachine; });
+ }
+ else {
+ window.StateMachine = StateMachine;
+ }
+
+}(this));
+
diff --git a/addons/base_import/static/src/css/import.css b/addons/base_import/static/src/css/import.css
index f6258f5aa50..21e598ff707 100644
--- a/addons/base_import/static/src/css/import.css
+++ b/addons/base_import/static/src/css/import.css
@@ -10,7 +10,8 @@
.oe_import .oe_import_grid,
.oe_import .oe_import_error_report,
.oe_import .oe_import_with_file,
-.oe_import .oe_import_noheaders {
+.oe_import .oe_import_noheaders,
+.oe_import .oe_import_report_more {
display: none;
}
@@ -19,7 +20,8 @@
}
.oe_import.oe_import_error .oe_import_error_report,
.oe_import.oe_import_with_file .oe_import_with_file,
-.oe_import.oe_import_noheaders .oe_import_noheaders {
+.oe_import.oe_import_noheaders .oe_import_noheaders,
+.oe_import .oe_import_report_showmore .oe_import_report_more {
display: block;
}
@@ -29,6 +31,9 @@
.oe_import .oe_import_error_report ul .oe_import_report_warning {
background-color: #FEFFD9;
}
+.oe_import .oe_import_error_report ul .oe_import_report_info {
+ background-color: #d3ffd3;
+}
.oe_import .oe_import_noheaders {
color: #888;
@@ -47,7 +52,7 @@
}
.oe_import .oe_import_options label {
display: inline-block;
- width: 10em;
+ width: 8em;
text-align: right;
}
diff --git a/addons/base_import/static/src/js/import.js b/addons/base_import/static/src/js/import.js
index c2deb660ff2..0a60fe18ffb 100644
--- a/addons/base_import/static/src/js/import.js
+++ b/addons/base_import/static/src/js/import.js
@@ -47,31 +47,35 @@ openerp.base_import = function (instance) {
this._super.apply(this, arguments);
if(add_button) {
this.$buttons.on('click', '.oe_list_button_import', function() {
- new instance.web.DataImport(self, self.dataset).open();
+ self.do_action({
+ type: 'ir.actions.client',
+ tag: 'import',
+ params: {
+ model: self.dataset.model
+ }
+ }, void 0, void 0, function () {
+ self.reload();
+ });
return false;
});
}
}
});
- instance.web.DataImport = instance.web.Dialog.extend({
+ instance.web.client_actions.add(
+ 'import', 'instance.web.DataImport');
+ instance.web.DataImport = instance.web.Widget.extend({
template: 'ImportView',
- dialog_title: _lt("Import Data"),
opts: [
{name: 'encoding', label: _lt("Encoding:"), value: 'utf-8'},
{name: 'separator', label: _lt("Separator:"), value: ','},
{name: 'quoting', label: _lt("Quoting:"), value: '"'}
],
events: {
- 'change .oe_import_grid input': 'import_dryrun',
- 'change input.oe_import_file': 'file_update',
- 'change input.oe_import_has_header, .oe_import_options input': 'settings_updated',
- 'click a.oe_import_csv': function (e) {
- e.preventDefault();
- },
- 'click a.oe_import_export': function (e) {
- e.preventDefault();
- },
+ // 'change .oe_import_grid input': 'import_dryrun',
+ 'change .oe_import_file': 'loaded_file',
+ 'click .oe_import_file_reload': 'loaded_file',
+ 'change input.oe_import_has_header, .oe_import_options input': 'settings_changed',
'click a.oe_import_toggle': function (e) {
e.preventDefault();
var $el = $(e.target);
@@ -79,30 +83,84 @@ openerp.base_import = function (instance) {
? $el.next()
: $el.parent().next())
.toggle();
+ },
+ 'click .oe_import_report a.oe_import_report_count': function (e) {
+ e.preventDefault();
+ $(e.target).parent().toggleClass('oe_import_report_showmore');
+ },
+ 'click .oe_import_moreinfo_action a': function (e) {
+ e.preventDefault();
+ // #data will parse the attribute on its own, we don't like
+ // that sort of things
+ var action = JSON.parse($(e.target).attr('data-action'));
+ // FIXME: when JS-side clean_action
+ action.views = _(action.views).map(function (view) {
+ var id = view[0], type = view[1];
+ return [
+ id,
+ type !== 'tree' ? type
+ : action.view_type === 'form' ? 'list'
+ : 'tree'
+ ];
+ });
+ this.do_action(_.extend(action, {
+ target: 'new',
+ flags: {
+ search_view: true,
+ display_title: true,
+ pager: true,
+ list: {selectable: false}
+ }
+ }));
+ },
+ // buttons
+ 'click .oe_import_validate': 'validate',
+ 'click .oe_import_import': 'import',
+ 'click .oe_import_cancel': function (e) {
+ e.preventDefault();
+ this.exit();
}
},
- init: function (parent, dataset) {
+ init: function (parent, params) {
var self = this;
- this._super(parent, {
- buttons: [
- {text: _t("Import File"), click: function () {
- self.do_import();
- }, 'class': 'oe_import_dialog_button'}
- ]
- });
- this.res_model = parent.model;
+ this._super.apply(this, arguments);
+ this.res_model = params.model;
// import object id
this.id = null;
this.Import = new instance.web.Model('base_import.import');
},
start: function () {
var self = this;
- return this.Import.call('create', [{
- 'res_model': this.res_model
- }]).then(function (id) {
- self.id = id;
- self.$('input[name=import_id]').val(id);
- });
+ this.setup_encoding_picker();
+
+ return $.when(
+ this._super(),
+ this.Import.call('create', [{
+ 'res_model': this.res_model
+ }]).then(function (id) {
+ self.id = id;
+ self.$('input[name=import_id]').val(id);
+ })
+ )
+ },
+ setup_encoding_picker: function () {
+ this.$('input.oe_import_encoding').select2({
+ width: '160px',
+ query: function (q) {
+ var make = function (term) { return {id: term, text: term}; };
+ var suggestions = _.map(
+ ('utf-8 utf-16 windows-1252 latin1 latin2 big5 ' +
+ 'gb18030 shift_jis windows-1251 koir8_r').split(/\s+/),
+ make);
+ if (q.term) {
+ suggestions.unshift(make(q.term));
+ }
+ q.callback({results: suggestions});
+ },
+ initSelection: function (e, c) {
+ return c({id: 'utf-8', text: 'utf-8'});
+ }
+ }).select2('val', 'utf-8');
},
import_options: function () {
@@ -118,34 +176,52 @@ openerp.base_import = function (instance) {
},
//- File & settings change section
- file_update: function (e) {
+ onfile_loaded: function () {
+ this.$('.oe_import_button').prop('disabled', true);
if (!this.$('input.oe_import_file').val()) { return; }
this.$el.removeClass('oe_import_preview oe_import_error');
jsonp(this.$el, {
url: '/base_import/set_file'
- }, this.proxy('settings_updated'));
+ }, this.proxy('settings_changed'));
},
- settings_updated: function () {
+ onpreviewing: function () {
+ var self = this;
+ this.$('.oe_import_button').prop('disabled', true);
this.$el.addClass('oe_import_with_file');
// TODO: test that write // succeeded?
- this.Import.call(
- 'parse_preview', [this.id, this.import_options()])
- .then(this.proxy('preview'));
- },
- preview: function (result) {
+ this.$el.removeClass('oe_import_preview_error oe_import_error');
this.$el.toggleClass(
'oe_import_noheaders',
!this.$('input.oe_import_has_header').prop('checked'));
- if (result.error) {
- this.$el.addClass('oe_import_error');
- this.$('.oe_import_error_report').html(
+ this.Import.call(
+ 'parse_preview', [this.id, this.import_options()])
+ .then(function (result) {
+ var signal = result.error ? 'preview_failed' : 'preview_succeeded';
+ self[signal](result);
+ });
+ },
+ onpreview_error: function (event, from, to, result) {
+ this.$('.oe_import_options').show();
+ this.$el.addClass('oe_import_preview_error oe_import_error');
+ this.$('.oe_import_error_report').html(
QWeb.render('ImportView.preview.error', result));
- return;
- }
+ },
+ onpreview_success: function (event, from, to, result) {
+ this.$('.oe_import_import').removeClass('oe_highlight');
+ this.$('.oe_import_validate').addClass('oe_highlight');
+ this.$('.oe_import_button').prop('disabled', false);
this.$el.addClass('oe_import_preview');
this.$('table').html(QWeb.render('ImportView.preview', result));
+ if (result.headers.length === 1) {
+ this.$('.oe_import_options').show();
+ this.onresults(null, null, null, [{
+ type: 'warning',
+ message: _t("A single column was found in the file, this often means the file separator is incorrect")
+ }]);
+ }
+
var $fields = this.$('.oe_import_fields input');
this.render_fields_matches(result, $fields);
var data = this.generate_fields_completion(result);
@@ -180,7 +256,6 @@ openerp.base_import = function (instance) {
width: 'resolve',
dropdownCssClass: 'oe_import_selector'
});
- this.import_dryrun();
},
generate_fields_completion: function (root) {
var basic = [];
@@ -252,40 +327,116 @@ openerp.base_import = function (instance) {
//- import itself
call_import: function (options) {
- var self = this;
var fields = this.$('.oe_import_fields input.oe_import_match_field').map(function (index, el) {
return $(el).select2('val') || false;
}).get();
return this.Import.call(
'do', [this.id, fields, this.import_options()], options);
},
- import_dryrun: function () {
-// this.call_import({ dryrun: true })
-// .then(this.proxy('render_import_errors'));
+ onvalidate: function () {
+ return this.call_import({ dryrun: true })
+ .then(this.proxy('validated'));
},
- do_import: function () {
+ onimport: function () {
var self = this;
- this.call_import({ dryrun: false }).then(function (errors) {
- if (_.isEmpty(errors)) {
- if (self.getParent().reload_content) {
- self.getParent().reload_content();
- }
- self.close();
+ return this.call_import({ dryrun: false }).then(function (message) {
+ if (!_.any(message, function (message) {
+ return message.type === 'error' })) {
+ self['import_succeeded']();
return;
}
- self.render_import_errors(errors);
+ self['import_failed'](message);
});
},
- render_import_errors: function (errors) {
- if (_.isEmpty(errors)) {
- this.$el.removeClass('oe_import_error');
- return;
+ onimported: function () {
+ this.exit();
+ },
+ exit: function () {
+ this.do_action({
+ type: 'ir.actions.client',
+ tag: 'history_back'
+ });
+ },
+ onresults: function (event, from, to, message) {
+ var no_messages = _.isEmpty(message);
+ this.$('.oe_import_import').toggleClass('oe_highlight', no_messages);
+ this.$('.oe_import_validate').toggleClass('oe_highlight', !no_messages);
+ if (no_messages) {
+ message.push({
+ type: 'info',
+ message: _t("Everything seems valid.")
+ });
}
- // import failed (or maybe just warnings, if we ever get
- // warnings?)
+ // row indexes come back 0-indexed, spreadsheets
+ // display 1-indexed.
+ var offset = 1;
+ // offset more if header
+ if (this.import_options().headers) { offset += 1; }
+
this.$el.addClass('oe_import_error');
this.$('.oe_import_error_report').html(
- QWeb.render('ImportView.error', {errors: errors}));
+ QWeb.render('ImportView.error', {
+ errors: _(message).groupBy('message'),
+ at: function (rows) {
+ var from = rows.from + offset;
+ var to = rows.to + offset;
+ if (from === to) {
+ return _.str.sprintf(_t("at row %d"), from);
+ }
+ return _.str.sprintf(_t("between rows %d and %d"),
+ from, to);
+ },
+ more: function (n) {
+ return _.str.sprintf(_t("(%d more)"), n);
+ },
+ info: function (msg) {
+ if (typeof msg === 'string') {
+ return _.str.sprintf(
+ '%s
',
+ _.str.escapeHTML(msg));
+ }
+ if (msg instanceof Array) {
+ return _.str.sprintf(
+ '',
+ _.str.escapeHTML(_t("Here are the possible values:")),
+ _(msg).map(function (msg) {
+ return ''
+ + _.str.escapeHTML(msg)
+ + ' ';
+ }).join(''));
+ }
+ // Final should be object, action descriptor
+ return [
+ ''
+ ].join('')
+ },
+ })).get(0).scrollIntoView();
},
});
+ // FSM-ize DataImport
+ StateMachine.create({
+ target: instance.web.DataImport.prototype,
+ events: [
+ { name: 'loaded_file',
+ from: ['none', 'file_loaded', 'preview_error', 'preview_success', 'results'],
+ to: 'file_loaded' },
+ { name: 'settings_changed',
+ from: ['file_loaded', 'preview_error', 'preview_success', 'results'],
+ to: 'previewing' },
+ { name: 'preview_failed', from: 'previewing', to: 'preview_error' },
+ { name: 'preview_succeeded', from: 'previewing', to: 'preview_success' },
+ { name: 'validate', from: 'preview_success', to: 'validating' },
+ { name: 'validate', from: 'results', to: 'validating' },
+ { name: 'validated', from: 'validating', to: 'results' },
+ { name: 'import', from: ['preview_success', 'results'], to: 'importing' },
+ { name: 'import_succeeded', from: 'importing', to: 'imported'},
+ { name: 'import_failed', from: 'importing', to: 'results' }
+ ]
+ })
};
diff --git a/addons/base_import/static/src/xml/import.xml b/addons/base_import/static/src/xml/import.xml
index 386348bea4b..1c57c40c9db 100644
--- a/addons/base_import/static/src/xml/import.xml
+++ b/addons/base_import/static/src/xml/import.xml
@@ -2,17 +2,45 @@
,
-
+
@@ -477,10 +477,10 @@
-
+
-
+
@@ -488,7 +488,7 @@
-
+
diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml
index 35ed9411215..a17633d0ef6 100644
--- a/addons/crm/report/crm_lead_report_view.xml
+++ b/addons/crm/report/crm_lead_report_view.xml
@@ -8,7 +8,7 @@
crm.lead.report.tree
crm.lead.report
-
+
@@ -130,7 +130,7 @@
crm.lead.report.tree
crm.lead.report
-
+
diff --git a/addons/crm/report/crm_phonecall_report_view.xml b/addons/crm/report/crm_phonecall_report_view.xml
index ec7ea5e6bdb..a2120aef6ab 100644
--- a/addons/crm/report/crm_phonecall_report_view.xml
+++ b/addons/crm/report/crm_phonecall_report_view.xml
@@ -8,7 +8,7 @@
crm.phonecall.report.tree
crm.phonecall.report
-
+
diff --git a/addons/crm/res_config.py b/addons/crm/res_config.py
index b04853d9f6a..6f431b90cba 100644
--- a/addons/crm/res_config.py
+++ b/addons/crm/res_config.py
@@ -32,6 +32,13 @@ class crm_configuration(osv.osv_memory):
'group_fund_raising': fields.boolean("Manage Fund Raising",
implied_group='crm.group_fund_raising',
help="""Allows you to trace and manage your activities for fund raising."""),
+ 'module_crm_claim':fields.boolean("Manage Customer Claims",
+ help="""Allows you to track your customers/suppliers claims and grievances.
+ This installs the module crm_claim."""),
+ 'module_crm_helpdesk':fields.boolean("Manage Helpdesk and Support",
+ help="""Allows you to communicate with Customer, process Customer query, and provide better help and support. This installs the module crm_helpdesk."""),
+
+
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/crm/res_config_view.xml b/addons/crm/res_config_view.xml
index 6330d7a0500..9534c8620ee 100644
--- a/addons/crm/res_config_view.xml
+++ b/addons/crm/res_config_view.xml
@@ -7,6 +7,22 @@
sale.config.settings
+
diff --git a/addons/crm_claim/__openerp__.py b/addons/crm_claim/__openerp__.py
index f5ab836401b..dfc549412d4 100644
--- a/addons/crm_claim/__openerp__.py
+++ b/addons/crm_claim/__openerp__.py
@@ -25,8 +25,10 @@
'version': '1.0',
'category': 'Customer Relationship Management',
'description': """
-This modules allows you to track your customers/suppliers claims and grievances.
+
+Manage Customer Claims.
================================================================================
+This application allows you to track your customers/suppliers claims and grievances.
It is fully integrated with the email gateway so that you can create
automatically new claims based on incoming emails.
diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py
index cbf3ec9f13a..c88b2fe26af 100644
--- a/addons/crm_claim/crm_claim.py
+++ b/addons/crm_claim/crm_claim.py
@@ -26,6 +26,7 @@ from osv import fields, osv
import time
import tools
from tools.translate import _
+from tools import html2plaintext
CRM_CLAIM_PENDING_STATES = (
crm.AVAILABLE_STATES[2][0], # Cancelled
@@ -192,9 +193,10 @@ class crm_claim(base_stage, osv.osv):
This override updates the document according to the email.
"""
if custom_values is None: custom_values = {}
+ desc = html2plaintext(msg.get('body')) if msg.get('body') else ''
custom_values.update({
'name': msg.get('subject') or _("No Subject"),
- 'description': msg.get('body'),
+ 'description': desc,
'email_from': msg.get('from'),
'email_cc': msg.get('cc'),
})
diff --git a/addons/crm_claim/report/crm_claim_report_view.xml b/addons/crm_claim/report/crm_claim_report_view.xml
index 5a3a3d92a09..a61490c6086 100644
--- a/addons/crm_claim/report/crm_claim_report_view.xml
+++ b/addons/crm_claim/report/crm_claim_report_view.xml
@@ -8,7 +8,7 @@
crm.claim.report.tree
crm.claim.report
-
+
diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py
index f36a3b72640..ceffd282aa8 100644
--- a/addons/crm_helpdesk/crm_helpdesk.py
+++ b/addons/crm_helpdesk/crm_helpdesk.py
@@ -25,6 +25,7 @@ from crm import crm
from osv import fields, osv
import tools
from tools.translate import _
+from tools import html2plaintext
CRM_HELPDESK_STATES = (
crm.AVAILABLE_STATES[2][0], # Cancelled
@@ -104,9 +105,10 @@ class crm_helpdesk(base_state, base_stage, osv.osv):
This override updates the document according to the email.
"""
if custom_values is None: custom_values = {}
+ desc = html2plaintext(msg.get('body')) if msg.get('body') else ''
custom_values.update({
'name': msg.get('subject') or _("No Subject"),
- 'description': msg.get('body'),
+ 'description': desc,
'email_from': msg.get('from'),
'email_cc': msg.get('cc'),
'user_id': False,
diff --git a/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml b/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml
index 4750fa3344d..05f502656d2 100644
--- a/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml
+++ b/addons/crm_helpdesk/report/crm_helpdesk_report_view.xml
@@ -8,7 +8,7 @@
crm.helpdesk.report.tree
crm.helpdesk.report
-
+
diff --git a/addons/crm_partner_assign/report/crm_lead_report_view.xml b/addons/crm_partner_assign/report/crm_lead_report_view.xml
index 662a7c3dce0..ee9266a0235 100644
--- a/addons/crm_partner_assign/report/crm_lead_report_view.xml
+++ b/addons/crm_partner_assign/report/crm_lead_report_view.xml
@@ -65,7 +65,7 @@
crm.lead.assign.report.tree
crm.lead.report.assign
-
+
diff --git a/addons/crm_partner_assign/report/crm_partner_report_view.xml b/addons/crm_partner_assign/report/crm_partner_report_view.xml
index 107328ac4e0..eb2c86874c4 100644
--- a/addons/crm_partner_assign/report/crm_partner_report_view.xml
+++ b/addons/crm_partner_assign/report/crm_partner_report_view.xml
@@ -41,7 +41,7 @@
crm.partner.assign.report.tree
crm.partner.report.assign
-
+
diff --git a/addons/document/document.py b/addons/document/document.py
index 3ae783f49e7..37a0219d143 100644
--- a/addons/document/document.py
+++ b/addons/document/document.py
@@ -36,8 +36,7 @@ DMS_ROOT_PATH = tools.config.get('document_path', os.path.join(tools.config['roo
class document_file(osv.osv):
_inherit = 'ir.attachment'
- _rec_name = 'datas_fname'
-
+ _rec_name = 'name'
def _attach_parent_id(self, cr, uid, ids=None, context=None):
"""Migrate ir.attachments to the document module.
@@ -149,29 +148,12 @@ class document_file(osv.osv):
_sql_constraints = [
# filename_uniq is not possible in pure SQL
]
- def _check_duplication(self, cr, uid, vals, ids=None, op='create'):
- name = vals.get('name', False)
- parent_id = vals.get('parent_id', False)
- res_model = vals.get('res_model', False)
- res_id = vals.get('res_id', 0)
- if op == 'write':
- for file in self.browse(cr, uid, ids): # FIXME fields_only
- if not name:
- name = file.name
- if not parent_id:
- parent_id = file.parent_id and file.parent_id.id or False
- if not res_model:
- res_model = file.res_model and file.res_model or False
- if not res_id:
- res_id = file.res_id and file.res_id or 0
- res = self.search(cr, uid, [('id', '<>', file.id), ('name', '=', name), ('parent_id', '=', parent_id), ('res_model', '=', res_model), ('res_id', '=', res_id)])
- if len(res):
- return False
- if op == 'create':
- res = self.search(cr, uid, [('name', '=', name), ('parent_id', '=', parent_id), ('res_id', '=', res_id), ('res_model', '=', res_model)])
- if len(res):
- return False
- return True
+
+ def onchange_file(self, cr, uid, ids, datas_fname=False, context=None):
+ res = {'value':{}}
+ if datas_fname:
+ res['value'].update({'name': datas_fname})
+ return res
def check(self, cr, uid, ids, mode, context=None, values=None):
"""Check access wrt. res_model, relax the rule of ir.attachment parent
@@ -219,8 +201,6 @@ class document_file(osv.osv):
res = self.search(cr, uid, [('id', 'in', ids)])
if not len(res):
return False
- if not self._check_duplication(cr, uid, vals, ids, 'write'):
- raise osv.except_osv(_('ValidateError'), _('File name must be unique!'))
# if nodes call this write(), they must skip the code below
from_node = context and context.get('__from_node', False)
@@ -286,22 +266,8 @@ class document_file(osv.osv):
else:
if vals.get('file_size'):
del vals['file_size']
- result = self._check_duplication(cr, uid, vals)
- if not result:
- domain = [
- ('res_id', '=', vals['res_id']),
- ('res_model', '=', vals['res_model']),
- ('datas_fname', '=', vals['datas_fname']),
- ]
- attach_ids = self.search(cr, uid, domain, context=context)
- super(document_file, self).write(cr, uid, attach_ids,
- {'datas' : vals['datas']},
- context=context)
- result = attach_ids[0]
- else:
- #raise osv.except_osv(_('ValidateError'), _('File name must be unique!'))
- result = super(document_file, self).create(cr, uid, vals, context)
- return result
+
+ return super(document_file, self).create(cr, uid, vals, context)
def __get_partner_id(self, cr, uid, res_model, res_id, context=None):
""" A helper to retrieve the associated partner from any res_model+id
diff --git a/addons/document/document_view.xml b/addons/document/document_view.xml
index b631583fb27..54776c4d36e 100644
--- a/addons/document/document_view.xml
+++ b/addons/document/document_view.xml
@@ -228,6 +228,9 @@
+
+
+
@@ -338,15 +341,6 @@
-
- ir.attachment.view.inherit
- ir.attachment
-
-
-
-
-
-
process.node.form
diff --git a/addons/document_page/document_page_view.xml b/addons/document_page/document_page_view.xml
index 63f208c08a7..d8daaada967 100644
--- a/addons/document_page/document_page_view.xml
+++ b/addons/document_page/document_page_view.xml
@@ -55,7 +55,7 @@
-
+
diff --git a/addons/document_page/wizard/document_page_show_diff_view.xml b/addons/document_page/wizard/document_page_show_diff_view.xml
index b1dfb536853..e2d5ef1af4b 100644
--- a/addons/document_page/wizard/document_page_show_diff_view.xml
+++ b/addons/document_page/wizard/document_page_show_diff_view.xml
@@ -8,7 +8,7 @@
wizard.document.page.history.show_diff
diff --git a/addons/email_template/wizard/mail_compose_message_view.xml b/addons/email_template/wizard/mail_compose_message_view.xml
index 8d5bc26b213..655f5b9d0c2 100644
--- a/addons/email_template/wizard/mail_compose_message_view.xml
+++ b/addons/email_template/wizard/mail_compose_message_view.xml
@@ -39,7 +39,7 @@
attrs="{'invisible':[('use_template','=',False)]}"
on_change="onchange_template_id(use_template, template_id, composition_mode, model, res_id, context)"/>
-
+
-
+
-
+
diff --git a/addons/event/report/report_event_registration.py b/addons/event/report/report_event_registration.py
index 060b1ef7556..042676d0c32 100644
--- a/addons/event/report/report_event_registration.py
+++ b/addons/event/report/report_event_registration.py
@@ -23,16 +23,16 @@ from osv import fields, osv
import tools
class report_event_registration(osv.osv):
-
_name = "report.event.registration"
_description = "Events Analysis"
_auto = False
_columns = {
'event_date': fields.char('Event Start Date', size=64, readonly=True),
'year': fields.char('Year', size=4, readonly=True),
- 'month': fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
- ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
- ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
+ 'month': fields.selection([
+ ('01','January'), ('02','February'), ('03','March'), ('04','April'),
+ ('05','May'), ('06','June'), ('07','July'), ('08','August'),
+ ('09','September'), ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
'event_id': fields.many2one('event.event', 'Event', required=True),
'draft_state': fields.integer(' # No of Draft Registrations', size=20),
'confirm_state': fields.integer(' # No of Confirmed Registrations', size=20),
@@ -48,17 +48,18 @@ class report_event_registration(osv.osv):
'company_id': fields.many2one('res.company', 'Company', readonly=True),
}
_order = 'event_date desc'
+
def init(self, cr):
"""
- initialize the sql view for the event registration
- cr -- the cursor
+ Initialize the sql view for the event registration
"""
tools.drop_view_if_exists(cr, 'report_event_registration')
- cr.execute("""
- CREATE OR REPLACE view report_event_registration AS (
- SELECT
- event_id,
- r.id,
+
+ # TOFIX this request won't select events that have no registration
+ cr.execute(""" CREATE VIEW report_event_registration AS (
+ SELECT
+ e.id::char || '/' || coalesce(r.id::char,'') AS id,
+ e.id AS event_id,
e.user_id AS user_id,
r.user_id AS user_id_registration,
r.name AS name_registration,
@@ -72,23 +73,21 @@ class report_event_registration(osv.osv):
CASE WHEN r.state IN ('open','done') THEN r.nb_register ELSE 0 END AS confirm_state,
e.type AS event_type,
e.register_max AS register_max,
- e.state AS event_state,
- r.state AS registration_state
- FROM
+ e.state AS event_state,
+ r.state AS registration_state
+ FROM
event_event e
+ LEFT JOIN event_registration r ON (e.id=r.event_id)
- LEFT JOIN
- event_registration r ON (e.id=r.event_id)
-
- GROUP BY
+ GROUP BY
event_id,
user_id_registration,
- e.id,
r.id,
registration_state,
r.nb_register,
- event_type, e.id, e.date_begin, e.main_speaker_id,
- e.register_max,event_id, e.user_id,e.company_id,
+ event_type,
+ e.id,
+ e.date_begin,
e.user_id,
event_state,
e.company_id,
@@ -97,9 +96,8 @@ class report_event_registration(osv.osv):
month,
e.register_max,
name_registration
-
- )
- """)
+ )
+ """)
report_event_registration()
diff --git a/addons/event/report/report_event_registration_view.xml b/addons/event/report/report_event_registration_view.xml
index f39b6aecfe7..249757efbd3 100644
--- a/addons/event/report/report_event_registration_view.xml
+++ b/addons/event/report/report_event_registration_view.xml
@@ -1,13 +1,13 @@
-
+
-
+
report.event.registration.tree
report.event.registration
-
+
@@ -28,7 +28,6 @@
-
report.event.registration.graph
report.event.registration
@@ -42,8 +41,7 @@
-
-
+
report.event.registration.search
report.event.registration
@@ -82,28 +80,28 @@
-
+
Events Analysis
report.event.registration
form
tree,graph
- {"search_default_year":1,"search_default_this_month":1,"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, 'group_by_no_leaf':1, 'group_by':[]}
+ {"search_default_year":1,"search_default_this_month":1,"search_default_365day":1, "search_default_invoiced":1, "search_default_event":1, "group_by_no_leaf":1, "group_by":[]}
-
+
tree
-
+
-
+
graph
-
+
diff --git a/addons/event_sale/event_sale_view.xml b/addons/event_sale/event_sale_view.xml
index 52f935a0760..ab7568d704e 100644
--- a/addons/event_sale/event_sale_view.xml
+++ b/addons/event_sale/event_sale_view.xml
@@ -6,10 +6,10 @@
product.product
-
+
-
+
diff --git a/addons/google_docs/__openerp__.py b/addons/google_docs/__openerp__.py
index b02f2e912fc..8b9a4123aa9 100644
--- a/addons/google_docs/__openerp__.py
+++ b/addons/google_docs/__openerp__.py
@@ -27,7 +27,6 @@
'category': 'Tools',
'installable': True,
'auto_install': False,
- 'web': True,
'js': ['static/src/js/gdocs.js'],
'data': [
'security/ir.model.access.csv',
diff --git a/addons/google_docs/google_docs.py b/addons/google_docs/google_docs.py
index f1477f9c7f2..5ff80530c94 100644
--- a/addons/google_docs/google_docs.py
+++ b/addons/google_docs/google_docs.py
@@ -26,8 +26,11 @@ try:
from gdata.client import RequestError
from gdata.docs.service import DOCUMENT_LABEL
import gdata.auth
+ from gdata.docs.data import Resource
except ImportError:
- raise osv.except_osv(_('Google Docs Error!'), _('Please install gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list.'))
+ import logging
+ _logger = logging.getLogger(__name__)
+ _logger.warning("Please install latest gdata-python-client from http://code.google.com/p/gdata-python-client/downloads/list")
class google_docs_ir_attachment(osv.osv):
_inherit = 'ir.attachment'
diff --git a/addons/google_docs/res_config_user_view.xml b/addons/google_docs/res_config_user_view.xml
index 4aabba3ac5a..e6c4223735f 100644
--- a/addons/google_docs/res_config_user_view.xml
+++ b/addons/google_docs/res_config_user_view.xml
@@ -8,9 +8,10 @@
google_docs.config.tree
google.docs.config
-
+
-
+
+
@@ -18,11 +19,25 @@
google_docs.config.form
google.docs.config
-
-
-
-
-
+
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index 89c327f4d13..361bb581b14 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -42,14 +42,14 @@
-
+
-
+
@@ -57,14 +57,14 @@
-
+
-
+
@@ -334,13 +334,10 @@
-
-
-
-
-
-
-
+
+
+
+
@@ -349,7 +346,7 @@
-
+
diff --git a/addons/hr_contract/i18n/mk.po b/addons/hr_contract/i18n/mk.po
new file mode 100644
index 00000000000..2a4011c9e0d
--- /dev/null
+++ b/addons/hr_contract/i18n/mk.po
@@ -0,0 +1,271 @@
+# Macedonian 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 , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-10-09 08:00+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Macedonian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-10-10 04:44+0000\n"
+"X-Generator: Launchpad (build 16112)\n"
+
+#. module: hr_contract
+#: field:hr.contract,wage:0
+msgid "Wage"
+msgstr "Плата"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Information"
+msgstr "Информации"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Trial Period"
+msgstr "Пробен Период"
+
+#. module: hr_contract
+#: field:hr.contract,trial_date_start:0
+msgid "Trial Start Date"
+msgstr "Пробен Почетен Датум"
+
+#. module: hr_contract
+#: view:hr.employee:0
+msgid "Medical Examination"
+msgstr "Систематски Преглед"
+
+#. module: hr_contract
+#: field:hr.employee,vehicle:0
+msgid "Company Vehicle"
+msgstr "Службено Возило"
+
+#. module: hr_contract
+#: view:hr.employee:0
+msgid "Miscellaneous"
+msgstr "Разно"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Current"
+msgstr "Тековен"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Group By..."
+msgstr "Групирај По..."
+
+#. module: hr_contract
+#: field:hr.contract,department_id:0
+msgid "Department"
+msgstr "Сектор"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Overpassed"
+msgstr "Изминат"
+
+#. module: hr_contract
+#: view:hr.contract:0
+#: field:hr.contract,employee_id:0
+#: model:ir.model,name:hr_contract.model_hr_employee
+msgid "Employee"
+msgstr "Вработен"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Search Contract"
+msgstr "Пребарај Договор"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Contracts in progress"
+msgstr "Договори во тек"
+
+#. module: hr_contract
+#: field:hr.employee,vehicle_distance:0
+msgid "Home-Work Distance"
+msgstr "Дома-Работа Одалеченост"
+
+#. module: hr_contract
+#: view:hr.contract:0
+#: field:hr.employee,contract_ids:0
+#: model:ir.actions.act_window,name:hr_contract.act_hr_employee_2_hr_contract
+#: model:ir.actions.act_window,name:hr_contract.action_hr_contract
+#: model:ir.ui.menu,name:hr_contract.hr_menu_contract
+msgid "Contracts"
+msgstr "Договори"
+
+#. module: hr_contract
+#: view:hr.employee:0
+msgid "Personal Info"
+msgstr "Лични информации"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Contracts whose end date already passed"
+msgstr "Договори чии што краен рок е веќе поминат"
+
+#. module: hr_contract
+#: help:hr.employee,contract_id:0
+msgid "Latest contract of the employee"
+msgstr "Последен договор на вработениот"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Job"
+msgstr "Работно Место"
+
+#. module: hr_contract
+#: view:hr.contract:0
+#: field:hr.contract,advantages:0
+msgid "Advantages"
+msgstr "Придобивки"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Valid for"
+msgstr "Валиден за"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Work Permit"
+msgstr "Дозвола за Работа"
+
+#. module: hr_contract
+#: field:hr.employee,children:0
+msgid "Number of Children"
+msgstr "Број на Деца"
+
+#. module: hr_contract
+#: model:ir.actions.act_window,name:hr_contract.action_hr_contract_type
+#: model:ir.ui.menu,name:hr_contract.hr_menu_contract_type
+msgid "Contract Types"
+msgstr "Типови на Договор"
+
+#. module: hr_contract
+#: constraint:hr.employee:0
+msgid "Error ! You cannot create recursive Hierarchy of Employees."
+msgstr "Грешка! Не можете да креирате рекурзивна хиерархија на вработените."
+
+#. module: hr_contract
+#: field:hr.contract,date_end:0
+msgid "End Date"
+msgstr "Краен датум"
+
+#. module: hr_contract
+#: help:hr.contract,wage:0
+msgid "Basic Salary of the employee"
+msgstr "Основна Плата на вработениот"
+
+#. module: hr_contract
+#: field:hr.contract,name:0
+msgid "Contract Reference"
+msgstr "Референца"
+
+#. module: hr_contract
+#: help:hr.employee,vehicle_distance:0
+msgid "In kilometers"
+msgstr "во километри"
+
+#. module: hr_contract
+#: view:hr.contract:0
+#: field:hr.contract,notes:0
+msgid "Notes"
+msgstr "Забелешки"
+
+#. module: hr_contract
+#: field:hr.contract,permit_no:0
+msgid "Work Permit No"
+msgstr "Број на Дозвола за Работа"
+
+#. module: hr_contract
+#: view:hr.contract:0
+#: field:hr.employee,contract_id:0
+#: model:ir.model,name:hr_contract.model_hr_contract
+#: model:ir.ui.menu,name:hr_contract.next_id_56
+msgid "Contract"
+msgstr "Договор"
+
+#. module: hr_contract
+#: view:hr.contract:0
+#: field:hr.contract,type_id:0
+#: view:hr.contract.type:0
+#: field:hr.contract.type,name:0
+#: model:ir.model,name:hr_contract.model_hr_contract_type
+msgid "Contract Type"
+msgstr "Тип на Договор"
+
+#. module: hr_contract
+#: view:hr.contract:0
+#: field:hr.contract,working_hours:0
+msgid "Working Schedule"
+msgstr "Распоред за Работа"
+
+#. module: hr_contract
+#: view:hr.employee:0
+msgid "Job Info"
+msgstr "Информации за Работата"
+
+#. module: hr_contract
+#: field:hr.contract,visa_expire:0
+msgid "Visa Expire Date"
+msgstr "Виза Датум на Истекување"
+
+#. module: hr_contract
+#: field:hr.contract,job_id:0
+msgid "Job Title"
+msgstr "Звање"
+
+#. module: hr_contract
+#: field:hr.employee,manager:0
+msgid "Is a Manager"
+msgstr "Менаџер"
+
+#. module: hr_contract
+#: field:hr.contract,date_start:0
+msgid "Start Date"
+msgstr "Почетен датум"
+
+#. module: hr_contract
+#: constraint:hr.contract:0
+msgid "Error! contract start-date must be lower then contract end-date."
+msgstr ""
+"Грешка! Почетниот датум на договорот мора да биде помал од крајниот датум."
+
+#. module: hr_contract
+#: field:hr.contract,visa_no:0
+msgid "Visa No"
+msgstr "Број на Виза"
+
+#. module: hr_contract
+#: field:hr.employee,place_of_birth:0
+msgid "Place of Birth"
+msgstr "Место на раѓање"
+
+#. module: hr_contract
+#: view:hr.contract:0
+msgid "Duration"
+msgstr "Траење"
+
+#. module: hr_contract
+#: field:hr.employee,medic_exam:0
+msgid "Medical Examination Date"
+msgstr "Датум за Систематски Преглед"
+
+#. module: hr_contract
+#: field:hr.contract,trial_date_end:0
+msgid "Trial End Date"
+msgstr "Пробен Краен Датум"
+
+#. module: hr_contract
+#: view:hr.contract.type:0
+msgid "Search Contract Type"
+msgstr "Пребарај Тип на Договор"
diff --git a/addons/hr_evaluation/report/hr_evaluation_report_view.xml b/addons/hr_evaluation/report/hr_evaluation_report_view.xml
index fb1186ae401..d4907c90f11 100644
--- a/addons/hr_evaluation/report/hr_evaluation_report_view.xml
+++ b/addons/hr_evaluation/report/hr_evaluation_report_view.xml
@@ -6,7 +6,7 @@
hr.evaluation.report.tree
hr.evaluation.report
-
diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py
index 91dc44fed61..487e4f58782 100644
--- a/addons/hr_expense/hr_expense.py
+++ b/addons/hr_expense/hr_expense.py
@@ -243,7 +243,7 @@ class product_product(osv.osv):
data_obj = self.pool.get('ir.model.data')
cat_id = data_obj._get_id(cr, uid, 'hr_expense', 'cat_expense')
categ_id = data_obj.browse(cr, uid, cat_id).res_id
- res = {'value' : {'type':'service','procure_method':'make_to_stock','supply_method':'buy','purchase_ok':True,'sale_ok' :False,'categ_id':categ_id }}
+ res = {'value' : {'type':'service','sale_ok' :False,'categ_id':categ_id }}
return res
product_product()
diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml
index 67d629eee6a..76393d9e030 100644
--- a/addons/hr_expense/hr_expense_view.xml
+++ b/addons/hr_expense/hr_expense_view.xml
@@ -124,7 +124,7 @@
@@ -196,10 +196,10 @@
product.product
-
+
-
+
diff --git a/addons/hr_expense/report/expense.rml b/addons/hr_expense/report/expense.rml
index bf456cfc4d6..3e07516c01b 100644
--- a/addons/hr_expense/report/expense.rml
+++ b/addons/hr_expense/report/expense.rml
@@ -231,7 +231,7 @@
[[ formatLang(line.unit_quantity) ]]
- [[ formatLang(line.total_amount) ]] [[ o.currency_id.symbol ]]
+ [[ formatLang(line.total_amount, currency_obj=o.currency_id) ]]
@@ -277,7 +277,7 @@
Total:
- [[ formatLang(o.amount) ]] [[ o.currency_id.symbol ]]
+ [[ formatLang(o.amount, currency_obj=o.currency_id) ]]
diff --git a/addons/hr_expense/report/hr_expense_report_view.xml b/addons/hr_expense/report/hr_expense_report_view.xml
index 1cd1e10c5ed..9f94c264c5e 100644
--- a/addons/hr_expense/report/hr_expense_report_view.xml
+++ b/addons/hr_expense/report/hr_expense_report_view.xml
@@ -6,7 +6,7 @@
hr.expense.report.tree
hr.expense.report
-
+
diff --git a/addons/hr_expense/security/ir.model.access.csv b/addons/hr_expense/security/ir.model.access.csv
index 0455302319e..092424ef7e6 100644
--- a/addons/hr_expense/security/ir.model.access.csv
+++ b/addons/hr_expense/security/ir.model.access.csv
@@ -9,6 +9,7 @@ access_product_template_hr_expense_user,product.template.hr.expense.user,product
access_product_uom_hr_expense_user,product.uom.hr.expense.user,product.model_product_uom,base.group_hr_user,1,1,1,1
access_product_price_type_user,product.price.type.user,product.model_product_price_type,base.group_hr_user,1,1,1,1
access_account_journal_user,account.journal.user,account.model_account_journal,base.group_hr_user,1,1,1,1
+access_account_journal_employee,account.journal.employee,account.model_account_journal,base.group_user,1,0,0,0
access_account_invoice_user,account.invoice.user,account.model_account_invoice,base.group_hr_user,1,1,1,1
access_account_invoice_line_user,account.invoice.line.user,account.model_account_invoice_line,base.group_hr_user,1,1,1,1
access_account_analytic_journal_user,account.ianalytic.journal.user,account.model_account_analytic_journal,base.group_hr_user,1,1,1,1
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index ae85b03fcaf..6e3c9b2d083 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -353,6 +353,32 @@
+
+ Allocation Requests to Approve
+ hr.holidays
+ form
+ {'default_type': 'add', 'search_default_approve':1}
+ [('type','=','add')]
+
+
+
+
+
+
+ tree
+
+
+
+
+
+
+ form
+
+
+
+
+
+
Leaves Summary
hr.holidays
diff --git a/addons/hr_holidays/i18n/mk.po b/addons/hr_holidays/i18n/mk.po
new file mode 100644
index 00000000000..2694317ebe9
--- /dev/null
+++ b/addons/hr_holidays/i18n/mk.po
@@ -0,0 +1,864 @@
+# Macedonian 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 , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-10-09 08:43+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Macedonian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-10-10 04:44+0000\n"
+"X-Generator: Launchpad (build 16112)\n"
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Blue"
+msgstr "Сина"
+
+#. module: hr_holidays
+#: field:hr.holidays,holiday_type:0
+msgid "Allocation Type"
+msgstr "Тип на Алокација"
+
+#. module: hr_holidays
+#: selection:hr.employee,current_leave_state:0
+#: selection:hr.holidays,state:0
+msgid "Waiting Second Approval"
+msgstr "Се чека на второ одобрување"
+
+#. module: hr_holidays
+#: help:hr.holidays.status,remaining_leaves:0
+msgid "Maximum Leaves Allowed - Leaves Already Taken"
+msgstr "Мкасимален број на дозволени отсуства - Отсуствата се веќе земени"
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Leaves Management"
+msgstr "Менаџирање на Отсуства"
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Group By..."
+msgstr "Групирај По..."
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Allocation Mode"
+msgstr "Мод на Алокација"
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: field:hr.holidays,department_id:0
+msgid "Department"
+msgstr "Сектор"
+
+#. module: hr_holidays
+#: model:ir.actions.act_window,name:hr_holidays.request_approve_holidays
+msgid "Requests Approve"
+msgstr "Одобри Барања"
+
+#. module: hr_holidays
+#: selection:hr.employee,current_leave_state:0
+#: selection:hr.holidays,state:0
+msgid "Refused"
+msgstr "Одбиени"
+
+#. module: hr_holidays
+#: help:hr.holidays,category_id:0
+msgid "Category of Employee"
+msgstr "Категорија на Вработен"
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid " Month-1"
+msgstr " Месец-1"
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Brown"
+msgstr "Кафена"
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Remaining Days"
+msgstr "Останати Денови"
+
+#. module: hr_holidays
+#: selection:hr.holidays,holiday_type:0
+msgid "By Employee"
+msgstr "По Вработен"
+
+#. module: hr_holidays
+#: help:hr.holidays,employee_id:0
+msgid ""
+"Leave Manager can let this field empty if this leave request/allocation is "
+"for every employee"
+msgstr ""
+"Менаџерот за отсуства може да го остави ова поле празно ако барањето за "
+"отсуство/преместување е за секој вработен"
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Set to Draft"
+msgstr "Подеси на нацрт"
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Light Cyan"
+msgstr "Светла Цијан"
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Light Green"
+msgstr "Светло зелено"
+
+#. module: hr_holidays
+#: field:hr.employee,current_leave_id:0
+msgid "Current Leave Type"
+msgstr "Тековен Тип на Отсуство"
+
+#. module: hr_holidays
+#: model:ir.actions.act_window,help:hr_holidays.open_ask_holidays
+msgid ""
+"Leave requests can be recorded by employees and validated by their managers. "
+"Once a leave request is validated, it appears automatically in the agenda of "
+"the employee. You can define several allowance types (paid holidays, "
+"sickness, etc.) and manage allowances per type."
+msgstr ""
+
+#. module: hr_holidays
+#: model:ir.actions.report.xml,name:hr_holidays.report_holidays_summary
+msgid "Summary Of Leaves"
+msgstr "Збир на Отсуства"
+
+#. module: hr_holidays
+#: selection:hr.employee,current_leave_state:0
+#: view:hr.holidays:0
+#: selection:hr.holidays,state:0
+msgid "Approved"
+msgstr "Одобрено"
+
+#. module: hr_holidays
+#: field:hr.employee,last_login:0
+msgid "Latest Connection"
+msgstr "Последна Конекција"
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Refuse"
+msgstr "Одбиј"
+
+#. module: hr_holidays
+#: code:addons/hr_holidays/hr_holidays.py:344
+#, python-format
+msgid ""
+"You cannot validate leaves for employee %s: too few remaining days (%s)."
+msgstr ""
+"Не можете да валидирате отсуства за вработениот %s: премалку преостанати "
+"денови (%s)."
+
+#. module: hr_holidays
+#: help:hr.holidays,state:0
+msgid ""
+"The state is set to 'Draft', when a holiday request is created. \n"
+"The state is 'Waiting Approval', when holiday request is confirmed by user. "
+" \n"
+"The state is 'Refused', when holiday request is refused by manager. "
+" \n"
+"The state is 'Approved', when holiday request is approved by manager."
+msgstr ""
+
+#. module: hr_holidays
+#: view:board.board:0
+#: model:ir.actions.act_window,name:hr_holidays.act_hr_employee_holiday_request
+#: model:ir.ui.menu,name:hr_holidays.menu_hr_reporting_holidays
+#: model:ir.ui.menu,name:hr_holidays.menu_open_ask_holidays
+msgid "Leaves"
+msgstr "Отсуства"
+
+#. module: hr_holidays
+#: model:ir.model,name:hr_holidays.model_hr_holidays
+msgid "Leave"
+msgstr ""
+
+#. module: hr_holidays
+#: model:ir.ui.menu,name:hr_holidays.menu_request_approve_holidays
+msgid "Leave Requests to Approve"
+msgstr "Барања за отсуства за одобрување"
+
+#. module: hr_holidays
+#: model:ir.ui.menu,name:hr_holidays.menu_account_central_journal
+msgid "Leaves by Department"
+msgstr "Отсуства по Сектор"
+
+#. module: hr_holidays
+#: selection:hr.employee,current_leave_state:0
+#: selection:hr.holidays,state:0
+msgid "Cancelled"
+msgstr "Откажано"
+
+#. module: hr_holidays
+#: help:hr.holidays,type:0
+msgid ""
+"Choose 'Leave Request' if someone wants to take an off-day. \n"
+"Choose 'Allocation Request' if you want to increase the number of leaves "
+"available for someone"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.employee,remaining_leaves:0
+msgid ""
+"Total number of legal leaves allocated to this employee, change this value "
+"to create allocation/leave requests."
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays.status:0
+msgid "Validation"
+msgstr ""
+
+#. module: hr_holidays
+#: code:addons/hr_holidays/hr_holidays.py:377
+#, python-format
+msgid "Warning !"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.status,color_name:0
+msgid "Color in Report"
+msgstr ""
+
+#. module: hr_holidays
+#: model:ir.model,name:hr_holidays.model_hr_holidays_summary_employee
+msgid "HR Holidays Summary Report By Employee"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays,manager_id:0
+msgid "This area is automatically filled by the user who validate the leave"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,holiday_status_id:0
+#: field:hr.holidays.remaining.leaves.user,leave_type:0
+#: view:hr.holidays.status:0
+#: field:hr.holidays.status,name:0
+#: field:hr.holidays.summary.dept,holiday_type:0
+#: model:ir.actions.act_window,name:hr_holidays.open_view_holiday_status
+#: model:ir.model,name:hr_holidays.model_hr_holidays_status
+#: model:ir.ui.menu,name:hr_holidays.menu_open_view_holiday_status
+msgid "Leave Type"
+msgstr ""
+
+#. module: hr_holidays
+#: code:addons/hr_holidays/hr_holidays.py:199
+#: code:addons/hr_holidays/hr_holidays.py:344
+#, python-format
+msgid "Warning!"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Magenta"
+msgstr ""
+
+#. module: hr_holidays
+#: code:addons/hr_holidays/wizard/hr_holidays_summary_department.py:44
+#, python-format
+msgid "You have to select at least 1 Department. And try again"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.summary.dept,holiday_type:0
+#: selection:hr.holidays.summary.employee,holiday_type:0
+msgid "Confirmed"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.summary.dept,date_from:0
+#: field:hr.holidays.summary.employee,date_from:0
+msgid "From"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Confirm"
+msgstr ""
+
+#. module: hr_holidays
+#: code:addons/hr_holidays/hr_holidays.py:384
+#, python-format
+msgid "Leave Request for %s"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.status,remaining_leaves:0
+msgid "Remaining Leaves"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: field:hr.holidays,state:0
+msgid "State"
+msgstr ""
+
+#. module: hr_holidays
+#: model:ir.model,name:hr_holidays.model_hr_holidays_remaining_leaves_user
+msgid "Total holidays by type"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.employee:0
+#: view:hr.holidays:0
+#: field:hr.holidays,employee_id:0
+#: field:hr.holidays.remaining.leaves.user,name:0
+#: model:ir.model,name:hr_holidays.model_hr_employee
+msgid "Employee"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.employee,current_leave_state:0
+#: selection:hr.holidays,state:0
+msgid "New"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Type"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Red"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays.remaining.leaves.user:0
+msgid "Leaves by Type"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Light Salmon"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Wheat"
+msgstr ""
+
+#. module: hr_holidays
+#: constraint:resource.calendar.leaves:0
+msgid "Error! leave start-date must be lower then leave end-date."
+msgstr ""
+
+#. module: hr_holidays
+#: code:addons/hr_holidays/hr_holidays.py:382
+#, python-format
+msgid "Allocation for %s"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: field:hr.holidays,number_of_days:0
+#: field:hr.holidays,number_of_days_temp:0
+msgid "Number of Days"
+msgstr ""
+
+#. module: hr_holidays
+#: code:addons/hr_holidays/hr_holidays.py:377
+#, python-format
+msgid ""
+"The feature behind the field 'Remaining Legal Leaves' can only be used when "
+"there is only one leave type with the option 'Allow to Override Limit' "
+"unchecked. (%s Found). Otherwise, the update is ambiguous as we cannot "
+"decide on which leave type the update has to be done. \n"
+"You may prefer to use the classic menus 'Leave Requests' and 'Allocation "
+"Requests' located in 'Human Resources \\ Leaves' to manage the leave days of "
+"the employees if the configuration does not allow to use this field."
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays.status:0
+msgid "Search Leave Type"
+msgstr ""
+
+#. module: hr_holidays
+#: sql_constraint:hr.holidays:0
+msgid "You have to select an employee or a category"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays.status,double_validation:0
+msgid ""
+"When selected, the Allocation/Leave Requests for this type require a second "
+"validation to be approved."
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.employee,current_leave_state:0
+#: selection:hr.holidays,state:0
+msgid "Waiting Approval"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.summary.employee,emp:0
+msgid "Employee(s)"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays.status,categ_id:0
+msgid ""
+"If you set a meeting type, OpenERP will create a meeting in the calendar "
+"once a leave is validated."
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,linked_request_ids:0
+msgid "Linked Requests"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,parent_id:0
+msgid "Parent"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Lavender"
+msgstr ""
+
+#. module: hr_holidays
+#: xsl:holidays.summary:0
+#: view:hr.holidays:0
+msgid "Month"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: model:ir.actions.act_window,name:hr_holidays.open_ask_holidays
+#: model:ir.ui.menu,name:hr_holidays.menu_open_ask_holidays_new
+msgid "Leave Requests"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.status,limit:0
+msgid "Allow to Override Limit"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays.summary.employee:0
+#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_summary_employee
+msgid "Employee's Holidays"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: field:hr.holidays,category_id:0
+msgid "Category"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays.status,max_leaves:0
+msgid ""
+"This value is given by the sum of all holidays requests with a positive "
+"value."
+msgstr ""
+
+#. module: hr_holidays
+#: view:board.board:0
+msgid "All Employee Leaves"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Light Coral"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays.summary.dept:0
+#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_summary_dept
+msgid "Holidays by Department"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Black"
+msgstr ""
+
+#. module: hr_holidays
+#: model:ir.actions.act_window,name:hr_holidays.hr_holidays_leaves_assign_legal
+msgid "Allocate Leaves for Employees"
+msgstr ""
+
+#. module: hr_holidays
+#: field:resource.calendar.leaves,holiday_id:0
+msgid "Holiday"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,case_id:0
+#: field:hr.holidays.status,categ_id:0
+msgid "Meeting"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Ivory"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.summary.dept,holiday_type:0
+#: selection:hr.holidays.summary.employee,holiday_type:0
+msgid "Both Validated and Confirmed"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.status,leaves_taken:0
+msgid "Leaves Already Taken"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,user_id:0
+#: field:hr.holidays.remaining.leaves.user,user_id:0
+msgid "User"
+msgstr ""
+
+#. module: hr_holidays
+#: sql_constraint:hr.holidays:0
+msgid "The start date must be before the end date !"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.status,active:0
+msgid "Active"
+msgstr ""
+
+#. module: hr_holidays
+#: constraint:hr.employee:0
+msgid "Error ! You cannot create recursive Hierarchy of Employees."
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.employee:0
+#: field:hr.employee,remaining_leaves:0
+msgid "Remaining Legal Leaves"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,manager_id:0
+msgid "First Approval"
+msgstr ""
+
+#. module: hr_holidays
+#: model:hr.holidays.status,name:hr_holidays.holiday_status_unpaid
+msgid "Unpaid"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: model:ir.actions.act_window,name:hr_holidays.open_company_allocation
+#: model:ir.ui.menu,name:hr_holidays.menu_open_company_allocation
+msgid "Leaves Summary"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Holidays during last month"
+msgstr ""
+
+#. module: hr_holidays
+#: code:addons/hr_holidays/wizard/hr_holidays_summary_department.py:44
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.employee:0
+msgid "Assign Leaves"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Light Blue"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "My Department Leaves"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.employee,current_leave_state:0
+msgid "Current Leave Status"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,type:0
+msgid "Request Type"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays.status,active:0
+msgid ""
+"If the active field is set to false, it will allow you to hide the leave "
+"type without removing it."
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays.status:0
+msgid "Misc"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "General"
+msgstr ""
+
+#. module: hr_holidays
+#: model:hr.holidays.status,name:hr_holidays.holiday_status_comp
+msgid "Compensatory Days"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: field:hr.holidays,notes:0
+msgid "Reasons"
+msgstr ""
+
+#. module: hr_holidays
+#: model:ir.actions.act_window,name:hr_holidays.action_hr_available_holidays_report
+#: model:ir.ui.menu,name:hr_holidays.menu_hr_available_holidays_report_tree
+msgid "Leaves Analysis"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays.summary.dept:0
+#: view:hr.holidays.summary.employee:0
+msgid "Cancel"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays.status,color_name:0
+msgid ""
+"This color will be used in the leaves summary located in Reporting\\Leaves "
+"by Departement"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: selection:hr.holidays.summary.dept,holiday_type:0
+#: selection:hr.holidays.summary.employee,holiday_type:0
+msgid "Validated"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: selection:hr.holidays,type:0
+msgid "Allocation Request"
+msgstr ""
+
+#. module: hr_holidays
+#: model:ir.model,name:hr_holidays.model_resource_calendar_leaves
+msgid "Leave Detail"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,double_validation:0
+#: field:hr.holidays.status,double_validation:0
+msgid "Apply Double Validation"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays.summary.dept:0
+#: view:hr.holidays.summary.employee:0
+msgid "Print"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays.status:0
+msgid "Details"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: model:ir.actions.act_window,name:hr_holidays.action_hr_holidays_leaves_by_month
+msgid "My Leaves"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays,holiday_type:0
+msgid "By Employee Category"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: selection:hr.holidays,type:0
+msgid "Leave Request"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,name:0
+msgid "Description"
+msgstr ""
+
+#. module: hr_holidays
+#: model:hr.holidays.status,name:hr_holidays.holiday_status_cl
+msgid "Legal Leaves"
+msgstr ""
+
+#. module: hr_holidays
+#: sql_constraint:hr.holidays:0
+msgid "The number of days must be greater than 0 !"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays,holiday_type:0
+msgid ""
+"By Employee: Allocation/Request for individual Employee, By Employee "
+"Category: Allocation/Request for group of employees in category"
+msgstr ""
+
+#. module: hr_holidays
+#: code:addons/hr_holidays/hr_holidays.py:199
+#, python-format
+msgid "You cannot delete a leave which is not in draft state !"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Search Leave"
+msgstr "Пребарај Отсуство"
+
+#. module: hr_holidays
+#: field:hr.holidays.summary.employee,holiday_type:0
+msgid "Select Holiday Type"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.remaining.leaves.user,no_of_leaves:0
+msgid "Remaining leaves"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.summary.dept,depts:0
+msgid "Department(s)"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,manager_id2:0
+msgid "Second Approval"
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays,date_to:0
+msgid "End Date"
+msgstr ""
+
+#. module: hr_holidays
+#: model:hr.holidays.status,name:hr_holidays.holiday_status_sl
+msgid "Sick Leaves"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays.status,limit:0
+msgid ""
+"If you select this checkbox, the system allows the employees to take more "
+"leaves than the available ones for this type."
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays.status,leaves_taken:0
+msgid ""
+"This value is given by the sum of all holidays requests with a negative "
+"value."
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Violet"
+msgstr ""
+
+#. module: hr_holidays
+#: model:ir.actions.act_window,help:hr_holidays.hr_holidays_leaves_assign_legal
+msgid ""
+"You can assign remaining Legal Leaves for each employee, OpenERP will "
+"automatically create and validate allocation requests."
+msgstr ""
+
+#. module: hr_holidays
+#: field:hr.holidays.status,max_leaves:0
+msgid "Maximum Allowed"
+msgstr ""
+
+#. module: hr_holidays
+#: help:hr.holidays,manager_id2:0
+msgid ""
+"This area is automaticly filled by the user who validate the leave with "
+"second level (If Leave type need second validation)"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Mode"
+msgstr ""
+
+#. module: hr_holidays
+#: model:ir.model,name:hr_holidays.model_hr_holidays_summary_dept
+msgid "HR Holidays Summary Report By Department"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Approve"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: field:hr.holidays,date_from:0
+msgid "Start Date"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+#: model:ir.actions.act_window,name:hr_holidays.open_allocation_holidays
+#: model:ir.ui.menu,name:hr_holidays.menu_open_allocation_holidays
+msgid "Allocation Requests"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Light Yellow"
+msgstr ""
+
+#. module: hr_holidays
+#: selection:hr.holidays.status,color_name:0
+msgid "Light Pink"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Manager"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "To Confirm"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "Year"
+msgstr ""
+
+#. module: hr_holidays
+#: view:hr.holidays:0
+msgid "To Approve"
+msgstr ""
diff --git a/addons/hr_payroll/i18n/es_MX.po b/addons/hr_payroll/i18n/es_MX.po
index a0f4837d947..24b8d615a63 100644
--- a/addons/hr_payroll/i18n/es_MX.po
+++ b/addons/hr_payroll/i18n/es_MX.po
@@ -1,1759 +1,1119 @@
-# Spanish translation for openobject-addons
-# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# Spanish (Mexico) 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 , 2010.
+# FIRST AUTHOR , 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-01-18 11:08+0000\n"
-"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
-"\n"
-"Language-Team: Spanish \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-10-10 21:29+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Spanish (Mexico) \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-09-05 05:46+0000\n"
-"X-Generator: Launchpad (build 13830)\n"
+"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
+"X-Generator: Launchpad (build 16118)\n"
#. module: hr_payroll
-#: report:employees.salary:0
-msgid "E-mail Address"
-msgstr "Dirección de correo electrónico"
+#: field:hr.payslip.line,condition_select:0
+#: field:hr.salary.rule,condition_select:0
+msgid "Condition Based on"
+msgstr ""
#. module: hr_payroll
-#: view:hr.allounce.deduction.categoty:0
-msgid "Based"
-msgstr "Basado"
+#: selection:hr.contract,schedule_pay:0
+msgid "Monthly"
+msgstr ""
#. module: hr_payroll
-#: field:hr.contract,net:0
-#: field:hr.employee,net:0
-#: field:hr.payroll.register,net:0
-#: field:hr.payslip,net:0
-#: report:salary.structure:0
-msgid "Net Salary"
-msgstr "Salario neto"
+#: view:hr.payslip:0 field:hr.payslip,line_ids:0
+#: model:ir.actions.act_window,name:hr_payroll.act_contribution_reg_payslip_lines
+msgid "Payslip Lines"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.line:0
+#: model:ir.model,name:hr_payroll.model_hr_salary_rule_category
+#: report:paylip.details:0
+msgid "Salary Rule Category"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.salary.rule.category,parent_id:0
+msgid ""
+"Linking a salary category to its parent is used only for the reporting "
+"purpose."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.payslip.line:0 view:hr.salary.rule:0
+msgid "Group By..."
+msgstr ""
#. module: hr_payroll
#: view:hr.payslip:0
-msgid "Recompute Sheet"
-msgstr "Recalcular plantilla"
+msgid "States"
+msgstr ""
#. module: hr_payroll
-#: report:employees.salary:0
-msgid "Employees Salary Details"
-msgstr "Detalles salario de los empleados"
+#: field:hr.payslip.line,input_ids:0 view:hr.salary.rule:0
+#: field:hr.salary.rule,input_ids:0
+msgid "Inputs"
+msgstr ""
#. module: hr_payroll
-#: report:employees.salary:0
-msgid "Allowances with Basic:"
-msgstr "Primas con base:"
+#: field:hr.payslip.line,parent_rule_id:0
+#: field:hr.salary.rule,parent_rule_id:0
+msgid "Parent Salary Rule"
+msgstr ""
#. module: hr_payroll
-#: report:employees.salary:0
-#: report:salary.structure:0
-msgid "Department"
-msgstr "Departamento"
-
-#. module: hr_payroll
-#: report:employees.salary:0
-msgid "Deductions:"
-msgstr "Deducciones:"
-
-#. module: hr_payroll
-#: field:company.contribution,gratuity:0
-msgid "Use for Gratuity ?"
-msgstr "¿Uso de propina?"
-
-#. module: hr_payroll
-#: field:hr.contract,working_days_per_week:0
-#: field:hr.payslip,working_days:0
-#: report:payslip.pdf:0
-msgid "Working Days"
-msgstr "Días de trabajo"
-
-#. module: hr_payroll
-#: selection:hr.allounce.deduction.categoty,type:0
-#: selection:hr.payslip.line,type:0
-msgid "Loan"
-msgstr "Préstamo"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-msgid "Salary Payment Register"
-msgstr "Registro de pago de nómina"
-
-#. module: hr_payroll
-#: field:hr.employee,slip_ids:0
-#: view:hr.payroll.register:0
-#: field:hr.payroll.register,line_ids:0
+#: field:hr.employee,slip_ids:0 view:hr.payslip:0 view:hr.payslip.run:0
+#: field:hr.payslip.run,slip_ids:0
#: model:ir.actions.act_window,name:hr_payroll.act_hr_employee_payslip_list
msgid "Payslips"
-msgstr "Nóminas"
-
-#. module: hr_payroll
-#: model:ir.actions.report.xml,name:hr_payroll.year_salary_report
-msgid "Year Salary Report"
-msgstr "Informe anual de salarios"
-
-#. module: hr_payroll
-#: selection:hr.payroll.register,state:0
-#: selection:hr.payslip,state:0
-msgid "Paid Salary"
-msgstr "Nómina pagada"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "("
-msgstr "("
-
-#. module: hr_payroll
-#: field:company.contribution,company_id:0
-#: field:hr.allounce.deduction.categoty,company_id:0
-#: field:hr.contibution.register,company_id:0
-#: field:hr.holidays.status,company_id:0
-#: field:hr.payroll.advice,company_id:0
-#: field:hr.payroll.register,company_id:0
-#: field:hr.payroll.structure,company_id:0
-#: field:hr.payslip,company_id:0
-msgid "Company"
-msgstr "Compañía"
-
-#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "The Manager"
-msgstr "El responsable"
-
-#. module: hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Letter Details"
-msgstr "Detalles de la carta"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-#: report:payslip.pdf:0
-msgid ","
-msgstr ","
-
-#. module: hr_payroll
-#: view:hr.payroll.advice:0
-#: view:hr.payroll.register:0
-#: view:hr.payslip:0
-msgid "Set to Draft"
-msgstr "Cambiar a borrador"
-
-#. module: hr_payroll
-#: code:addons/hr_payroll/hr_payroll.py:180
-#: code:addons/hr_payroll/hr_payroll.py:195
-#: code:addons/hr_payroll/hr_payroll.py:285
-#: code:addons/hr_payroll/hr_payroll.py:835
-#: code:addons/hr_payroll/hr_payroll.py:1111
-#: code:addons/hr_payroll/hr_payroll.py:1126
-#: code:addons/hr_payroll/hr_payroll.py:1410
-#, python-format
-msgid "Variable Error: %s "
-msgstr "Error variable: %s "
-
-#. module: hr_payroll
-#: view:hr.passport:0
-msgid "Expire"
-msgstr "Vencimiento"
-
-#. module: hr_payroll
-#: selection:hr.holidays.status,type:0
-msgid "Half-Pay Holiday"
-msgstr "Vacaciones con media paga"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-#: field:hr.payslip,other_pay:0
-msgid "Others"
-msgstr "Otros"
-
-#. module: hr_payroll
-#: field:hr.payslip.line,slip_id:0
-#: model:ir.model,name:hr_payroll.model_hr_payslip
-#: report:payslip.pdf:0
-msgid "Pay Slip"
-msgstr "Nómina"
-
-#. module: hr_payroll
-#: report:salary.structure:0
-msgid "Contract Detail:"
-msgstr "Detalles del contrato:"
-
-#. module: hr_payroll
-#: field:hr.payslip,igross:0
-#: field:hr.payslip,inet:0
-msgid "Calculaton Field"
-msgstr "Campo de cálculo"
-
-#. module: hr_payroll
-#: help:hr.payroll.advice,bank_id:0
-#: help:hr.payroll.register,bank_id:0
-msgid "Select the Bank Address from whcih the salary is going to be paid"
-msgstr "Seleccione la dirección del banco de donde se pagará la nómina."
-
-#. module: hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice.line,advice_id:0
-msgid "Bank Advice"
-msgstr "Aviso bancario"
-
-#. module: hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:hr.payroll.register,state:0
-#: selection:hr.payslip,state:0
-msgid "Reject"
-msgstr "Rechazado"
-
-#. module: hr_payroll
-#: selection:hr.allounce.deduction.categoty,type:0
-#: selection:hr.payslip.line,type:0
-msgid "Leaves"
-msgstr "Ausencias"
-
-#. module: hr_payroll
-#: field:hr.contibution.register.line,register_id:0
-#: view:hr.payslip:0
-#: field:hr.payslip,register_id:0
-#: report:payslip.pdf:0
-msgid "Register"
-msgstr "Registro"
-
-#. module: hr_payroll
-#: constraint:hr.employee:0
-msgid ""
-"Error ! You cannot select a department for which the employee is the manager."
msgstr ""
-"¡Error! No puede seleccionar un departamento que tenga el empleado como "
-"responsable."
#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Total Deductions"
-msgstr "Total deducciones"
+#: field:hr.payroll.structure,parent_id:0
+#: field:hr.salary.rule.category,parent_id:0
+msgid "Parent"
+msgstr ""
#. module: hr_payroll
-#: field:company.contribution.line,value:0
-#: field:hr.payslip.line.line,value:0
-msgid "Value"
-msgstr "Valor"
+#: report:paylip.details:0 report:payslip:0
+msgid "("
+msgstr ""
#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "Name of the Employee"
-msgstr "Nombre del empleado"
+#: field:hr.contribution.register,company_id:0
+#: field:hr.payroll.structure,company_id:0 field:hr.payslip,company_id:0
+#: field:hr.payslip.line,company_id:0 field:hr.salary.rule,company_id:0
+#: field:hr.salary.rule.category,company_id:0
+msgid "Company"
+msgstr ""
#. module: hr_payroll
-#: view:hr.contibution.register:0
-msgid "Register Lines"
-msgstr "Líneas de registro"
+#: view:hr.payslip:0
+msgid "Done Slip"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid ","
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.payslip.run:0
+msgid "Set to Draft"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.model,name:hr_payroll.model_hr_salary_rule
+msgid "hr.salary.rule"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,payslip_run_id:0
+#: model:ir.model,name:hr_payroll.model_hr_payslip_run
+msgid "Payslip Batches"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.employees:0
+msgid ""
+"This wizard will generate payslips for all selected employee(s) based on the "
+"dates and credit note specified on Payslips Run."
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 report:paylip.details:0
+#: report:payslip:0
+msgid "Quantity/Rate"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.input,payslip_id:0 field:hr.payslip.line,slip_id:0
+#: field:hr.payslip.worked_days,payslip_id:0
+#: model:ir.model,name:hr_payroll.model_hr_payslip report:payslip:0
+msgid "Pay Slip"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.employees:0
+msgid "Generate"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,amount_percentage_base:0
+#: help:hr.salary.rule,amount_percentage_base:0
+msgid "result will be affected to a variable"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0
+msgid "Total:"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.act_children_salary_rules
+msgid "All Children Rules"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.salary.rule:0
+msgid "Input Data"
+msgstr ""
+
+#. module: hr_payroll
+#: constraint:hr.payslip:0
+msgid "Payslip 'Date From' must be before 'Date To'."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 view:hr.salary.rule.category:0
+msgid "Notes"
+msgstr ""
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Salary Computation"
-msgstr "Cálculo de la nómina"
-
-#. module: hr_payroll
-#: field:hr.payroll.advice.line,amount:0
-#: report:payroll.advice:0
-#: report:salary.structure:0
-msgid "Amount"
-msgstr "Importe"
-
-#. module: hr_payroll
-#: code:addons/hr_payroll/hr_payroll.py:1225
-#, python-format
-msgid "Please check configuration of %s, payroll head is missing"
msgstr ""
-"Por favor, compruebe la configuración de %s, falta la cabecera de la nómina"
#. module: hr_payroll
-#: selection:company.contribution,amount_type:0
-msgid "Percentage"
-msgstr "Porcentaje"
+#: report:contribution.register.lines:0 field:hr.payslip.input,amount:0
+#: field:hr.payslip.line,amount:0 report:paylip.details:0 report:payslip:0
+msgid "Amount"
+msgstr ""
#. module: hr_payroll
-#: view:company.contribution:0
-#: view:hr.allounce.deduction.categoty:0
-msgid "Other Information"
-msgstr "Otra información"
-
-#. module: hr_payroll
-#: field:hr.passport,country_id:0
-msgid "Country of Issue"
-msgstr "País de emisión"
-
-#. module: hr_payroll
-#: field:hr.contibution.register.line,emp_deduction:0
-msgid "Employee Deduction"
-msgstr "Deducción del empleado"
-
-#. module: hr_payroll
-#: selection:hr.allounce.deduction.categoty,type:0
-#: selection:hr.payslip.line,type:0
-msgid "Other Deduction"
-msgstr "Otras deducciones"
-
-#. module: hr_payroll
-#: selection:hr.holidays.status,type:0
-msgid "Paid Holiday"
-msgstr "Vacaciones pagada"
-
-#. module: hr_payroll
-#: view:company.contribution:0
-#: view:hr.allounce.deduction.categoty:0
-#: view:hr.passport:0
-#: view:hr.payslip:0
-msgid "Group By..."
-msgstr "Agrupar por..."
-
-#. module: hr_payroll
-#: field:hr.passport,date_expire:0
-msgid "Passport Expire Date"
-msgstr "Fecha expiración pasaporte"
-
-#. module: hr_payroll
-#: selection:hr.holidays.status,type:0
-msgid "Un-Paid Holiday"
-msgstr "Vacaciones no pagadas"
-
-#. module: hr_payroll
-#: view:hr.passport:0
-msgid "Valid From"
-msgstr "Válido desde"
-
-#. module: hr_payroll
-#: help:hr.payslip,igross:0
-#: help:hr.payslip,inet:0
-msgid ""
-"Calculation field used for internal calculation, do not place this on form"
-msgstr "Campo usado en cálculos internos, no lo coloque en un formulario."
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Amount (in words) :"
-msgstr "Importe (en palabras):"
-
-#. module: hr_payroll
-#: field:hr.holidays.status,type:0
-msgid "Payment"
-msgstr "Pago"
-
-#. module: hr_payroll
-#: view:hr.payroll.structure:0
-#: view:hr.payslip:0
-#: field:hr.payslip,line_ids:0
-#: view:hr.payslip.line:0
+#: view:hr.payslip:0 view:hr.payslip.line:0
#: model:ir.model,name:hr_payroll.model_hr_payslip_line
msgid "Payslip Line"
-msgstr "Línea de nómina"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Identification No"
-msgstr "Nº identificación"
-
-#. module: hr_payroll
-#: view:hr.allounce.deduction.categoty:0
-#: field:hr.allounce.deduction.categoty,base:0
-msgid "Based on"
-msgstr "Basado en"
-
-#. module: hr_payroll
-#: selection:hr.payroll.register,state:0
-#: selection:hr.payslip,state:0
-msgid "Wating for Verification"
-msgstr "Esperando verificación"
-
-#. module: hr_payroll
-#: model:ir.module.module,shortdesc:hr_payroll.module_meta_information
-msgid "Human Resource Payroll"
-msgstr "Nóminas de recursos humanos"
-
-#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "Total:"
-msgstr "Total:"
-
-#. module: hr_payroll
-#: view:hr.payslip:0
-msgid "Posted"
-msgstr "Fijado"
-
-#. module: hr_payroll
-#: model:ir.module.module,description:hr_payroll.module_meta_information
-msgid ""
-"Generic Payroll system\n"
-" * Employee Details\n"
-" * Employee Contracts\n"
-" * Passport based Contract\n"
-" * Allowances / Deductions\n"
-" * Allow to configure Basic / Grows / Net Salary\n"
-" * Employee Payslip\n"
-" * Monthly Payroll Register\n"
-" * Integrated with Holiday Management\n"
-" "
msgstr ""
-"Sistema de nóminas genérico\n"
-" * Detalles de empleado\n"
-" * Contratos de empleado\n"
-" * Contratos basados en pasaportes\n"
-" * Complementos/deducciones\n"
-" * Permite configurar salario base/bruto/neto\n"
-" * Nómina de empleado\n"
-" * Registro mensual de nóminas\n"
-" * Integrado con la gestión de vacaciones\n"
-" "
#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_holidays_status
-msgid "Leave Type"
-msgstr "Tipo de ausencia"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-msgid "Date :"
-msgstr "Fecha :"
-
-#. module: hr_payroll
-#: field:hr.payslip.line,total:0
-msgid "Sub Total"
-msgstr "Subtotal"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Payments -"
-msgstr "Pagos -"
-
-#. module: hr_payroll
-#: field:hr.contract,visa_no:0
-msgid "Visa No"
-msgstr "Número de Visa"
-
-#. module: hr_payroll
-#: field:company.contribution.line,from_val:0
-#: report:employees.salary:0
-#: field:hr.payslip.line.line,from_val:0
-#: report:year.salary:0
-msgid "From"
-msgstr "Desde"
-
-#. module: hr_payroll
-#: field:hr.payroll.advice.line,bysal:0
-#: report:payroll.advice:0
-msgid "By Salary"
-msgstr "Por salario"
-
-#. module: hr_payroll
-#: field:hr.payroll.employees.detail,date_to:0
-#: field:hr.payroll.year.salary,date_to:0
-#: report:salary.structure:0
-msgid "End Date"
-msgstr "Fecha final"
-
-#. module: hr_payroll
-#: model:ir.actions.report.xml,name:hr_payroll.salary_payslip
-msgid "Employee PaySlip"
-msgstr "Nómina del empleado"
-
-#. module: hr_payroll
-#: field:hr.payslip,leaves:0
-msgid "Leave Deductions"
-msgstr "Deducciones por ausencia"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-#: report:payroll.advice:0
-msgid "Authorised Signature"
-msgstr "Firma autorizada"
-
-#. module: hr_payroll
-#: selection:hr.payslip.line,amount_type:0
-msgid "Function Value"
-msgstr "Valor de función"
-
-#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_contibution_register_line
-msgid "Contribution Register Line"
-msgstr "Línea de registro de contribución"
-
-#. module: hr_payroll
-#: report:salary.structure:0
-msgid "Notes:"
-msgstr "Notas:"
-
-#. module: hr_payroll
-#: field:hr.payroll.advice,state:0
-#: field:hr.payroll.register,state:0
-#: field:hr.payslip,state:0
-msgid "State"
-msgstr "Estado"
-
-#. module: hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Paymeny Lines"
-msgstr "Líneas de pago"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Other Lines"
-msgstr "Otras líneas"
-
-#. module: hr_payroll
-#: view:company.contribution:0
-#: view:hr.allounce.deduction.categoty:0
-#: view:hr.payroll.structure:0
#: view:hr.payslip:0
-#: view:hr.payslip.line:0
-msgid "Function Arguments"
-msgstr "Argumentos de la función"
+msgid "Other Information"
+msgstr ""
#. module: hr_payroll
-#: model:ir.actions.act_window,name:hr_payroll.action_hr_company_contribution_tree
-#: model:ir.ui.menu,name:hr_payroll.menu_hr_company_contribution_tree
-msgid "Company Contributions"
-msgstr "Contribuciones de la compañía"
+#: help:hr.payslip.line,amount_select:0 help:hr.salary.rule,amount_select:0
+msgid "The computation method for the rule amount."
+msgstr ""
#. module: hr_payroll
-#: field:hr.contibution.register.line,employee_id:0
-#: field:hr.passport,employee_id:0
-#: field:hr.payroll.advice.line,employee_id:0
-#: field:hr.payslip,employee_id:0
-#: field:hr.payslip.line,employee_id:0
+#: view:payslip.lines.contribution.register:0
+msgid "Contribution Register's Payslip Lines"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52
+#, python-format
+msgid "Warning !"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0
+msgid "Details by Salary Rule Category:"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Note"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payroll.structure,code:0 field:hr.payslip,number:0
+#: report:paylip.details:0 report:payslip:0
+msgid "Reference"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Draft Slip"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:422
+#, python-format
+msgid "Normal Working Days paid at 100%"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,condition_range_max:0
+#: field:hr.salary.rule,condition_range_max:0
+msgid "Maximum Range"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0 report:payslip:0
+msgid "Identification No"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,struct_id:0
+msgid "Structure"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.employee,total_wage:0
+msgid "Sum of all current contract's wage of employee."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Total Working Days"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,code:0 help:hr.salary.rule,code:0
+msgid ""
+"The code of salary rules can be used as reference in computation of other "
+"rules. In that case, it is case sensitive."
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Weekly"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,rate:0
+msgid "Rate (%)"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0
+msgid "Confirm"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.report.xml,name:hr_payroll.payslip_report
+msgid "Employee PaySlip"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,condition_range_max:0
+#: help:hr.salary.rule,condition_range_max:0
+msgid "The maximum amount, applied for this rule."
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,condition_python:0
+#: help:hr.salary.rule,condition_python:0
+msgid ""
+"Applied this rule for calculation if condition is true. You can specify "
+"condition like basic > 1000."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.employees:0
+msgid "Payslips by Employees"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Quarterly"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,state:0 field:hr.payslip.run,state:0
+msgid "State"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.salary.rule,quantity:0
+msgid ""
+"It is used in computation for percentage and fixed amount.For e.g. A rule "
+"for Meal Voucher having fixed amount of 1€ per worked day can have its "
+"quantity defined in expression like worked_days.WORK100.number_of_days."
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
+msgid "Search Salary Rule"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip,employee_id:0 field:hr.payslip.line,employee_id:0
#: model:ir.model,name:hr_payroll.model_hr_employee
msgid "Employee"
-msgstr "Empleado"
+msgstr ""
#. module: hr_payroll
-#: field:hr.payslip.line,base:0
-msgid "Formula"
-msgstr "Fórmula"
+#: selection:hr.contract,schedule_pay:0
+msgid "Semi-annually"
+msgstr ""
#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_payroll_advice_line
-msgid "Bank Advice Lines"
-msgstr "Líneas de notificación bancaria"
+#: view:hr.salary.rule:0
+msgid "Children Definition"
+msgstr ""
#. module: hr_payroll
-#: view:company.contribution:0
-#: view:hr.allounce.deduction.categoty:0
-#: field:hr.allounce.deduction.categoty,type:0
-#: field:hr.payslip.line,type:0
-#: report:salary.structure:0
-msgid "Type"
-msgstr "Tipo"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
+#: report:paylip.details:0 report:payslip:0
msgid "Email"
-msgstr "Correo electrónico"
+msgstr ""
#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-msgid "#"
-msgstr "#"
+#: view:hr.payslip.run:0
+msgid "Search Payslip Batches"
+msgstr ""
#. module: hr_payroll
-#: code:addons/hr_payroll/hr_payroll.py:469
-#: code:addons/hr_payroll/hr_payroll.py:1225
-#, python-format
-msgid "Error !"
-msgstr "¡ Error !"
+#: field:hr.payslip.line,amount_percentage_base:0
+#: field:hr.salary.rule,amount_percentage_base:0
+msgid "Percentage based on"
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.register:0
-#: view:hr.payslip:0
-msgid "Verify Sheet"
-msgstr "Comprobar hoja"
+#: help:hr.payslip.line,amount_percentage:0
+#: help:hr.salary.rule,amount_percentage:0
+msgid "For example, enter 50.0 to apply a percentage of 50%"
+msgstr ""
#. module: hr_payroll
-#: help:hr.contract,working_days_per_week:0
-msgid "No of Working days / week for an employee"
-msgstr "Número de días/semanas trabajados para un empleado."
+#: field:hr.payslip,paid:0
+msgid "Made Payment Order ? "
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0
+msgid "PaySlip Lines by Contribution Register"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip,state:0
+msgid ""
+"* When the payslip is created the state is 'Draft'. \n"
+"* If the payslip is under verification, the state is 'Waiting'. "
+"\n"
+"* If the payslip is confirmed then state is set to 'Done'. \n"
+"* When user cancel payslip the state is 'Rejected'."
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.worked_days,number_of_days:0
+msgid "Number of Days"
+msgstr ""
#. module: hr_payroll
-#: selection:hr.payroll.register,state:0
#: selection:hr.payslip,state:0
-msgid "New Slip"
-msgstr "Nuevo justificante"
+msgid "Rejected"
+msgstr ""
#. module: hr_payroll
-#: field:hr.payslip,basic:0
-msgid "Net Basic"
-msgstr "Base neta"
+#: view:hr.payroll.structure:0 field:hr.payroll.structure,rule_ids:0
+#: view:hr.salary.rule:0
+#: model:ir.actions.act_window,name:hr_payroll.action_salary_rule_form
+#: model:ir.ui.menu,name:hr_payroll.menu_action_hr_salary_rule_form
+msgid "Salary Rules"
+msgstr ""
#. module: hr_payroll
-#: field:hr.contract,gross:0
-#: field:hr.employee,gross:0
-#: field:hr.payroll.register,grows:0
-#: field:hr.payslip,grows:0
-#: report:salary.structure:0
-msgid "Gross Salary"
-msgstr "Salario bruto"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Total Earnings"
-msgstr "Ingresos totales"
-
-#. module: hr_payroll
-#: model:ir.actions.act_window,name:hr_payroll.action_hr_payroll_employees_detail
-#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_employees_detail
-msgid "Employee Salary Statement"
-msgstr "Declaración salario del empleado"
-
-#. module: hr_payroll
-#: selection:hr.allounce.deduction.categoty,type:0
-#: selection:hr.payslip.line,type:0
-msgid "Other Payment"
-msgstr "Otros pagos"
-
-#. module: hr_payroll
-#: field:hr.employee,advantages_net:0
-#: report:payslip.pdf:0
-#: report:salary.structure:0
-msgid "Deductions"
-msgstr "Deducciones"
-
-#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "C/D"
-msgstr "C/D"
-
-#. module: hr_payroll
-#: field:hr.contract,permit_no:0
-msgid "Work Permit No"
-msgstr "Nº permiso trabajo"
-
-#. module: hr_payroll
-#: field:hr.payroll.advice,line_ids:0
-msgid "Employee Salary"
-msgstr "Salario empleado"
-
-#. module: hr_payroll
-#: field:hr.payroll.advice,chaque_nos:0
-msgid "Chaque Nos"
-msgstr "Cada uno de nuestros"
-
-#. module: hr_payroll
-#: field:hr.contibution.register,monthly_total_by_emp:0
-msgid "Total By Employee"
-msgstr "Total por empleado"
-
-#. module: hr_payroll
-#: view:company.contribution:0
-#: selection:company.contribution,amount_type:0
-#: selection:company.contribution.line,amount_type:0
-#: selection:hr.payslip.line,amount_type:0
-#: selection:hr.payslip.line.line,amount_type:0
-msgid "Fixed Amount"
-msgstr "Importe fijo"
-
-#. module: hr_payroll
-#: field:company.contribution.line,to_val:0
-#: report:employees.salary:0
-#: field:hr.payslip.line.line,to_val:0
-#: report:year.salary:0
-msgid "To"
-msgstr "Para"
-
-#. module: hr_payroll
-#: code:addons/hr_payroll/hr_payroll.py:180
-#: code:addons/hr_payroll/hr_payroll.py:195
-#: code:addons/hr_payroll/hr_payroll.py:285
-#: code:addons/hr_payroll/hr_payroll.py:835
-#: code:addons/hr_payroll/hr_payroll.py:1111
-#: code:addons/hr_payroll/hr_payroll.py:1126
-#: code:addons/hr_payroll/hr_payroll.py:1410
+#: code:addons/hr_payroll/hr_payroll.py:337
#, python-format
-msgid "Variable Error !"
-msgstr "¡Error de variable!"
+msgid "Refund: "
+msgstr ""
#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_payroll_employees_detail
-msgid "hr.payroll.employees.detail"
-msgstr "rrhh.nomina.empleados.detalle"
+#: model:ir.model,name:hr_payroll.model_payslip_lines_contribution_register
+msgid "PaySlip Lines by Contribution Registers"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 selection:hr.payslip,state:0 view:hr.payslip.run:0
+msgid "Done"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,appears_on_payslip:0
+#: field:hr.salary.rule,appears_on_payslip:0
+msgid "Appears on Payslip"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,amount_fix:0
+#: selection:hr.payslip.line,amount_select:0 field:hr.salary.rule,amount_fix:0
+#: selection:hr.salary.rule,amount_select:0
+msgid "Fixed Amount"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,active:0 help:hr.salary.rule,active:0
+msgid ""
+"If the active field is set to false, it will allow you to hide the salary "
+"rule without removing it."
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.register:0
#: view:hr.payslip:0
-msgid "Pay Salary"
-msgstr "Pagar nómina"
+msgid "Worked Days & Inputs"
+msgstr ""
#. module: hr_payroll
-#: field:hr.payroll.advice.line,name:0
-msgid "Bank Account A/C"
-msgstr "Cuenta bancaria"
+#: field:hr.payslip,details_by_salary_rule_category:0
+msgid "Details by Salary Rule Category"
+msgstr ""
#. module: hr_payroll
-#: view:hr.contibution.register:0
-msgid "Contribution Lines"
-msgstr "Líneas de contribución"
+#: model:ir.actions.act_window,name:hr_payroll.action_payslip_lines_contribution_register
+msgid "PaySlip Lines"
+msgstr ""
#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-msgid "For the month of"
-msgstr "Para el mes de"
+#: help:hr.payslip.line,register_id:0 help:hr.salary.rule,register_id:0
+msgid "Eventual third party involved in the salary payment of the employees."
+msgstr ""
#. module: hr_payroll
-#: view:hr.allounce.deduction.categoty:0
-#: selection:hr.allounce.deduction.categoty,type:0
-#: field:hr.payroll.register,deduction:0
-#: report:hr.payroll.register.sheet:0
-#: field:hr.payslip,deduction:0
-#: selection:hr.payslip.line,type:0
-msgid "Deduction"
-msgstr "Deducción"
+#: field:hr.payslip.worked_days,number_of_hours:0
+msgid "Number of Hours"
+msgstr ""
#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_payroll_advice
-msgid "Bank Advice Note"
-msgstr "Observación aviso bancario"
+#: view:hr.payslip:0
+msgid "PaySlip Batch"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,condition_range_min:0
+#: field:hr.salary.rule,condition_range_min:0
+msgid "Minimum Range"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,child_ids:0 field:hr.salary.rule,child_ids:0
+msgid "Child Salary Rule"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 field:hr.payslip,date_to:0
+#: field:hr.payslip.run,date_end:0 report:paylip.details:0 report:payslip:0
+#: field:payslip.lines.contribution.register,date_to:0
+msgid "Date To"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.payslip.line,condition_select:0
+#: selection:hr.salary.rule,condition_select:0
+msgid "Range"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_tree
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_structure_tree
+msgid "Salary Structures Hierarchy"
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.register:0
#: view:hr.payslip:0
msgid "Payslip"
-msgstr "Nómina"
+msgstr ""
#. module: hr_payroll
#: constraint:hr.contract:0
msgid "Error! contract start-date must be lower then contract end-date."
msgstr ""
-"¡Error! La fecha de inicio de contrato debe ser menor que la fecha de "
-"finalización."
#. module: hr_payroll
-#: selection:hr.allounce.deduction.categoty,type:0
-#: selection:hr.payslip.line,type:0
-msgid "Loan Installment"
-msgstr "Entrega anticipo"
+#: view:hr.contract:0
+msgid "Payslip Info"
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.register:0
-msgid "Complete HR Checking"
-msgstr "Comprobación RH completa"
+#: model:ir.actions.act_window,name:hr_payroll.act_payslip_lines
+msgid "Payslip Computation Details"
+msgstr ""
#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "Yours Sincerely"
-msgstr "Atentamente"
+#: code:addons/hr_payroll/hr_payroll.py:872
+#, python-format
+msgid "Wrong python code defined for salary rule %s (%s) "
+msgstr ""
#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "SI. No."
-msgstr "Nº SS"
+#: model:ir.model,name:hr_payroll.model_hr_payslip_input
+msgid "Payslip Input"
+msgstr ""
#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Net Amount"
-msgstr "Importe neto"
+#: view:hr.salary.rule.category:0
+#: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_salary_rule_category
+msgid "Salary Rule Categories"
+msgstr ""
#. module: hr_payroll
-#: report:salary.structure:0
-msgid "Salary Structure:"
-msgstr "Estructura salarial:"
+#: help:hr.payslip.input,contract_id:0
+#: help:hr.payslip.worked_days,contract_id:0
+msgid "The contract for which applied this input"
+msgstr ""
#. module: hr_payroll
-#: model:ir.actions.report.xml,name:hr_payroll.year_employees_detail
-msgid "Employees Salary Detail"
-msgstr "Detalle salario empleado"
+#: view:hr.salary.rule:0
+msgid "Computation"
+msgstr ""
#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_payslip_line_line
-msgid "Function Line"
-msgstr "Línea de función"
+#: help:hr.payslip.input,amount:0
+msgid ""
+"It is used in computation. For e.g. A rule for sales having 1% commission of "
+"basic salary for per product can defined in expression like result = "
+"inputs.SALEURO.amount * contract.wage*0.01."
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.advice:0
-#: selection:hr.payroll.advice,state:0
-#: selection:hr.payroll.register,state:0
-#: selection:hr.payslip,state:0
-msgid "Confirm Sheet"
-msgstr "Hoja de confirmación"
-
-#. module: hr_payroll
-#: report:employees.salary:0
-msgid "Others:"
-msgstr "Otros:"
-
-#. module: hr_payroll
-#: view:company.contribution:0
-#: selection:company.contribution,amount_type:0
-msgid "Function Calculation"
-msgstr "Función de cálculo"
-
-#. module: hr_payroll
-#: field:hr.payslip,worked_days:0
-#: report:payslip.pdf:0
-msgid "Worked Day"
-msgstr "Días trabajados"
-
-#. module: hr_payroll
-#: field:hr.contibution.register,monthly_total_by_comp:0
-msgid "Total By Company"
-msgstr "Total por compañía"
-
-#. module: hr_payroll
-#: field:hr.payroll.advice.line,flag:0
-msgid "D/C"
-msgstr "D/C"
-
-#. module: hr_payroll
-#: view:hr.passport:0
-msgid "Country & Address"
-msgstr "País y Dirección"
-
-#. module: hr_payroll
-#: report:employees.salary:0
-msgid "Employee Code"
-msgstr "Código de empleado"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Basic Salary – Leaves"
-msgstr "Salario base - Ausencias"
-
-#. module: hr_payroll
-#: field:company.contribution,amount_type:0
-#: field:company.contribution.line,amount_type:0
-#: field:hr.payslip.line,amount_type:0
-#: field:hr.payslip.line.line,amount_type:0
-#: report:salary.structure:0
+#: view:hr.payslip.line:0 field:hr.payslip.line,amount_select:0
+#: field:hr.salary.rule,amount_select:0
msgid "Amount Type"
-msgstr "Tipo de importe"
+msgstr ""
#. module: hr_payroll
-#: view:company.contribution:0
-#: field:hr.payslip.line,category_id:0
+#: field:hr.payslip.line,category_id:0 view:hr.salary.rule:0
+#: field:hr.salary.rule,category_id:0
msgid "Category"
-msgstr "Categoría"
+msgstr ""
#. module: hr_payroll
-#: view:company.contribution:0
-#: view:hr.allounce.deduction.categoty:0
-#: field:hr.payslip.line,company_contrib:0
-#: model:ir.model,name:hr_payroll.model_company_contribution
-msgid "Company Contribution"
-msgstr "Contribución compañía"
+#: help:hr.payslip.run,credit_note:0
+msgid ""
+"If its checked, indicates that all payslips generated from here are refund "
+"payslips."
+msgstr ""
#. module: hr_payroll
-#: field:company.contribution,category_id:0
-msgid "Heads"
-msgstr "Cabeceras"
+#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_structure_list_form
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_structure_view
+msgid "Salary Structures"
+msgstr ""
#. module: hr_payroll
-#: model:ir.actions.report.xml,name:hr_payroll.year_payroll_register
-msgid "Print Statement"
-msgstr "Imprimir declaración"
+#: view:hr.payslip.run:0
+msgid "Draft Payslip Batches"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip:0 selection:hr.payslip,state:0 view:hr.payslip.run:0
+#: selection:hr.payslip.run,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 field:hr.payslip,date_from:0
+#: field:hr.payslip.run,date_start:0 report:paylip.details:0 report:payslip:0
+#: field:payslip.lines.contribution.register,date_from:0
+msgid "Date From"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.run:0
+msgid "Done Payslip Batches"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0
+msgid "Payslip Lines by Contribution Register:"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
+msgid "Conditions"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,amount_percentage:0
+#: selection:hr.payslip.line,amount_select:0
+#: field:hr.salary.rule,amount_percentage:0
+#: selection:hr.salary.rule,amount_select:0
+msgid "Percentage (%)"
+msgstr ""
#. module: hr_payroll
#: view:hr.payslip:0
-msgid "Draft"
-msgstr "Borrador"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Earnings"
-msgstr "Ingresos"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-#: report:salary.structure:0
-msgid "Basic"
-msgstr "Básico"
-
-#. module: hr_payroll
-#: model:ir.actions.act_window,name:hr_payroll.action_hr_passport_tree
-msgid "All Passports"
-msgstr "Todos los pasaportes"
-
-#. module: hr_payroll
-#: model:ir.actions.act_window,name:hr_payroll.action_hr_payroll_year_salary
-#: model:ir.ui.menu,name:hr_payroll.menu_wizard_print_year_salary
-msgid "Salary Register"
-msgstr "Registro salarial"
-
-#. module: hr_payroll
-#: report:employees.salary:0
-#: report:hr.payroll.register.sheet:0
-msgid "Employee Name"
-msgstr "Nombre del empleado"
-
-#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_passport
-msgid "Passport Detail"
-msgstr "Detalle pasaporte"
-
-#. module: hr_payroll
-#: selection:hr.payslip.line,amount_type:0
-msgid "Percentage (%)"
-msgstr "Porcentaje (%)"
-
-#. module: hr_payroll
-#: field:hr.payroll.advice,register_id:0
-#: view:hr.payroll.register:0
-#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payroll_register_form
-#: model:ir.model,name:hr_payroll.model_hr_payroll_register
-#: model:ir.ui.menu,name:hr_payroll.hr_menu_payroll_register
-msgid "Payroll Register"
-msgstr "Registro de nóminas"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-#: report:payroll.advice:0
-msgid "For"
-msgstr "Para"
-
-#. module: hr_payroll
-#: field:hr.passport,contracts_ids:0
-msgid "Contracts"
-msgstr "Contratos"
+msgid "Worked Day"
+msgstr ""
#. module: hr_payroll
#: view:hr.payroll.structure:0
msgid "Employee Function"
-msgstr "Función del empleado"
+msgstr ""
#. module: hr_payroll
-#: view:hr.payslip:0
-msgid "Paid"
-msgstr "Pagado"
-
-#. module: hr_payroll
-#: view:hr.payslip:0
-msgid "Approve Sheet"
-msgstr "Aprobar hoja"
-
-#. module: hr_payroll
-#: field:hr.payslip,paid:0
-msgid "Paid ? "
-msgstr "¿Pagado? "
-
-#. module: hr_payroll
-#: view:hr.holidays.status:0
-msgid "Validation"
-msgstr "Validación"
-
-#. module: hr_payroll
-#: report:employees.salary:0
-msgid "Title"
-msgstr "Título"
-
-#. module: hr_payroll
-#: view:company.contribution:0
-msgid "Search Company Contribution"
-msgstr "Buscar contribución de la compañía"
-
-#. module: hr_payroll
-#: field:hr.allounce.deduction.categoty,user_id:0
-msgid "User"
-msgstr "Usuario"
-
-#. module: hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Payment Lines"
-msgstr "Líneas de pago"
+#: field:hr.payslip,credit_note:0 field:hr.payslip.run,credit_note:0
+msgid "Credit Note"
+msgstr ""
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Compute Sheet"
-msgstr "Calcular hoja"
+msgstr ""
#. module: hr_payroll
-#: field:company.contribution,active:0
-#: field:hr.payroll.register,active:0
+#: field:hr.payslip.line,active:0 field:hr.salary.rule,active:0
msgid "Active"
-msgstr "Activo"
+msgstr ""
#. module: hr_payroll
-#: help:hr.allounce.deduction.categoty,condition:0
-msgid "Applied this head for calculation if condition is true"
-msgstr "Aplicar este encabezado en el cálculo si la condición es verdadera"
-
-#. module: hr_payroll
-#: report:year.salary:0
-msgid "Yearly Salary Details"
-msgstr "Detalles del salario anual"
+#: view:hr.salary.rule:0
+msgid "Child Rules"
+msgstr ""
#. module: hr_payroll
#: constraint:hr.employee:0
msgid "Error ! You cannot create recursive Hierarchy of Employees."
-msgstr "¡Error! No se puede crear una jerarquía recursiva de empleados."
+msgstr ""
#. module: hr_payroll
-#: field:hr.allounce.deduction.categoty,condition:0
-msgid "Condition"
-msgstr "Condición"
+#: model:ir.actions.report.xml,name:hr_payroll.payslip_details_report
+msgid "PaySlip Details"
+msgstr ""
#. module: hr_payroll
-#: selection:hr.payroll.register,state:0
-#: selection:hr.payslip,state:0
-msgid "Wating for HR Verification"
-msgstr "Esperando verificación de RRHH"
+#: help:hr.payslip.line,condition_range_min:0
+#: help:hr.salary.rule,condition_range_min:0
+msgid "The minimum amount, applied for this rule."
+msgstr ""
#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "Payment Advice:"
-msgstr "Aviso de pago:"
+#: selection:hr.payslip.line,condition_select:0
+#: selection:hr.salary.rule,condition_select:0
+msgid "Python Expression"
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.register:0
-msgid "Compute"
-msgstr "Calcular"
-
-#. module: hr_payroll
-#: report:employees.salary:0
-#: field:hr.payslip,deg_id:0
-#: report:payslip.pdf:0
-#: report:salary.structure:0
+#: report:paylip.details:0 report:payslip:0
msgid "Designation"
-msgstr "Designación"
+msgstr ""
#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-msgid "HR Manager"
-msgstr "Responsable de RRHH"
+#: code:addons/hr_payroll/wizard/hr_payroll_payslips_by_employees.py:52
+#, python-format
+msgid "You must select employee(s) to generate payslip(s)"
+msgstr ""
#. module: hr_payroll
-#: field:hr.contract,basic:0
-#: field:hr.employee,basic:0
-#: field:hr.payslip,basic_before_leaves:0
-#: report:payslip.pdf:0
-msgid "Basic Salary"
-msgstr "Salario base"
-
-#. module: hr_payroll
-#: field:hr.allounce.deduction.categoty,code:0
-msgid "Category Code"
-msgstr "Código categoría"
-
-#. module: hr_payroll
-#: view:hr.payroll.register:0
-msgid "Salary Information"
-msgstr "Información del salario"
-
-#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_allounce_deduction_categoty
-#: model:ir.model,name:hr_payroll.model_hr_allounce_deduction_categoty_line
-msgid "Allowance Deduction Categoty"
-msgstr "Categoría prima/deducción"
+#: code:addons/hr_payroll/hr_payroll.py:861
+#, python-format
+msgid "Wrong quantity defined for salary rule %s (%s)"
+msgstr ""
#. module: hr_payroll
#: view:hr.payslip:0
msgid "Companies"
-msgstr "Compañías"
+msgstr ""
#. module: hr_payroll
-#: report:payslip.pdf:0
+#: report:paylip.details:0 report:payslip:0
msgid "Authorized Signature"
-msgstr "Firma autorizada"
+msgstr ""
#. module: hr_payroll
-#: field:hr.payslip,contract_id:0
+#: field:hr.payslip,contract_id:0 field:hr.payslip.input,contract_id:0
+#: field:hr.payslip.line,contract_id:0
+#: field:hr.payslip.worked_days,contract_id:0
#: model:ir.model,name:hr_payroll.model_hr_contract
msgid "Contract"
-msgstr "Contrato"
+msgstr ""
#. module: hr_payroll
-#: selection:hr.payroll.advice,state:0
-msgid "Draft Sheet"
-msgstr "Hoja borrador"
+#: report:paylip.details:0 report:payslip:0
+msgid "Credit"
+msgstr ""
#. module: hr_payroll
-#: selection:hr.payroll.year.salary,salary_on:0
-msgid "Next Month Date"
-msgstr "Fecha próximo mes"
+#: field:hr.contract,schedule_pay:0
+msgid "Scheduled Pay"
+msgstr ""
#. module: hr_payroll
-#: field:hr.contibution.register.line,date:0
-#: field:hr.payroll.advice,date:0
-#: field:hr.payroll.register,date:0
-#: field:hr.payslip,date:0
-msgid "Date"
-msgstr "Fecha"
+#: code:addons/hr_payroll/hr_payroll.py:861
+#: code:addons/hr_payroll/hr_payroll.py:866
+#: code:addons/hr_payroll/hr_payroll.py:872
+#: code:addons/hr_payroll/hr_payroll.py:889
+#: code:addons/hr_payroll/hr_payroll.py:895
+#, python-format
+msgid "Error"
+msgstr ""
#. module: hr_payroll
-#: field:hr.contract,visa_expire:0
-msgid "Visa Expire Date"
-msgstr "Fecha expiración visado"
+#: field:hr.payslip.line,condition_python:0
+#: field:hr.salary.rule,condition_python:0
+msgid "Python Condition"
+msgstr ""
#. module: hr_payroll
-#: view:hr.passport:0
-msgid "Search Passport"
-msgstr "Buscar pasaporte"
-
-#. module: hr_payroll
-#: report:employees.salary:0
-#: report:salary.structure:0
-msgid "Phone No."
-msgstr "Nº Teléfono"
-
-#. module: hr_payroll
-#: field:company.contribution,contribute_per:0
-#: field:company.contribution.line,contribution_id:0
-#: view:hr.allounce.deduction.categoty:0
-#: view:hr.contibution.register:0
-#: view:hr.contibution.register.line:0
+#: view:hr.contribution.register:0
msgid "Contribution"
-msgstr "Contribución"
+msgstr ""
#. module: hr_payroll
-#: field:hr.allounce.deduction.categoty,state:0
-msgid "Label"
-msgstr "Etiqueta"
+#: code:addons/hr_payroll/hr_payroll.py:347
+#, python-format
+msgid "Refund Payslip"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.rule.input,input_id:0
+#: model:ir.model,name:hr_payroll.model_hr_rule_input
+msgid "Salary Rule Input"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:895
+#, python-format
+msgid "Wrong python condition defined for salary rule %s (%s)"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.payslip.line,quantity:0 field:hr.salary.rule,quantity:0
+msgid "Quantity"
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.structure:0
#: view:hr.payslip:0
-#: view:hr.payslip.line:0
+msgid "Refund"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.salary.rule:0
msgid "Company Contribution"
-msgstr "Contribución compañía"
+msgstr ""
#. module: hr_payroll
-#: report:employees.salary:0
-#: report:salary.structure:0
-msgid "Other No."
-msgstr "Otro Nº"
-
-#. module: hr_payroll
-#: field:company.contribution,code:0
-#: field:hr.contibution.register.line,code:0
-#: field:hr.holidays.status,code:0
-#: field:hr.payroll.structure,code:0
-#: field:hr.payslip.line,code:0
-#: report:payslip.pdf:0
-#: report:salary.structure:0
+#: report:contribution.register.lines:0 field:hr.payslip.input,code:0
+#: field:hr.payslip.line,code:0 field:hr.payslip.worked_days,code:0
+#: field:hr.rule.input,code:0 field:hr.salary.rule,code:0
+#: field:hr.salary.rule.category,code:0 report:paylip.details:0
+#: report:payslip:0
msgid "Code"
-msgstr "Código"
-
-#. module: hr_payroll
-#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_bank_advice_tree
-#: model:ir.ui.menu,name:hr_payroll.hr_menu_payment_advice
-msgid "Payment Advice"
-msgstr "Aviso de pago"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-msgid "Number :"
-msgstr "Número :"
-
-#. module: hr_payroll
-#: help:hr.allounce.deduction.categoty,base:0
-msgid ""
-"This will use to computer the % fields values, in general its on basic, but "
-"You can use all heads code field in small letter as a variable name i.e. "
-"hra, ma, lta, etc...., also you can use, static varible basic"
msgstr ""
-"Esto se utiliza para calcular los valores de los campos %, en general en su "
-"base, pero puede utilizar todas las cabeceras de los campos de código en "
-"letra pequeña como un nombre de variable, por ejemplo hra, ma, lta, etc., "
-"también puede utilizar variable estática básica."
#. module: hr_payroll
-#: view:hr.payslip:0
-msgid "Computation Overview"
-msgstr "Resumen del cálculo"
+#: field:hr.payslip.line,amount_python_compute:0
+#: selection:hr.payslip.line,amount_select:0
+#: field:hr.salary.rule,amount_python_compute:0
+#: selection:hr.salary.rule,amount_select:0
+msgid "Python Code"
+msgstr ""
#. module: hr_payroll
-#: field:hr.payroll.year.salary,salary_on:0
-msgid "Salary On"
-msgstr "Salario sobre"
+#: field:hr.payslip.input,sequence:0 field:hr.payslip.line,sequence:0
+#: field:hr.payslip.worked_days,sequence:0 field:hr.salary.rule,sequence:0
+msgid "Sequence"
+msgstr ""
#. module: hr_payroll
-#: field:hr.payroll.advice,number:0
-#: field:hr.payroll.register,number:0
-#: field:hr.payslip,number:0
-msgid "Number"
-msgstr "Número"
+#: report:contribution.register.lines:0 report:paylip.details:0
+msgid "Register Name"
+msgstr ""
#. module: hr_payroll
-#: field:hr.contract,struct_id:0
-#: field:hr.employee,line_ids:0
-#: view:hr.payroll.structure:0
-#: field:hr.payroll.structure,line_ids:0
-#: view:hr.payslip:0
+#: view:hr.salary.rule:0
+msgid "General"
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:664
+#, python-format
+msgid "Salary Slip of %s for %s"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.model,name:hr_payroll.model_hr_payslip_employees
+msgid "Generate payslips for all selected employees"
+msgstr ""
+
+#. module: hr_payroll
+#: field:hr.contract,struct_id:0 view:hr.payroll.structure:0 view:hr.payslip:0
#: view:hr.payslip.line:0
-#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_employee_grade_form
-#: model:ir.actions.report.xml,name:hr_payroll.salary_structure_register
#: model:ir.model,name:hr_payroll.model_hr_payroll_structure
-#: model:ir.ui.menu,name:hr_payroll.menu_hr_employee_function
msgid "Salary Structure"
-msgstr "Estructura salarial"
-
-#. module: hr_payroll
-#: field:hr.contibution.register,register_line_ids:0
-msgid "Register Line"
-msgstr "Línea registro"
-
-#. module: hr_payroll
-#: view:hr.payroll.register:0
-#: view:hr.payslip:0
-msgid "Cancel"
-msgstr "Cancelar"
-
-#. module: hr_payroll
-#: view:hr.payroll.employees.detail:0
-#: view:hr.payroll.year.salary:0
-msgid "Close"
-msgstr "Cerrar"
-
-#. module: hr_payroll
-#: field:hr.payslip.line,amount:0
-msgid "Amount / Percentage"
-msgstr "Importe / Porcentaje"
-
-#. module: hr_payroll
-#: field:hr.employee,advantages_gross:0
-#: report:hr.payroll.register.sheet:0
-#: report:salary.structure:0
-msgid "Allowances"
-msgstr "Primas"
-
-#. module: hr_payroll
-#: selection:hr.payroll.year.salary,salary_on:0
-msgid "Current Month Date"
-msgstr "Fecha mes actual"
-
-#. module: hr_payroll
-#: report:salary.structure:0
-msgid "Salary"
-msgstr "Salario"
-
-#. module: hr_payroll
-#: field:hr.contract,passport_id:0
-#: field:hr.passport,name:0
-msgid "Passport No"
-msgstr "Número de pasaporte"
-
-#. module: hr_payroll
-#: view:hr.passport:0
-msgid "Passport"
-msgstr "Pasaporte"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-msgid "Total Salary"
-msgstr "Salario total"
-
-#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "for period"
-msgstr "por periodo"
-
-#. module: hr_payroll
-#: field:hr.holidays.status,head_id:0
-msgid "Payroll Head"
-msgstr "Cabecera nómina"
-
-#. module: hr_payroll
-#: field:company.contribution,register_id:0
-#: model:ir.actions.act_window,name:hr_payroll.action_contibution_register_form
-#: model:ir.model,name:hr_payroll.model_hr_contibution_register
-#: model:ir.ui.menu,name:hr_payroll.menu_action_hr_contibution_register_form
-msgid "Contribution Register"
-msgstr "Registro de contribución"
-
-#. module: hr_payroll
-#: report:salary.structure:0
-msgid "E-mail"
-msgstr "Correo electrónico"
-
-#. module: hr_payroll
-#: view:hr.allounce.deduction.categoty:0
-#: model:ir.actions.act_window,name:hr_payroll.hr_allounce_deduction_tree
-#: model:ir.ui.menu,name:hr_payroll.menu_hr_allounce_deduction_tree
-msgid "Salary Heads"
-msgstr "Cabeceras salario"
-
-#. module: hr_payroll
-#: view:hr.payroll.employees.detail:0
-#: view:hr.payroll.year.salary:0
-msgid "Print Report"
-msgstr "Imprimir informe"
-
-#. module: hr_payroll
-#: field:company.contribution,line_ids:0
-#: view:hr.payroll.structure:0
-#: view:hr.payslip:0
-#: view:hr.payslip.line:0
-#: field:hr.payslip.line,line_ids:0
-msgid "Calculations"
-msgstr "Cálculos"
-
-#. module: hr_payroll
-#: help:company.contribution,contribute_per:0
-msgid ""
-"Define Company contribution ratio 1.00=100% contribution, If Employee "
-"Contribute 5% then company will and here 0.50 defined then company will "
-"contribute 50% on employee 5% contribution"
msgstr ""
-"Define el ratio de contribución de la compañía 1,00=100% de la contribución. "
-"Si el empleado contribuye con el 5%, entonces si aquí la compañía tiene un "
-"ratio de 0.50, la compañía contribuirá con el 50% del 5% de la contribución "
-"del empleado."
#. module: hr_payroll
-#: view:hr.payslip:0
-msgid "Other Informations"
-msgstr "Otra información"
+#: field:hr.contribution.register,register_line_ids:0
+msgid "Register Line"
+msgstr ""
#. module: hr_payroll
-#: view:hr.contibution.register:0
-msgid "Month"
-msgstr "Mes"
+#: view:hr.payslip:0 view:hr.payslip.employees:0
+#: view:payslip.lines.contribution.register:0
+msgid "Cancel"
+msgstr ""
#. module: hr_payroll
-#: view:hr.passport:0
-msgid "Issue"
-msgstr "Incidencia"
+#: view:hr.payslip.run:0 selection:hr.payslip.run,state:0
+msgid "Close"
+msgstr ""
#. module: hr_payroll
-#: view:hr.allounce.deduction.categoty:0
-msgid "Dynamic Computation"
-msgstr "Cálculo Dinámico"
+#: help:hr.payslip,struct_id:0
+msgid ""
+"Defines the rules that have to be applied to this payslip, accordingly to "
+"the contract chosen. If you let empty the field contract, this field isn't "
+"mandatory anymore and thus the rules applied will be all the rules set on "
+"the structure of all contracts of the employee valid for the chosen period"
+msgstr ""
#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Basic Salary without Leave:"
-msgstr "Salario base sin ausencias:"
+#: field:hr.payroll.structure,children_ids:0
+#: field:hr.salary.rule.category,children_ids:0
+msgid "Children"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip,credit_note:0
+msgid "Indicates this payslip has a refund of another"
+msgstr ""
+
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Bi-monthly"
+msgstr ""
+
+#. module: hr_payroll
+#: report:paylip.details:0
+msgid "Pay Slip Details"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payslip_form
+#: model:ir.ui.menu,name:hr_payroll.menu_department_tree
+msgid "Employee Payslips"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.line:0 field:hr.payslip.line,register_id:0
+#: field:hr.salary.rule,register_id:0
+#: model:ir.model,name:hr_payroll.model_hr_contribution_register
+msgid "Contribution Register"
+msgstr ""
+
+#. module: hr_payroll
+#: view:payslip.lines.contribution.register:0
+msgid "Print"
+msgstr ""
+
+#. module: hr_payroll
+#: model:ir.actions.act_window,help:hr_payroll.action_contribution_register_form
+msgid ""
+"A contribution register is a third party involved in the salary payment of "
+"the employees. It can be the social security, the estate or anyone that "
+"collect or inject money on payslips."
+msgstr ""
+
+#. module: hr_payroll
+#: code:addons/hr_payroll/hr_payroll.py:889
+#, python-format
+msgid "Wrong range condition defined for salary rule %s (%s)"
+msgstr ""
#. module: hr_payroll
-#: view:company.contribution:0
-#: view:hr.allounce.deduction.categoty:0
-#: view:hr.payroll.structure:0
-#: view:hr.payslip:0
#: view:hr.payslip.line:0
-#: field:hr.payslip.line,function_id:0
-msgid "Function"
-msgstr "Función"
+msgid "Calculations"
+msgstr ""
#. module: hr_payroll
#: view:hr.payslip:0
-msgid "States"
-msgstr "Estados"
+msgid "Worked Days"
+msgstr ""
#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "Dear Sir/Madam,"
-msgstr "Apreciado Sr./Sra.,"
-
-#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_allounce_deduction_categoty
-msgid "Allowance Deduction Heads"
-msgstr "Cabeceras prima/deducción"
-
-#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-msgid "Gross Sal."
-msgstr "Sal. bruto"
-
-#. module: hr_payroll
-#: view:company.contribution:0
-#: field:company.contribution,note:0
-#: view:hr.allounce.deduction.categoty:0
-#: field:hr.allounce.deduction.categoty,note:0
-#: view:hr.contibution.register:0
-#: field:hr.contibution.register,note:0
-#: view:hr.passport:0
-#: field:hr.passport,note:0
-#: field:hr.payroll.advice,note:0
-#: field:hr.payroll.register,note:0
-#: view:hr.payroll.structure:0
-#: field:hr.payroll.structure,note:0
#: view:hr.payslip:0
-#: field:hr.payslip,note:0
-#: view:hr.payslip.line:0
-#: field:hr.payslip.line,note:0
+msgid "Search Payslips"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.run:0
+#: model:ir.actions.act_window,name:hr_payroll.action_hr_payslip_run_tree
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_payslip_run
+msgid "Payslips Batches"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.contribution.register:0 field:hr.contribution.register,note:0
+#: field:hr.payroll.structure,note:0 field:hr.payslip,name:0
+#: field:hr.payslip,note:0 field:hr.payslip.input,name:0
+#: view:hr.payslip.line:0 field:hr.payslip.line,note:0
+#: field:hr.payslip.worked_days,name:0 field:hr.rule.input,name:0
+#: view:hr.salary.rule:0 field:hr.salary.rule,note:0
+#: field:hr.salary.rule.category,note:0
msgid "Description"
-msgstr "Descripción"
+msgstr ""
#. module: hr_payroll
-#: field:hr.payroll.employees.detail,date_from:0
-#: field:hr.payroll.year.salary,date_from:0
-#: report:salary.structure:0
-msgid "Start Date"
-msgstr "Fecha inicio"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Deduction -"
-msgstr "Deducción -"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
+#: report:paylip.details:0 report:payslip:0
msgid ")"
-msgstr ")"
+msgstr ""
#. module: hr_payroll
-#: view:hr.contibution.register:0
+#: view:hr.contribution.register:0
+#: model:ir.actions.act_window,name:hr_payroll.action_contribution_register_form
+#: model:ir.ui.menu,name:hr_payroll.menu_action_hr_contribution_register_form
msgid "Contribution Registers"
-msgstr "Registros de contribución"
+msgstr ""
#. module: hr_payroll
#: model:ir.ui.menu,name:hr_payroll.menu_hr_payroll_reporting
#: model:ir.ui.menu,name:hr_payroll.menu_hr_root_payroll
#: model:ir.ui.menu,name:hr_payroll.payroll_configure
msgid "Payroll"
-msgstr "Nómina"
+msgstr ""
#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_contract_wage_type
-msgid "Wage Type"
-msgstr "Tipo de salario"
+#: model:ir.actions.report.xml,name:hr_payroll.contribution_register
+msgid "PaySlip Lines By Conribution Register"
+msgstr ""
#. module: hr_payroll
-#: report:hr.payroll.register.sheet:0
-msgid "Net Sal."
-msgstr "Sal. neto"
-
-#. module: hr_payroll
-#: sql_constraint:hr.passport:0
-msgid "The Passport No must be unique !"
-msgstr "¡El número de pasaporte debe ser único!"
-
-#. module: hr_payroll
-#: field:hr.allounce.deduction.categoty,name:0
-msgid "Category Name"
-msgstr "Nombre categoría"
-
-#. module: hr_payroll
-#: model:ir.model,name:hr_payroll.model_hr_payroll_year_salary
-msgid "hr.payroll.year.salary"
-msgstr "hr.nómina.año.salario"
-
-#. module: hr_payroll
-#: report:employees.salary:0
-#: field:hr.passport,address_id:0
-#: report:payslip.pdf:0
-#: report:salary.structure:0
-msgid "Address"
-msgstr "Dirección"
-
-#. module: hr_payroll
-#: field:hr.payslip.line.line,slipline_id:0
-msgid "Slip Line"
-msgstr "Línea justificante"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Number of Leaves"
-msgstr "Número de hojas"
-
-#. module: hr_payroll
-#: report:employees.salary:0
-#: field:hr.payroll.advice,bank_id:0
-#: field:hr.payroll.register,bank_id:0
-#: report:salary.structure:0
-msgid "Bank"
-msgstr "Banco"
-
-#. module: hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Cancel Sheet"
-msgstr "Cancelar hoja"
-
-#. module: hr_payroll
-#: selection:hr.allounce.deduction.categoty,type:0
-#: selection:hr.payslip.line,type:0
-msgid "Advance"
-msgstr "Adelanto"
-
-#. module: hr_payroll
-#: report:salary.structure:0
-msgid "Special Allowances and Deductions For Employee:"
-msgstr "Primas y deducciones especiales por empleado:"
-
-#. module: hr_payroll
-#: field:company.contribution,name:0
-#: field:company.contribution.line,name:0
-#: field:hr.contibution.register,name:0
-#: field:hr.contibution.register.line,name:0
-#: field:hr.payroll.advice,name:0
-#: field:hr.payroll.register,name:0
-#: field:hr.payroll.structure,name:0
-#: field:hr.payslip,name:0
-#: field:hr.payslip.line,name:0
-#: field:hr.payslip.line.line,name:0
-#: report:payslip.pdf:0
-#: report:salary.structure:0
-#: report:year.salary:0
-msgid "Name"
-msgstr "Nombre"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Leaved Deduction"
-msgstr "Hojas de deducción"
-
-#. module: hr_payroll
-#: view:hr.passport:0
-msgid "Country"
-msgstr "País"
-
-#. module: hr_payroll
-#: view:hr.passport:0
-#: view:hr.payroll.employees.detail:0
-#: field:hr.payroll.employees.detail,employee_ids:0
-#: view:hr.payroll.year.salary:0
-#: field:hr.payroll.year.salary,employee_ids:0
-#: view:hr.payslip:0
-msgid "Employees"
-msgstr "Empleados"
-
-#. module: hr_payroll
-#: report:payroll.advice:0
-msgid "Bank Account"
-msgstr "Cuenta bancaria"
-
-#. module: hr_payroll
-#: help:company.contribution,register_id:0
-msgid "Contribution register based on company"
-msgstr "Registro de contribución basado en la empresa"
-
-#. module: hr_payroll
-#: help:hr.allounce.deduction.categoty,sequence:0
-msgid "Use to arrange calculation sequence"
-msgstr "Se utiliza para organizar la secuencia de cálculo"
-
-#. module: hr_payroll
-#: field:hr.payslip,total_pay:0
-msgid "Total Payment"
-msgstr "Pago total"
-
-#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Leave Deductions Line:"
-msgstr "Línea de deducciones por ausencias:"
-
-#. module: hr_payroll
-#: selection:hr.payroll.register,state:0
#: selection:hr.payslip,state:0
-msgid "Wating for Account Verification"
-msgstr "Esperando por verificación de la cuenta"
+msgid "Waiting"
+msgstr ""
#. module: hr_payroll
-#: field:hr.contibution.register.line,comp_deduction:0
-msgid "Company Deduction"
-msgstr "Deducción de la Compañía"
+#: report:paylip.details:0 report:payslip:0
+msgid "Address"
+msgstr ""
#. module: hr_payroll
-#: view:hr.holidays.status:0
-msgid "Payroll Configurtion"
-msgstr "Configuración nómina"
-
-#. module: hr_payroll
-#: code:addons/hr_payroll/hr_payroll.py:469
+#: code:addons/hr_payroll/hr_payroll.py:866
#, python-format
-msgid "Please define bank account for the %s employee"
-msgstr "Por favor, defina la cuenta bancaria para el empleado %s"
+msgid "Wrong percentage base or quantity defined for salary rule %s (%s)"
+msgstr ""
#. module: hr_payroll
-#: field:hr.passport,date_issue:0
-msgid "Passport Issue Date"
-msgstr "Fecha de emisión del pasaporte"
+#: field:hr.payslip,worked_days_line_ids:0
+#: model:ir.model,name:hr_payroll.model_hr_payslip_worked_days
+msgid "Payslip Worked Days"
+msgstr ""
#. module: hr_payroll
-#: view:hr.allounce.deduction.categoty:0
-#: selection:hr.allounce.deduction.categoty,type:0
-#: field:hr.payroll.register,allounce:0
-#: field:hr.payslip,allounce:0
-#: selection:hr.payslip.line,type:0
-msgid "Allowance"
-msgstr "Prima"
+#: view:hr.salary.rule.category:0
+msgid "Salary Categories"
+msgstr ""
#. module: hr_payroll
-#: field:hr.payslip,holiday_days:0
-msgid "No of Leaves"
-msgstr "N º de hojas"
+#: report:contribution.register.lines:0 field:hr.contribution.register,name:0
+#: field:hr.payroll.structure,name:0 field:hr.payslip.line,name:0
+#: field:hr.payslip.run,name:0 field:hr.salary.rule,name:0
+#: field:hr.salary.rule.category,name:0 report:paylip.details:0
+#: report:payslip:0
+msgid "Name"
+msgstr ""
#. module: hr_payroll
-#: field:hr.employee,otherid:0
-msgid "Other Id"
-msgstr "Otro id"
+#: view:hr.payroll.structure:0
+msgid "Payroll Structures"
+msgstr ""
#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Bank Details"
-msgstr "Detalles bancarios"
+#: view:hr.payslip:0 view:hr.payslip.employees:0
+#: field:hr.payslip.employees,employee_ids:0 view:hr.payslip.line:0
+msgid "Employees"
+msgstr ""
#. module: hr_payroll
-#: report:payslip.pdf:0
-msgid "Slip ID"
-msgstr "ID justificante"
+#: report:paylip.details:0 report:payslip:0
+msgid "Bank Account"
+msgstr ""
#. module: hr_payroll
-#: field:company.contribution.line,sequence:0
-#: field:hr.allounce.deduction.categoty,sequence:0
-#: field:hr.payslip.line,sequence:0
-#: field:hr.payslip.line.line,sequence:0
-msgid "Sequence"
-msgstr "Secuencia"
+#: help:hr.payslip.line,sequence:0 help:hr.salary.rule,sequence:0
+msgid "Use to arrange calculation sequence"
+msgstr ""
#. module: hr_payroll
-#: model:ir.actions.act_window,name:hr_payroll.action_view_hr_payslip_form
-#: model:ir.ui.menu,name:hr_payroll.menu_department_tree
-msgid "Employee Payslip"
-msgstr "Nómina de los empleados"
+#: help:hr.payslip.line,condition_range:0
+#: help:hr.salary.rule,condition_range:0
+msgid ""
+"This will be used to compute the % fields values; in general it is on basic, "
+"but you can also use categories code fields in lowercase as a variable names "
+"(hra, ma, lta, etc.) and the variable basic."
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Letter Content"
-msgstr "Contenido carta"
+#: selection:hr.contract,schedule_pay:0
+msgid "Annually"
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.employees.detail:0
-#: view:hr.payroll.year.salary:0
-msgid "Year Salary"
-msgstr "Salario anual"
+#: field:hr.payslip,input_line_ids:0
+msgid "Payslip Inputs"
+msgstr ""
#. module: hr_payroll
-#: view:hr.payroll.register:0
-msgid "Allowance / Deduction"
-msgstr "Prima / Deducción"
+#: field:hr.payslip.line,salary_rule_id:0
+msgid "Rule"
+msgstr ""
#. module: hr_payroll
-#: model:ir.actions.report.xml,name:hr_payroll.payroll_advice
-msgid "Bank Payment Advice"
-msgstr "Aviso de pago del banco"
+#: model:ir.actions.act_window,name:hr_payroll.action_hr_salary_rule_category_tree_view
+#: model:ir.ui.menu,name:hr_payroll.menu_hr_salary_rule_category_tree_view
+msgid "Salary Rule Categories Hierarchy"
+msgstr ""
+
+#. module: hr_payroll
+#: report:contribution.register.lines:0 field:hr.payslip.line,total:0
+#: report:paylip.details:0 report:payslip:0
+msgid "Total"
+msgstr ""
+
+#. module: hr_payroll
+#: help:hr.payslip.line,appears_on_payslip:0
+#: help:hr.salary.rule,appears_on_payslip:0
+msgid "Used for the display of rule on payslip"
+msgstr ""
+
+#. module: hr_payroll
+#: view:hr.payslip.line:0
+msgid "Search Payslip Lines"
+msgstr ""
#. module: hr_payroll
#: view:hr.payslip:0
-msgid "Search Payslips"
-msgstr "Buscar nóminas"
+msgid "Details By Salary Rule Category"
+msgstr ""
#. module: hr_payroll
-#: report:employees.salary:0
-#: field:hr.contibution.register.line,total:0
-#: report:year.salary:0
-msgid "Total"
-msgstr "Total"
+#: help:hr.payslip.input,code:0 help:hr.payslip.worked_days,code:0
+#: help:hr.rule.input,code:0
+msgid "The code that can be used in the salary rules"
+msgstr ""
#. module: hr_payroll
-#: view:company.contribution:0
-#: view:hr.allounce.deduction.categoty:0
-#: field:hr.allounce.deduction.categoty,contribute_ids:0
-msgid "Contributions"
-msgstr "Contribuciones"
+#: view:hr.payslip.run:0
+#: model:ir.actions.act_window,name:hr_payroll.action_hr_payslip_by_employees
+msgid "Generate Payslips"
+msgstr ""
-#~ msgid "Categoty Code"
-#~ msgstr "Código de categoría"
+#. module: hr_payroll
+#: selection:hr.contract,schedule_pay:0
+msgid "Bi-weekly"
+msgstr ""
-#~ msgid "Categoty Name"
-#~ msgstr "Nombre categoría"
+#. module: hr_payroll
+#: field:hr.employee,total_wage:0
+msgid "Total Basic Salary"
+msgstr ""
-#~ msgid "Invalid model name in the action definition."
-#~ msgstr "Nombre del modelo inválido en la definición de acción."
+#. module: hr_payroll
+#: selection:hr.payslip.line,condition_select:0
+#: selection:hr.salary.rule,condition_select:0
+msgid "Always True"
+msgstr ""
-#~ msgid "Analytic Account for Salary Analysis"
-#~ msgstr "Cuenta analítica para análisis de nóminas"
+#. module: hr_payroll
+#: report:contribution.register.lines:0
+msgid "PaySlip Name"
+msgstr ""
-#~ msgid "Employee No"
-#~ msgstr "Núm. trabajador"
-
-#~ msgid "Employee Payable Account"
-#~ msgstr "Cuenta a pagar del trabajador"
-
-#~ msgid "Account"
-#~ msgstr "Cuenta"
-
-#, python-format
-#~ msgid "Warning !"
-#~ msgstr "¡ Aviso !"
-
-#~ msgid "Payment From"
-#~ msgstr "Pago desde"
-
-#~ msgid "Keep empty to use the period of the validation(Payslip) date."
-#~ msgstr ""
-#~ "Deje en blanco para usar el período de la fecha de validación de la nómina"
-
-#~ msgid "Analytic Account"
-#~ msgstr "Cuenta analítica"
-
-#~ msgid "Force Period"
-#~ msgstr "Forzar período"
-
-#~ msgid "Accounting Information"
-#~ msgstr "Información contable"
-
-#, python-format
-#~ msgid "Integrity Error !"
-#~ msgstr "¡Error de integridad!"
-
-#~ msgid "Miscelleanous"
-#~ msgstr "Misceláneos"
-
-#~ msgid "Error! You can not create recursive analytic accounts."
-#~ msgstr "¡Error! No puede crear cuentas analíticas recursivas."
-
-#~ msgid "Account Lines"
-#~ msgstr "Movimientos"
-
-#~ msgid "Accounting Informations"
-#~ msgstr "Información contable"
-
-#~ msgid "Print"
-#~ msgstr "Imprimir"
-
-#~ msgid "Invalid XML for View Architecture!"
-#~ msgstr "¡XML inválido para la definición de la vista!"
-
-#~ msgid "Accounting Lines"
-#~ msgstr "Movimientos contables"
-
-#~ msgid "Bank Journal"
-#~ msgstr "Diario bancario"
-
-#~ msgid "Expense"
-#~ msgstr "Gastos"
-
-#~ msgid "Payment Entries"
-#~ msgstr "Asientos de pago"
-
-#~ msgid "Salary Account"
-#~ msgstr "Cuenta de nómina"
-
-#~ msgid "Employee Contract"
-#~ msgstr "Contrato de trabajador"
-
-#~ msgid ""
-#~ "The Object name must start with x_ and not contain any special character !"
-#~ msgstr ""
-#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter "
-#~ "especial!"
-
-#~ msgid "General Account"
-#~ msgstr "Cuenta general"
-
-#~ msgid "Process"
-#~ msgstr "Proceso"
-
-#~ msgid "Employee Account"
-#~ msgstr "Cuenta trabajador"
-
-#~ msgid "General Information"
-#~ msgstr "Información general"
-
-#~ msgid "Accounting Details"
-#~ msgstr "Detalles de contabilidad"
-
-#~ msgid "Account Information"
-#~ msgstr "Información de la cuenta"
-
-#~ msgid "Generalities"
-#~ msgstr "Generalidades"
-
-#~ msgid "Contract Duration"
-#~ msgstr "Duración del contrato"
-
-#~ msgid "Notes"
-#~ msgstr "Notas"
-
-#~ msgid "Fiscal Year"
-#~ msgstr "Ejercicio fiscal"
+#. module: hr_payroll
+#: field:hr.payslip.line,condition_range:0
+#: field:hr.salary.rule,condition_range:0
+msgid "Range Based on"
+msgstr ""
diff --git a/addons/hr_payroll/report/report_contribution_register.rml b/addons/hr_payroll/report/report_contribution_register.rml
index b3a5de9753d..8a5897c6091 100644
--- a/addons/hr_payroll/report/report_contribution_register.rml
+++ b/addons/hr_payroll/report/report_contribution_register.rml
@@ -206,7 +206,7 @@
[[ formatLang(r['amount']) ]]
- [[ formatLang(r['total']) ]] [[o.company_id and o.company_id.currency_id.symbol or '']]
+ [[ formatLang(r['total'], currency_obj = o.company_id and o.company_id.currency_id)]]
@@ -222,7 +222,7 @@
Total:
- [[ formatLang(sum_total()) ]] [[o.company_id and o.company_id.currency_id.symbol or '']]
+ [[ formatLang(sum_total(), currency_obj = o.company_id and o.company_id.currency_id)]]
diff --git a/addons/hr_payroll/report/report_payslip.rml b/addons/hr_payroll/report/report_payslip.rml
index 4d96e4b5ef7..990419ee5f1 100644
--- a/addons/hr_payroll/report/report_payslip.rml
+++ b/addons/hr_payroll/report/report_payslip.rml
@@ -197,7 +197,8 @@
- [[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street2 or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.zip or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.city or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.state_id and o.employee_id.address_home_id.state_id.name or '' ]] [[o.employee_id.address_home_id and o.employee_id.address_home_id.country_id and o.employee_id.address_home_id.country_id.name or '' ]]
+ [[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]]
+ [[o.employee_id.address_home_id and display_address(o.employee_id.address_home_id)]]
@@ -293,7 +294,7 @@
[[ formatLang(p.amount) ]]
- [[ formatLang(p.total) ]] [[o.company_id and o.company_id.currency_id.symbol or '']]
+ [[ formatLang(p.total, currency_obj = o.company_id and o.company_id.currency_id)]]
diff --git a/addons/hr_payroll/report/report_payslip_details.rml b/addons/hr_payroll/report/report_payslip_details.rml
index fe6a10dd1f5..4ace0ad2f82 100644
--- a/addons/hr_payroll/report/report_payslip_details.rml
+++ b/addons/hr_payroll/report/report_payslip_details.rml
@@ -234,7 +234,8 @@
- [[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street2 or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.zip or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.city or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.state_id and o.employee_id.address_home_id.state_id.name or '' ]] [[o.employee_id.address_home_id and o.employee_id.address_home_id.country_id and o.employee_id.address_home_id.country_id.name or '' ]]
+ [[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]]
+ [[o.employee_id.address_home_id and display_address(o.employee_id.address_home_id)]]
@@ -334,7 +335,7 @@
[[ '..'*h['level'] ]] [[ h['rule_category'] ]][[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]]
- [[ formatLang(h['total']) ]] [[o.company_id and o.company_id.currency_id.symbol or '']] [[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]
+ [[ formatLang(h['total'], currency_obj = o.company_id and o.company_id.currency_id)]] [[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]
@@ -391,7 +392,7 @@
[[ formatLang(r['amount']) ]]
- [[ formatLang(r['total']) ]] [[ o.company_id and o.company_id.currency_id.symbol or '']][[ r.get('register_name', False) and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font')]]
+ [[ formatLang(r['total'], currency_obj = o.company_id and o.company_id.currency_id)]][[ r.get('register_name', False) and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font')]]
diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py
index 31959d7e9c7..ccfcae0d26e 100644
--- a/addons/hr_recruitment/hr_recruitment.py
+++ b/addons/hr_recruitment/hr_recruitment.py
@@ -26,6 +26,7 @@ from base_status.base_stage import base_stage
from datetime import datetime
from osv import fields, osv
from tools.translate import _
+from tools import html2plaintext
AVAILABLE_STATES = [
('draft', 'New'),
@@ -327,9 +328,10 @@ class hr_applicant(base_stage, osv.Model):
This override updates the document according to the email.
"""
if custom_values is None: custom_values = {}
+ desc = html2plaintext(msg.get('body')) if msg.get('body') else ''
custom_values.update({
'name': msg.get('subject') or _("No Subject"),
- 'description': msg.get('body'),
+ 'description': desc,
'email_from': msg.get('from'),
'email_cc': msg.get('cc'),
'user_id': False,
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index d48086f5663..11143201895 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -342,8 +342,8 @@
attrs="{'invisible':[('survey_id','=',False)]}"/>
-
-
+
+
@
diff --git a/addons/hr_recruitment/report/hr_recruitment_report_view.xml b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
index 1b0b8bfa7c5..b33b2eaa053 100644
--- a/addons/hr_recruitment/report/hr_recruitment_report_view.xml
+++ b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
@@ -5,7 +5,7 @@
hr.recruitment.report.tree
hr.recruitment.report
-
+
diff --git a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
index 37c40f60f6d..50a99673e73 100644
--- a/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
+++ b/addons/hr_timesheet_sheet/report/hr_timesheet_report_view.xml
@@ -15,7 +15,7 @@
hr.timesheet.report.tree
hr.timesheet.report
-
+
diff --git a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py
index 3bd495036d5..2af8792472e 100644
--- a/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py
+++ b/addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py
@@ -35,7 +35,7 @@ class hr_timesheet_current_open(osv.osv_memory):
user_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
if not len(user_ids):
- raise osv.except_osv(_('Error!'), _('Please define employee for your user!'))
+ raise osv.except_osv(_('Error!'), _('Please create an employee and associate it with this user.'))
ids = ts.search(cr, uid, [('user_id','=',uid),('state','=','draft'),('date_from','<=',time.strftime('%Y-%m-%d')), ('date_to','>=',time.strftime('%Y-%m-%d'))], context=context)
if len(ids) > 1:
diff --git a/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml b/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml
index 415f3a08f1f..ff1a2c2064d 100644
--- a/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml
+++ b/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml
@@ -108,7 +108,7 @@
[[ l['code'] (l['intra_code']) ]]
- [[ l['amount'] or O.OO ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(l['amount'], currency_obj=company.currency_id) ]]
@@ -129,7 +129,7 @@
Total:
- [[ data['form']['amountsum'] or 0.00 ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(data['form']['amountsum'], currency_obj=company.currency_id) ]]
diff --git a/addons/l10n_fr_hr_payroll/report/fiche_paye.rml b/addons/l10n_fr_hr_payroll/report/fiche_paye.rml
index 5221b00c462..76c6eb9dedf 100644
--- a/addons/l10n_fr_hr_payroll/report/fiche_paye.rml
+++ b/addons/l10n_fr_hr_payroll/report/fiche_paye.rml
@@ -290,9 +290,7 @@
[[o.employee_id.name or '_']]
- [[o.employee_id.address_home_id.street or '_' ]]
- [[o.employee_id.address_home_id.street2 or '' ]]
- [[o.employee_id.address_home_id.zip or '_' ]] [[o.employee_id.address_home_id.city or '' ]]
+ [[display_address(o.employee_id.address_home_id) or '_' ]]
diff --git a/addons/l10n_in_hr_payroll/i18n/bn.po b/addons/l10n_in_hr_payroll/i18n/bn.po
index ea9fcfd7bb3..0fd88c3813e 100644
--- a/addons/l10n_in_hr_payroll/i18n/bn.po
+++ b/addons/l10n_in_hr_payroll/i18n/bn.po
@@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-17 06:46+0000\n"
-"PO-Revision-Date: 2012-08-17 06:46+0000\n"
-"Last-Translator: <>\n"
+"POT-Creation-Date: 2012-09-10 09:14+0000\n"
+"PO-Revision-Date: 2012-10-10 12:31+0000\n"
+"Last-Translator: Fabien (Open ERP) \n"
"Language-Team: Bengali \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
+"X-Generator: Launchpad (build 16118)\n"
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "E-mail Address"
-msgstr ""
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,employee_bank_no:0
-msgid "Employee Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in draft state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Title"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Payment Advice from"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
-msgid "Hr Salary Employee By Category Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employees Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Allowances with Basic:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Department"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Deductions:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "A/C no."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,driver_salay:0
-msgid "Driver Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
-msgid "Yearly Salary by Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
-msgid "Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "March"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "("
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,company_id:0
-#: field:hr.payroll.advice.line,company_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "The Manager"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Letter Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ","
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Set to Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,number_of_year:0
-msgid "Total years of work experience"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "to"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Total :"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payslip.run,available_advice:0
-msgid "Made Payment Advice?"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Advices which are paid using NEFT transfer"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,tds:0
-msgid "Amount for Tax Deduction at Source"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
-msgid "Pay Slip"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,day:0
-msgid "Day"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Month of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.payslip:0
-msgid "Payslip 'Date From' must be before 'Date To'."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,batch_id:0
-msgid "Batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Other Information"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Cancelled"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "For"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Details by Salary Rule Category:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,voluntary_provident_fund:0
-msgid "VPF computed as percentage(%)"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,number:0
-#: report:paylip.details.in:0
-msgid "Reference"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Group By..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,medical_insurance:0
-msgid "Medical Insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Identification No"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Confirmed"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,bysal:0
-#: field:payment.advice.report,bysal:0
-#: report:payroll.advice:0
-msgid "By Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Confirm"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,chaque_nos:0
-#: field:payment.advice.report,cheque_nos:0
-msgid "Cheque Numbers"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:res.company:0
-msgid "Error! You can not create recursive companies."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
-msgid "Yearly Salary by Head"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#, python-format
-msgid "You can not confirm Payment advice without advice lines."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,state:0
-#: field:payment.advice.report,state:0
-msgid "State"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Yours Sincerely"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,medical_insurance:0
-msgid "Deduction towards company provided medical insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
-msgid "Bank Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Email"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payslip.run,available_advice:0
-msgid "If this box is checked which means that Payment Advice exists for current batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Error !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Print"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
-msgid "Payslip Batches"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,debit_credit:0
-#: report:payroll.advice:0
-msgid "C/D"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.employee.bymonth:0
-msgid "Yearly Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
-msgid "Print Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,line_ids:0
-msgid "Employee Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "July"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Configuration"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
-msgid "Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
-#: view:payment.advice.report:0
-msgid "Advices Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc:0
-msgid "IFSC"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,tds:0
-msgid "TDS"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,join_date:0
-msgid "Join Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.contract:0
-msgid "Error! Contract start-date must be less than contract end-date."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:res.company,dearness_allowance:0
-msgid "Dearness Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "August"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Deduction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Search Payment advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "SI. No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in confirm state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "December"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Sheet"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,month:0
-msgid "Month"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Non Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "or"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
-msgid "Hr Salary Employee By Month Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,category_id:0
-msgid "Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#, python-format
-msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "To Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,number_of_year:0
-msgid "No. of Years of Service"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Note"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Salary Rule Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: selection:hr.payroll.advice,state:0
-#: view:payment.advice.report:0
-#: selection:payment.advice.report,state:0
-msgid "Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,voluntary_provident_fund:0
-msgid "Voluntary Provident Fund"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
-msgid "Payment Advice Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Status"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,city_type:0
-msgid "Type of City"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:res.company,dearness_allowance:0
-msgid "Check this box if your company provide Dearness Allowance to employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc_code:0
-#: field:payment.advice.report,ifsc_code:0
-#: report:payroll.advice:0
-msgid "IFSC Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "June"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,nbr:0
-msgid "# Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
-msgid "PaySlip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,date:0
-#: field:payment.advice.report,date:0
-msgid "Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "November"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Extended Filters..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
-msgid "This report performs analysis on Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "October"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Designation"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "January"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "Pay Head Employee Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
-msgid "Companies"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:payroll.advice:0
-msgid "Authorized Signature"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
-msgid "Contract"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice.line:0
-msgid "Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "To,"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,driver_salay:0
-msgid "Check this box if you provide allowance for driver"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice.line,advice_id:0
-#: field:hr.payslip,advice_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
-msgid "Bank Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Other No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Draft Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,neft:0
-msgid "Check this box if your company use online transfer for salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,number:0
-msgid "Number"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "September"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Cancel"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Day of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.employee:0
-msgid "Error! You cannot create recursive hierarchy of Employee(s)."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Payslip Batches ready to be Adviced"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Pay Slip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Total Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,employee_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
-#: view:payment.advice.report:0
-#: field:payment.advice.report,employee_id:0
-msgid "Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Compute Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,join_date:0
-msgid "Joining date of employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Dear Sir/Madam,"
-msgstr "Dear Sir/Madam,"
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,note:0
-msgid "Description"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ")"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Payroll"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "NEFT"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Address"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,bank_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,bank_id:0
-#: report:payroll.advice:0
-#: report:salary.detail.byyear:0
-msgid "Bank"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,end_date:0
-#: field:yearly.salary.detail,date_to:0
-msgid "End Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "February"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: sql_constraint:res.company:0
-msgid "The company name must be unique !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,name:0
-#: report:paylip.details.in:0
-#: field:payment.advice.report,name:0
-#: report:salary.employee.bymonth:0
-msgid "Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: field:hr.salary.employee.month,employee_ids:0
-#: view:yearly.salary.detail:0
-#: field:yearly.salary.detail,employee_ids:0
-msgid "Employees"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "April"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Name of the Employe"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Please define bank account for the %s employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,start_date:0
-#: field:yearly.salary.detail,date_from:0
-msgid "Start Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,bank_id:0
-msgid "Select the Bank from which the salary is going to be paid"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "Employee Pay Head Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Phone No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Credit"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,name:0
-#: report:payroll.advice:0
-msgid "Bank Account No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,date:0
-msgid "Advice Date is used to search Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "May"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Create Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,year:0
-msgid "Year"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,neft:0
-#: field:payment.advice.report,neft:0
-msgid "NEFT Transaction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "Total"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "form period"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Year of Payment Advices"
-msgstr ""
\ No newline at end of file
diff --git a/addons/l10n_in_hr_payroll/i18n/gu.po b/addons/l10n_in_hr_payroll/i18n/gu.po
index 2c321b13191..844c492e28b 100644
--- a/addons/l10n_in_hr_payroll/i18n/gu.po
+++ b/addons/l10n_in_hr_payroll/i18n/gu.po
@@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-17 06:46+0000\n"
-"PO-Revision-Date: 2012-08-17 06:46+0000\n"
-"Last-Translator: <>\n"
+"POT-Creation-Date: 2012-09-10 09:14+0000\n"
+"PO-Revision-Date: 2012-10-10 12:31+0000\n"
+"Last-Translator: Fabien (Open ERP) \n"
"Language-Team: Gujarati \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
+"X-Generator: Launchpad (build 16118)\n"
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "E-mail Address"
-msgstr ""
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,employee_bank_no:0
-msgid "Employee Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in draft state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Title"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Payment Advice from"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
-msgid "Hr Salary Employee By Category Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employees Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Allowances with Basic:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Department"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Deductions:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "A/C no."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,driver_salay:0
-msgid "Driver Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
-msgid "Yearly Salary by Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
-msgid "Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "March"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "("
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,company_id:0
-#: field:hr.payroll.advice.line,company_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "The Manager"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Letter Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ","
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Set to Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,number_of_year:0
-msgid "Total years of work experience"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "to"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Total :"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payslip.run,available_advice:0
-msgid "Made Payment Advice?"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Advices which are paid using NEFT transfer"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,tds:0
-msgid "Amount for Tax Deduction at Source"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
-msgid "Pay Slip"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,day:0
-msgid "Day"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Month of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.payslip:0
-msgid "Payslip 'Date From' must be before 'Date To'."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,batch_id:0
-msgid "Batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Other Information"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Cancelled"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "For"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Details by Salary Rule Category:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,voluntary_provident_fund:0
-msgid "VPF computed as percentage(%)"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,number:0
-#: report:paylip.details.in:0
-msgid "Reference"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Group By..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,medical_insurance:0
-msgid "Medical Insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Identification No"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Confirmed"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,bysal:0
-#: field:payment.advice.report,bysal:0
-#: report:payroll.advice:0
-msgid "By Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Confirm"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,chaque_nos:0
-#: field:payment.advice.report,cheque_nos:0
-msgid "Cheque Numbers"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:res.company:0
-msgid "Error! You can not create recursive companies."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
-msgid "Yearly Salary by Head"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#, python-format
-msgid "You can not confirm Payment advice without advice lines."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,state:0
-#: field:payment.advice.report,state:0
-msgid "State"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Yours Sincerely"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,medical_insurance:0
-msgid "Deduction towards company provided medical insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
-msgid "Bank Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Email"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payslip.run,available_advice:0
-msgid "If this box is checked which means that Payment Advice exists for current batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Error !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Print"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
-msgid "Payslip Batches"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,debit_credit:0
-#: report:payroll.advice:0
-msgid "C/D"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.employee.bymonth:0
-msgid "Yearly Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
-msgid "Print Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,line_ids:0
-msgid "Employee Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "July"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Configuration"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
-msgid "Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
-#: view:payment.advice.report:0
-msgid "Advices Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc:0
-msgid "IFSC"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,tds:0
-msgid "TDS"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,join_date:0
-msgid "Join Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.contract:0
-msgid "Error! Contract start-date must be less than contract end-date."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:res.company,dearness_allowance:0
-msgid "Dearness Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "August"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Deduction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Search Payment advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "SI. No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in confirm state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "December"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Sheet"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,month:0
-msgid "Month"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Non Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "or"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
-msgid "Hr Salary Employee By Month Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,category_id:0
-msgid "Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#, python-format
-msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "To Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,number_of_year:0
-msgid "No. of Years of Service"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Note"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Salary Rule Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: selection:hr.payroll.advice,state:0
-#: view:payment.advice.report:0
-#: selection:payment.advice.report,state:0
-msgid "Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,voluntary_provident_fund:0
-msgid "Voluntary Provident Fund"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
-msgid "Payment Advice Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Status"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,city_type:0
-msgid "Type of City"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:res.company,dearness_allowance:0
-msgid "Check this box if your company provide Dearness Allowance to employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc_code:0
-#: field:payment.advice.report,ifsc_code:0
-#: report:payroll.advice:0
-msgid "IFSC Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "June"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,nbr:0
-msgid "# Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
-msgid "PaySlip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,date:0
-#: field:payment.advice.report,date:0
-msgid "Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "November"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Extended Filters..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
-msgid "This report performs analysis on Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "October"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Designation"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "January"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "Pay Head Employee Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
-msgid "Companies"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:payroll.advice:0
-msgid "Authorized Signature"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
-msgid "Contract"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice.line:0
-msgid "Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "To,"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,driver_salay:0
-msgid "Check this box if you provide allowance for driver"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice.line,advice_id:0
-#: field:hr.payslip,advice_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
-msgid "Bank Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Other No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Draft Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,neft:0
-msgid "Check this box if your company use online transfer for salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,number:0
-msgid "Number"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "September"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Cancel"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Day of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.employee:0
-msgid "Error! You cannot create recursive hierarchy of Employee(s)."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Payslip Batches ready to be Adviced"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Pay Slip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Total Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,employee_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
-#: view:payment.advice.report:0
-#: field:payment.advice.report,employee_id:0
-msgid "Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Compute Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,join_date:0
-msgid "Joining date of employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Dear Sir/Madam,"
-msgstr "Dear Sir/Madam,"
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,note:0
-msgid "Description"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ")"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Payroll"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "NEFT"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Address"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,bank_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,bank_id:0
-#: report:payroll.advice:0
-#: report:salary.detail.byyear:0
-msgid "Bank"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,end_date:0
-#: field:yearly.salary.detail,date_to:0
-msgid "End Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "February"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: sql_constraint:res.company:0
-msgid "The company name must be unique !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,name:0
-#: report:paylip.details.in:0
-#: field:payment.advice.report,name:0
-#: report:salary.employee.bymonth:0
-msgid "Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: field:hr.salary.employee.month,employee_ids:0
-#: view:yearly.salary.detail:0
-#: field:yearly.salary.detail,employee_ids:0
-msgid "Employees"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "April"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Name of the Employe"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Please define bank account for the %s employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,start_date:0
-#: field:yearly.salary.detail,date_from:0
-msgid "Start Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,bank_id:0
-msgid "Select the Bank from which the salary is going to be paid"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "Employee Pay Head Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Phone No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Credit"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,name:0
-#: report:payroll.advice:0
-msgid "Bank Account No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,date:0
-msgid "Advice Date is used to search Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "May"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Create Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,year:0
-msgid "Year"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,neft:0
-#: field:payment.advice.report,neft:0
-msgid "NEFT Transaction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "Total"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "form period"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Year of Payment Advices"
-msgstr ""
\ No newline at end of file
diff --git a/addons/l10n_in_hr_payroll/i18n/hi.po b/addons/l10n_in_hr_payroll/i18n/hi.po
index d7cc9dc1519..b13e24e05f9 100644
--- a/addons/l10n_in_hr_payroll/i18n/hi.po
+++ b/addons/l10n_in_hr_payroll/i18n/hi.po
@@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-17 06:46+0000\n"
-"PO-Revision-Date: 2012-08-17 06:46+0000\n"
-"Last-Translator: <>\n"
+"POT-Creation-Date: 2012-09-10 09:14+0000\n"
+"PO-Revision-Date: 2012-10-10 12:31+0000\n"
+"Last-Translator: Fabien (Open ERP) \n"
"Language-Team: Hindi \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
+"X-Generator: Launchpad (build 16118)\n"
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "E-mail Address"
-msgstr ""
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,employee_bank_no:0
-msgid "Employee Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in draft state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Title"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Payment Advice from"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
-msgid "Hr Salary Employee By Category Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employees Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Allowances with Basic:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Department"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Deductions:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "A/C no."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,driver_salay:0
-msgid "Driver Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
-msgid "Yearly Salary by Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
-msgid "Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "March"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "("
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,company_id:0
-#: field:hr.payroll.advice.line,company_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "The Manager"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Letter Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ","
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Set to Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,number_of_year:0
-msgid "Total years of work experience"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "to"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Total :"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payslip.run,available_advice:0
-msgid "Made Payment Advice?"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Advices which are paid using NEFT transfer"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,tds:0
-msgid "Amount for Tax Deduction at Source"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
-msgid "Pay Slip"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,day:0
-msgid "Day"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Month of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.payslip:0
-msgid "Payslip 'Date From' must be before 'Date To'."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,batch_id:0
-msgid "Batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Other Information"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Cancelled"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "For"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Details by Salary Rule Category:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,voluntary_provident_fund:0
-msgid "VPF computed as percentage(%)"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,number:0
-#: report:paylip.details.in:0
-msgid "Reference"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Group By..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,medical_insurance:0
-msgid "Medical Insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Identification No"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Confirmed"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,bysal:0
-#: field:payment.advice.report,bysal:0
-#: report:payroll.advice:0
-msgid "By Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Confirm"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,chaque_nos:0
-#: field:payment.advice.report,cheque_nos:0
-msgid "Cheque Numbers"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:res.company:0
-msgid "Error! You can not create recursive companies."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
-msgid "Yearly Salary by Head"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#, python-format
-msgid "You can not confirm Payment advice without advice lines."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,state:0
-#: field:payment.advice.report,state:0
-msgid "State"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Yours Sincerely"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,medical_insurance:0
-msgid "Deduction towards company provided medical insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
-msgid "Bank Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Email"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payslip.run,available_advice:0
-msgid "If this box is checked which means that Payment Advice exists for current batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Error !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Print"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
-msgid "Payslip Batches"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,debit_credit:0
-#: report:payroll.advice:0
-msgid "C/D"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.employee.bymonth:0
-msgid "Yearly Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
-msgid "Print Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,line_ids:0
-msgid "Employee Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "July"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Configuration"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
-msgid "Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
-#: view:payment.advice.report:0
-msgid "Advices Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc:0
-msgid "IFSC"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,tds:0
-msgid "TDS"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,join_date:0
-msgid "Join Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.contract:0
-msgid "Error! Contract start-date must be less than contract end-date."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:res.company,dearness_allowance:0
-msgid "Dearness Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "August"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Deduction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Search Payment advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "SI. No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in confirm state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "December"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Sheet"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,month:0
-msgid "Month"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Non Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "or"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
-msgid "Hr Salary Employee By Month Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,category_id:0
-msgid "Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#, python-format
-msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "To Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,number_of_year:0
-msgid "No. of Years of Service"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Note"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Salary Rule Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: selection:hr.payroll.advice,state:0
-#: view:payment.advice.report:0
-#: selection:payment.advice.report,state:0
-msgid "Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,voluntary_provident_fund:0
-msgid "Voluntary Provident Fund"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
-msgid "Payment Advice Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Status"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,city_type:0
-msgid "Type of City"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:res.company,dearness_allowance:0
-msgid "Check this box if your company provide Dearness Allowance to employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc_code:0
-#: field:payment.advice.report,ifsc_code:0
-#: report:payroll.advice:0
-msgid "IFSC Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "June"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,nbr:0
-msgid "# Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
-msgid "PaySlip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,date:0
-#: field:payment.advice.report,date:0
-msgid "Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "November"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Extended Filters..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
-msgid "This report performs analysis on Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "October"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Designation"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "January"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "Pay Head Employee Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
-msgid "Companies"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:payroll.advice:0
-msgid "Authorized Signature"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
-msgid "Contract"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice.line:0
-msgid "Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "To,"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,driver_salay:0
-msgid "Check this box if you provide allowance for driver"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice.line,advice_id:0
-#: field:hr.payslip,advice_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
-msgid "Bank Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Other No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Draft Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,neft:0
-msgid "Check this box if your company use online transfer for salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,number:0
-msgid "Number"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "September"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Cancel"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Day of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.employee:0
-msgid "Error! You cannot create recursive hierarchy of Employee(s)."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Payslip Batches ready to be Adviced"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Pay Slip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Total Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,employee_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
-#: view:payment.advice.report:0
-#: field:payment.advice.report,employee_id:0
-msgid "Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Compute Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,join_date:0
-msgid "Joining date of employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Dear Sir/Madam,"
-msgstr "Dear Sir/Madam,"
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,note:0
-msgid "Description"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ")"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Payroll"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "NEFT"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Address"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,bank_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,bank_id:0
-#: report:payroll.advice:0
-#: report:salary.detail.byyear:0
-msgid "Bank"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,end_date:0
-#: field:yearly.salary.detail,date_to:0
-msgid "End Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "February"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: sql_constraint:res.company:0
-msgid "The company name must be unique !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,name:0
-#: report:paylip.details.in:0
-#: field:payment.advice.report,name:0
-#: report:salary.employee.bymonth:0
-msgid "Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: field:hr.salary.employee.month,employee_ids:0
-#: view:yearly.salary.detail:0
-#: field:yearly.salary.detail,employee_ids:0
-msgid "Employees"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "April"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Name of the Employe"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Please define bank account for the %s employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,start_date:0
-#: field:yearly.salary.detail,date_from:0
-msgid "Start Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,bank_id:0
-msgid "Select the Bank from which the salary is going to be paid"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "Employee Pay Head Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Phone No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Credit"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,name:0
-#: report:payroll.advice:0
-msgid "Bank Account No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,date:0
-msgid "Advice Date is used to search Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "May"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Create Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,year:0
-msgid "Year"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,neft:0
-#: field:payment.advice.report,neft:0
-msgid "NEFT Transaction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "Total"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "form period"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Year of Payment Advices"
-msgstr ""
\ No newline at end of file
diff --git a/addons/l10n_in_hr_payroll/i18n/ta.po b/addons/l10n_in_hr_payroll/i18n/ta.po
index 98d00c76a33..dbe0e244bee 100644
--- a/addons/l10n_in_hr_payroll/i18n/ta.po
+++ b/addons/l10n_in_hr_payroll/i18n/ta.po
@@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-17 06:46+0000\n"
-"PO-Revision-Date: 2012-08-17 06:46+0000\n"
-"Last-Translator: <>\n"
+"POT-Creation-Date: 2012-09-10 09:14+0000\n"
+"PO-Revision-Date: 2012-10-10 12:31+0000\n"
+"Last-Translator: Fabien (Open ERP) \n"
"Language-Team: Tamil \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
+"X-Generator: Launchpad (build 16118)\n"
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "E-mail Address"
-msgstr ""
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,employee_bank_no:0
-msgid "Employee Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in draft state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Title"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Payment Advice from"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
-msgid "Hr Salary Employee By Category Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employees Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Allowances with Basic:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Department"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Deductions:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "A/C no."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,driver_salay:0
-msgid "Driver Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
-msgid "Yearly Salary by Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
-msgid "Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "March"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "("
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,company_id:0
-#: field:hr.payroll.advice.line,company_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "The Manager"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Letter Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ","
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Set to Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,number_of_year:0
-msgid "Total years of work experience"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "to"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Total :"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payslip.run,available_advice:0
-msgid "Made Payment Advice?"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Advices which are paid using NEFT transfer"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,tds:0
-msgid "Amount for Tax Deduction at Source"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
-msgid "Pay Slip"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,day:0
-msgid "Day"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Month of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.payslip:0
-msgid "Payslip 'Date From' must be before 'Date To'."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,batch_id:0
-msgid "Batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Other Information"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Cancelled"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "For"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Details by Salary Rule Category:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,voluntary_provident_fund:0
-msgid "VPF computed as percentage(%)"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,number:0
-#: report:paylip.details.in:0
-msgid "Reference"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Group By..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,medical_insurance:0
-msgid "Medical Insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Identification No"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Confirmed"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,bysal:0
-#: field:payment.advice.report,bysal:0
-#: report:payroll.advice:0
-msgid "By Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Confirm"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,chaque_nos:0
-#: field:payment.advice.report,cheque_nos:0
-msgid "Cheque Numbers"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:res.company:0
-msgid "Error! You can not create recursive companies."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
-msgid "Yearly Salary by Head"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#, python-format
-msgid "You can not confirm Payment advice without advice lines."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,state:0
-#: field:payment.advice.report,state:0
-msgid "State"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Yours Sincerely"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,medical_insurance:0
-msgid "Deduction towards company provided medical insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
-msgid "Bank Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Email"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payslip.run,available_advice:0
-msgid "If this box is checked which means that Payment Advice exists for current batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Error !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Print"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
-msgid "Payslip Batches"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,debit_credit:0
-#: report:payroll.advice:0
-msgid "C/D"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.employee.bymonth:0
-msgid "Yearly Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
-msgid "Print Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,line_ids:0
-msgid "Employee Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "July"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Configuration"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
-msgid "Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
-#: view:payment.advice.report:0
-msgid "Advices Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc:0
-msgid "IFSC"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,tds:0
-msgid "TDS"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,join_date:0
-msgid "Join Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.contract:0
-msgid "Error! Contract start-date must be less than contract end-date."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:res.company,dearness_allowance:0
-msgid "Dearness Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "August"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Deduction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Search Payment advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "SI. No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in confirm state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "December"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Sheet"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,month:0
-msgid "Month"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Non Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "or"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
-msgid "Hr Salary Employee By Month Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,category_id:0
-msgid "Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#, python-format
-msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "To Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,number_of_year:0
-msgid "No. of Years of Service"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Note"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Salary Rule Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: selection:hr.payroll.advice,state:0
-#: view:payment.advice.report:0
-#: selection:payment.advice.report,state:0
-msgid "Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,voluntary_provident_fund:0
-msgid "Voluntary Provident Fund"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
-msgid "Payment Advice Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Status"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,city_type:0
-msgid "Type of City"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:res.company,dearness_allowance:0
-msgid "Check this box if your company provide Dearness Allowance to employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc_code:0
-#: field:payment.advice.report,ifsc_code:0
-#: report:payroll.advice:0
-msgid "IFSC Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "June"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,nbr:0
-msgid "# Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
-msgid "PaySlip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,date:0
-#: field:payment.advice.report,date:0
-msgid "Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "November"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Extended Filters..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
-msgid "This report performs analysis on Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "October"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Designation"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "January"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "Pay Head Employee Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
-msgid "Companies"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:payroll.advice:0
-msgid "Authorized Signature"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
-msgid "Contract"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice.line:0
-msgid "Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "To,"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,driver_salay:0
-msgid "Check this box if you provide allowance for driver"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice.line,advice_id:0
-#: field:hr.payslip,advice_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
-msgid "Bank Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Other No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Draft Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,neft:0
-msgid "Check this box if your company use online transfer for salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,number:0
-msgid "Number"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "September"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Cancel"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Day of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.employee:0
-msgid "Error! You cannot create recursive hierarchy of Employee(s)."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Payslip Batches ready to be Adviced"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Pay Slip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Total Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,employee_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
-#: view:payment.advice.report:0
-#: field:payment.advice.report,employee_id:0
-msgid "Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Compute Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,join_date:0
-msgid "Joining date of employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Dear Sir/Madam,"
-msgstr "Dear Sir/Madam,"
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,note:0
-msgid "Description"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ")"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Payroll"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "NEFT"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Address"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,bank_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,bank_id:0
-#: report:payroll.advice:0
-#: report:salary.detail.byyear:0
-msgid "Bank"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,end_date:0
-#: field:yearly.salary.detail,date_to:0
-msgid "End Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "February"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: sql_constraint:res.company:0
-msgid "The company name must be unique !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,name:0
-#: report:paylip.details.in:0
-#: field:payment.advice.report,name:0
-#: report:salary.employee.bymonth:0
-msgid "Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: field:hr.salary.employee.month,employee_ids:0
-#: view:yearly.salary.detail:0
-#: field:yearly.salary.detail,employee_ids:0
-msgid "Employees"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "April"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Name of the Employe"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Please define bank account for the %s employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,start_date:0
-#: field:yearly.salary.detail,date_from:0
-msgid "Start Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,bank_id:0
-msgid "Select the Bank from which the salary is going to be paid"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "Employee Pay Head Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Phone No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Credit"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,name:0
-#: report:payroll.advice:0
-msgid "Bank Account No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,date:0
-msgid "Advice Date is used to search Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "May"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Create Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,year:0
-msgid "Year"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,neft:0
-#: field:payment.advice.report,neft:0
-msgid "NEFT Transaction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "Total"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "form period"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Year of Payment Advices"
-msgstr ""
\ No newline at end of file
diff --git a/addons/l10n_in_hr_payroll/i18n/te.po b/addons/l10n_in_hr_payroll/i18n/te.po
index 0c6f6127c4d..47ea35552f8 100644
--- a/addons/l10n_in_hr_payroll/i18n/te.po
+++ b/addons/l10n_in_hr_payroll/i18n/te.po
@@ -6,928 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-17 06:46+0000\n"
-"PO-Revision-Date: 2012-08-17 06:46+0000\n"
-"Last-Translator: <>\n"
+"POT-Creation-Date: 2012-09-10 09:14+0000\n"
+"PO-Revision-Date: 2012-10-10 12:31+0000\n"
+"Last-Translator: Fabien (Open ERP) \n"
"Language-Team: Telugu \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-10-11 05:00+0000\n"
+"X-Generator: Launchpad (build 16118)\n"
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "E-mail Address"
-msgstr ""
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,employee_bank_no:0
-msgid "Employee Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in draft state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Title"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Payment Advice from"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail
-msgid "Hr Salary Employee By Category Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employees Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Allowances with Basic:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Department"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Deductions:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "A/C no."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,driver_salay:0
-msgid "Driver Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail
-msgid "Yearly Salary by Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list
-msgid "Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "March"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "("
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,company_id:0
-#: field:hr.payroll.advice.line,company_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "The Manager"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Letter Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ","
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Set to Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,number_of_year:0
-msgid "Total years of work experience"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "to"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Total :"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payslip.run,available_advice:0
-msgid "Made Payment Advice?"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Advices which are paid using NEFT transfer"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,tds:0
-msgid "Amount for Tax Deduction at Source"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip
-msgid "Pay Slip"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,day:0
-msgid "Day"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Month of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.payslip:0
-msgid "Payslip 'Date From' must be before 'Date To'."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,batch_id:0
-msgid "Batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Other Information"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Cancelled"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "For"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Details by Salary Rule Category:"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,voluntary_provident_fund:0
-msgid "VPF computed as percentage(%)"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,number:0
-#: report:paylip.details.in:0
-msgid "Reference"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Group By..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,medical_insurance:0
-msgid "Medical Insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Identification No"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.payroll.advice,state:0
-#: selection:payment.advice.report,state:0
-msgid "Confirmed"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,bysal:0
-#: field:payment.advice.report,bysal:0
-#: report:payroll.advice:0
-msgid "By Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Confirm"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,chaque_nos:0
-#: field:payment.advice.report,cheque_nos:0
-msgid "Cheque Numbers"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:res.company:0
-msgid "Error! You can not create recursive companies."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month
-msgid "Yearly Salary by Head"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#, python-format
-msgid "You can not confirm Payment advice without advice lines."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,state:0
-#: field:payment.advice.report,state:0
-msgid "State"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Yours Sincerely"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,medical_insurance:0
-msgid "Deduction towards company provided medical insurance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line
-msgid "Bank Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Email"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payslip.run,available_advice:0
-msgid "If this box is checked which means that Payment Advice exists for current batch"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:184
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Error !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Print"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run
-msgid "Payslip Batches"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,debit_credit:0
-#: report:payroll.advice:0
-msgid "C/D"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.employee.bymonth:0
-msgid "Yearly Salary Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice
-msgid "Print Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,line_ids:0
-msgid "Employee Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "July"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Configuration"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice
-msgid "Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all
-#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice
-#: view:payment.advice.report:0
-msgid "Advices Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "This wizard will print report which displays employees break-up of Net Head for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc:0
-msgid "IFSC"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,tds:0
-msgid "TDS"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,join_date:0
-msgid "Join Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.contract:0
-msgid "Error! Contract start-date must be less than contract end-date."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:res.company,dearness_allowance:0
-msgid "Dearness Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "August"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Deduction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Search Payment advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "SI. No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Payment Advices which are in confirm state"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "December"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Confirm Sheet"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,month:0
-msgid "Month"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Non Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "or"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month
-msgid "Hr Salary Employee By Month Report"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,category_id:0
-msgid "Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:240
-#, python-format
-msgid "Payment advice already exists for %s, 'Set to Draft' to create a new advice."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "To Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.employee,number_of_year:0
-msgid "No. of Years of Service"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Note"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Salary Rule Category"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: selection:hr.payroll.advice,state:0
-#: view:payment.advice.report:0
-#: selection:payment.advice.report,state:0
-msgid "Draft"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Date From"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,voluntary_provident_fund:0
-msgid "Voluntary Provident Fund"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Employee Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report
-msgid "Payment Advice Analysis"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:payment.advice.report:0
-msgid "Status"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.contract,city_type:0
-msgid "Type of City"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:res.company,dearness_allowance:0
-msgid "Check this box if your company provide Dearness Allowance to employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,ifsc_code:0
-#: field:payment.advice.report,ifsc_code:0
-#: report:payroll.advice:0
-msgid "IFSC Code"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "June"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,nbr:0
-msgid "# Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report
-msgid "PaySlip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Payment Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,date:0
-#: field:payment.advice.report,date:0
-msgid "Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "November"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Extended Filters..."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all
-msgid "This report performs analysis on Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "October"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Designation"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "January"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "Pay Head Employee Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_res_company
-msgid "Companies"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:payroll.advice:0
-msgid "Authorized Signature"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract
-msgid "Contract"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice.line:0
-msgid "Advice Lines"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "To,"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.contract,driver_salay:0
-msgid "Check this box if you provide allowance for driver"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice.line,advice_id:0
-#: field:hr.payslip,advice_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice
-msgid "Bank Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Other No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Draft Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,neft:0
-msgid "Check this box if your company use online transfer for salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "To"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:payment.advice.report,number:0
-msgid "Number"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "September"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: view:hr.salary.employee.month:0
-#: view:yearly.salary.detail:0
-msgid "Cancel"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Day of Payment Advices"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: constraint:hr.employee:0
-msgid "Error! You cannot create recursive hierarchy of Employee(s)."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:yearly.salary.detail:0
-msgid "This wizard will print report which display a pay head employee breakup for a specified dates."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Payslip Batches ready to be Adviced"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Pay Slip Details"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Total Salary"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,employee_id:0
-#: model:ir.model,name:l10n_in_hr_payroll.model_hr_employee
-#: view:payment.advice.report:0
-#: field:payment.advice.report,employee_id:0
-msgid "Employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-msgid "Compute Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.employee,join_date:0
-msgid "Joining date of employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Dear Sir/Madam,"
-msgstr "Dear Sir/Madam,"
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,note:0
-msgid "Description"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid ")"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:res.company:0
-msgid "Payroll"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "NEFT"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-msgid "Address"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,bank_id:0
-#: view:payment.advice.report:0
-#: field:payment.advice.report,bank_id:0
-#: report:payroll.advice:0
-#: report:salary.detail.byyear:0
-msgid "Bank"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,end_date:0
-#: field:yearly.salary.detail,date_to:0
-msgid "End Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "February"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: sql_constraint:res.company:0
-msgid "The company name must be unique !"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payroll.advice:0
-#: field:hr.payroll.advice,name:0
-#: report:paylip.details.in:0
-#: field:payment.advice.report,name:0
-#: report:salary.employee.bymonth:0
-msgid "Name"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:hr.contract,city_type:0
-msgid "Metro"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-#: field:hr.salary.employee.month,employee_ids:0
-#: view:yearly.salary.detail:0
-#: field:yearly.salary.detail,employee_ids:0
-msgid "Employees"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Bank Account"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "April"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "Name of the Employe"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:158
-#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:257
-#, python-format
-msgid "Please define bank account for the %s employee"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.salary.employee.month,start_date:0
-#: field:yearly.salary.detail,date_from:0
-msgid "Start Date"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.contract:0
-msgid "Allowance"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,bank_id:0
-msgid "Select the Bank from which the salary is going to be paid"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.salary.employee.month:0
-msgid "Employee Pay Head Breakup"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:salary.detail.byyear:0
-msgid "Phone No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-msgid "Credit"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice.line,name:0
-#: report:payroll.advice:0
-msgid "Bank Account No."
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: help:hr.payroll.advice,date:0
-msgid "Advice Date is used to search Payslips"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: selection:payment.advice.report,month:0
-msgid "May"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:hr.payslip.run:0
-msgid "Create Advice"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-#: field:payment.advice.report,year:0
-msgid "Year"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: field:hr.payroll.advice,neft:0
-#: field:payment.advice.report,neft:0
-msgid "NEFT Transaction"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:paylip.details.in:0
-#: report:salary.detail.byyear:0
-#: report:salary.employee.bymonth:0
-msgid "Total"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: report:payroll.advice:0
-msgid "form period"
-msgstr ""
-
-#. module: l10n_in_hr_payroll
-#: view:payment.advice.report:0
-msgid "Year of Payment Advices"
-msgstr ""
\ No newline at end of file
diff --git a/addons/l10n_in_hr_payroll/report/payment_advice_report_view.xml b/addons/l10n_in_hr_payroll/report/payment_advice_report_view.xml
index 4d7dbe91ee1..38f1272718b 100644
--- a/addons/l10n_in_hr_payroll/report/payment_advice_report_view.xml
+++ b/addons/l10n_in_hr_payroll/report/payment_advice_report_view.xml
@@ -6,7 +6,7 @@
payment.advice.report.tree
payment.advice.report
-
+
diff --git a/addons/l10n_in_hr_payroll/report/payslip_report_view.xml b/addons/l10n_in_hr_payroll/report/payslip_report_view.xml
index 92eaf3ec4a9..d71cb283336 100644
--- a/addons/l10n_in_hr_payroll/report/payslip_report_view.xml
+++ b/addons/l10n_in_hr_payroll/report/payslip_report_view.xml
@@ -6,7 +6,7 @@
payslip.report.tree
payslip.report
-
+
diff --git a/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml
index 8f2a57d2018..6368a644f4b 100644
--- a/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml
+++ b/addons/l10n_in_hr_payroll/report/report_hr_salary_employee_bymonth.rml
@@ -234,7 +234,7 @@
- [[ formatLang(e[13]) ]] [[company.currency_id.symbol]]
+ [[ formatLang(e[13],currency_obj= company.currency_id)]]
@@ -248,43 +248,43 @@
Total
- [[ formatLang(t[1]) or removeParentNode('para') ]] [[company.currency_id.symbol]]
+ [[ formatLang(t[1],currency_obj= company.currency_id) or removeParentNode('para') ]]
- [[ formatLang(t[2]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[2],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(t[3]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[3],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(t[4]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[4],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(t[5]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[5],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(t[6]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[6],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(t[7]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[7],currency_obj= company.currency_id) or removeParentNode('para')]] ]
- [[ formatLang(t[8]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[8],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(t[9]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[9],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(t[10]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[10],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(t[11]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[11],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(t[12]) or removeParentNode('para')]] [[company.currency_id.symbol]]
+ [[ formatLang(t[12],currency_obj= company.currency_id) or removeParentNode('para')]]
- [[ formatLang(get_total()) ]] [[company.currency_id.symbol]]
+ [[ formatLang(get_total(), currency_obj = company.currency_id)]]
diff --git a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml
index 7fa127b0bd3..502eaa7b0ff 100644
--- a/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml
+++ b/addons/l10n_in_hr_payroll/report/report_hr_yearly_salary_detail.rml
@@ -478,7 +478,7 @@
- [[ formatLang(e1[13]) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(e1[13],currency_obj= company.currency_id) ]]
@@ -571,7 +571,7 @@
- [[ formatLang(e2[13]) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(e2[13],currency_obj= company.currency_id) ]]
diff --git a/addons/l10n_in_hr_payroll/report/report_payroll_advice.rml b/addons/l10n_in_hr_payroll/report/report_payroll_advice.rml
index 8ca1bae5ba5..879314a24d9 100644
--- a/addons/l10n_in_hr_payroll/report/report_payroll_advice.rml
+++ b/addons/l10n_in_hr_payroll/report/report_payroll_advice.rml
@@ -247,7 +247,7 @@
[[ line['acc_no'] ]]
- [[formatLang(line['bysal'])]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]
+ [[formatLang(line['bysal'], currency_obj = company.currency_id) ]]
[[ line['debit_credit'] ]]
@@ -296,7 +296,7 @@
[[ line['ifsc_code'] ]]
- [[formatLang(line['bysal'])]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]
+ [[formatLang(line['bysal'], currency_obj = company.currency_id) ]]
[[ line['debit_credit'] ]]
@@ -321,7 +321,7 @@
- [[ o.line_ids==[] and removeParentNode('para') ]] [[ formatLang(get_bysal_total()) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]
+ [[ o.line_ids==[] and removeParentNode('para') ]] [[ formatLang(get_bysal_total(), currency_obj = company.currency_id) ]]
@@ -347,7 +347,7 @@
- [[ o.line_ids==[] and removeParentNode('para') ]] [[ formatLang(get_bysal_total()) ]] [[ (company.currency_id and company.currency_id.symbol) or '' ]]
+ [[ o.line_ids==[] and removeParentNode('para') ]] [[ formatLang(get_bysal_total(), currency_obj = company.currency_id) ]]
diff --git a/addons/l10n_in_hr_payroll/report/report_payslip_details.rml b/addons/l10n_in_hr_payroll/report/report_payslip_details.rml
index a7ab3db3185..c4ce55bfa41 100644
--- a/addons/l10n_in_hr_payroll/report/report_payslip_details.rml
+++ b/addons/l10n_in_hr_payroll/report/report_payslip_details.rml
@@ -234,7 +234,7 @@
- [[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.street2 or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.zip or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.city or '' ]],[[o.employee_id.address_home_id and o.employee_id.address_home_id.state_id and o.employee_id.address_home_id.state_id.name or '' ]] [[o.employee_id.address_home_id and o.employee_id.address_home_id.country_id and o.employee_id.address_home_id.country_id.name or '' ]]
+ [[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]],[[o.employee_id.address_home_id and display_address(o.employee_id.address_home_id)]]
@@ -334,7 +334,7 @@
[[ '..'*h['level'] ]] [[ h['rule_category'] ]][[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]]
- [[ formatLang(h['total']) ]] [[o.company_id and o.company_id.currency_id.symbol or '']] [[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]
+ [[ formatLang(h['total'], currency_obj = o.company_id and o.company_id.currency_id)]] [[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]
diff --git a/addons/l10n_uk/data/account.account.type.csv b/addons/l10n_uk/data/account.account.type.csv
index 0827975b22f..379656ece39 100644
--- a/addons/l10n_uk/data/account.account.type.csv
+++ b/addons/l10n_uk/data/account.account.type.csv
@@ -10,4 +10,4 @@
"account_type_output_tax","Output Tax","Output Tax","liability","Unreconciled"
"account_type_input_tax","Input Tax","Input Tax","asset","Unreconciled"
"account_type_profit_and_loss","Profit and Loss","Profit and Loss","none","None"
-"account_type_view","View","view",,"None"
+"account_type_view","View","view","none","None"
diff --git a/addons/lunch/report/order.rml b/addons/lunch/report/order.rml
index b09b59bb96b..0a13beb622c 100644
--- a/addons/lunch/report/order.rml
+++ b/addons/lunch/report/order.rml
@@ -137,7 +137,7 @@
- [[ formatLang(get_total(o,objects)) ]] [[ (o.company_id and o.company_id.currency_id and o.company_id.currency_id.symbol) or '' ]]
+ [[ formatLang(get_total(o,objects), currency_obj = o.company_id and o.company_id.currency_id) ]]
@@ -155,7 +155,7 @@
[[ lines.descript]]
- [[ lines.price ]] [[ (o.company_id and o.company_id.currency_id and o.company_id.currency_id.symbol) or '' ]]
+ [[ formatLang(lines.price , currency_obj = o.company_id and o.company_id.currency_id) ]]
@@ -172,7 +172,7 @@
Total :
- [[ formatLang(get_nettotal()) ]] [[ (o.company_id and o.company_id.currency_id and o.company_id.currency_id.symbol) or '' ]]
+ [[ formatLang(get_nettotal(), currency_obj = o.company_id and o.company_id.currency_id) ]]
diff --git a/addons/mail/data/mail_demo.xml b/addons/mail/data/mail_demo.xml
index 1350fd33547..7bda32c002b 100644
--- a/addons/mail/data/mail_demo.xml
+++ b/addons/mail/data/mail_demo.xml
@@ -42,10 +42,5 @@ This month you also get 250 EUR of eco-vouchers if you have been in the company
comment
-
- mail.catchall.domain
- demo.openerp.com
-
-
diff --git a/addons/mail/mail_mail.py b/addons/mail/mail_mail.py
index e9a569a8192..741184ef7a3 100644
--- a/addons/mail/mail_mail.py
+++ b/addons/mail/mail_mail.py
@@ -63,10 +63,12 @@ class mail_mail(osv.Model):
}
def _get_default_from(self, cr, uid, context=None):
- cur = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- if not cur.alias_domain:
- raise osv.except_osv(_('Invalid Action!'), _('Unable to send email, set an alias domain in your server settings.'))
- return cur.alias_name + '@' + cur.alias_domain
+ this = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ if this.alias_domain:
+ return '%s@%s' % (this.alias_name, this.alias_domain)
+ elif this.email:
+ return this.email
+ raise osv.except_osv(_('Invalid Action!'), _("Unable to send email, please configure the sender's email address or alias."))
_defaults = {
'state': 'outgoing',
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index 9c873a31097..9631918050a 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -134,6 +134,7 @@ class mail_message(osv.Model):
'subtype_id': fields.many2one('mail.message.subtype', 'Subtype'),
'vote_user_ids': fields.many2many('res.users', 'mail_vote', 'message_id', 'user_id', string='Votes',
help='Users that voted for this message'),
+ 'is_private': fields.boolean('Private message'),
}
def _needaction_domain_get(self, cr, uid, context=None):
@@ -150,6 +151,7 @@ class mail_message(osv.Model):
'date': lambda *a: fields.datetime.now(),
'author_id': lambda self, cr, uid, ctx={}: self._get_default_author(cr, uid, ctx),
'body': '',
+ 'is_private': True,
}
#------------------------------------------------------
@@ -180,7 +182,6 @@ class mail_message(osv.Model):
fields allow to have the foreign record name without having
to check external access rights).
"""
- child_nbr = len(msg.child_ids)
has_voted = False
vote_ids = self.pool.get('res.users').name_get(cr, SUPERUSER_ID, [user.id for user in msg.vote_user_ids], context=context)
for vote in vote_ids:
@@ -194,7 +195,7 @@ class mail_message(osv.Model):
try:
author_id = self.pool.get('res.partner').name_get(cr, uid, [msg.author_id.id], context=context)[0]
is_author = uid == msg.author_id.user_ids[0].id
- except (orm.except_orm, osv.except_osv):
+ except Exception:
author_id = False
is_author = False
try:
@@ -221,127 +222,12 @@ class mail_message(osv.Model):
'unread': msg.unread and msg.unread['unread'] or False
}
- def message_read_tree_get_expandable(self, cr, uid, parent_message, last_message, domain=[], current_level=0, level=0, context=None):
- """ . """
- base_domain = [('id', '<', last_message['id'])]
- if parent_message and current_level < level:
- base_domain += [('parent_id', '=', parent_message['id'])]
- elif parent_message:
- base_domain += [('id', 'child_of', parent_message['id']), ('id', '!=', parent_message['id'])]
- if domain:
- base_domain += domain
- extension = { 'type': 'expandable',
- 'domain': base_domain,
- 'thread_level': current_level,
- 'context': context,
- 'id': -1,
- }
- return extension
-
- def message_read_tree_flatten(self, cr, uid, parent_message, messages, domain=[], level=0, current_level=0, context=None, limit=None, add_expandable=True):
- """ Given a tree with several roots of following structure :
- [ {'id': 1, 'child_ids': [
- {'id': 11, 'child_ids': [...] },],
- {...} ]
- Flatten it to have a maximum number of levels, 0 being flat and
- sort messages in a level according to a key of the messages.
- Perform the flattening at leafs if above the maximum depth, then get
- back in the tree.
- :param context: ``sort_key``: key for sorting (id by default)
- :param context: ``sort_reverse``: reverser order for sorting (True by default)
+ def _message_read_expandable(self, cr, uid, tree, result, message_loaded, domain, context, parent_id, limit):
"""
- def _flatten(msg_dict):
- """ from {'id': x, 'child_ids': [{child1}, {child2}]}
- get [{'id': x, 'child_ids': []}, {child1}, {child2}]
- """
- child_ids = msg_dict.pop('child_ids', [])
- msg_dict['child_ids'] = []
- return [msg_dict] + child_ids
-
- context = context or {}
- limit = limit or self._message_read_limit
-
- # Depth-first flattening
- for message in messages:
- if message.get('type') == 'expandable':
- continue
- message['child_ids'] = self.message_read_tree_flatten(cr, uid, message, message['child_ids'], domain, level, current_level + 1, context=context, limit=limit)
- for child in message['child_ids']:
- if child.get('type') == 'expandable':
- continue
- message['child_nbr'] += child['child_nbr']
- # Flatten if above maximum depth
- if current_level < level:
- return_list = messages
- else:
- return_list = [flat_message for message in messages for flat_message in _flatten(message)]
-
- # Add expandable
- return_list = sorted(return_list, key=itemgetter(context.get('sort_key', 'id')), reverse=context.get('sort_reverse', True))
- if return_list and current_level == 0 and add_expandable:
- expandable = self.message_read_tree_get_expandable(cr, uid, parent_message, return_list and return_list[-1] or parent_message, domain, current_level, level, context=context)
- return_list.append(expandable)
- elif return_list and current_level <= level and add_expandable:
- expandable = self.message_read_tree_get_expandable(cr, uid, parent_message, return_list and return_list[-1] or parent_message, domain, current_level, level, context=context)
- return_list.append(expandable)
- return return_list
-
- def message_read(self, cr, uid, ids=False, domain=[], level=0, context=None, parent_id=False, limit=None):
- """ Read messages from mail.message, and get back a structured tree
- of messages to be displayed as discussion threads. If IDs is set,
- fetch these records. Otherwise use the domain to fetch messages.
- After having fetch messages, their parents will be added to obtain
- well formed threads.
-
- :param domain: optional domain for searching ids
- :param level: level of threads to display, 0 being flat
- :param limit: number of messages to fetch
- :param parent_id: if parent_id reached, stop searching for
- further parents
- :return list: list of trees of messages
+ create the expandable message for all parent message read
+ this function is used by message_read
"""
- message_loaded = context and context.get('message_loaded') or [0]
-
- # don't read the message display by .js, in context message_loaded list
- if context and context.get('message_loaded'):
- domain += [ ['id','not in',message_loaded] ];
-
- limit = limit or self._message_read_limit
- context = context or {}
-
- tree = []
- result = []
- record = None
-
- # select ids
- if ids:
- for msg in self.browse(cr, uid, ids, context=context):
- result.append(self._message_dict_get(cr, uid, msg, context=context))
- return result
-
- # key: ID, value: record
- ids = self.search(cr, SUPERUSER_ID, domain, context=context, limit=limit)
- for msg in self.browse(cr, uid, ids, context=context):
- # if not in record and not in message_loded list
- if msg.id not in tree and msg.id not in message_loaded :
- record = self._message_dict_get(cr, uid, msg, context=context)
- tree.append(msg.id)
- result.append(record)
-
- while msg.parent_id and msg.parent_id.id != parent_id:
- parent_id = msg.parent_id.id
- if msg.parent_id.id not in tree:
- msg = msg.parent_id
- tree.append(msg.id)
- # if not in record and not in message_loded list
- if msg.id not in message_loaded :
- record = self._message_dict_get(cr, uid, msg, context=context)
- result.append(record)
-
- result = sorted(result, key=lambda k: k['id'])
-
-
tree_not = []
# expandable for not show message
for id_msg in tree:
@@ -368,10 +254,12 @@ class mail_message(osv.Model):
'parent_id': id_msg,
'id': id_min
})
+ id_min=None
+ id_max=None
nb=0
if nb>0:
result.append({
- 'domain': [['id','>=',id_min],['parent_id','=',id_msg]],
+ 'domain': [['id','>=',id_min],['id','<=',id_max],['parent_id','=',id_msg]],
'nb_messages': nb,
'type': 'expandable',
'parent_id': id_msg,
@@ -396,6 +284,73 @@ class mail_message(osv.Model):
return result
+ def message_read(self, cr, uid, ids=False, domain=[], level=0, context=None, parent_id=False, limit=None):
+ """ Read messages from mail.message, and get back a structured tree
+ of messages to be displayed as discussion threads. If IDs is set,
+ fetch these records. Otherwise use the domain to fetch messages.
+ After having fetch messages, their parents will be added to obtain
+ well formed threads.
+
+ :param domain: optional domain for searching ids
+ :param limit: number of messages to fetch
+ :param parent_id: if parent_id reached, stop searching for
+ further parents
+ :return list: list of trees of messages
+ """
+ message_loaded = context and context.get('message_loaded') or [0]
+
+ # don't read the message display by .js, in context message_loaded list
+ if context and context.get('message_loaded'):
+ domain += [ ['id','not in',message_loaded] ];
+
+ limit = limit or self._message_read_limit
+ context = context or {}
+
+ tree = []
+ result = []
+ record = None
+
+ # select ids
+ if ids and ids!=[None]:
+ for msg in self.browse(cr, uid, ids, context=context):
+ result.append(self._message_dict_get(cr, uid, msg, context=context))
+ return result
+
+ # key: ID, value: record
+ ids = self.search(cr, SUPERUSER_ID, domain, context=context, limit=limit)
+ for msg in self.browse(cr, uid, ids, context=context):
+ # if not in record and not in message_loded list
+ if msg.id not in tree and msg.id not in message_loaded :
+ record = self._message_dict_get(cr, uid, msg, context=context)
+ tree.append(msg.id)
+ result.append(record)
+
+ while msg.parent_id and msg.parent_id.id != parent_id:
+ parent_id = msg.parent_id.id
+ if msg.parent_id.id not in tree:
+ msg = msg.parent_id
+ tree.append(msg.id)
+ # if not in record and not in message_loded list
+ if msg.id not in message_loaded :
+ record = self._message_dict_get(cr, uid, msg, context=context)
+ result.append(record)
+
+ result = sorted(result, key=lambda k: k['id'])
+
+ result = self._message_read_expandable(cr, uid, tree, result, message_loaded, domain, context, parent_id, limit)
+
+ return result
+
+ def user_free_attachment(self, cr, uid, context=None):
+ attachment_list = []
+
+ attachment = self.pool.get('ir.attachment')
+ attachment_ids = attachment.search(cr, uid, [('res_model','=',''),('create_uid','=',uid)])
+ if len(attachment_ids):
+ attachment_list = [{'id': attach.id, 'name': attach.name, 'date': attach.create_date} for attach in attachment.browse(cr, uid, attachment_ids, context=context)]
+
+ return attachment_list
+
#------------------------------------------------------
# Email api
#------------------------------------------------------
@@ -502,7 +457,7 @@ class mail_message(osv.Model):
def create(self, cr, uid, values, context=None):
if not values.get('message_id') and values.get('res_id') and values.get('model'):
- values['message_id'] = tools.generate_tracking_message_id('%(model)s-%(res_id)s' % values)
+ values['message_id'] = tools.generate_tracking_message_id('%(res_id)s-%(model)s' % values)
newid = super(mail_message, self).create(cr, uid, values, context)
self._notify(cr, SUPERUSER_ID, newid, context=context)
return newid
@@ -526,11 +481,9 @@ class mail_message(osv.Model):
self.pool.get('ir.attachment').unlink(cr, uid, attachments_to_delete, context=context)
return super(mail_message, self).unlink(cr, uid, ids, context=context)
- def _notify(self, cr, uid, newid, context=None):
+ def _notify_followers(self, cr, uid, newid, message, context=None):
""" Add the related record followers to the destination partner_ids.
- Call mail_notification.notify to manage the email sending
"""
- message = self.browse(cr, uid, newid, context=context)
partners_to_notify = set([])
# message has no subtype_id: pure log message -> no partners, no one notified
if not message.subtype_id:
@@ -551,6 +504,14 @@ class mail_message(osv.Model):
self.write(cr, SUPERUSER_ID, [newid], {'partner_ids': [(4, p_id) for p_id in missing_notified]}, context=context)
partners_to_notify |= extra_notified
+ def _notify(self, cr, uid, newid, context=None):
+ """ Add the related record followers to the destination partner_ids if is not a private message.
+ Call mail_notification.notify to manage the email sending
+ """
+ message = self.browse(cr, uid, newid, context=context)
+ if message and (message.is_private!=False and message.is_private!=None):
+ self._notify_followers(cr, uid, newid, message, context=context)
+
# add myself if I wrote on my wall,
# unless remove myself author
if ((message.model=="res.partner" and message.res_id==message.author_id.id)):
diff --git a/addons/mail/mail_message_view.xml b/addons/mail/mail_message_view.xml
index cc0419352af..0c572384bb4 100644
--- a/addons/mail/mail_message_view.xml
+++ b/addons/mail/mail_message_view.xml
@@ -88,21 +88,21 @@
Inbox
mail.wall
+ 'context': {'default_model': 'res.partner'} }""/>
Archives
mail.wall
+ 'context': {'default_model': 'res.partner'} }""/>
Sent
mail.wall
+ 'context': {'default_model': 'res.partner'} }""/>
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index 09acc85d9e1..e5b93ac4000 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -138,6 +138,8 @@ class mail_thread(osv.AbstractModel):
return res
def _set_followers(self, cr, uid, id, name, value, arg, context=None):
+ if not value:
+ return
partner_obj = self.pool.get('res.partner')
fol_obj = self.pool.get('mail.followers')
@@ -420,12 +422,12 @@ class mail_thread(osv.AbstractModel):
model_pool = self.pool.get(model)
assert thread_id and hasattr(model_pool, 'message_update') or hasattr(model_pool, 'message_new'), \
"Undeliverable mail with Message-Id %s, model %s does not accept incoming emails" % \
- (msg['message-id'], model)
+ (msg['message_id'], model)
if thread_id and hasattr(model_pool, 'message_update'):
model_pool.message_update(cr, user_id, [thread_id], msg, context=context)
else:
thread_id = model_pool.message_new(cr, user_id, msg, custom_values, context=context)
- self.message_post(cr, uid, [thread_id], context=context, **msg)
+ model_pool.message_post(cr, uid, [thread_id], context=context, **msg)
return thread_id
def message_new(self, cr, uid, msg_dict, custom_values=None, context=None):
@@ -536,7 +538,7 @@ class mail_thread(osv.AbstractModel):
field may not be present if missing in original
message::
- { 'message-id': msg_id,
+ { 'message_id': msg_id,
'subject': subject,
'from': from,
'to': to,
@@ -621,11 +623,10 @@ class mail_thread(osv.AbstractModel):
:param str subject: optional subject
:param str type: mail_message.type
:param int parent_id: optional ID of parent message in this thread
- :param tuple(str,str) attachments: list of attachment tuples in the form
+ :param tuple(str,str) attachments or list id: list of attachment tuples in the form
``(name,content)``, where content is NOT base64 encoded
:return: ID of newly created mail.message
"""
-
context = context or {}
attachments = attachments or []
assert (not thread_id) or isinstance(thread_id, (int, long)) or \
@@ -633,7 +634,7 @@ class mail_thread(osv.AbstractModel):
if isinstance(thread_id, (list, tuple)):
thread_id = thread_id and thread_id[0]
- attachment_ids = []
+ attachment_ids=[]
for name, content in attachments:
if isinstance(content, unicode):
content = content.encode('utf-8')
@@ -677,6 +678,13 @@ class mail_thread(osv.AbstractModel):
'attachment_ids': attachment_ids,
'subtype_id': subtype_id,
})
+
+ # if the parent is private, the message must be private
+ if parent_id:
+ msg = messages.browse(cr, uid, parent_id, context=context)
+ if msg.is_private:
+ values["is_private"] = msg.is_private
+
# Avoid warnings about non-existing fields
for x in ('from', 'to', 'cc'):
values.pop(x, None)
@@ -689,10 +697,23 @@ class mail_thread(osv.AbstractModel):
def message_post_api(self, cr, uid, thread_id, body='', subject=False, type='notification',
subtype=None, parent_id=False, attachments=None, context=None, **kwargs):
- added_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type=type,
- subtype=subtype, parent_id=parent_id, attachments=attachments, context=context)
- added_message = self.pool.get('mail.message').message_read(cr, uid, [added_message_id])
+ # if the user write on his wall
+ if self._name=='res.partner' and not thread_id:
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ thread_id = user.partner_id.id
+ added_message_id = self.message_post(cr, uid, thread_id=thread_id, body=body, subject=subject, type=type,
+ subtype=subtype, parent_id=parent_id, context=context)
+
+ attachment_ids=[]
+ if attachments:
+ ir_attachment = self.pool.get('ir.attachment')
+ attachment_ids = ir_attachment.search(cr, 1, [('res_model', '=', ""), ('res_id', '=', ""), ('user_id', '=', uid), ('id', 'in', attachments)], context=context)
+ if attachment_ids:
+ self.pool.get('ir.attachment').write(cr, 1, attachment_ids, { 'res_model': self._name, 'res_id': thread_id }, context=context)
+ self.pool.get('mail.message').write(cr, 1, [added_message_id], {'attachment_ids': [(6, 0, [pid for pid in attachment_ids])]} )
+
+ added_message = self.pool.get('mail.message').message_read(cr, uid, [added_message_id])
return added_message
def get_message_subtypes(self, cr, uid, ids, context=None):
diff --git a/addons/mail/mail_thread_view.xml b/addons/mail/mail_thread_view.xml
index 3507e7c449f..696edde0e15 100644
--- a/addons/mail/mail_thread_view.xml
+++ b/addons/mail/mail_thread_view.xml
@@ -20,13 +20,13 @@
Archives
-
+
Sent
-
+
diff --git a/addons/mail/res_config.py b/addons/mail/res_config.py
index ce2f75687ba..91606e1c720 100644
--- a/addons/mail/res_config.py
+++ b/addons/mail/res_config.py
@@ -19,6 +19,8 @@
#
##############################################################################
+import urlparse
+
from openerp.osv import osv, fields
class project_configuration(osv.TransientModel):
@@ -31,9 +33,16 @@ class project_configuration(osv.TransientModel):
}
def get_default_alias_domain(self, cr, uid, ids, context=None):
- return {'alias_domain': self.pool.get("ir.config_parameter").get_param(cr, uid, "mail.catchall.domain", context=context)}
+ alias_domain = self.pool.get("ir.config_parameter").get_param(cr, uid, "mail.catchall.domain", context=context)
+ if not alias_domain:
+ domain = self.pool.get("ir.config_parameter").get_param(cr, uid, "web.base.url", context=context)
+ try:
+ alias_domain = urlparse.urlsplit(domain).netloc.split(':')[0]
+ except Exception:
+ pass
+ return {'alias_domain': alias_domain}
def set_alias_domain(self, cr, uid, ids, context=None):
config_parameters = self.pool.get("ir.config_parameter")
for record in self.browse(cr, uid, ids, context=context):
- config_parameters.set_param(cr, uid, "mail.catchall.domain", record.alias_domain or '', context=context)
\ No newline at end of file
+ config_parameters.set_param(cr, uid, "mail.catchall.domain", record.alias_domain or '', context=context)
diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py
index 545198f4c7f..f870604b03a 100644
--- a/addons/mail/res_users.py
+++ b/addons/mail/res_users.py
@@ -110,9 +110,19 @@ class res_users(osv.Model):
alias_pool.unlink(cr, uid, alias_ids, context=context)
return res
- def message_post(self, cr, uid, thread_id, **kwargs):
- partner_id = self.pool.get('res.users').browse(cr, uid, thread_id)[0].partner_id.id
- return self.pool.get('res.partner').message_post(cr, uid, partner_id, **kwargs)
+ def message_post(self, cr, uid, thread_id, context=None, **kwargs):
+ assert thread_id, "res.users does not support posting global messages"
+ if context and 'thread_model' in context:
+ context['thread_model'] = 'res.partner'
+ if isinstance(thread_id, (list, tuple)):
+ thread_id = thread_id[0]
+ partner_id = self.pool.get('res.users').browse(cr, uid, thread_id).partner_id.id
+ return self.pool.get('res.partner').message_post(cr, uid, partner_id, context=context, **kwargs)
+
+ def message_update(self, cr, uid, ids, msg_dict, update_vals=None, context=None):
+ partner_id = self.pool.get('res.users').browse(cr, uid, ids)[0].partner_id.id
+ return self.pool.get('res.partner').message_update(cr, uid, [partner_id], msg_dict,
+ update_vals=update_vals, context=context)
class res_users_mail_group(osv.Model):
""" Update of res.users class
diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css
index 364ac7e3165..1592d79e18d 100644
--- a/addons/mail/static/src/css/mail.css
+++ b/addons/mail/static/src/css/mail.css
@@ -82,9 +82,13 @@
overflow: auto;
}
+.openerp .oe_mail_record_wall {
+ margin: auto;
+ width: 560px;
+}
+
.openerp .oe_mail_record_wall > .oe_mail_wall_threads {
float: left;
- width: 560px;
}
.openerp div.oe_mail_recthread_aside {
@@ -145,6 +149,10 @@
z-index: 5;
}
.openerp .oe_mouse_subtypes .oe_recthread_subtypes {
+ background: #fff;
+ padding: 2px;
+ border: 1px solid #aaaaaa;
+ border-top: 0px;
position: absolute;
z-index: 2;
}
@@ -160,7 +168,6 @@
/* ------------------------------------------------------------ */
.openerp div.oe_mail_thread_action {
- display: none;
white-space: normal;
padding: 8px;
z-index:5;
@@ -173,16 +180,6 @@
clear: both;
}
-/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
-.openerp .oe_mail_msg_content textarea.oe_mail_compose_textarea,
-.openerp .oe_mail_msg_content div.oe_mail_compose_message_body textarea {
- width: 474px;
- height: 60px;
- padding: 4px;
- font-size: 12px;
- border: 1px solid #cccccc;
-}
-
/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
.openerp .oe_mail_msg_content textarea.oe_mail_compose_textarea:focus,
.openerp .oe_mail_msg_content div.oe_mail_compose_message_body textarea:focus {
@@ -206,6 +203,10 @@
margin-left: 66px;
}
+.openerp li.oe_mail_thread_msg {
+ width: 560px;
+}
+
.openerp div.oe_thread_placeholder li.oe_mail_thread_msg:last-child {
margin-bottom: 8px;
}
@@ -223,13 +224,18 @@
.openerp li.oe_mail_thread_msg.oe_mail_read,
.openerp li.oe_mail_thread_msg.oe_mail_read div {
- background-color: #F0F0F0;
+ border-left: #F0F0F0;
}
.openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread,
.openerp li.oe_mail_thread_msg.oe_mail_read li.oe_mail_thread_msg.oe_mail_unread div {
background-color: #F6F6F6;
}
+.openerp li.oe_mail_thread_msg.oe_mail_unread>div>ul>li.oe_unread,
+.openerp li.oe_mail_thread_msg.oe_mail_read>div>ul>li.oe_read {
+ display: none;
+}
+
.openerp li.oe_mail_thread_msg > div:after {
content: "";
display: block;
@@ -247,7 +253,7 @@
.openerp .oe_mail_msg_email {
padding: 8px;
background: white;
- border-top: 1px solid #ebebeb;
+ position: relative;
}
.openerp .oe_mail_msg_notification:after,
@@ -259,7 +265,7 @@
}
.openerp div.oe_mail_msg_content {
- float: right;
+ float: left;
position: relative;
width: 486px;
}
@@ -309,76 +315,6 @@
display: none;
}
-/* ------------------------------------------------------------ */
-/* mail.compose.message form view & OpenERP hacks
-/* ------------------------------------------------------------ */
-
-/* form_view: delete white background */
-.openerp .oe_mail_msg_content div.oe_formview {
- background-color: transparent;
-}
-
-.openerp .oe_mail_msg_content div.oe_form_nosheet {
- margin: 0px;
-}
-
-.openerp .oe_mail_msg_content table.oe_form_group {
- margin: 0px;
-}
-
-.openerp .oe_mail_msg_content table.oe_form_field,
-.openerp .oe_mail_msg_content div.oe_form_field {
- padding: 0px;
-}
-
-.openerp .oe_mail_msg_content td.oe_form_group_cell {
- vertical-align: bottom;
-}
-
-/* subject: change width */
-.openerp .oe_mail_msg_content .oe_form .oe_form_field input {
- width: 472px;
-}
-
-/* body_html: cleditor */
-.openerp .oe_mail_msg_content div.cleditorMain {
- border: 1px solid #cccccc;
-}
-
-/* destination_partner_ids */
-.openerp .oe_mail_msg_content div.text-core {
- height: 22px !important;
- width: 472px;
-}
-
-/* buttons */
-.openerp .oe_mail_msg_content .oe_mail_compose_message_icons button.oe_form_button {
- padding: 1px;
-}
-
-/* attachment button: override of openerp values */
-.openerp .oe_mail_msg_content .oe_mail_compose_message_icons div.oe_hidden_input_file {
- display: inline-block;
- width: 24px;
- height: 24px;
- margin: 2px;
-}
-.openerp .oe_mail_msg_content .oe_mail_compose_message_icons div.oe_hidden_input_file button {
- margin: 0px;
-}
-.openerp .oe_mail_msg_content .oe_mail_compose_message_icons input.oe_form_binary_file {
- bottom: 0px;
- top: auto;
- left: auto;
- right: 28px;
- height: 26px;
- width: 26px;
- min-width: 22px;
- font-size: 0px;
- margin: 0px;
- padding: 0px;
-}
-
/* ------------------------------------------------------------ */
/* Messages layout
/* ------------------------------------------------------------ */
@@ -413,39 +349,27 @@
}
/* Dropdown menu */
-/*.openerp .oe_mail_msg_content .oe_dropdown_toggle {
- position: absolute;
- top: 0px;
- right: 3px;
-}*/
-.openerp .oe_mail .oe_semantic_html_override {
+.openerp .oe_mail ul.oe_mail_thread_display ul.oe_mail_thread_display {
position: relative;
+ border-left: 1px #DDD dashed;
}
.openerp .oe_mail ul.oe_header {
position: absolute;
right: 3px;
top: -6px;
- display: none;
z-index: 10;
- height: 18px;
}
.openerp .oe_mail ul.oe_header a {
text-decoration: none;
}
-.openerp .oe_mail .oe_semantic_html_override:hover > ul.oe_header {
- display: block;
-}
-
.openerp .oe_mail ul.oe_header>li {
display: inline-block;
-}
-
-.openerp .oe_mail_msg_content .oe_dropdown_arrow:after {
- border-top: 4px solid #404040;
+ height: 20px;
+ text-align: right;
}
/* Message footer */
@@ -465,16 +389,36 @@
/* Attachments list */
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments {
- display: none;
width: 100%;
- border-top: 1px solid #CCC;
margin: .5em 0 0 0;
padding: .5em 0;
list-style-position: inside;
}
+.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments.oe_hidden {
+ display: none;
+}
.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments li {
float: none;
+ height: 20px;
+ line-height: 20px;
margin: 0;
padding: 0;
list-style-type: square;
}
+.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process {
+ float: right;
+ width: 200px;
+ height: 16px;
+}
+.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process div {
+ float: left;
+ width: 38px;
+ height: 16px;
+ margin-right: 2px;
+ background: #66FF66;
+}
+.openerp .oe_mail_msg_content ul.oe_mail_msg_attachments .oe_upload_in_process span {
+ color: #aaaaaa;
+ position: absolute;
+}
+
diff --git a/addons/mail/static/src/css/mail_compose_message.css b/addons/mail/static/src/css/mail_compose_message.css
index ba7ed36a695..e2f136eb755 100644
--- a/addons/mail/static/src/css/mail_compose_message.css
+++ b/addons/mail/static/src/css/mail_compose_message.css
@@ -1,12 +1,166 @@
/* ------------------------------ */
-/* Compose Message Wizard Form */
+/* Compose Message */
/* ------------------------------ */
-.openerp .oe_mail_compose_message_icons {
- text-align: right;
+.openerp .oe_mail_msg_content .oe_mail_compose_message_footer {
+ height: 24px;
}
-.openerp .oe_mail_compose_message_icons img {
- width: 20px;
- height: 20px;
+.openerp .oe_mail_msg_content .oe_mail_compose_message_footer button.oe_mail_compose_message_button_send {
+ float: left;
}
+
+.openerp .oe_mail .oe_mail_compose_textarea
+{
+ display: none;
+}
+
+.openerp .oe_mail .oe_mail_compose_textarea .oe_mail_post_header,
+.openerp .oe_mail .oe_mail_compose_textarea .oe_mail_post_footer,
+{
+ position: relative;
+}
+
+.openerp .oe_mail .oe_mail_compose_textarea a.oe_cancel {
+ position: absolute;
+ right: -8px;
+ top: -8px;
+}
+.openerp .oe_mail .oe_mail_compose_textarea a.oe_cancel:first-of-type {
+ display:none;
+}
+
+.openerp .oe_mail .oe_mail_compose_textarea button.oe_full {
+ float: right;
+ position: relative;
+ right: -10px;
+}
+
+/* ------------------------------------------------------------ */
+/* mail.compose.message : list_recipients
+/* ------------------------------------------------------------ */
+
+.openerp .oe_mail .oe_mail_list_recipients {
+ display: inline;
+}
+.openerp .oe_mail .oe_mail_list_recipients .oe_all_follower {
+ color: blue;
+}
+.openerp .oe_mail .oe_mail_list_recipients .oe_partner_follower a {
+ color: red;
+}
+.openerp .oe_mail .oe_mail_list_recipients .oe_hidden,
+.openerp .oe_mail .oe_mail_list_recipients .oe_more_hidden {
+ display: none;
+}
+
+/* ------------------------------------------------------------ */
+/* mail.compose.message : attachment
+/* ------------------------------------------------------------ */
+
+.openerp .oe_mail .oe_attachment_file {
+ display: inline-block;
+}
+
+.openerp .oe_mail .oe_attachment_file .oe_add {
+ float: left;
+ width: 24px;
+ height: 24px;
+ position: relative;
+ z-index: 10;
+ left: +2px;
+ top: +7px;
+ overflow: hidden;
+}
+
+/* attachment button: override of openerp values */
+.openerp .oe_mail .oe_attachment_file .oe_add button,
+.openerp .oe_mail .oe_attachment_file .oe_add input.oe_insert_file {
+ position: absolute;
+ bottom: +0px;
+ left: +0px;
+ height: 24px;
+ width: 24px;
+ margin: 0px;
+ padding: 0px;
+}
+.openerp .oe_mail .oe_attachment_file .oe_add input.oe_insert_file {
+ z-index:2;
+ width: 300px;
+ left: -100px;
+ background: transparent;
+ border: 0;
+ color: transparent;
+}
+.openerp .oe_mail .oe_attachment_file .oe_add button span {
+ position: relative;
+ bottom: +4px;
+ font-size: 30px;
+}
+
+.openerp .oe_mail .oe_mail_msg_attachments input {
+ visibility: hidden;
+}
+
+.openerp .oe_mail .oe_mail_compose_attachment_list {
+ clear: both;
+}
+
+/* ------------------------------------------------------------ */
+/* mail.compose.message
+/* ------------------------------------------------------------ */
+
+
+/* default textarea (oe_mail_compose_textarea), and body textarea for compose form view */
+.openerp .oe_mail.oe_semantic_html_override .oe_mail_compose_textarea textarea.field_text,
+.openerp .oe_mail div.oe_mail_compose_message_body textarea.field_text {
+ width: 100%;
+ min-height: 120px;
+ height: auto;
+ padding: 4px;
+ font-size: 12px;
+ border: 1px solid #cccccc;
+}
+
+/* not top textarea */
+.openerp .oe_mail.oe_semantic_html_override .oe_semantic_html_override .oe_mail_compose_textarea textarea.field_text {
+ height: 60px;
+}
+
+/* form_view: delete white background */
+.openerp .oe_mail_msg_content div.oe_formview {
+ background-color: transparent;
+}
+
+.openerp .oe_mail_msg_content div.oe_form_nosheet {
+ margin: 0px;
+}
+
+.openerp .oe_mail_msg_content table.oe_form_group {
+ margin: 0px;
+}
+
+.openerp .oe_mail_msg_content table.oe_form_field,
+.openerp .oe_mail_msg_content div.oe_form_field {
+ padding: 0px;
+}
+
+.openerp .oe_mail_msg_content td.oe_form_group_cell {
+ vertical-align: bottom;
+}
+
+/* subject: change width */
+.openerp .oe_mail_msg_content .oe_form .oe_form_field input[type='text'] {
+ width: 472px;
+}
+
+/* body_html: cleditor */
+.openerp .oe_mail_msg_content div.cleditorMain {
+ border: 1px solid #cccccc;
+}
+
+/* destination_partner_ids */
+.openerp .oe_mail_msg_content div.text-core {
+ height: 22px !important;
+ width: 472px;
+}
\ No newline at end of file
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index e0c9ac9b7fc..15a81be4c54 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -18,17 +18,33 @@ openerp.mail = function(session) {
session.web.FormView = session.web.FormView.extend({
do_action: function(action, on_close) {
- if (action.res_model == 'mail.compose.message' &&
- action.context && action.context.redirect == true &&
- this.fields && this.fields.message_ids && this.fields.message_ids.view.get("actual_mode") != 'create') {
- var thread = this.fields.message_ids.thread;
+ if (action.res_model == 'mail.compose.message') {
+
+ /* hack for stop context propagation of wrong value
+ * delete this hack when a global method to clean context is create
+ */
+ for(var key in action.context){
+ if( key!='default_template_id' &&
+ key!='default_use_template' &&
+ key!='default_is_private' &&
+ key!='default_model' &&
+ key!='default_res_id' &&
+ key!='default_subtype' &&
+ key!='active_id' &&
+ key!='lang' &&
+ key!='bin_raw' &&
+ key!='tz' &&
+ key!='active_model' &&
+ key!='edi_web_url_view' &&
+ key!='active_ids')
+ action.context[key]=null;
+ };
+ /* end hack */
+
+ $('.openerp .oe_mail_wall_threads .oe_mail_thread button.oe_mail_wall_button_fetch').click();
- thread.refresh(action.context);
- return false;
- }
- else {
- return this._super(action, on_close);
}
+ return this._super(action, on_close);
},
});
@@ -73,6 +89,15 @@ openerp.mail = function(session) {
}
return string;
},
+
+ /* replace textarea text into html text
+ * (add , )
+ */
+ get_text2html: function(text){
+ return text
+ .replace(/[\n\r]/g,' ')
+ .replace(/((?:https?|ftp):\/\/[\S]+)/g,' $1 ')
+ }
};
@@ -84,160 +109,301 @@ openerp.mail = function(session) {
* This widget handles the display of a form to compose a new message.
* This form is a mail.compose.message form_view.
*/
-
- mail.ComposeMessage = session.web.Widget.extend({
+
+ mail.ThreadComposeMessage = session.web.Widget.extend({
template: 'mail.compose_message',
-
+
/**
* @param {Object} parent parent
* @param {Object} [options]
- * @param {Object} [options.context] context passed to the
- * mail.compose.message DataSetSearch. Please refer to this model
- * for more details about fields and default values.
+ * @param {Object} [context] context passed to the
+ * mail.compose.message DataSetSearch. Please refer to this model
+ * for more details about fields and default values.
+ * @param {Boolean} [show_attachment_delete]
*/
init: function (parent, options) {
var self = this;
this._super(parent);
this.attachment_ids = [];
- // options
- this.options = options || {};
- this.options.context = options.context || {};
- this.options.form_xml_id = options.form_xml_id || 'email_compose_message_wizard_form_chatter';
- this.options.form_view_id = options.form_view_id || false;
- this.show_attachment_delete = true;
+
+ this.context = options.context || {};
+
+ this.id = options.parameters.id;
+ this.model = options.parameters.model;
+ this.res_id = options.parameters.res_id;
+ this.is_private = options.parameters.is_private;
+ this.partner_ids = options.parameters.partner_ids;
+ this.options={thread:{}};
+ this.options.thread.show_header_compose = options.parameters.options.thread.show_header_compose;
+ this.options.thread.display_on_flat = options.parameters.options.thread.display_on_flat;
+
+ this.attachment_ids = [];
+ this.options.thread.show_attachment_delete = true;
+ this.options.thread.show_attachment_link = true;
+
+ this.parent_thread= parent.messages!= undefined ? parent : false;
+
+
+ this.ds_attachment = new session.web.DataSetSearch(this, 'ir.attachment');
+ this.fileupload_id = _.uniqueId('oe_fileupload_temp');
+ $(window).on(self.fileupload_id, self.on_attachment_loaded);
},
- start: function () {
- this._super.apply(this, arguments);
- // customize display: add avatar, clean previous content
+ start: function(){
+ this.display_attachments();
+ this.bind_events();
+
+ //load avatar img
var user_avatar = mail.ChatterUtils.get_image(this.session, 'res.users', 'image_small', this.session.uid);
this.$('img.oe_mail_icon').attr('src', user_avatar);
- this.$('div.oe_mail_msg_content').empty();
- // create a context for the dataset and default_get of the wizard
- var context = _.extend({}, this.options.context);
- this.ds_compose = new session.web.DataSetSearch(this, 'mail.compose.message', context);
- // find the id of the view to display in the chatter form
- if (this.options.form_view_id) {
- return this.create_form_view();
- }
- else {
- var data_ds = new session.web.DataSetSearch(this, 'ir.model.data');
- return data_ds.call('get_object_reference', ['mail', this.options.form_xml_id]).pipe(this.proxy('create_form_view'));
- }
},
- /** Create a FormView, then append it to the to widget DOM. */
- create_form_view: function (new_form_view_id) {
+ /* upload the file on the server, add in the attachments list and reload display
+ */
+ display_attachments: function(){
var self = this;
- this.options.form_view_id = (new_form_view_id && new_form_view_id[1]) || this.options.form_view_id;
- // destroy previous form_view if any
- if (this.form_view) { this.form_view.destroy(); }
- // create the FormView
- this.form_view = new session.web.FormView(this, this.ds_compose, this.options.form_view_id, {
- action_buttons: false,
- pager: false,
- initial_mode: 'edit',
- disable_autofocus: true,
- });
- // add the form, bind events, activate the form
- var msg_node = this.$('div.oe_mail_msg_content');
- return $.when(this.form_view.appendTo(msg_node)).pipe(this.proxy('postprocess_create_form_view'));
- },
+ var render = $(session.web.qweb.render('mail.thread.message.attachments', {'widget': self}));
+ if(!this.list_attachment){
+ this.$('.oe_mail_compose_attachment_list').replaceWith( render );
+ } else {
+ this.list_attachment.replaceWith( render );
+ }
+ this.list_attachment = this.$("ul.oe_mail_msg_attachments");
- postprocess_create_form_view: function () {
- // handle attachment button
- this.fileupload_id = _.uniqueId('oe_fileupload');
- var button_attach = this.$('button.oe_mail_compose_message_attachment');
- var rendered = session.web.qweb.render('mail.compose_message.add_attachment', {'widget': this});
- $(rendered).insertBefore(button_attach);
- // move the button inside div.oe_hidden_input_file
- var input_node = this.$('input[name=ufile]');
- button_attach.detach().insertAfter(input_node);
- // set the function called when attachments are added
- this.$('input.oe_form_binary_file').change(this.on_attachment_change);
- this.bind_events();
- this.form_view.do_show();
+ // event: delete an attachment
+ this.$el.on('click', '.oe_mail_attachment_delete', self.on_attachment_delete);
},
-
on_attachment_change: function (event) {
+ event.stopPropagation();
+ var self = this;
var $target = $(event.target);
if ($target.val() !== '') {
- this.$('form.oe_form_binary_form').submit();
- session.web.blockUI();
+
+ var filename = $target.val().replace(/.*[\\\/]/,'');
+
+ // if the files exits for this answer, delete the file before upload
+ var attachments=[];
+ for(var i in this.attachment_ids){
+ if((this.attachment_ids[i].filename || this.attachment_ids[i].name) == filename){
+ if(this.attachment_ids[i].upload){
+ return false;
+ }
+ this.ds_attachment.unlink([this.attachment_ids[i].id]);
+ } else {
+ attachments.push(this.attachment_ids[i]);
+ }
+ }
+ this.attachment_ids = attachments;
+
+ // submit file
+ //session.web.blockUI();
+ self.$('form.oe_form_binary_form').submit();
+ //self.submit_ajax_attachment();
+
+ this.$(".oe_attachment_file").hide();
+
+ this.attachment_ids.push({
+ 'id': 0,
+ 'name': filename,
+ 'filename': filename,
+ 'url': '',
+ 'upload': true
+ });
+ this.display_attachments();
}
},
+
+ submit_ajax_attachment: function(){
+ var self=this;
+ var $form = self.$('form.oe_form_binary_form');
+ var filename = this.$('input.oe_form_binary_file').val().replace(/.*[\\\/]/,'');
+ // create form data
+ var fomdata = new FormData();
+ $.each($form.find('input'), function(i, field) {
+ var $field=$(field);
+ if($field.attr('type')!='file'){
+ fomdata.append($field.attr('name'), $field.val());
+ } else {
+ fomdata.append($field.attr('name'), field.files[0]);
+ }
+ });
+
+ var progress=function(event) {
+ self.$("span[name='"+filename+"'] div:lt("+Math.floor(event.loaded / event.total*5)+")").show();
+ };
+
+ $.ajax({
+ url: $form.attr("action"),
+ data: fomdata,
+ cache: false,
+ contentType: false,
+ processData: false,
+ type: 'POST',
+ enctype: 'multipart/form-data',
+ xhr: function() {
+ // custom xhr
+ myXhr = $.ajaxSettings.xhr();
+ if(myXhr.upload){
+ // for handling the progress of the upload
+ myXhr.upload.addEventListener('progress', progress, false);
+ }
+ myXhr.addEventListener('progress', progress, false);
+ return myXhr;
+ },
+ success: function(data){
+ $iframe=$('').html(data);
+ $iframe.appendTo(self.$el);
+ $iframe.remove();
+ }
+ });
+ },
+
+ on_attachment_loaded: function (event, result) {
+ //session.web.unblockUI();
+ for(var i in this.attachment_ids){
+ if(this.attachment_ids[i].filename == result.filename && this.attachment_ids[i].upload){
+ this.attachment_ids[i]={
+ 'id': result.id,
+ 'name': result.name,
+ 'filename': result.filename,
+ 'url': mail.ChatterUtils.get_attachment_url(this.session, result)
+ };
+ }
+ }
+ this.display_attachments();
+
+ var $input = this.$('input.oe_form_binary_file');
+ $input.after($input.clone(true)).remove();
+ this.$(".oe_attachment_file").show();
+ },
+ /* unlink the file on the server and reload display
+ */
on_attachment_delete: function (event) {
- if (event.target.dataset && event.target.dataset.id) {
- var attachment_id = parseInt(event.target.dataset.id);
- var idx = _.pluck(this.attachment_ids, 'id').indexOf(attachment_id);
- if (idx == -1) return false;
- new session.web.DataSetSearch(this, 'ir.attachment').unlink(attachment_id);
- this.attachment_ids.splice(idx, 1);
+ event.stopPropagation();
+ var attachment_id=$(event.target).data("id");
+ if (attachment_id) {
+ var attachments=[];
+ for(var i in this.attachment_ids){
+ if(attachment_id!=this.attachment_ids[i].id){
+ attachments.push(this.attachment_ids[i]);
+ }
+ else {
+ this.ds_attachment.unlink([attachment_id]);
+ }
+ }
+ this.attachment_ids = attachments;
this.display_attachments();
}
},
- display_attachments: function () {
- var attach_node = this.$('div.oe_mail_compose_message_attachments');
- var rendered = session.web.qweb.render('mail.thread.message.attachments', {'record': this});
- attach_node.empty();
- $(rendered).appendTo(attach_node);
- this.$('.oe_mail_msg_attachments').show();
- var composer_attachment_ids = _.pluck(this.attachment_ids, 'id');
- var onchange_like = {'value': {'attachment_ids': composer_attachment_ids}}
- this.form_view.on_processed_onchange(onchange_like, []);
- },
-
- /**
- * Reinitialize the widget field values to the default values obtained
- * using default_get on mail.compose.message. This allows to reinitialize
- * the widget without having to rebuild a complete form view.
- * @param {Object} new_context: context of the refresh */
- refresh: function (new_context) {
- if (! this.form_view) return;
- var self = this;
- this.attachments = [];
- this.options.context = _.extend(this.options.context, new_context || {});
- this.ds_compose.context = _.extend(this.ds_compose.context, this.options.context);
- return this.ds_compose.call('default_get', [
- ['subject', 'body_text', 'body', 'partner_ids', 'composition_mode',
- 'use_template', 'template_id', 'model', 'res_id', 'parent_id', 'content_subtype'],
- this.ds_compose.get_context(),
- ]).then( function (result) {
- self.form_view.on_processed_onchange({'value': result}, []);
- self.attachment_ids = [];
+ /* to avoid having unsorted file on the server.
+ we will show the users files of the first message post
+ */
+ set_free_attachments: function(){
+ var self=this;
+ this.parent_thread.ds_message.call('user_free_attachment').then(function(attachments){
+ this.attachment_ids=[];
+ for(var i in attachments){
+ self.attachment_ids[i]={
+ 'id': attachments[i].id,
+ 'name': attachments[i].name,
+ 'filename': attachments[i].filename,
+ 'url': mail.ChatterUtils.get_attachment_url(self.session, attachments[i])
+ };
+ }
self.display_attachments();
});
},
- /**
- * Bind events in the widget. Each event is slightly described
- * in the function. */
bind_events: function() {
var self = this;
- // event: add a new attachment
- $(window).on(this.fileupload_id, function() {
- var args = [].slice.call(arguments).slice(1);
- var attachment = args[0];
- attachment['url'] = mail.ChatterUtils.get_attachment_url(self.session, attachment);
- self.attachment_ids.push(attachment);
- self.display_attachments();
- session.web.unblockUI();
- });
- // event: delete an attachment
- this.$el.on('click', '.oe_mail_attachment_delete', self.on_attachment_delete);
+
+ // set the function called when attachments are added
+ this.$el.on('change', 'input.oe_form_binary_file', self.on_attachment_change );
+ this.$el.on('click', 'a.oe_cancel', self.on_cancel );
+ this.$el.on('click', 'button.oe_post', function(){self.on_message_post()} );
+ this.$el.on('click', 'button.oe_full', function(){self.on_compose_fullmail()} );
},
- }),
-
+
+ on_compose_fullmail: function(){
+ var attachments=[];
+ for(var i in this.attachment_ids){
+ attachments.push(this.attachment_ids[i].id);
+ }
+ var action = {
+ type: 'ir.actions.act_window',
+ res_model: 'mail.compose.message',
+ view_mode: 'form',
+ view_type: 'form',
+ action_from: 'mail.ThreadComposeMessage',
+ views: [[false, 'form']],
+ target: 'new',
+ context: {
+ 'default_res_model': this.context.default_res_model,
+ 'default_res_id': this.context.default_res_id,
+ 'default_content_subtype': 'html',
+ 'default_is_private': true,
+ 'default_parent_id': this.id,
+ 'default_body': mail.ChatterUtils.get_text2html(this.$('textarea').val() || ''),
+ 'default_attachment_ids': attachments
+ },
+ };
+ this.do_action(action);
+ },
+
+ on_cancel: function(){
+ event.stopPropagation();
+ this.$('textarea').val("");
+ this.$('input[data-id]').remove();
+ //this.attachment_ids=[];
+ this.display_attachments();
+ if(!this.options.thread.show_header_compose || !this.options.thread.display_on_flat){
+ this.$el.hide();
+ }
+ },
+
+ /*post a message and fetch the message*/
+ on_message_post: function (body) {
+
+ if (! body) {
+ var comment_node = this.$('textarea');
+ var body = comment_node.val();
+ comment_node.val('');
+ }
+
+ var attachments=[];
+ for(var i in this.attachment_ids){
+ if(this.attachment_ids[i].upload){
+ session.web.dialog($('
' + session.web.qweb.render('CrashManager.warning', {message: 'Please, wait while the file is uploading.'}) + '
'));
+ return false;
+ }
+ attachments.push(this.attachment_ids[i].id);
+ }
+
+ if(body.match(/\S+/)) {
+ this.parent_thread.ds_thread.call('message_post_api', [
+ this.context.default_res_id,
+ mail.ChatterUtils.get_text2html(body),
+ false,
+ 'comment',
+ false,
+ this.context.default_parent_id,
+ attachments]
+ ).then(this.parent_thread.proxy('switch_new_message'));
+ this.attachment_ids=[];
+ this.on_cancel();
+ return true;
+ }
+ },
+ });
/**
* ------------------------------------------------------------
* Thread Message Expandable Widget
* ------------------------------------------------------------
*
- * This widget handles the display the expandable message in a thread. The
- * [thread_level] parameter sets the thread level number:
+ * This widget handles the display the expandable message in a thread.
* - thread
* - - visible message
* - - expandable
@@ -256,14 +422,13 @@ openerp.mail = function(session) {
default_res_id: 0,
default_parent_id: false }, options.context || {});
- this.id = -1;
+ this.id = options.parameters.id || -1;
this.parent_id= options.parameters.parent_id || false;
this.nb_messages = options.parameters.nb_messages || 0;
- this.type = options.parameters.type || false;
+ this.type = 'expandable';
// record options and data
this.parent_thread= parent.messages!= undefined ? parent : options.options.thread._parents[0] ;
-
},
@@ -285,8 +450,8 @@ openerp.mail = function(session) {
* @param {object} mouse envent
*/
on_expandable: function (event) {
- event.stopPropagation();
- this.parent_thread.message_fletch(false, this.domain, this.context);
+ if(event)event.stopPropagation();
+ this.parent_thread.message_fetch(false, this.domain, this.context);
this.destroy();
return false;
},
@@ -302,7 +467,7 @@ openerp.mail = function(session) {
* - record.timerelative: relative time givein by timeago lib
* - record.avatar: image url
* - record.attachment_ids[].url: url of each attachmentThe
- * [thread_level] parameter sets the thread level number:
+ * thread view :
* - root thread
* - - sub message (parent_id = root message)
* - - - sub thread
@@ -322,45 +487,24 @@ openerp.mail = function(session) {
* @param {Object} [options]
* @param {Object} [thread] read obout mail.Thread object
* @param {Object} [message]
- * @param {Number} [message_ids=null] ids for message_fletch
+ * @param {Number} [message_ids=null] ids for message_fetch
* @param {Number} [message_data=null] already formatted message data,
* for subthreads getting data from their parent
* @param {Number} [truncate_limit=250] number of character to
* display before having a "show more" link; note that the text
* will not be truncated if it does not have 110% of the parameter
* @param {Boolean} [show_record_name]
- * @param {Boolean} [show_reply]
- * @param {Boolean} [show_reply_by_email]
* @param {Boolean} [show_dd_delete]
* @param {Boolean} [show_dd_hide]
*/
init: function(parent, options) {
this._super(parent);
- this.domain = options.domain || [];
- this.context = _.extend({
- default_model: 'mail.thread',
- default_res_id: 0,
- default_parent_id: false }, options.context || {});
- // options
- this.options={
- 'thread' : options.options.thread,
- 'message' : {
- 'message_ids': options.options.message.message_ids || null,
- 'message_data': options.options.message.message_data || null,
- 'show_record_name': options.options.message.show_record_name != undefined ? options.options.message.show_record_name: true,
- 'show_reply': options.options.message.show_reply || false,
- 'show_reply_by_email': options.options.message.show_reply_by_email || false,
- 'show_dd_delete': options.options.message.show_dd_delete || false,
- 'show_dd_hide': options.options.message.show_dd_hide || false,
- 'truncate_limit': options.options.message.truncate_limit || 250,
- }
- };
- // record options and data
- this.parent_thread= parent.messages!= undefined ? parent : options.options.thread._parents[0] ;
-
- var param = options.parameters;
// record parameters
+ var param = options.parameters;
+ for(var i in param){
+ this[i] = param[i];
+ }
this.id = param.id || -1;
this.model = param.model || false;
this.parent_id= param.parent_id || false;
@@ -372,7 +516,7 @@ openerp.mail = function(session) {
this.record_name = param.record_name || false;
this.body = param.body || false;
this.vote_user_ids =param.vote_user_ids || [];
- this.has_voted = param.has_voted || false;
+ this.has_voted = param.has_voted || false;
this.vote_user_ids = param.vote_user_ids || [];
@@ -381,6 +525,28 @@ openerp.mail = function(session) {
this.author_id = param.author_id || [];
this.attachment_ids = param.attachment_ids || [];
+ // record domain and context
+ this.domain = options.domain || [];
+ this.context = _.extend({
+ default_model: 'mail.thread',
+ default_res_id: 0,
+ default_parent_id: false }, options.context || {});
+
+ // record options
+ this.options={
+ 'thread' : options.options.thread,
+ 'message' : {
+ 'message_ids': options.options.message.message_ids || null,
+ 'message_data': options.options.message.message_data || null,
+ 'show_record_name': options.options.message.show_record_name != undefined ? options.options.message.show_record_name: true,
+ 'show_dd_delete': options.options.message.show_dd_delete || false,
+ 'show_dd_hide': options.options.message.show_dd_hide || false,
+ 'truncate_limit': options.options.message.truncate_limit || 250,
+ }
+ };
+
+ // record options and data
+ this.parent_thread= parent.messages!= undefined ? parent : options.options.thread._parents[0];
this.thread = false;
if( param.id > 0 ) {
@@ -420,10 +586,10 @@ openerp.mail = function(session) {
* in the function. */
bind_events: function() {
var self = this;
+
// event: click on 'Attachment(s)' in msg
- this.$el.on('click', 'a.oe_mail_msg_view_attachments', function (event) {
- var act_dom = $(this).parent().parent().parent().find('.oe_mail_msg_attachments');
- act_dom.toggle();
+ this.$('a.oe_mail_msg_view_attachments:first').on('click', function (event) {
+ self.$('.oe_mail_msg_attachments:first').toggle();
});
// event: click on icone 'Read' in header
this.$el.on('click', 'a.oe_read', this.on_message_read_unread);
@@ -434,21 +600,13 @@ openerp.mail = function(session) {
// event: click on 'Reply' in msg
this.$el.on('click', 'a.oe_reply', this.on_message_reply);
- // event: click on 'Reply by email' in msg side menu
- this.$el.on('click', 'a.oe_reply_by_email', this.on_message_reply_by_mail);
// event: click on 'Vote' button
this.$el.on('click', 'button.oe_mail_msg_vote', this.on_vote);
},
on_message_reply:function(event){
event.stopPropagation();
- this.thread.on_compose_message($(event.srcElement).hasClass("oe_full_reply"), false);
- return false;
- },
-
- on_message_reply_by_mail:function(event){
- event.stopPropagation();
- this.thread.on_compose_message(true, true);
+ this.thread.on_compose_message();
return false;
},
@@ -468,6 +626,7 @@ openerp.mail = function(session) {
if(this.thread){
return false;
}
+ var param = _.extend(self, {'parent_id': self.id});
/*create thread*/
self.thread = new mail.Thread(self, {
'domain': self.domain,
@@ -480,11 +639,7 @@ openerp.mail = function(session) {
'thread' : self.options.thread,
'message' : self.options.message
},
- 'parameters':{
- 'model': self.model,
- 'id': self.id,
- 'parent_id': self.id
- }
+ 'parameters': param
}
);
/*insert thread in parent message*/
@@ -501,9 +656,6 @@ openerp.mail = function(session) {
} else {
self.destroy();
}
- for(var i in this.thread.messages){
- this.thread.messages[i].animated_destroy({fadeTime:0});
- }
},
on_message_delete: function (event) {
@@ -523,10 +675,17 @@ openerp.mail = function(session) {
*/
on_message_read_unread: function (event) {
event.stopPropagation();
- this.animated_destroy({fadeTime:250});
+ if($(event.srcElement).hasClass("oe_read")) this.animated_destroy({fadeTime:250});
// if this message is read, all childs message display is read
var ids = [this.id].concat( this.get_child_ids() );
- this.ds_notification.call('set_message_read', [ids,$(event.srcElement).hasClass("oe_read")]);
+
+ if($(event.srcElement).hasClass("oe_read")) {
+ this.ds_notification.call('set_message_read', [ids,true]);
+ this.$el.removeClass("oe_mail_unread").addClass("oe_mail_read");
+ } else {
+ this.ds_notification.call('set_message_read', [ids,false]);
+ this.$el.removeClass("oe_mail_read").addClass("oe_mail_unread");
+ }
return false;
},
@@ -598,8 +757,8 @@ openerp.mail = function(session) {
display_vote: function () {
var self = this;
var vote_element = session.web.qweb.render('mail.thread.message.vote', {'widget': self});
- self.$(".placeholder-mail-vote").empty();
- self.$(".placeholder-mail-vote").html(vote_element);
+ self.$(".placeholder-mail-vote:first").empty();
+ self.$(".placeholder-mail-vote:first").html(vote_element);
},
});
@@ -609,11 +768,13 @@ openerp.mail = function(session) {
* ------------------------------------------------------------
*
* This widget handles the display of a thread of messages. The
- * [thread_level] parameter sets the thread level number:
- * - root message
+ * thread view:
+ * - root thread
* - - sub message (parent_id = root message)
- * - - - sub sub message (parent id = sub message)
+ * - - - sub thread
+ * - - - - sub sub message (parent id = sub thread)
* - - sub message (parent_id = root message)
+ * - - - sub thread
*/
mail.Thread = session.web.Widget.extend({
template: 'mail.thread',
@@ -627,7 +788,6 @@ openerp.mail = function(session) {
* @param {Object} [options]
* @param {Object} [message] read about mail.ThreadMessage object
* @param {Object} [thread]
- * @param {Number} [thread_level=0] number of thread levels
* @param {Boolean} [use_composer] use the advanced composer, or
* the default basic textarea if not set
* @param {Number} [expandable_number=5] number message show
@@ -637,7 +797,7 @@ openerp.mail = function(session) {
* @param {Boolean} [display_on_flat] display all thread
* on the wall thread level (no hierarchy)
* @param {Array} [parents] liked with the parents thread
- * use with browse, fletch... [O]= top parent
+ * use with browse, fetch... [O]= top parent
*/
init: function(parent, options) {
this._super(parent);
@@ -650,7 +810,7 @@ openerp.mail = function(session) {
// options
this.options={
'thread' : {
- 'thread_level': options.options.thread.thread_level || 0,
+ 'thread_level': (options.options.thread.thread_level+1) || 0,
'show_header_compose': (options.options.thread.show_header_compose != undefined ? options.options.thread.show_header_compose: false),
'use_composer': options.options.thread.use_composer || false,
'expandable_number': options.options.thread.expandable_number || 5,
@@ -670,6 +830,14 @@ openerp.mail = function(session) {
this.id= param.id || false;
this.model= param.model || false;
this.parent_id= param.parent_id || false;
+ this.is_private = param.is_private || false;
+ this.author_id = param.author_id || false;
+ this.partner_ids = [];
+ for(var i in param.partner_ids){
+ if(param.partner_ids[i][0]!=(param.author_id ? param.author_id[0] : -1)){
+ this.partner_ids.push(param.partner_ids[i]);
+ }
+ }
this.messages = [];
@@ -687,8 +855,7 @@ openerp.mail = function(session) {
this.display_user_avatar();
var display_done = compose_done = false;
- // add message composition form view
- compose_done = this.instantiate_composition_form();
+ this.instantiate_ComposeMessage();
this.bind_events();
@@ -699,23 +866,57 @@ openerp.mail = function(session) {
return display_done && compose_done;
},
- /**
- * Override-hack of do_action: automatically load message on the chatter.
- * Normally it should be called only when clicking on 'Post/Send'
- * in the composition form. */
- do_action: function(action, on_close) {
- this.instantiate_composition_form();
- this.message_fletch(false, false, false, [action.id]);
- return this._super(action, on_close);
+ instantiate_ComposeMessage: function(){
+ // add message composition form view
+ this.ComposeMessage = new mail.ThreadComposeMessage(this,{
+ 'context': this.context,
+ 'parameters': this,
+ 'show_attachment_delete': true,
+ });
+ this.ComposeMessage.appendTo(this.$(".oe_mail_thread_action:first"));
},
/* this method is runing for first parent thread
*/
on_first_thread: function(){
+ var self=this;
// fetch and display message, using message_ids if set
- display_done = this.message_fletch(true);
- //show the first write message
- this.$(">.oe_mail_thread_action").show();
+ this.message_fetch();
+
+ $(document).scroll( self.on_scroll );
+ window.setTimeout( self.on_scroll, 500 );
+
+ $(session.web.qweb.render('mail.wall_no_message', {})).appendTo(this.$('ul.oe_mail_thread_display'));
+
+ if(this.options.thread.show_header_compose){
+ this.ComposeMessage.$el.show();
+ //this.ComposeMessage.set_free_attachments();
+ }
+
+ var button_fetch = $(' ').click(function(event){
+ if(event)event.stopPropagation();
+ self.message_fetch();
+ });
+ this.$el.prepend(button_fetch);
+ this.$el.addClass("oe_mail_wall_first_thread");
+ },
+
+ /* When the expandable object is visible on screen (with scrolling)
+ * then the on_expandable function is launch
+ */
+ on_scroll: function(event){
+ if(event)event.stopPropagation();
+ var last=this.messages[0];
+ if(last && last.type=="expandable"){
+ var pos = last.$el.position();
+ if(pos.top){
+ /* bottom of the screen */
+ var bottom = $(window).scrollTop()+$(window).height()+100;
+ if(bottom - pos.top > 0){
+ last.on_expandable();
+ }
+ }
+ }
},
/**
@@ -723,17 +924,8 @@ openerp.mail = function(session) {
* in the function. */
bind_events: function() {
var self = this;
- // event: writing in basic textarea of composition form (quick reply)
- // event: onblur for hide 'Reply'
- this.$('.oe_mail_compose_textarea:first textarea')
- .keyup(function (event) {
- var charCode = (event.which) ? event.which : window.event.keyCode;
- if (event.shiftKey && charCode == 13) { this.value = this.value+"\n"; }
- else if (charCode == 13) { return self.message_post(); }
- })
- .blur(function (event) {
- $(this).parents('.oe_mail_thread_action:first').hide();
- });
+ self.$('.oe_mail_compose_textarea .oe_more').click(function () { var p=$(this).parent(); p.find('.oe_more_hidden, .oe_hidden').show(); p.find('.oe_more').hide(); });
+ self.$('.oe_mail_compose_textarea .oe_more_hidden').click(function () { var p=$(this).parent(); p.find('.oe_more_hidden, .oe_hidden').hide(); p.find('.oe_more').show(); });
},
/* get all child message/thread id linked
@@ -796,71 +988,13 @@ openerp.mail = function(session) {
return this.options.thread._parents[0].messages[0].browse_message(options);
},
- /** Instantiate the composition form, with every parameters in context
- * or in the widget context.
- * @param {object}
- * @param {boolean} show_header_compose, force to instantiate form
- */
- instantiate_composition_form: function(context) {
- // add message composition form view
- if ((!context || !context.show_header_compose) &&
- (!this.options.thread.show_header_compose || !this.options.thread.use_composer ||
- (this.options.thread.show_header_compose <= this.options.thread._parents.length && this.options.thread._parents[0]!=this))) {
- this.$("textarea:first").val("");
- return false;
- }
- if (this.compose_message_widget) {
- this.compose_message_widget.refresh();
- } else {
- var context = _.extend(context || {}, this.context);
- this.compose_message_widget = new mail.ComposeMessage(this, {'context': context});
- var composition_node = this.$('div.oe_mail_thread_action');
- composition_node.empty();
- return this.compose_message_widget.appendTo(composition_node);
- }
- },
-
/* this function is launch when a user click on "Reply" button
*/
- on_compose_message: function(full_reply, by_mail){
- if(full_reply){
- this.instantiate_composition_form({'show_header_compose':true});
- }
- if(by_mail){
- if (!this.compose_message_widget) return true;
- this.compose_message_widget.refresh({
- 'default_composition_mode': 'reply',
- 'default_parent_id': this.id,
- 'default_content_subtype': 'html'} );
- }
- this.$('div.oe_mail_thread_action:first').toggle();
+ on_compose_message: function(){
+ this.ComposeMessage.$el.toggle();
return false;
},
- refresh: function (action_context) {
- var self=this;
- _(this.messages).each(function(){ self.destroy(); });
- self.message_fletch();
- },
-
- /*post a message and fletch the message*/
- message_post: function (body) {
- var self = this;
- if (! body) {
- var comment_node = this.$('textarea');
- var body = comment_node.val();
- comment_node.val('');
- }
- if(body.match(/\S+/)) {
- this.ds_thread.call('message_post_api', [
- [this.context.default_res_id], body, false, 'comment', false, this.context.default_parent_id, undefined])
- .then(this.proxy('switch_new_message'));
- }
- else {
- return false;
- }
- },
-
/** Fetch messages
* @param {Bool} initial_mode: initial mode: try to use message_data or
* message_ids, if nothing available perform a message_read; otherwise
@@ -868,7 +1002,7 @@ openerp.mail = function(session) {
* @param {Array} replace_domain: added to this.domain
* @param {Object} replace_context: added to this.context
*/
- message_fletch: function (initial_mode, replace_domain, replace_context, ids) {
+ message_fetch: function (initial_mode, replace_domain, replace_context, ids) {
var self = this;
// initial mode: try to use message_data or message_ids
@@ -879,8 +1013,8 @@ openerp.mail = function(session) {
fetch_domain = replace_domain ? replace_domain : this.domain;
fetch_context = replace_context ? replace_context : this.context;
fetch_context.message_loaded= [this.id||0].concat( self.options.thread._parents[0].get_child_ids() );
-
- return this.ds_message.call('message_read', [ids, fetch_domain, (this.options.thread.thread_level+1), fetch_context, this.context.default_parent_id || undefined]
+
+ return this.ds_message.call('message_read', [ids, fetch_domain, fetch_context, 0, this.context.default_parent_id || undefined]
).then(this.proxy('switch_new_message'));
},
@@ -906,6 +1040,8 @@ openerp.mail = function(session) {
insert_message: function (message) {
var self=this;
+ this.$("li.oe_wall_no_message").remove();
+
if(message.type=='expandable'){
var message = new mail.ThreadExpandable(self, {
'domain': message.domain,
@@ -930,42 +1066,46 @@ openerp.mail = function(session) {
});
}
- var thread = self.options.thread.display_on_flat ? self.options.thread._parents[0] : this;
+ var thread_messages = (self.options.thread.display_on_flat && self.options.thread.thread_level ? self.options.thread._parents[0].messages : []).concat(self.messages);
+ var thread = (self.options.thread.display_on_flat && self.options.thread.thread_level ? self.options.thread._parents[0] : self);
// check older and newer message for insert
var parent_newer = false;
var parent_older = false;
- for(var i in thread.messages){
- if(thread.messages[i].id > message.id){
- if(!parent_newer || parent_newer.id>thread.messages[i].id)
- parent_newer = thread.messages[i];
- } else if(thread.messages[i].id>0 && thread.messages[i].id < message.id) {
- if(!parent_older || parent_older.id message.id){
+ if(!parent_newer || parent_newer.id>=thread_messages[i].id)
+ parent_newer = thread_messages[i];
+ } else if(thread_messages[i].id>0 && thread_messages[i].id < message.id) {
+ if(!parent_older || parent_older.idthis.options._expandable_max){
- this.list_ul.find('>li:gt('+(this.options._expandable_max-1)+')').hide();
- this.more_msg.show();
- } else {
- this.list_ul.find('>li').show();
- this.more_msg.hide();
+ if(parent_older){
+ if(sort){
+ message.insertBefore(parent_older.$el);
+ } else {
+ message.insertAfter(parent_older.$el);
+ }
}
+ else if(parent_newer){
+ if(sort){
+ message.insertAfter(parent_newer.$el);
+ } else {
+ message.insertBefore(parent_newer.$el);
+ }
+ }
+ else {
+ if(sort){
+ message.prependTo(thread.list_ul);
+ } else {
+ message.appendTo(thread.list_ul);
+ }
+ }
+ return message
},
display_user_avatar: function () {
@@ -1003,7 +1143,6 @@ openerp.mail = function(session) {
this._super.apply(this, arguments);
this.options.domain = this.options.domain || [];
this.options.context = {'default_model': 'mail.thread', 'default_res_id': false};
- this.options.thread_level = this.options.thread_level || 0;
},
start: function() {
@@ -1017,6 +1156,10 @@ openerp.mail = function(session) {
this.$el.toggle(this.view.get("actual_mode") !== "create");
},
+ /**
+ * Reinitialize the widget field and Display the threads
+ * @param {Object} new_context: context of the refresh
+ */
set_value: function() {
var self = this;
this._super.apply(this, arguments);
@@ -1034,30 +1177,26 @@ openerp.mail = function(session) {
var show_header_compose = this.view.is_action_enabled('edit') ||
(this.getParent().fields.message_is_follower && this.getParent().fields.message_is_follower.get_value());
+ if(this.thread){
+ this.thread.destroy();
+ }
this.thread = new mail.Thread(self, {
'domain': domain,
'context': this.options.context,
'options':{
'thread':{
- 'thread_level': this.options.thread_level,
'show_header_compose': show_header_compose,
'use_composer': show_header_compose,
'display_on_flat':true
},
'message':{
- 'show_dd_delete': true,
- 'show_reply_by_email': show_header_compose,
+ 'show_dd_delete': true
}
},
'parameters': {},
}
);
-
- this.$('ul.oe_mail_wall_threads').empty();
- var render_res = session.web.qweb.render('mail.wall_thread_container', {});
- $(render_res).appendTo(this.$('ul.oe_mail_wall_threads'));
-
- return this.thread.appendTo( this.$('li.oe_mail_wall_thread:last') );
+ return this.thread.appendTo( this.$('.oe_mail_wall_threads:first') );
},
});
@@ -1089,7 +1228,6 @@ openerp.mail = function(session) {
this.options = options || {};
this.options.domain = options.domain || [];
this.options.context = options.context || {};
- this.options.thread_level = options.thread_level || 1;
this.search_results = {'domain': [], 'context': {}, 'groupby': {}}
this.ds_msg = new session.web.DataSetSearch(this, 'mail.message');
},
@@ -1098,6 +1236,8 @@ openerp.mail = function(session) {
this._super.apply(this, arguments);
var searchview_ready = this.load_searchview({}, false);
var thread_displayed = this.message_render();
+ this.options.domain = this.options.domain.concat(this.search_results['domain']);
+ this.bind_events();
return (searchview_ready && thread_displayed);
},
@@ -1135,36 +1275,36 @@ openerp.mail = function(session) {
});
},
- /** Clean and display the threads */
+
+ /**
+ * Display the threads
+ */
message_render: function (search) {
- var domain = this.options.domain.concat(this.search_results['domain']);
-
- var domain = _.extend(this.options.domain, search&&search.domain? search.domain : {});
- var context = _.extend(this.options.context, search&&search.context ? search.context : {});
-
this.thread = new mail.Thread(this, {
- 'domain' : domain,
- 'context' : context,
+ 'domain' : this.options.domain.concat(this.search_results['domain']),
+ 'context' : _.extend(this.options.context, search&&search.search_results['context'] ? search.search_results['context'] : {}),
'options': {
'thread' :{
- 'thread_level': this.options.thread_level,
'use_composer': true,
- 'show_header_compose': 1,
+ 'show_header_compose': false,
},
'message': {
- 'show_reply': this.options.thread_level > 0,
+ 'show_reply': true,
'show_dd_hide': true,
+ 'show_dd_delete': true,
},
},
'parameters': {},
}
);
+ return this.thread.appendTo( this.$('.oe_mail_wall_threads:first') );
- this.$('ul.oe_mail_wall_threads').empty();
- var render_res = session.web.qweb.render('mail.wall_thread_container', {});
- $(render_res).appendTo(this.$('ul.oe_mail_wall_threads'));
-
- return this.thread.appendTo( this.$('li.oe_mail_wall_thread:last') );
},
+
+ bind_events: function(){
+ var self=this;
+ this.$("button.oe_write_full:first").click(function(){ self.thread.ComposeMessage.on_compose_fullmail(); });
+ this.$("button.oe_write_onwall:first").click(function(){ self.thread.ComposeMessage.$el.toggle(); });
+ }
});
};
diff --git a/addons/mail/static/src/js/mail_followers.js b/addons/mail/static/src/js/mail_followers.js
index 6c016c6c679..236e3081136 100644
--- a/addons/mail/static/src/js/mail_followers.js
+++ b/addons/mail/static/src/js/mail_followers.js
@@ -40,6 +40,7 @@ openerp_mail_followers = function(session, mail) {
this._check_visibility();
this.reinit();
this.bind_events();
+ this.display_subtypes();
},
_check_visibility: function() {
@@ -53,31 +54,15 @@ openerp_mail_followers = function(session, mail) {
bind_events: function() {
var self = this;
- this.$('div.oe_mouse_subtypes')
- .on('mouseover', function () {
- $(this).removeClass('oe_mouseout').addClass('oe_mouseover');
- self.display_subtypes();
- })
- .on('mouseleave', function () {
- $(this).removeClass('oe_mouseover').addClass('oe_mouseout');
- self.display_subtypes();
- });
-
this.$('button.oe_follower')
.on('click', function () {
if($(this).hasClass('oe_notfollow'))
self.do_follow();
else
self.do_unfollow();
- })
- .on('mouseover', function () {
- $(this).removeClass('oe_mouseout').addClass('oe_mouseover');
- })
- .on('mouseleave', function () {
- $(this).removeClass('oe_mouseover').addClass('oe_mouseout');
});
- this.$el.on('click', 'ul.oe_subtypes input', function () { self.do_update_subscription(); })
+ this.$el.on('click', 'ul.oe_subtypes input', self.do_update_subscription );
this.$el.on('click', 'button.oe_invite', function(event) {
action = {
@@ -173,7 +158,8 @@ openerp_mail_followers = function(session, mail) {
set_subtypes:function(data){
var self = this;
- var records = data[this.view.datarecord.id].message_subtype_data;
+ var records = (data[this.view.datarecord.id] || data[null]).message_subtype_data;
+
_(records).each(function (record, record_name) {
record.name = record_name;
record.followed = record.followed || undefined;
@@ -194,16 +180,10 @@ openerp_mail_followers = function(session, mail) {
},
do_follow: function () {
- var self =this;
_(this.$('.oe_msg_subtype_check')).each(function(record){
$(record).attr('checked','checked');
});
- var context = new session.web.CompoundContext(this.build_context(), {});
- return this.ds_model.call('message_subscribe_users', [[this.view.datarecord.id], undefined, undefined, context]).pipe(function(value_){
- self.read_value(value_);
- if(!self.$('.oe_recthread_subtypes').is(":visible"))
- self.display_subtypes(true);
- });
+ this.do_update_subscription();
},
do_unfollow: function () {
@@ -211,23 +191,28 @@ openerp_mail_followers = function(session, mail) {
$(record).attr('checked',false);
});
var context = new session.web.CompoundContext(this.build_context(), {});
- return this.ds_model.call('message_unsubscribe_users', [[this.view.datarecord.id], undefined, context]).pipe(this.proxy('read_value'));
+ return this.ds_model.call('message_unsubscribe_users', [[this.view.datarecord.id], [this.session.uid], context]).pipe(this.proxy('read_value'));
},
- do_update_subscription: function () {
- var context = new session.web.CompoundContext(this.build_context(), {});
+ do_update_subscription: function (event) {
var self = this;
var checklist = new Array();
- _(this.$('.oe_msg_subtype_check')).each(function(record){
+ _(this.$('.oe_mail_recthread_actions input[type="checkbox"]')).each(function(record){
if($(record).is(':checked')) {
checklist.push(parseInt($(record).data('id')))}
});
if(!checklist.length)
return this.do_unfollow();
- else
- return this.ds_model.call('message_subscribe_users',[[self.view.datarecord.id], undefined, checklist, context]).pipe(this.proxy('read_value'));
+ else{
+ var context = new session.web.CompoundContext(this.build_context(), {});
+ return this.ds_model.call('message_subscribe_users', [[this.view.datarecord.id], [this.session.uid], undefined, context]).pipe(function(value_){
+ self.read_value(value_);
+ self.display_subtypes(true);
+ });
+ }
+
},
});
diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml
index 07c9b406cdc..7941925415d 100644
--- a/addons/mail/static/src/xml/mail.xml
+++ b/addons/mail/static/src/xml/mail.xml
@@ -1,11 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ p
+
+
+ /web/binary/upload_attachment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Upload in progress...
+
+
+
+
+
+
+
+
+
+
+
+
+ x
+
+
+
+
+
+
+
+
+
+
+ This email is private.
+ I wrote for contacts and all my followers.
+
+
+
+
+
+
+ Post to:
+
All Followers
+
and
+
+
+
+
+ , others...
+ <<<
+
+
+
+
-
+
-
+
+ You have no messages
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /web/binary/upload_attachment
-
-
-
-
-
-
-
-
+
@@ -145,7 +224,6 @@
-
+
@@ -171,7 +249,7 @@
-
+
-
-
-
-
-
@@ -215,7 +276,7 @@
Agree
- Unagree
+ Undo
diff --git a/addons/mail/static/src/xml/mail_followers.xml b/addons/mail/static/src/xml/mail_followers.xml
index a6df1f0fe8c..f78c91c6305 100644
--- a/addons/mail/static/src/xml/mail_followers.xml
+++ b/addons/mail/static/src/xml/mail_followers.xml
@@ -13,9 +13,9 @@
Unfollow
Following
-
+
+
diff --git a/addons/mail/tests/test_mail.py b/addons/mail/tests/test_mail.py
index 1fc44ed81af..a94c4fc2c8a 100644
--- a/addons/mail/tests/test_mail.py
+++ b/addons/mail/tests/test_mail.py
@@ -529,109 +529,6 @@ class test_mail(TestMailMockups):
self.assertEqual(message2.subject, _subject, 'mail.message subject incorrect')
self.assertEqual(message2.body, group_bird.description, 'mail.message body incorrect')
- # FP Note: to be reviewed to be more generic, not depending on the algorythm of
- # message_read
- #def test_30_message_read(self):
- # """ Tests designed for message_read. """
- # # TDE NOTE: this test is not finished, as the message_read method is not fully specified.
- # # It will be updated as soon as we have fixed specs !
- # cr, uid = self.cr, self.uid
- # group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id)
-
- # def _compare_structures(struct1, struct2, n=0):
- # # print '%scompare structure' % ('\t' * n)
- # # self.assertEqual(len(struct1), len(struct2), 'message_read structure number of childs incorrect')
-
- # for x in range(len(struct1)):
- # if struct1[x].get('type') == 'expandable':
- # continue
- # # print '%s' % ('\t' * n), struct1[x]['id'], struct1[x]['child_nbr'], struct2[x]['id'], struct2[x].get('child_nbr', 'XX'), struct1[x].get('subject') or ''
- # self.assertEqual(struct1[x]['id'], struct2[x]['id'], 'message_read failure %s' % struct1[x].get('subject'))
- # _compare_structures(struct1[x]['child_ids'], struct2[x]['child_ids'], n + 1)
- # # print '%send compare' % ('\t' * n)
-
- # # ----------------------------------------
- # # CASE1: Flattening test
- # # ----------------------------------------
-
- # # Create dummy message structure
- # import copy
- # tree = [{'id': 2, 'child_nbr': 1, 'child_ids': [
- # {'id': 6, 'child_nbr': 1, 'child_ids': [
- # {'id': 8, 'child_nbr': 0, 'child_ids': []},
- # ]},
- # ]},
- # {'id': 1, 'child_nbr': 3, 'child_ids':[
- # {'id': 7, 'child_nbr': 1, 'child_ids': [
- # {'id': 9, 'child_nbr': 0, 'child_ids': []},
- # ]},
- # {'id': 4, 'child_nbr': 2, 'child_ids': [
- # {'id': 10, 'child_nbr': 0, 'child_ids': []},
- # {'id': 5, 'child_nbr': 0, 'child_ids': []},
- # ]},
- # {'id': 3, 'child_nbr': 0, 'child_ids': []},
- # ]},
- # ]
- # # Test: completely flat
- # new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 0, limit=15, add_expandable=False)
- # _compare_structures(new_tree, new_tree)
- # self.assertEqual(len(new_tree), 10, 'message_read_tree_flatten wrong in flat')
- # # Test: 1 thread level
- # tree_test = [{'id': 2, 'child_ids': [
- # {'id': 8, 'child_ids': []}, {'id': 6, 'child_ids': []},
- # ]},
- # {'id': 1, 'child_ids': [
- # {'id': 10, 'child_ids': []}, {'id': 9, 'child_ids': []},
- # {'id': 7, 'child_ids': []}, {'id': 5, 'child_ids': []},
- # {'id': 4, 'child_ids': []}, {'id': 3, 'child_ids': []},
- # ]},
- # ]
- # new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 1, limit=15, add_expandable=False)
- # _compare_structures(new_tree, tree_test)
- # # Test: 2 thread levels
- # new_tree = self.mail_message.message_read_tree_flatten(cr, uid, None, copy.deepcopy(tree), [('type', 'in', 'borderlands')], 2, limit=15, add_expandable=False)
- # _compare_structures(new_tree, tree)
-
- # # ----------------------------------------
- # # CASE2: message_read test
- # # ----------------------------------------
-
- # # 1. Add a few messages to pigs group
- # msgid1 = group_pigs.message_post(body='1', subject='1', parent_id=False)
- # msgid2 = group_pigs.message_post(body='2', subject='1-1', parent_id=msgid1)
- # msgid3 = group_pigs.message_post(body='3', subject='1-2', parent_id=msgid1)
- # msgid4 = group_pigs.message_post(body='4', subject='2', parent_id=False)
- # msgid5 = group_pigs.message_post(body='5', subject='1-1-1', parent_id=msgid2)
- # msgid6 = group_pigs.message_post(body='6', subject='2-1', parent_id=msgid4)
-
- # # Test: read all messages flat
- # tree_test = [{'id': msgid6, 'child_ids': []}, {'id': msgid5, 'child_ids': []},
- # {'id': msgid4, 'child_ids': []}, {'id': msgid3, 'child_ids': []},
- # {'id': msgid2, 'child_ids': []}, {'id': msgid1, 'child_ids': []}]
- # tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=0, limit=15)
- # _compare_structures(tree, tree_test)
- # # Test: read with 1 level of thread
- # tree_test = [{'id': msgid4, 'child_ids': [{'id': msgid6, 'child_ids': []}, ]},
- # {'id': msgid1, 'child_ids': [
- # {'id': msgid5, 'child_ids': []}, {'id': msgid3, 'child_ids': []},
- # {'id': msgid2, 'child_ids': []},
- # ]},
- # ]
- # tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=1, limit=15)
- # _compare_structures(tree, tree_test)
- # # Test: read with 2 levels of thread
- # tree_test = [{'id': msgid4, 'child_ids': [{'id': msgid6, 'child_ids': []}, ]},
- # {'id': msgid1, 'child_ids': [
- # {'id': msgid3, 'child_ids': []},
- # {'id': msgid2, 'child_ids': [{'id': msgid5, 'child_ids': []}, ]},
- # ]},
- # ]
- # tree = self.mail_message.message_read(cr, uid, ids=False, domain=[('model', '=', 'mail.group'), ('res_id', '=', self.group_pigs_id)], level=2, limit=15)
- # _compare_structures(tree, tree_test)
-
- # # 2. Test expandables
- # # TDE FIXME: add those tests when expandables are specified and implemented
-
def test_40_needaction(self):
""" Tests for mail.message needaction. """
cr, uid = self.cr, self.uid
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index fbadf76f2fb..7d75c67b942 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -81,7 +81,11 @@ class mail_compose_message(osv.TransientModel):
elif composition_mode == 'comment' and model and res_id:
vals = self.get_record_data(cr, uid, model, res_id, context=context)
elif composition_mode == 'mass_mail' and model and active_ids:
- vals = {'model': model, 'res_id': res_id, 'content_subtype': 'html'}
+ if context.get('default_template_id'):
+ vals = self.pool.get('email.template').generate_email(cr, uid, context.get('default_template_id'), res_id, context=context)
+ vals.update({'content_subtype': 'html'})
+ else:
+ vals = {'model': model, 'res_id': res_id, 'content_subtype': 'html'}
else:
vals = {'model': model, 'res_id': res_id}
if composition_mode:
@@ -219,7 +223,6 @@ class mail_compose_message(osv.TransientModel):
email(s), rendering any template patterns on the fly if needed. """
if context is None:
context = {}
- print '**', context
active_ids = context.get('active_ids')
for wizard in self.browse(cr, uid, ids, context=context):
diff --git a/addons/mail/wizard/mail_compose_message_view.xml b/addons/mail/wizard/mail_compose_message_view.xml
index 0f384dc5a0d..7329992f8ed 100644
--- a/addons/mail/wizard/mail_compose_message_view.xml
+++ b/addons/mail/wizard/mail_compose_message_view.xml
@@ -16,13 +16,11 @@
+
-
-
+
@@ -32,10 +30,10 @@
or
-
+
@@ -68,6 +66,7 @@
context="{'force_email':True}"
on_change="onchange_partner_ids(partner_ids)"
class="oe_mail_compose_message_partner_ids"/>
+
diff --git a/addons/marketing_campaign/report/campaign_analysis_view.xml b/addons/marketing_campaign/report/campaign_analysis_view.xml
index db79ce44132..d3693497408 100644
--- a/addons/marketing_campaign/report/campaign_analysis_view.xml
+++ b/addons/marketing_campaign/report/campaign_analysis_view.xml
@@ -5,7 +5,7 @@
campaign.analysis.tree
campaign.analysis
-
+
diff --git a/addons/membership/report/report_membership_view.xml b/addons/membership/report/report_membership_view.xml
index 81e1a3db97c..99dcc73ceba 100644
--- a/addons/membership/report/report_membership_view.xml
+++ b/addons/membership/report/report_membership_view.xml
@@ -8,7 +8,7 @@
report.membership.tree
report.membership
-
+
diff --git a/addons/mrp/__openerp__.py b/addons/mrp/__openerp__.py
index 73564f2b460..66806c4f350 100644
--- a/addons/mrp/__openerp__.py
+++ b/addons/mrp/__openerp__.py
@@ -29,7 +29,7 @@
'sequence': 18,
'summary': 'Manufacturing Orders, Bill of Materials, Routing',
'images': ['images/bill_of_materials.jpeg', 'images/manufacturing_order.jpeg', 'images/planning_manufacturing_order.jpeg', 'images/production_analysis.jpeg', 'images/production_dashboard.jpeg','images/routings.jpeg','images/work_centers.jpeg'],
- 'depends': ['procurement', 'stock', 'resource', 'purchase', 'product','process'],
+ 'depends': ['product','procurement', 'stock', 'resource', 'purchase','process'],
'description': """
Manage the Manufacturing process in OpenERP
===========================================
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index abf0f823e5c..3ce38e86db6 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -952,6 +952,7 @@
+
@@ -961,10 +962,10 @@
-
+
product.normal.form.mrp.inherit
product.product
-
+
False
@@ -975,7 +976,7 @@
order using the bill of materials assigned to this product.
The delivery order will be ready once the production is done.
-
+
@@ -1050,7 +1051,5 @@
-
-
diff --git a/addons/mrp/procurement.py b/addons/mrp/procurement.py
index 795ac5453fb..19f8a48b6fe 100644
--- a/addons/mrp/procurement.py
+++ b/addons/mrp/procurement.py
@@ -31,6 +31,7 @@ class procurement_order(osv.osv):
_columns = {
'bom_id': fields.many2one('mrp.bom', 'BoM', ondelete='cascade', select=True),
'property_ids': fields.many2many('mrp.property', 'procurement_property_rel', 'procurement_id','property_id', 'Properties'),
+ 'production_id': fields.many2one('mrp.production', 'Manufacturing Order'),
}
def check_produce_product(self, cr, uid, procurement, context=None):
@@ -95,16 +96,22 @@ class procurement_order(osv.osv):
'move_prod_id': res_id,
'company_id': procurement.company_id.id,
})
+
res[procurement.id] = produce_id
- self.write(cr, uid, [procurement.id], {'state': 'running'})
- self.running_send_note(cr, uid, ids, context=context)
+ self.write(cr, uid, [procurement.id], {'state': 'running', 'production_id': produce_id})
bom_result = production_obj.action_compute(cr, uid,
[produce_id], properties=[x.id for x in procurement.property_ids])
wf_service.trg_validate(uid, 'mrp.production', produce_id, 'button_confirm', cr)
if res_id:
move_obj.write(cr, uid, [res_id],
{'location_id': procurement.location_id.id})
+ self.production_order_create_note(cr, uid, ids, context=context)
return res
+
+ def production_order_create_note(self, cr, uid, ids, context=None):
+ for procurement in self.browse(cr, uid, ids, context=context):
+ body = _("Manufacturing Order created.")
+ self.message_post(cr, uid, [procurement.id], body=body, context=context)
procurement_order()
diff --git a/addons/mrp_operations/report/mrp_workorder_analysis_view.xml b/addons/mrp_operations/report/mrp_workorder_analysis_view.xml
index cca9a7e3b24..de486face78 100644
--- a/addons/mrp_operations/report/mrp_workorder_analysis_view.xml
+++ b/addons/mrp_operations/report/mrp_workorder_analysis_view.xml
@@ -9,7 +9,7 @@
mrp.workorder.tree
mrp.workorder
-
+
diff --git a/addons/mrp_repair/report/order.rml b/addons/mrp_repair/report/order.rml
index be5737d4b85..202ed6e4684 100644
--- a/addons/mrp_repair/report/order.rml
+++ b/addons/mrp_repair/report/order.rml
@@ -312,7 +312,7 @@
[[ formatLang(line.price_unit) ]]
- [[ formatLang(line.price_subtotal) ]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(line.price_subtotal, currency_obj = o.pricelist_id.currency_id) ]]
@@ -337,7 +337,7 @@
[[ formatLang(fees.price_unit) ]]
- [[ formatLang(fees.price_subtotal) ]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(fees.price_subtotal, currency_obj = o.pricelist_id.currency_id) ]]
@@ -353,7 +353,7 @@
Net Total :
- [[ formatLang(o.amount_untaxed, dp='Sale Price')]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_untaxed, dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]]
@@ -367,7 +367,7 @@
Taxes:
- [[ formatLang(o.amount_tax, dp='Account')]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_tax, dp='Account', currency_obj=o.pricelist_id.currency_id) ]]
@@ -380,7 +380,7 @@
Total :
- [[ formatLang(total(o), dp='Sale Price') ]] [[ o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(total(o), dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]]
diff --git a/addons/point_of_sale/controllers/main.py b/addons/point_of_sale/controllers/main.py
index 3d80fd53e24..b189c8f204a 100644
--- a/addons/point_of_sale/controllers/main.py
+++ b/addons/point_of_sale/controllers/main.py
@@ -4,16 +4,12 @@ import simplejson
import os
import openerp
-try:
- import openerp.addons.web.common.http as openerpweb
- from openerp.addons.web.controllers.main import manifest_list, module_boot, html_template
-except ImportError:
- import web.common.http as openerpweb
+from openerp.addons.web.controllers.main import manifest_list, module_boot, html_template
-class PointOfSaleController(openerpweb.Controller):
+class PointOfSaleController(openerp.addons.web.http.Controller):
_cp_path = '/pos'
- @openerpweb.httprequest
+ @openerp.addons.web.http.httprequest
def app(self, req, s_action=None, **kw):
js = "\n ".join('' % i for i in manifest_list(req, None, 'js'))
css = "\n ".join(' ' % i for i in manifest_list(req, None, 'css'))
@@ -29,7 +25,7 @@ class PointOfSaleController(openerpweb.Controller):
}
return r
- @openerpweb.httprequest
+ @openerp.addons.web.http.httprequest
def manifest(self, req, **kwargs):
""" This generates a HTML5 cache manifest files that preloads the categories and products thumbnails
and other ressources necessary for the point of sale to work offline """
@@ -66,12 +62,12 @@ class PointOfSaleController(openerpweb.Controller):
return m
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def dispatch(self, request, iface, **kwargs):
method = 'iface_%s' % iface
return getattr(self, method)(request, **kwargs)
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def scan_item_success(self, request, ean):
"""
A product has been scanned with success
@@ -79,7 +75,7 @@ class PointOfSaleController(openerpweb.Controller):
print 'scan_item_success: ' + str(ean)
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def scan_item_error_unrecognized(self, request, ean):
"""
A product has been scanned without success
@@ -87,7 +83,7 @@ class PointOfSaleController(openerpweb.Controller):
print 'scan_item_error_unrecognized: ' + str(ean)
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def help_needed(self, request):
"""
The user wants an help (ex: light is on)
@@ -95,7 +91,7 @@ class PointOfSaleController(openerpweb.Controller):
print "help_needed"
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def help_canceled(self, request):
"""
The user stops the help request
@@ -103,22 +99,22 @@ class PointOfSaleController(openerpweb.Controller):
print "help_canceled"
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def weighting_start(self, request):
print "weighting_start"
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def weighting_read_kg(self, request):
print "weighting_read_kg"
return 0.0
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def weighting_end(self, request):
print "weighting_end"
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def payment_request(self, request, price):
"""
The PoS will activate the method payment
@@ -126,47 +122,47 @@ class PointOfSaleController(openerpweb.Controller):
print "payment_request: price:"+str(price)
return 'ok'
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def payment_status(self, request):
print "payment_status"
return { 'status':'waiting' }
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def payment_cancel(self, request):
print "payment_cancel"
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def transaction_start(self, request):
print 'transaction_start'
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def transaction_end(self, request):
print 'transaction_end'
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def cashier_mode_activated(self, request):
print 'cashier_mode_activated'
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def cashier_mode_deactivated(self, request):
print 'cashier_mode_deactivated'
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def open_cashbox(self, request):
print 'open_cashbox'
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def print_receipt(self, request, receipt):
print 'print_receipt' + str(receipt)
return
- @openerpweb.jsonrequest
+ @openerp.addons.web.http.jsonrequest
def print_pdf_invoice(self, request, pdfinvoice):
print 'print_pdf_invoice' + str(pdfinvoice)
return
diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index dfd0d73ad55..788c301a04f 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -1300,7 +1300,7 @@ class product_product(osv.osv):
'expense_pdt': fields.boolean('Point of Sale Cash Out', help="This is a product you can use to take cash from a statement for the point of sale backend, exemple: money lost, transfer to bank, etc."),
'pos_categ_id': fields.many2one('pos.category','Point of Sale Category',
help="If you want to sell this product through the point of sale, select the category it belongs to."),
- 'to_weight' : fields.boolean('To Weight', help="This category contains products that should be weighted, mainly used for the self-checkout interface"),
+ 'to_weight' : fields.boolean('To Weigh', help="This category contains products that should to be weighed, mainly used for the self-checkout interface"),
}
def _default_pos_categ_id(self, cr, uid, context=None):
diff --git a/addons/point_of_sale/report/account_statement.rml b/addons/point_of_sale/report/account_statement.rml
index dc6e6c5e64c..0b633f3f7c4 100644
--- a/addons/point_of_sale/report/account_statement.rml
+++ b/addons/point_of_sale/report/account_statement.rml
@@ -214,10 +214,10 @@
[[ formatLang(statement.closing_date,date_time=True)]]
- [[ formatLang(statement.balance_start, dp='Account') ]][[ company.currency_id.symbol ]]
+ [[ formatLang(statement.balance_start, dp='Account', currency_obj = company.currency_id) ]]
- [[ formatLang(statement.balance_end_real, dp='Account') ]][[ company.currency_id.symbol ]]
+ [[ formatLang(statement.balance_end_real, dp='Account', currency_obj = company.currency_id) ]]
@@ -250,7 +250,7 @@
[[ line_ids.partner_id.name ]]
- [[ formatLang(line_ids.amount, dp='Account') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(line_ids.amount, dp='Account', currency_obj=company.currency_id) ]]
@@ -267,7 +267,7 @@
Total :
- [[ formatLang(get_total(statement.line_ids), dp='Account') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(get_total(statement.line_ids), dp='Account', currency_obj = company.currency_id) ]]
diff --git a/addons/point_of_sale/report/all_closed_cashbox_of_the_day.py b/addons/point_of_sale/report/all_closed_cashbox_of_the_day.py
index 0e75e7f7ae1..dc3b432728f 100644
--- a/addons/point_of_sale/report/all_closed_cashbox_of_the_day.py
+++ b/addons/point_of_sale/report/all_closed_cashbox_of_the_day.py
@@ -73,7 +73,7 @@ class all_closed_cashbox_of_the_day(report_sxw.rml_parse):
if res:
return res[0]['bal']
else:
- return False
+ return 0
def _get_sub_total(self, user, data, date):
res={}
diff --git a/addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml b/addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml
index bb58c5e823d..4f16031c8b3 100644
--- a/addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml
+++ b/addons/point_of_sale/report/all_closed_cashbox_of_the_day.rml
@@ -183,10 +183,10 @@
- [[ formatLang(get_net_total_starting(user)[1]) ]] [[company.currency_id.symbol]]
+ [[ formatLang(get_net_total_starting(user)[1], currency_obj = company.currency_id)]]
- [[ formatLang(get_net_total(user)) ]] [[company.currency_id.symbol]]
+ [[ formatLang(get_net_total(user), currency_obj = company.currency_id)]]
@@ -207,10 +207,10 @@
[[ statement['closing_date'] ]]
- [[ (get_bal(statement)) or '0.00' ]] [[company.currency_id.symbol]]
+ [[ formatLang(get_bal(statement), currency_obj = company.currency_id)]]
- [[ formatLang(get_sub_total(user,statement['journal_id'],statement['date'])) ]] [[company.currency_id.symbol]]
+ [[ formatLang(get_sub_total(user,statement['journal_id'],statement['date']), currency_obj = company.currency_id )]]
@@ -236,7 +236,7 @@
- [[ formatLang(line_ids['amount']) ]] [[company.currency_id.symbol]]
+ [[ formatLang(line_ids['amount'], currency_obj = company.currency_id)]]
diff --git a/addons/point_of_sale/report/pos_details.rml b/addons/point_of_sale/report/pos_details.rml
index b0019133009..e7c4c756e64 100644
--- a/addons/point_of_sale/report/pos_details.rml
+++ b/addons/point_of_sale/report/pos_details.rml
@@ -252,7 +252,7 @@
[ [[ line_ids['code'] ]] ] [[ line_ids['name'] ]]
- [[ formatLang(line_ids['price_unit'], dp='Sale Price') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(line_ids['price_unit'], dp='Sale Price', currency_obj = company.currency_id) ]]
[[ formatLang(line_ids['qty']) ]] [[ line_ids['uom'] ]]
@@ -289,7 +289,7 @@
[[ p['name'] or removeParentNode('para') ]]
- [[ formatLang(p['amount']) or removeParentNode('tr') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(p['amount'], currency_obj = company.currency_id) or removeParentNode('tr') ]]
@@ -320,7 +320,7 @@
[[ p['name'] or removeParentNode('para') ]]
- [[ formatLang(p['sum'], dp='Account') or removeParentNode('tr') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(p['sum'], dp='Account', currency_obj = company.currency_id) or removeParentNode('tr') ]]
@@ -349,7 +349,7 @@
Sales total(Revenue)
- [[ formatLang(getsalestotal2(), dp='Sale Price') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(getsalestotal2(), dp='Sale Price', currency_obj = company.currency_id) ]]
@@ -365,7 +365,7 @@
Total invoiced
- [[ formatLang(getsuminvoice2(data['form']), dp='Sale Price') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(getsuminvoice2(data['form']), dp='Sale Price', currency_obj = company.currency_id) ]]
@@ -373,7 +373,7 @@
Total discount
- [[ formatLang(getsumdisc(), dp='Sale Price') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(getsumdisc(), dp='Sale Price', currency_obj = company.currency_id) ]]
@@ -381,7 +381,7 @@
Total paid
- [[ formatLang(getpaidtotal2(), dp='Sale Price') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(getpaidtotal2(), dp='Sale Price', currency_obj = company.currency_id) ]]
@@ -389,7 +389,7 @@
Total of the day
- [[ formatLang(gettotalofthaday(data['form']), dp='Sale Price') ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(gettotalofthaday(data['form']), dp='Sale Price', currency_obj = company.currency_id) ]]
diff --git a/addons/point_of_sale/report/pos_details_summary.rml b/addons/point_of_sale/report/pos_details_summary.rml
index d12cdec2598..b1c71db7d40 100644
--- a/addons/point_of_sale/report/pos_details_summary.rml
+++ b/addons/point_of_sale/report/pos_details_summary.rml
@@ -204,7 +204,7 @@
[[ p[0] ]]
- [[ p[1] ]] [[company.currency_id.symbol]]
+ [[ formatLang(p[1], currency_obj=company.currency_id) ]]
@@ -235,7 +235,7 @@
[[ t[0] ]]
- [[ '%.2f' % (t[1],) ]] [[company.currency_id.symbol]]
+ [[ formatLang(t[1], currency_obj=company.currency_id) ]]
@@ -280,7 +280,7 @@
Total invoiced
- [[ '%.2f' % getsuminvoice(objects) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(getsuminvoice(objects), currency_obj=company.currency_id) ]]
@@ -288,7 +288,7 @@
Total discount
- [[ '%.2f' % getsumdisc(objects) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(getsumdisc(objects), currency_obj=company.currency_id) ]]
@@ -296,7 +296,7 @@
Total paid
- [[ '%.2f' % getpaidtotal(objects) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(getpaidtotal(objects), currency_obj=company.currency_id) ]]
@@ -304,7 +304,7 @@
Total of the day
- [[ '%.2f' % gettotalofthaday(objects) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(gettotalofthaday(objects), currency_obj=company.currency_id) ]]
diff --git a/addons/point_of_sale/report/pos_lines.rml b/addons/point_of_sale/report/pos_lines.rml
index be394ed4f16..1ed8e33eede 100644
--- a/addons/point_of_sale/report/pos_lines.rml
+++ b/addons/point_of_sale/report/pos_lines.rml
@@ -186,7 +186,7 @@
[[ formatLang(l.discount) ]]
- [[ formatLang(l.price_subtotal) ]] [[o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(l.price_subtotal, currency_obj=o.pricelist_id.currency_id) ]]
@@ -202,7 +202,7 @@
Net Total :
- [[ formatLang(o.amount_total) ]] [[o.pricelist_id.currency_id.symbol ]]
+ [[ formatLang(o.amount_total, currency_obj=o.pricelist_id.currency_id) ]]
@@ -215,7 +215,7 @@
Taxes :
- [[ formatLang(o.amount_tax) ]] [[o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_tax, currency_obj=o.pricelist_id.currency_id) ]]
@@ -228,7 +228,7 @@
Total:
- [[ formatLang(o.amount_total + o.amount_tax) ]] [[o.pricelist_id.currency_id. symbol ]]
+ [[ formatLang(o.amount_total + o.amount_tax, currency_obj=o.pricelist_id.currency_id) ]]
diff --git a/addons/point_of_sale/report/pos_order_report_view.xml b/addons/point_of_sale/report/pos_order_report_view.xml
index fee47312610..8d7bf84171a 100644
--- a/addons/point_of_sale/report/pos_order_report_view.xml
+++ b/addons/point_of_sale/report/pos_order_report_view.xml
@@ -5,7 +5,7 @@
report.pos.order.tree
report.pos.order
-
+
diff --git a/addons/point_of_sale/report/pos_payment_report.rml b/addons/point_of_sale/report/pos_payment_report.rml
index 757de687ee0..bcc4b9ec261 100644
--- a/addons/point_of_sale/report/pos_payment_report.rml
+++ b/addons/point_of_sale/report/pos_payment_report.rml
@@ -183,7 +183,7 @@
[[ formatLang(line_ids['price_unit']) ]]
- [[ formatLang(line_ids['total']) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(line_ids['total'], currency_obj = company.currency_id) ]]
@@ -201,7 +201,7 @@
Net Total:
- [[ formatLang(pos_payment_total(o)) or removeParentNode('blockTable')]] [[ company.currency_id.symbol ]]
+ [[ formatLang(pos_payment_total(o), currency_obj = company.currency_id) or removeParentNode('blockTable')]]
diff --git a/addons/point_of_sale/report/pos_payment_report_user.rml b/addons/point_of_sale/report/pos_payment_report_user.rml
index 3105441aa0c..1d89d28c5f9 100644
--- a/addons/point_of_sale/report/pos_payment_report_user.rml
+++ b/addons/point_of_sale/report/pos_payment_report_user.rml
@@ -168,7 +168,7 @@
[[ formatLang(line_ids['price_unit']) ]]
- [[ formatLang(line_ids['total']) ]] [[company.currency_id.symbol]]
+ [[ formatLang(line_ids['total'], currency_obj = company.currency_id)]]
@@ -194,7 +194,7 @@
Total:
- [[ formatLang(pos_payment_user_total(data['form'])) or removeParentNode('blockTable')]] [[company.currency_id.symbol]]
+ [[ formatLang(pos_payment_user_total(data['form'], currency_obj = company.currency_id)) or removeParentNode('blockTable')]]
diff --git a/addons/point_of_sale/report/pos_receipt.rml b/addons/point_of_sale/report/pos_receipt.rml
index 55873887210..d7b8b08ad29 100644
--- a/addons/point_of_sale/report/pos_receipt.rml
+++ b/addons/point_of_sale/report/pos_receipt.rml
@@ -72,8 +72,7 @@
[[ repeatIn(objects,'o') ]]
[[o.user_id.company_id.name]]
- [[ address and address.street ]], [[ address and address.zip ]] [[ address and address.city ]]
- [[ address and address.country_id.name ]]
+ [[ address and display_address(address)]]
Tel : [[ address and address.phone ]]
User : [[ o.user_id.name ]]
Shop : [[ o.shop_id.name ]]
@@ -109,7 +108,7 @@
[[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]]
- [[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % net(line.id) ]] [[company.currency_id.symbol]] [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.2f' % line.discount ]]%) [[company.currency_id.symbol]]
+ [[o.state=='cancel' and o.statement_ids and '-' or '']][[ formatLang(net(line.id), currency_obj=company.currency_id) ]] [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ formatLang(line.discount, currency_obj=company.currency_id) ]])
@@ -119,7 +118,7 @@
Taxes :
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.2f' % o.amount_tax]] [[company.currency_id.symbol]]
+ [[o.state=='cancel' and o.statement_ids and '-' or '']][[formatLang(o.amount_tax, currency_obj=company.currency_id)]]
@@ -129,7 +128,7 @@
Total :
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.2f' % o.amount_total]] [[company.currency_id.symbol]]
+ [[o.state=='cancel' and o.statement_ids and '-' or '']][[formatLang(o.amount_total, currency_obj=company.currency_id)]]
@@ -158,7 +157,7 @@
- [[ '%.2f' %(d['amt'] or 0) ]] [[company.currency_id.symbol]]
+ [[ formatLang(d['amt'] or 0, currency_obj=company.currency_id) ]]
diff --git a/addons/point_of_sale/report/pos_users_product.rml b/addons/point_of_sale/report/pos_users_product.rml
index f3a8cfd77e8..9758e924ada 100644
--- a/addons/point_of_sale/report/pos_users_product.rml
+++ b/addons/point_of_sale/report/pos_users_product.rml
@@ -191,7 +191,7 @@
[[ formatLang(line_ids['qty']) ]] [[line_ids['uom'] ]]
- [[ formatLang(line_ids['amt']) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(line_ids['amt'], currency_obj = company.currency_id) ]]
@@ -208,7 +208,7 @@
Total :
- [[ formatLang(get_total(statement)) ]] [[ company.currency_id.symbol ]]
+ [[ formatLang(get_total(statement), currency_obj = company.currency_id) ]]
diff --git a/addons/portal/tests/test_portal.py b/addons/portal/tests/test_portal.py
index fe26f3280a2..83b10b39c28 100644
--- a/addons/portal/tests/test_portal.py
+++ b/addons/portal/tests/test_portal.py
@@ -50,6 +50,9 @@ class test_portal(test_mail.TestMailMockups):
user_chell = self.res_users.browse(cr, uid, self.user_chell_id)
self.partner_chell_id = user_chell.partner_id.id
+ # Set an email address for the user running the tests, used as Sender for outgoing mails
+ self.res_users.write(cr, uid, uid, {'email': 'test@localhost'})
+
def test_00_access_rights(self):
""" Test basic mail_message and mail_group access rights for portal users. """
cr, uid = self.cr, self.uid
diff --git a/addons/portal_crm/wizard/contact_view.xml b/addons/portal_crm/wizard/contact_view.xml
index 1776632d7ab..778e7f9562e 100644
--- a/addons/portal_crm/wizard/contact_view.xml
+++ b/addons/portal_crm/wizard/contact_view.xml
@@ -35,8 +35,8 @@
-
-
+
+
diff --git a/addons/process/static/src/js/process.js b/addons/process/static/src/js/process.js
index c593c1569fc..386a9653c02 100644
--- a/addons/process/static/src/js/process.js
+++ b/addons/process/static/src/js/process.js
@@ -239,7 +239,7 @@ instance.web.ViewManager.include({
title: _t('Process')
});
var form_controller = pop.view_form;
- pop.on('on_write_complete', self, self.initialize_process_view);
+ pop.on('write_completed', self, self.initialize_process_view);
}
});
};
diff --git a/addons/procurement/__openerp__.py b/addons/procurement/__openerp__.py
index a1aed1dfba8..48569fa76c4 100644
--- a/addons/procurement/__openerp__.py
+++ b/addons/procurement/__openerp__.py
@@ -57,7 +57,7 @@ depending on the product's configuration.
'company_view.xml',
'board_mrp_procurement_view.xml',
],
- 'demo': ['stock_orderpoint.xml'],
+ 'demo': ['stock_orderpoint.xml','procurement_demo.xml'],
'test': ['test/procurement.yml'],
'installable': True,
'auto_install': True,
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index 5d81bcbb9ba..b21cef30773 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -102,7 +102,6 @@ class procurement_order(osv.osv):
'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', states={'draft':[('readonly',False)], 'confirmed':[('readonly',False)]},
readonly=True, required=True, help="If you encode manually a Procurement, you probably want to use" \
" a make to order method."),
-
'note': fields.text('Note'),
'message': fields.char('Latest error', size=124, help="Exception occurred while computing procurement orders."),
'state': fields.selection([
@@ -362,11 +361,10 @@ class procurement_order(osv.osv):
""" Changes procurement state to Running and writes message.
@return: True
"""
- message = _('From stock: products assigned.')
+ message = _('Products reserved from stock.')
self.write(cr, uid, ids, {'state': 'running',
'message': message}, context=context)
self.message_post(cr, uid, ids, body=message, context=context)
- self.running_send_note(cr, uid, ids, context=context)
return True
def _check_make_to_stock_service(self, cr, uid, procurement, context=None):
@@ -390,8 +388,6 @@ class procurement_order(osv.osv):
order_point_id = self.pool.get('stock.warehouse.orderpoint').search(cr, uid, [('product_id', '=', procurement.product_id.id)], context=context)
if not order_point_id and not ok:
message = _("Not enough stock and no minimum orderpoint rule defined.")
- elif not order_point_id:
- message = _("No minimum orderpoint rule defined.")
elif not ok:
message = _("Not enough stock.")
@@ -407,7 +403,6 @@ class procurement_order(osv.osv):
"""
for procurement in self.browse(cr, uid, ids, context=context):
self.write(cr, uid, [procurement.id], {'state': 'running'})
- self.running_send_note(cr, uid, ids, context=None)
return True
def action_produce_assign_product(self, cr, uid, ids, context=None):
@@ -469,7 +464,6 @@ class procurement_order(osv.osv):
@return: True
"""
res = self.write(cr, uid, ids, {'state': 'ready'})
- self.ready_send_note(cr, uid, ids, context=None)
return res
def action_done(self, cr, uid, ids):
@@ -503,12 +497,6 @@ class procurement_order(osv.osv):
def confirm_send_note(self, cr, uid, ids, context=None):
self.message_post(cr, uid, ids, body=_("Procurement confirmed ."), context=context)
- def running_send_note(self, cr, uid, ids, context=None):
- self.message_post(cr, uid, ids, body=_("Procurement set to running ."), context=context)
-
- def ready_send_note(self, cr, uid, ids, context=None):
- self.message_post(cr, uid, ids, body=_("Procurement set to ready ."), context=context)
-
def cancel_send_note(self, cr, uid, ids, context=None):
self.message_post(cr, uid, ids, body=_("Procurement cancelled ."), context=context)
@@ -641,7 +629,18 @@ class stock_warehouse_orderpoint(osv.osv):
})
return super(stock_warehouse_orderpoint, self).copy(cr, uid, id, default, context=context)
-stock_warehouse_orderpoint()
+class product_template(osv.osv):
+ _inherit="product.template"
+
+ _columns = {
+ 'type': fields.selection([('product','Stockable Product'),('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Will change the way procurements are processed. Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."),
+ 'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
+ 'supply_method': fields.selection([('produce','Manufacture'),('buy','Buy')], 'Supply Method', required=True, help="Produce will generate production order or tasks, according to the product type. Buy will trigger purchase orders when requested."),
+ }
+ _defaults = {
+ 'procure_method': 'make_to_stock',
+ 'supply_method': 'buy',
+ }
class product_product(osv.osv):
_inherit="product.product"
@@ -649,6 +648,6 @@ class product_product(osv.osv):
'orderpoint_ids': fields.one2many('stock.warehouse.orderpoint', 'product_id', 'Minimum Stock Rules'),
}
-product_product()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/procurement/procurement_demo.xml b/addons/procurement/procurement_demo.xml
new file mode 100644
index 00000000000..608eb56f3ba
--- /dev/null
+++ b/addons/procurement/procurement_demo.xml
@@ -0,0 +1,204 @@
+
+
+
+
+
+ make_to_order
+ produce
+
+
+
+ make_to_order
+ produce
+
+
+
+ product
+ make_to_order
+ produce
+
+
+
+ product
+ make_to_order
+ produce
+
+
+
+ product
+ make_to_order
+ produce
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+ make_to_order
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+ make_to_order
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+ make_to_order
+ produce
+
+
+
+ product
+
+
+
+ product
+ make_to_order
+ produce
+
+
+
+ product
+ make_to_order
+ produce
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+ make_to_order
+ produce
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+ make_to_order
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+ make_to_order
+
+
+
+ product
+
+
+
+ product
+
+
+
+ make_to_order
+ produce
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+ product
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml
index bf73b383216..dcaa5e8d543 100644
--- a/addons/procurement/procurement_view.xml
+++ b/addons/procurement/procurement_view.xml
@@ -294,6 +294,29 @@
stock.warehouse.orderpoint
+
+ product.template.procurement
+ product.template
+
+
+
+
+
+
+
+
+
+
+ product.search.procurment.form
+ product.product
+
+
+
+
+
+
+
+
product.product.procurement
product.product
@@ -303,6 +326,33 @@
+
+
+
+
+
+
+
+ When you sell this service, nothing special will be trigered
+ to deliver the customer, as you set the procurement method as
+ 'Make to Stock'.
+
+
+ When you sell this product, OpenERP will use the available
+ inventory for the delivery order.
+
+ If there are not enough quantities available, the delivery order
+ will wait for new products. To fulfill the inventory, you should
+ create others rules like orderpoints.
+
+
+ When you sell this product, a delivery order will be created.
+ OpenERP will consider that the required quantities are always
+ available as it's a consumable (as a result of this, the quantity
+ on hand may become negative).
+
+
+
diff --git a/addons/product/product.py b/addons/product/product.py
index d5acee0333b..5ee1701532c 100644
--- a/addons/product/product.py
+++ b/addons/product/product.py
@@ -280,11 +280,8 @@ class product_template(osv.osv):
'description': fields.text('Description',translate=True),
'description_purchase': fields.text('Purchase Description',translate=True),
'description_sale': fields.text('Sale Description',translate=True),
- 'type': fields.selection([('product','Stockable Product'),('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Will change the way procurements are processed. Consumable are product where you don't manage stock."),
- 'supply_method': fields.selection([('produce','Manufacture'),('buy','Buy')], 'Supply Method', required=True, help="Produce will generate production order or tasks, according to the product type. Buy will trigger purchase orders when requested."),
- 'sale_delay': fields.float('Customer Lead Time', help="This is the average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."),
+ 'type': fields.selection([('consu', 'Consumable'),('service','Service')], 'Product Type', required=True, help="Consumable are product where you don't manage stock, a service is a non-material product provided by a company or an individual."),
'produce_delay': fields.float('Manufacturing Lead Time', help="Average delay in days to produce this product. This is only for the production order and, if it is a multi-level bill of material, it's only for the level of this product. Different lead times will be summed for all levels and purchase orders."),
- 'procure_method': fields.selection([('make_to_stock','Make to Stock'),('make_to_order','Make to Order')], 'Procurement Method', required=True, help="'Make to Stock': When needed, take from the stock or wait until re-supplying. 'Make to Order': When needed, purchase or produce for the procurement request."),
'rental': fields.boolean('Can be Rent'),
'categ_id': fields.many2one('product.category','Category', required=True, change_default=True, domain="[('type','=','normal')]" ,help="Select category for the current product"),
'list_price': fields.float('Sale Price', digits_compute=dp.get_precision('Product Price'), help="Base price for computing the customer price. Sometimes called the catalog price."),
@@ -296,7 +293,6 @@ class product_template(osv.osv):
help="Standard Price: the cost price is fixed and recomputed periodically (usually at the end of the year), Average Price: the cost price is recomputed at each reception of products."),
'warranty': fields.float('Warranty'),
'sale_ok': fields.boolean('Can be Sold', help="Determines if the product can be visible in the list of product within a selection from a sale order line."),
- 'purchase_ok': fields.boolean('Can be Purchased', help="Determine if the product is visible in the list of products within a selection from a purchase order line."),
'state': fields.selection([('',''),
('draft', 'In Development'),
('sellable','Normal'),
@@ -309,11 +305,8 @@ class product_template(osv.osv):
'uos_coeff': fields.float('Unit of Measure -> UOS Coeff', digits_compute= dp.get_precision('Product UoS'),
help='Coefficient to convert Unit of Measure to UOS\n'
' uos = uom * coeff'),
- 'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type', required=True),
+ 'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type'),
'seller_ids': fields.one2many('product.supplierinfo', 'product_id', 'Partners'),
- 'loc_rack': fields.char('Rack', size=16),
- 'loc_row': fields.char('Row', size=16),
- 'loc_case': fields.char('Case', size=16),
'company_id': fields.many2one('res.company', 'Company', select=1),
}
@@ -351,21 +344,17 @@ class product_template(osv.osv):
_defaults = {
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'product.template', context=c),
- 'list_price': lambda *a: 1,
- 'cost_method': lambda *a: 'standard',
- 'supply_method': lambda *a: 'buy',
- 'standard_price': lambda *a: 0.0,
- 'sale_ok': lambda *a: 1,
- 'sale_delay': lambda *a: 7,
- 'produce_delay': lambda *a: 1,
- 'purchase_ok': lambda *a: 1,
- 'procure_method': lambda *a: 'make_to_stock',
+ 'list_price': 1,
+ 'cost_method': 'standard',
+ 'standard_price': 0.0,
+ 'sale_ok': 1,
+ 'produce_delay': 1,
'uom_id': _get_uom_id,
'uom_po_id': _get_uom_id,
- 'uos_coeff' : lambda *a: 1.0,
- 'mes_type' : lambda *a: 'fixed',
+ 'uos_coeff' : 1.0,
+ 'mes_type' : 'fixed',
'categ_id' : _default_category,
- 'type' : lambda *a: 'consu',
+ 'type' : 'consu',
}
def _check_uom(self, cursor, user, ids, context=None):
diff --git a/addons/product/product_data.xml b/addons/product/product_data.xml
index 1974acc6df2..8e5280d036a 100644
--- a/addons/product/product_data.xml
+++ b/addons/product/product_data.xml
@@ -197,7 +197,6 @@ parameter) will see those record just disappear.
Service
service
-
diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml
index 66b86fc7b63..14477d2401a 100644
--- a/addons/product/product_demo.xml
+++ b/addons/product/product_demo.xml
@@ -70,8 +70,6 @@
20.5
30.75
service
- make_to_order
- produce
This type of service include basic monitoring of products.
@@ -84,8 +82,6 @@
25.5
38.25
service
- make_to_order
- produce
This type of service include assistance for security questions, system configuration requirements, implementation or special needs.
@@ -97,9 +93,7 @@
450.0
300.0
- product
- make_to_order
- produce
+ consu
4.0
@@ -115,9 +109,8 @@ HDD SH-1
500.0
750.0
-
product
-
make_to_order
-
produce
+
consu
+
4.0
@@ -133,9 +126,7 @@ HDD SH-1
600.0
900.0
-
product
-
make_to_order
-
produce
+
consu
7.0
@@ -148,7 +139,7 @@ HDD SH-1
800.0
1200.0
-
product
+
consu
@@ -158,7 +149,7 @@ HDD SH-1
880.0
1350.0
-
product
+
consu
@@ -168,7 +159,7 @@ HDD SH-1
10.0
13.0
-
product
+
consu
@@ -178,8 +169,7 @@ HDD SH-1
10.0
13.0
-
product
-
make_to_order
+
consu
@@ -189,7 +179,7 @@ HDD SH-1
12.50
14
-
product
+
consu
@@ -199,7 +189,7 @@ HDD SH-1
14
16.50
-
product
+
consu
@@ -209,8 +199,7 @@ HDD SH-1
18
12.50
-
product
-
make_to_order
+
consu
@@ -220,7 +209,7 @@ HDD SH-1
78.0
85.0
-
product
+
consu
@@ -230,7 +219,7 @@ HDD SH-1
87.0
95.0
-
product
+
consu
@@ -240,7 +229,7 @@ HDD SH-1
80.0
85.0
-
product
+
consu
@@ -250,9 +239,7 @@ HDD SH-1
20.0
25.0
-
product
-
make_to_order
-
produce
+
consu
@@ -262,7 +249,7 @@ HDD SH-1
860.0
975.0
-
product
+
consu
@@ -272,9 +259,7 @@ HDD SH-1
1020.0
1150.0
-
product
-
make_to_order
-
produce
+
consu
@@ -284,9 +269,7 @@ HDD SH-1
1100.0
1250.0
-
product
-
make_to_order
-
produce
+
consu
On demand hard-disk having capacity based on requirement.
@@ -297,7 +280,7 @@ HDD SH-1
1700.0
1950.0
-
product
+
consu
@@ -307,7 +290,7 @@ HDD SH-1
1790.0
2000.0
-
product
+
consu
@@ -317,7 +300,7 @@ HDD SH-1
2010.0
2100.0
-
product
+
consu
@@ -327,7 +310,7 @@ HDD SH-1
1910.0
1980.0
-
product
+
consu
@@ -337,7 +320,7 @@ HDD SH-1
876.0
885.0
-
product
+
consu
@@ -347,7 +330,7 @@ HDD SH-1
2870.0
2950.0
-
product
+
consu
17" Monitor
@@ -361,7 +344,7 @@ QWERTY keyboard
3000.0
3245.0
-
product
+
consu
17" Monitor
@@ -375,9 +358,7 @@ QWERTY keyboard
3300.0
3645.0
-
product
-
make_to_order
-
produce
+
consu
Custom Laptop based on customer's requirement.
@@ -388,7 +369,7 @@ QWERTY keyboard
390.0
405.0
-
product
+
consu
@@ -399,7 +380,7 @@ QWERTY keyboard
90.0
100.0
-
product
+
consu
@@ -410,7 +391,7 @@ QWERTY keyboard
126.0
145.0
-
product
+
consu
@@ -420,7 +401,7 @@ QWERTY keyboard
134.0
150.0
-
product
+
consu
.
@@ -431,7 +412,7 @@ QWERTY keyboard
57.0
62.0
-
product
+
consu
Hands free headset for laptop PC with in-line microphone and headphone plug.
@@ -442,8 +423,7 @@ QWERTY keyboard
60.0
65.0
-
product
-
make_to_order
+
consu
Headset for laptop PC with USB connector.
@@ -455,7 +435,7 @@ QWERTY keyboard
38.0
45.0
-
product
+
consu
@@ -466,7 +446,7 @@ QWERTY keyboard
18.40
20.0
-
product
+
consu
@@ -477,7 +457,7 @@ QWERTY keyboard
21.60
24.0
-
product
+
consu
@@ -488,8 +468,7 @@ QWERTY keyboard
4258.0
4410.0
-
product
-
make_to_order
+
consu
All in one hi-speed printer with fax and scanner.
@@ -501,7 +480,7 @@ QWERTY keyboard
60.0
65.0
-
product
+
consu
@@ -512,7 +491,7 @@ QWERTY keyboard
66.0
70.0
-
product
+
consu
@@ -569,8 +548,6 @@ QWERTY keyboard
155.0
173.0
consu
-
make_to_order
-
produce
Full featured image editing software.
@@ -582,7 +559,7 @@ QWERTY keyboard
55.0
60.0
-
product
+
consu
@@ -593,7 +570,7 @@ QWERTY keyboard
35.0
40.0
-
product
+
consu
@@ -604,7 +581,7 @@ QWERTY keyboard
55.0
70.0
-
product
+
consu
@@ -615,7 +592,7 @@ QWERTY keyboard
13.0
18.0
-
product
+
consu
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index 8c19aee026f..cc068d16a76 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -10,11 +10,9 @@
-
+
-
-
@@ -60,7 +58,7 @@