- You will find here timesheets and purchases you did for
- contracts that can be reinvoiced to the customer. If you want
- to record new activities to invoice, you should use the timesheet
- menu instead.
-
- You will find here the contracts to be renewed because the
- end date is passed or the working effort is higher than the
- maximum authorized one.
-
- OpenERP automatically sets contracts to be renewed in a pending
- state. After the negociation, the salesman should close or renew
- pending contracts.
-
- Use contracts to follow tasks, issues, timesheets or invoicing based on
- work done, expenses and/or sales orders. OpenERP will automatically manage
- the alerts for the renewal of the contracts to the right salesperson.
-
+ Use contracts to follow tasks, issues, timesheets or invoicing based on
+ work done, expenses and/or sales orders. OpenERP will automatically manage
+ the alerts for the renewal of the contracts to the right salesperson.
+
+
+
+
+
+
+
+
+ Time & Materials to Invoice
+ account.analytic.line
+ form
+ tree,form
+ [('invoice_id','=',False)]
+ {'search_default_to_invoice': 1, 'search_default_sales': 1}
+
+
+
+ You will find here timesheets and purchases you did for
+ contracts that can be reinvoiced to the customer. If you want
+ to record new activities to invoice, you should use the timesheet
+ menu instead.
+
+ You will find here the contracts to be renewed because the
+ end date is passed or the working effort is higher than the
+ maximum authorized one.
+
+ OpenERP automatically sets contracts to be renewed in a pending
+ state. After the negociation, the salesman should close or renew
+ pending contracts.
+
+
+
+
+
+
Contract Templateir.actions.act_window
@@ -184,8 +294,8 @@
terms and conditions of the contract.
-
+
diff --git a/addons/account_analytic_analysis/cron_account_analytic_account.py b/addons/account_analytic_analysis/cron_account_analytic_account.py
deleted file mode 100644
index 6e2ce4a47b3..00000000000
--- a/addons/account_analytic_analysis/cron_account_analytic_account.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env python
-from mako.template import Template
-import time
-try:
- import cStringIO as StringIO
-except ImportError:
- import StringIO
-
-from openerp import tools
-from openerp.osv import osv
-
-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:
- ${account.partner_id.name}, ${account.partner_id.phone or ''}, ${account.partner_id.email or ''}
-
- % 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.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.email, ], subject, body)
-
- return True
-
-analytic_account()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_followup/wizard/account_followup_print.py b/addons/account_followup/wizard/account_followup_print.py
index 76aee365e00..37b4300b03f 100644
--- a/addons/account_followup/wizard/account_followup_print.py
+++ b/addons/account_followup/wizard/account_followup_print.py
@@ -26,8 +26,6 @@ from openerp import tools
from openerp.osv import fields, osv
from openerp.tools.translate import _
-from openerp import SUPERUSER_ID
-
class account_followup_stat_by_partner(osv.osv):
_name = "account_followup.stat.by.partner"
_description = "Follow-up Statistics by Partner"
@@ -315,13 +313,6 @@ class account_followup_print(osv.osv_memory):
if stat_line_id not in partner_list:
partner_list.append(stat_line_id)
to_update[str(id)]= {'level': fups[followup_line_id][1], 'partner_id': stat_line_id}
- #Remove partners that are other companies in OpenERP
- comp_obj = self.pool.get("res.company")
- comp_ids = comp_obj.search(cr, SUPERUSER_ID, [], context=context)
- for comp in comp_obj.browse(cr, SUPERUSER_ID, comp_ids, context=context):
- company_partner_wiz_id = comp.partner_id.id * 10000 + company_id
- if company_partner_wiz_id in partner_list:
- partner_list.remove(company_partner_wiz_id)
return {'partner_ids': partner_list, 'to_update': to_update}
account_followup_print()
diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py
index 005afa5d544..85e21d5fbc5 100644
--- a/addons/analytic/analytic.py
+++ b/addons/analytic/analytic.py
@@ -196,7 +196,7 @@ class account_analytic_account(osv.osv):
'date_start': fields.date('Start Date'),
'date': fields.date('Date End', select=True),
'company_id': fields.many2one('res.company', 'Company', required=False), #not required because we want to allow different companies to use the same chart of account, except for leaf accounts.
- 'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'), ('cancelled', 'Cancelled'),('pending','To Renew'),('close','Closed')], 'Status', required=True, track_visibility='onchange'),
+ 'state': fields.selection([('template', 'Template'),('draft','New'),('open','In Progress'),('pending','To Renew'),('close','Closed'),('cancelled', 'Cancelled')], 'Status', required=True, track_visibility='onchange'),
'currency_id': fields.function(_currency, fnct_inv=_set_company_currency, #the currency_id field is readonly except if it's a view account and if there is no company
store = {
'res.company': (_get_analytic_account, ['currency_id'], 10),
@@ -258,6 +258,9 @@ class account_analytic_account(osv.osv):
(check_recursion, 'Error! You cannot create recursive analytic accounts.', ['parent_id']),
]
+ def name_create(self, cr, uid, name, context=None):
+ raise osv.except_osv(_('Warning'), _("Quick account creation disallowed."))
+
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
@@ -349,6 +352,4 @@ class account_analytic_line(osv.osv):
(_check_no_view, 'You cannot create analytic line on view account.', ['account_id']),
]
-account_analytic_line()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/auth_oauth_signup/res_users.py b/addons/auth_oauth_signup/res_users.py
index 495331124b1..5eebc02fe04 100644
--- a/addons/auth_oauth_signup/res_users.py
+++ b/addons/auth_oauth_signup/res_users.py
@@ -41,7 +41,7 @@ class res_users(osv.Model):
state = simplejson.loads(params['state'])
token = state.get('t')
oauth_uid = validation['user_id']
- email = validation.get('email', 'provider_%d_user_%d' % (provider, oauth_uid))
+ email = validation.get('email', 'provider_%s_user_%s' % (provider, oauth_uid))
name = validation.get('name', email)
values = {
'name': name,
diff --git a/addons/auth_signup/res_users_view.xml b/addons/auth_signup/res_users_view.xml
index fc163e1b3ed..be9942feac2 100644
--- a/addons/auth_signup/res_users_view.xml
+++ b/addons/auth_signup/res_users_view.xml
@@ -21,8 +21,8 @@
-
+
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index 6498a69673b..f4b27fa4d9d 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -587,27 +587,25 @@ class crm_lead(base_stage, format_address, osv.osv):
return True
def _merge_opportunity_attachments(self, cr, uid, opportunity_id, opportunities, context=None):
- attachment = self.pool.get('ir.attachment')
+ attach_obj = self.pool.get('ir.attachment')
# return attachments of opportunity
def _get_attachments(opportunity_id):
- attachment_ids = attachment.search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', opportunity_id)], context=context)
- return attachment.browse(cr, uid, attachment_ids, context=context)
+ attachment_ids = attach_obj.search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', opportunity_id)], context=context)
+ return attach_obj.browse(cr, uid, attachment_ids, context=context)
- count = 1
first_attachments = _get_attachments(opportunity_id)
+ #counter of all attachments to move. Used to make sure the name is different for all attachments
+ count = 1
for opportunity in opportunities:
attachments = _get_attachments(opportunity.id)
- for first in first_attachments:
- for attachment in attachments:
- if attachment.name == first.name:
- values = dict(
- name = "%s (%s)" % (attachment.name, count,),
- res_id = opportunity_id,
- )
- attachment.write(values)
- count+=1
-
+ for attachment in attachments:
+ values = {'res_id': opportunity_id,}
+ for attachment_in_first in first_attachments:
+ if attachment.name == attachment_in_first.name:
+ name = "%s (%s)" % (attachment.name, count,),
+ count+=1
+ attachment.write(values)
return True
def merge_opportunity(self, cr, uid, ids, context=None):
diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml
index fc43339ba8e..87c130547cd 100644
--- a/addons/crm/crm_lead_view.xml
+++ b/addons/crm/crm_lead_view.xml
@@ -2,7 +2,6 @@
-
@@ -110,7 +109,7 @@
string="Phone Calls"/>