[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ '..'*(a['level']-1) ]][[ a['name'] ]]
[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['debit']) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[formatLang(a['debit']) ]]
[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font')]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['credit']) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['credit']) ]]
-
[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['balance'], currency_obj=company.currency_id) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['balance'], currency = company.currency_id) ]]
+
[[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['balance'], currency_obj=company.currency_id) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['balance'], currency_obj=company.currency_id) ]]
diff --git a/addons/account/test/account_bank_statement.yml b/addons/account/test/account_bank_statement.yml
index 6b66dd9029c..fc46370ef8b 100644
--- a/addons/account/test/account_bank_statement.yml
+++ b/addons/account/test/account_bank_statement.yml
@@ -1,5 +1,23 @@
-
In order to test Bank Statement feature of account I create a bank statement line and confirm it and check it's move created
+-
+ I select the period and journal for the bank statement
+-
+ !python {model: account.bank.statement}: |
+ import time
+ period = self._get_period(cr, uid, {'lang': u'en_US', 'tz': False, 'active_model': 'ir.ui.menu',
+ 'journal_type': 'bank', 'period_id':time.strftime('%m'), 'active_ids': [ref('menu_bank_statement_tree')], 'active_id': ref('menu_bank_statement_tree')})
+ assert period, _('Period has not been selected')
+ journal = self._default_journal_id(cr, uid, {'lang': u'en_US', 'tz': False, 'active_model': 'ir.ui.menu',
+ 'journal_type': 'bank', 'period_id': time.strftime('%m'), 'active_ids': [ref('menu_bank_statement_tree')], 'active_id': ref('menu_bank_statement_tree')})
+ assert journal, _('Journal has not been selected')
+-
+ I select the date
+-
+ !python {model: account.bank.statement}: |
+ import time
+ date = self.onchange_date(cr, uid, [], time.strftime('%Y-%m-%d'), context=None)
+ assert date, _('Date has not been selected')
-
I create a bank statement with Opening and Closing balance 0.
-
@@ -8,29 +26,26 @@
balance_start: 0.0
date: !eval time.strftime('%Y-%m-%d')
journal_id: account.bank_journal
- name: /
- period_id: account.period_10
- line_ids:
- - account_id: account.a_recv
- amount: 1000.0
- date: !eval time.strftime('%Y-%m-%d')
- name: a
- partner_id: base.res_partner_4
- sequence: 0.0
- type: general
-
- I check that Initially bank statement is in the "Draft" state
+ I create bank statement line
-
- !assert {model: account.bank.statement, id: account_bank_statement_0}:
- - state == 'draft'
+ !python {model: account.bank.statement.line}: |
+ partner = self.onchange_partner_id(cr, uid, [], ref('base.res_partner_4'), context=None)
+ vals = {
+ 'account_id': partner['value']['account_id'],
+ 'amount': 1000.0,
+ 'partner_id': ref('base.res_partner_4'),
+ 'statement_id': ref('account_bank_statement_0'),
+ 'name': 'EXT001'
+ }
+ vals.update(partner.get('value',{}))
+ line_id = self.create(cr, uid, vals)
+ assert line_id, "Account bank statement line has not been created"
-
I compute bank statement using Compute button
-
!python {model: account.bank.statement}: |
- self.button_dummy(cr, uid, [ref("account_bank_statement_0")], {"lang": "en_US",
- "tz": False, "active_model": "ir.ui.menu", "journal_type": "bank", "section_id":
- False, "period_id": 10, "active_ids": [ref("account.menu_bank_statement_tree")],
- "active_id": ref("account.menu_bank_statement_tree"), })
+ self.button_dummy(cr, uid, [ref("account_bank_statement_0")])
-
I modify the bank statement and set the Closing Balance.
@@ -42,10 +57,7 @@
I confirm the bank statement using Confirm button
-
!python {model: account.bank.statement}: |
- self.button_confirm_bank(cr, uid, [ref("account_bank_statement_0")], {"lang":
- "en_US", "tz": False, "active_model": "ir.ui.menu", "journal_type": "bank",
- "section_id": False, "period_id": 10, "active_ids": [ref("account.menu_bank_statement_tree")],
- "active_id": ref("account.menu_bank_statement_tree"), })
+ self.button_confirm_bank(cr, uid, [ref("account_bank_statement_0")])
-
I check that bank statement state is now "Closed"
-
@@ -61,3 +73,11 @@
assert bank_data.move_line_ids, "Move lines not created for bank statement"
for line in bank_data.move_line_ids:
assert line.move_id.state == 'posted', "Move state is not posted"
+-
+ Then I cancel Bank Statements and verifies that it raises a warning
+-
+ !python {model: account.bank.statement}: |
+ try:
+ self.button_cancel(cr, uid, [ref("account_bank_statement_0")])
+ except Exception, e:
+ assert e[0]=='UserError', 'Another exception has been raised!'
diff --git a/addons/account/test/account_customer_invoice.yml b/addons/account/test/account_customer_invoice.yml
index d14bf6f3cc1..870def153b1 100644
--- a/addons/account/test/account_customer_invoice.yml
+++ b/addons/account/test/account_customer_invoice.yml
@@ -1,5 +1,34 @@
-
In order to test account invoice I create a new customer invoice
+-
+ I will create bank detail
+-
+ !record {model: res.partner.bank, id: res_partner_bank_0}:
+ state: bank
+ company_id: base.main_company
+ partner_id: base.main_partner
+ acc_number: 123456789
+ footer: True
+ bank: base.res_bank_1
+ bank_name: Reserve
+-
+ I select the journal for customer invoice
+-
+ !python {model: account.invoice}: |
+ journal = self.onchange_journal_id(cr, uid, [], journal_id=ref('account.sales_journal'))
+-
+ I select the partner for customer invoice
+-
+ !python {model: account.invoice}: |
+ partner = self.onchange_partner_id(cr, uid, [], 'out_invoice', ref('base.res_partner_3'), date_invoice=False,
+ payment_term=ref('account.account_payment_term_advance'), partner_bank_id=ref('res_partner_bank_0'), company_id=ref('base.main_company'))
+-
+ I select the company for invoice
+-
+ !python {model: account.invoice}: |
+ company = self.onchange_company_id(cr, uid, [], ref('base.main_company'), False, 'out_invoice', [], ref('base.EUR'))
+-
+ I create a customer invoice
-
!record {model: account.invoice, id: account_invoice_customer0}:
account_id: account.a_recv
@@ -8,16 +37,57 @@
company_id: base.main_company
currency_id: base.EUR
date_invoice: !eval time.strftime('%Y-%m-%d')
- invoice_line:
- - account_id: account.a_sale
- name: '[PC3] Medium PC'
- price_unit: 900.0
- quantity: 10.0
- product_id: product.product_product_pc3
- uos_id: product.product_uom_unit
+ payment_term: account.account_payment_term_advance
+ partner_bank_id: res_partner_bank_0
journal_id: account.sales_journal
partner_id: base.res_partner_3
reference_type: none
+ name: 'Test Customer Invoice'
+-
+ I select a product for invoice
+-
+ !python {model: account.invoice.line}: |
+ product = self.product_id_change(cr, uid, [], ref("product.product_product_pc3"), False, qty=10.0, name='[PC3] Medium PC',
+ type='out_invoice', partner_id=ref('base.res_partner_3'), fposition_id=False, price_unit= 900.0, address_invoice_id=ref('base.res_partner_address_zen'),
+ currency_id=ref('base.EUR'), context={'lang': u'en_US', 'tz': False, 'type': 'out_invoice'}, company_id=ref('base.main_company'))
+ line = {}
+ line.update(product.get('value', {}))
+ line.update({
+ 'quantity': 10.0,
+ 'invoice_id': ref("account_invoice_customer0"),
+ })
+ invoice_line = self.create(cr, uid, line)
+-
+ I select product Uos
+-
+ !python {model: account.invoice.line}: |
+ inv_line_id = self.search(cr, uid, [('invoice_id','=',ref('account_invoice_customer0'))])
+ uos = self.uos_id_change(cr, uid, inv_line_id, ref("product.product_product_pc3"), ref('product.product_uom_unit'), qty=0, name='[PC3] Medium PC', type='out_invoice',
+ partner_id=ref('base.res_partner_3'), fposition_id=False, price_unit=False, address_invoice_id=ref('base.res_partner_address_zen'),
+ currency_id=ref('base.EUR'), context={'lang': u'en_US', 'tz': False, 'type': 'out_invoice'}, company_id=ref('base.main_company'))
+-
+ I select the account for invoice line
+-
+ !python {model: account.invoice.line}: |
+ inv_line_id = self.search(cr, uid, [('invoice_id','=',ref('account_invoice_customer0'))])
+ account = self.onchange_account_id(cr, uid, inv_line_id, False, ref('account.a_sale'))
+-
+ I manually assign tax on invoice
+-
+ !python {model: account.invoice.tax}: |
+ amt = self.amount_change(cr, uid, [], 50.0, ref('base.EUR'), ref('base.main_company'), False)
+ base_amt = self.base_change(cr, uid, [], 9000.0, ref('base.EUR'), ref('base.main_company'), False)
+ invoice_tax_line = {
+ 'name': 'Test Tax for Customer Invoice',
+ 'manual': 1,
+ 'base': base_amt['value']['base_amount'],
+ 'amount': amt['value']['tax_amount'],
+ 'account_id': ref('account.ova'),
+ 'invoice_id': ref("account_invoice_customer0"),
+ }
+ tax = self.create(cr, uid, invoice_tax_line)
+ assert tax, "Tax has not been assigned correctly"
+
-
I check that Initially customer invoice is in the "Draft" state
-
@@ -54,6 +124,23 @@
!python {model: account.invoice}: |
acc_id=self.browse(cr, uid, ref("account_invoice_customer0"))
assert acc_id.move_id, "Move not created for open invoice"
+-
+ I pay the Invoice
+-
+ !python {model: account.invoice}: |
+ import time
+ pay = self.pay_and_reconcile(cr, uid, [ref('account_invoice_customer0')],
+ 9050.0, ref('cash'), ref('account.period_10'),
+ ref('bank_journal'), ref('cash'),
+ ref('account.period_10'), ref('bank_journal'),
+ name='Payment for test customer invoice')
+ assert (pay == True), "Incorrect Payment"
+-
+ I verify that invoice is now in Paid state
+-
+ !python {model: account.invoice}: |
+ inv = self.browse(cr, uid, ref("account_invoice_customer0"))
+ assert (inv.state == 'paid'), "Invoice is not in Paid state"
-
I refund the invoice Using Refund Button
-
diff --git a/addons/account/wizard/account_fiscalyear_close.py b/addons/account/wizard/account_fiscalyear_close.py
index 297911f15f7..d2295b5bbf2 100644
--- a/addons/account/wizard/account_fiscalyear_close.py
+++ b/addons/account/wizard/account_fiscalyear_close.py
@@ -69,6 +69,9 @@ class account_fiscalyear_close(osv.osv_memory):
cr.execute("SELECT id FROM account_period WHERE date_start > (SELECT date_stop FROM account_fiscalyear WHERE id = %s)", (str(fy_id),))
fy2_period_set = ','.join(map(lambda id: str(id[0]), cr.fetchall()))
+ if not fy_period_set or not fy2_period_set:
+ raise osv.except_osv(_('UserError'), _('The periods to generate opening entries were not found'))
+
period = obj_acc_period.browse(cr, uid, data[0].period_id.id, context=context)
new_fyear = obj_acc_fiscalyear.browse(cr, uid, data[0].fy2_id.id, context=context)
old_fyear = obj_acc_fiscalyear.browse(cr, uid, fy_id, context=context)
@@ -108,10 +111,10 @@ class account_fiscalyear_close(osv.osv_memory):
#1. report of the accounts with defferal method == 'unreconciled'
cr.execute('''
- SELECT a.id
+ SELECT a.id
FROM account_account a
LEFT JOIN account_account_type t ON (a.user_type = t.id)
- WHERE a.active
+ WHERE a.active
AND a.type != 'view'
AND t.close_method = %s''', ('unreconciled', ))
account_ids = map(lambda x: x[0], cr.fetchall())
@@ -122,15 +125,15 @@ class account_fiscalyear_close(osv.osv_memory):
name, create_uid, create_date, write_uid, write_date,
statement_id, journal_id, currency_id, date_maturity,
partner_id, blocked, credit, state, debit,
- ref, account_id, period_id, date, move_id, amount_currency,
- quantity, product_id, company_id)
+ ref, account_id, period_id, date, move_id, amount_currency,
+ quantity, product_id, company_id)
(SELECT name, create_uid, create_date, write_uid, write_date,
statement_id, %s,currency_id, date_maturity, partner_id,
blocked, credit, 'draft', debit, ref, account_id,
%s, date, %s, amount_currency, quantity, product_id, company_id
FROM account_move_line
- WHERE account_id IN %s
- AND ''' + query_line + '''
+ WHERE account_id IN %s
+ AND ''' + query_line + '''
AND reconcile_id IS NULL)''', (new_journal.id, period.id, move_id, tuple(account_ids),))
#We have also to consider all move_lines that were reconciled
@@ -197,7 +200,7 @@ class account_fiscalyear_close(osv.osv_memory):
query_1st_part = """
INSERT INTO account_move_line (
debit, credit, name, date, move_id, journal_id, period_id,
- account_id, currency_id, amount_currency, company_id, state) VALUES
+ account_id, currency_id, amount_currency, company_id, state) VALUES
"""
query_2nd_part = ""
query_2nd_part_args = []
@@ -207,7 +210,7 @@ class account_fiscalyear_close(osv.osv_memory):
cr.execute('SELECT sum(amount_currency) as balance_in_currency FROM account_move_line ' \
'WHERE account_id = %s ' \
'AND ' + query_line + ' ' \
- 'AND currency_id = %s', (account.id, account.currency_id.id))
+ 'AND currency_id = %s', (account.id, account.currency_id.id))
balance_in_currency = cr.dictfetchone()['balance_in_currency']
company_currency_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id
diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py
index 8de1dc79bfb..436ea20a3c2 100644
--- a/addons/account/wizard/account_invoice_refund.py
+++ b/addons/account/wizard/account_invoice_refund.py
@@ -36,7 +36,7 @@ class account_invoice_refund(osv.osv_memory):
'period': fields.many2one('account.period', 'Force period'),
'journal_id': fields.many2one('account.journal', 'Refund Journal', help='You can select here the journal to use for the refund invoice that will be created. If you leave that field empty, it will use the same journal as the current invoice.'),
'description': fields.char('Description', size=128, required=True),
- 'filter_refund': fields.selection([('refund', 'Refund'), ('cancel', 'Cancel'),('modify', 'Modify')], "Refund Type", required=True, help='Refund invoice base on this type. You can not Modify and Cancel if the invoice is already reconciled'),
+ 'filter_refund': fields.selection([('refund', 'Create a draft Refund'), ('cancel', 'Cancel: refund invoice and reconcile'),('modify', 'Modify: refund invoice, reconcile and create a new draft invoice')], "Refund Method", required=True, help='Refund invoice base on this type. You can not Modify and Cancel if the invoice is already reconciled'),
}
def _get_journal(self, cr, uid, context=None):
diff --git a/addons/account_accountant/i18n/da.po b/addons/account_accountant/i18n/da.po
index 43a16e89f86..5b199bb2909 100644
--- a/addons/account_accountant/i18n/da.po
+++ b/addons/account_accountant/i18n/da.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2010-11-17 08:53+0000\n"
-"Last-Translator: Martin Pihl \n"
+"PO-Revision-Date: 2011-11-08 10:35+0000\n"
+"Last-Translator: OpenERP Danmark / Mikhael Saxtorph \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:52+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: account_accountant
#: model:ir.module.module,description:account_accountant.module_meta_information
@@ -27,8 +27,8 @@ msgid ""
" "
msgstr ""
"\n"
-"Dette modul giver administrator brugeren adgang til alle de regnskabsmæssige "
-"funktioner som bogføringsjournaler og kontoplaner.\n"
+"Dette modul giver brugeren admin adgang til alle regnskabsfunktioner som "
+"bogføringsjournaler og kontoplaner.\n"
" "
#. module: account_accountant
diff --git a/addons/account_analytic_analysis/__init__.py b/addons/account_analytic_analysis/__init__.py
index a7bdb11ad67..429aa011f31 100644
--- a/addons/account_analytic_analysis/__init__.py
+++ b/addons/account_analytic_analysis/__init__.py
@@ -20,6 +20,7 @@
##############################################################################
import account_analytic_analysis
+import cron_account_analytic_account
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_analytic_analysis/__openerp__.py b/addons/account_analytic_analysis/__openerp__.py
index f75fe3d1615..32642caf49c 100644
--- a/addons/account_analytic_analysis/__openerp__.py
+++ b/addons/account_analytic_analysis/__openerp__.py
@@ -21,9 +21,9 @@
{
- 'name' : 'Analytic Account View',
+ 'name' : 'Sales Contract Management',
'version' : '1.1',
- 'category' : 'Hidden',
+ 'category' : 'Sales Management',
'complexity': "normal",
'description': """
This module is for modifying account analytic view to show important data to project manager of services companies.
@@ -42,6 +42,7 @@ user-wise as well as month wise.
"security/ir.model.access.csv",
"account_analytic_analysis_view.xml",
"account_analytic_analysis_menu.xml",
+ "account_analytic_analysis_cron.xml",
],
'demo_xml' : [],
'installable': True,
diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py
index 22eb9401ad7..8ebb75244a1 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis.py
+++ b/addons/account_analytic_analysis/account_analytic_analysis.py
@@ -374,7 +374,28 @@ class account_analytic_account(osv.osv):
res[id] = round(res.get(id, 0.0),2)
return res
- _columns ={
+ def _is_overdue_quantity(self, cr, uid, ids, fieldnames, args, context=None):
+ result = dict.fromkeys(ids, 0)
+
+ for record in self.browse(cr, uid, ids, context=context):
+ if record.quantity == 0.0 and record.quantity_max == 0.0:
+ result[record.id] = 0
+ else:
+ result[record.id] = int(record.quantity >= record.quantity_max)
+
+ return result
+
+ def _get_analytic_account(self, cr, uid, ids, context=None):
+ result = set()
+ for line in self.pool.get('account.analytic.line').browse(cr, uid, ids, context=context):
+ result.add(line.account_id.id)
+ return list(result)
+
+ _columns = {
+ 'is_overdue_quantity' : fields.function(_is_overdue_quantity, method=True, type='boolean', string='Overdue Quantity',
+ store={
+ 'account.analytic.line' : (_get_analytic_account, None, 20),
+ }),
'ca_invoiced': fields.function(_ca_invoiced_calc, type='float', string='Invoiced Amount',
help="Total customer invoiced amount for this account.",
digits_compute=dp.get_precision('Account')),
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_cron.xml b/addons/account_analytic_analysis/account_analytic_analysis_cron.xml
new file mode 100644
index 00000000000..8564b1606eb
--- /dev/null
+++ b/addons/account_analytic_analysis/account_analytic_analysis_cron.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ Analytic Account Report for Sales
+ 1
+ weeks
+ -1
+
+
+
+
+
+
+
diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
index bfb7a892668..34840814154 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml
@@ -20,6 +20,67 @@
tree,form,graph[('date','<=',time.strftime('%Y-%m-%d')),('state','=','open')]
-
+
+
+
+ account.analytic.account.search
+ account.analytic.account
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Overdue Accounts
+ account.analytic.account
+ form
+ tree,form,graph
+ {'search_default_has_partner':1, 'search_default_my_accounts':1, 'search_default_draft':1, 'search_default_pending':1, 'search_default_open':1, 'search_default_renew':1}
+ [('type','=','normal')]
+
+ You will find here the contracts to be renewed because the deadline is passed or the working hours are higher than the allocated hours. OpenERP automatically sets these analytic accounts to the pending state, in order to raise a warning during the timesheets recording. Salesmen should review all pending accounts and reopen or close the according to the negotiation with the customer.
+
+
+
diff --git a/addons/account_analytic_analysis/cron_account_analytic_account.py b/addons/account_analytic_analysis/cron_account_analytic_account.py
new file mode 100644
index 00000000000..581bbfe92e1
--- /dev/null
+++ b/addons/account_analytic_analysis/cron_account_analytic_account.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+from osv import osv
+from mako.template import Template
+import time
+try:
+ import cStringIO as StringIO
+except ImportError:
+ import StringIO
+
+import tools
+
+MAKO_TEMPLATE = u"""Hello ${user.name},
+
+Here is a list of contracts that have to be renewed for two
+possible reasons:
+ - the end of contract date is passed
+ - the customer consumed more hours than expected
+
+Can you contact the customer in order to sell a new or renew its contract.
+The contract has been set with a pending state, can you update the status
+of the analytic account following this rule:
+ - Set Done: if the customer does not want to renew
+ - Set Open: if the customer purchased an extra contract
+
+Here is the list of contracts to renew:
+% for partner, accounts in partners.iteritems():
+ * ${partner.name}
+ % for account in accounts:
+ - Name: ${account.name}
+ % if account.quantity_max != 0.0:
+ - Quantity: ${account.quantity}/${account.quantity_max} hours
+ % endif
+ - Dates: ${account.date_start} to ${account.date and account.date or '???'}
+ - Contacts:
+ % for address in account.partner_id.address:
+ . ${address.name}, ${address.phone}, ${address.email}
+ % endfor
+
+ % endfor
+% endfor
+
+You can use the report in the menu: Sales > Invoicing > Overdue Accounts
+
+Regards,
+
+--
+OpenERP
+"""
+
+class analytic_account(osv.osv):
+ _inherit = 'account.analytic.account'
+
+ def cron_account_analytic_account(self, cr, uid, context=None):
+ domain = [
+ ('name', 'not ilike', 'maintenance'),
+ ('partner_id', '!=', False),
+ ('user_id', '!=', False),
+ ('user_id.user_email', '!=', False),
+ ('state', 'in', ('draft', 'open')),
+ '|', ('date', '<', time.strftime('%Y-%m-%d')), ('date', '=', False),
+ ]
+
+ account_ids = self.search(cr, uid, domain, context=context, order='name asc')
+ accounts = self.browse(cr, uid, account_ids, context=context)
+
+ users = dict()
+ for account in accounts:
+ users.setdefault(account.user_id, dict()).setdefault(account.partner_id, []).append(account)
+
+ account.write({'state' : 'pending'}, context=context)
+
+ for user, data in users.iteritems():
+ subject = '[OPENERP] Reporting: Analytic Accounts'
+ body = Template(MAKO_TEMPLATE).render_unicode(user=user, partners=data)
+ tools.email_send('noreply@openerp.com', [user.user_email, ], subject, body)
+
+ return True
+
+analytic_account()
diff --git a/addons/account_analytic_analysis/i18n/da.po b/addons/account_analytic_analysis/i18n/da.po
index 545c570647c..95f24a21b1f 100644
--- a/addons/account_analytic_analysis/i18n/da.po
+++ b/addons/account_analytic_analysis/i18n/da.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2010-11-22 07:38+0000\n"
-"Last-Translator: Martin Pihl \n"
+"PO-Revision-Date: 2011-11-08 21:41+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:20+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:57+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: account_analytic_analysis
#: help:account.analytic.account,hours_qtt_invoiced:0
@@ -134,7 +134,7 @@ msgstr "Bruger"
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_to_invoice:0
msgid "Uninvoiced Amount"
-msgstr ""
+msgstr "Ufaktureret beløb"
#. module: account_analytic_analysis
#: help:account.analytic.account,real_margin:0
diff --git a/addons/account_analytic_default/i18n/da.po b/addons/account_analytic_default/i18n/da.po
index 2cb76cfc57e..7e1a64488e0 100644
--- a/addons/account_analytic_default/i18n/da.po
+++ b/addons/account_analytic_default/i18n/da.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
-"PO-Revision-Date: 2011-04-29 12:18+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2011-11-08 22:24+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:25+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: account_analytic_default
#: model:ir.module.module,shortdesc:account_analytic_default.module_meta_information
@@ -65,7 +65,7 @@ msgstr "Plukseddel"
#. module: account_analytic_default
#: view:account.analytic.default:0
msgid "Conditions"
-msgstr ""
+msgstr "Betingelser"
#. module: account_analytic_default
#: help:account.analytic.default,company_id:0
diff --git a/addons/account_analytic_default/security/ir.model.access.csv b/addons/account_analytic_default/security/ir.model.access.csv
index 112fe2fcbf4..f92a9fd4dfa 100644
--- a/addons/account_analytic_default/security/ir.model.access.csv
+++ b/addons/account_analytic_default/security/ir.model.access.csv
@@ -2,3 +2,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_account_analytic_default,account.analytic.default,model_account_analytic_default,account.group_account_user,1,0,0,0
access_account_analytic_default_manager,account.analytic.default.manager,model_account_analytic_default,account.group_account_manager,1,1,1,1
access_account_analytic_default_invoice,account.analytic.default invoice,model_account_analytic_default,account.group_account_invoice,1,1,1,1
+access_account_analytic_default_salesman,account.analytic.default.salesman,model_account_analytic_default,base.group_sale_salesman,1,1,1,1
diff --git a/addons/account_anglo_saxon/i18n/da.po b/addons/account_anglo_saxon/i18n/da.po
new file mode 100644
index 00000000000..bf144945725
--- /dev/null
+++ b/addons/account_anglo_saxon/i18n/da.po
@@ -0,0 +1,107 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-11-09 21:36+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
+
+#. module: account_anglo_saxon
+#: view:product.category:0
+msgid " Accounting Property"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: sql_constraint:purchase.order:0
+msgid "Order Reference must be unique !"
+msgstr "Ordre reference skal være unik !"
+
+#. module: account_anglo_saxon
+#: constraint:product.category:0
+msgid "Error ! You can not create recursive categories."
+msgstr "Fejl ! Du kan ikke oprette rekusive katagorier."
+
+#. module: account_anglo_saxon
+#: constraint:product.template:0
+msgid ""
+"Error: The default UOM and the purchase UOM must be in the same category."
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_account_invoice_line
+msgid "Invoice Line"
+msgstr "Fakturalinie"
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_purchase_order
+msgid "Purchase Order"
+msgstr "Indkøbsordre"
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_product_category
+msgid "Product Category"
+msgstr "Produkt katagori"
+
+#. module: account_anglo_saxon
+#: model:ir.module.module,shortdesc:account_anglo_saxon.module_meta_information
+msgid "Stock Accounting for Anglo Saxon countries"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: field:product.category,property_account_creditor_price_difference_categ:0
+#: field:product.template,property_account_creditor_price_difference:0
+msgid "Price Difference Account"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_account_invoice
+msgid "Invoice"
+msgstr "Faktura"
+
+#. module: account_anglo_saxon
+#: model:ir.model,name:account_anglo_saxon.model_stock_picking
+msgid "Picking List"
+msgstr "Plukliste"
+
+#. module: account_anglo_saxon
+#: model:ir.module.module,description:account_anglo_saxon.module_meta_information
+msgid ""
+"This module will support the Anglo-Saxons accounting methodology by\n"
+" changing the accounting logic with stock transactions. The difference "
+"between the Anglo-Saxon accounting countries\n"
+" and the Rhine or also called Continental accounting countries is the "
+"moment of taking the Cost of Goods Sold versus Cost of Sales.\n"
+" Anglo-Saxons accounting does take the cost when sales invoice is "
+"created, Continental accounting will take the cost at the moment the goods "
+"are shipped.\n"
+" This module will add this functionality by using a interim account, to "
+"store the value of shipped goods and will contra book this interim account\n"
+" when the invoice is created to transfer this amount to the debtor or "
+"creditor account.\n"
+" Secondly, price differences between actual purchase price and fixed "
+"product standard price are booked on a separate account"
+msgstr ""
+
+#. module: account_anglo_saxon
+#: help:product.category,property_account_creditor_price_difference_categ:0
+#: help:product.template,property_account_creditor_price_difference:0
+msgid ""
+"This account will be used to value price difference between purchase price "
+"and cost price."
+msgstr ""
diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py
index bacd29f1607..832ac75ba46 100644
--- a/addons/account_asset/account_asset.py
+++ b/addons/account_asset/account_asset.py
@@ -143,8 +143,12 @@ class account_asset_asset(osv.osv):
depreciation_lin_obj.unlink(cr, uid, old_depreciation_line_ids, context=context)
amount_to_depr = residual_amount = asset.value_residual
-
- depreciation_date = datetime.strptime(self._get_last_depreciation_date(cr, uid, [asset.id], context)[asset.id], '%Y-%m-%d')
+ if asset.prorata:
+ depreciation_date = datetime.strptime(self._get_last_depreciation_date(cr, uid, [asset.id], context)[asset.id], '%Y-%m-%d')
+ else:
+ # depreciation_date = 1st January of purchase year
+ purchase_date = datetime.strptime(asset.purchase_date, '%Y-%m-%d')
+ depreciation_date = datetime(purchase_date.year, 1, 1)
day = depreciation_date.day
month = depreciation_date.month
year = depreciation_date.year
diff --git a/addons/account_asset/account_asset_demo.xml b/addons/account_asset/account_asset_demo.xml
index 004526b1022..77185081848 100644
--- a/addons/account_asset/account_asset_demo.xml
+++ b/addons/account_asset/account_asset_demo.xml
@@ -4,13 +4,33 @@
-
+
- Fixed Assets
+ Hardware - 3 Years
+ 3
+
+
+
+
+
+
+
+ Cars - 5 Years
+ 5
+
+
+
+
+
+
+
+
+ Revenue Recognition Maintenance Contract - 3 Years
+ 3
+
+
diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py
index a6f5f1630f7..54dfc335a2b 100644
--- a/addons/crm/__openerp__.py
+++ b/addons/crm/__openerp__.py
@@ -55,7 +55,6 @@ Creates a dashboard for CRM that includes:
'author': 'OpenERP SA',
'website': 'http://www.openerp.com',
'depends': [
- 'base',
'base_action_rule',
'base_setup',
'process',
@@ -108,8 +107,8 @@ Creates a dashboard for CRM that includes:
'crm_installer_view.xml',
'res_partner_view.xml',
- 'board_crm_view.xml',
'board_crm_statistical_view.xml',
+ 'board_crm_view.xml',
],
'demo_xml': [
diff --git a/addons/crm/board_crm_view.xml b/addons/crm/board_crm_view.xml
index 53e0207fc5a..3eacb9e7755 100644
--- a/addons/crm/board_crm_view.xml
+++ b/addons/crm/board_crm_view.xml
@@ -117,32 +117,32 @@
@@ -155,14 +155,7 @@
menu
-
-
-
-
+
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index ac0874a6037..d12860b5ea5 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -486,8 +486,11 @@ class crm_case(crm_base):
src = case_email
dest = case.user_id.user_email or ""
body = case.description or ""
- if case.message_ids:
- body = case.message_ids[0].body_text or ""
+ for message in case.message_ids:
+ if message.email_from:
+ body = message.description
+ break
+
if not destination:
src, dest = dest, case.email_from
if body and case.user_id.signature:
diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py
index 559d257820a..3947eb58156 100644
--- a/addons/crm/crm_action_rule.py
+++ b/addons/crm/crm_action_rule.py
@@ -92,7 +92,6 @@ class base_action_rule(osv.osv):
def do_action(self, cr, uid, action, model_obj, obj, context=None):
res = super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context)
write = {}
-
if hasattr(action, 'act_section_id') and action.act_section_id:
obj.section_id = action.act_section_id
write['section_id'] = action.act_section_id.id
@@ -110,6 +109,7 @@ class base_action_rule(osv.osv):
model_obj.message_append(cr, uid, [obj], _(action.act_state))
model_obj.write(cr, uid, [obj.id], write, context)
+ super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context)
emails = []
if hasattr(obj, 'email_from') and action.act_mail_to_partner:
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index b53028c952a..0e479d33737 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -204,7 +204,6 @@ class crm_lead(crm_case, osv.osv):
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
'color': 0,
- #'stage_id': _get_stage_id,
}
def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml
index 7b2e696e181..576f258facc 100644
--- a/addons/crm/crm_lead_demo.xml
+++ b/addons/crm/crm_lead_demo.xml
@@ -270,7 +270,9 @@
-
+
+
+ BalmerInc S.A.Rue des Palais 51, bte 33Bruxelles
@@ -291,7 +293,9 @@
-
+
+
+ Lucie VonckChaussée de NamurGrand-Rosière
@@ -313,7 +317,9 @@
-
+
+
+ Université de LiègePlace du 20Août
@@ -336,7 +342,9 @@
-
+
+
+ Bank Wealthy and sons1 rue RockfellerParis
@@ -359,6 +367,7 @@
+
@@ -376,8 +385,10 @@
+
+
-
+ Dubois sprlAvenue de la Liberté 56Brussels
@@ -428,7 +439,9 @@
-
+
+
+ Axelor12 rue Albert EinsteinChamps sur Marne
@@ -473,6 +486,8 @@
+
+ Eric DuboisChaussée de Binche, 27
diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml
index 42587eea2b0..b37f1db6d55 100644
--- a/addons/crm/crm_lead_view.xml
+++ b/addons/crm/crm_lead_view.xml
@@ -284,7 +284,7 @@
+ date_start="date_action" color="user_id">
@@ -345,7 +345,7 @@
-
+
@@ -462,7 +462,7 @@
+ name="%(opportunity2phonecall_act)d" icon="terp-call-start" type="action"/>
@@ -688,8 +688,7 @@
name="pending"
domain="[('state','=','pending')]"/>
-
-
+ \n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-10-26 14:18+0000\n"
-"Last-Translator: Nicholas Christian Langkjær Ipsen "
-"\n"
+"PO-Revision-Date: 2011-11-08 21:47+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:01+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:57+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: crm
#: view:crm.lead.report:0
@@ -43,7 +42,7 @@ msgstr "Månedligt"
#. module: crm
#: view:crm.opportunity2phonecall:0
msgid "Schedule a PhoneCall"
-msgstr ""
+msgstr "Planlæg et telefon kald"
#. module: crm
#: model:ir.model,name:crm.model_crm_case_stage
diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml
index bf3917863cd..623f9a4c5e3 100644
--- a/addons/crm/report/crm_lead_report_view.xml
+++ b/addons/crm/report/crm_lead_report_view.xml
@@ -267,7 +267,6 @@
parent="base.next_id_64" action="action_report_crm_lead" sequence="3"/>
diff --git a/addons/crm/security/ir.model.access.csv b/addons/crm/security/ir.model.access.csv
index 6b0a3ac15a9..4ea07252276 100644
--- a/addons/crm/security/ir.model.access.csv
+++ b/addons/crm/security/ir.model.access.csv
@@ -43,6 +43,6 @@
"access_crm_lead_report_user","crm.lead.report user","model_crm_lead_report","base.group_sale_salesman",1,1,1,1
"access_res_partner_bank_type_crm_user","res.partner.bank.type.crm.user","base.model_res_partner_bank_type","base.group_sale_salesman",1,0,0,0
"access_res_partner_bank_type_crm_manager","res.partner.bank.type.crm.manager","base.model_res_partner_bank_type","base.group_sale_manager",1,0,0,0
-"access_crm_lead_partner_manager","crm.lead.partner.manager","model_crm_lead","base.group_partner_manager",1,1,1,1
+"access_crm_lead_partner_manager","crm.lead.partner.manager","model_crm_lead","base.group_partner_manager",1,0,0,0
"access_crm_phonecall_partner_manager","crm.phonecall.partner.manager","model_crm_phonecall","base.group_partner_manager",1,1,1,1
"access_crm_meeting_partner_manager","crm.meeting.partner.manager","model_crm_meeting","base.group_partner_manager",1,1,1,1
diff --git a/addons/crm/wizard/crm_lead_to_partner.py b/addons/crm/wizard/crm_lead_to_partner.py
index 88ccacffef5..861472949e2 100644
--- a/addons/crm/wizard/crm_lead_to_partner.py
+++ b/addons/crm/wizard/crm_lead_to_partner.py
@@ -78,21 +78,16 @@ class crm_lead2partner(osv.osv_memory):
email = re.findall(r'([^ ,<@]+@[^> ,]+)', lead.email_from or '')
email = map(lambda x: "'" + x + "'", email)
if email:
- cr.execute("""select id from res_partner_address
+ cr.execute("""select partner_id from res_partner_address
where
substring(email from '([^ ,<@]+@[^> ,]+)') in (%s)""" % (','.join(email)))
- address_ids = map(lambda x: x[0], cr.fetchall())
- if address_ids:
- partner_ids = partner_obj.search(cr, uid, [('address', 'in', address_ids)], context=context)
-
+ partner_ids = map(lambda x: x[0], cr.fetchall())
+
# Find partner name that matches the name of the lead
if not partner_ids and lead.partner_name:
- partner_ids = partner_obj.search(cr, uid, [('name', '=', lead.partner_name)], context=context)
-
- partner_id = partner_ids and partner_ids[0] or False
-
-
+ partner_ids = partner_obj.search(cr, uid, [('name', '=ilike', lead.partner_name)], context=context)
+ partner_id = partner_ids and partner_ids[0] or False
if 'partner_id' in fields:
res.update({'partner_id': partner_id})
if 'action' in fields:
diff --git a/addons/crm/wizard/crm_opportunity_to_phonecall.py b/addons/crm/wizard/crm_opportunity_to_phonecall.py
index 714376766f6..b0bfbf3b817 100644
--- a/addons/crm/wizard/crm_opportunity_to_phonecall.py
+++ b/addons/crm/wizard/crm_opportunity_to_phonecall.py
@@ -35,13 +35,16 @@ class crm_opportunity2phonecall(osv.osv_memory):
_columns = {
'name' : fields.char('Call summary', size=64, required=True, select=1),
'user_id' : fields.many2one('res.users', "Assign To"),
+ 'contact_name':fields.char('Contact', size=64),
+ 'phone':fields.char('Phone', size=64),
'partner_id' : fields.many2one('res.partner', "Partner"),
'date': fields.datetime('Date'),
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
'categ_id': fields.many2one('crm.case.categ', 'Category', \
domain="['|',('section_id','=',False),('section_id','=',section_id),\
('object_id.model', '=', 'crm.phonecall')]"),
- 'action': fields.selection([('schedule','Schedule a call'), ('log','Log a call')], 'Action', required=True),
+ 'action': fields.selection([('schedule','Schedule a call'), ('log','Log a call')], 'Action', required=True),
+ 'note':fields.text('Note'),
}
def default_get(self, cr, uid, fields, context=None):
@@ -64,7 +67,7 @@ class crm_opportunity2phonecall(osv.osv_memory):
record_ids = context and context.get('active_ids', []) or []
res = super(crm_opportunity2phonecall, self).default_get(cr, uid, fields, context=context)
- res.update({'action': 'schedule', 'date': time.strftime('%Y-%m-%d %H:%M:%S')})
+ res.update({'action': 'log', 'date': time.strftime('%Y-%m-%d %H:%M:%S')})
for opp in opp_obj.browse(cr, uid, record_ids, context=context):
if 'name' in fields:
res.update({'name': opp.name})
@@ -76,6 +79,12 @@ class crm_opportunity2phonecall(osv.osv_memory):
res.update({'categ_id': categ_id})
if 'partner_id' in fields:
res.update({'partner_id': opp.partner_id and opp.partner_id.id or False})
+ if 'note' in fields:
+ res.update({'note': opp.description})
+ if 'contact_name' in fields:
+ res.update({'contact_name': opp.partner_address_id and opp.partner_address_id.name or False})
+ if 'phone' in fields:
+ res.update({'phone': opp.phone or (opp.partner_address_id and opp.partner_address_id.phone or False)})
return res
def action_cancel(self, cr, uid, ids, context=None):
@@ -142,6 +151,7 @@ class crm_opportunity2phonecall(osv.osv_memory):
if this.action == 'log':
phonecall_obj.case_close(cr, uid, [new_case])
+ return {'type': 'ir.actions.act_window_close'}
value = {
'name': _('Phone Call'),
diff --git a/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml b/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml
index 764648a877b..980b93500d2 100644
--- a/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml
+++ b/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml
@@ -16,10 +16,19 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/crm_caldav/i18n/da.po b/addons/crm_caldav/i18n/da.po
index d79cc099c5c..2d68bcce53e 100644
--- a/addons/crm_caldav/i18n/da.po
+++ b/addons/crm_caldav/i18n/da.po
@@ -8,14 +8,14 @@ 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: 2010-11-22 07:37+0000\n"
-"Last-Translator: Martin Pihl \n"
+"PO-Revision-Date: 2011-11-08 21:45+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:53+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: crm_caldav
#: model:ir.actions.act_window,name:crm_caldav.action_caldav_browse
@@ -43,4 +43,4 @@ msgstr ""
#. module: crm_caldav
#: model:ir.ui.menu,name:crm_caldav.menu_caldav_browse
msgid "Synchronyze this calendar"
-msgstr ""
+msgstr "Synkronisere denne kalender"
diff --git a/addons/decimal_precision/i18n/da.po b/addons/decimal_precision/i18n/da.po
new file mode 100644
index 00000000000..28871b4c50d
--- /dev/null
+++ b/addons/decimal_precision/i18n/da.po
@@ -0,0 +1,69 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+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-11-08 11:35+0000\n"
+"Last-Translator: OpenERP Danmark / Mikhael Saxtorph \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
+
+#. module: decimal_precision
+#: field:decimal.precision,digits:0
+msgid "Digits"
+msgstr "Cifre"
+
+#. module: decimal_precision
+#: view:decimal.precision:0
+msgid "Decimal Precision"
+msgstr "Betydende decimaler"
+
+#. module: decimal_precision
+#: model:ir.actions.act_window,name:decimal_precision.action_decimal_precision_form
+#: model:ir.ui.menu,name:decimal_precision.menu_decimal_precision_form
+msgid "Decimal Accuracy Definitions"
+msgstr "Definition af betydende decimaler"
+
+#. module: decimal_precision
+#: model:ir.module.module,description:decimal_precision.module_meta_information
+msgid ""
+"\n"
+"This module allows to configure the price accuracy you need for different "
+"kind\n"
+"of usage: accounting, sales, purchases, ...\n"
+"\n"
+"The decimal precision is configured per company.\n"
+msgstr ""
+"\n"
+"Dette modul giver dig mulighed indstille prisnøjagtigheden til forskellig "
+"brug:\n"
+"Bogføring, salg, indkøb osv.\n"
+
+#. module: decimal_precision
+#: field:decimal.precision,name:0
+msgid "Usage"
+msgstr "Anvendelse"
+
+#. module: decimal_precision
+#: sql_constraint:decimal.precision:0
+msgid "Only one value can be defined for each given usage!"
+msgstr "Kun een værdi kan defineres for hver anvendelse!"
+
+#. module: decimal_precision
+#: model:ir.module.module,shortdesc:decimal_precision.module_meta_information
+msgid "Decimal Precision Configuration"
+msgstr "Opsætning af betydende decimaler"
+
+#. module: decimal_precision
+#: model:ir.model,name:decimal_precision.model_decimal_precision
+msgid "decimal.precision"
+msgstr "decimal.precision"
diff --git a/addons/delivery/i18n/da.po b/addons/delivery/i18n/da.po
index 7e4992e9a97..5c121017845 100644
--- a/addons/delivery/i18n/da.po
+++ b/addons/delivery/i18n/da.po
@@ -8,14 +8,14 @@ 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-09-18 16:52+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2011-11-08 22:36+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 04:55+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:57+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: delivery
#: report:sale.shipping:0
@@ -25,7 +25,7 @@ msgstr ""
#. module: delivery
#: model:product.template,name:delivery.delivery_product_product_template
msgid "Delivery by Poste"
-msgstr ""
+msgstr "Levering med post"
#. module: delivery
#: view:delivery.grid:0
diff --git a/addons/document_webdav/i18n/da.po b/addons/document_webdav/i18n/da.po
index db4315d50b2..c45213396d2 100644
--- a/addons/document_webdav/i18n/da.po
+++ b/addons/document_webdav/i18n/da.po
@@ -8,14 +8,14 @@ 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: 2010-10-13 07:44+0000\n"
-"Last-Translator: Martin Pihl \n"
+"PO-Revision-Date: 2011-11-08 21:52+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:41+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: document_webdav
#: field:document.webdav.dir.property,create_date:0
@@ -56,7 +56,7 @@ msgstr ""
#: view:document.webdav.dir.property:0
#: view:document.webdav.file.property:0
msgid "Group By..."
-msgstr ""
+msgstr "Gruppér efter..."
#. module: document_webdav
#: view:document.directory:0
diff --git a/addons/event/i18n/da.po b/addons/event/i18n/da.po
index 12421bacfd9..9db53ff2a77 100644
--- a/addons/event/i18n/da.po
+++ b/addons/event/i18n/da.po
@@ -8,14 +8,14 @@ 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-09-23 14:35+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2011-11-09 21:21+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 04:58+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:57+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: event
#: view:event.event:0
@@ -42,7 +42,7 @@ msgstr "Hovedtaler"
#: view:event.registration:0
#: view:report.event.registration:0
msgid "Group By..."
-msgstr ""
+msgstr "Gruppér efter..."
#. module: event
#: field:event.event,register_min:0
@@ -57,7 +57,7 @@ msgstr ""
#. module: event
#: field:event.registration.badge,title:0
msgid "Title"
-msgstr ""
+msgstr "Titel"
#. module: event
#: field:event.event,mail_registr:0
@@ -83,7 +83,7 @@ msgstr ""
#. module: event
#: view:partner.event.registration:0
msgid "_Close"
-msgstr ""
+msgstr "_Luk"
#. module: event
#: model:event.event,name:event.event_0
diff --git a/addons/event/i18n/ru.po b/addons/event/i18n/ru.po
index 04789b02e47..77f37159701 100644
--- a/addons/event/i18n/ru.po
+++ b/addons/event/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:15+0000\n"
-"PO-Revision-Date: 2011-08-02 10:44+0000\n"
+"PO-Revision-Date: 2011-11-07 22:33+0000\n"
"Last-Translator: Stanislav Hanzhin \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: 2011-11-05 04:58+0000\n"
+"X-Launchpad-Export-Date: 2011-11-08 05:40+0000\n"
"X-Generator: Launchpad (build 14231)\n"
#. module: event
@@ -689,8 +689,9 @@ msgid ""
"outbound emails for this record before being sent. Separate multiple email "
"addresses with a comma"
msgstr ""
-"Эти эл. адреса будут добавлены в поле \"Копия\" всей входящей и исходящей "
-"почты для этой записи. Разделяйте эл. адреса запятыми."
+"Эти электронные адреса будут добавлены в поле \"Копия\" всех входящих и "
+"исходящих сообщений для этой записи перед отправкой. Разделяйте адреса "
+"запятыми."
#. module: event
#: constraint:res.partner:0
diff --git a/addons/fetchmail_crm/installer.xml b/addons/fetchmail_crm/installer.xml
index def954eb286..5223367eb29 100644
--- a/addons/fetchmail_crm/installer.xml
+++ b/addons/fetchmail_crm/installer.xml
@@ -6,8 +6,9 @@
ir.actions.act_windowfetchmail.serverform
- form
- {'default_name' : "Email Account For Leads", 'fetchmail_model' : 'crm.lead'}
+ tree,form
+
+ You can connect your email account with leads in OpenERP. A new email sent to this account (example: info@mycompany.com) will automatically create a lead in OpenERP. The whole communication with the salesman will be attached to the lead automatically.
diff --git a/addons/fetchmail_crm_claim/installer.xml b/addons/fetchmail_crm_claim/installer.xml
index 232d95f6ea2..b3652a72938 100644
--- a/addons/fetchmail_crm_claim/installer.xml
+++ b/addons/fetchmail_crm_claim/installer.xml
@@ -6,8 +6,9 @@
ir.actions.act_windowfetchmail.serverform
- form
- {'default_name' : "Email Account For Claims", 'fetchmail_model' : 'crm.claim'}
+ tree,form
+
+ You can connect your email account with claims in OpenERP. A new email sent to this account (example: support@mycompany.com) will automatically create a claim for the followup in OpenERP. The whole communication by email will be attached to the claim automatically to keep track of the history.
diff --git a/addons/fetchmail_hr_recruitment/installer.xml b/addons/fetchmail_hr_recruitment/installer.xml
index f9dc497f357..ae2eb3de3ee 100644
--- a/addons/fetchmail_hr_recruitment/installer.xml
+++ b/addons/fetchmail_hr_recruitment/installer.xml
@@ -6,8 +6,9 @@
ir.actions.act_windowfetchmail.serverform
- form
- {'default_name' : "Email Account For Applicant", 'fetchmail_model' : 'hr.applicant'}
+ tree,form
+
+ You can synchronize the job email account (e.g. job@yourcompany.com) with OpenERP so that new applicants are created automatically in OpenERP for the followup of the recruitment process. Attachments are automatically stored in the DMS of OpenERP so that you get an indexation of all the CVs received.
diff --git a/addons/fetchmail_project_issue/installer.xml b/addons/fetchmail_project_issue/installer.xml
index 300ffdc22d1..75554b2de29 100644
--- a/addons/fetchmail_project_issue/installer.xml
+++ b/addons/fetchmail_project_issue/installer.xml
@@ -6,8 +6,9 @@
ir.actions.act_windowfetchmail.serverform
- form
- {'default_name' : "Email Account For Issue", 'fetchmail_model' : 'project.issue'}
+ tree,form
+
+ You can connect your email account with issues in OpenERP. A new email sent to this account (example: support@mycompany.com) will automatically create an issue. The whole communication will be attached to the issue automatically.
diff --git a/addons/google_map/i18n/da.po b/addons/google_map/i18n/da.po
index c55729d97fd..391cd357fa5 100644
--- a/addons/google_map/i18n/da.po
+++ b/addons/google_map/i18n/da.po
@@ -8,14 +8,14 @@ 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: 2010-11-20 07:53+0000\n"
-"Last-Translator: Martin Pihl \n"
+"PO-Revision-Date: 2011-11-08 21:48+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 04:49+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:57+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: google_map
#: view:res.partner:0
@@ -48,7 +48,7 @@ msgstr ""
#. module: google_map
#: model:ir.module.module,shortdesc:google_map.module_meta_information
msgid "Google Map"
-msgstr "Google Kort"
+msgstr "Google kort"
#. module: google_map
#: model:ir.model,name:google_map.model_res_partner_address
diff --git a/addons/hr/hr.py b/addons/hr/hr.py
index 7a704de78d0..f641a425e18 100644
--- a/addons/hr/hr.py
+++ b/addons/hr/hr.py
@@ -47,7 +47,8 @@ class hr_employee_category(osv.osv):
'name': fields.char("Category", size=64, required=True),
'complete_name': fields.function(_name_get_fnc, type="char", string='Name'),
'parent_id': fields.many2one('hr.employee.category', 'Parent Category', select=True),
- 'child_ids': fields.one2many('hr.employee.category', 'parent_id', 'Child Categories')
+ 'child_ids': fields.one2many('hr.employee.category', 'parent_id', 'Child Categories'),
+ 'employee_ids': fields.many2many('hr.employee', 'employee_category_rel', 'category_id', 'emp_id', 'Employees'),
}
def _check_recursion(self, cr, uid, ids, context=None):
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index a59269bd3ff..84d0b6192eb 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -247,9 +247,12 @@
-
-
-
+
+
+
+
+
+
@@ -287,6 +290,8 @@
diff --git a/addons/hr/test/test_hr.yml b/addons/hr/test/test_hr.yml
index 0ddcd7687d3..7b4ba82b243 100644
--- a/addons/hr/test/test_hr.yml
+++ b/addons/hr/test/test_hr.yml
@@ -1,13 +1,13 @@
-
- In order to test hr module in OpenERP, I will create new Employee , Department and Job Position.
+ In order to test hr module in OpenERP, I will create new Employee, Department and Job Position.
-
- I create "R&D Department" in Department form.
+ I create "R&D Department" in Department form.
-
!record {model: hr.department, id: hr_department_rd0}:
manager_id: base.user_root
name: 'R & D'
-
- Now, I create a new employee “Mark Johnson”, and select department as "R&D Department".
+ Now, I create a new employee “Mark Johnson”, and select department as “R&D Department”.
-
!record {model: hr.employee, id: hr_employee_mark}:
address_home_id: base.res_partner_address_1
@@ -15,10 +15,40 @@
gender: male
marital: 'single'
name: Mark Johnson
- user_id: base.user_root
- department_id: 'hr_department_rd0'
-
- In order to check the wizard “Employee Hierarchy” , I will create new employee “Phil Graves ” and select "Mark Johnson" as
+ I change the company of the employee.
+-
+ !python {model: hr.employee}: |
+ res = self.onchange_company(cr, uid, [ref('hr_employee_mark')], ref('base.main_company'), None)
+ values = dict([('company_id', ref('base.main_company'))] + res['value'].items())
+ self.write(cr, uid, [ref('hr_employee_mark')], values, None)
+-
+ I assign department for employee “Mark Johnson”.
+-
+ !python {model: hr.employee}: |
+ res = self.onchange_department_id(cr, uid, [ref('hr_employee_mark')], ref('hr_department_rd0'), None)
+ assert res['value']['parent_id']
+ values = dict([('department_id', ref('hr_department_rd0'))] + res['value'].items())
+ self.write(cr, uid, [ref('hr_employee_mark')], values, None)
+-
+ Now I create a user for employee “Mark Johnson”.
+-
+ !record {model: res.users, id: hr_users_markjohnson0}:
+ context_lang: en_US
+ groups_id:
+ - base.group_user
+ login: markjohnson
+ name: Mark Johnson
+ password: markjohnson
+-
+ I assign user to employee “Mark Johnson”.
+-
+ !python {model: hr.employee}: |
+ res = self.onchange_user(cr, uid, [ref('hr_employee_mark')], ref('hr_users_markjohnson0'), None)
+ values = dict([('user_id', ref('hr_users_markjohnson0'))] + res['value'].items())
+ self.write(cr, uid, [ref('hr_employee_mark')], values, None)
+-
+ In order to check the wizard “Employee Hierarchy” , I will create new employee “Phil Graves” and select “Mark Johnson” as
Manager.
-
!record {model: hr.employee, id: hr_employee_phil}:
@@ -28,12 +58,20 @@
name: Phil Graves
user_id: base.user_demo
parent_id: 'hr_employee_mark'
+-
+ I fill the Working address for Employee.
+-
+ !python {model: hr.employee}: |
+ res = self.onchange_address_id(cr, uid, ref('hr_employee_phil'), ref('base.res_partner_address_3000'), None)
+ assert res['value']
+ values = dict([('address_id', ref('base.res_partner_address_3000'))] + res['value'].items())
+ self.write(cr, uid, [ref('hr_employee_phil')], values, None)
-
I will open up form view of “Mark Johnson” and test the wizard “Employee Hierarchy” so it display the employee
hierarchy starting from “Mark Johnson”.
-
- I will create new Job Position. I will check successfull creation of new Job Position by adding the information.
+ I will create new Job Position. I will check successful creation of new Job Position by adding the information.
-
!record {model: hr.job, id: hr_job_jea0}:
department_id: 'hr_department_rd0'
@@ -45,7 +83,6 @@
-
!assert {model: hr.job, id: hr_job_jea0}:
- state == 'open'
-
-
I create Employee for job position.
-
@@ -61,3 +98,43 @@
-
!assert {model: hr.job, id: hr_job_jea0}:
- no_of_employee != False
+-
+ As more requirements on the said job position are come, I increase the number of expected employees.
+-
+ !python {model: hr.job}: |
+ res = self.on_change_expected_employee(cr, uid, [ref('hr_job_jea0')], 6, 3, None)
+ assert res['value']['expected_employees']
+ values = dict([('expected_employees', ref('hr_job_jea0'))] + res['value'].items())
+ self.write(cr, uid, [ref('hr_job_jea0')], values, None)
+-
+ I open the job position for recruitment.
+-
+ !python {model: hr.job}: |
+ self.job_recruitement(cr, uid, [ref('hr_job_jea0')])
+-
+ I assign the job position to employee and mark the position.
+-
+ !python {model: hr.job}: |
+ self.job_open(cr, uid, [ref('hr_job_jea0')])
+-
+ Now the process is over so I don't want to use this position. I mark it as Old.
+-
+ !python {model: hr.job}: |
+ self.job_old(cr, uid, [ref('hr_job_jea0')])
+-
+ I create a parent category for the new recruited employees who are Freshers.
+-
+ !record {model: hr.employee.category, id: hr_employee_category_fresher0}:
+ name: Fresher
+-
+ I create another category for Junior Level freshers.
+-
+ !record {model: hr.employee.category, id: hr_employee_category_juniorlevel0}:
+ name: Junior Level
+ parent_id: hr_employee_category_fresher0
+-
+ I open the tree view of Categories and see the categories in a hierarchical manner.
+-
+ !python {model: hr.employee.category}: |
+ res = self.name_get(cr, uid, [ref('hr_employee_category_juniorlevel0')], None)
+ assert res
diff --git a/addons/hr_contract/hr_contract_view.xml b/addons/hr_contract/hr_contract_view.xml
index 485b0566120..5a4f84a9692 100644
--- a/addons/hr_contract/hr_contract_view.xml
+++ b/addons/hr_contract/hr_contract_view.xml
@@ -74,7 +74,7 @@
-
+
diff --git a/addons/hr_evaluation/test/test_hr_evaluation.yml b/addons/hr_evaluation/test/test_hr_evaluation.yml
index a1c2f92ad1d..893f19d0a3e 100644
--- a/addons/hr_evaluation/test/test_hr_evaluation.yml
+++ b/addons/hr_evaluation/test/test_hr_evaluation.yml
@@ -96,7 +96,13 @@
name: Final Interview with manager
sequence: 2
survey_id: 'survey_0'
-
+-
+ I assign the evaluation plan to the employee "Mark Johnson".
+-
+ !python {model: hr.employee}: |
+ res = self.onchange_evaluation_plan_id(cr, uid, [ref('hr_employee_employee0')], ref('hr_evaluation_plan_managersplan0'), False, None)
+ values = dict([('evaluation_plan_id', ref('hr_evaluation_plan_managersplan0'))] + res['value'].items())
+ self.write(cr, uid, [ref('hr_employee_employee0')], values, None)
-
I create an Evaluation for employee under "Manager Evaluation Plan".
-
@@ -106,18 +112,37 @@
plan_id: 'hr_evaluation_plan_managersplan0'
progress: 0.0
state: draft
+-
+ I change the employee on Evaluation.
+-
+ !python {model: hr_evaluation.evaluation}: |
+ res = self.onchange_employee_id(cr, uid, [ref('hr_evaluation_evaluation_0')], ref('hr_employee_employee0'), None)
+ values = dict([('employee_id', ref('hr_employee_employee0'))] + res['value'].items())
+ self.write(cr, uid, [ref('hr_evaluation_evaluation_0')], values, None)
-
I start the evaluation process by click on "Start Evaluation" button.
-
!python {model: hr_evaluation.evaluation}: |
self.button_plan_in_progress(cr, uid, [ref('hr_evaluation_evaluation_0')])
-
+-
+ I find a mistake on evaluation form. So I cancel the evaluation and again start it.
+-
+ !python {model: hr_evaluation.evaluation}: |
+ self.button_cancel(cr, uid, [ref('hr_evaluation_evaluation_0')])
+ self.button_draft(cr, uid, [ref('hr_evaluation_evaluation_0')])
+ self.button_plan_in_progress(cr, uid, [ref('hr_evaluation_evaluation_0')])
-
I close this survey request by giving answer of survey question.
-
!python {model: hr_evaluation.evaluation}: |
evaluation = self.browse(cr, uid, ref('hr_evaluation_evaluation_0'))
self.pool.get('hr.evaluation.interview').survey_req_done(cr, uid, [r.id for r in evaluation.survey_request_ids])
+-
+ I print the survey.
+-
+ !python {model: hr_evaluation.evaluation}: |
+ evaluation = self.browse(cr, uid, ref('hr_evaluation_evaluation_0'))
+ self.pool.get('hr.evaluation.interview').action_print_survey(cr, uid, [r.id for r in evaluation.survey_request_ids])
-
I click on "Final Validation" button to finalise evaluation.
-
diff --git a/addons/hr_expense/test/test_hr_expense.yml b/addons/hr_expense/test/test_hr_expense.yml
index fa237878023..bd13529d645 100644
--- a/addons/hr_expense/test/test_hr_expense.yml
+++ b/addons/hr_expense/test/test_hr_expense.yml
@@ -8,6 +8,12 @@
-
I create a new employee.
+-
+ !record {model: hr.employee, id: hr.employee}:
+ address_home_id: base.res_partner_address_1
+ address_id: base.main_address
+-
+ I assign home address to employee.
-
!record {model: hr.employee, id: hr.employee1}:
address_home_id: base.res_partner_address_1
@@ -26,7 +32,6 @@
!record {model: product.product, id: product_product_travel0}:
categ_id: product.product_category_services
cost_method: standard
- hr_expense_ok: 1
list_price: 800.0
mes_type: fixed
name: Travel
@@ -40,15 +45,17 @@
warranty: 0.0
weight: 0.0
weight_net: 0.0
-
+-
+ I mark this product for expenses.
+-
+ !python {model: product.product}: |
+ self.on_change_hr_expense_ok(cr, uid, [ref('product_product_travel0')], True)
-
I create an expense.
-
!record {model: hr.expense.expense, id: hr_expense_expense_september0}:
company_id: base.main_company
- currency_id: base.EUR
date: !eval "'%s-05-05' %(datetime.now().year)"
- employee_id: hr.employee1
name: September Expenses
line_ids:
- date_value: !eval "'%s-05-27' %(datetime.now().year)"
@@ -63,6 +70,23 @@
-
!assert {model: hr.expense.expense, id: hr_expense_expense_september0}:
- state == 'draft'
+-
+ I change the employee on expense form.
+-
+ !python {model: hr.expense.expense}: |
+ res = self.onchange_employee_id(cr, uid, [ref('hr_expense_expense_september0')], ref('hr.employee1'), None)
+ values = dict([('employee_id', ref('hr.employee1'))] + res['value'].items())
+ self.write(cr, uid, [ref('hr_expense_expense_september0')], values, None)
+-
+ Now I change the related product on expense line.
+-
+ !python {model: hr.expense.expense}: |
+ exp_line_obj = self.pool.get('hr.expense.line')
+ exp_obj = self.browse(cr, uid, ref('hr_expense_expense_september0'), None)
+ line_ids = [line.id for line in exp_obj.line_ids]
+ res = exp_line_obj.onchange_product_id(cr, uid, line_ids, ref('product_product_expense_air'), False, ref('hr.employee1'), None)
+ values = dict([('product_id', ref('product_product_expense_air'))] + res['value'].items())
+ exp_line_obj.write(cr, uid, line_ids, values, None)
-
I confirm this expenses by click on "Confirm" button.
-
@@ -81,10 +105,10 @@
-
I invoiced this expense by click on "Invoice" button.
-
- !workflow {model: hr.expense.expense, action: invoice, ref: hr_expense_expense_september0}
-
+ !python {model: hr.expense.expense}: |
+ self.invoice(cr, uid, [ref('hr_expense_expense_september0')], None)
-
- I check that state is "Invoiced"
+ I check that state is "Invoiced".
-
!assert {model: hr.expense.expense, id: hr_expense_expense_september0}:
- state == 'invoiced'
@@ -94,3 +118,4 @@
!python {model: hr.expense.expense}: |
exp = self.browse(cr, uid, [ref('hr_expense_expense_september0')])[0]
assert exp.invoice_id, "Invoice should be created"
+
diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml
index b6d6a64ed26..a43378b1c95 100644
--- a/addons/hr_holidays/hr_holidays_view.xml
+++ b/addons/hr_holidays/hr_holidays_view.xml
@@ -9,7 +9,7 @@
-
+
@@ -200,6 +200,7 @@
+
@@ -258,21 +259,21 @@
-
+ tree
-
+ form
-
+ calendar
@@ -280,6 +281,32 @@
+
+ Requests Approve
+ hr.holidays
+ form
+ {'search_default_approve':1,"search_default_department_id": department_id}
+ [('type','=','add')]
+
+
+
+
+
+
+ tree
+
+
+
+
+
+
+ form
+
+
+
+
+
+
Allocation Requestshr.holidays
@@ -427,9 +454,9 @@
-
+
-
+
hr.employee.leave.treehr.employee
@@ -440,7 +467,7 @@
-
+
Allocate Leaves for Employees
@@ -458,7 +485,7 @@
-
+
hr.employee.leave.form.inherithr.employee
diff --git a/addons/hr_holidays/hr_holidays_wizard.xml b/addons/hr_holidays/hr_holidays_wizard.xml
index 8215abf12f9..7ed381636cf 100644
--- a/addons/hr_holidays/hr_holidays_wizard.xml
+++ b/addons/hr_holidays/hr_holidays_wizard.xml
@@ -3,7 +3,7 @@
diff --git a/addons/hr_holidays/hr_holidays_workflow.xml b/addons/hr_holidays/hr_holidays_workflow.xml
index 9b0c5652bdd..7013d62a5ed 100644
--- a/addons/hr_holidays/hr_holidays_workflow.xml
+++ b/addons/hr_holidays/hr_holidays_workflow.xml
@@ -84,7 +84,7 @@
second_validate
-
+
diff --git a/addons/hr_holidays/test/test_hr_holiday.yml b/addons/hr_holidays/test/test_hr_holiday.yml
index f43b0235e46..c4a847640b6 100644
--- a/addons/hr_holidays/test/test_hr_holiday.yml
+++ b/addons/hr_holidays/test/test_hr_holiday.yml
@@ -42,18 +42,52 @@
I allocate leave request for employee "Phil Graves".
-
!record {model: hr.holidays, id: hr_holidays_allocateleaveforuser0}:
- employee_id: 'hr_employee_philgraves0'
holiday_status_id: hr_holidays_status_sick0
name: Sick Leaves for Phil Graves
number_of_days_temp: 12.0
date_from: !eval "'%s-05-20 13:59:00' %(datetime.now().year)"
date_to: !eval "'%s-05-22 13:59:00' %(datetime.now().year)"
type: add
+-
+ I assign allocation type as 'Employee'.
+-
+ !python {model: hr.holidays}: |
+ self.onchange_type(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], 'employee')
+-
+ I change Leave Type of the employee.
+-
+ !python {model: hr.holidays}: |
+ res = self.onchange_sec_id(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], ref('holiday_status_sl'))
+ values = dict([('holiday_status_id', ref('holiday_status_sl'))] + res['value'].items())
+ self.write(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], values, None)
+-
+ I assign the dates in the holiday request.
+-
+ !python {model: hr.holidays}: |
+ from datetime import datetime
+ date_from = '%s-%s-%s 14:00:00' %(datetime.now().year, datetime.now().month, datetime.now().day)
+ date_to = '%s-%s-%s 19:59:00' %(datetime.now().year, datetime.now().month, datetime.now().day)
+ res = self.onchange_date_from(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], date_to, date_from)
+ values = dict([('date_from', date_from),('date_to',date_to)] + res['value'].items())
+ self.write(cr, uid, [ref('hr_holidays_allocateleaveforuser0')], values, None)
-
I confirmed the allocation by clicking on "Confirm" button.
-
!workflow {model: hr.holidays, action: confirm, ref: hr_holidays_allocateleaveforuser0}
+-
+ I find a small mistake on my leave request to I refuse the leave request to correct a mistake.
+-
+ !workflow {model: hr.holidays, action: refuse, ref: hr_holidays_allocateleaveforuser0}
+
+-
+ I again set to draft and then confirm.
+-
+ !python {model: hr.holidays}: |
+ import netsvc
+ wf_service = netsvc.LocalService("workflow")
+ self.set_to_draft(cr, uid, [ref('hr_holidays_allocateleaveforuser0')])
+ wf_service.trg_validate(uid, 'hr.holidays', ref('hr_holidays_allocateleaveforuser0'), 'confirm', cr)
-
I validate the allocation by clicking on "To Approve" button.
-
@@ -68,7 +102,7 @@
employee_id: 'hr_employee_philgraves0'
holiday_status_id: 'hr_holidays_status_sick0'
name: Appointment with Doctor
- notes: My appointment with the doctor is confirmed. so please accept my leave.
+ notes: My appointment with the doctor is confirmed. So please accept my leave.
number_of_days_temp: 2.0
type: remove
user_id: 'test_holiday_user1'
diff --git a/addons/hr_payroll/__openerp__.py b/addons/hr_payroll/__openerp__.py
index 34e8924bea5..5c78b80f095 100644
--- a/addons/hr_payroll/__openerp__.py
+++ b/addons/hr_payroll/__openerp__.py
@@ -23,7 +23,7 @@
'name': 'Payroll',
'version': '1.0',
'category': 'Human Resources',
- 'complexity': "expert",
+ 'complexity': "normal",
'description': """
Generic Payroll system.
=======================
diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py
index b913cc0b2f1..e361482b28e 100644
--- a/addons/hr_payroll/hr_payroll.py
+++ b/addons/hr_payroll/hr_payroll.py
@@ -211,7 +211,7 @@ class one2many_mod2(fields.one2many):
class hr_payslip_run(osv.osv):
_name = 'hr.payslip.run'
- _description = 'Payslip Run'
+ _description = 'Payslip Batches'
_columns = {
'name': fields.char('Name', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}),
'slip_ids': fields.one2many('hr.payslip', 'payslip_run_id', 'Payslips', required=False, readonly=True, states={'draft': [('readonly', False)]}),
@@ -286,7 +286,7 @@ class hr_payslip(osv.osv):
'contract_id': fields.many2one('hr.contract', 'Contract', required=False, readonly=True, states={'draft': [('readonly', False)]}),
'details_by_salary_rule_category': fields.function(_get_lines_salary_rule_category, method=True, type='one2many', relation='hr.payslip.line', string='Details by Salary Rule Category'),
'credit_note': fields.boolean('Credit Note', help="Indicates this payslip has a refund of another", readonly=True, states={'draft': [('readonly', False)]}),
- 'payslip_run_id': fields.many2one('hr.payslip.run', 'Payslip Run', readonly=True, states={'draft': [('readonly', False)]}),
+ 'payslip_run_id': fields.many2one('hr.payslip.run', 'Payslip Batches', readonly=True, states={'draft': [('readonly', False)]}),
}
_defaults = {
'date_from': lambda *a: time.strftime('%Y-%m-01'),
diff --git a/addons/hr_payroll/hr_payroll_view.xml b/addons/hr_payroll/hr_payroll_view.xml
index aa97ad9503a..01fe270710d 100644
--- a/addons/hr_payroll/hr_payroll_view.xml
+++ b/addons/hr_payroll/hr_payroll_view.xml
@@ -392,7 +392,7 @@
-
+
@@ -684,9 +684,9 @@
hr.payslip.runsearch
-
-
-
+
+
+
@@ -700,7 +700,7 @@
hr.payslip.runtree
-
+
@@ -715,7 +715,7 @@
hr.payslip.runform
-
- Payslips Run
+ Payslips Batcheshr.payslip.runform
diff --git a/addons/hr_payroll/test/payslip.yml b/addons/hr_payroll/test/payslip.yml
index 089005f0b52..09af98ee0cd 100644
--- a/addons/hr_payroll/test/payslip.yml
+++ b/addons/hr_payroll/test/payslip.yml
@@ -16,7 +16,6 @@
name: Salary Structure for Software Developer
code: SD
company_id: base.main_company
- parent_id: structure_base
rule_ids:
- hr_salary_rule_houserentallowance1
- hr_salary_rule_convanceallowance1
@@ -91,4 +90,46 @@
!python {model: hr.payslip}: |
from tools.translate import _
payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
- assert(payslip_brw.state == 'done'), _('State not changed!')
\ No newline at end of file
+ assert(payslip_brw.state == 'done'), _('State not changed!')
+-
+ I want to check refund payslip so I click on refund button.
+-
+ !python {model: hr.payslip}: |
+ self.refund_sheet(cr, uid, [ref("hr_payslip_0")], None)
+-
+ I check on new payslip Credit Note is checked or not.
+-
+ !python {model: hr.payslip}: |
+ payslip_obj = self.browse(cr, uid, ref("hr_payslip_0"), None)
+ payslip_ids = self.search(cr, uid, [('name','like','Refund: '+payslip_obj.name),('credit_note','=',True)], None)
+ assert payslip_ids, "Payslip not refunded!"
+-
+ I want to generate a payslip from Payslip run.
+-
+ !record {model: hr.payslip.run, id: hr_payslip_run_PayslipforEmployee0}:
+ date_end: '2011-09-30'
+ date_start: '2011-09-01'
+ name: Payslip for Employee
+-
+ I create record for generating the payslip for this Payslip run.
+-
+ !record {model: hr.payslip.employees, id: hr_payslip_employees0}:
+ employee_ids:
+ - hr_employee_richard0
+-
+ I generate the payslip by clicking on Generat button wizard.
+-
+ !python {model: hr.payslip.employees}: |
+ self.compute_sheet(cr, uid, [ref('hr_payslip_employees0')], context={'active_id': ref('hr_payslip_run_PayslipforEmployee0')})
+-
+ I open Contribution Register and from there I print the Payslip Lines report.
+-
+ !record {model: payslip.lines.contribution.register, id: payslip_lines_contribution_register0}:
+ date_from: '2011-09-30'
+ date_to: '2011-09-01'
+-
+ I print the report.
+-
+ !python {model: payslip.lines.contribution.register}: |
+ self.print_report(cr, uid, [ref('payslip_lines_contribution_register0')], context={'active_ids': [ref('hr_houserent_register')]})
+
diff --git a/addons/hr_payroll_account/test/hr_payroll_account.yml b/addons/hr_payroll_account/test/hr_payroll_account.yml
index c399789f439..4481f53c2d1 100644
--- a/addons/hr_payroll_account/test/hr_payroll_account.yml
+++ b/addons/hr_payroll_account/test/hr_payroll_account.yml
@@ -1,7 +1,7 @@
-
- I test the "Payslip" in order to check the hr_payroll_account module in OpenERP
+ I test the "Payslip" in order to check the hr_payroll_account module in OpenERP.
-
- I create a bank record
+ I create a bank record.
-
!record {model: res.partner.bank, id: res_partner_bank_0}:
acc_number: '001-9876543-21'
@@ -9,7 +9,7 @@
state: bank
bank: base.res_bank_1
-
- I create a new employee "John"
+ I create a new employee "John".
-
!record {model: hr.employee, id: hr_employee_john}:
address_home_id: base.res_partner_address_2
@@ -24,7 +24,7 @@
bank_account_id: res_partner_bank_0
vehicle_distance: 0.0
-
- I create a salary structure for 'Software Developer'
+ I create a salary structure for 'Software Developer'.
-
!record {model: hr.payroll.structure, id: hr_payroll_structure_softwaredeveloper}:
name: Salary Structure for Software Developer
@@ -39,7 +39,7 @@
- hr_payroll.hr_salary_rule_meal_voucher
- hr_payroll.hr_salary_rule_sales_commission
-
- I create a contract for "John"
+ I create a contract for "John".
-
!record {model: hr.contract, id: hr_contract_john}:
date_end: !eval "'%s-%s-%s' %(datetime.now().year+1,datetime.now().month,datetime.now().day)"
@@ -50,14 +50,16 @@
employee_id: hr_employee_john
struct_id: hr_payroll_structure_softwaredeveloper
working_hours: resource.timesheet_group1
+ journal_id: account.expenses_journal
-
- I create a Payslip
+ I create a Payslip.
-
!record {model: hr.payslip, id: hr_payslip_0}:
employee_id: hr_employee_john
journal_id: account.expenses_journal
+
-
- The selection of an employee fills the contract, structure, worked days and input data fields
+ The selection of an employee fills the contract, structure, worked days and input data fields.
-
!python {model: hr.payslip}: |
import time
@@ -71,25 +73,27 @@
'struct_id': res['value']['struct_id'],
'contract_id': res['value']['contract_id'],
'name': res['value']['name'],
- }
+ }
vals['worked_days_line_ids'] = [(0,0,i) for i in res['value']['worked_days_line_ids']]
vals['input_line_ids'] = [(0,0,i) for i in res['value']['input_line_ids']]
+ res_contract = self.onchange_contract_id(cr, uid, [ref('hr_payslip_0')], date_from, date_to, ref('hr_employee_john'), ref('hr_contract_john'), None)
+ vals.update({'contract_id': ref('hr_contract_john')})
self.write(cr, uid, ref("hr_payslip_0"), vals)
-
- I assign the amount to Input data
+ I assign the amount to Input data.
-
!python {model: hr.payslip.input}: |
ids = self.search(cr, uid, [('payslip_id', '=', ref("hr_payslip_0"))])
self.write(cr, uid, ids, {'amount': 5.0})
-
- I verify the payslip is in draft state
+ I verify the payslip is in draft state.
-
!python {model: hr.payslip}: |
from tools.translate import _
payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
assert(payslip_brw.state == 'draft'), _('State not changed!')
-
- I click on "Compute Sheet" button
+ I click on "Compute Sheet" button.
-
!python {model: hr.payslip}: |
self.compute_sheet(cr, uid, [ref("hr_payslip_0")], {"lang": "en_US", "tz": False,
@@ -97,19 +101,28 @@
"section_id": False, "active_id": ref("hr_payroll.menu_department_tree"),
})
-
- Then I click on the "Confirm" button
+ I want to check cancel button. So I first cancel the sheet then make it set to draft.
+-
+ !python {model: hr.payslip}: |
+ import netsvc
+ wf_service = netsvc.LocalService("workflow")
+ self.cancel_sheet(cr, uid, [ref("hr_payslip_0")], None)
+ wf_service.trg_validate(uid, 'hr.payslip', ref("hr_payslip_0"), 'draft', cr)
+-
+ Then I click on the "Confirm" button.
-
!workflow {model: hr.payslip, action: hr_verify_sheet, ref: hr_payslip_0}
-
- I verify that the Accounting Entries are created
+ I verify that the Accounting Entries are created.
-
!python {model: hr.payslip}: |
payslip = self.browse(cr, uid, ref("hr_payslip_0"))
assert payslip.move_id, "Accounting Entries has not been created"
-
- I verify that the payslip is in done state
+ I verify that the payslip is in done state.
-
!python {model: hr.payslip}: |
from tools.translate import _
payslip_brw=self.browse(cr, uid, ref("hr_payslip_0"))
assert(payslip_brw.state == 'done'), _('State not changed!')
+
diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py
index e2ecf522cae..65e81091798 100644
--- a/addons/hr_recruitment/hr_recruitment.py
+++ b/addons/hr_recruitment/hr_recruitment.py
@@ -473,7 +473,7 @@ class hr_job(osv.osv):
_inherit = "hr.job"
_name = "hr.job"
_columns = {
- 'survey_id': fields.many2one('survey', 'Survey', help="Select survey for the current job"),
+ 'survey_id': fields.many2one('survey', 'Interview Form', help="Choose an interview form for this job position and you will be able to print/answer this interview from all applicants who apply for this job"),
}
hr_job()
diff --git a/addons/hr_recruitment/hr_recruitment_demo.xml b/addons/hr_recruitment/hr_recruitment_demo.xml
index b2d029f74d4..0fc2c94f034 100644
--- a/addons/hr_recruitment/hr_recruitment_demo.xml
+++ b/addons/hr_recruitment/hr_recruitment_demo.xml
@@ -151,6 +151,7 @@
+
diff --git a/addons/hr_recruitment/hr_recruitment_menu.xml b/addons/hr_recruitment/hr_recruitment_menu.xml
index 0bac3f8615a..7fe746f580b 100644
--- a/addons/hr_recruitment/hr_recruitment_menu.xml
+++ b/addons/hr_recruitment/hr_recruitment_menu.xml
@@ -8,7 +8,7 @@
hr.applicanttree,form,graph,calendar,kanban
- {"search_default_user_id":uid, 'search_default_current': 1,"search_default_department_id": department_id}
+ {'search_default_filter_inprogress':1,'search_default_filter_new':1,"search_default_department_id": department_id}From this menu you can track applicants in the recruitment process and manage all operations: meetings, interviews, phone calls, etc. If you setup the email gateway, applicants and their attached CV are created automatically when an email is sent to jobs@yourcompany.com. If you install the document management modules, all documents (CV and motivation letters) are indexed automatically, so that you can easily search through their content.
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index 6b863121369..4ccfcbe48a2 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -218,11 +218,11 @@
search
-
-
@@ -334,7 +334,7 @@
-
+
diff --git a/addons/hr_recruitment/test/test_hr_recruitment.yml b/addons/hr_recruitment/test/test_hr_recruitment.yml
index 1acbf33eb72..b797353bde2 100644
--- a/addons/hr_recruitment/test/test_hr_recruitment.yml
+++ b/addons/hr_recruitment/test/test_hr_recruitment.yml
@@ -52,7 +52,12 @@
!python {model: hr.applicant}: |
self.case_open(cr, uid, [ref("hr_applicant_fresher0")], {"active_ids": [ref("hr_recruitment.menu_crm_case_categ0_act_job")],
})
-
+-
+ I change the stages by clicking on stage next and stage previous buttons.
+-
+ !python {model: hr.applicant}: |
+ self.stage_next(cr, uid, [ref('hr_applicant_fresher0')], None)
+ self.stage_previous(cr, uid, [ref('hr_applicant_fresher0')], None)
-
I create a new case category.
-
@@ -97,14 +102,38 @@
rrule_type: none
state: open
user_id: base.user_root
-
+-
+ I print the survery filled up by the applicant.
+-
+ !python {model: hr.applicant}: |
+ self.action_print_survey(cr, uid, [ref('hr_applicant_fresher0')], None)
+-
+ I assign the position to the applicant and its relevant department.
+-
+ !python {model: hr.applicant}: |
+ res = self.onchange_job(cr, uid, [ref('hr_applicant_fresher0')], ref('hr.job_jr_developers'), None)
+ values = dict([('job_id', ref('hr.job_jr_developers'))] + res['value'].items())
+ res1 = self.onchange_department_id(cr, uid, [ref('hr_applicant_fresher0')], ref('hr.dep_it'), None)
+ values.update(dict([('department_id', ref('hr.dep_it'))] + res1['value'].items()))
+ self.write(cr, uid, [ref('hr_applicant_fresher0')], values, None)
-
On a successful meeting with the applicant, I hired employee by click on "Hired" button.
-
- !python {model: hr.applicant}: |
- self.case_close(cr, uid, [ref('hr_applicant_fresher0')])
+ !python {model: hired.employee}: |
+ self.case_close(cr, uid, [], context={'active_ids': [ref('hr_applicant_fresher0')]})
-
I check that applicant state is "Hired".
-
!assert {model: hr.applicant, id: hr_applicant_fresher0}:
- state == 'done'
+-
+ I create partner for the hired applicant for accounting purpose.
+-
+ !record {model: hr.recruitment.partner.create, id: hr_recruitment_partner_create0}:
+ close: False
+-
+ I click on Create Partner button to create a partner for applicant.
+-
+ !python {model: hr.recruitment.partner.create}: |
+ self.make_order(cr, uid, [ref('hr_recruitment_partner_create0')], context={'active_ids': [ref('hr_applicant_fresher0')]})
+
diff --git a/addons/hr_timesheet/test/test_hr_timesheet.yml b/addons/hr_timesheet/test/test_hr_timesheet.yml
index 7ce2908f24f..30c97c3eb70 100644
--- a/addons/hr_timesheet/test/test_hr_timesheet.yml
+++ b/addons/hr_timesheet/test/test_hr_timesheet.yml
@@ -37,14 +37,6 @@
parent_id: 'hr_employee_employee0'
user_id: 'test_timesheet_user1'
--
- I create Timesheet journal for employee.
--
- !record {model: account.analytic.journal, id: analytic_journal}:
- code: TS
- name: Timesheet Journal
- type: general
-
-
I create a product as "Consultancy - Senior Developer".
-
@@ -103,7 +95,26 @@
uid = ref('test_timesheet_user1')
new_id = self.create(cr, uid, {'emp_id': ref('hr_employee_fracline1'), 'name': 'Francline', 'server_date': time.strftime('%Y-%m-%d %H:%M:%S'), 'state': 'absent'})
self.sign_in_result(cr, uid, [new_id], context)
-
+-
+ I create a timesheet line manually to check several default values.
+ I also assign proper date and user for that line.
+-
+ !python {model: hr.analytic.timesheet}: |
+ import time
+ uid = ref('test_timesheet_user1')
+ current_date = time.strftime('%Y-%m-%d')
+ vals = {'name': 'Worked on project',
+ 'user_id': ref('test_timesheet_user1'),
+ 'account_id': ref('account.analytic_project_1_development'),
+ 'unit_amount': 5.00,
+ 'journal_id': ref('analytic_journal')
+ }
+ line_id = self.create(cr, uid, vals, None)
+ res = self.on_change_date(cr, uid, [line_id], current_date)
+ values = dict([('date', current_date)] + res['value'].items())
+ res1 = self.on_change_user_id(cr, uid, [line_id], ref('base.user_root'))
+ values.update(dict([('user_id', ref('base.user_root'))] + res1['value'].items()))
+ self.write(cr, uid, [line_id], values, None)
-
To stop work I click on "Sign In/Sign Out" button of "Sign In/Sign Out by Project" wizard.
Which check state in hr attendace form for user.
@@ -113,7 +124,6 @@
ids = self.search(cr, uid, [('emp_id', '=', ref('hr_employee_fracline1')),('name', '=', 'Francline')])
self.check_state(cr, uid, ids, {"active_ids": [ref("hr_timesheet.action_hr_timesheet_sign_in")]
})
-
-
I Create an analytic account "Project2".
-
@@ -136,3 +146,4 @@
- |
I can see employee timesheet for particular month using "Employee Timesheet" report.
+
diff --git a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
index cf068ac9ce9..ed50ccc5d4d 100644
--- a/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
+++ b/addons/hr_timesheet_invoice/test/test_hr_timesheet_invoice.yml
@@ -23,7 +23,17 @@
!record {model: account.analytic.account, id: account.analytic_sednacom}:
partner_id: base.res_partner_desertic_hispafuentes
pricelist_id: product.list0
-
+-
+ I open this account and make the state as pending.
+-
+ !python {model: account.analytic.account}: |
+ self.set_open(cr, uid, [ref('account.analytic_sednacom')], None)
+ self.set_pending(cr, uid, [ref('account.analytic_sednacom')], None)
+-
+ I assign account on analytic account line.
+-
+ !python {model: hr.analytic.timesheet}: |
+ self.on_change_account_id(cr, uid, [ref('account_analytic_line_developyamlforhrmodule0')], ref('account.analytic_sednacom'))
-
I create invoice on analytic Line using "Invoice analytic Line" wizard.
-
@@ -73,11 +83,15 @@
price: 1
time: 1
-
- I click on "Create Invoice" button to create Invoice.
+ I click on "Create Invoice" button to create Invoice and validate the invoice.
-
!python {model: hr.timesheet.invoice.create.final}: |
- self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_sednacom")]})
-
+ import netsvc
+ wkf_service = netsvc.LocalService("workflow")
+ res = self.do_create(cr, uid, [ref("hr_timesheet_invoice_create_final_0")], {"active_ids": [ref("account.analytic_sednacom")]})
+ invoice_ids = eval(res['domain'])[0][2]
+ for inv in invoice_ids:
+ wkf_service.trg_validate(uid, 'account.invoice', inv, 'invoice_open', cr)
-
I can also make some theoretical revenue reports.
-
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
index c1c936ccc0f..089ade7c618 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
@@ -313,7 +313,7 @@ class hr_timesheet_sheet(osv.osv):
def _default_employee(self, cr, uid, context=None):
emp_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
return emp_ids and emp_ids[0] or False
-
+
_defaults = {
'date_from' : _default_date_from,
'date_current' : lambda *a: time.strftime('%Y-%m-%d'),
@@ -329,7 +329,7 @@ class hr_timesheet_sheet(osv.osv):
if new_user_id:
cr.execute('SELECT id \
FROM hr_timesheet_sheet_sheet \
- WHERE (date_from < %s and %s < date_to) \
+ WHERE (date_from <= %s and %s <= date_to) \
AND user_id=%s \
AND id <> %s',(sheet.date_to, sheet.date_from, new_user_id, sheet.id))
if cr.fetchall():
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
index 11e1789aa41..b14c9133319 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
@@ -186,7 +186,7 @@
hr_timesheet_sheet.sheetform
- {'search_default_my_timesheet':1, }
+ {'search_default_my_timesheet':1,'group_by_no_leaf':1}Check your timesheets for a specific period. You can also encode time spent on a project (i.e. an analytic account) thus generating costs in the analytic account concerned.
diff --git a/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml b/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml
index 405c6585cf9..24ffe3bb178 100644
--- a/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml
+++ b/addons/hr_timesheet_sheet/test/test_hr_timesheet_sheet.yml
@@ -71,13 +71,30 @@
user_id: base.user_demo
employee_id: 'hr_employee_employee0'
-
- Now , at the time of login, I create Attendances and perform "Sign In" action.
+ Now, at the time of login, I create Attendances and perform "Sign In" action.
-
- !record {model: hr.attendance, id: hr_attendance_0}:
- action: sign_in
- employee_id: 'hr_employee_employee0'
- name: !eval time.strftime('%Y-%m-%d')+' '+'%s:%s:%s' %(max(0,datetime.now().hour-1),max(0,datetime.now().minute-1),max(0,datetime.now().second-1))
-
+ !python {model: hr_timesheet_sheet.sheet}:
+ self.sign_in(cr, uid, [ref('hr_timesheet_sheet_sheet_deddk0')], {})
+-
+ I want to check attendance and work of yesterday. I click on <- button.
+-
+ !python {model: hr_timesheet_sheet.sheet}: |
+ self.date_previous(cr, uid, [ref('hr_timesheet_sheet_sheet_deddk0')], None)
+-
+ Then I click on "Today" button to fill today's timesheet.
+-
+ !python {model: hr_timesheet_sheet.sheet}: |
+ self.date_today(cr, uid, [ref('hr_timesheet_sheet_sheet_deddk0')], None)
+-
+ I want to go to a particular date and see attendance then I select the date and click on "Go to:" button.
+-
+ !python {model: hr_timesheet_sheet.sheet}: |
+ self.button_dummy(cr, uid, [ref('hr_timesheet_sheet_sheet_deddk0')], None)
+-
+ I can also move to next day by clicking on -> button.
+-
+ !python {model: hr_timesheet_sheet.sheet}: |
+ self.date_next(cr, uid, [ref('hr_timesheet_sheet_sheet_deddk0')], None)
-
At the time of logout, I create attendance and perform "Sign Out".
-
@@ -88,7 +105,6 @@
-
I create Timesheet Entry for time spend on today work.
-
-
!record {model: hr_timesheet_sheet.sheet, id: hr_timesheet_sheet_sheet_deddk0}:
timesheet_ids:
diff --git a/addons/html_view/i18n/da.po b/addons/html_view/i18n/da.po
index e340fd0f736..2c33fe8b010 100644
--- a/addons/html_view/i18n/da.po
+++ b/addons/html_view/i18n/da.po
@@ -8,24 +8,24 @@ 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-09-24 09:55+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2011-11-08 22:09+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:53+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: html_view
#: field:html.view,name:0
msgid "Name"
-msgstr ""
+msgstr "Navn"
#. module: html_view
#: field:html.view,comp_id:0
msgid "Company"
-msgstr "Virksomhed"
+msgstr "Firma"
#. module: html_view
#: model:ir.actions.act_window,name:html_view.action_html_view_form
@@ -36,17 +36,17 @@ msgstr "HTML test"
#. module: html_view
#: view:html.view:0
msgid "Html Example"
-msgstr ""
+msgstr "HTML eksempel"
#. module: html_view
#: model:ir.module.module,shortdesc:html_view.module_meta_information
msgid "Html View"
-msgstr ""
+msgstr "HTML visning"
#. module: html_view
#: field:html.view,bank_ids:0
msgid "Banks"
-msgstr ""
+msgstr "Banker"
#. module: html_view
#: model:ir.module.module,description:html_view.module_meta_information
@@ -56,8 +56,12 @@ msgid ""
"view.\n"
" "
msgstr ""
+"\n"
+" Dette er testmodulet, der viser understøttelse af HTML tags i en normal "
+"XML formular.\n"
+" "
#. module: html_view
#: model:ir.model,name:html_view.model_html_view
msgid "html.view"
-msgstr ""
+msgstr "html.view"
diff --git a/addons/idea/__openerp__.py b/addons/idea/__openerp__.py
index e6dab775d6e..66709824c4a 100644
--- a/addons/idea/__openerp__.py
+++ b/addons/idea/__openerp__.py
@@ -23,7 +23,7 @@
{
'name': 'Ideas Box',
'version': '0.1',
- 'category': 'Hidden',
+ 'category': 'Human Resources',
'complexity': "easy",
'description': """
This module allows your user to easily and efficiently participate in enterprise innovation.
diff --git a/addons/idea/i18n/da.po b/addons/idea/i18n/da.po
index f26f0d38ffe..e285d0d1135 100644
--- a/addons/idea/i18n/da.po
+++ b/addons/idea/i18n/da.po
@@ -8,14 +8,14 @@ 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-11-01 20:17+0000\n"
+"PO-Revision-Date: 2011-11-08 21:34+0000\n"
"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
"Language-Team: Danish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:17+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:57+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: idea
#: help:idea.category,visibility:0
@@ -154,7 +154,7 @@ msgstr "Idéstemme"
#. module: idea
#: field:idea.category,parent_id:0
msgid "Parent Categories"
-msgstr ""
+msgstr "Forældrekategorier"
#. module: idea
#: selection:idea.idea,my_vote:0
@@ -443,7 +443,7 @@ msgstr "Brugernavn"
#. module: idea
#: model:ir.model,name:idea.model_idea_vote_stat
msgid "Idea Votes Statistics"
-msgstr ""
+msgstr "Stemme statistik"
#. module: idea
#: field:idea.comment,user_id:0
@@ -451,7 +451,7 @@ msgstr ""
#: field:idea.vote,user_id:0
#: view:report.vote:0
msgid "User"
-msgstr "Bruger"
+msgstr "User"
#. module: idea
#: field:idea.vote,date:0
@@ -461,7 +461,7 @@ msgstr "Dato"
#. module: idea
#: view:idea.post.vote:0
msgid "Post"
-msgstr ""
+msgstr "Send"
#. module: idea
#: field:idea.idea,my_vote:0
@@ -512,7 +512,7 @@ msgstr "Historik"
#. module: idea
#: view:idea.idea:0
msgid "Vots Statistics"
-msgstr ""
+msgstr "Stemme statistik"
#. module: idea
#: field:report.vote,date:0
@@ -551,7 +551,7 @@ msgstr "Luk"
#: view:idea.idea:0
#: view:report.vote:0
msgid "Open"
-msgstr "Åbn"
+msgstr "Åben"
#. module: idea
#: view:report.vote:0
@@ -640,17 +640,17 @@ msgstr "April"
#. module: idea
#: field:idea.idea,count_comments:0
msgid "Count of comments"
-msgstr ""
+msgstr "Antal kommentarer"
#. module: idea
#: field:idea.vote,score:0
msgid "Vote Status"
-msgstr ""
+msgstr "Stemme status"
#. module: idea
#: field:idea.idea,vote_avg:0
msgid "Average Score"
-msgstr ""
+msgstr "Gennemsnitlig score"
#. module: idea
#: field:idea.comment,idea_id:0
@@ -662,7 +662,7 @@ msgstr ""
#: view:report.vote:0
#: field:report.vote,idea_id:0
msgid "Idea"
-msgstr ""
+msgstr "Idé"
#. module: idea
#: view:idea.idea:0
@@ -672,7 +672,7 @@ msgstr "Godkend"
#. module: idea
#: field:idea.post.vote,vote:0
msgid "Post Vote"
-msgstr ""
+msgstr "Send stemme"
#. module: idea
#: view:report.vote:0
diff --git a/addons/knowledge/i18n/da.po b/addons/knowledge/i18n/da.po
new file mode 100644
index 00000000000..f198a77905b
--- /dev/null
+++ b/addons/knowledge/i18n/da.po
@@ -0,0 +1,155 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+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-11-09 21:31+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
+
+#. module: knowledge
+#: model:ir.ui.menu,name:knowledge.menu_document
+msgid "Knowledge"
+msgstr "Viden"
+
+#. module: knowledge
+#: help:knowledge.installer,wiki_quality_manual:0
+msgid "Creates an example skeleton for a standard quality manual."
+msgstr ""
+
+#. module: knowledge
+#: view:knowledge.installer:0
+msgid "Share information within the company with these specific Addons."
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,document_ftp:0
+msgid "Shared Repositories (FTP)"
+msgstr ""
+
+#. module: knowledge
+#: model:ir.module.module,shortdesc:knowledge.module_meta_information
+msgid "Knowledge Management System"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,wiki:0
+msgid "Collaborative Content (Wiki)"
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,document_ftp:0
+msgid ""
+"Provides an FTP access to your OpenERP's Document Management System. It lets "
+"you access attachments and virtual documents through a standard FTP client."
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,document_webdav:0
+msgid ""
+"Provides a WebDAV access to your OpenERP's Document Management System. Lets "
+"you access attachments and virtual documents through your standard file "
+"browser."
+msgstr ""
+
+#. module: knowledge
+#: view:knowledge.installer:0
+msgid "Configure"
+msgstr "Konfigurer"
+
+#. module: knowledge
+#: view:knowledge.installer:0
+msgid "title"
+msgstr "titel"
+
+#. module: knowledge
+#: model:ir.module.module,description:knowledge.module_meta_information
+msgid ""
+"Installer for knowledge-based tools\n"
+" "
+msgstr ""
+
+#. module: knowledge
+#: model:ir.ui.menu,name:knowledge.menu_document_configuration
+msgid "Configuration"
+msgstr "Konfiguration"
+
+#. module: knowledge
+#: model:ir.actions.act_window,name:knowledge.action_knowledge_installer
+msgid "Knowledge Modules Installation"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,wiki_quality_manual:0
+msgid "Quality Manual"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,document_webdav:0
+msgid "Shared Repositories (WebDAV)"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,progress:0
+msgid "Configuration Progress"
+msgstr "Konfigurationsfremgang"
+
+#. module: knowledge
+#: help:knowledge.installer,wiki_faq:0
+msgid ""
+"Creates a skeleton internal FAQ pre-filled with documentation about "
+"OpenERP's Document Management System."
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,wiki_faq:0
+msgid "Internal FAQ"
+msgstr ""
+
+#. module: knowledge
+#: model:ir.ui.menu,name:knowledge.menu_document2
+msgid "Collaborative Content"
+msgstr ""
+
+#. module: knowledge
+#: field:knowledge.installer,config_logo:0
+msgid "Image"
+msgstr "Billede"
+
+#. module: knowledge
+#: model:ir.actions.act_window,name:knowledge.action_knowledge_installer
+#: view:knowledge.installer:0
+msgid "Knowledge Application Configuration"
+msgstr ""
+
+#. module: knowledge
+#: model:ir.model,name:knowledge.model_knowledge_installer
+msgid "knowledge.installer"
+msgstr ""
+
+#. module: knowledge
+#: view:knowledge.installer:0
+msgid "Configure Your Knowledge Application"
+msgstr ""
+
+#. module: knowledge
+#: help:knowledge.installer,wiki:0
+msgid ""
+"Lets you create wiki pages and page groups in order to keep track of "
+"business knowledge and share it with and between your employees."
+msgstr ""
+
+#. module: knowledge
+#: view:knowledge.installer:0
+msgid "Content templates"
+msgstr ""
diff --git a/addons/l10n_hn/__init__.py b/addons/l10n_hn/__init__.py
old mode 100755
new mode 100644
diff --git a/addons/l10n_hn/__openerp__.py b/addons/l10n_hn/__openerp__.py
old mode 100755
new mode 100644
index c4428759af0..31d9344cb65
--- a/addons/l10n_hn/__openerp__.py
+++ b/addons/l10n_hn/__openerp__.py
@@ -35,7 +35,7 @@
{
'name': 'Honduras - Plan contable general',
'version': '0.1',
- 'category': 'Localisation/Account Charts',
+ 'category': 'Localization/Account Charts',
'description': """Agrega una nomenclatura contable para Honduras. También incluye impuestos y la moneda Lempira. -- Adds accounting chart for Honduras. It also includes taxes and the Lempira currency""",
'author': 'Salvatore Josue Trimarchi Pinto',
'website': 'http://trimarchi.co.cc',
diff --git a/addons/l10n_hn/account_chart.xml b/addons/l10n_hn/account_chart.xml
old mode 100755
new mode 100644
diff --git a/addons/l10n_hn/account_tax.xml b/addons/l10n_hn/account_tax.xml
old mode 100755
new mode 100644
diff --git a/addons/l10n_hn/account_types.xml b/addons/l10n_hn/account_types.xml
old mode 100755
new mode 100644
diff --git a/addons/l10n_hn/i18n/ca.po b/addons/l10n_hn/i18n/ca.po
old mode 100755
new mode 100644
index 24de725e214..aad943ef40d
--- a/addons/l10n_hn/i18n/ca.po
+++ b/addons/l10n_hn/i18n/ca.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:58+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: l10n_hn
#: model:ir.module.module,shortdesc:l10n_hn.module_meta_information
diff --git a/addons/l10n_hn/i18n/es.po b/addons/l10n_hn/i18n/es.po
old mode 100755
new mode 100644
index 54a8a33376c..fa71768c797
--- a/addons/l10n_hn/i18n/es.po
+++ b/addons/l10n_hn/i18n/es.po
@@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:58+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: l10n_hn
#: model:ir.module.module,shortdesc:l10n_hn.module_meta_information
diff --git a/addons/l10n_hn/i18n/es_PY.po b/addons/l10n_hn/i18n/es_PY.po
old mode 100755
new mode 100644
diff --git a/addons/l10n_hn/i18n/fr.po b/addons/l10n_hn/i18n/fr.po
old mode 100755
new mode 100644
index f61ad5dae13..9d2e759a734
--- a/addons/l10n_hn/i18n/fr.po
+++ b/addons/l10n_hn/i18n/fr.po
@@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:58+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: l10n_hn
#: model:ir.module.module,shortdesc:l10n_hn.module_meta_information
diff --git a/addons/l10n_hn/i18n/gl.po b/addons/l10n_hn/i18n/gl.po
old mode 100755
new mode 100644
index ef2997a1875..0c718c8e4eb
--- a/addons/l10n_hn/i18n/gl.po
+++ b/addons/l10n_hn/i18n/gl.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:58+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: l10n_hn
#: model:ir.module.module,shortdesc:l10n_hn.module_meta_information
diff --git a/addons/l10n_hn/i18n/hu.po b/addons/l10n_hn/i18n/hu.po
old mode 100755
new mode 100644
index 305ba7c6e40..8cb0490fdaa
--- a/addons/l10n_hn/i18n/hu.po
+++ b/addons/l10n_hn/i18n/hu.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:58+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: l10n_hn
#: model:ir.module.module,shortdesc:l10n_hn.module_meta_information
diff --git a/addons/l10n_hn/i18n/it.po b/addons/l10n_hn/i18n/it.po
old mode 100755
new mode 100644
index 36b0d853598..b2cbae2b860
--- a/addons/l10n_hn/i18n/it.po
+++ b/addons/l10n_hn/i18n/it.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:58+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: l10n_hn
#: model:ir.module.module,shortdesc:l10n_hn.module_meta_information
diff --git a/addons/l10n_hn/i18n/l10n_hn.pot b/addons/l10n_hn/i18n/l10n_hn.pot
old mode 100755
new mode 100644
diff --git a/addons/l10n_hn/i18n/pt_BR.po b/addons/l10n_hn/i18n/pt_BR.po
old mode 100755
new mode 100644
index 811711bfd59..85231507ac5
--- a/addons/l10n_hn/i18n/pt_BR.po
+++ b/addons/l10n_hn/i18n/pt_BR.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:58+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: l10n_hn
#: model:ir.module.module,shortdesc:l10n_hn.module_meta_information
diff --git a/addons/l10n_hn/i18n/sr@latin.po b/addons/l10n_hn/i18n/sr@latin.po
old mode 100755
new mode 100644
index 861c48c341e..60d3fcb2dec
--- a/addons/l10n_hn/i18n/sr@latin.po
+++ b/addons/l10n_hn/i18n/sr@latin.po
@@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:58+0000\n"
-"X-Generator: Launchpad (build 14231)\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
#. module: l10n_hn
#: model:ir.module.module,shortdesc:l10n_hn.module_meta_information
diff --git a/addons/l10n_hn/l10n_hn_base.xml b/addons/l10n_hn/l10n_hn_base.xml
old mode 100755
new mode 100644
diff --git a/addons/lunch/__openerp__.py b/addons/lunch/__openerp__.py
index 2a493f39dcf..6d5cd576912 100644
--- a/addons/lunch/__openerp__.py
+++ b/addons/lunch/__openerp__.py
@@ -33,7 +33,7 @@
""",
"version": "0.1",
"depends": ["base_tools"],
- "category" : "Hidden",
+ "category" : "Human Resources",
'description': """
The base module to manage lunch
diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py
index 621eef59da5..9c535966e17 100644
--- a/addons/mail/mail_message.py
+++ b/addons/mail/mail_message.py
@@ -74,7 +74,7 @@ class mail_message_common(osv.osv_memory):
'model': fields.char('Related Document model', size=128, select=1, readonly=1),
'res_id': fields.integer('Related Document ID', select=1, readonly=1),
'date': fields.datetime('Date'),
- 'email_from': fields.char('From', size=128, help='Message sender, taken from user preferences'),
+ 'email_from': fields.char('From', size=128, help='Message sender, taken from user preferences. If empty, this is not a mail but a message.'),
'email_to': fields.char('To', size=256, help='Message recipients'),
'email_cc': fields.char('Cc', size=256, help='Carbon copy message recipients'),
'email_bcc': fields.char('Bcc', size=256, help='Blind carbon copy message recipients'),
@@ -334,8 +334,8 @@ class mail_message(osv.osv):
'subtype': msg_mime_subtype,
'body_text': plaintext_body
'body_html': html_body,
- 'attachments': { 'file1': 'bytes',
- 'file2': 'bytes' }
+ 'attachments': [('file1', 'bytes'),
+ ('file2', 'bytes') }
# ...
'original': source_of_email,
}
@@ -416,7 +416,7 @@ class mail_message(osv.osv):
body = tools.html2plaintext(body)
msg['body_text'] = tools.ustr(body, encoding)
- attachments = {}
+ attachments = []
if msg_txt.is_multipart() or 'multipart/alternative' in msg.get('content-type', ''):
body = ""
if 'multipart/alternative' in msg.get('content-type', ''):
@@ -432,7 +432,7 @@ class mail_message(osv.osv):
if part.get_content_maintype()=='text':
content = part.get_payload(decode=True)
if filename:
- attachments[filename] = content
+ attachments.append((filename, content))
content = tools.ustr(content, encoding)
if part.get_content_subtype() == 'html':
msg['body_html'] = content
@@ -442,7 +442,7 @@ class mail_message(osv.osv):
body = content
elif part.get_content_maintype() in ('application', 'image'):
if filename :
- attachments[filename] = part.get_payload(decode=True)
+ attachments.append((filename,part.get_payload(decode=True)))
else:
res = part.get_payload(decode=True)
body += tools.ustr(res, encoding)
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index fa785c3517c..c8f7da9a5bb 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -201,7 +201,8 @@ class mail_thread(osv.osv):
for thread in threads:
to_attach = []
- for fname, fcontent in attachments.items():
+ for attachment in attachments:
+ fname, fcontent = attachment
if isinstance(fcontent, unicode):
fcontent = fcontent.encode('utf-8')
data_attach = {
diff --git a/addons/marketing_campaign/i18n/ru.po b/addons/marketing_campaign/i18n/ru.po
index a51b8994cee..f4c85881403 100644
--- a/addons/marketing_campaign/i18n/ru.po
+++ b/addons/marketing_campaign/i18n/ru.po
@@ -8,13 +8,13 @@ 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: 2010-10-10 07:30+0000\n"
-"Last-Translator: OpenERP Administrators \n"
+"PO-Revision-Date: 2011-11-07 22:35+0000\n"
+"Last-Translator: Stanislav Hanzhin \n"
"Language-Team: Russian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2011-11-05 05:50+0000\n"
+"X-Launchpad-Export-Date: 2011-11-08 05:49+0000\n"
"X-Generator: Launchpad (build 14231)\n"
#. module: marketing_campaign
@@ -809,7 +809,7 @@ msgstr ""
#: selection:marketing.campaign.segment,state:0
#: selection:marketing.campaign.workitem,state:0
msgid "Done"
-msgstr "Сделано"
+msgstr "Выполнено"
#. module: marketing_campaign
#: code:addons/marketing_campaign/marketing_campaign.py:209
@@ -861,7 +861,7 @@ msgstr ""
#: view:marketing.campaign.workitem:0
#: selection:marketing.campaign.workitem,state:0
msgid "To Do"
-msgstr "Задача"
+msgstr "Сделать"
#. module: marketing_campaign
#: view:marketing.campaign.workitem:0
diff --git a/addons/membership/wizard/membership_invoice.py b/addons/membership/wizard/membership_invoice.py
index b97926e564c..d0be223158f 100644
--- a/addons/membership/wizard/membership_invoice.py
+++ b/addons/membership/wizard/membership_invoice.py
@@ -35,7 +35,7 @@ class membership_invoice(osv.osv_memory):
"""This function returns value of product's member price based on product id.
"""
if not product_id:
- return {'value': {'unit_price': False}}
+ return {'value': {'member_price': False}}
return {'value': {'member_price': self.pool.get('product.product').price_get(cr, uid, [product_id])[product_id]}}
def membership_invoice(self, cr, uid, ids, context=None):
@@ -67,4 +67,4 @@ class membership_invoice(osv.osv_memory):
membership_invoice()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/membership/wizard/membership_invoice_view.xml b/addons/membership/wizard/membership_invoice_view.xml
index 500885d35f1..dedecf1e9dc 100644
--- a/addons/membership/wizard/membership_invoice_view.xml
+++ b/addons/membership/wizard/membership_invoice_view.xml
@@ -10,7 +10,7 @@
diff --git a/addons/web_livechat/__openerp__.py b/addons/web_livechat/__openerp__.py
index 0731b003dbc..750c4ca7ec5 100644
--- a/addons/web_livechat/__openerp__.py
+++ b/addons/web_livechat/__openerp__.py
@@ -39,6 +39,9 @@ Add "Support" button in header from where you can access OpenERP Support.
'css' : [
'static/src/css/lc.css',
],
+ 'qweb' : [
+ "static/src/xml/*.xml",
+ ],
'installable': True,
'active': False,
'certificate': '0013762192410413',
diff --git a/addons/web_livechat/static/src/js/web_livechat.js b/addons/web_livechat/static/src/js/web_livechat.js
index 6fed859449c..13c4bbe28d4 100644
--- a/addons/web_livechat/static/src/js/web_livechat.js
+++ b/addons/web_livechat/static/src/js/web_livechat.js
@@ -22,29 +22,6 @@ var __lc_buttons = [];
openerp.web_livechat = function (openerp) {
-var QWeb = openerp.web.qweb;
-QWeb.add_template('/web_livechat/static/src/xml/web_livechat.xml');
-
-
-// tracking code from LiveChat
-var license = '1035052',
- params = '',
- lang = 'en',
- skill = '0';
-__lc_load = function (p) { if (typeof __lc_loaded != 'function')
- if (p) { var d = document, l = d.createElement('script'), s =
- d.getElementsByTagName('script')[0], a = unescape('%26'),
- h = ('https:' == d.location.protocol ? 'https://' : 'http://'); l.type = 'text/javascript'; l.async = true;
- l.src = h + 'gis' + p +'.livechatinc.com/gis.cgi?serverType=control'+a+'licenseID='+license+a+'jsonp=__lc_load';
- if (!(typeof p['server'] !== 'string' || typeof __lc_serv === 'string')) {
- l.src = h + (__lc_serv = p['server']) + '/licence/'+license+'/script.cgi?lang='+lang+a+'groups='+skill;
- l.src += (params == '') ? '' : a+'params='+encodeURIComponent(encodeURIComponent(params)); s.parentNode.insertBefore(l, s);
- } else setTimeout(__lc_load, 1000); if(typeof __lc_serv != 'string'){ s.parentNode.insertBefore(l, s);}
- } else __lc_load(Math.ceil(Math.random()*5)); }
-__lc_load();
-
-
-
openerp.web_livechat.Livechat = openerp.web.Widget.extend({
template: 'Header-LiveChat',
@@ -94,7 +71,27 @@ openerp.web_livechat.Livechat = openerp.web.Widget.extend({
}
});
-openerp.webclient.livechat = new openerp.web_livechat.Livechat(openerp.webclient);
-openerp.webclient.livechat.prependTo('div.header_corner');
+if (openerp.webclient) {
+ // tracking code from LiveChat
+ var license = '1035052',
+ params = '',
+ lang = 'en',
+ skill = '0';
+ __lc_load = function (p) { if (typeof __lc_loaded != 'function')
+ if (p) { var d = document, l = d.createElement('script'), s =
+ d.getElementsByTagName('script')[0], a = unescape('%26'),
+ h = ('https:' == d.location.protocol ? 'https://' : 'http://'); l.type = 'text/javascript'; l.async = true;
+ l.src = h + 'gis' + p +'.livechatinc.com/gis.cgi?serverType=control'+a+'licenseID='+license+a+'jsonp=__lc_load';
+ if (!(typeof p['server'] !== 'string' || typeof __lc_serv === 'string')) {
+ l.src = h + (__lc_serv = p['server']) + '/licence/'+license+'/script.cgi?lang='+lang+a+'groups='+skill;
+ l.src += (params == '') ? '' : a+'params='+encodeURIComponent(encodeURIComponent(params)); s.parentNode.insertBefore(l, s);
+ } else setTimeout(__lc_load, 1000); if(typeof __lc_serv != 'string'){ s.parentNode.insertBefore(l, s);}
+ } else __lc_load(Math.ceil(Math.random()*5)); }
+ __lc_load();
+
+ // and add widget to webclient
+ openerp.webclient.livechat = new openerp.web_livechat.Livechat(openerp.webclient);
+ openerp.webclient.livechat.prependTo('div.header_corner');
+}
};
diff --git a/addons/web_uservoice/__openerp__.py b/addons/web_uservoice/__openerp__.py
index 65f953ed3d1..64b443be3e2 100644
--- a/addons/web_uservoice/__openerp__.py
+++ b/addons/web_uservoice/__openerp__.py
@@ -39,5 +39,8 @@ Invite OpenERP user feedback, powered by uservoice.
'js': ['static/src/js/web_uservoice.js'],
'css': ['static/src/css/uservoice.css'],
+ 'qweb' : [
+ "static/src/xml/*.xml",
+ ],
'images': ['static/src/img/submit_an_idea.jpeg', 'static/src/img/web_uservoice_feedback.jpeg'],
}
diff --git a/addons/web_uservoice/static/src/js/web_uservoice.js b/addons/web_uservoice/static/src/js/web_uservoice.js
index a574652686f..4110f149300 100644
--- a/addons/web_uservoice/static/src/js/web_uservoice.js
+++ b/addons/web_uservoice/static/src/js/web_uservoice.js
@@ -1,15 +1,6 @@
openerp.web_uservoice = function(instance) {
-var QWeb = instance.web.qweb;
-QWeb.add_template('/web_uservoice/static/src/xml/web_uservoice.xml');
-
-$(function() {
- var src = ("https:" == document.location.protocol ? "https://" : "http://") + "cdn.uservoice.com/javascripts/widgets/tab.js";
- $.getScript(src);
-});
-
-
instance.web_uservoice.UserVoice = instance.web.Widget.extend({
template: 'Header-UserVoice',
default_forum: '77459',
@@ -73,8 +64,15 @@ instance.web_uservoice.UserVoice = instance.web.Widget.extend({
});
-instance.webclient.uservoice = new instance.web_uservoice.UserVoice(instance.webclient);
-instance.webclient.uservoice.prependTo('div.header_corner');
+if (instance.webclient) {
+ $(function() {
+ var src = ("https:" == document.location.protocol ? "https://" : "http://") + "cdn.uservoice.com/javascripts/widgets/tab.js";
+ $.getScript(src);
+ });
+
+ instance.webclient.uservoice = new instance.web_uservoice.UserVoice(instance.webclient);
+ instance.webclient.uservoice.prependTo('div.header_corner');
+}
};
diff --git a/addons/wiki_sale_faq/i18n/da.po b/addons/wiki_sale_faq/i18n/da.po
new file mode 100644
index 00000000000..6a60c08ca2c
--- /dev/null
+++ b/addons/wiki_sale_faq/i18n/da.po
@@ -0,0 +1,70 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:16+0000\n"
+"PO-Revision-Date: 2011-11-09 20:09+0000\n"
+"Last-Translator: OpenERP Danmark / Henning Dinsen \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-10 04:58+0000\n"
+"X-Generator: Launchpad (build 14263)\n"
+
+#. module: wiki_sale_faq
+#: model:ir.actions.act_window,name:wiki_sale_faq.action_document_form
+#: model:ir.ui.menu,name:wiki_sale_faq.menu_document_files
+#: model:ir.ui.menu,name:wiki_sale_faq.menu_sales
+msgid "Documents"
+msgstr "Dokumenter"
+
+#. module: wiki_sale_faq
+#: model:ir.actions.act_window,name:wiki_sale_faq.action_wiki_test
+msgid "Wiki Pages"
+msgstr ""
+
+#. module: wiki_sale_faq
+#: model:ir.ui.menu,name:wiki_sale_faq.menu_action_wiki_wiki
+msgid "FAQ"
+msgstr "FAQ"
+
+#. module: wiki_sale_faq
+#: model:ir.module.module,description:wiki_sale_faq.module_meta_information
+msgid ""
+"This module provides a wiki FAQ Template\n"
+" "
+msgstr ""
+"Dette modul leverer en wiki FAQ skabelon\n"
+" "
+
+#. module: wiki_sale_faq
+#: model:ir.actions.act_window,help:wiki_sale_faq.action_wiki_test
+msgid ""
+"Wiki pages allow you to share ideas and questions with coworkers. You can "
+"create a new document that can be linked to one or several applications "
+"(specifications of a project, FAQ for sales teams, etc.). Keywords can be "
+"used to easily tag wiki pages. You should use this application with the "
+"OpenERP web client interface."
+msgstr ""
+
+#. module: wiki_sale_faq
+#: model:ir.module.module,shortdesc:wiki_sale_faq.module_meta_information
+msgid "Wiki -Sale - FAQ"
+msgstr ""
+
+#. module: wiki_sale_faq
+#: model:ir.actions.act_window,help:wiki_sale_faq.action_document_form
+msgid ""
+"Documents give you access to all files attached to any record. It is a "
+"repository of all documents such as emails, project-related attachments or "
+"any other documents. From this view, you can search through the content of "
+"the documents. OpenERP automatically assign meta data based on the record "
+"like the related partner and indexes the content of .DOC, .ODT, .TXT, .SXW "
+"and .PDF documents."
+msgstr ""