← Back to team overview

openerp-community team mailing list archive

lp:~openerp-community/eficent-openerp-project-management/nerviaconsultores-openerp-7.0 into lp:eficent-openerp-project-management

 

Stefan Rijnhart (Therp) has proposed merging lp:~openerp-community/eficent-openerp-project-management/nerviaconsultores-openerp-7.0 into lp:eficent-openerp-project-management.

Commit message:
[MIG] Upgrade to OpenERP 7.0

Requested reviews:
  Eficent (eficent)

For more details, see:
https://code.launchpad.net/~openerp-community/eficent-openerp-project-management/nerviaconsultores-openerp-7.0/+merge/150892

This is a rebased version of https://code.launchpad.net/~cpueyo/eficent-openerp-project-management/nerviaconsultores-openerp-7.0 by Carlos Pueyo. The original branch could not be reviewed.
-- 
https://code.launchpad.net/~openerp-community/eficent-openerp-project-management/nerviaconsultores-openerp-7.0/+merge/150892
Your team OpenERP Community is subscribed to branch lp:~openerp-community/eficent-openerp-project-management/nerviaconsultores-openerp-7.0.
=== modified file 'account_analytic_lob/__openerp__.py'
--- account_analytic_lob/__openerp__.py	2012-10-02 23:10:39 +0000
+++ account_analytic_lob/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,8 +23,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["account","analytic","project"],
     "description": """Introduce business segments in analytic accounts.

=== modified file 'account_analytic_lob/project.py'
--- account_analytic_lob/project.py	2012-10-02 23:10:39 +0000
+++ account_analytic_lob/project.py	2013-02-27 19:55:32 +0000
@@ -23,11 +23,11 @@
 
 
 class account_analytic_account(osv.osv):
-    
+
     _inherit = 'account.analytic.account'
 
 
-    _columns = {   
+    _columns = {
         'lob': fields.many2one('account.analytic.lob','Line of Business'),                
      }
     

=== modified file 'account_analytic_lob/project_view.xml'
--- account_analytic_lob/project_view.xml	2012-10-02 23:10:39 +0000
+++ account_analytic_lob/project_view.xml	2013-02-27 19:55:32 +0000
@@ -13,7 +13,7 @@
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
             <field name="arch" type="xml">
-            	<xpath expr="//page[@string='Administration']/group[@name='misc']/field[@name='warn_manager']" position="before">	
+            	<xpath expr="//form/sheet/notebook/page[@string='Other Info']/group/group[@string='Miscellaneous']/field[@name='parent_id']" position="after">	
             		<field name="lob"/>          				            		
             	</xpath>
             </field>            	        
@@ -30,10 +30,10 @@
             <field name="name">account.analytic.account.form</field>
             <field name="model">account.analytic.account</field>
             <field name="type">form</field>
-            <field name="inherit_id" ref="account.view_account_analytic_account_form"/>
+            <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
             <field name="arch" type="xml">
-				<xpath expr="//page[@string='Account Data']/field[@name='partner_id']" position="after">	
-            		<field name="lob"/>          				            		
+				<xpath expr="//form/sheet/notebook/page[@string='Contract Information']/field[@name='description']" position="after">
+            		<field name="lob"/>
             	</xpath>      				            		            	              
             </field>
         </record>         

=== modified file 'project_category/__openerp__.py'
--- project_category/__openerp__.py	2012-10-18 23:30:50 +0000
+++ project_category/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,11 +23,13 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Eficent",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": [
                 "base",
+                "account",
+                "analytic",
                 "project",                       
                 ],
     "description": """ This module intrododuces the possibility to associate categories to analytic accounts and projects.

=== modified file 'project_category/analytic_account_category.py'
--- project_category/analytic_account_category.py	2012-10-18 23:30:50 +0000
+++ project_category/analytic_account_category.py	2013-02-27 19:55:32 +0000
@@ -40,7 +40,7 @@
     def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
         if not args:
             args=[]
-        if not context:
+        if context is None:
             context={}
         if name:
             # Be sure name_search is symetric to name_get

=== modified file 'project_category/analytic_account_category.xml'
--- project_category/analytic_account_category.xml	2012-10-18 23:30:50 +0000
+++ project_category/analytic_account_category.xml	2013-02-27 19:55:32 +0000
@@ -14,7 +14,7 @@
             <field name="arch" type="xml">
                 <form string="Analytic Account Category">
                     <field name="name" select="1"/>
-                    <field name="active" groups="base.group_extended"/>
+                    <field name="active" groups="base.group_erp_manager"/>
                     <field name="parent_id"/>
                     <separator colspan="4" string="Analytic Accounts"/>
                     <field colspan="4" name="account_ids" nolabel="1"/>
@@ -73,7 +73,7 @@
         </record>
 
         <menuitem action="action_analytic_account_category_form" id="menu_analytic_account_category_form" name="Analytic Account Categories" sequence="4" parent="account.menu_analytic_accounting"/>
-        <menuitem action="action_analytic_account_category_form" id="menu_project_category_form" name="Project Categories" sequence="4" parent="project.menu_definitions"/>
+        <menuitem action="action_analytic_account_category_form" id="menu_project_category_form" name="Project Categories" sequence="4" parent="base.menu_definitions"/>
 
 
     </data>

=== modified file 'project_category/analytic_account_view.xml'
--- project_category/analytic_account_view.xml	2012-10-18 23:30:50 +0000
+++ project_category/analytic_account_view.xml	2013-02-27 19:55:32 +0000
@@ -48,13 +48,19 @@
             <field name="name">account.analytic.account.form</field>
             <field name="model">account.analytic.account</field>
             <field name="type">form</field>
-            <field name="inherit_id" ref="account.view_account_analytic_account_form"/>
+            <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
             <field name="arch" type="xml">
-            	 <page string="Account Data" position="after">
-	                <page string="Categories">	                        
-	                	<field  colspan="4" name="category_id" nolabel="1"/>
-	                </page>
-            	</page>            				            		            	              
+				<form string="Analytic Account" version="7.0">
+                    <sheet string="Analytic Account">
+						<notebook>
+							<page string="Account Data" position="after">
+								<page string="Categories">	                        
+									<field  colspan="4" name="category_id" nolabel="1"/>
+								</page>
+							</page>
+						</notebook>
+					</sheet>
+				</form>
             </field>
         </record>         
         

=== modified file 'project_category/project_view.xml'
--- project_category/project_view.xml	2012-10-18 23:30:50 +0000
+++ project_category/project_view.xml	2013-02-27 19:55:32 +0000
@@ -41,7 +41,7 @@
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
             <field name="arch" type="xml">
-            	<page string="Administration" position="after">	
+            	<page string="Other Info" position="after">	
 	                <page string="Categories">	                        
 	                	<field  colspan="4" name="category_id" nolabel="1"/>
 	                </page>       		            				            	

=== modified file 'project_communications_mailgate/__openerp__.py'
--- project_communications_mailgate/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_communications_mailgate/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,10 +23,10 @@
 {
     "name": "Project MailGateWay for Projects",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
-    "depends": ["project", "mail_gateway"],
+    "depends": ["project", "mail"],
     "description": """This module is an interface that synchronises mails with OpenERP Project.
 
 It allows updating projects as soon as a new mail arrives in our configured mail server.

=== modified file 'project_communications_mailgate/project.py'
--- project_communications_mailgate/project.py	2012-10-02 23:10:39 +0000
+++ project_communications_mailgate/project.py	2013-02-27 19:55:32 +0000
@@ -19,45 +19,205 @@
 #
 ##############################################################################
 
-import tools
-from osv import fields, osv
-from tools.translate import _
+from openerp.osv import orm
+from openerp.tools.translate import _
+
+import base64
+import datetime
+import dateutil
+import email
+import logging
+import pytz
+import re
+import time
+import xmlrpclib
 
     
-class project(osv.osv):
+class project(orm.Model):
    
     _inherit = "project.project"
  
-    def set_draft(self, cr, uid, ids, *args, **kwargs):
-        res = super(project, self).set_draft(cr, uid, ids, *args, **kwargs)
-        projects = self.browse(cr, uid, ids)
-        self._history(cr, uid, projects, _('Draft'))
-        return res
-    
-    def set_open(self, cr, uid, ids, *args, **kwargs):
-        res = super(project, self).set_open(cr, uid, ids, *args, **kwargs)
-        projects = self.browse(cr, uid, ids)
-        self._history(cr, uid, projects, _('Open'))
-        return res
-    
-    def set_pending(self, cr, uid, ids, *args, **kwargs):
-        res = super(project, self).set_pending(cr, uid, ids, *args, **kwargs)
-        projects = self.browse(cr, uid, ids)
-        self._history(cr, uid, projects, _('Pending'))
-        return res
-    
-    def set_done(self, cr, uid, ids, *args, **kwargs):
-        res = super(project, self).set_done(cr, uid, ids, *args, **kwargs)
-        projects = self.browse(cr, uid, ids)
-        self._history(cr, uid, projects, _('Done'))
-        return res
-    
-    def set_cancel(self, cr, uid, ids, *args, **kwargs):
-        res = super(project, self).set_cancel(cr, uid, ids, *args, **kwargs)
-        projects = self.browse(cr, uid, ids)
-        self._history(cr, uid, projects, _('Cancel'))
-        return res   
-
-
-project()
+    def set_draft(self, cr, uid, ids, context=None):
+        res = super(project, self).set_draft(cr, uid, ids, context=context)
+        projects = self.browse(cr, uid, ids, context=context)
+        self.message_append(cr, uid, projects, _('Draft'), context=context)
+        return res
+    
+    def set_open(self, cr, uid, ids, context=None):
+        res = super(project, self).set_open(cr, uid, ids, context=context)
+        projects = self.browse(cr, uid, ids, context=context)
+        self.message_append(cr, uid, projects, _('Open'), context=context)
+        return res
+
+    def set_pending(self, cr, uid, ids, context=None):
+        res = super(project, self).set_pending(cr, uid, ids, context=context)
+        projects = self.browse(cr, uid, ids, context=context)
+        self.message_append(cr, uid, projects, _('Pending'), context=context)
+        return res
+
+    def set_done(self, cr, uid, ids, context=None):
+        res = super(project, self).set_done(cr, uid, ids, context=context)
+        projects = self.browse(cr, uid, ids, context=context)
+        self.message_append(cr, uid, projects, _('Done'), context=context)
+        return res
+
+    def set_cancel(self, cr, uid, ids, context=None):
+        res = super(project, self).set_cancel(cr, uid, ids, context=context)
+        projects = self.browse(cr, uid, ids, context=context)
+        self.message_append(cr, uid, projects, _('Cancel'), context=context)
+        return res
+		
+    def message_append(self, cr, uid, threads, subject, body_text=None, email_to=False,
+                email_from=False, email_cc=None, email_bcc=None, reply_to=None,
+                email_date=None, message_id=False, references=None,
+                attachments=None, body_html=None, subtype=None, headers=None,
+                original=None, context=None):
+        """Creates a new mail.message attached to the current mail.thread,
+           containing all the details passed as parameters.  All attachments
+           will be attached to the thread record as well as to the actual
+           message.
+           If only the ``threads`` and ``subject`` parameters are provided,
+           a *event log* message is created, without the usual envelope
+           attributes (sender, recipients, etc.). 
+
+        :param threads: list of thread ids, or list of browse_records representing
+                        threads to which a new message should be attached
+        :param subject: subject of the message, or description of the event if this
+                        is an *event log* entry.
+        :param email_to: Email-To / Recipient address
+        :param email_from: Email From / Sender address if any
+        :param email_cc: Comma-Separated list of Carbon Copy Emails To addresse if any
+        :param email_bcc: Comma-Separated list of Blind Carbon Copy Emails To addresses if any
+        :param reply_to: reply_to header
+        :param email_date: email date string if different from now, in server timezone
+        :param message_id: optional email identifier
+        :param references: optional email references
+        :param body_text: plaintext contents of the mail or log message
+        :param body_html: html contents of the mail or log message
+        :param subtype: optional type of message: 'plain' or 'html', corresponding to the main
+                        body contents (body_text or body_html).
+        :param headers: mail headers to store
+        :param dict attachments: map of attachment filenames to binary contents, if any.
+        :param str original: optional full source of the RFC2822 email, for reference
+        :param dict context: if a ``thread_model`` value is present
+                             in the context, its value will be used
+                             to determine the model of the thread to
+                             update (instead of the current model).
+        """
+        if context is None:
+            context = {}
+        if attachments is None:
+            attachments = {}
+
+        if email_date:
+            edate = parsedate(email_date)
+            if edate is not None:
+                email_date = time.strftime('%Y-%m-%d %H:%M:%S', edate)
+
+        if all(isinstance(thread_id, (int, long)) for thread_id in threads):
+            model = context.get('thread_model') or self._name
+            model_pool = self.pool.get(model)
+            threads = model_pool.browse(cr, uid, threads, context=context)
+
+        ir_attachment = self.pool.get('ir.attachment')
+        mail_message = self.pool.get('mail.message')
+
+        for thread in threads:
+            to_attach = []
+            for attachment in attachments:
+                fname, fcontent = attachment
+                if isinstance(fcontent, unicode):
+                    fcontent = fcontent.encode('utf-8')
+                data_attach = {
+                    'name': fname,
+                    'datas': base64.b64encode(str(fcontent)),
+                    'datas_fname': fname,
+                    'description': _('Mail attachment'),
+                    'res_model': thread._name,
+                    'res_id': thread.id,
+                }
+                to_attach.append(ir_attachment.create(cr, uid, data_attach, context=context))
+
+            partner_id = hasattr(thread, 'partner_id') and (thread.partner_id and thread.partner_id.id or False) or False
+            if not partner_id and thread._name == 'res.partner':
+                partner_id = thread.id
+            data = {
+                'subject': subject,
+                'user_id': uid,
+                'model' : thread._name,
+                'partner_id': partner_id,
+                'res_id': thread.id,
+                'date': time.strftime('%Y-%m-%d %H:%M:%S'),
+                'message_id': message_id,
+                'body_text': body_text or (hasattr(thread, 'description') and thread.description or False),
+                'attachment_ids': [(6, 0, to_attach)],
+                'state' : 'received',
+            }
+
+            if email_from:
+                for param in (email_to, email_cc, email_bcc):
+                    if isinstance(param, list):
+                        param = ", ".join(param)
+                data = {
+                    'subject': subject or _('History'),
+                    'user_id': uid,
+                    'model' : thread._name,
+                    'res_id': thread.id,
+                    'date': email_date or time.strftime('%Y-%m-%d %H:%M:%S'),
+                    'body_text': body_text,
+                    'email_to': email_to,
+                    'email_from': email_from or \
+                        (hasattr(thread, 'user_id') and thread.user_id and thread.user_id.user_email),
+                    'email_cc': email_cc,
+                    'email_bcc': email_bcc,
+                    'partner_id': partner_id,
+                    'references': references,
+                    'message_id': message_id,
+                    'attachment_ids': [(6, 0, to_attach)],
+                    'state' : 'received',
+                    'body_html': body_html,
+                    'subtype': subtype,
+                    'headers': headers,
+                    'reply_to': reply_to,
+                    'original': original,
+                }
+            mail_message.create(cr, uid, data, context=context)
+        return True
+
+    def message_append_dict(self, cr, uid, ids, msg_dict, context=None):
+        """Creates a new mail.message attached to the given threads (``ids``),
+           with the contents of ``msg_dict``, by calling ``message_append``
+           with the mail details. All attachments in msg_dict will be
+           attached to the object record as well as to the actual
+           mail message.
+
+           :param dict msg_dict: a map containing the email details and
+                                 attachments. See ``message_process()`` and
+                                ``mail.message.parse()`` for details on
+                                the dict structure.
+           :param dict context: if a ``thread_model`` value is present
+                                in the context, its value will be used
+                                to determine the model of the thread to
+                                update (instead of the current model).
+        """
+        return self.message_append(cr, uid, ids,
+                            subject = msg_dict.get('subject'),
+                            body_text = msg_dict.get('body_text'),
+                            email_to = msg_dict.get('to'),
+                            email_from = msg_dict.get('from'),
+                            email_cc = msg_dict.get('cc'),
+                            email_bcc = msg_dict.get('bcc'),
+                            reply_to = msg_dict.get('reply'),
+                            email_date = msg_dict.get('date'),
+                            message_id = msg_dict.get('message-id'),
+                            references = msg_dict.get('references')\
+                                      or msg_dict.get('in-reply-to'),
+                            attachments = msg_dict.get('attachments'),
+                            body_html= msg_dict.get('body_html'),
+                            subtype = msg_dict.get('subtype'),
+                            headers = msg_dict.get('headers'),
+                            original = msg_dict.get('original'),
+                            context = context)
+
+#project()
 

=== modified file 'project_communications_mailgate/project_communications_mailgate.py'
--- project_communications_mailgate/project_communications_mailgate.py	2012-10-02 23:10:39 +0000
+++ project_communications_mailgate/project_communications_mailgate.py	2013-02-27 19:55:32 +0000
@@ -19,110 +19,34 @@
 #
 ##############################################################################
 
-from osv import fields,osv
-from tools.translate import _
-import binascii
-
-
-class project_communications_mailgate(osv.osv):
+from openerp.osv import fields, orm
+
+
+class project_communications_mail(orm.Model):
     _name = "project.project"
-    _inherit = ['mailgate.thread','project.project']
-    
-    _columns={
-                'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)], readonly=True),
-              }
-    
-    def message_new(self, cr, uid, msg, context=None):
-#        """
-#        Automatically calls when new email message arrives
-#
-#        @param self: The object pointer
-#        @param cr: the current row, from the database cursor,
-#        @param uid: the current user’s ID for security checks
-#        """
+    _inherit = ['mail.thread','project.project']
+    
+    _columns= {
+		'message_ids': fields.one2many(
+			'mail.message', 'res_id', 'Messages',
+			domain=[('model','=',_name)], readonly=True
+		),
+	}
+
+    def message_thread_followers(self, cr, uid, ids, context=None):
+        if not ids:
+            return {}
+        if isinstance(ids, (int, long)):
+            ids= [ids]
+
         res = {}
-#        mailgate_obj = self.pool.get('email.server.tools')
-#        subject = msg.get('subject')
-#        body = msg.get('body')
-#        msg_from = msg.get('from')
-#        priority = msg.get('priority')
-
-#        data = {      
-#            'name': subject,
-#            'description': body,
-#        }
-#        res = mailgate_obj.get_partner(cr, uid, msg_from)
-#        if res:
-#            data.update(res)
-#        res = self.create(cr, uid, data)    
-        
-#        attachments = msg.get('attachments', [])
-#        for attachment in attachments or []:
-#            data_attach = {
-#                'name': attachment,
-#                'datas':binascii.b2a_base64(str(attachments.get(attachment))),
-#                'datas_fname': attachment,
-#                'description': 'Mail attachment',
-#                'res_model': self._name,
-#                'res_id': res,
-#            }
-#            self.pool.get('ir.attachment').create(cr, uid, data_attach)
-#
-        return res           
-    
-    def message_update(self, cr, uid, id, msg, data={}, context=None): 
-        mailgate_obj = self.pool.get('email.server.tools')
-        subject = data.get('subject')
-        body = data.get('body')
-        msg_from = data.get('from')
-        msg_to = data.get('to')
-        priority = data.get('priority')
-        attachments = data.get('attachments', [])        
-
-#      msg_actions, body_data = mailgate_obj.msg_act_get(msg)           
-#       data.update({
-#           'description': body_data,            
-#       })
-#       act = 'do_'+default_act
-#       if 'state' in msg_actions:
-#           if msg_actions['state'] in ['draft','close','cancel','open','pending']:
-#               act = 'do_' + msg_actions['state']    
-
-#       if 'priority' in msg_actions:
-#           if msg_actions['priority'] in ('1','2','3','4','5'):
-#               data['priority'] = msg_actions['priority']
-#       
-#       self.write(cr, uid, [id], data)
-        msg_dict = {'new': 'Send', 'reply': 'Reply', 'forward': 'Forward'}
-        self._history(cr, uid, id, _(msg_dict['new']), history=True, subject=subject, email=msg_to, details=body, email_from=msg_from, message_id=None, attach=attachments)
-#       getattr(self,act)(cr, uid, [id])
-        return {}    
-
-    def message_followers(self, cr, uid, ids, context=None):
-        res = []
-        if isinstance(ids, (str, int, long)):
-            select = [ids]
-        else:
-            select = ids
+
         for project in self.browse(cr, uid, select, context=context):
-            user_email = (project.user_id and project.user_id.address_id and project.user_id.address_id.email) or False
-            res += [(user_email, False, False, project.priority)]
-        if isinstance(ids, (str, int, long)):
-            return len(res) and res[0] or False
+            user_email = (project.user_id and project.user_id.address_id
+                          and project.user_id.address_id.email) or False
+            if user_email:
+                res.setdefault(project.id, []).append(user_email)
+        
         return res
 
-    def msg_send(self, cr, uid, id, *args, **argv):
-        return True
-    
-    def _history(self, cr, uid, cases, keyword, history=False, subject=None, email=False, details=None, email_from=False, message_id=False, attach=[], context=None):
-        mailgate_pool = self.pool.get('mailgate.thread')
-        return mailgate_pool.history(cr, uid, cases, keyword, history=history,\
-                                       subject=subject, email=email, \
-                                       details=details, email_from=email_from,\
-                                       message_id=message_id, attach=attach, \
-                                       context=context)
-        
-
-project_communications_mailgate()
-
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'project_communications_mailgate/project_communications_mailgate_view.xml'
--- project_communications_mailgate/project_communications_mailgate_view.xml	2012-10-02 23:10:39 +0000
+++ project_communications_mailgate/project_communications_mailgate_view.xml	2013-02-27 19:55:32 +0000
@@ -7,40 +7,25 @@
 		            <field name="type">form</field>
 		            <field name="inherit_id" ref="project.edit_project"/>
 		            <field name="arch" type="xml">
-		                <xpath expr="/form/notebook/page[@string='Administration']" position="after">
+		                <!-- #Repetido en project_communications_mailgate_note_view 25/01/2013 -->
+						<xpath expr="/form/sheet/notebook/page[@string='Other Info']" position="after">
 		                    <page string="History">
-	                        	<field name="message_ids" colspan="4" nolabel="1" mode="tree,form">
-			                        <tree string="History">
-			                            <field name="display_text" string="History Information"/>
-			                        </tree>
-			                        <form string="History">
-			                            <group col="4" colspan="4">
-			                                <field name="email_from"/>
-			                                <field name="date"/>
-			                                <field name="email_to" widget="char" size="512"/>
-			                                <field name="email_cc" widget="char" size="512"/>
-			                                <field name="name" colspan="4" widget="char" size="512"/>
-			                                <field name="history" invisible="1"/>
-			                            </group>
-			                            <notebook colspan="4">
-			                                <page string="Details">
-			                                    <group attrs="{'invisible': [('history', '!=', True)]}">
-			                                        <field name="description" colspan="4" nolabel="1" height="250"/>
-			                                    </group>
-			                                    <group attrs="{'invisible': [('history', '=', True)]}">
-			                                        <field name="display_text" colspan="4" nolabel="1"  height="250"/>
-			                                    </group>
-			                                </page>
-			                                <page string="Attachments">
-			                                    <field name="attachment_ids" colspan="4" readonly="1" nolabel="1"/>
-			                                </page>
-			                            </notebook>
-			                        </form>
+	                        	<field name="message_ids" colspan="4" nolabel="1" mode="tree">
+									<tree string="History">
+										<field name="email_from" invisible="1"/>
+									</tree>
 	                    		</field>
 	                        </page>
 		                </xpath>
+		                <xpath expr="/form/header/button[@name='set_cancel']" position="after">
+			                <!--  attrs="{'invisible': [('email_from', '=', False)]}" -->
+			                <button
+								string="Reply"
+								name="%(mail.action_email_compose_message_wizard)d"
+								context="{'mail.compose.message.mode':'reply', 'message_id':active_id}"
+								icon="terp-mail-replied" type="action" />
+		                </xpath>
 		            </field>
-		       </record>
-		       		       
+		       </record>	       
 	 	</data>
 </openerp> 
\ No newline at end of file

=== modified file 'project_communications_mailgate/security/ir.model.access.csv'
--- project_communications_mailgate/security/ir.model.access.csv	2012-10-02 23:10:39 +0000
+++ project_communications_mailgate/security/ir.model.access.csv	2013-02-27 19:55:32 +0000
@@ -1,3 +0,0 @@
-"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_project_communications_mailgate_message_project_manager","project.mailgate.message.manager","mail_gateway.model_mailgate_message","project.group_project_manager",1,1,1,1
-"access_project_communications_mailgate_message_project_user","project.mailgate.message.user","mail_gateway.model_mailgate_message","project.group_project_user",1,1,1,1

=== modified file 'project_communications_mailgate_note/__openerp__.py'
--- project_communications_mailgate_note/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_communications_mailgate_note/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -25,8 +25,8 @@
     'version': '1.0',
     'category': 'Generic Modules/Projects & Services',
     'description': """This module allows to add a note or send an email from the history tab in the project form view.""",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     'depends': [
         'base',
         'crm',
@@ -48,7 +48,8 @@
     'demo_xml': [],
     'test': [],
     #'external_dependancies': {'python': ['kombu'], 'bin': ['which']},
-    'installable': True,
+    #SIN ADAPTAR
+    'installable': False,
     'active': False,
     'license': 'AGPL-3',
 }

=== modified file 'project_communications_mailgate_note/project_communications_mailgate_note_view.xml'
--- project_communications_mailgate_note/project_communications_mailgate_note_view.xml	2012-10-02 23:10:39 +0000
+++ project_communications_mailgate_note/project_communications_mailgate_note_view.xml	2013-02-27 19:55:32 +0000
@@ -9,50 +9,27 @@
             <field eval="40" name="priority"/>
             <field name="inherit_id" ref="project.edit_project"/>
             <field name="arch" type="xml">
-                 <xpath expr="/form/notebook/page[@string='History']" position="replace">
+                <xpath expr="/form/sheet/notebook/page[@string='Other Info']" position="replace">
                     <page string="History">
-                        <field name="message_ids" colspan="4" nolabel="1" mode="tree,form">
-                            <tree string="History">
-                                <field name="display_text" string="History Information"/>
-                                <field name="history" invisible="1"/>
-                                <button
-                                    string="Reply" attrs="{'invisible': [('history', '!=', True)]}"
-                                    name="%(action_project_reply_mail)d"
-                                    context="{'mail':'reply', 'model': 'project.project', 'include_original' : True}"
-                                    icon="terp-mail-replied" type="action" />
-                            </tree>
-                            <form string="History">
-                                <group col="4" colspan="4">
-                                    <field name="email_from"/>
-                                    <field name="date"/>
-                                    <field name="email_to" widget="char" size="512"/>
-                                    <field name="email_cc" widget="char" size="512"/>
-                                    <field name="name" colspan="4" widget="char" size="512"/>
-                                    <field name="history" invisible="1"/>
-                                </group>
-                                <notebook colspan="4">
-                                    <page string="Details">
-                                        <field name="description" colspan="4" nolabel="1" height="250"/>
-                                        <button colspan="4" string="Reply" name="%(action_project_reply_mail)d"
-                                            context="{'mail':'reply', 'model': 'project.project', 'include_original' : True}"
-                                            icon="terp-mail-replied" type="action" attrs="{'invisible': [('history', '!=', True)]}"/>
-                                    </page>
-                                    <page string="Attachments">
-                                        <field name="attachment_ids" colspan="4" readonly="1" nolabel="1"/>
-                                    </page>
-                                </notebook>
-                            </form>
-                        </field>
-                        <button string="Add Internal Note"
-                            name="%(action_project_add_note)d"
-                            context="{'model': 'project.project' }"
-                            icon="terp-document-new" type="action" />
-                        <button string="Send New Email"
-                            name="%(action_project_send_mail)d"
-                            context="{'mail':'new', 'model': 'project.project'}"
-                            icon="terp-mail-message-new" type="action" />
+                       	<field name="message_ids" colspan="4" nolabel="1" mode="tree">
+							<tree string="History">
+								<field name="email_from" invisible="1"/>
+								<field name="attachment_ids" colspan="4" readonly="1" nolabel="1"/>
+							</tree>
+                   		</field>
                     </page>
                 </xpath>
+                <xpath expr="/form/header/button[@name='set_cancel']" position="after">
+                       	<button string="Add Internal Note"
+                           	name="%(action_project_add_note)d"
+                           	context="{'model': 'project.project' }"
+                           	icon="terp-document-new" type="action" />
+						<button string="Send New Email"
+								name="%(mail.action_email_compose_message_wizard)d"
+                                context="{'default_composition_mode':'new', 'default_parent_id': active_id}"
+								states='received,sent,exception,cancel'
+								type="action" icon="terp-mail-replied"/>
+                </xpath>
             </field>
         </record>        
 

=== modified file 'project_communications_mailgate_note/wizard/project_communications_add_note.py'
--- project_communications_mailgate_note/wizard/project_communications_add_note.py	2012-10-02 23:10:39 +0000
+++ project_communications_mailgate_note/wizard/project_communications_add_note.py	2013-02-27 19:55:32 +0000
@@ -13,7 +13,7 @@
         'body': fields.text('Note Body', required=True),
         'state': fields.selection(AVAILABLE_STATES, string='Set New State To',
                                   required=True), 
-        'attachment_ids' : fields.one2many('crm.send.mail.attachment', 'wizard_id'),
+        'attachment_ids' : fields.one2many('project.send.mail.attachment', 'wizard_id'),
     }
 
     def action_add(self, cr, uid, ids, context=None):
@@ -35,8 +35,8 @@
             attach = [
                 (x.name, base64.decodestring(x.binary)) for x in obj.attachment_ids
             ]
-            case_pool.history(cr, uid, [case], _("Note"), history=False,
-                              details=obj.body, email_from=user_name, attach=attach)
+#            case_pool.history(cr, uid, [case], _("Note"), history=False,
+#                              details=obj.body, email_from=user_name, attach=attach)
 
             if obj.state == 'unchanged':
                 pass

=== modified file 'project_communications_mailgate_note/wizard/project_communications_send_email.py'
--- project_communications_mailgate_note/wizard/project_communications_send_email.py	2012-10-02 23:10:39 +0000
+++ project_communications_mailgate_note/wizard/project_communications_send_email.py	2013-02-27 19:55:32 +0000
@@ -37,7 +37,7 @@
     _columns = {
         'binary' : fields.binary('Attachment', required=True),
         'name' : fields.char('Name', size=128, required=True),
-        'wizard_id' : fields.many2one('crm.send.mail', 'Wizard', required=True),
+        'wizard_id' : fields.many2one('project.send.mail', 'Wizard', required=True),
     }
     
     
@@ -57,7 +57,7 @@
         'subject': fields.char('Subject', size=512, required=True),
         'body': fields.text('Message Body', required=True),
         'state': fields.selection(AVAILABLE_STATES, string='Set New State To', required=True),
-        'attachment_ids' : fields.one2many('crm.send.mail.attachment', 'wizard_id'),
+        'attachment_ids' : fields.one2many('project.send.mail.attachment', 'wizard_id'),
         'html': fields.boolean('HTML formatting?', help="Select this if you want to send email with HTML formatting."),
     }
 

=== modified file 'project_communications_meetings/__openerp__.py'
--- project_communications_meetings/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_communications_meetings/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,7 +23,7 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
+    "author": "Eficent, Nervia Consultores",
     "website": "http://www.eficent.com";,
     "category": "Generic Modules/Projects & Services",
     "depends": ["project","crm", "google_calendar"],
@@ -47,7 +47,8 @@
     ],
     'test':[
     ],
-    'installable': True,
+    #SIN ADAPTAR
+    'installable': False,
     'active': False,
     'certificate': '',
 }

=== modified file 'project_communications_meetings/project_view.xml'
--- project_communications_meetings/project_view.xml	2012-10-02 23:10:39 +0000
+++ project_communications_meetings/project_view.xml	2013-02-27 19:55:32 +0000
@@ -24,7 +24,7 @@
             
 
     <menuitem id="menu_project_meeting_categories_def_act"
-            name="Meeting Categories" parent="project.menu_definitions"
+            name="Meeting Categories" parent="base.menu_definitions"
             sequence="10" action="crm.crm_meeting_categ_action"
             groups="project.group_project_manager" />
 
@@ -50,7 +50,7 @@
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
             <field name="arch" type="xml">
-            	<page string='Administration' position="after">
+            	<page string='Other Info' position="after">
 	            	<page string="Meetings">
 	                        <field colspan="4" name="crm_meetings" nolabel="1"  mode="tree,form" context="{'default_project_id': active_id}"/>
 	                </page>  

=== modified file 'project_communications_meetings/security/ir.model.access.csv'
--- project_communications_meetings/security/ir.model.access.csv	2012-10-02 23:10:39 +0000
+++ project_communications_meetings/security/ir.model.access.csv	2013-02-27 19:55:32 +0000
@@ -1,10 +1,6 @@
 "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
 "access_crm_meetings_project_manager","crm.meeting.manager","crm.model_crm_meeting","project.group_project_manager",1,1,1,1
 "access_crm_meetings_project_user","crm.meeting.user","crm.model_crm_meeting","project.group_project_user",1,1,1,1
-"mail_gateway_mailgate_message_project_manager","mail_gateway.mailgate.message.manager","mail_gateway.model_mailgate_message","project.group_project_manager",1,1,1,1
-"mail_gateway_mailgate_thread_project_manager","mail_gateway.mailgate.thread.manager","mail_gateway.model_mailgate_thread","project.group_project_manager",1,1,1,1
-"mail_gateway_mailgate_thread_project_user","mail_gateway.mailgate.thread","mail_gateway.model_mailgate_thread","project.group_project_user",1,1,1,1
-"mail_gateway_mailgate_message_project_user","mail_gateway.mailgate.message.user","mail_gateway.model_mailgate_message","project.group_project_user",1,1,1,1
 "access_calendar_attendee_crm_project_user","calendar.attendee.crm.user","crm.model_calendar_attendee","project.group_project_user",1,1,1,1
 "access_calendar_attendee_crm_project_manager","calendar.attendee.crm.manager","crm.model_calendar_attendee","project.group_project_manager",1,1,1,1
 "access_res_partner_project_user","res.partner.crm.user","base.model_res_partner","project.group_project_user",1,1,1,1

=== modified file 'project_cost/__openerp__.py'
--- project_cost/__openerp__.py	2012-10-07 23:01:43 +0000
+++ project_cost/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -22,8 +22,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["account","product", "analytic", "board", "project", "purchase","hr_timesheet", "sale"],
     "description": """Eficent Project Management. Project Cost Planning

=== modified file 'project_cost/account_analytic_account.py'
--- project_cost/account_analytic_account.py	2012-10-02 23:10:39 +0000
+++ project_cost/account_analytic_account.py	2013-02-27 19:55:32 +0000
@@ -33,7 +33,10 @@
     _inherit = 'account.analytic.account'
     
     def _compute_level_tree_plan(self, cr, uid, ids, child_ids, res, field_names, context=None):
-        def recursive_computation(account_id, res, repeated_account_ids=[]):
+        osv.logging.log(100, "36:project_cost/account_analytic_account:_compute_level_tree_plan")
+        def recursive_computation(account_id, res, repeated_account_ids=None):
+            if repeated_account_ids is None:
+                repeated_account_ids = []
             currency_obj = self.pool.get('res.currency')
             account = self.browse(cr, uid, account_id)
             for son in account.child_ids:
@@ -54,6 +57,7 @@
         return res    
     
     def _compute_level_tree_commit(self, cr, uid, ids, child_ids, res, field_names, context=None):
+        osv.logging.log(100, "60:project_cost/account_analytic_account:_compute_level_tree_commit")
         def recursive_computation(account_id, res, repeated_account_ids=[]):
             currency_obj = self.pool.get('res.currency')
             account = self.browse(cr, uid, account_id)
@@ -75,6 +79,7 @@
         return res    
     
     def _debit_credit_bal_qtty_plan(self, cr, uid, ids, name, arg, context=None):
+        osv.logging.log(100, "82:project_cost/account_analytic_account:_debit_credit_bal_qtty_plan")
         res = {}
         if context is None:
             context = {}
@@ -121,6 +126,7 @@
         return self._compute_level_tree_plan(cr, uid, ids, child_ids, res, ['debit_plan', 'credit_plan', 'balance_plan', 'quantity_plan'], context)
 
     def _debit_credit_bal_qtty_commit(self, cr, uid, ids, name, arg, context=None):
+        osv.logging.log(100, "129:project_cost/account_analytic_account:_debit_credit_bal_qtty_commit")
         res = {}
         if context is None:
             context = {}
@@ -178,6 +184,8 @@
         'debit_commit': fields.function(_debit_credit_bal_qtty_commit, method=True, type='float', string='Planned Commitments', multi='debit_credit_bal_qtty_commit', digits_compute=dp.get_precision('Account')),
         'credit_plan': fields.function(_debit_credit_bal_qtty_plan, method=True, type='float', string='Planned Credit', multi='debit_credit_bal_qtty_plan', digits_compute=dp.get_precision('Account')),
         'credit_commit': fields.function(_debit_credit_bal_qtty_commit, method=True, type='float', string='Commitments Credit', multi='debit_credit_bal_qtty_commit', digits_compute=dp.get_precision('Account')),
+        'quantity_plan': fields.function(_debit_credit_bal_qtty_plan, method=True, type='float', string='Quantity Debit', multi='debit_credit_bal_qtty_plan', digits_compute=dp.get_precision('Account')),
+        'quantity_commit': fields.function(_debit_credit_bal_qtty_commit, method=True, type='float', string='Quantity Commitments', multi='debit_credit_bal_qtty_commit', digits_compute=dp.get_precision('Account')),
         'state': fields.selection([('draft','Draft'),('ready','Ready'),('open','Open'), ('pending','Pending'),('cancelled', 'Cancelled'),('close','Closed'),('template', 'Template')], 'State', required=True,
                                   help='* When an account is created its in \'Draft\' state.\
                                   \n* When is ready to be used, it can be in \'Ready\' state.\
@@ -196,11 +204,13 @@
     }
     
     def set_ready(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "205:project_cost/account_analytic_account:set_ready")
         self.write(cr, uid, ids, {'state':'ready'}, context=context)
         return True
     
     def copy(self, cr, uid, id, default=None, context=None):
-        if not default:
+        osv.logging.log(100, "210:project_cost/account_analytic_account:copy")
+        if default is None:
             default = {}        
         default['plan_line_ids'] = []
         default['commit_line_ids'] = []

=== modified file 'project_cost/account_analytic_account_view.xml'
--- project_cost/account_analytic_account_view.xml	2012-10-02 23:10:39 +0000
+++ project_cost/account_analytic_account_view.xml	2013-02-27 19:55:32 +0000
@@ -47,104 +47,107 @@
             <field name="name">account.analytic.account.form</field>
             <field name="model">account.analytic.account</field>
             <field name="type">form</field>
-            <field name="inherit_id" ref="account.view_account_analytic_account_form"/>
+            <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
             <field name="arch" type="xml">
-            	<page string='Description' position="after">
-	            	<page string="Costs">
-	            			<field colspan="4" name="line_ids" nolabel="1" context="{'default_account_id': active_id}"/>
-	                        <field colspan="4" name="plan_line_ids" nolabel="1" context="{'default_account_id': active_id}">
-	                            <tree string="Planned analytic lines">	                            	
-				                    <field name="date"/>
-				                    <field name="period_id"/>
-				                    <field name="ref" />
-				                    <field name="name"/>
-				                    <field name="journal_id" invisible="False"/>
-				                    <field name="amount" sum="Total" />
-				                    <field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)" />
-				                    <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total Quantity" />
-				                    <field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)"/>
-				                    <field name="general_account_id" />
-				                    <field name="user_id" invisible="True"/>
-	                            </tree>
-	                            <form string="Planned analytic lines">	                            	
-				                    <group colspan="4" col="6">
-				                        <field name="name"/>
-				                        <field name="ref"/>
-				                        <field name="account_id" invisible="True"/>
-				                        <field name="journal_id"/>
-				                        <field name="date"/>
-				                        <field name="period_id"/>
-				                        <field name="company_id" groups="base.group_multi_company"/>
-				                    </group>
-				                    <group colspan="2" col="4">
-				                        <separator string="Amount" colspan="4"/>
-				                        <field name="amount" colspan="4"/>
-				                        <field name="amount_currency" colspan="2"/>
-				                        <field name="currency_id" colspan="2" nolabel="1"/>
-				                    </group>
-				                    <group colspan="2" col="4">
-				                        <separator string="Product Information" colspan="4"/>
-				                        <field name="product_id" colspan="4" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-				                        <field name="unit_amount" colspan="2" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-				                        <field name="product_uom_id" colspan="2" nolabel="1" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-				                    </group>
-				                    <group colspan="2" col="2" groups="base.group_extended">
-				                        <separator string="General Accounting" colspan="2"/>
-				                        <field name="general_account_id"/>
-				                        <field name="move_id" readonly="1"/>
-				                    </group>
-	                            </form>
-	                         </field>
-							<field colspan="4" name="commit_line_ids" nolabel="1" context="{'default_account_id': active_id}">
-	                            <tree string="Commitment analytic lines">	                            	
-				                    <field name="date"/>
-				                    <field name="period_id"/>
-				                    <field name="ref" />
-				                    <field name="name"/>
-				                    <field name="journal_id" invisible="False"/>
-				                    <field name="amount" sum="Total" />
-				                    <field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)" />
-				                    <field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total Quantity" />
-				                    <field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)"/>
-				                    <field name="general_account_id" />
-				                    <field name="user_id" invisible="True"/>
-	                            </tree>
-	                            <form string="Commitment analytic lines">	                            	
-				                    <group colspan="4" col="6">
-				                        <field name="name"/>
-				                        <field name="ref"/>
-				                        <field name="account_id" invisible="True"/>
-				                        <field name="journal_id"/>
-				                        <field name="date"/>
-				                        <field name="period_id"/>
-				                        <field name="company_id" groups="base.group_multi_company"/>
-				                    </group>
-				                    <group colspan="2" col="4">
-				                        <separator string="Amount" colspan="4"/>
-				                        <field name="amount" colspan="4"/>
-				                        <field name="amount_currency" colspan="2"/>
-				                        <field name="currency_id" colspan="2" nolabel="1"/>
-				                    </group>
-				                    <group colspan="2" col="4">
-				                        <separator string="Product Information" colspan="4"/>
-				                        <field name="product_id" colspan="4" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-				                        <field name="unit_amount" colspan="2" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-				                        <field name="product_uom_id" colspan="2" nolabel="1" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-				                    </group>
-				                    <group colspan="2" col="2" groups="base.group_extended">
-				                        <separator string="General Accounting" colspan="2"/>
-				                        <field name="general_account_id"/>
-				                        <field name="move_id" readonly="1"/>
-				                    </group>
-	                            </form>
-	                         </field>	                         
-	                 </page>  
-				</page>	 
+				<form string="Analytic Account" version="7.0">
+                    <sheet string="Analytic Account">
+						<notebook>
+							<page string="Description" position="after">
+								<page string="Costs">
+										<field colspan="4" name="line_ids" nolabel="1" context="{'default_account_id': active_id}"/>
+										<field colspan="4" name="plan_line_ids" nolabel="1" context="{'default_account_id': active_id}">
+											<tree string="Planned analytic lines">	                            	
+												<field name="date"/>
+												<field name="period_id"/>
+												<field name="ref" />
+												<field name="name"/>
+												<field name="journal_id" invisible="False"/>
+												<field name="amount" sum="Total" />
+												<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)" />
+												<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total Quantity" />
+												<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)"/>
+												<field name="general_account_id" />
+												<field name="user_id" invisible="True"/>
+											</tree>
+											<form string="Planned analytic lines">	                            	
+												<group colspan="4" col="6">
+													<field name="name"/>
+													<field name="ref"/>
+													<field name="account_id" invisible="True"/>
+													<field name="journal_id"/>
+													<field name="date"/>
+													<field name="period_id"/>
+													<field name="company_id" groups="base.group_multi_company"/>
+												</group>
+												<group colspan="2" col="4">
+													<separator string="Amount" colspan="4"/>
+													<field name="amount" colspan="4"/>
+													<field name="amount_currency" colspan="2"/>
+													<field name="currency_id" colspan="2" nolabel="1"/>
+												</group>
+												<group colspan="2" col="4">
+													<separator string="Product Information" colspan="4"/>
+													<field name="product_id" colspan="4" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
+													<field name="unit_amount" colspan="2" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
+													<field name="product_uom_id" colspan="2" nolabel="1" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
+												</group>
+												<group colspan="2" col="2" groups="base.group_erp_manager">
+													<separator string="General Accounting" colspan="2"/>
+													<field name="general_account_id"/>
+													<field name="move_id" readonly="1"/>
+												</group>
+											</form>
+										</field>
+										<field colspan="4" name="commit_line_ids" nolabel="1" context="{'default_account_id': active_id}">
+											<tree string="Commitment analytic lines">	                            	
+												<field name="date"/>
+												<field name="period_id"/>
+												<field name="ref" />
+												<field name="name"/>
+												<field name="journal_id" invisible="False"/>
+												<field name="amount" sum="Total" />
+												<field name="product_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)" />
+												<field name="unit_amount" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)" sum="Total Quantity" />
+												<field name="product_uom_id" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id)"/>
+												<field name="general_account_id" />
+												<field name="user_id" invisible="True"/>
+											</tree>
+											<form string="Commitment analytic lines">	                            	
+												<group colspan="4" col="6">
+													<field name="name"/>
+													<field name="ref"/>
+													<field name="account_id" invisible="True"/>
+													<field name="journal_id"/>
+													<field name="date"/>
+													<field name="period_id"/>
+													<field name="company_id" groups="base.group_multi_company"/>
+												</group>
+												<group colspan="2" col="4">
+													<separator string="Amount" colspan="4"/>
+													<field name="amount" colspan="4"/>
+													<field name="amount_currency" colspan="2"/>
+													<field name="currency_id" colspan="2" nolabel="1"/>
+												</group>
+												<group colspan="2" col="4">
+													<separator string="Product Information" colspan="4"/>
+													<field name="product_id" colspan="4" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
+													<field name="unit_amount" colspan="2" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
+													<field name="product_uom_id" colspan="2" nolabel="1" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
+												</group>
+												<group colspan="2" col="2" groups="base.group_erp_manager">
+													<separator string="General Accounting" colspan="2"/>
+													<field name="general_account_id"/>
+													<field name="move_id" readonly="1"/>
+												</group>
+											</form>
+										</field>	                         
+								 </page>  
+							</page>
+						</notebook>
+					</sheet>
+				</form>
             </field>            	        
         </record>   						        	            	        
          	                    
     </data>
 </openerp>
-        	
-        	
-                 	
\ No newline at end of file

=== modified file 'project_cost/account_analytic_journal_commit_report.xml'
--- project_cost/account_analytic_journal_commit_report.xml	2012-10-02 23:10:39 +0000
+++ project_cost/account_analytic_journal_commit_report.xml	2013-02-27 19:55:32 +0000
@@ -1,10 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
     <data>
-        <report auto="False" id="account_analytic_journal_commit_print" menu="False"
+        <report auto="False" id="account_analytic_journal_commit_print1" menu="False"
             model="account.analytic.journal.commit" name="account.analytic.account.journal.commit"
             rml="project_cost/report/account_analytic_journal_commit.rml" string="Commitments Analytic Journal"/>
-
-
     </data>
-</openerp>
+</openerp>
\ No newline at end of file

=== modified file 'project_cost/account_analytic_journal_plan_report.xml'
--- project_cost/account_analytic_journal_plan_report.xml	2012-10-02 23:10:39 +0000
+++ project_cost/account_analytic_journal_plan_report.xml	2013-02-27 19:55:32 +0000
@@ -1,10 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
     <data>
-        <report auto="False" id="account_analytic_journal_plan_print" menu="False"
+        <report auto="False" id="account_analytic_journal_plan_print1" menu="False"
             model="account.analytic.journal.plan" name="account.analytic.account.journal.plan"
             rml="project_cost/report/account_analytic_journal_plan.rml" string="Planning Analytic Journal"/>
-
-
     </data>
-</openerp>
+</openerp>
\ No newline at end of file

=== modified file 'project_cost/account_analytic_line_plan.py'
--- project_cost/account_analytic_line_plan.py	2012-10-02 23:10:39 +0000
+++ project_cost/account_analytic_line_plan.py	2013-02-27 19:55:32 +0000
@@ -35,6 +35,7 @@
     
     
     def _get_period(self, cr, uid, context=None):
+        osv.logging.log(100, "[Alca]: 38:project_cost/account_analytic_line_plan:_get_period")
         periods = self.pool.get('account.period').find(cr, uid)
         if periods:
             return periods[0]
@@ -71,6 +72,7 @@
     _order = 'date desc'
 
     def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
+        osv.logging.log(100, "[Alca]: 75:project_cost/account_analytic_line_plan:search")
         if context is None:
             context = {}
         if context.get('from_date',False):
@@ -81,6 +83,7 @@
                 order, context=context, count=count)
 
     def _check_company(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "[Alca]: 86:project_cost/account_analytic_line_plan:_check_company")
         lines = self.browse(cr, uid, ids, context=context)
         for l in lines:
             if l.move_id and not l.account_id.company_id.id == l.move_id.account_id.company_id.id:
@@ -91,6 +94,7 @@
     # property_valuation_price_type property
     def on_change_unit_amount(self, cr, uid, id, prod_id, quantity, company_id,
             unit=False, journal_id=False, context=None):
+        osv.logging.log(100, "[Alca]: 97:project_cost/account_analytic_line_plan:on_change_unit_amount")
         
         res={}
         
@@ -171,6 +175,7 @@
         return res
 
     def view_header_get(self, cr, user, view_id, view_type, context=None):
+        osv.logging.log(100, "[Alca]: 178:project_cost/account_analytic_line_plan:view_header_get")
         if context is None:
             context = {}
         if context.get('account_id', False):

=== modified file 'project_cost/account_analytic_line_plan_view.xml'
--- project_cost/account_analytic_line_plan_view.xml	2012-10-02 23:10:39 +0000
+++ project_cost/account_analytic_line_plan_view.xml	2013-02-27 19:55:32 +0000
@@ -34,7 +34,7 @@
                         <field name="product_uom_id" colspan="2" nolabel="1"/>
                         <field name="user_id" colspan="2"/>
                     </group>
-                    <group colspan="2" col="2" groups="base.group_extended">
+                    <group colspan="2" col="2" groups="base.group_erp_manager">
                         <separator string="General Accounting" colspan="2"/>
                         <field name="general_account_id"/>
                         <field name="move_id" readonly="1"/>
@@ -72,7 +72,7 @@
                 	    <filter name="edit"
                             string="Edit"  context="{'set_editable':True,'seq_visible': True}"
                             icon="gtk-execute"
-                            groups="base.group_extended"/>
+                            groups="base.group_erp_manager"/>
                         <field name="date"/>
                         <field name="name"/>
                         <field name="account_id"/>

=== modified file 'project_cost/project_view.xml'
--- project_cost/project_view.xml	2012-10-02 23:10:39 +0000
+++ project_cost/project_view.xml	2013-02-27 19:55:32 +0000
@@ -17,7 +17,7 @@
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
             <field name="arch" type="xml">
-            	<page string='Administration' position="after">
+            	<page string='Other Info' position="after">
 	            	<page string="Costs">
 							<field colspan="4" name="line_ids" nolabel="1" readonly="True" context="{'default_account_id': active_id}"/>
 	                        <field colspan="4" name="plan_line_ids" nolabel="1" context="{'default_account_id': active_id}">
@@ -57,7 +57,7 @@
 				                        <field name="product_uom_id" colspan="2" nolabel="1" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
 				                        <field name="user_id" colspan="2"/>
 				                    </group>
-				                    <group colspan="2" col="2" groups="base.group_extended">
+				                    <group colspan="2" col="2" groups="base.group_erp_manager">
 				                        <separator string="General Accounting" colspan="2"/>
 				                        <field name="general_account_id" invisible="True"/>
 				                        <field name="move_id" readonly="1" invisible="True"/>
@@ -101,7 +101,7 @@
 				                        <field name="product_uom_id" colspan="2" nolabel="1" on_change="on_change_unit_amount(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
 				                        <field name="user_id" colspan="2"/>
 				                    </group>
-				                    <group colspan="2" col="2" groups="base.group_extended">
+				                    <group colspan="2" col="2" groups="base.group_erp_manager">
 				                        <separator string="General Accounting" colspan="2"/>
 				                        <field name="general_account_id" invisible="True"/>
 				                        <field name="move_id" readonly="1" invisible="True"/>

=== modified file 'project_cost/wizard/account_analytic_journal_commit_report.py'
--- project_cost/wizard/account_analytic_journal_commit_report.py	2012-10-07 22:56:39 +0000
+++ project_cost/wizard/account_analytic_journal_commit_report.py	2013-02-27 19:55:32 +0000
@@ -23,7 +23,7 @@
 from osv import osv, fields
 
 class account_analytic_journal_commit_report(osv.osv_memory):
-    _name = 'account.analytic.journal.commit.report'
+    _name = 'account_analytic_journal_commit_report'
     _description = 'Account Analytic Commitment Journal'
 
     _columns = {

=== modified file 'project_cost/wizard/account_analytic_journal_commit_report_view.xml'
--- project_cost/wizard/account_analytic_journal_commit_report_view.xml	2012-10-07 22:56:39 +0000
+++ project_cost/wizard/account_analytic_journal_commit_report_view.xml	2013-02-27 19:55:32 +0000
@@ -4,7 +4,7 @@
 
 		<record id="account_analytic_journal_commit_view" model="ir.ui.view">
 			<field name="name">Account Analytic Commitment Journal</field>
-			<field name="model">account.analytic.journal.commit.report</field>
+			<field name="model">account_analytic_journal_commit_report</field>
 			<field name="type">form</field>
 			<field name="arch" type="xml">
 				<form string="Select Period">
@@ -24,7 +24,7 @@
 		<record id="action_account_analytic_journal_commit" model="ir.actions.act_window">
 			<field name="name">Analytic Commitments Journal</field>
 			<field name="type">ir.actions.act_window</field>
-			<field name="res_model">account.analytic.journal.commit.report</field>
+			<field name="res_model">account_analytic_journal_commit_report</field>
 			<field name="view_type">form</field>
 			<field name="view_mode">form</field>
 			<field name="view_id" ref="account_analytic_journal_commit_view"/>

=== modified file 'project_cost/wizard/account_analytic_journal_plan_report.py'
--- project_cost/wizard/account_analytic_journal_plan_report.py	2012-10-07 22:56:39 +0000
+++ project_cost/wizard/account_analytic_journal_plan_report.py	2013-02-27 19:55:32 +0000
@@ -23,7 +23,7 @@
 from osv import osv, fields
 
 class account_analytic_journal_plan_report(osv.osv_memory):
-    _name = 'account.analytic.journal.plan.report'
+    _name = 'account_analytic_journal_plan_report'
     _description = 'Account Analytic Planning Journal'
 
     _columns = {

=== modified file 'project_cost/wizard/account_analytic_journal_plan_report_view.xml'
--- project_cost/wizard/account_analytic_journal_plan_report_view.xml	2012-10-07 22:56:39 +0000
+++ project_cost/wizard/account_analytic_journal_plan_report_view.xml	2013-02-27 19:55:32 +0000
@@ -4,7 +4,7 @@
 
 		<record id="account_analytic_journal_plan_view" model="ir.ui.view">
 			<field name="name">Account Analytic Planning Journal</field>
-			<field name="model">account.analytic.journal.plan.report</field>
+			<field name="model">account_analytic_journal_plan_report</field>
 			<field name="type">form</field>
 			<field name="arch" type="xml">
 				<form string="Select Period">
@@ -24,7 +24,7 @@
 		<record id="action_account_analytic_journal_plan" model="ir.actions.act_window">
 			<field name="name">Analytic Planning Journal</field>
 			<field name="type">ir.actions.act_window</field>
-			<field name="res_model">account.analytic.journal.plan.report</field>
+			<field name="res_model">account_analytic_journal_plan_report</field>
 			<field name="view_type">form</field>
 			<field name="view_mode">form</field>
 			<field name="view_id" ref="account_analytic_journal_plan_view"/>

=== modified file 'project_cost_analysis/__openerp__.py'
--- project_cost_analysis/__openerp__.py	2012-10-07 23:07:00 +0000
+++ project_cost_analysis/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,8 +23,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["account","account_budget", "product", "analytic", "board", "project","project_scope_wbs","project_cost"],
     "description": """Eficent Project Management. Project Cost Analysis

=== modified file 'project_cost_analysis/report/account_analytic_resource_usage_product_view.xml'
--- project_cost_analysis/report/account_analytic_resource_usage_product_view.xml	2012-10-02 23:10:39 +0000
+++ project_cost_analysis/report/account_analytic_resource_usage_product_view.xml	2013-02-27 19:55:32 +0000
@@ -151,7 +151,7 @@
 
 
         <menuitem
-            name="Resource Usage by Product Dashboard" parent="project.next_id_86"
+            name="Resource Usage by Product Dashboard" parent="base.menu_project_report"
             action="open_board_resource_usage_product"
             sequence="0"
             id="menu_board_resource_usage_product"

=== modified file 'project_cost_analysis/report/account_analytic_resource_usage_view.xml'
--- project_cost_analysis/report/account_analytic_resource_usage_view.xml	2012-10-02 23:10:39 +0000
+++ project_cost_analysis/report/account_analytic_resource_usage_view.xml	2013-02-27 19:55:32 +0000
@@ -158,7 +158,7 @@
 
 
         <menuitem
-            name="Resource Usage Dashboard" parent="project.next_id_86"
+            name="Resource Usage Dashboard" parent="base.menu_project_report"
             action="open_board_resource_usage"
             sequence="0"
             id="menu_board_resource_usage"

=== modified file 'project_cost_analysis/report/analytic_balance_plan.py'
--- project_cost_analysis/report/analytic_balance_plan.py	2012-10-02 23:10:39 +0000
+++ project_cost_analysis/report/analytic_balance_plan.py	2013-02-27 19:55:32 +0000
@@ -115,6 +115,7 @@
         return self.cr.fetchone()[0] or 0.0
 
     def _move_sum_plan(self, account_id, date1, date2, option):
+        osv.logging.log(100, "118:project_cost_analysis/report/analytic_balance_plan:_move_sum_plan")
         if account_id not in self.acc_data_dict_plan:
             account_analytic_obj = self.pool.get('account.analytic.account')
             ids = account_analytic_obj.search(self.cr, self.uid,[('parent_id', 'child_of', [account_id])])
@@ -138,6 +139,7 @@
         return self.cr.fetchone()[0] or 0.0
 
     def _move_sum_commit(self, account_id, date1, date2, option):
+        osv.logging.log(100, "142:project_cost_analysis/report/analytic_balance_plan:_move_sum_commit")
         if account_id not in self.acc_data_dict_commit:
             account_analytic_obj = self.pool.get('account.analytic.account')
             ids = account_analytic_obj.search(self.cr, self.uid,[('parent_id', 'child_of', [account_id])])

=== modified file 'project_cost_commit_hr_timesheet/__openerp__.py'
--- project_cost_commit_hr_timesheet/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_cost_commit_hr_timesheet/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -22,8 +22,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["project_cost","hr_timesheet"],
     "description": """Eficent Project Management. Project Cost Planning Integration with HR Timesheets

=== modified file 'project_cost_commit_hr_timesheet/hr_timesheet.py'
--- project_cost_commit_hr_timesheet/hr_timesheet.py	2012-10-02 23:10:39 +0000
+++ project_cost_commit_hr_timesheet/hr_timesheet.py	2013-02-27 19:55:32 +0000
@@ -18,7 +18,7 @@
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
-
+import pdb
 import time
 
 from osv import fields
@@ -34,6 +34,7 @@
     }
 
     def _getAnalyticCommitmentJournal(self, cr, uid, context=None):
+        osv.logging.log(100, "[Alca]: 37:project_cost_commit_hr_timesheet/hr_timesheet:_getAnalyticCommitmentJournal")
         md = self.pool.get('ir.model.data')
         try:
             result = md.get_object_reference(cr, uid, 'hr_timesheet', 'analytic_commitment_journal')
@@ -59,17 +60,26 @@
 
 
     def _getAnalyticCommitmentJournal(self, cr, uid, context=None):
+        osv.logging.log(100, "[Alca]: 63:project_cost_commit_hr_timesheet/hr_timesheet:_getAnalyticCommitmentJournal")
         emp_obj = self.pool.get('hr.employee')
+
         if context is None:
             context = {}
         emp_id = emp_obj.search(cr, uid, [('user_id', '=', context.get('user_id', uid))], context=context)
+        osv.logging.log(101, "[Alca]: "+str(emp_id))
         if emp_id:
             emp = emp_obj.browse(cr, uid, emp_id[0], context=context)
-            if emp.commitment_journal_id:
-                return emp.commitment_journal_id.id
+            
+            osv.logging.log(101, "[Alca]: "+str(emp.journal_id))
+            osv.logging.log(101, "[Alca]: "+str(emp.commitment_journal_id))
+            if emp.journal_id:
+                return emp.journal_id.id
+#            if emp.commitment_journal_id:
+#                return emp.commitment_journal_id.id
         return False
     
     def wkf_analytic_line_commit(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "[Alca]: 75:project_cost_commit_hr_timesheet/hr_timesheet:wkf_analytic_line_commit")
         acc_ana_line_obj = self.pool.get('account.analytic.line.commit')
         for obj in self.browse(cr, uid, ids, context=context):
             vals_lines = {
@@ -98,6 +108,7 @@
 
         
     def write(self, cr, uid, ids, vals, context=None):
+        osv.logging.log(100, "[Alca]: 104:project_cost_commit_hr_timesheet/hr_timesheet:write")
         res = super(hr_analytic_timesheet, self).write(cr, uid, ids, vals, context=context)
             
         self.wkf_analytic_line_commit(cr, uid, ids, context=context)
@@ -106,10 +117,12 @@
     
         
     def unlink(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "[Alca]: 113:project_cost_commit_hr_timesheet/hr_timesheet:unlink")
         toremove = {}
         for obj in self.browse(cr, uid, ids, context=context):
             if obj.line_commit_id:
-                toremove[obj.line_commit_id.id] = True
+                for commit_line_id in obj.line_commit_id:
+                    toremove[commit_line_id.id] = True
         if toremove:
             self.pool.get('account.analytic.line.commit').unlink(cr, uid, toremove.keys(), context=context)
         return super(hr_analytic_timesheet, self).unlink(cr, uid, ids, context=context)

=== modified file 'project_cost_commit_purchase/__openerp__.py'
--- project_cost_commit_purchase/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_cost_commit_purchase/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -22,8 +22,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["project_cost", "purchase"],
     "description": """Eficent Project Management. Maintain analytic commitments associated to purchase orders         

=== modified file 'project_cost_commit_sale/__openerp__.py'
--- project_cost_commit_sale/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_cost_commit_sale/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -22,8 +22,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["project_cost", "purchase"],
     "description": """Eficent Project Management. Maintain analytic commitments associated to purchase orders         

=== modified file 'project_cost_plan_purchase/__openerp__.py'
--- project_cost_plan_purchase/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_cost_plan_purchase/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -22,8 +22,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["project_cost", "project_procurement", "purchase", "account_payment"],
     "description": """Eficent Project Management. Maintain analytic planned costs associated to purchase orders         

=== modified file 'project_cost_plan_purchase/account_analytic_line_plan.py'
--- project_cost_plan_purchase/account_analytic_line_plan.py	2012-10-02 23:10:39 +0000
+++ project_cost_plan_purchase/account_analytic_line_plan.py	2013-02-27 19:55:32 +0000
@@ -36,37 +36,42 @@
     _columns = {
         'purchase_line_id': fields.many2one('purchase.order.line', 'Purchase Order Line', select=True),
         'purchase_order_id':fields.related('purchase_line_id', 'order_id', type='many2one' , relation='purchase.order', string='Purchase Order', store=True, readonly=True),
-        'supplier_id': fields.many2one('res.partner', 'Supplier', requrired=False ,domain=[('supplier', '=', True)]),
+        'supplier_id': fields.many2one('res.partner', 'Supplier', required=False ,domain=[('supplier', '=', True)]),
         'pricelist_id':fields.many2one('product.pricelist', 'Pricelist', required=False),
         'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Purchase Price')),
-        'purchase_amount': fields.float('Purchase Amount', required=True, digits_compute= dp.get_precision('Purchase Price')),                
+        'purchase_amount': fields.float('Purchase Amount', required=True, digits_compute= dp.get_precision('Purchase Price')),              
     }
 
 
-    def copy(self, cr, uid, id, default={}, context=None):
+    def copy(self, cr, uid, id, default=None, context=None):
+        osv.logging.log(100, "[Alca]: 47:project_cost_plan_purchase/account_analytic_line_plan:copy")
         if context is None:
             context = {}
         
-        if not default:
+        if default is None:
             default = {}        
                 
         default['purchase_line_id'] = False
-                
-        return super(account_analytic_line_plan, self).copy(cr, uid, id, default, context)
+        
+        res = super(account_analytic_line_plan, self).copy(cr, uid, id, default, context)
+        return res
 
-    def copy_data(self, cr, uid, id, default={}, context=None):
+    def copy_data(self, cr, uid, id, default=None, context=None):
+        osv.logging.log(100, "[Alca]: 60:project_cost_plan_purchase/account_analytic_line_plan:copy_data")
 
         if context is None:
             context = {}
         
-        if not default:
+        if default is None:
             default = {}   
                 
         default['purchase_line_id'] = False
-                
-        return super(account_analytic_line_plan, self).copy_data(cr, uid, id, default, context)
+        
+        res = super(account_analytic_line_plan, self).copy_data(cr, uid, id, default, context)
+        return res
 
     def on_change_purchase_amount(self, cr, uid, id, purchase_amount, context=None):
+        osv.logging.log(100, "[Alca]: 74:project_cost_plan_purchase/account_analytic_line_plan:on_change_purchase_amount")
         
         result = {'amount': -1 * purchase_amount }
         
@@ -76,6 +81,7 @@
     # property_valuation_price_type property
     def get_general_account_id_purchase(self, cr, uid, id, prod_id, qty, company_id,
             unit=False, journal_id=False, context=None):
+        osv.logging.log(100, "[Alca]: 84:project_cost_plan_purchase/account_analytic_line_plan:get_general_account_id_purchase")
 
         result = False
         
@@ -92,7 +98,7 @@
         
         analytic_journal_obj =self.pool.get('account.analytic.journal.plan')
         j_id = analytic_journal_obj.browse(cr, uid, journal_id, context=context)
-                
+        #TODO: Este sale no seria purchase???        
         if j_id.type <> 'sale':
             a = prod.product_tmpl_id.property_account_expense.id
             if not a:
@@ -117,12 +123,13 @@
         
     def on_change_unit_amount_purchase(self, cr, uid, id, price, prod_id, qty, company_id,
             unit=False, journal_id=False, context=None):
+        osv.logging.log(100, "[Alca]: 126:project_cost_plan_purchase/account_analytic_line_plan:on_change_unit_amount_purchase")
                 
         if context==None:
             context={}
             
         purchase_amount = price * qty
-        amount = -1*price * qty   
+        amount = -1 * price * qty   
         
         
         result = {
@@ -133,6 +140,7 @@
                             
     def product_uom_change_purchase(self, cr, uid, ids, pricelist, product, company_id, qty, uom, price, journal_id,
         partner_id, price_unit=False):
+        osv.logging.log(100, "[Alca]: 143:project_cost_plan_purchase/account_analytic_line_plan:product_uom_change_purchase")
         
         res = self.product_id_change_purchase(cr, uid, ids, pricelist, product, company_id, qty, uom, price, journal_id,
                 partner_id, date=date, price_unit=price_unit)
@@ -147,7 +155,7 @@
         return res    
     
     def onchange_supplier_id(self, cr, uid, ids, part):
-        
+        osv.logging.log(100, "[Alca]: 158:project_cost_plan_purchase/account_analytic_line_plan:onchange_supplier_id")
         pricelist = False
         
         if part:
@@ -159,6 +167,7 @@
 
     def product_id_change_purchase(self, cr, uid, ids, pricelist, product, company_id, qty, uom, price, journal_id,
             partner_id, date=False, price_unit=False):
+        osv.logging.log(100, "[Alca]: 170:project_cost_plan_purchase/account_analytic_line_plan:product_id_change_purchase")
 
         if not product:
             return {'value': {'price_unit': price_unit or 0.0,
@@ -195,7 +204,7 @@
             price = price
              
         purchase_amount = price * qty
-        amount = -1*price * qty   
+        amount = -1 * price * qty   
                   
         res.update({'value': {
             'price_unit': price, 

=== modified file 'project_cost_plan_purchase/project_purchase_line_plan_view.xml'
--- project_cost_plan_purchase/project_purchase_line_plan_view.xml	2012-10-02 23:10:39 +0000
+++ project_cost_plan_purchase/project_purchase_line_plan_view.xml	2013-02-27 19:55:32 +0000
@@ -14,36 +14,34 @@
                     <group colspan="4" col="6">                        
                         <field name="account_id"/>
                         <field name="supplier_id" on_change="onchange_supplier_id(supplier_id)" context="{'search_default_supplier':1}"/>
-                        <field name="pricelist_id" domain="[('type','=','purchase')]" groups="base.group_extended"/>
-                        <!--<field name="account_id"/>-->
+                        <field name="pricelist_id" domain="[('type','=','purchase')]" groups="base.group_erp_manager"/>
                     </group>                    
                     <group colspan="2" col="4">                                                
                         <field name="product_id" colspan="4" on_change="product_id_change_purchase(pricelist_id,product_id,purchase_amount,company_id,product_uom_id,purchase_amount,journal_id,supplier_id,date,price_unit)"/>
                         <field name="name" colspan="4"/>
-                        <field name="unit_amount" colspan="2" required="True" on_change="on_change_unit_amount_purchase(price_unit,product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-                        <field name="price_unit" colspan="2" required="True" on_change="on_change_unit_amount_purchase(price_unit,product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-                        <field name="product_uom_id" colspan="2" required="True" on_change="product_uom_change_purchase(pricelist_id, product_id, company_id, unit_amount, product_uom_id, price, journal_id, supplier_id, price_unit)"/>                        
-                        <field name="purchase_amount" colspan="2" required="True" on_change="on_change_purchase_amount(purchase_amount)" sum="Total"/>                                        
-                        
-                                                
+                        <field name="unit_amount" colspan="2" required="True" on_change="on_change_unit_amount_purchase(price_unit, product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
+                        <field name="price_unit" colspan="2" required="True" on_change="on_change_unit_amount_purchase(price_unit, product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
+                        <field name="product_uom_id" colspan="2" required="True" on_change="product_uom_change_purchase(pricelist_id, product_id, company_id, unit_amount, product_uom_id, price_unit, journal_id, supplier_id, price_unit)"/>                        
+                        <field name="purchase_amount" colspan="2" required="True" on_change="on_change_purchase_amount(purchase_amount)" sum="Total"/>
+                        <field name="sale_amount" invisible="True"/>                                        
                     </group>
-                    <group colspan="2" col="2" groups="base.group_extended">
+                    <group colspan="2" col="2" groups="base.group_erp_manager">
                         <separator string="Purchase Order Information" colspan="2"/>
                         <field name="purchase_order_id"/>
                         <field name="purchase_line_id"/>
                     </group>
-                    <group colspan="2" col="2" groups="base.group_extended">
+                    <group colspan="2" col="2" groups="base.group_erp_manager">
                         <separator string="Notes" colspan="2"/>
                         <field name="notes" nolabel="1"/>
                     </group>
-                    <group colspan="2" col="2" groups="base.group_extended">
+                    <group colspan="2" col="2" groups="base.group_erp_manager">
                         <separator string="Analytic Information" colspan="2"/>   					
                         <field name="journal_id"/>
                         <field name="date"/>
                         <field name="period_id"/>
                         <field name="ref"/>
                         <field name="company_id" groups="base.group_multi_company"/>
-                        <field name="amount" colspan="4"/>
+                        <field name="amount" colspan="2"/>
                         <field name="general_account_id"/>
                     </group>
                 </form>
@@ -63,7 +61,7 @@
 	                <field name="notes"/>
 	                <field name="unit_amount" colspan="2" required="True" on_change="on_change_unit_amount_purchase(price_unit,product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
                     <field name="price_unit" colspan="2" required="True" on_change="on_change_unit_amount_purchase(price_unit,product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-                    <field name="product_uom_id" colspan="2" required="True" on_change="product_uom_change_purchase(pricelist_id, product_id, company_id, unit_amount, product_uom_id, price, journal_id, supplier_id, price_unit)"/>                        
+                    <field name="product_uom_id" colspan="2" required="True" on_change="product_uom_change_purchase(pricelist_id, product_id, company_id, unit_amount, product_uom_id, price_unit, journal_id, supplier_id, price_unit)"/>                        
                     <field name="purchase_amount" colspan="2" required="True" on_change="on_change_purchase_amount(purchase_amount)" sum="Total"/>                                                
                     <field name="amount"/>   
                     <field name="journal_id"/>  	                
@@ -80,11 +78,11 @@
                 	    <filter name="edit"
                             string="Edit"  context="{'set_editable':True,'seq_visible': True}"
                             icon="gtk-execute"
-                            groups="base.group_extended"/>   
+                            groups="base.group_erp_manager"/>   
                          <filter name="no_po"
                             string="Non-ordered"  domain="[('purchase_line_id','=','')]"
                             icon="gtk-execute"
-                            groups="base.group_extended"/>                                                 
+                            groups="base.group_erp_manager"/>                                                 
                         <field name="account_id"/>
                         <field name="product_id"/>
                         <field name="supplier_id" on_change="onchange_partner_id(supplier_id)" context="{'search_default_supplier':1}"/>                             

=== modified file 'project_cost_plan_purchase/wizard/project_purchase_plan_make_purchase.py'
--- project_cost_plan_purchase/wizard/project_purchase_plan_make_purchase.py	2012-10-02 23:10:39 +0000
+++ project_cost_plan_purchase/wizard/project_purchase_plan_make_purchase.py	2013-02-27 19:55:32 +0000
@@ -28,6 +28,7 @@
     _name = "project.purchase.plan.make.purchase"
     _description = "Project purchase plan make purchase"
     def make_purchase_orders(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "31:project_cost_plan_purchase:project_purchase_plan_make_purchase")
         """
              To make purchases.
 

=== modified file 'project_cost_plan_sale/__openerp__.py'
--- project_cost_plan_sale/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_cost_plan_sale/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -22,8 +22,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["project_cost", "project_sale", "sale", "account_payment"],
     "description": """Eficent Project Management. Maintain analytic planned costs associated to sales orders         

=== modified file 'project_cost_plan_sale/account_analytic_line_plan.py'
--- project_cost_plan_sale/account_analytic_line_plan.py	2012-10-02 23:10:39 +0000
+++ project_cost_plan_sale/account_analytic_line_plan.py	2013-02-27 19:55:32 +0000
@@ -36,18 +36,18 @@
     _columns = {
         'sale_line_id': fields.many2one('sale.order.line', 'Sale Order Line', select=True),
         'sale_order_id':fields.related('sale_line_id', 'order_id', type='many2one' , relation='sale.order', string='Sale Order', store=True, readonly=True),
-        'customer_id': fields.many2one('res.partner', 'Customer', requrired=False ,domain=[('customer', '=', True)]),
+        'customer_id': fields.many2one('res.partner', 'Customer', required=False ,domain=[('customer', '=', True)]),
         'pricelist_id':fields.many2one('product.pricelist', 'Pricelist', required=False),
         'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Sale Price')),
         'sale_amount': fields.float('Sale Amount', required=True, digits_compute= dp.get_precision('Sale Price')),                
     }
 
       
-    def copy(self, cr, uid, id, default={}, context=None):
+    def copy(self, cr, uid, id, default=None, context=None):
         if context is None:
             context = {}
         
-        if not default:
+        if default is None:
             default = {}   
         
         default['sale_line_id'] = False
@@ -55,11 +55,11 @@
         res = super(account_analytic_line_plan, self).copy(cr, uid, id, default, context)
         return res
     
-    def copy_data(self, cr, uid, id, default={}, context=None):
+    def copy_data(self, cr, uid, id, default=None, context=None):
 
         if context is None:
             context = {}
-        if not default:
+        if default is None:
             default = {}   
             
         default['sale_line_id'] = False
@@ -124,7 +124,7 @@
             context={}
             
         sale_amount = price * qty
-        amount = 1*price * qty   
+        amount = 1 * price * qty   
         
         
         result = {
@@ -194,7 +194,7 @@
             price = price
              
         sale_amount = price * qty
-        amount = -1*price * qty   
+        amount = 1 * price * qty   
                   
         res.update({'value': {
             'price_unit': price, 

=== modified file 'project_cost_plan_sale/project_sale_line_plan_view.xml'
--- project_cost_plan_sale/project_sale_line_plan_view.xml	2012-10-02 23:10:39 +0000
+++ project_cost_plan_sale/project_sale_line_plan_view.xml	2013-02-27 19:55:32 +0000
@@ -14,36 +14,34 @@
                     <group colspan="4" col="6">                        
                         <field name="account_id"/>
                         <field name="customer_id" on_change="onchange_customer_id(customer_id)" context="{'search_default_supplier':1}"/>
-                        <field name="pricelist_id" domain="[('type','=','sale')]" groups="base.group_extended"/>
-                        <!--<field name="account_id"/>-->
+                        <field name="pricelist_id" domain="[('type','=','sale')]" groups="base.group_erp_manager"/>
                     </group>                    
                     <group colspan="2" col="4">                                                
                         <field name="product_id" colspan="4" on_change="product_id_change_sale(pricelist_id,product_id,sale_amount,company_id,product_uom_id,sale_amount,journal_id,customer_id,date,price_unit)"/>
                         <field name="name" colspan="4"/>
                         <field name="unit_amount" required="True" colspan="2" on_change="on_change_unit_amount_sale(price_unit,product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
                         <field name="price_unit" required="True" colspan="2" on_change="on_change_unit_amount_sale(price_unit,product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-                        <field name="product_uom_id" required="True" colspan="2" on_change="product_uom_change_sale(pricelist_id, product_id, company_id, unit_amount, product_uom_id, price, journal_id, customer_id, price_unit)"/>                        
-                        <field name="sale_amount" required="True" colspan="2" sum="Total"/>                                                
-                        
-                                                
+                        <!-- Modificado price por price_unit 28/01/2013 -->
+						<field name="product_uom_id" required="True" colspan="2" on_change="product_uom_change_sale(pricelist_id, product_id, company_id, unit_amount, product_uom_id, price_unit, journal_id, customer_id, price_unit)"/>                        
+                        <field name="sale_amount" required="True" colspan="2" sum="Total"/>                      
                     </group>
-                    <group colspan="2" col="2" groups="base.group_extended">
+                    <group colspan="2" col="2" groups="base.group_erp_manager">
                         <separator string="Sale Order Information" colspan="2"/>
                         <field name="sale_order_id"/>
                         <field name="sale_line_id"/>
                     </group>
-                    <group colspan="2" col="2" groups="base.group_extended">
+                    <group colspan="2" col="2" groups="base.group_erp_manager">
                         <separator string="Notes" colspan="2"/>
                         <field name="notes" nolabel="1"/>
                     </group>
-                    <group colspan="2" col="2" groups="base.group_extended">
+                    <group colspan="2" col="2" groups="base.group_erp_manager">
                         <separator string="Analytic Information" colspan="2"/>   
                         <field name="journal_id"/>
                         <field name="date"/>
                         <field name="period_id"/>
                         <field name="ref"/>
-                        <field name="company_id" groups="base.group_multi_company"/>
-                        <field name="amount" colspan="4"/>
+                        <field name="company_id" groups="base.group_multi_company" colspan="2" />
+                        <field name="amount" colspan="2"/>
                         <field name="general_account_id"/>
                     </group>
                 </form>
@@ -63,7 +61,8 @@
 	                <field name="notes"/>
 	                <field name="unit_amount" colspan="2" required="True" on_change="on_change_unit_amount_sale(price_unit,product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
                     <field name="price_unit" required="True" colspan="2" on_change="on_change_unit_amount_sale(price_unit,product_id, unit_amount, company_id, product_uom_id, journal_id)"/>
-                    <field name="product_uom_id" colspan="2" required="True" on_change="product_uom_change_sale(pricelist_id, product_id, company_id, unit_amount, product_uom_id, journal_id, customer_id, price_unit)"/>                        
+					<!-- Modificado price por price_unit 28/01/2013 -->
+                    <field name="product_uom_id" colspan="2" required="True" on_change="product_uom_change_sale(pricelist_id, product_id, company_id, unit_amount, product_uom_id, price_unit, journal_id, customer_id, price_unit)"/>                        
                     <field name="sale_amount" required="True" colspan="2" sum="Total"/>                                                
                     <field name="amount"/>     	       
                     <field name="journal_id"/>         
@@ -80,11 +79,11 @@
                 	    <filter name="edit"
                             string="Edit"  context="{'seq_visible': True, 'set_editable':True}"
                             icon="gtk-execute"
-                            groups="base.group_extended"/>   
+                            groups="base.group_erp_manager"/>   
                          <filter name="no_po"
                             string="Non-ordered"  domain="[('sale_line_id','=','')]"
                             icon="gtk-execute"
-                            groups="base.group_extended"/>                                                 
+                            groups="base.group_erp_manager"/>                                                 
                         <field name="account_id"/>
                         <field name="product_id"/>
                         <field name="customer_id" on_change="onchange_partner_id(customer_id)" context="{'search_default_supplier':1}"/>                             

=== modified file 'project_cost_plan_time/__openerp__.py'
--- project_cost_plan_time/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_cost_plan_time/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -22,8 +22,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["project_cost"],
     "description": """Eficent Project Management. Maintain analytic planned costs associated to internal time        

=== modified file 'project_cost_plan_time/account_analytic_line_plan.py'
--- project_cost_plan_time/account_analytic_line_plan.py	2012-10-02 23:10:39 +0000
+++ project_cost_plan_time/account_analytic_line_plan.py	2013-02-27 19:55:32 +0000
@@ -35,13 +35,12 @@
 
         
     _columns = {
-
-        'employee_id': fields.many2one('hr.employee', 'Employee', requrired=False),
-        'time_amount': fields.float('Time Amount', required=True, digits_compute= dp.get_precision('Amount')),
-                
+        'employee_id': fields.many2one('hr.employee', 'Employee', required=False),
+        'time_amount': fields.float('Time Amount', required=True, digits_compute= dp.get_precision('Amount')),                
     }
 
     def on_change_time_amount(self, cr, uid, id, time_amount, context=None):
+        osv.logging.log(100, "[Alca]: 43:project_cost_plan_time/account_analytic_line_plan:on_change_time_amount")
         
         result = {'amount': -1 * time_amount }
         
@@ -50,6 +49,7 @@
 
     def product_uom_change_time(self, cr, uid, ids, product, company_id, qty, uom, price, journal_id,
         employee_id):
+        osv.logging.log(100, "[Alca]: 52:project_cost_plan_time/account_analytic_line_plan:product_uom_change_time")
         
         res = self.product_id_change_time(cr, uid, ids, product, company_id, qty, uom, price, journal_id,
                 employee_id)
@@ -64,6 +64,7 @@
     
     def on_change_employee_id(self, cr, uid, ids, product, company_id, qty, uom, price, journal_id,
                 employee_id, context=None):
+        osv.logging.log(100, "[Alca]: 67:project_cost_plan_time/account_analytic_line_plan:on_change_employee_id")
 
         result = {}
         if context is None:
@@ -83,6 +84,7 @@
 
     def product_id_change_time(self, cr, uid, ids, product, company_id, qty, uom, price, journal_id,
             employee_id, context=None):
+        osv.logging.log(100, "[Alca]: 87:project_cost_plan_time/account_analytic_line_plan:product_id_change_time")
 
         res = {}
         if not product:
@@ -115,6 +117,7 @@
     # property_valuation_price_type property
     def on_change_unit_amount_time(self, cr, uid, id, prod_id, quantity, company_id,
             unit=False, journal_id=False, context=None):
+        osv.logging.log(100, "[Alca]: 120:project_cost_plan_time/account_analytic_line_plan:on_change_unit_amount_time")
         
         res={}
         

=== modified file 'project_cost_plan_time/project_time_line_plan_view.xml'
--- project_cost_plan_time/project_time_line_plan_view.xml	2012-10-02 23:10:39 +0000
+++ project_cost_plan_time/project_time_line_plan_view.xml	2013-02-27 19:55:32 +0000
@@ -11,30 +11,32 @@
             <field name="type">form</field>
             <field name="arch" type="xml">
 				<form string="Project time plans">	                            	
-                    <group colspan="4" col="6">                        
+                    <group colspan="2" col="2">                        
                         <field name="account_id"/>
                         <field name="employee_id" on_change="on_change_employee_id(product_id,company_id,unit_amount,product_uom_id,time_amount,journal_id,employee_id)"/>                                                
                     </group>                    
                     <group colspan="2" col="2">                                                
-                        <field name="product_id" colspan="4" on_change="product_id_change_time(product_id,company_id,unit_amount,product_uom_id,time_amount,journal_id,employee_id)"/>
-                        <field name="name" colspan="4"/>
+                        <field name="product_id" colspan="2" on_change="product_id_change_time(product_id,company_id,unit_amount,product_uom_id,time_amount,journal_id,employee_id)"/>
+                        <field name="name" colspan="2"/>
                         <field name="unit_amount" colspan="2" on_change="on_change_unit_amount_time(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>                        
                         <field name="product_uom_id" colspan="2" on_change="on_change_unit_amount_time(product_id, unit_amount, company_id, product_uom_id, journal_id)"/>                        
-                        <field name="time_amount" colspan="2" on_change="on_change_time_amount(unit_amount)" sum="Total"/>                                                                        
+                        <field name="time_amount" colspan="2" on_change="on_change_time_amount(unit_amount)" sum="Total"/>
+                        <field name="price_unit" invisible="True"/>
+                        <field name="sale_amount" invisible="True"/>                                                                        
                     </group>  
                     <newline/>   
-                    <group colspan="2" col="2" groups="base.group_extended">
+                    <group colspan="2" col="2" groups="base.group_erp_manager">
                         <separator string="Notes" colspan="2"/>
                         <field name="notes" nolabel="1"/>
                     </group>               
-                    <group colspan="2" col="2" groups="base.group_extended">
+                    <group colspan="2" col="2" groups="base.group_erp_manager">
                         <separator string="Analytic Information" colspan="2"/>                                                                     
                         <field name="journal_id" ref="project_cost.analytic_journal_plan_time"/>
                         <field name="date"/>
                         <field name="period_id"/>
                         <field name="ref"/>
                         <field name="company_id" groups="base.group_multi_company"/>
-                        <field name="amount" colspan="4"/>
+                        <field name="amount" colspan="2"/>
                         <field name="general_account_id"/>
                     </group>
                 </form>
@@ -69,7 +71,7 @@
                 	    <filter name="edit"
                             string="Edit"  context="{'set_editable':True,'seq_visible': True}"
                             icon="gtk-execute"
-                            groups="base.group_extended"/>                                                 
+                            groups="base.group_erp_manager"/>                                                 
                         <field name="account_id"/>
                         <field name="product_id"/>
                         <field name="employee_id" on_change="onchange_employee_id(employee_id)"/>                             

=== modified file 'project_hr_stakeholder/__openerp__.py'
--- project_hr_stakeholder/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_hr_stakeholder/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,8 +23,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": [
                 "base",
@@ -41,7 +41,7 @@
     "update_xml": [    
         "project_hr_role.xml",
         "project_hr_responsibility.xml",
-        "project_hr_stakeholder.xml",        
+        "project_hr_stakeholder.xml",
         "project_view.xml",
         "security/ir.model.access.csv",
         "security/project_security.xml",

=== modified file 'project_hr_stakeholder/i18n/es.po'
--- project_hr_stakeholder/i18n/es.po	2012-10-02 23:10:39 +0000
+++ project_hr_stakeholder/i18n/es.po	2013-02-27 19:55:32 +0000
@@ -180,11 +180,6 @@
 msgstr "Aprobador"
 
 #. module: project_hr_stakeholder
-#: field:project.hr.stakeholder,contact_id:0
-msgid "Contact"
-msgstr "Contacto"
-
-#. module: project_hr_stakeholder
 #: help:project.hr.stakeholder,responsibilities_name_str:0
 msgid "Project Stakeholder responsibilities"
 msgstr "Responsabilidades del Involucrado en el Proyecto"

=== modified file 'project_hr_stakeholder/i18n/project_hr_stakeholder.pot'
--- project_hr_stakeholder/i18n/project_hr_stakeholder.pot	2012-10-02 23:10:39 +0000
+++ project_hr_stakeholder/i18n/project_hr_stakeholder.pot	2013-02-27 19:55:32 +0000
@@ -177,11 +177,6 @@
 msgstr ""
 
 #. module: project_hr_stakeholder
-#: field:project.hr.stakeholder,contact_id:0
-msgid "Contact"
-msgstr ""
-
-#. module: project_hr_stakeholder
 #: help:project.hr.stakeholder,responsibilities_name_str:0
 msgid "Project Stakeholder responsibilities"
 msgstr ""

=== modified file 'project_hr_stakeholder/project_hr_responsibility.xml'
--- project_hr_stakeholder/project_hr_responsibility.xml	2012-10-02 23:10:39 +0000
+++ project_hr_stakeholder/project_hr_responsibility.xml	2013-02-27 19:55:32 +0000
@@ -51,7 +51,7 @@
             <field name="help">Define the responsibilities for stakeholders in projects.</field>
         </record>
 
-        <menuitem id="menu_responsibilities_config" name="Responsibilities" parent="project.menu_definitions" sequence="1"/>
+        <menuitem id="menu_responsibilities_config" name="Responsibilities" parent="base.menu_definitions" sequence="1"/>
         <menuitem action="action_project_hr_responsibility_tree" id="menu_project_hr_responsibility_view" parent="menu_responsibilities_config" sequence="1"/>                  	                    
     </data>
 </openerp>

=== modified file 'project_hr_stakeholder/project_hr_role.xml'
--- project_hr_stakeholder/project_hr_role.xml	2012-10-02 23:10:39 +0000
+++ project_hr_stakeholder/project_hr_role.xml	2013-02-27 19:55:32 +0000
@@ -51,7 +51,7 @@
             <field name="help">Define the roles for stakeholders in projects.</field>
         </record>
 
-        <menuitem id="menu_roles_config" name="Roles" parent="project.menu_definitions" sequence="1"/>
+        <menuitem id="menu_roles_config" name="Roles" parent="base.menu_definitions" sequence="1"/>
         <menuitem action="action_project_hr_role_tree" id="menu_project_hr_role_view" parent="menu_roles_config" sequence="1"/>                  	                    
     </data>
 </openerp>

=== modified file 'project_hr_stakeholder/project_hr_stakeholder.py'
--- project_hr_stakeholder/project_hr_stakeholder.py	2012-10-02 23:10:39 +0000
+++ project_hr_stakeholder/project_hr_stakeholder.py	2013-02-27 19:55:32 +0000
@@ -85,8 +85,7 @@
     _columns = {        
         
         'name': fields.char('Description', required=True, size=64),
-        'partner_id':fields.many2one('res.partner', 'Partner', required=True),
-        'contact_id': fields.many2one('res.partner.contact', 'Contact'),                
+        'partner_id':fields.many2one('res.partner', 'Partner', required=True),              
         'project_id': fields.many2one('project.project', 'Project', ondelete='cascade'),
         
         'role_ids': fields.many2many('project.hr.role', 'stakeholder_role_rel', 'stakeholder_id', 'role_id', 'Roles',

=== modified file 'project_hr_stakeholder/project_hr_stakeholder.xml'
--- project_hr_stakeholder/project_hr_stakeholder.xml	2012-10-02 23:10:39 +0000
+++ project_hr_stakeholder/project_hr_stakeholder.xml	2013-02-27 19:55:32 +0000
@@ -14,7 +14,6 @@
                 	<group colspan="4" col="4">
 	                    <field name="project_id"/>	                                
 	                    <field name="partner_id"/>
-                		<field name="contact_id" domain="[('partner_id','=',partner_id)]"/>
                 		<field name="name"/>        	                    
 					</group>
 					<newline/>						                                        
@@ -38,7 +37,6 @@
                 <tree string="Stakeholders">   
                 	<field name="project_id"/>                   	  
                 	<field name="partner_id"/>
-                	<field name="contact_id"/>   
                 	<field name="name"/>              
                     <field name="roles_name_str"/>                                        
 					<field name="responsibilities_name_str"/>
@@ -56,7 +54,6 @@
                 <tree string="Stakeholders">
                 	<field name="project_id"/>                 	         
                 	<field name="partner_id"/>
-                	<field name="contact_id"/>
                 	<field name="name"/>               
                     <field name="roles_name_str"/>                                        
 					<field name="responsibilities_name_str"/>
@@ -75,7 +72,6 @@
                 	<group col="3" colspan="3">
                 		<field name="project_id"/>                   		       
                 		<field name="partner_id"/>
-                		<field name="contact_id"/> 
                 		<field name="name"/>  
                 	</group>
                 	<newline/>

=== modified file 'project_hr_stakeholder/project_view.xml'
--- project_hr_stakeholder/project_view.xml	2012-10-02 23:10:39 +0000
+++ project_hr_stakeholder/project_view.xml	2013-02-27 19:55:32 +0000
@@ -13,7 +13,7 @@
 		
 		<menuitem id="project_hr_stakeholder_menu_project_config_address_book" 
 			name="Stakeholders" 
-			parent="project.menu_definitions" 
+			parent="base.menu_definitions" 
 			sequence="2"
             groups="project.group_project_manager"/>
 
@@ -27,15 +27,20 @@
             id="base.project_hr_stakeholder_menu_supplier_form"
             parent="project_hr_stakeholder_menu"
             groups="project.group_project_manager,project.group_project_user"
-            sequence="2"/>    
+            sequence="2"/>
 
+        <menuitem action="base.action_partner_customer_form" 
+        	id="base.project_hr_stakeholder_menu_project_partner_address_form"
+        	parent="project_hr_stakeholder_menu" 
+            groups="project.group_project_manager,project.group_project_user"
+            sequence="3"/>
+<!--
         <menuitem action="base.action_partner_address_form" 
         	id="base.project_hr_stakeholder_menu_project_partner_address_form"
         	parent="project_hr_stakeholder_menu" 
             groups="project.group_project_manager,project.group_project_user"
             sequence="3"/>
-                    
-                        
+-->
 
 #---------------------------------------------------------------------------------------------------------
 #   Extend the project
@@ -48,12 +53,11 @@
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
             <field name="arch" type="xml">
-            	<page string='Administration' position="after">
-					<page groups="base.group_extended" string="Stakeholders">                        
+            	<page string='Other Info' position="after">
+					<page groups="base.group_erp_manager" string="Stakeholders">                        
                         <field name="stakeholder_ids" nolabel="1" context="{'default_project_id': active_id}">
                         	<tree string="Stakeholders">       
-			                	<field name="partner_id"/>
-			                	<field name="contact_id"/>             
+			                	<field name="partner_id"/>           
 			                    <field name="roles_name_str"/>                                        
 								<field name="responsibilities_name_str"/>
 								<field name="influence"/>
@@ -62,8 +66,7 @@
 			                	<group colspan="4" col="4">
 				                    <field name="project_id" readonly="1"/>
 				                    <field name="name"/>                    
-				                    <field name="partner_id"/>
-			                		<field name="contact_id" domain="[('partner_id','=',partner_id)]"/>	                    
+				                    <field name="partner_id"/>                   
 								</group>
 								<newline/>						                                        
 			                    <group colspan="6" col="6">

=== modified file 'project_integration/__openerp__.py'
--- project_integration/__openerp__.py	2012-11-21 03:39:24 +0000
+++ project_integration/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,8 +23,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": [
                 "account",

=== modified file 'project_integration/i18n/es.po'
--- project_integration/i18n/es.po	2012-10-02 23:10:39 +0000
+++ project_integration/i18n/es.po	2013-02-27 19:55:32 +0000
@@ -4,11 +4,11 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: OpenERP Server 6.0.3\n"
+"Project-Id-Version: OpenERP Server 7.0\n"
 "Report-Msgid-Bugs-To: support@xxxxxxxxxxx\n"
-"POT-Creation-Date: 2012-02-22 05:29+0000\n"
-"PO-Revision-Date: 2012-02-22 06:30+0100\n"
-"Last-Translator: Jordi Ballester <jordi.ballester@xxxxxxxxxxx>\n"
+"POT-Creation-Date: 2012-02-22 05:29+0100\n"
+"PO-Revision-Date: 2013-01-18 09:43+0100\n"
+"Last-Translator: Carlos Pueyo <>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -36,7 +36,7 @@
 msgstr "Administración"
 
 #. module: project_integration
-#: code:addons/project_integration/project.py:87
+#: code:addons/project_integration/project.py:148
 #, python-format
 msgid "You must complete all active purchase orders related to this project before closing it."
 msgstr "Debe completar todos los pedidos de compra activos relacionados con este proyecto antes de cerrarlo."
@@ -88,14 +88,12 @@
 msgstr "Prepara para comenzar la tarea."
 
 #. module: project_integration
-#: code:addons/project_integration/project.py:70
+#: code:addons/project_integration/project.py:77
 #, python-format
-msgid ""
-"You cannot start the project.\n"
+msgid "You cannot start the project.\n"
 "The project contains a cost estimate for the product \"%s\" which has as supply method \"buy\".\n"
 "You must create a purchase order linked to this project to procure this product."
-msgstr ""
-"No se puede iniciar el proyecto. \n"
+msgstr "No se puede iniciar el proyecto. \n"
 "El proyecto contiene una estimación del coste del producto \"%s\" que tiene como método de suministro \"comprar \".\n"
 "Debe crear un pedido de compra vinculado a este proyecto para adquirir este producto."
 
@@ -123,9 +121,7 @@
 
 #. module: project_integration
 #: model:ir.module.module,description:project_integration.module_meta_information
-msgid ""
-"Extensions for the Project management module.     \n"
-"    "
+msgid "Extensions for the Project management module.     \n"
 msgstr "Extensiones para el módulo de gestión de proyectos."
 
 #. module: project_integration
@@ -237,7 +233,7 @@
 #: view:account.analytic.account:0
 #: view:project.project:0
 #: view:project.task:0
-msgid "Ready to start"
+msgid "Ready to Start"
 msgstr "Lista para comenzar"
 
 #. module: project_integration
@@ -261,3 +257,23 @@
 msgid "Cancel"
 msgstr "Cancelar"
 
+#. module: project_integration
+#: view:project.project:0
+msgid "Open and Pending Projects"
+msgstr "Proyectos abiertos y pendientes"
+
+#. module: project_integration
+#: code:addons/project_integration/project.py:106
+#: view:project.project:0
+msgid "Reopen"
+msgstr "Reabrir"
+
+#. module: project_integration
+#: view:project.project:0
+msgid "Restart"
+msgstr "Recomenzar"
+
+#. module: project_integration
+#: model:ir.model,name:project_integration.model_project_task_history
+msgid "History of Tasks"
+msgstr "Histórico de tareas"

=== modified file 'project_integration/project.py'
--- project_integration/project.py	2012-11-21 03:39:24 +0000
+++ project_integration/project.py	2013-02-27 19:55:32 +0000
@@ -93,39 +93,39 @@
         project_br = self.browse(cr,uid,ids)
         for p in project_br:
             
-#            subject = _("'%s' is ready to start") % p.complete_wbs_name
-#            if p.user_id and p.user_id.address_id and p.user_id.address_id.email:
-#                to_adr = p.user_id.address_id.email
-#                signature = p.user_id.signature
-#            else:
-#                raise osv.except_osv(_('Error'), _("Couldn't send mail because the project manager email address is not configured!"))
-#
-#            from_adr = tools.config.get('email_from', False) or p.user_id.address_id.email
-#
-#
-#            
-#            project_name = u'Project name: %s' %(tools.ustr(p.name))
-#            user_id = u'Project manager: %s' %(tools.ustr(p.user_id.name)) 
-#            complete_wbs_code = u'WBS code: %s' %(tools.ustr(p.complete_wbs_code)) 
-#            complete_wbs_name = u'WBS path: %s' %(tools.ustr(p.complete_wbs_name)) 
-#            
-#            vals = [project_name, user_id, complete_wbs_code, complete_wbs_name]
-#            
-#            header = u'\n'.join(vals)
-#            footer = ''
-#            body = u'%s\n%s\n%s\n\n-- \n%s' % (header, p.description, footer, signature)
-#            
-#            mail_id = tools.email_send(from_adr, to_adr, subject, tools.ustr(body), email_bcc=[from_adr])
+            subject = _("'%s' is ready to start") % p.complete_wbs_name
+            if p.user_id and p.user_id.user_email:
+                to_adr = p.user_id.user_email
+                signature = p.user_id.signature
+            else:
+                raise osv.except_osv(_('Error'), _("Couldn't send mail because the project manager email address is not configured!"))
+
+            from_adr = tools.config.get('email_from', False) or p.user_id.user_email
+
+
+            
+            project_name = u'Project name: %s' %(tools.ustr(p.name))
+            user_id = u'Project manager: %s' %(tools.ustr(p.user_id.name)) 
+            complete_wbs_code = u'WBS code: %s' %(tools.ustr(p.complete_wbs_code)) 
+            complete_wbs_name = u'WBS path: %s' %(tools.ustr(p.complete_wbs_name)) 
+            
+            vals = [project_name, user_id, complete_wbs_code, complete_wbs_name]
+            
+            header = u'\n'.join(vals)
+            footer = ''
+            body = u'%s\n%s\n%s\n\n-- \n%s' % (header, p.description, footer, signature)
+            
+            mail_id = tools.email_send(from_adr, to_adr, subject, tools.ustr(body), email_bcc=[from_adr], cr=cr)
             
             email_template_ids = self.pool.get('email.template').search(cr,uid,[('object_name.name','=','Project'),('name','=','Project status change')],context=None)
             for email_template_id in email_template_ids:
                 self.pool.get('email.template').generate_mail(cr,uid,email_template_id,ids,context=None)
                         
-            #if not mail_id:
-            #    raise osv.except_osv(_('Error'), _("Couldn't send mail! Check the email ids and smtp configuration settings"))
-#            
-#            msg_dict = {'new': 'Send', 'reply': 'Reply', 'forward': 'Forward'}
-#            
+            if not mail_id:
+                raise osv.except_osv(_('Error'), _("Couldn't send mail! Check the email ids and smtp configuration settings"))
+            
+            msg_dict = {'new': 'Send', 'reply': 'Reply', 'forward': 'Forward'}
+            
 #            self.history(cr, uid,[p], _(msg_dict['new']), history=True,email=to_adr, details=body,subject=subject, email_from=from_adr, message_id=None, references=None, attach=None)
             
         return {}    

=== modified file 'project_integration/project_integration_view.xml'
--- project_integration/project_integration_view.xml	2012-10-02 23:10:39 +0000
+++ project_integration/project_integration_view.xml	2013-02-27 19:55:32 +0000
@@ -2,67 +2,64 @@
 <openerp>
     <data>
 
+# No es necesario porque la v7 ya posee este filtro - 25/01/2013
 #---------------------------------------------------------------------------------------------------------
 #   Extend the project
 #---------------------------------------------------------------------------------------------------------
-        
+<!--
        <record id="view_project_project_filter" model="ir.ui.view">
             <field name="name">project.project.select</field>
             <field name="model">project.project</field>
             <field name="type">search</field>
             <field name="inherit_id" ref="project.view_project_project_filter"/>
-            <field name="arch" type="xml">            	 
-            	<filter name="Current" position="replace">
-            		<filter icon="terp-check" string="Current" name="Current" domain="[('state', 'in',('ready','open','pending'))]" help="Open and Pending Projects"/>
-            	</filter>	         	
+            <field name="arch" type="xml">
+				<filter name="name" position="after">
+					<filter icon="terp-check" string="Current" name="Current" domain="[('state', 'in',('ready','open','pending'))]" help="Open and Pending Projects"/>
+				</filter>
             </field>
         </record>
-
-
+-->
 #---------------------------------------------------------------------------------------------------------
 #   Extend the project
 #---------------------------------------------------------------------------------------------------------
 
-
 		<record id="edit_project" model="ir.ui.view">
             <field name="name">project.project.form</field>
             <field name="model">project.project</field>
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
-            <field name="arch" type="xml">	
-            	<page string='Administration' position="after">
-					<page groups="base.group_extended" string="Relationships">
+            <field name="arch" type="xml">
+            	<page string='Other Info' position="after">
+					<page groups="base.group_erp_manager" string="Relationships">
                         <separator string="Predecessor Projects" colspan="4"/>
                         <field colspan="4" height="150" name="predecessor_ids" nolabel="1"/>
                         <separator string="Successor Projects" colspan="4"/>
-                        <field colspan="4" height="150" name="successor_ids" nolabel="1"/>                            
-                    </page> 	            		
+                        <field colspan="4" height="150" name="successor_ids" nolabel="1"/>
+                    </page>
 	            	<page string="Activities">
-	                        <field colspan="4" name="tasks" nolabel="1"  mode="tree,form" context="{'default_project_id': active_id}">
-	                            <tree string="Activities">
-	                            	<field name="id"/>
-	                                <field name="name"/>
-	                                <field name="date_early_start"/>
-	                                <field name="date_late_finish"/>
-	                                <field name="milestone"/>
-	                                <field name="state"/>
-	                                <button name="do_ready" states="draft,pending,open" string="Ready to start" type="object" icon="gtk-ok"/>
-									<button name="do_cancel" states="draft,ready,open,pending" string="Cancel" type="object" icon="gtk-cancel"/>
-	                                <button name="do_draft" states="ready" string="Draft" type="object" icon="gtk-indent"/>
-	                                <button name="do_open" states="ready,pending" string="Start Task" type="object" icon="gtk-execute"/>
-	                                <button name="%(project.action_project_task_reevaluate)d" states="done,cancelled" string="Reactivate" type="action" icon="gtk-convert" context="{'button_reactivate':True}" />
-	                                <button name="do_pending" states="ready, open" string="Pending" type="object" icon="gtk-media-pause"/>
-	                                <button groups="base.group_extended" name="%(project.action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-sort-descending" help="For changing to delegate state"/>                                
-	                                <button name="action_close" states="pending,open" string="Done" type="object" icon="terp-dialog-close"/>	                                                                
-	                            </tree>
-	                         </field>
-	                 </page>  
-				</page>	 
-				
-				                            	                        
-            </field>            	        
-        </record>   	
-
+						<field colspan="4" name="tasks" nolabel="1"  mode="tree" context="{'default_project_id': active_id}">
+							<tree string="Activities">
+								<field name="id"/>
+								<field name="name"/>
+								<field name="date_early_start"/>
+								<field name="date_late_finish"/>
+								<field name="milestone" string="Milestone"/>
+								<field name="state" invisible="0"/>
+# TODO: Adaptar estos botones a la vista de arbol
+								<button name="do_ready" states="draft,pending,open" string="Ready to start" type="object" icon="gtk-ok"/>
+								<button name="do_cancel" states="draft,ready,open,pending" string="Cancel" type="object" icon="gtk-cancel"/>
+								<button name="do_draft" states="ready" string="Draft" type="object" icon="gtk-indent"/>
+								<button name="do_open" states="ready,pending" string="Start Task" type="object" icon="gtk-execute"/>
+								<button name="%(project.action_project_task_reevaluate)d" states="done,cancelled" string="Reactivate" type="action" icon="gtk-convert" context="{'button_reactivate':True}" />
+								<button name="do_pending" states="ready, open" string="Pending" type="object" icon="gtk-media-pause"/>
+								<button groups="base.group_erp_manager" name="%(project.action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-sort-descending" help="For changing to delegate state"/>
+								<button name="action_close" states="pending,open" string="Done" type="object" icon="terp-dialog-close"/>
+							</tree>
+						</field>
+	                </page>
+				</page>
+            </field>
+        </record>
 
 
 #---------------------------------------------------------------------------------------------------------
@@ -75,30 +72,33 @@
             <field name="model">project.task</field>
             <field name="type">form</field>
             <field eval="2" name="priority"/>
-            <field name="inherit_id" ref="project.view_task_form2"/>       
-            <field name="arch" type="xml">       
+            <field name="inherit_id" ref="project.view_task_form2"/>
+            <field name="arch" type="xml">
             	<field name="name" position="before">
-            		<field name="id"/>
+            		<field name="id" invisible="1"/>
             	</field>
-	
+            	<xpath expr="//field[@name='state']" position="attributes">
+            		<attribute name="statusbar_visible">draft,ready,open,pending,done</attribute>
+            	</xpath>
                	<xpath expr="//button[@name='do_cancel']" position="attributes">
-        			<attribute name="states">draft,ready,open,pending</attribute>        			
-        		</xpath>        	
-        			
+        			<attribute name="states">draft,ready,open,pending</attribute>
+        		</xpath>
+
+<!--
+				# Comentadas porque los botones do_draft y do_open estan deshabilitados en esta vista en OpenERP 7 - 25/01/2013
          		<xpath expr="//button[@name='do_draft']" position="attributes">
-        			<attribute name="states">ready</attribute>        			
+        			<attribute name="states">ready</attribute>
         		</xpath>
-        		         	
         		<xpath expr="//button[@name='do_draft']" position="after">
         			<button name="do_ready" states="draft,open" string="Ready to start" type="object" icon="gtk-ok"/>
-        		</xpath>            	
-        			        	        		             	           	
+        		</xpath>
         		<xpath expr="//button[@name='do_open']" position="attributes">
         			<attribute name="states">ready,pending</attribute>
-        		</xpath>          		        		          	        		        		
+        		</xpath>
+-->
             </field>
         </record>
-        
+
         <record id="view_task_tree2" model="ir.ui.view">
             <field name="name">project.task.tree</field>
             <field name="model">project.task</field>
@@ -107,35 +107,30 @@
             <field name="inherit_id" ref="project.view_task_tree2"/>
             <field name="arch" type="xml">
             	<field name="name" position="before">
-            		<field name="id"/>            		
+            		<field name="id" invisible="1"/>
             	</field>
-
+<!--
+				# Comentado porque en esta vista no hay botones - 25/01/2013
             	<xpath expr="//button[@name='do_open']" position="before">
         			<button name="do_ready" states="draft,open" string="Ready to start" type="object" icon="gtk-ok"/>
-        		</xpath>   
-        		
+        		</xpath>
                	<xpath expr="//button[@name='do_cancel']" position="attributes">
-        			<attribute name="states">draft,ready,open,pending</attribute>        			
-        		</xpath>        	
-
-        			        	        		             	           	
+        			<attribute name="states">draft,ready,open,pending</attribute>
+        		</xpath>
         		<xpath expr="//button[@name='do_open']" position="attributes">
         			<attribute name="states">ready,pending</attribute>
-        		</xpath>           
-        		
+        		</xpath>
         		<xpath expr="//button[@name='action_close']" position="attributes">
         			<attribute name="states">draft,ready,pending,open</attribute>
-        		</xpath>     
-        	
+        		</xpath>
         		<xpath expr="//button[@name='%(project.action_project_task_delegate)d']" position="attributes">
         			<attribute name="states">pending,open,draft,ready</attribute>
-        		</xpath>     
-        			
-                    		
+        		</xpath>
+-->
+
             </field>
-        </record>	
-        
-        
+        </record>
+
         <record id="view_task_gantt" model="ir.ui.view">
             <field name="name">project.task.gantt</field>
             <field name="model">project.task</field>
@@ -144,15 +139,27 @@
             <field name="inherit_id" ref="project.view_task_gantt"/>
             <field name="arch" type="xml">
             	<xpath expr="//gantt[@string='Tasks']" position="replace">
-                	<gantt color="user_id" date_start="date_early_start" date_close="date_late_finish" string="Tasks">
+                	<gantt date_start="date_start" date_stop="date_end" string="Tasks" default_group_by="project_id">
                     	<level object="project.project" link="project_id" domain="[]">
                         	<field name="name"/>
                     	</level>
                 	</gantt>
-                </xpath>  
-            </field>
-        </record>
-        
+                </xpath>
+            </field>
+        </record>
+
+        <record id="view_task_search" model="ir.ui.view">
+            <field name="name">project.task.search</field>
+            <field name="model">project.task</field>
+            <field name="type">search</field>
+            <field eval="2" name="priority"/>
+            <field name="inherit_id" ref="project.view_task_search_form"/>
+            <field name="arch" type="xml">
+                <xpath expr="//filter[@name='draft']" position="after">
+                    <filter name="ready_to_start" string="Ready to Start" domain="[('state','=','ready')]" help="Ready to start tasks" icon="terp-check"/>
+                </xpath>
+            </field>
+        </record>
 
         <record id="view_task_calendar" model="ir.ui.view">
             <field name="name">project.task.calendar</field>
@@ -164,45 +171,47 @@
             	<xpath expr="//calendar[@string='Tasks']" position="replace">
 	                <calendar color="user_id" date_start="date_early_start" date_stop="date_late_finish" string="Tasks">
 	                    <field name="name"/>
+						<field name="project_id"/>
 	                    <field name="project_complete_wbs_name"/>
 	                </calendar>
-                </xpath>  
+                </xpath>
             </field>
-        </record>                
-        
-
-                
+        </record>
+
+
+
         <!-- Project -->
-         <record id="edit_project_inh" model="ir.ui.view">
+
+        <record id="edit_project" model="ir.ui.view">
             <field name="name">project.project.form</field>
             <field name="model">project.project</field>
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
             <field name="arch" type="xml">
-            	<xpath expr="/form/notebook/page[@string='Administration']/group/button[@name='set_template']" position="after">
-        			<button name="set_ready" states="draft" string="Ready to start" type="object" icon="gtk-ok"/>        			
-        		</xpath>   
+            	<xpath expr="//button[@name='set_template']" position="after">
+        			<button name="set_ready" states="draft" string="Ready to start" type="object" icon="gtk-ok"/>
+        		</xpath>
 				<xpath expr="//button[@name='set_cancel']" position="attributes">
-        			<attribute name="states">draft,ready,open,pending</attribute>        			
-        		</xpath>  
+        			<attribute name="states">draft,ready,open,pending</attribute>
+        		</xpath>
 				<xpath expr="//button[@name='set_template']" position="attributes">
-        			<attribute name="states">draft,ready,open</attribute>        			
-        		</xpath>  
+        			<attribute name="states">draft,ready,open</attribute>
+        		</xpath>
 				<xpath expr="//button[@name='set_open']" position="attributes">
-        			<attribute name="states">ready</attribute>        			
+        			<attribute name="states">ready</attribute>
         			<attribute name="string">Start Project</attribute>
         		</xpath>
 				<xpath expr="//button[@name='set_pending']" position="attributes">
-        			<attribute name="states">open,ready</attribute>        			
+        			<attribute name="states">open,ready</attribute>
         		</xpath>
         		<xpath expr="//button[@name='set_open']" position="after">
 		        	<button name="set_restart" states="pending,cancelled" string="Restart" type="object" icon="gtk-ok"/>
         			<button name="set_reopen" states="close" string="Reopen" type="object" icon="gtk-ok"/>
-        		</xpath> 		  		
-                                                              
+        		</xpath>
             </field>
-        </record>	
-        
+        </record>
+
+
         <record id="view_account_analytic_account_form2_avg" model="ir.ui.view">
             <field name="name">account.analytic.account.invoice.form</field>
             <field name="model">account.analytic.account</field>
@@ -210,22 +219,22 @@
             <field name="inherit_id" ref="hr_timesheet_invoice.account_analytic_account_form_form"/>
             <field name="arch" type="xml">
             	<xpath expr="//button[@name='set_open']" position="before">
-        			<button name="set_ready" states="draft" string="Ready to start" type="object" icon="gtk-ok"/>        			
-        		</xpath>   
+        			<button name="set_ready" states="draft" string="Ready to start" type="object" icon="gtk-ok"/>
+        		</xpath>
 				<xpath expr="//button[@name='set_cancel']" position="attributes">
-        			<attribute name="states">draft,ready,open,pending</attribute>        			
-        		</xpath>  
+        			<attribute name="states">draft,ready,open,pending</attribute>
+        		</xpath>
 				<xpath expr="//button[@name='set_open']" position="attributes">
         			<attribute name="states">pending,ready,cancelled,close</attribute>
-        			<attribute name="string">Start Project</attribute>        			
-        		</xpath>        
+        			<attribute name="string">Start Project</attribute>
+        		</xpath>
 				<xpath expr="//button[@name='set_pending']" position="attributes">
-        			<attribute name="states">draft,open,ready</attribute>        			
-        		</xpath>               
+        			<attribute name="states">draft,open,ready</attribute>
+        		</xpath>
 				<xpath expr="//button[@name='set_close']" position="attributes">
-        			<attribute name="states">open,ready,pending</attribute>        			
-        		</xpath>            		   	
+        			<attribute name="states">open,ready,pending</attribute>
+        		</xpath>
             </field>
-        </record>	                     	                    
+        </record>
     </data>
 </openerp>

=== modified file 'project_integration/project_task.py'
--- project_integration/project_task.py	2012-11-21 03:39:24 +0000
+++ project_integration/project_task.py	2013-02-27 19:55:32 +0000
@@ -32,9 +32,9 @@
             
     _columns = {
         'name': fields.char('Summary', size=128, required=True),
-        'state': fields.selection([('draft', 'Draft'),('ready','Ready to Start'),('open', 'In Progress'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
-                                  help='If the task is created the state is \'Draft\'.\n If the task is ready to start started, the state becomes \'Ready to Start\'.\n If the task is started, the state becomes \'In Progress\'.\n If review is needed the task is in \'Pending\' state.\
-                                  \n If the task is over, the states is set to \'Done\'.'),                     
+        #'state': fields.selection([('draft', 'Draft'),('ready','Ready to Start'),('open', 'In Progress'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
+        #                          help='If the task is created the state is \'Draft\'.\n If the task is ready to start started, the state becomes \'Ready to Start\'.\n If the task is started, the state becomes \'In Progress\'.\n If review is needed the task is in \'Pending\' state.\
+        #                          \n If the task is over, the states is set to \'Done\'.'),                     
         }
 
 
@@ -48,33 +48,33 @@
         task_br = self.browse(cr,uid,ids)
         for t in task_br:
             project = t.project_id
-#            subject = _("Task '%s' is ready to start") % t.name
-#            if t.user_id and t.user_id.address_id and t.user_id.address_id.email:
-#                to_adr = t.user_id.address_id.email                
-#                signature = t.user_id.signature
-#            else:
-#                raise osv.except_osv(_('Error'), _("Couldn't send mail because your email address is not configured!"))
-#            
-#            from_adr = tools.config.get('email_from', False) or t.user_id.address_id.email
-#            
-#            
-#            task_name = u'Task name: %s' %(tools.ustr(t.name))
-#            project_code = u'Project code: %s' %(tools.ustr(t.project_complete_wbs_name))
-#            task_id = u'Task id: %s' %(tools.ustr(t.id))
-#            
-#            vals = [task_name, project_code, task_id]
-#
-#            
-#            header = u'\n'.join(vals)
-#            footer = ''
-#            body = u'%s\n%s\n%s\n\n-- \n%s' % (header, t.description, footer, signature)
-#            
-#            mail_id = tools.email_send(from_adr, to_adr, subject, tools.ustr(body), email_bcc=[from_adr])
-#                        
-#            if not mail_id:
-#                raise osv.except_osv(_('Error'), _("Couldn't send mail! Check the email ids and smtp configuration settings"))
-            
-#            msg_dict = {'new': 'Send', 'reply': 'Reply', 'forward': 'Forward'}
+            subject = _("Task '%s' is ready to start") % t.name
+            if t.user_id and t.user_id.user_email:
+                to_adr = t.user_id.address_id.email                
+                signature = t.user_id.signature
+            else:
+                raise osv.except_osv(_('Error'), _("Couldn't send mail because your email address is not configured!"))
+            
+            from_adr = tools.config.get('email_from', False) or t.user_id.user_email
+            
+            
+            task_name = u'Task name: %s' %(tools.ustr(t.name))
+            project_code = u'Project code: %s' %(tools.ustr(t.project_complete_wbs_name))
+            task_id = u'Task id: %s' %(tools.ustr(t.id))
+            
+            vals = [task_name, project_code, task_id]
+
+            
+            header = u'\n'.join(vals)
+            footer = ''
+            body = u'%s\n%s\n%s\n\n-- \n%s' % (header, t.description, footer, signature)
+            
+            mail_id = tools.email_send(from_adr, to_adr, subject, tools.ustr(body), email_bcc=[from_adr], cr=cr)
+                        
+            if not mail_id:
+                raise osv.except_osv(_('Error'), _("Couldn't send mail! Check the email ids and smtp configuration settings"))
+            
+            msg_dict = {'new': 'Send', 'reply': 'Reply', 'forward': 'Forward'}
             
  #           self.history(cr, uid,[t], _(msg_dict['new']), history=True,email=to_adr, details=body,subject=subject, email_from=from_adr, message_id=None, references=None, attach=None)
             email_template_ids = self.pool.get('email.template').search(cr,uid,[('object_name.name','=','Task'),('name','=','Project task ready to start')],context=None)
@@ -155,3 +155,11 @@
 
 task()
 
+class project_task_history(osv.osv):
+     _inherit = 'project.task.history'
+  
+     _columns = {
+#         'state': fields.selection([('draft', 'New'),('ready','Ready to Start'),('open', 'In Progress'),('pending', 'Pending'), ('done', 'Done'), ('cancelled', 'Cancelled')], 'State'),
+     }
+  
+project_task_history()
\ No newline at end of file

=== modified file 'project_integration_analysis/__openerp__.py'
--- project_integration_analysis/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_integration_analysis/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,8 +23,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": [
                 "crm",

=== modified file 'project_invoice/__openerp__.py'
--- project_invoice/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_invoice/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -27,8 +27,8 @@
     'description': """
 This module lets you search for invoices on the basis of an analytic account.
     """,
-    'author': 'Jordi Ballester (Eficent)',
-    'website': 'http://www.eficent.com',
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     'depends': [
         'account',"project"
         ],

=== modified file 'project_invoice/invoice.py'
--- project_invoice/invoice.py	2012-10-02 23:10:39 +0000
+++ project_invoice/invoice.py	2013-02-27 19:55:32 +0000
@@ -32,8 +32,10 @@
 class account_invoice(osv.osv):
     _inherit = "account.invoice"
 
-    def _line_analytic_accounts_get(self, cr, uid, ids, field_name, arg, context={}):
+    def _line_analytic_accounts_get(self, cr, uid, ids, field_name, arg, context=None):
         result = {}
+        if context is None:
+            context = {}
         for inv in self.browse(cr, uid, ids, context):
             str_data = ''
             analytic_accounts =[]

=== modified file 'project_procurement/__openerp__.py'
--- project_procurement/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_procurement/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,8 +23,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["account", "analytic", "product", "project", "purchase_requisition", "purchase"],
     "description": """

=== modified file 'project_procurement/project_view.xml'
--- project_procurement/project_view.xml	2012-10-02 23:10:39 +0000
+++ project_procurement/project_view.xml	2013-02-27 19:55:32 +0000
@@ -44,10 +44,10 @@
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
             <field name="arch" type="xml">
-            	<page string='Administration' position="after">
+            	<page string='Other Info' position="after">
 	            	<page string="Procurement">
-	            		<field colspan="4" name="purchase_requisitions" nolabel="1"  mode="tree,form" context="{'default_project_id': active_id}"/>
-	                    <field colspan="4" name="purchase_orders" nolabel="1"  mode="tree,form" context="{'default_project_id': active_id}"/>
+	            		<field colspan="4" name="purchase_requisitions" nolabel="1"  mode="tree" context="{'default_project_id': active_id}"/>
+	                    <field colspan="4" name="purchase_orders" nolabel="1"  mode="tree" context="{'default_project_id': active_id}"/>
 	                </page>            			                   
 				</page>	 
             </field>            	        

=== modified file 'project_procurement/purchase_requisition.py'
--- project_procurement/purchase_requisition.py	2012-10-02 23:10:39 +0000
+++ project_procurement/purchase_requisition.py	2013-02-27 19:55:32 +0000
@@ -25,8 +25,8 @@
 class purchase_requisition(osv.osv):
     _inherit = "purchase.requisition"
 
-    def copy_data(self, cr, uid, id, default={}, context=None):
-        if not default:
+    def copy_data(self, cr, uid, id, default=None, context=None):
+        if default is None:
             default = {}
         default.update({
             'state':'draft',

=== modified file 'project_sale/__openerp__.py'
--- project_sale/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_sale/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,8 +23,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["account", "analytic", "product", "project", "sale"],
     "description": """

=== modified file 'project_sale/account_invoice_view.xml'
--- project_sale/account_invoice_view.xml	2012-10-02 23:10:39 +0000
+++ project_sale/account_invoice_view.xml	2013-02-27 19:55:32 +0000
@@ -34,7 +34,7 @@
                         <newline/>
                         <field string="Supplier" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" context="{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}"/>
                         <field domain="[('partner_id','=',partner_id)]" name="address_invoice_id"/>
-                        <field name="fiscal_position" groups="base.group_extended" widget="selection"/>
+                        <field name="fiscal_position" groups="base.group_erp_manager" widget="selection"/>
                         <newline/>
                         <field name="date_invoice"/>
                         <field name="period_id" domain="[('state', '=', 'draft')]" groups="account.group_account_user" widget="selection"/>
@@ -103,24 +103,24 @@
                             <field name="payment_term" widget="selection"/>
                             <field name="name"/>
                             <newline/>
-                            <field name="origin" groups="base.group_extended"/>
-                            <field domain="[('partner_id','=',partner_id)]" name="address_contact_id" groups="base.group_extended"/>
+                            <field name="origin" groups="base.group_erp_manager"/>
+                            <field domain="[('partner_id','=',partner_id)]" name="address_contact_id" groups="base.group_erp_manager"/>
                             <field name="user_id"/>
                             <field name="move_id" groups="account.group_account_user"/>
                             <separator colspan="4" string="Additional Information"/>
                             <field colspan="4" name="comment" nolabel="1"/>
                         </page>
-                        <page string="Payments" groups="base.group_extended">
+                        <page string="Payments" groups="base.group_erp_manager">
                             <field name="payment_ids" colspan="4" nolabel="1" >
                                 <tree string="Payments">
                                     <field name="date" string="Payment Date"/>
                                     <field name="ref"/>
-                                    <field name="name" groups="base.group_extended"/>
+                                    <field name="name" groups="base.group_erp_manager"/>
                                     <field name="journal_id"/>
                                     <field name="debit"/>
                                     <field name="credit"/>
-                                    <field name="amount_currency" groups="base.group_extended"/>
-                                    <field name="currency_id" groups="base.group_extended"/>
+                                    <field name="amount_currency" groups="base.group_erp_manager"/>
+                                    <field name="currency_id" groups="base.group_erp_manager"/>
                                 </tree>
                             </field>
                         </page>
@@ -144,7 +144,7 @@
                     <newline/>
                     <field string="Customer" name="partner_id" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank_id,company_id)" groups="base.group_user" context="{'search_default_customer': 1}"/>
                     <field domain="[('partner_id','=',partner_id)]" name="address_invoice_id"/>
-                    <field name="fiscal_position" groups="base.group_extended" widget="selection"/>
+                    <field name="fiscal_position" groups="base.group_erp_manager" widget="selection"/>
                     <newline/>
                     <field name="date_invoice"/>
                     <field name="period_id" domain="[('state', '=', 'draft')]" groups="account.group_account_user" widget="selection"/>
@@ -200,10 +200,10 @@
                             <field name="user_id"/>
                             <newline/>
                             <field domain="[('partner_id.ref_companies', 'in', [company_id])]" name="partner_bank_id"
-                                groups="base.group_extended"/>
+                                groups="base.group_erp_manager"/>
                             <field name="origin"/>
                             <field colspan="4" domain="[('partner_id','=',partner_id)]" name="address_contact_id"
-                                groups="base.group_extended"/>
+                                groups="base.group_erp_manager"/>
                             <field name="move_id" groups="account.group_account_user"/>
                             <separator colspan="4" string="Additional Information"/>
                             <field colspan="4" name="comment" nolabel="1"/>

=== modified file 'project_sale/project_view.xml'
--- project_sale/project_view.xml	2012-10-02 23:10:39 +0000
+++ project_sale/project_view.xml	2013-02-27 19:55:32 +0000
@@ -16,7 +16,7 @@
 		      <field name="type">form</field>
 		      <field name="inherit_id" ref="project.edit_project"/>
 		      <field name="arch" type="xml">
-		      			<xpath expr="/form/notebook/page[@string='Billing']/field[@name='warn_customer']" position='after'>
+		      			<xpath expr="//form/sheet/notebook/page[@string='Other Info']/group/group[@name='misc']/field[@name='parent_id']" position='after'>
                         	<field name="order_count"/>
                         </xpath>
       		  </field>

=== modified file 'project_sale/sale.py'
--- project_sale/sale.py	2012-10-02 23:10:39 +0000
+++ project_sale/sale.py	2013-02-27 19:55:32 +0000
@@ -110,7 +110,6 @@
                     'uos_id': uos_id,
                     'product_id': line.product_id.id or False,
                     'invoice_line_tax_id': [(6, 0, [x.id for x in line.tax_id])],
-                    'note': line.notes,
                     'account_analytic_id': line.order_id.project and line.order_id.project.analytic_account_id and line.order_id.project.analytic_account_id.id or False,
                     
                 })

=== modified file 'project_sale/sale_order_view.xml'
--- project_sale/sale_order_view.xml	2012-10-02 23:10:39 +0000
+++ project_sale/sale_order_view.xml	2013-02-27 19:55:32 +0000
@@ -7,9 +7,13 @@
             <field name="type">form</field>
             <field name="inherit_id" ref="sale.view_order_form" />
             <field name="arch" type="xml">
-            	<xpath expr="//form[@string='Sales Order']//page[@string='Sales Order']//field[@name='project_id']" position="replace">
-                	<field name="project"/>      
-                	<field name="project_manager"/>    
+            	<xpath expr="//form[@string='Sales Order']/sheet/notebook/page[@string='Other Information']" position="after">
+                	<page string="Proyecto">
+                		<group>
+                			<field name="project" string="Proyecto Asignado"/>      
+                			<field name="project_manager" string="Jefe de proyecto"/>
+                		</group>
+                	</page>    
                 </xpath>            
             </field>
         </record>
@@ -21,54 +25,71 @@
             <field name="inherit_id" ref="sale.view_order_line_form2" />
             <field name="arch" type="xml">
         		<xpath expr="//form[@string='Sales Order Lines']" position="replace">
-        			<form string="Sales Order Lines">
-	                    <group colspan="4" col="6">
-	                        <field name="order_id"/>
-	                        <field name="order_project" readonly="1"/>
-	                        <field name="order_project_manager" readonly="1"/>
-	                        <field name="order_partner_id" readonly="1"/>
-	                        <field name="invoiced"/>
-	
-	                        <field name="product_id" readonly="1"/>
-	                        <field name="product_uom_qty" readonly="1"/>
-	                        <field name="product_uom"/>
-	
-	                        <field colspan="4" name="name" groups="base.group_extended"/>
-	                        <field name="company_id" groups="base.group_multi_company" readonly="1"/>
-	                    </group>
-	                    <separator colspan="4" string="Price"/>
-	                    <group colspan="4" col="6">
-	                        <field name="price_unit"/>
-	                        <field name="discount"/>
-	                        <field name="price_subtotal"/>
-	                    </group>
-	                    <separator colspan="4" string="Notes"/>
-	                    <field colspan="4" name="notes" nolabel="1"/>
-	                    <separator colspan="4"/>
-	                    <field name="state"/>
-	                    <group col="4" colspan="2">
-	                        <button name="button_cancel"
-	                            string="Cancel" type="object"
-	                            icon="gtk-cancel"
-	                            states="confirmed,exception"/>
-	                        <button colspan="1"
-	                            name="%(sale.action_view_sale_order_line_make_invoice)d"
-	                            string="Create Invoice"
-	                            type="action"
-	                            states="done"
-	                            icon="gtk-go-forward"
-	                            groups="account.group_account_user"
-	                            attrs="{'invisible': [('invoiced', '=', 1)]}"/>
-	                        <button name="button_done"
-	                            string="Done" type="object"
-	                            states="confirmed,exception"
-	                            icon="gtk-go-forward" />
-	                        <button name="button_confirm"
-	                            string="Confirmed" type="object"
-	                            states="done,exception"
-	                            icon="gtk-go-forward" />    
-	                    </group>
-           			</form>
+					<form string="Sales Order Lines" version="7.0">
+						<header>
+							<button name="%(sale.action_view_sale_order_line_make_invoice)d" states="confirmed" string="Invoice" type="action" icon="terp-document-new"/>
+							<button name="button_cancel" string="Cancel" type="object" states="confirmed,exception" groups="base.group_user"/>
+							<button name="button_done" string="Done" type="object"  attrs="{'invisible': ['|',('invoiced', '=', 0), ('state', 'not in', ('confirmed', 'exception'))]}" class="oe_highlight"/>
+							<field name="state" widget="statusbar" statusbar_visible="draft,confirmed,done" statusbar_colors='{"exception":"red","cancel":"red"}'/>
+						</header>
+						<sheet>
+							<label for="order_id" class="oe_edit_only"/>
+							<h1><field name="order_id" domain="[('state','!=','done')]"/></h1>
+							<label for="order_partner_id" class="oe_edit_only"/>
+							<h2><field name="order_partner_id"/></h2>
+							<field name="order_project" class="oe_edit_only"/>
+	                        <field name="order_project_manager" class="oe_edit_only"/>
+							<field name="invoiced"/>
+							<group>
+								<group>
+									<field name="product_id"
+                                           context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}"
+                                           groups="base.group_user"
+                                           on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, product_uos_qty, product_uos, name, parent.partner_id, False, True, parent.date_order, False, parent.fiscal_position, False, context)"/>
+
+                                    <label for="product_uom_qty"/>
+                                    <div>
+                                        <field
+                                            context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}"
+                                            name="product_uom_qty" class="oe_inline"
+                                            on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, False, parent.date_order, False, parent.fiscal_position, True, context)"/>
+                                        <field name="product_uom" groups="product.group_uom" class="oe_inline oe_no_button"
+                                            on_change="product_uom_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, False, parent.date_order, context)"/>
+                                    </div>
+
+                                    <label for="product_uos_qty" groups="product.group_uos"/>
+                                    <div groups="product.group_uos">
+                                        <field name="product_uos_qty" class="oe_inline"/>
+                                        <field name="product_uos" options='{"no_open": True}' class="oe_inline"/>
+                                    </div>
+                                    <field name="price_unit"/>
+                                    <label for="discount" groups="sale.group_discount_per_so_line"/>
+                                    <div name="discount" groups="sale.group_discount_per_so_line">
+                                        <field name="discount" class="oe_inline"/> %%
+                                    </div>
+								</group>
+								<group>
+									<field name="price_subtotal"/>
+									<field name="invoiced"/>
+									<field name="company_id" groups="base.group_multi_company" readonly="1"/>
+                                    <field name="tax_id" widget="many2many_tags" domain="[('parent_id','=',False),('type_tax_use','&lt;&gt;','purchase')]"/>
+                                    <field name="type"/>
+                                    <field name="th_weight"/>
+                                    <!-- we should put a config wizard for these two fields -->
+                                    <field name="address_allotment_id"/>
+								</group>
+							</group>
+
+					        <label for="name"/>
+							<field name="name"/>
+							<div groups="base.group_no_one">
+								<label for="invoice_lines"/>
+								<field name="invoice_lines"/>
+							</div>
+							
+							<field name="state"/>
+						</sheet>
+					</form>
            		</xpath>
         	</field>
      	</record>	

=== modified file 'project_scope_wbs/__openerp__.py'
--- project_scope_wbs/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_scope_wbs/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,10 +23,10 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
-    "depends": ["project","analytic"],
+    "depends": ["account","project","analytic"],
     "description": """Eficent Project Management. Project Scope  
     - The hierarchy of a project is considered the WBS (Work Breakdown Structure)
     - The analytic accounts in the project hierarchies are considered WBS components 

=== modified file 'project_scope_wbs/project_lifecycle_view.xml'
--- project_scope_wbs/project_lifecycle_view.xml	2012-10-02 23:10:39 +0000
+++ project_scope_wbs/project_lifecycle_view.xml	2013-02-27 19:55:32 +0000
@@ -48,7 +48,7 @@
             <field name="help">Define the project lifecycle stages.</field>
         </record>
 
-        <menuitem id="menu_project_lifecycle_config" name="Lifecycle" parent="project.menu_definitions" sequence="1"/>
+        <menuitem id="menu_project_lifecycle_config" name="Lifecycle" parent="base.menu_definitions" sequence="1"/>
         <menuitem action="action_project_lifecycle_tree" id="menu_project_lifecycle_view" parent="menu_project_lifecycle_config" sequence="1"/>                  	                    
     </data>
 </openerp>

=== modified file 'project_scope_wbs/project_scope_wbs.py'
--- project_scope_wbs/project_scope_wbs.py	2012-12-13 04:19:37 +0000
+++ project_scope_wbs/project_scope_wbs.py	2013-02-27 19:55:32 +0000
@@ -29,8 +29,8 @@
 class task(osv.osv):
     _inherit = 'project.task'
 
-    def _project_complete_wbs_name(self, cr, uid, ids, prop, unknow_none, unknow_dict):
-        
+    def _project_complete_wbs_name(self, cr, uid, ids, prop, unknow_none, context=None):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:32")
         if not ids:
             return []
         
@@ -45,15 +45,15 @@
         for task in tasks:            
             if task.project_id:
                 task_project_id = task.project_id.id
-                data_project = project_obj.read(cr, uid, task_project_id, ['complete_wbs_name'], context=[])            
+                data_project = project_obj.read(cr, uid, task_project_id, ['complete_wbs_name'], context=context)            
             if data_project:
                 res.append((task.id, data_project['complete_wbs_name']))
             else:
                 res.append((task.id, ''))
         return dict(res)  
 
-    def _project_complete_wbs_code(self, cr, uid, ids, prop, unknow_none, unknow_dict):
-        
+    def _project_complete_wbs_code(self, cr, uid, ids, prop, unknow_none, context=None):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:55")
         if not ids:
             return []
         
@@ -68,7 +68,7 @@
         for task in tasks:            
             if task.project_id:
                 task_project_id = task.project_id.id
-                data_project = project_obj.read(cr, uid, task_project_id, ['complete_wbs_code'], context=[])            
+                data_project = project_obj.read(cr, uid, task_project_id, ['complete_wbs_code'], context=context)            
             if data_project:
                 res.append((task.id, data_project['complete_wbs_code']))
             else:
@@ -81,11 +81,11 @@
     _columns = {
         'project_complete_wbs_name': fields.function(_project_complete_wbs_name, method=True, type='char', string='WBS path name', size=250, help='Project Complete WBS path name',
             store={
-                'project.task': (lambda self, cr, uid, ids, c={}: ids, ['project_id'], 10),               
+                'project.task': (lambda self, cr, uid, ids, c=None: ids, ['project_id'], 10),               
             }),   
         'project_complete_wbs_code': fields.function(_project_complete_wbs_code, method=True, type='char', string='WBS path code', size=250, help='Project Complete WBS path code',
             store={
-                'project.task': (lambda self, cr, uid, ids, c={}: ids, ['project_id'], 10),               
+                'project.task': (lambda self, cr, uid, ids, c=None: ids, ['project_id'], 10),               
             }),    
                             
      }    
@@ -98,7 +98,8 @@
     
     _inherit = 'account.analytic.account'
 
-    def get_child_accounts(self, cr, uid, ids, context=None):    
+    def get_child_accounts(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:101") 
         result = {}
         read_data = []
         read_data = self.pool.get('account.analytic.account').read(cr, uid, ids,['child_ids'])
@@ -112,6 +113,7 @@
         return result
 
     def _complete_wbs_code_calc(self, cr, uid, ids, prop, unknow_none, unknow_dict):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:115")
         if not ids:
             return []
         res = []    
@@ -131,6 +133,7 @@
     
         
     def _complete_wbs_name_calc(self, cr, uid, ids, prop, unknow_none, unknow_dict):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:135")
         if not ids:
             return []
         res = []    
@@ -166,6 +169,7 @@
      }
      
     def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:171")
         if not args:
             args = []
         if context is None:
@@ -188,6 +192,7 @@
         return self.name_get(cr, uid, account, context=context)
     
     def code_get(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:195")
         if not ids:
             return []
         res = []
@@ -204,10 +209,20 @@
             data = ' / '.join(data)
             res.append((account.id, data))
         return res
-    
+
     def name_get(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:214")
+
         if not ids:
             return []
+        if type(ids) is int: ids = [ids]
+
+        lista_nueva = []
+        for i in ids:
+            if i not in lista_nueva:
+                lista_nueva.append(i)
+        ids = lista_nueva
+
         res = []
         for account in self.browse(cr, uid, ids, context=context):
             data = []
@@ -234,12 +249,23 @@
     _inherit = "project.project"
 
     def name_get(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:243")
+
         if not ids:
             return []
+        if type(ids) is int: ids = [ids]
         res = []
+
+        lista_nueva = []
+        for i in ids:
+            if i not in lista_nueva:
+                lista_nueva.append(i)
+        ids = lista_nueva
+
         for project in self.browse(cr, uid, ids, context=context):
             data = []
             proj = project
+
             while proj:
                 if proj and proj.name:
                     data.insert(0, proj.name)
@@ -256,9 +282,11 @@
 
             
             res.append((project.id, data))
+        osv.logging.log(100, "267: "+str(res))
         return res
 
     def code_get(self, cr, uid, ids, context=None):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:270")
         if not ids:
             return []
         res = []
@@ -278,6 +306,7 @@
 
  
     def _child_compute(self, cr, uid, ids, name, arg, context=None):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:289")
         result = {}
         project_child_ids = []
         if context is None:
@@ -300,6 +329,8 @@
     }
     
     def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
+        osv.logging.log(100, "Estoy entrando en project_scope_wbs:313")
+
         if not args:
             args = []
         if context is None:
@@ -326,5 +357,3 @@
         return self.name_get(cr, uid, project, context=context)
 
 project()
-
-             
\ No newline at end of file

=== modified file 'project_scope_wbs/project_scope_wbs_view.xml'
--- project_scope_wbs/project_scope_wbs_view.xml	2012-10-02 23:10:39 +0000
+++ project_scope_wbs/project_scope_wbs_view.xml	2013-02-27 19:55:32 +0000
@@ -2,69 +2,73 @@
 <openerp>
     <data>
 
-
-
 #---------------------------------------------------------------------------------------------------------
 #   Extend the project
 #---------------------------------------------------------------------------------------------------------
-        
+
        <record id="view_project_project_filter" model="ir.ui.view">
             <field name="name">project.project.select</field>
             <field name="model">project.project</field>
             <field name="type">search</field>
             <field name="inherit_id" ref="project.view_project_project_filter"/>
-            <field name="arch" type="xml">            	 	
+            <field name="arch" type="xml">
             	<field name="name" position="after">
-            			<field name="complete_wbs_name" string="WBS Path name"/>    
-            			<field name="complete_wbs_code" string="WBS Path code"/>              			 
-						<field name="class" string="Class"/>       
-						<field name="lifecycle_stage" string="Stage" attrs="{'readonly':[('class','in',['deliverable', 'work_package'])]}"/>     			         				            		
+            			<field name="complete_wbs_name" string="WBS Path name"/>
+            			<field name="complete_wbs_code" string="WBS Path code"/>
+						<field name="class" string="Class"/>
+						<field name="lifecycle_stage" string="Stage" attrs="{'readonly':[('class','in',['deliverable', 'work_package'])]}"/>
             	</field>
             </field>
         </record>
- 	
-        
+
+
         <record id="view_project" model="ir.ui.view">
             <field name="name">project.project.tree</field>
             <field name="model">project.project</field>
             <field name="type">tree</field>
             <field name="inherit_id" ref="project.view_project"/>
             <field name="field_parent">child_ids</field>
-            <field name="arch" type="xml">                
+            <field name="arch" type="xml">
                 <field name="name" position="after">
             		<field name="complete_wbs_name" string="WBS Path name"/>
-            		<field name="complete_wbs_code" string="WBS Path code"/> 
-            		<field name="class" string="Class"/>   
-            		<field name="lifecycle_stage" string="Stage"/>     			            			            				            		
-            	</field>            	                                         
+					<!-- # Comentado porque no me interesa ver el codigo del proyecto - 25/01/2013 -->
+            		<!--<field name="complete_wbs_code" string="WBS Path code"/>-->
+            		<field name="class" string="Class"/>
+            		<field name="lifecycle_stage" string="Stage"/>
+            	</field>
             </field>
-        </record>        
- 
-        
+        </record>
+
+
         <record id="edit_project" model="ir.ui.view">
             <field name="name">project.project.form</field>
             <field name="model">project.project</field>
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
             <field name="arch" type="xml">
-            	<field name="name" position="after">
-            		<field name="class" string="Class"/>
-            		<field name="lifecycle_stage" string="Stage"/>            		             		
-            		<field name="code" string="Code"/>
-            		<field name="complete_wbs_code" string="WBS Path code" readonly="1"/>            				            		
-            	</field>
-            	<page string="Administration" position="after">
+            	<group position="after">
+					<group string="Configuracion de Proyecto">
+						<group>
+							<field name="class" string="Class"/>
+							<field name="lifecycle_stage" string="Stage"/>
+						</group>
+						<group>
+							<field name="code" string="Code"/>
+							<field name="complete_wbs_code" string="WBS Path code" readonly="1" />
+						</group>
+					</group>
+            	</group>
+            	<page string="Other Info" position="after">
 	            	<page string="WBS Components">
-	            		<field colspan="4" name="project_child_complete_ids" nolabel="1" 
+	            		<field colspan="4" name="project_child_complete_ids" nolabel="1"
 	            			context="{'form_view_ref':'view_project','tree_view_ref':'edit_project'}">
 	            		</field>
-
-	              </page>    
-	             </page>	              	
-            </field>            	        
-        </record>  
-
-        
+					</page>
+	             </page>
+            </field>
+        </record>
+
+
 
 #---------------------------------------------------------------------------------------------------------
 #   Extend the analytic account
@@ -76,80 +80,81 @@
             <field eval="8" name="priority"/>
             <field name="inherit_id" ref="account.view_account_analytic_account_list"/>
             <field name="arch" type="xml">
-                <field name="code" position="after">            		
-            		<field name="class" string="Class"/>   
-            		<field name="lifecycle_stage" string="Stage"/>     			            			            				            		
-            	</field>                     	
+                <field name="code" position="after">
+            		<field name="class" string="Class"/>
+            		<field name="lifecycle_stage" string="Stage"/>
+            	</field>
             </field>
-        </record>              
-        
+        </record>
+
         <record id="view_account_analytic_account_search" model="ir.ui.view">
             <field name="name">account.analytic.account.search</field>
             <field name="model">account.analytic.account</field>
             <field name="type">search</field>
             <field name="inherit_id" ref="account.view_account_analytic_account_search"/>
             <field name="arch" type="xml">
-            	<field name="name" position="after">  
-            		<field name="complete_wbs_name" string="WBS Path name"/>  
-            		<field name="complete_wbs_code" string="WBS Path code"/>       			 
-					<field name="class" string="Class"/>            	
-					<field name="lifecycle_stage" string="Stage"/>		         				            		
-            	</field>               	   
+            	<field name="name" position="after">
+            		<field name="complete_wbs_name" string="WBS Path name"/>
+            		<field name="complete_wbs_code" string="WBS Path code"/>
+					<field name="class" string="Class"/>
+					<field name="lifecycle_stage" string="Stage"/>
+            	</field>
             </field>
-        </record>           
-        
+        </record>
+
 		<record id="view_account_analytic_account_tree" model="ir.ui.view">
             <field name="name">account.analytic.account.tree</field>
             <field name="model">account.analytic.account</field>
             <field name="type">tree</field>
             <field name="field_parent">child_complete_ids</field>
             <field name="inherit_id" ref="account.view_account_analytic_account_tree"/>
-            <field name="arch" type="xml">         	    
-            	<field name="name" position="after"> 
-            		<field name="complete_wbs_name" string="WBS Path name"/> 	
-            	</field>  	  
-            	<field name="code" position="after">  
-            		<field name="complete_wbs_code" string="WBS Path code"/>              			 
-					<field name="class" string="Class"/>         
-					<field name="lifecycle_stage" string="Stage"/>   			         				            		
-            	</field>           
+            <field name="arch" type="xml">
+            	<field name="name" position="after">
+            		<field name="complete_wbs_name" string="WBS Path name"/>
+            	</field>
+            	<field name="code" position="after">
+            		<field name="complete_wbs_code" string="WBS Path code"/>
+					<field name="class" string="Class"/>
+					<field name="lifecycle_stage" string="Stage"/>
+            	</field>
             </field>
-        </record>         
-           	
+        </record>
+
         <record id="view_account_analytic_account_form" model="ir.ui.view">
             <field name="name">account.analytic.account.form</field>
             <field name="model">account.analytic.account</field>
             <field name="type">form</field>
-            <field name="inherit_id" ref="account.view_account_analytic_account_form"/>
+            <field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
             <field name="arch" type="xml">
             	<field name="name" position="after">
-            		<field name="class" string="Class"/>            		
+            		<field name="class" string="Class"/>
             		<field name="lifecycle_stage" string="Stage"/>
             		<field name="complete_wbs_code" string="WBS Path code" readonly="1"/>
-            	</field>            				            		            	              
+            	</field>
             </field>
-        </record>         
-        
+        </record>
+
 #---------------------------------------------------------------------------------------------------------
 #  Extend the task
 #---------------------------------------------------------------------------------------------------------
 
-        <!-- Task 
+		<!-- # Comentado porque no nos interesa que aparezcan las rutas del proyecto en la tarea -->
+        <!-- Task
  		<record id="view_task_form2" model="ir.ui.view">
             <field name="name">project.task.form</field>
             <field name="model">project.task</field>
             <field name="type">form</field>
             <field eval="2" name="priority"/>
-            <field name="inherit_id" ref="project.view_task_form2"/>       
-            <field name="arch" type="xml">       
+            <field name="inherit_id" ref="project.view_task_form2"/>
+            <field name="arch" type="xml">
             	<field name="project_id" position="after">
 					<field name="project_complete_wbs_name"/>
 					<field name="project_complete_wbs_code"/>
-				</field>            						
+				</field>
             </field>
         </record>
-       
-                                
+
+
         <record id="view_task_search_form" model="ir.ui.view">
             <field name="name">project.task.search.form</field>
             <field name="model">project.task</field>
@@ -157,12 +162,12 @@
             <field name="inherit_id" ref="project.view_task_search_form"/>
             <field name="arch" type="xml">
             	<field name="project_id" position="after">
-        			<field name="project_complete_wbs_code"/>   
-        			<field name="project_complete_wbs_name" string="WBS Path name"/> 	         				            		
-            	</field>              	
+        			<field name="project_complete_wbs_code"/>
+        			<field name="project_complete_wbs_name" string="WBS Path name"/>
+            	</field>
             </field>
-        </record>   
-        
+        </record>
+
         <record id="view_task_tree2" model="ir.ui.view">
             <field name="name">project.task.tree</field>
             <field name="model">project.task</field>
@@ -171,11 +176,11 @@
             <field name="inherit_id" ref="project.view_task_tree2"/>
             <field name="arch" type="xml">
             	<field name="project_id" position="after">
-        			<field name="project_complete_wbs_code"/>   
-        			<field name="project_complete_wbs_name" string="WBS Path name"/> 	         				            		
-            	</field>   
+        			<field name="project_complete_wbs_code"/>
+        			<field name="project_complete_wbs_name" string="WBS Path name"/>
+            	</field>
             </field>
-        </record>              
-         -->       
+        </record>
+         -->
     </data>
-</openerp>        
+</openerp>

=== modified file 'project_time_easy_scheduling/__openerp__.py'
--- project_time_easy_scheduling/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_time_easy_scheduling/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -22,8 +22,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["project_time_schedule",
                 "project_time_sequence",

=== modified file 'project_time_easy_scheduling/project_task_view.xml'
--- project_time_easy_scheduling/project_task_view.xml	2012-10-02 23:10:39 +0000
+++ project_time_easy_scheduling/project_task_view.xml	2013-02-27 19:55:32 +0000
@@ -17,7 +17,7 @@
                         <filter name="edit"
                             string="Edit"  context="{'set_editable':True,'seq_visible': True}"
                             icon="gtk-execute"
-                            groups="base.group_extended"/>
+                            groups="base.group_erp_manager"/>
                         <separator orientation="vertical"/>	
                         <field name="id" select="1"/>					
                         <field name="name" select="1"/>
@@ -33,12 +33,12 @@
                         </field>
                     </group>
                     <newline/>
-                    <group expand="0" string="Group By..." colspan="4" col="20">
+                    <group expand="0" string="Group By...">
                         <filter string="Users" name="group_user_id" icon="terp-personal" domain="[]"  context="{'group_by':'user_id'}"/>
                         <separator orientation="vertical"/>
                         <filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
                         <separator orientation="vertical"/>                        
-                        <filter string="State" name="group_state" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>                        
+                        <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>                        
                     </group>
                 </search>
             			          			         				            		
@@ -51,8 +51,33 @@
             <field name="type">tree</field>
             <field eval="2" name="priority"/>
             <field name="arch" type="xml">
-                <tree colors="grey: state in ('cancelled','done');blue: state in ('pending', 'ready');red: date_latest_finish and (date_latest_finish&lt;current_date) and (state in ('draft','ready','pending','open'));red: date_earliest_start and (date_earliest_start&gt;current_date) and (state in ('draft','ready','pending')); green: (( not date_latest_finish or not(date_latest_finish and (date_latest_finish&lt;current_date))) and state in ('open') and ( not date_earliest_start or not(date_earliest_start and (date_earliest_start&gt;current_date))) and state in ('open'))"	
-                			  string="Activities">                    
+                <tree colors="
+                	grey: state in ('cancelled','done');
+                	blue: state in ('pending', 'ready');
+                	red: 
+	                	'date_latest_finish', 
+	                	'and', ('date_latest_finish','&lt;','current_date'), 
+	                	'and', ('state', 'in', ('draft','ready','pending','open'));
+
+                	red: 
+                		'date_earliest_start', 
+                		'and', ('date_earliest_start','&gt;','current_date'), 
+                		'and', ('state', 'in', ('draft','ready','pending')); 
+
+                	green: (
+                		('not', 'date_latest_finish', 'or', 'not', 
+                			('date_latest_finish', 
+                			'and', ('date_latest_finish','&lt;',current_date))
+                		), 
+                		'and', 'state', 'in', ('open'), 
+                		'and', 
+                			('not', 'date_earliest_start', 'or', 'not', 
+                				('date_earliest_start', 
+                				'and', ('date_earliest_start','&gt;',current_date))
+                			), 
+                		'and', 'state', 'in', ('open')
+                	) "	string="Activities">
+
                     <field name="id" readonly ="1"/>
                     <field name="name"/>     
                     <field name="project_id"/> 
@@ -62,7 +87,7 @@
                     <field name="project_complete_wbs_name" string="WBS Path name" />                                        
                     -->
                     
-                    <button groups="base.group_extended" name="%(project_time_sequence.action_project_task_link_predecessors_str)d" states="pending,open,draft,ready" string="Link" type="action" icon="gtk-sort-descending" help="For linking to a predecessor task"/>
+                    <button groups="base.group_erp_manager" name="%(project_time_sequence.action_project_task_link_predecessors_str)d" states="pending,open,draft,ready" string="Link" type="action" icon="gtk-sort-descending" help="For linking to a predecessor task"/>
                     
                     <field name="predecessor_ids_str" readonly ="1"/>    
                     <field name="predecessor_names_str" readonly ="1"/>
@@ -97,7 +122,7 @@
             <field name="view_mode">tree,form,calendar,gantt</field>
             <field name="view_id" ref="view_activity_scheduling_tree"/>
             <field eval="False" name="filter"/>                  
-            <field name="context">{"search_default_user_id":uid, "search_default_current": 1}</field>
+            <field name="context">{'search_default_user_id': uid, 'search_default_Current': 1}</field>
             <field name="search_view_id" ref="view_activity_scheduling_search"/>
             <field name="help">Schedule project activities, including tasks and milestones</field>            
         </record>
@@ -117,7 +142,7 @@
                         <filter name="edit"
                             string="Edit"  context="{'set_editable':True,'seq_visible': True}"
                             icon="gtk-execute"
-                            groups="base.group_extended"/>
+                            groups="base.group_erp_manager"/>
                         <separator orientation="vertical"/>
                         <field name="id" select="1"/>
                         <field name="name" select="1"/>
@@ -148,8 +173,33 @@
             <field name="type">tree</field>
             <field eval="2" name="priority"/>
             <field name="arch" type="xml">
-                <tree colors="grey: state in ('cancelled','done');blue: state in ('pending', 'ready');red: date_latest_finish and (date_latest_finish&lt;current_date) and (state in ('draft','ready','pending','open'));red: date_earliest_start and (date_earliest_start&gt;current_date) and (state in ('draft','ready','pending')); green: (( not date_latest_finish or not(date_latest_finish and (date_latest_finish&lt;current_date))) and state in ('open') and ( not date_earliest_start or not(date_earliest_start and (date_earliest_start&gt;current_date))) and state in ('open'))"	
-                			  string="Activities">                    
+            	<tree colors="
+                	grey: state in ('cancelled','done');
+                	blue: state in ('pending', 'ready');
+                	red: 
+	                	'date_latest_finish', 
+	                	'and', ('date_latest_finish','&lt;','current_date'), 
+	                	'and', ('state', 'in', ('draft','ready','pending','open'));
+
+                	red: 
+                		'date_earliest_start', 
+                		'and', ('date_earliest_start','&gt;','current_date'), 
+                		'and', ('state', 'in', ('draft','ready','pending')); 
+
+                	green: (
+                		('not', 'date_latest_finish', 'or', 'not', 
+                			('date_latest_finish', 
+                			'and', ('date_latest_finish','&lt;',current_date))
+                		), 
+                		'and', 'state', 'in', ('open'), 
+                		'and', 
+                			('not', 'date_earliest_start', 'or', 'not', 
+                				('date_earliest_start', 
+                				'and', ('date_earliest_start','&gt;',current_date))
+                			), 
+                		'and', 'state', 'in', ('open')
+                	) "	string="Activities">
+
                     <field name="id" readonly ="1"/>
                     <field name="name"/>     
                     <field name="project_id"/> 
@@ -157,7 +207,7 @@
                   	<field name="date_latest_finish"/>   
                   	<field name="predecessor_ids_str" readonly ="1"/>    
                     <field name="predecessor_names_str" readonly ="1"/>                    
-                    <button groups="base.group_extended" name="%(project_time_sequence.action_project_task_link_predecessors_str)d" states="pending,open,draft,ready" string="Link" type="action" icon="gtk-sort-descending" help="For linking to a predecessor task"/>                                        
+                    <button groups="base.group_erp_manager" name="%(project_time_sequence.action_project_task_link_predecessors_str)d" states="pending,open,draft,ready" string="Link" type="action" icon="gtk-sort-descending" help="For linking to a predecessor task"/>                                        
                     <field name="milestone"/>                                       
                     <button name="do_cancel" states="draft,ready,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/>
                     <button name="do_open" states="pending,draft,ready,done,cancelled" string="Start Activity" type="object" icon="gtk-new" help="For changing to open state" invisible="context.get('set_visible',False)"/>
@@ -175,7 +225,7 @@
             <field name="view_mode">tree,form,calendar,gantt,graph</field>
             <field eval="False" name="filter"/>
             <field name="inherit_id" ref="project.view_task_tree2"/>             
-            <field name="context">{"search_default_user_id":uid, "search_default_current": 1}</field>
+            <field name="context">{'search_default_user_id': uid, 'search_default_Current': 1}</field>
             <field name="search_view_id" ref="view_activity_search"/>
             <field name="help">Manage Project activities, including tasks and milestones</field>
         </record>
@@ -213,7 +263,6 @@
             src_model="project.project"
             view_id="view_activity_scheduling_tree"
             groups="project.group_project_manager,project.group_project_user"/>
-            />   
 
 
 

=== modified file 'project_time_milestone/__openerp__.py'
--- project_time_milestone/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_time_milestone/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,8 +23,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["project"],
     "description": """

=== modified file 'project_time_milestone/project_time_milestone_view.xml'
--- project_time_milestone/project_time_milestone_view.xml	2012-10-02 23:10:39 +0000
+++ project_time_milestone/project_time_milestone_view.xml	2013-02-27 19:55:32 +0000
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
     <data>
-    	
+
 
 
         <!-- Task -->
@@ -10,24 +10,31 @@
             <field name="model">project.task</field>
             <field name="type">form</field>
             <field eval="2" name="priority"/>
-            <field name="inherit_id" ref="project.view_task_form2"/>       
-            <field name="arch" type="xml">       
-            	<field name="name" position="after">
-            		<field name="milestone"/>            		  
-            	</field>
-            	
+            <field name="inherit_id" ref="project.view_task_form2"/>
+            <field name="arch" type="xml">
+            	<notebook position="before">
+            		<group>
+						<field name="milestone" string="Milestone" attrs="{'invisible':False}"/>
+					</group>
+            	</notebook>
+
 	            <page string='Extra Info' position="after">
-	            	<page groups="base.group_extended" string="Milestone" attrs="{'readonly':[('milestone','=',False)]}">
-	            		<group colspan="3" col="3">    
-	            			<field name="public_milestone"/>                          
+	            	<page groups="base.group_erp_manager" string="Milestone" attrs="{'readonly':[('milestone','=',False)]}">
+						<group>
+							<field name="public_milestone"/>
+						</group>
+						<group>
 							<field name="project_poc"/>
-							<field name="invoice_percentage"/>          						
+						</group>
+						<group>
+							<field name="invoice_percentage"/>
 						</group>
 	            	</page>
-	         	</page>    
+	         	</page>
+			
             </field>
         </record>
-        
+
 
         <record id="action_view_milestone" model="ir.actions.act_window">
             <field name="name">Milestones</field>
@@ -35,18 +42,18 @@
             <field name="view_type">form</field>
             <field name="view_mode">tree,form,calendar,gantt,graph</field>
             <field eval="False" name="filter"/>
-            <field name="inherit_id" ref="project.view_task_tree2"/>   
+            <field name="inherit_id" ref="project.view_task_tree2"/>
             <field name="domain">[('milestone', '=', True)]</field>
-            <field name="context">{"search_default_user_id":uid, "search_default_current": 1,'milestone': True}</field>
+            <field name="context">{'search_default_user_id': uid, 'search_default_Current': 1, 'milestone': True}</field>
             <field name="search_view_id" ref="project.view_task_search_form"/>
             <field name="help">Manage Project milestones</field>
         </record>
         <menuitem action="action_view_milestone" id="menu_action_view_milestone" parent="project.menu_project_management" sequence="4"/>
 
-	 	
+
         <record id="project.action_view_task" model="ir.actions.act_window">
             <field name="domain">[('milestone', '=', False)]</field>
-            <field name="context">{"search_default_user_id":uid, "search_default_current": 1,'milestone': True}</field>            
+            <field name="context">{'search_default_user_id': uid, 'search_default_Current': 1, 'milestone': True}</field>
         </record>
 
 		<record id="edit_project" model="ir.ui.view">
@@ -54,33 +61,33 @@
             <field name="model">project.project</field>
             <field name="type">form</field>
             <field name="inherit_id" ref="project.edit_project"/>
-            <field name="arch" type="xml">                
-            	<page string='Administration' position="after">
+            <field name="arch" type="xml">
+            	<page string='Other Info' position="after">
 	            	<page string="Milestones">
-	                        <field colspan="4" name="milestones" nolabel="1"  mode="tree,form" context="{'default_project_id': active_id}">
+	                        <field colspan="4" name="milestones" nolabel="1"  mode="tree" context="{'default_project_id': active_id}">
 	                            <tree string="Milestones">
 	                            	<field name="id"/>
 	                                <field name="name"/>
-	                                <field name="date_early_start"/>
-	                                <field name="date_late_finish"/>
+	                                <field name="date_start"/>
+	                                <field name="date_end"/>
 									<field name="project_poc"/>
-									<field name="invoice_percentage"/> 	                                
-	                                <field name="state"/>
+									<field name="invoice_percentage"/>
+	                                <field name="state" />
 	                                <button name="do_ready" states="draft,pending,open" string="Ready to start" type="object" icon="gtk-ok"/>
 									<button name="do_cancel" states="draft,ready,open,pending" string="Cancel" type="object" icon="gtk-cancel"/>
 	                                <button name="do_draft" states="ready" string="Draft" type="object" icon="gtk-indent"/>
 	                                <button name="do_open" states="ready,pending" string="Start Task" type="object" icon="gtk-execute"/>
 	                                <button name="%(project.action_project_task_reevaluate)d" states="done,cancelled" string="Reactivate" type="action" icon="gtk-convert" context="{'button_reactivate':True}" />
 	                                <button name="do_pending" states="ready, open" string="Pending" type="object" icon="gtk-media-pause"/>
-	                                <button groups="base.group_extended" name="%(project.action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-sort-descending" help="For changing to delegate state"/>                                
-	                                <button name="action_close" states="pending,open" string="Done" type="object" icon="terp-dialog-close"/>	                                                                
+	                                <button groups="base.group_erp_manager" name="%(project.action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-sort-descending" help="For changing to delegate state"/>
+	                                <button name="action_close" states="pending,open" string="Done" type="object" icon="terp-dialog-close"/>
 	                            </tree>
 	                         </field>
-	                 </page>       
-				</page>  	 
-			</field>                      	
+	                 </page>
+				</page>
+			</field>
     	</record>
-   
-                               	
+
+
     </data>
 </openerp>

=== modified file 'project_time_schedule/__init__.py'
--- project_time_schedule/__init__.py	2012-10-02 23:10:39 +0000
+++ project_time_schedule/__init__.py	2013-02-27 19:55:32 +0000
@@ -20,5 +20,6 @@
 ##############################################################################
 
 import project_time_schedule
+import project_class
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'project_time_schedule/__openerp__.py'
--- project_time_schedule/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_time_schedule/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,10 +23,10 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
-    "depends": ["project"],
+    "depends": ["project", "project_time_schedule_images"],
     "description": """Eficent Project Management. Project Time Management. Activity Scheduling
         - The user accesses from Project - Project – Tasks to the list of tasks and milestones. A new tab "Scheduling" appears. 
         This tab displays attributes relating to the task scheduling.
@@ -47,6 +47,7 @@
                 ],
     "update_xml": [    
         "project_time_schedule_view.xml",
+        "project_class_view.xml",
     ],
     'demo_xml': [
 

=== modified file 'project_time_schedule/i18n/es.po'
--- project_time_schedule/i18n/es.po	2012-10-02 23:10:39 +0000
+++ project_time_schedule/i18n/es.po	2013-02-27 19:55:32 +0000
@@ -1,13 +1,13 @@
 # Translation of OpenERP Server.
 # This file contains the translation of the following modules:
-#	* project_time_schedule
+#	* project_time_sequence
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: OpenERP Server 6.0.3\n"
 "Report-Msgid-Bugs-To: support@xxxxxxxxxxx\n"
-"POT-Creation-Date: 2011-09-15 19:53+0000\n"
-"PO-Revision-Date: 2011-09-15 21:54+0100\n"
+"POT-Creation-Date: 2011-09-15 19:530000\n"
+"PO-Revision-Date: 2011-09-15 21:540100\n"
 "Last-Translator: Jordi Ballester Alomar (Avangard Enterprise Information Systems) <jordi.ballester@xxxxxxxxxxxxxxxx>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -152,3 +152,36 @@
 msgid "Margins"
 msgstr "Márgenes"
 
+#. module: project_time_sequence
+#: field:project.task.link.predecessors,project_id:0
+msgid "Project"
+msgstr "Proyecto"
+
+#. module: project_time_sequence
+#: code:addons/project_time_sequence/wizard/project_task_link_predecessors.py:75
+#: code:addons/project_time_sequence/wizard/project_task_link_predecessors.py:86
+#, python-format
+msgid "Error!"
+msgstr "Error!"
+
+#. module: project_time_sequence
+#: view:project.task.link.predecessors:0
+msgid "Predecessor Tasks"
+msgstr "Tareas Predecesoras"
+
+#. module: project_time_sequence
+#: field:project.task.link.predecessors,task_id:0
+msgid "Target task"
+msgstr "Tarea objeto"
+
+#. module: project_time_sequence
+#: code:addons/project_time_sequence/project_time_sequence.py:136
+#, python-format
+msgid "Send Email after close task"
+msgstr "Enviar mail al cerrar la tarea"
+
+#. module: project_time_sequence
+#: view:project.task.link.predecessors:0
+#: view:project.task.link.predecessors.str:0
+msgid "_Cancel"
+msgstr "_Cancelar"
\ No newline at end of file

=== added file 'project_time_schedule/project_class.py'
--- project_time_schedule/project_class.py	1970-01-01 00:00:00 +0000
+++ project_time_schedule/project_class.py	2013-02-27 19:55:32 +0000
@@ -0,0 +1,234 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2011 Eficent (<http://www.eficent.com/>)
+#              Jordi Ballester Alomar <jordi.ballester@xxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import tools
+from osv import fields, osv
+from tools.translate import _
+
+class project_class(osv.osv):
+    _name = 'project.class'
+    _description = 'Project Class'
+    
+    _columns = {        
+        'name': fields.char('Name', size=16, required=True),
+        'parent': fields.selection((('oerp_default', 'OpenERP Default'),
+                                    ('must_have', 'Must have'),
+                                    ('must_not_have', 'Must not have')), 'Parent', required=True,),
+        'default_child_project_class': fields.many2one('project.class', 'Default Child Project Class',),
+        
+        'use_duration': fields.boolean('Use Duration'),
+        'show_wbs': fields.boolean('Show WBS'),
+        'use_relationships': fields.boolean('Use Relationships'),
+        'use_tasks': fields.boolean('Use Tasks'),
+        'use_sequence': fields.boolean('Use Sequence'),
+        'use_default_tasks_stages': fields.boolean('Use Default Tasks Stages'),
+        'use_related_partner': fields.boolean('Use Related Partner'),
+    }
+
+project_class()
+'''
+class account_analytic_account(osv.osv):
+    _name = 'account.analytic.account'
+    _inherit = 'account.analytic.account'
+    
+    def get_child_accounts(self, cr, uid, ids, context=None):
+        result = {}
+        read_data = []
+        read_data = self.pool.get('account.analytic.account').read(cr, uid, ids,['child_ids'])
+        for data in read_data:
+            for curr_id in ids:
+                result[curr_id] = True
+            for child_id in data['child_ids']:
+                lchild_id = []
+                lchild_id.append(child_id)
+                result.update(self.get_child_accounts(cr, uid, lchild_id, context))
+        return result
+
+    def _complete_wbs_code_calc2(self, cr, uid, ids, prop, unknow_none, unknow_dict):
+        if not ids:
+            return []
+        res = []
+        for account in self.browse(cr, uid, ids, context=None):
+            data = []
+            acc = account
+            while acc:
+                if acc.code:
+                    data.insert(0, acc.code)
+                else:
+                    data.insert(0,'')
+                acc = acc.parent_id
+                
+            data = '/'.join(data)
+            res.append((account.id, data))
+        return dict(res)
+    
+    def _complete_wbs_code_calc2(self, cr, uid, ids, prop, unknow_none, unknow_dict):
+        if not ids:
+            return []
+        res = []
+        for account in self.browse(cr, uid, ids, context=None):
+            data = []
+            acc = account
+            while acc:
+                if acc.code:
+                    data.insert(0, acc.code)
+                else:
+                    data.insert(0,'')
+                acc = acc.parent_id
+                
+            data = '/'.join(data)
+            res.append((account.id, data))
+        return dict(res)
+    
+    
+    
+    _columns = {
+        
+        #'complete_wbs_code': fields.function(_complete_wbs_code_calc, method=True, type='char', string='Full WBS Code', size=250,
+        #    help='The full WBS code describes the full path of this component within the project WBS hierarchy',
+        #    store={'account.analytic.account': (get_child_accounts, ['code'], 20),}),
+        
+        #'child_projects': fields.one2many('project.project', 'parent_id', 'WBS Components'),
+     }
+     
+    def code_get(self, cr, uid, ids, context=None):
+        if not ids:
+            return []
+        res = []
+        for account in self.browse(cr, uid, ids, context=context):
+            data = []
+            acc = account
+            while acc:
+                if acc.code:
+                    data.insert(0, acc.code)
+                else:
+                    data.insert(0,'')
+                    
+                acc = acc.parent_id
+            data = '/'.join(data)
+            res.append((account.id, data))
+        return res
+
+account_analytic_account()
+'''
+
+class project_project(osv.osv):
+    _name = 'project.project'
+    _inherit = 'project.project'
+    
+    def _complete_wbs_code_calc(self, cr, uid, ids, field_name, arg, context=None):
+        res = {}
+        for project in self.browse(cr, uid, ids, context=context):
+            project_name = project.code
+            
+            project_it = project
+            while project_it.project_parent_id:
+                project_it = project_it.project_parent_id
+                project_name = project_it.code + '/' + project_name
+                
+            res[project.id] = project_name
+        return res
+        
+    
+    _columns = {
+        'complete_wbs_code': fields.function(_complete_wbs_code_calc, string='Complete WBS Code', method=True, type='char', size=250,),
+    
+        'project_parent_id': fields.many2one('project.project', 'Parent Project',),
+        'project_child_ids': fields.one2many('project.project', 'project_parent_id', 'Child Projects'),
+        
+        'project_class_id': fields.many2one('project.class', 'Project Class', required=True, ),
+        
+        'class_use_duration': fields.related('project_class_id', 'use_duration', type='boolean', string='Use Duration'),
+        'class_parent': fields.related('project_class_id', 'parent', type='char', string='Parent'),
+        'class_show_wbs': fields.related('project_class_id', 'show_wbs', type='boolean', string='Show WBS'),
+        'class_use_relationships': fields.related('project_class_id', 'use_relationships', type='boolean',
+                    string='Use Relationships'),
+        'class_use_tasks': fields.related('project_class_id', 'use_tasks', type='boolean', string='Use tasks'),
+        'class_use_sequence': fields.related('project_class_id', 'use_sequence', type='boolean', string='Use Sequence'),
+        'class_use_default_tasks_stages': fields.related('project_class_id', 'use_default_tasks_stages',
+                    type='boolean', string='Use Default Tasks Stages'),
+        'class_use_related_partner': fields.related('project_class_id', 'use_related_partner', type='boolean',
+                    string='Use Related Partner'),
+        'class_default_child_project_class': fields.related('project_class_id', 'default_child_project_class',
+                    type="many2one", relation="project.class"),
+    }
+    
+    def onchange_project_class(self, cr, uid, ids, project_class_id, context=None):
+        v = {}
+        
+        if project_class_id:
+            project_class_obj = self.pool.get('project.class')
+            project_class = project_class_obj.browse(cr, uid, project_class_id, context=context)
+            
+            if not project_class:
+                return {'value': v}
+            
+            if isinstance(project_class, list):
+                project_class = project_class[0]
+            v['class_use_duration'] = project_class.use_duration
+            v['class_parent'] = project_class.parent
+            v['class_show_wbs'] = project_class.show_wbs
+            v['class_use_relationships'] = project_class.use_relationships
+            v['class_use_tasks'] = project_class.use_tasks
+            v['use_tasks'] = project_class.use_tasks
+            v['class_use_sequence'] = project_class.use_sequence
+            v['class_use_default_tasks_stages'] = project_class.use_default_tasks_stages
+            v['class_use_related_partner'] = project_class.use_related_partner
+        else:
+            v['class_use_duration'] = False
+            v['class_parent'] = 'oerp_default'
+            v['class_show_wbs'] = False
+            v['class_use_relationships'] = False
+            v['class_use_tasks'] = False
+            v['use_tasks'] = False
+            v['class_use_sequence'] = False
+            v['class_use_default_tasks_stages'] = False
+        
+        return {'value': v}
+    
+    def create(self, cr, uid, vals, context=None):
+        if 'use_tasks' not in vals and 'project_class_id' in vals:
+            project_class_obj = self.pool.get('project.class')
+            project_class = project_class_obj.browse(cr, uid, vals['project_class_id'], context=context)
+            if isinstance(project_class, list):
+                project_class = project_class[0]
+            vals['use_tasks'] = project_class.use_tasks
+            
+        return super(project_project, self).create(cr, uid, vals, context=context)
+            
+    
+    def write(self, cr, uid, ids, vals, context=None):
+        if 'use_tasks' not in vals and 'project_class_id' in vals:
+            project_class_obj = self.pool.get('project.class')
+            project_class = project_class_obj.browse(cr, uid, vals['project_class_id'], context=context)
+            if isinstance(project_class, list):
+                project_class = project_class[0]
+            vals['use_tasks'] = project_class.use_tasks
+            
+        return super(project_project, self).write(cr, uid, ids, vals, context=context)
+    
+project_project()
+
+
+
+
+
+

=== added file 'project_time_schedule/project_class_view.xml'
--- project_time_schedule/project_class_view.xml	1970-01-01 00:00:00 +0000
+++ project_time_schedule/project_class_view.xml	2013-02-27 19:55:32 +0000
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <!-- project.class -->
+        <record id="view_project_class_search" model="ir.ui.view">
+            <field name="name">project.class.search</field>
+            <field name="model">project.class</field>
+            <field name="type">search</field>
+            <field name="arch" type="xml">
+                <search string="Project Class">
+                    <field name="name"/>
+                    <field name="parent"/>
+                </search>
+            </field>
+        </record>
+        
+        <record id="view_project_class_form" model="ir.ui.view">
+            <field name="name">project.class.form</field>
+            <field name="model">project.class</field>
+            <field name="type">form</field>
+            <field name="arch" type="xml">
+                <form string="Project Class">
+                    <group colspan="4" col="2">
+                        <field name="name"/>
+                        <field name="parent"/>
+                        <field name="default_child_project_class"/>
+                    </group>
+                    <group colspan="4" col="4">
+                        <field name="use_duration"/>
+                        <field name="show_wbs"/>
+                        <field name="use_relationships"/>
+                        <field name="use_tasks"/>
+                        <field name="use_sequence"/>
+                        <field name="use_default_tasks_stages"/>
+                        <field name="use_related_partner"/>
+                    </group>
+                </form>
+            </field>
+        </record>
+        
+        <record id="view_project_class_tree" model="ir.ui.view">
+            <field name="name">project.class.tree</field>
+            <field name="model">project.class</field>
+            <field name="type">tree</field>
+            <field name="arch" type="xml">
+                <tree string="Project Class">
+                    <field name="name"/>
+                    <field name="parent"/>
+                </tree>
+            </field>
+        </record>
+        
+        <record id="action_project_class_tree" model="ir.actions.act_window">
+            <field name="name">Project Classes</field>
+            <field name="res_model">project.class</field>
+            <field name="view_id" ref="view_project_class_tree"/>
+            <field name="view_mode">tree,form</field>
+            <field name="search_view_id" ref="view_project_class_search"/>
+        </record>
+        
+        <menuitem
+            name="Project Classes"
+            id="menu_project_lifecycle_config"
+            action="action_project_class_tree"
+            parent="base.menu_definitions"
+            sequence="20"/>
+       
+    </data>
+</openerp>

=== modified file 'project_time_schedule/project_time_schedule.py'
--- project_time_schedule/project_time_schedule.py	2012-10-02 23:10:39 +0000
+++ project_time_schedule/project_time_schedule.py	2013-02-27 19:55:32 +0000
@@ -30,6 +30,274 @@
 import tools
 import time
 from dateutil.rrule import *
+import datetime
+
+class project(osv.osv):
+    _inherit = 'project.project'
+            
+    _columns = {
+        'parent_ids': fields.many2many('project.project', 'project_project_parent_rel', 'child_id', 'parent_id', 'Parent Projects'),
+        'child_ids': fields.many2many('project.project', 'project_project_parent_rel', 'parent_id', 'child_id', 'Delegated Projects'),
+        
+        'date_start': fields.datetime('Starting Date',select=True),
+        'date_end': fields.datetime('Ending Date',select=True),
+        'create_date': fields.datetime('Create Date',select=True),
+        
+        'duration': fields.integer('Activity Duration Day(s)', help='Duration in calendar hours'),
+        'date_early_start': fields.datetime('Early Start Date', select=True),
+        'date_early_finish': fields.datetime('Early Finish Date', select=True),
+        'date_late_start': fields.datetime('Late Start Date', select=True),
+        'date_late_finish': fields.datetime('Late Finish Date', select=True),
+        'is_critical_path': fields.boolean('Critical Path'),
+        'date_earliest_start': fields.datetime('Earliest Start Date', select=True),
+        'date_latest_finish': fields.datetime('Latest Finish Date', select=True),
+        'total_float': fields.integer('Total float', help='Number of hours that the activity can be delayed without delaying the project.'),
+        'free_float': fields.integer('Free float', help='Number of hours that the activity can be delayed without delaying the next subsequent activity.'),
+    }
+    
+    def set_done(self, cr, uid, ids, context=None):
+        now = datetime.datetime.now().strftime("%Y-%m-%d")
+        self.write(cr, uid, ids, {'date':now}, context=context)
+        return super(project, self).set_done(cr, uid, ids, context=context)
+
+    def set_cancel(self, cr, uid, ids, context=None):
+        now = datetime.datetime.now().strftime("%Y-%m-%d")
+        self.write(cr, uid, ids, {'date':now}, context=context)
+        return super(project, self).set_cancel(cr, uid, ids, context=context)
+    
+    def onchange_duration(self, cr, uid, ids, duration):
+        result = {}
+        
+        if duration < 0:
+            raise osv.except_osv(_('Error'), _("The task duration cannot be set to a value less than zero."))
+        
+        return result
+    
+    def get_network(self, cr, uid, ids, d_activities, *args):
+        
+        read_data = []
+        read_data = self.read(cr, uid, ids[0], ['duration', 'child_ids', 'parent_ids', 'date_earliest_start', 'date_latest_finish', 'date_start', 'date_end', 'state'])
+        
+        if read_data['state'] in ('cancelled', 'done'):
+            replan_duration = 0
+        else:
+            replan_duration = read_data['duration']
+        
+        child_ids = read_data['child_ids']
+        parent_ids = read_data['parent_ids']
+
+        # If task has started we consider it a start restriction
+        
+        if read_data['state'] in ('cancelled', 'done') and read_data['date_end']:
+            date_earliest_start = read_data['date_end']
+        elif read_data['state'] in ('open',) and read_data['date_start']:
+            date_earliest_start = read_data['date_start']
+        else:
+            date_earliest_start = read_data['date_earliest_start']
+        
+        # If task has finish we consider it a finish restriction    
+        if read_data['date_end'] and read_data['state'] in ('cancelled', 'done'):
+            date_latest_finish = read_data['date_end']
+        else:
+            date_latest_finish = read_data['date_latest_finish']
+        
+        d_activities[ids[0]] = daily_network_activity(ids[0], replan_duration, date_earliest_start, date_latest_finish)
+                
+        
+        if not child_ids:
+            d_activities[ids[0]].add_successor(d_activities['stop'])
+            d_activities['stop'].add_predecessor(d_activities[ids[0]])                        
+
+            
+        if not parent_ids:        
+            d_activities[ids[0]].add_predecessor(d_activities['start'])
+            d_activities['start'].add_successor(d_activities[ids[0]])
+
+
+
+        for child_id in child_ids:                                                      
+            if d_activities.has_key(child_id):
+                pass
+            else:                                             
+                lchild_id = []                                                      
+                lchild_id.append(child_id)                                               
+                d_activities.update(self.get_network(cr, uid, lchild_id, d_activities))
+
+            d_activities[ids[0]].add_successor(d_activities[child_id])
+
+
+        for parent_id in parent_ids:                  
+            if d_activities.has_key(parent_id):
+                pass
+            else:                         
+                lparent_id = []                                                      
+                lparent_id.append(parent_id)
+                d_activities.update(self.get_network(cr, uid, lparent_id, d_activities))                            
+            
+            d_activities[ids[0]].add_predecessor(d_activities[parent_id])
+        return d_activities
+                        
+    def calculate_network(self, cr, uid, ids, context, *args):
+        for project in self.browse(cr, uid, ids, context=context):
+            self.calculate_network_project(cr, uid, [project.id], context=context)
+            for parent in project.parent_ids:
+                self.calculate_network_project(cr, uid, [parent.id], context=context)
+            for child in project.child_ids:
+                self.calculate_network_project(cr, uid, [child.id], context=context)
+    
+    def calculate_network_project(self, cr, uid, ids, context, *args):     
+    
+        d_activities = {}                
+        d_activities['start'] = daily_network_activity(None, 0, None, None)
+        d_activities['start'].is_start = True
+        d_activities['start'].activity_id = 'start'
+        d_activities['stop'] = daily_network_activity(None, 0, None, None)
+        d_activities['stop'].is_stop = True
+        d_activities['stop'].activity_id = 'stop'   
+
+                        
+        d_activities = self.get_network(cr, uid, ids, d_activities)            
+         
+        self.get_critical_activities(d_activities)
+        self.update_projects(cr, uid, ids, d_activities)
+        
+
+    
+              
+    def get_critical_activities(self, d_activities):
+        warning = {}
+        
+        #Read the activity details
+        activities = d_activities.values()            
+        
+        for start_activity in activities:
+            if start_activity.is_start:
+                break
+        
+        l_successor_date_earliest_start = []
+        for successor in start_activity.successors:
+            if successor.date_earliest_start:                
+                l_successor_date_earliest_start.append(successor.date_earliest_start)
+        
+        if l_successor_date_earliest_start:
+            start_activity.date_early_start = min(l_successor_date_earliest_start)
+        else:
+            start_activity.date_early_start = daily_network_activity.next_work_day(datetime.today())
+        
+        daily_network_activity.walk_list_ahead(start_activity)
+        
+        for stop_activity in activities:
+            if stop_activity.is_stop:
+                break
+        
+        #stop_activity.late_finish = stop_activity.early_finish
+        stop_activity.date_late_finish = stop_activity.date_early_finish
+        
+        #stop_activity.late_start = stop_activity.late_finish - stop_activity.replan_duration
+        stop_activity.date_late_start = daily_network_activity.sub_work_days(stop_activity.date_late_finish, stop_activity.replan_duration)
+        
+        
+        daily_network_activity.walk_list_aback(stop_activity)
+        
+        #start_activity.late_finish = start_activity.early_finish
+        start_activity.date_late_finish = start_activity.date_early_finish        
+        start_activity.date_late_start = daily_network_activity.sub_work_days(start_activity.date_late_finish, start_activity.replan_duration)
+        
+        #Calculate Float
+        for act in activities:    
+
+            l_successor_date_early_start = []
+            for successor in act.successors:
+                l_successor_date_early_start.append(successor.date_early_start)
+            if l_successor_date_early_start:
+                [act.free_float, rr] = daily_network_activity.work_days_diff(act.date_early_finish, min(l_successor_date_early_start))
+#            
+            [act.total_float, rr] = daily_network_activity.work_days_diff(act.date_early_start, act.date_late_start) 
+#            
+#            if (act.date_early_finish == act.date_late_finish and act.date_early_start == act.date_late_start):
+#                act.is_critical_path = True
+                
+        
+    
+    
+        #Calculate shortest path
+        C_INFINITE = 9999
+        d_graph = {} 
+        for act in d_activities.keys():
+            d_neighbours = {}
+            for other_act in d_activities.keys():
+                if other_act <> act:                        
+                    d_neighbours[other_act] = C_INFINITE         
+                    for pred_act in d_activities[act].predecessors:
+                        if other_act == pred_act.activity_id:                            
+                            d_neighbours[other_act] = pred_act.total_float
+                    for succ_act in d_activities[act].successors:
+                        if other_act == succ_act.activity_id:                            
+                            d_neighbours[other_act] = succ_act.total_float                            
+            d_graph[act] = d_neighbours
+                
+#        d_graph = {}        
+#        for act in d_activities.keys():
+#            d_predecessors = {}        
+#            for pred_act in d_activities[act].predecessors:
+#                d_predecessors[pred_act.activity_id] = pred_act.replan_duration
+#            d_graph[act] = d_predecessors
+
+
+        
+        logger = netsvc.Logger()
+        
+        l_spath = []
+        try: 
+            l_spath = shortestPath(d_graph, 'start', 'stop')
+        except Exception as e:
+            logger.notifyChannel("warning", netsvc.LOG_WARNING,
+                "Could not calculate the critical path due to existing negative floats in one or more of the network activities.")
+        
+        
+        for act in activities:    
+            item = next((i for i in l_spath if i == act.activity_id), None)
+            if item is not None:
+                act.is_critical_path = True
+       
+        
+        
+    def update_projects(self, cr, uid, ids, d_activities, context=None):    
+        if context is None:
+            context = {}
+        projects_obj = self.pool.get('project.project')
+        context.update({'calculate_network': True})
+        for projects_id in d_activities.keys():
+            if (not projects_id == 'start') and (not projects_id == 'stop'):
+                projects_obj.write(cr, uid, projects_id, {
+                    'date_early_start':d_activities[projects_id].date_early_start,
+                    'date_early_finish':d_activities[projects_id].date_early_finish,
+                    'date_late_start':d_activities[projects_id].date_late_start,
+                    'date_late_finish':d_activities[projects_id].date_late_finish,
+                    'is_critical_path':d_activities[projects_id].is_critical_path,
+                    'total_float':d_activities[projects_id].total_float,
+                    'free_float':d_activities[projects_id].free_float,
+            }, context=context)
+    
+    def create(self, cr, uid, vals, context=None):
+        res = super(project, self).create(cr, uid, vals, context)
+        #SAGI: Remove to calculate network when project is created.
+        #self.calculate_network(cr, uid, [res], context)
+        return res
+
+    def write(self, cr, uid, ids, vals, context=None):
+        if context is None:
+            context = {}
+        res = super(project, self).write(cr, uid, ids, vals, context)
+        #SAGI: Remove to calculate network when project is saved.
+        #if not context.get('calculate_network') and ids and (vals.get('duration') or vals.get('state') or vals.get('date_latest_finish') or vals.get('date_earliest_start') or vals.get('parent_ids') or vals.get('child_ids')):
+        #    if not isinstance(ids, list):
+        #        ids = [ids]
+        #    self.calculate_network(cr, uid, ids, context)
+        return res
+
+project()
+
 
 
 class task(osv.osv):
@@ -37,7 +305,7 @@
     _description = "Activity"
             
     _columns = {
-        'duration': fields.integer('Activity duration', help='Duration in calendar hours'),
+        'duration': fields.integer('Activity Duration Hour(s)', help='Duration in calendar hours'),
         'date_early_start': fields.datetime('Early Start Date', select=True),
         'date_early_finish': fields.datetime('Early Finish Date', select=True),
         'date_late_start': fields.datetime('Late Start Date', select=True),
@@ -60,7 +328,7 @@
     def get_network(self, cr, uid, ids, d_activities, *args):
         
         read_data = []
-        read_data = self.read(cr, uid, ids[0], ['duration', 'child_ids', 'parent_ids', 'date_earliest_start', 'date_latest_finish', 'date_start', 'date_end', 'state'])            
+        read_data = self.read(cr, uid, ids[0], ['duration', 'child_ids', 'parent_ids', 'date_earliest_start', 'date_latest_finish', 'date_start', 'date_end', 'state'])
         
         if read_data['state'] in ('cancelled', 'done'):
             replan_duration = 0
@@ -72,11 +340,19 @@
 
         # If task has started we consider it a start restriction
         
-        if read_data['date_end'] and read_data['state'] in ('cancelled', 'done'):
+        if read_data['state'] in ('cancelled', 'done') and read_data['date_end']:
             date_earliest_start = read_data['date_end']
         elif read_data['date_start']:
-            date_earliest_start = read_data['date_start']        
+        #if read_data['state'] in ('open', 'pending') and read_data['date_start']:
+        #    print "(1)"
+        #    print "read_data['state']: " + str(read_data['state'])
+        #    print "read_data['date_start']: " + str(read_data['date_start']) 
+            date_earliest_start = read_data['date_start']
         else:
+            #print "(2)"
+            #print "read_data['state']: " + str(read_data['state'])
+            #print "read_data['date_start']: " + str(read_data['date_start'])
+            #print "read_data['date_earliest_start']: " + str(read_data['date_earliest_start'])
             date_earliest_start = read_data['date_earliest_start']
         
         # If task has finish we consider it a finish restriction    
@@ -96,9 +372,9 @@
         if not parent_ids:        
             d_activities[ids[0]].add_predecessor(d_activities['start'])
             d_activities['start'].add_successor(d_activities[ids[0]])
-           
-
-                                             
+
+
+
         for child_id in child_ids:                                                      
             if d_activities.has_key(child_id):
                 pass
@@ -106,10 +382,10 @@
                 lchild_id = []                                                      
                 lchild_id.append(child_id)                                               
                 d_activities.update(self.get_network(cr, uid, lchild_id, d_activities))
-            
+
             d_activities[ids[0]].add_successor(d_activities[child_id])
-                
-                                         
+
+
         for parent_id in parent_ids:                  
             if d_activities.has_key(parent_id):
                 pass
@@ -123,10 +399,17 @@
 
         
           
-        return d_activities                    
+        return d_activities
                         
-        
-    def calculate_network(self, cr, uid, ids, context, *args):     
+    def calculate_network(self, cr, uid, ids, context, *args):
+        for task in self.browse(cr, uid, ids, context=context):
+            self.calculate_network_task(cr, uid, [task.id], context=context)
+            for parent in task.parent_ids:
+                self.calculate_network_task(cr, uid, [parent.id], context=context)
+            for child in task.child_ids:
+                self.calculate_network_task(cr, uid, [child.id], context=context)
+            
+    def calculate_network_task(self, cr, uid, ids, context, *args):     
     
         d_activities = {}                
         d_activities['start'] = network_activity(None, 0, None, None)
@@ -264,17 +547,19 @@
 
     def create(self, cr, uid, vals, context=None):
         res = super(task, self).create(cr, uid, vals, context)
-        self.calculate_network(cr, uid, [res], context)
+        #SAGI: Remove to calculate network when task is created.
+        #self.calculate_network(cr, uid, [res], context)
         return res
 
     def write(self, cr, uid, ids, vals, context=None):
         if context is None:
             context = {}
         res = super(task, self).write(cr, uid, ids, vals, context)
-        if not context.get('calculate_network') and ids and (vals.get('duration') or vals.get('state') or vals.get('date_latest_finish') or vals.get('date_earliest_start') or vals.get('parent_ids') or vals.get('child_ids')):
-            if not isinstance(ids, list):
-                ids = [ids]
-            self.calculate_network(cr, uid, ids, context)
+        #SAGI: Remove to calculate network when task is saved.
+        #if not context.get('calculate_network') and ids and (vals.get('duration') or vals.get('state') or vals.get('date_latest_finish') or vals.get('date_earliest_start') or vals.get('parent_ids') or vals.get('child_ids')):
+        #    if not isinstance(ids, list):
+        #        ids = [ids]
+        #    self.calculate_network(cr, uid, ids, context)
         return res
 
 task()
@@ -454,3 +739,180 @@
                        
         for predecessor in activity.predecessors:
             network_activity.walk_list_aback(predecessor)
+
+
+
+
+
+
+
+class daily_network_activity(object):
+    'Activity in network diagram'
+    
+    def __init__(self, activity_id, duration, date_earliest_start, date_latest_finish):
+        DATE_FORMAT = "%Y-%m-%d"
+        DATE_INIT = datetime(1900, 01, 01, 0, 0, 0)
+        
+        self.activity_id = activity_id
+        
+        self.replan_duration = int(duration)
+        self.total_duration = int(duration)
+        
+        if date_earliest_start:
+            self.date_earliest_start = datetime.strptime(date_earliest_start, "%Y-%m-%d %H:%M:%S")
+        else:
+            self.date_earliest_start = None
+        
+        if date_latest_finish:
+            self.date_latest_finish = datetime.strptime(date_latest_finish, "%Y-%m-%d %H:%M:%S")
+        else:
+            self.date_latest_finish = None
+                
+        self.date_early_start = DATE_INIT
+        self.date_early_finish = DATE_INIT
+        self.date_late_start = DATE_INIT
+        self.date_late_finish = DATE_INIT
+        
+        self.total_float = timedelta(days=0)
+        self.free_float = timedelta(days=0)
+        
+        self.is_start = False
+        self.is_stop = False
+        self.is_critical_path = False
+        self.successors = []
+        self.predecessors = []
+    
+    
+    @staticmethod
+    def work_days(dtstart, until):
+        work_days = count(rrule(DAILY, byweekday=(MO, TU, WE, TH, FR), dtstart=date, until=until))
+        return work_days
+    
+    
+    @staticmethod
+    def work_days_diff(start_date, end_date):    
+         if end_date > start_date:
+            rr = rrule(DAILY, byweekday=(MO, TU, WE, TH, FR), dtstart=start_date, until=end_date)
+            #rr = rrule(HOURLY, byweekday=(MO, TU, WE, TH, FR), byhour=range(9, 17), dtstart=start_date, until=end_date)
+            return [rr.count(), rr]
+         elif start_date > end_date:
+            rr = rrule(DAILY, byweekday=(MO, TU, WE, TH, FR), dtstart=end_date, until=start_date)
+            #rr = rrule(HOURLY, byweekday=(MO, TU, WE, TH, FR), byhour=range(9, 17), dtstart=end_date, until=start_date)
+            return [-(rr.count()), rr]
+         else:
+            return [0, None]
+
+    @staticmethod
+    def next_work_day(date):        
+        rr = rrule(DAILY, byweekday=(MO, TU, WE, TH, FR), dtstart=date)
+        #rr = rrule(HOURLY, byweekday=(MO, TU, WE, TH, FR), byhour=range(9, 17), dtstart=date)
+        return rr.after(date, inc=True)
+            
+       
+    @staticmethod
+    def add_work_days(date, duration):        
+        if duration:
+            l_days = []                
+            l_days = list(rrule(DAILY, count=duration + 1, byweekday=(MO, TU, WE, TH, FR), dtstart=date))
+            #l_days = list(rrule(HOURLY, count=duration + 1, byweekday=(MO, TU, WE, TH, FR), byhour=range(9, 17), dtstart=date))
+            return l_days[-1]
+        else:
+            return date
+        
+    @staticmethod
+    def sub_work_days(date, duration):
+        DATE_INIT = date - timedelta(hours=duration)
+        if duration:
+            correct_date_init = False
+            while correct_date_init == False:
+                [rr_count, rr] = daily_network_activity.work_days_diff(DATE_INIT, date)            
+                if rr_count < duration:
+                    DATE_INIT -= timedelta(hours=duration + 1 - rr_count)
+                else:
+                    correct_date_init = True                
+            l_days = list(rr)
+            return l_days[0]                        
+        else:
+            return date
+
+    
+    def add_successor(self, activity):
+        self.successors.append(activity)
+
+    def add_predecessor(self, activity):
+        self.predecessors.append(activity)        
+        
+    
+    @staticmethod
+    def walk_list_ahead(position):    
+        
+        #Start No Earlier Than Milestone
+        #A "Start No Earlier Than" milestone fixes the start of an activity to begin no earlier than the date provided. 
+        #The start milestone's impact is on the forward pass only. 
+        #When the activity with the start milestone is reached in the forward pass, then the milestone date is considered in the calculation. 
+        #If the milestone start date is later than the calculated early start date, then the milestone date is substituted for the calculated early start date. 
+        #If the calculated date is later than the early start date, then the calculated date is used.
+        
+        if position.date_earliest_start:
+#            if position.date_early_start < position.date_earliest_start:
+            position.date_early_start = position.date_earliest_start
+                    
+        if position.is_start:                        
+            position.date_early_finish = daily_network_activity.add_work_days(position.date_early_start, position.replan_duration)
+            
+        
+        #Earliest start of successor task = Latest of the early finish dates of all predecessors 
+        for successor in position.successors:
+            
+            if successor.date_earliest_start:
+#                if successor.date_early_start < successor.date_earliest_start:
+                    successor.date_early_start = successor.date_earliest_start            
+            
+            for predecessor in successor.predecessors:
+                if successor.date_early_start < predecessor.date_early_finish:
+                    
+                    successor.date_early_start = predecessor.date_early_finish
+                    
+            
+            
+#          successor.date_early_finish = successor.date_early_start + successor.replan_duration
+            successor.date_early_finish = daily_network_activity.add_work_days(successor.date_early_start, successor.replan_duration)     
+                
+        for successor in position.successors:
+            daily_network_activity.walk_list_ahead(successor)
+            
+                                                
+
+    @staticmethod
+    def walk_list_aback(activity):    
+        
+        DATE_INIT = datetime(1900, 01, 01, 0, 0, 0)
+        
+        if activity.date_latest_finish:
+            if activity.date_late_finish > activity.date_latest_finish:
+                activity.date_late_finish = activity.date_latest_finish
+        
+        if activity.is_stop:            
+            #activity.date_late_start = activity.date_late_finish - activity.replan_duration
+            activity.date_late_start = daily_network_activity.sub_work_days(activity.date_late_finish, activity.replan_duration)
+                        
+        #In calculating backward through the finish-to-start network, 
+        #we use the earliest of the "latest start" dates of a successor task 
+        #as the latest finish for a predecessor task                        
+        for predecessor in activity.predecessors:
+            if predecessor.date_latest_finish:
+#                if predecessor.date_late_finish > predecessor.date_latest_finish:
+                    predecessor.date_late_finish = predecessor.date_latest_finish
+            
+            for successor in predecessor.successors:
+                if predecessor.date_late_finish <= DATE_INIT:
+                    predecessor.date_late_finish = successor.date_late_start                
+                elif predecessor.date_late_finish > successor.date_late_start:
+                    predecessor.date_late_finish = successor.date_late_start
+            
+            
+            #predecessor.date_late_start = predecessor.date_late_finish - predecessor.replan_duration
+            predecessor.date_late_start = daily_network_activity.sub_work_days(predecessor.date_late_finish, predecessor.replan_duration)
+                       
+        for predecessor in activity.predecessors:
+            daily_network_activity.walk_list_aback(predecessor)

=== modified file 'project_time_schedule/project_time_schedule_view.xml'
--- project_time_schedule/project_time_schedule_view.xml	2012-10-02 23:10:39 +0000
+++ project_time_schedule/project_time_schedule_view.xml	2013-02-27 19:55:32 +0000
@@ -1,82 +1,377 @@
 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
     <data>
-
-
-
-#---------------------------------------------------------------------------------------------------------
-#   Extend the task
-#---------------------------------------------------------------------------------------------------------
-
-
- 		<record id="view_task_form2_inh" model="ir.ui.view">
-            <field name="name">project.task.form</field>
-            <field name="model">project.task</field>
-            <field name="type">form</field>
-            <field eval="2" name="priority"/>
-            <field name="inherit_id" ref="project.view_task_form2"/>       
-            <field name="arch" type="xml">       
-            	<xpath expr="//form[@string='Task edition']//notebook//page[@string='Extra Info']//separator[@string='Dates']" position="replace"/>
-        		<xpath expr="//form[@string='Task edition']//notebook//page[@string='Extra Info']//field[@name='date_start']" position="replace"/>
-        		<xpath expr="//form[@string='Task edition']//notebook//page[@string='Extra Info']//field[@name='date_end']" position="replace"/>
-        		<xpath expr="//form[@string='Task edition']//notebook//page[@string='Extra Info']//field[@name='create_date']" position="replace"/>
-        		<xpath expr="//field[@name='planned_hours']" position="replace"/>            	            	
-            	<xpath expr="//field[@name='remaining_hours']" position="replace"/>
-           		<xpath expr="//field[@name='effective_hours']" position="replace"/>
-            </field>
-        </record>
-
+        <menuitem id="menu_pm_users_project1"
+                  name="Resources"
+                  parent="base.menu_definitions"
+                  sequence="3"/>
+        <menuitem id="menu_phase_schedule"
+                  name="Scheduling"
+                  parent="base.menu_main_pm"
+                  sequence="4"
+                  groups="project.group_project_user,project.group_project_manager"/>
+        <menuitem action="resource.action_resource_resource_tree"
+                  id="menu_view_resource"
+                  parent="menu_pm_users_project1"
+                  sequence="2"/>
+        <menuitem action="resource.action_resource_calendar_form"
+                  id="menu_view_resource_calendar"
+                  parent="menu_pm_users_project1"
+                  sequence="5"/>
+        <menuitem action="resource.action_resource_calendar_leave_tree"
+                  id="menu_view_resource_calendar_leaves"
+                  parent="menu_pm_users_project1"
+                  sequence="3"/>
+        
         <!-- Task -->
+        <record id="view_task_tree2" model="ir.ui.view">
+            <field name="name">project.task.tree</field>
+            <field name="model">project.task</field>
+            <field name="type">tree</field>
+            <field eval="2" name="priority"/>
+            <field name="inherit_id" ref="project.view_task_tree2"/>
+            <field name="arch" type="xml">
+            	<field name="date_start" position="replace"/>
+                <field name="date_end" position="replace"/>
+                <field name="remaining_hours" position="after">
+	            	<field name="date_early_start" string="Date to Start"/>
+		   			<field name="date_early_finish" string="Date to End"/>    
+				</field>                		
+            </field>
+        </record>	
+        
  		<record id="view_task_form2" model="ir.ui.view">
             <field name="name">project.task.form</field>
             <field name="model">project.task</field>
             <field name="type">form</field>
             <field eval="2" name="priority"/>
             <field name="inherit_id" ref="project.view_task_form2"/>       
+            <field name="arch" type="xml">
+                <group string="Gantt View" position="replace">
+				<group string="Actual dates">
+                        <field name="date_start" readonly="1"/>
+                        <field name="date_end" readonly="1"/>
+                        <field name="create_date" readonly="1"/>
+                    </group>
+                </group>
+				<h1 position="after">
+					<group colspan="4" col="6">
+						<h1 colspan="5" name="a">
+								<field name="name" colspan="5" placeholder="Task summary..."/>
+						</h1>
+						<button name="calculate_network" colspan="1" icon="gtk-execute"
+							string="Calculate Network" type="object"/>
+					</group>
+				</h1>
+				<h1 position="replace"/>
+		        <field name="date_deadline" position="replace"/>
+		        <field name="priority" position="replace"/>
+		        <field name="categ_ids" position="before">
+		        	<field name="date_early_start" string="Date to Start" readonly="1"/>
+	   				<field name="date_early_finish" string="Date to End" readonly="1"/>
+	   				<field name="priority" groups="base.group_user"/>
+		        </field>
+		        
+		        <page string="Extra Info" position="replace"/>
+                
+                <page string="Description" position="after">
+					<page string="Relationships">
+                        <separator string="Predecessor Activities" colspan="4"/>
+                        <field colspan="4" height="150" name="parent_ids" nolabel="1"
+                               domain="[('project_id','=',project_id),('id','!=',id)]"
+                               context="{'default_project_id': project_id}"/>
+                        <separator string="Successor Activities" colspan="4"/>
+                        <field colspan="4" height="150" name="child_ids" nolabel="1"
+                               domain="[('project_id','=',project_id),('id','!=',id)]"
+                               context="{'default_project_id': project_id}"/>
+                    </page>
+                    
+		        	<page string="Extra Info" attrs="{'readonly':[('state','=','done')]}">
+				    	<group colspan="4" col="4">
+				    		<group colspan="2" col="2">
+		                        <group string="Administration" colspan="2">
+			   						<field name="date_earliest_start"/>
+			   						<field name="date_latest_finish"/>                                
+		                            <field name="sequence"/>
+		                            <field name="partner_id"/>
+		                            <field name="state" invisible="1"/>
+		                            <field name="company_id" groups="base.group_multi_company" widget="selection"/>
+		                        </group>
+		                        <group>
+		                            <group string="Actual Dates" colspan="2">
+						                <field name="date_start" string="Started Date" widget="date"/>
+						                <field name="date_end" string="End Date"/>
+						                <field name="create_date"/>		                                
+		                            </group>
+		                        </group>
+		                    </group>
+                        	<group colspan="2" col="2">			
+								<group string="Margins" colspan="2"> 
+	   								<field name="is_critical_path" readonly="1"/>    						
+	   								<field name="total_float" readonly="1"/>
+	   								<field name="free_float" readonly="1"/>               						
+								</group>
+								<group string="Late dates" colspan="2">   		
+					   				<field name="date_late_start" readonly="1" widget="date"/>
+					   				<field name="date_late_finish" readonly="1" widget="date"/>
+								</group>
+							</group>
+						</group>
+					</page>					
+				</page>
+				<field name="user_id" position="after">
+					<field name="duration" on_change="onchange_duration(duration)"/>
+   	        	</field>
+   	        </field>
+        </record>
+        
+        
+        <record id="project_time_schedule_task_gantt" model="ir.ui.view">
+            <field name="name">project_time_schedule.project.task.gantt</field>
+            <field name="model">project.task</field>
+            <field name="inherit_id" ref="project.view_task_gantt"/>
+            <field name="priority" eval="1"/>
             <field name="arch" type="xml">       
-
-        		<page string='Extra Info' position="after">
-
-        			<page groups="base.group_extended" string="Scheduling" attrs="{'readonly':[('state','=','done')]}">
-							<group colspan="2" col="2">
-                                <separator string="Limitations" colspan="2"/>
-           						<field name="date_earliest_start"/>
-           						<field name="date_latest_finish"/>          
-           						<field name="is_critical_path" readonly="1"/>    						
-							</group>
-							<group colspan="2" col="2">
-                                <separator string="Margins" colspan="2"/>
-           						<field name="total_float" readonly="1"/>
-           						<field name="free_float" readonly="1"/>               						
-							</group>
-							<group colspan="2" col="2">
-                                <separator string="Dates" colspan="2"/>
-           						<field name="duration" on_change="onchange_duration(duration)"/>
-           						<field name="planned_hours" widget="float_time"/>
-                                <field name="effective_hours" widget="float_time" />           														        						           						
-							</group>
-							<group colspan="2" col="2">                						
-           						<separator string="Early dates" colspan="2"/>           						
-           						<field name="date_early_start" readonly="1"/>           						
-           						<field name="date_early_finish" readonly="1"/>
-							</group>           	
-							<group colspan="2" col="2">   		
-								<separator string="Late dates" colspan="2"/>			           						
-           						<field name="date_late_start" readonly="1"/>           						
-           						<field name="date_late_finish" readonly="1" />
-							</group>		 	   	
-							<group colspan="2" col="2">   		
-								<separator string="Actual dates" colspan="2"/>			           						
-           						<field name="date_start" readonly="1"/>           						
-           						<field name="date_end" readonly="1" />
-           						<field name="create_date" readonly="1" />
-							</group>		 	   								            						
-							                          
-                            <button name="calculate_network" icon="gtk-execute"
-                            	string="Calculate Network" type="object"/>
-                        </page>
-        		</page>              	        		        		
-            </field>
-        </record>
+                <gantt string="Tasks" position="replace">
+                    <gantt date_start="date_early_start" date_stop="date_early_finish" string="Tasks">
+                    </gantt>
+                </gantt>      	        		        		
+            </field>
+        </record>
+        
+        <record id="project_time_schedule_view_task_kanban" model="ir.ui.view">
+            <field name="name">project_time_schedule.project.task.kanban</field>
+            <field name="model">project.task</field>
+            <field name="inherit_id" ref="project.view_task_kanban"/>       
+            <field name="arch" type="xml">
+                <field name="color" position="after">
+                    <field name="is_critical_path"/>
+                </field>
+                
+                <xpath expr="//templates//div[@class='oe_kanban_footer_left']" >
+                    <t t-if="record.is_critical_path.raw_value == true">
+                        <img src="/project_time_schedule_images/static/src/img/critical.png" alt="Critical"/>
+                    </t>
+                </xpath>
+                
+            </field>
+        </record>
+        
+        <!-- Project -->
+ 		<record id="project_time_schedule_view_project_form" model="ir.ui.view">
+            <field name="name">project_time_schedule.project.project.form</field>
+            <field name="model">project.project</field>
+            <field name="type">form</field>
+            <field name="inherit_id" ref="project.edit_project"/>
+            <field name="arch" type="xml">
+            
+                <!-- Redefinicion de pestana Other Info-->
+                <page string="Other Info" position="replace"/>
+                
+                <page string="Team" position="after">
+				    <page string="Other Info">
+				    	<group colspan="4" col="4">
+							<group colspan="2" col="2">
+								<group string="Administration" groups="project.group_time_work_estimation_tasks" colspan="2">
+								        <field name="resource_calendar_id"/>
+								        <field name="date_earliest_start" widget="date"/>
+				   						<field name="date_latest_finish" widget="date"/>
+				   						<field name="priority" groups="base.group_no_one"/>
+								        <field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/>
+								        <field name="currency_id" groups="base.group_multi_currency" required="1"/>
+								</group>
+								<group string="Actual Dates" name="misc" colspan="2">
+								            <field name="date_start" string="Started Date" widget="date"/>
+								            <field name="date" string="End Date"/>
+								            <field name="create_date" readonly="1"/>
+								</group>
+							</group>
+							
+							<group colspan="2" col="2">			
+								<group string="Margins" colspan="2">
+					   				<field name="is_critical_path" readonly="1"/>			
+					   				<field name="total_float" readonly="1"/>
+					   				<field name="free_float" readonly="1"/>
+								</group>
+								<group string="Late dates" colspan="2">   		
+					   				<field name="date_late_start" readonly="1" widget="date"/>
+					   				<field name="date_late_finish" readonly="1" widget="date"/>
+								</group>
+								<group string="Time Planning" colspan="2">
+									<field name="planned_hours" widget="float_time"/>
+									<field name="total_hours" widget="float_time"/>
+									<field name="effective_hours" widget="float_time"/>
+							   </group>
+							</group>
+						</group>
+		        	</page>
+                </page>
+                
+                <!-- agregado de pestana relationships-->
+                <page string="Other Info" position="after">
+                    <page string="Relationships">
+                        <separator string="Predecessor Projects"/>
+                        <field name="parent_ids"/>
+                        <separator string="Successor Projects"/>
+                        <field name="child_ids"/>
+                    </page>
+                </page>
+                
+                <!--agregado boton para calculo network-->
+                <button name="attachment_tree_view" position="after">
+		            <button name="calculate_network" icon="gtk-execute" string="Calculate Network" type="object"/>
+		        </button>              
+                
+                <!-- agregado duration-->
+                <field name="user_id" position="after">
+                    <field name="duration" on_change="onchange_duration(duration)"/>
+                </field>
+                
+                
+                <!-- Intgracion con project.class-->
+ 
+                <field name="privacy_visibility" position="before">
+                    <field name="project_class_id" on_change="onchange_project_class(project_class_id)" widget="selection"/>
+                    <field name="project_parent_id" string="Parent"
+                           attrs="{'invisible': [('class_parent','=','must_not_have')], 'required': [('class_parent','=','must_have')]}"/>
+                    <field name="code" string="Code" required="1"/>
+                    <field name="complete_wbs_code" readonly="1"/>
+                    <field name="class_use_duration" invisible="1"/>
+                    <field name="class_show_wbs" invisible="1"/>
+                    <field name="class_use_relationships" invisible="1"/>
+                    <field name="class_use_tasks" invisible="1"/>
+                    <field name="class_use_sequence" invisible="1"/>
+                    <field name="class_use_default_tasks_stages" invisible="1"/>
+                    <field name="class_parent" invisible="1"/>
+                    <field name="class_use_related_partner" invisible="1"/>
+                    <field name="class_default_child_project_class" invisible="1"/>
+                </field>
+                
+                <field name="use_tasks" position="attributes">
+                    <attribute name="readonly">1</attribute>
+                </field>
+                
+                <field name="duration" position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_duration', '=', False)]}</attribute>
+                </field>
+                
+                <field name="priority" position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_sequence', '=', False)]}</attribute>
+                </field>
+                
+                <field name="partner_id" position="before">
+                    <group colspan="2">
+                        <field name="date_early_start" string="Date to Start" readonly="1" widget="date"/>
+           				<field name="date_early_finish" string="Date to End" readonly="1" widget="date"/>
+       				</group>
+       			</field>
+                <p position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_related_partner', '=', False)]}</attribute>
+                </p>
+                <field name="partner_id" position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_related_partner', '=', False)]}</attribute>
+                </field>
+                
+                <!--<xpath expr="//sheet[@string='Project']/group[1]/group[2]" position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_related_partner', '=', False)]}</attribute>
+                </xpath>-->
+                
+                <page string="Relationships" position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_relationships', '=', False)]}</attribute>
+                </page>
+                
+                <page string="Tasks Stages" position="attributes">
+                    <attribute name="attrs">
+                        {'invisible': ['|', ('use_tasks', '=', False), ('class_use_default_tasks_stages', '=', True)]}
+                    </attribute>
+                </page>
+                
+                <page string="Other Info" position="after">
+                    <page string="WBS Components" attrs="{'invisible': [('class_show_wbs', '=', False)]}">
+                        <field colspan="4" name="project_child_ids" nolabel="1"
+                               context="{'form_view_ref':'view_project','tree_view_ref':'edit_project', 'default_project_parent_id': active_id}"/>
+                    </page>
+	            </page>
+	             
+	            <field name="parent_ids" position="attributes">
+                    <attribute name="domain">[('project_parent_id','=',project_parent_id),('id','!=',id)]</attribute>
+                    <attribute name="context">
+                        {'default_project_parent_id': project_parent_id, 'default_project_class_id': class_default_child_project_class}
+                    </attribute>
+                </field>
+                
+                <field name="child_ids" position="attributes">
+                    <attribute name="domain">[('project_parent_id','=',project_parent_id),('id','!=',id)]</attribute>
+                    <attribute name="context">
+                        {'default_project_parent_id': project_parent_id, 'default_project_class_id': class_default_child_project_class}
+                    </attribute>
+                </field>                
+                
+            </field>
+        </record>
+        
+        <record id="project_time_schedule_view_project_kanban" model="ir.ui.view">
+            <field name="name">project_time_schedule.project.project.kanban</field>
+            <field name="model">project.project</field>
+            <field name="inherit_id" ref="project.view_project_kanban"/>       
+            <field name="arch" type="xml">
+                <field name="doc_count" position="after">
+                    <field name="is_critical_path"/>
+                </field>
+                
+                <xpath expr="//templates//div[@class='oe_kanban_footer_left']" >
+                    <t t-if="record.is_critical_path.raw_value == true">
+                        <img src="/project_time_schedule_images/static/src/img/critical.png" alt="Critical"/>
+                    </t>
+                </xpath>
+            </field>
+        </record>
+        
+        <record id="view_project_wbs_project_gantt" model="ir.ui.view">
+            <field name="name">project_wbs.project.gantt</field>
+            <field name="model">project.project</field>
+            <field name="inherit_id" ref="project.view_project_project_gantt"/>
+            <field name="sequence" eval="0"/>
+            <field name="arch" type="xml">
+                <gantt position="replace">
+                    <gantt date_start="date_early_start" date_stop="date_early_finish"
+                           string="Projects" default_group_by="project_parent_id">
+                    </gantt>
+                </gantt>
+            </field>
+        </record>
+        
+        <record id="view_project_wbs_project_tree" model="ir.ui.view">
+            <field name="name">project_wbs.project.tree</field>
+            <field name="model">project.project</field>
+            <field name="inherit_id" ref="project.view_project"/>
+            <field name="sequence" eval="0"/>
+            <field name="arch" type="xml">
+                <field name="progress_rate" position="before">
+                    <field name="date_early_start" string="Date to Start" widget="date"/>
+                    <field name="date_early_finish" string="Date to End" widget="date"/>
+                    <field name="project_class_id" invisible="1"/>
+                </field>
+            </field>
+        </record>
+        
+        
+        <record id="view_project_wbs_project_filter" model="ir.ui.view">
+            <field name="name">project_wbs.project.filter</field>
+            <field name="model">project.project</field>
+            <field name="inherit_id" ref="project.view_project_project_filter"/>
+            <field name="sequence" eval="0"/>
+            <field name="arch" type="xml">
+                <field name="name" position="after">
+                    <field name="project_class_id"/>
+                </field>
+                
+                <group string="Group By..." position="inside">
+                    <filter string="Project Class" name="Project Class" help="Project Class" icon="terp-folder-blue"
+                            domain = "[]" context="{'group_by':'project_class_id'}"/>
+                </group>
+            </field>
+        </record>   
+             
     </data>
 </openerp>

=== added directory 'project_time_schedule_images'
=== added file 'project_time_schedule_images/__init__.py'
--- project_time_schedule_images/__init__.py	1970-01-01 00:00:00 +0000
+++ project_time_schedule_images/__init__.py	2013-02-27 19:55:32 +0000
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2011 Eficent (<http://www.eficent.com/>)
+#              Jordi Ballester Alomar <jordi.ballester@xxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added file 'project_time_schedule_images/__openerp__.py'
--- project_time_schedule_images/__openerp__.py	1970-01-01 00:00:00 +0000
+++ project_time_schedule_images/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2011 Eficent (<http://www.eficent.com/>)
+#              Jordi Ballester Alomar <jordi.ballester@xxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+
+{
+    "name": "Project Management Images",
+    "version": "1.0",
+    "author": "Adhoc",
+    "website": "",
+    "category": "Generic Modules/Projects & Services",
+    "depends": ["base"],
+    "description": """
+    """,
+    "init_xml": [],
+    "update_xml": [],
+    'demo_xml': [],
+    'test':[],
+    'installable': True,
+    'active': False,
+    'certificate': '',
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added directory 'project_time_schedule_images/static'
=== added directory 'project_time_schedule_images/static/src'
=== added directory 'project_time_schedule_images/static/src/img'
=== added file 'project_time_schedule_images/static/src/img/critical.png'
Binary files project_time_schedule_images/static/src/img/critical.png	1970-01-01 00:00:00 +0000 and project_time_schedule_images/static/src/img/critical.png	2013-02-27 19:55:32 +0000 differ
=== modified file 'project_time_sequence/__openerp__.py'
--- project_time_sequence/__openerp__.py	2012-10-02 23:10:39 +0000
+++ project_time_sequence/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -23,8 +23,8 @@
 {
     "name": "Project Management",
     "version": "1.0",
-    "author": "Jordi Ballester (Eficent)",
-    "website": "http://www.eficent.com";,
+    "author": "Eficent, Nervia Consultores",
+    "website": "",
     "category": "Generic Modules/Projects & Services",
     "depends": ["project"],
     "description": """Eficent Project Management. Project Time Management. Activity Sequencing

=== modified file 'project_time_sequence/i18n/es.po'
--- project_time_sequence/i18n/es.po	2012-10-02 23:10:39 +0000
+++ project_time_sequence/i18n/es.po	2013-02-27 19:55:32 +0000
@@ -103,6 +103,12 @@
 msgstr "Predecesoras"
 
 #. module: project_time_sequence
+#: code:addons/project_time_sequence/project_time_sequence.py:161
+#, python-format
+msgid "Task '%s' closed"
+msgstr "La tarea '%s' se ha cerrado"
+
+#. module: project_time_sequence
 #: field:project.task,predecessor_ids_str:0
 #: field:project.task,predecessor_names_str:0
 msgid "Predecessor tasks"
@@ -114,6 +120,12 @@
 msgstr "Tarea"
 
 #. module: project_time_sequence
+#: code:addons/project_time_sequence/project_time_sequence.py:175
+#, python-format
+msgid "The task '%s' is done"
+msgstr "La tarea '%s' está terminada"
+
+#. module: project_time_sequence
 #: code:addons/project_time_sequence/wizard/project_task_link_predecessors.py:76
 #: code:addons/project_time_sequence/wizard/project_task_link_predecessors.py:87
 #, python-format

=== modified file 'project_time_sequence/project_time_sequence.py'
--- project_time_sequence/project_time_sequence.py	2012-10-02 23:10:39 +0000
+++ project_time_sequence/project_time_sequence.py	2013-02-27 19:55:32 +0000
@@ -112,7 +112,7 @@
        
         }
     
-    def do_link_predecessors(self, cr, uid, task_id, link_predecessors_data={}, context=None):
+    def do_link_predecessors(self, cr, uid, task_id, link_predecessors_data, context=None):
         
         task_br = self.browse(cr, uid, task_id, context=context)
          
@@ -121,6 +121,64 @@
             })
         
         return True
+    
+    #SAGI: remove action_close and do_close
+    '''
+    def action_close(self, cr, uid, ids, context=None):
+        # This action open wizard to send email to partner or project manager after close task.
+        if context == None:
+            context = {}
+        task_id = len(ids) and ids[0] or False
+        if not task_id: return False
+        task = self.browse(cr, uid, task_id, context=context)
+        project = task.project_id
+        res = self.do_close(cr, uid, [task_id], context=context)
+        if project.warn_manager or project.warn_customer:
+            return {
+                'name': _('Send Email after close task'),
+                'view_type': 'form',
+                'view_mode': 'form',
+                'res_model': 'mail.compose.message',
+                'type': 'ir.actions.act_window',
+                'target': 'new',
+                'nodestroy': True,
+                'context': {'active_id': task.id,
+                            'active_model': 'project.task'}
+           }
+        return res
+
+    def do_close(self, cr, uid, ids, context={}):
+        """
+        Close Task
+        """
+        request = self.pool.get('res.request')
+        if not isinstance(ids,list): ids = [ids]
+        for task in self.browse(cr, uid, ids, context=context):
+            vals = {}
+            project = task.project_id
+            if project:
+                # Send request to project manager
+                if project.warn_manager and project.user_id and (project.user_id.id != uid):
+                    request.create(cr, uid, {
+                        'name': _("Task '%s' closed") % task.name,
+                        'state': 'waiting',
+                        'act_from': uid,
+                        'act_to': project.user_id.id,
+                        'ref_partner_id': task.partner_id.id,
+                        'ref_doc1': 'project.task,%d'% (task.id,),
+                        'ref_doc2': 'project.project,%d'% (project.id,),
+                    }, context=context)
+
+            vals.update({'state': 'done'})
+            vals.update({'remaining_hours': 0.0})
+            if not task.date_end:
+                vals.update({ 'date_end':time.strftime('%Y-%m-%d %H:%M:%S')})
+            self.write(cr, uid, [task.id],vals, context=context)
+            message = _("The task '%s' is done") % (task.name,)
+            self.log(cr, uid, task.id, message)
+        return True
+    '''
+
 
 task()
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'project_time_sequence/project_time_sequence_view.xml'
--- project_time_sequence/project_time_sequence_view.xml	2012-10-02 23:10:39 +0000
+++ project_time_sequence/project_time_sequence_view.xml	2013-02-27 19:55:32 +0000
@@ -16,11 +16,11 @@
             <field name="arch" type="xml">
             	<field name="name" position="after">
             		<field name="predecessor_ids_str"/>    
-            		<button groups="base.group_extended" name="%(action_project_task_link_predecessors)d" states="pending,open,draft" string="Link" type="action" icon="gtk-sort-descending" help="For linking to a predecessor task"/>        		
-            	</field>            	            	            	            	                    		
+            		<button groups="base.group_erp_manager" name="%(action_project_task_link_predecessors)d" states="pending,open,draft" string="Link" type="action" icon="gtk-sort-descending" help="For linking to a predecessor task"/>        		
+            	</field>             		
             </field>
         </record>	
-
+<!--
  		<record id="view_task_form2" model="ir.ui.view">
             <field name="name">project.task.form</field>
             <field name="model">project.task</field>
@@ -28,17 +28,17 @@
             <field eval="2" name="priority"/>
             <field name="inherit_id" ref="project.view_task_form2"/>       
             <field name="arch" type="xml">        
-        		<xpath expr="//page[@string='Delegations']" position="replace">        		        			
-					<page groups="base.group_extended" string="Relationships">
+        		<xpath expr="//form/sheet/notebook/page[@string='Delegation']" position="after">        		        			
+					<page groups="base.group_erp_manager" string="Relationships">
                         <separator string="Predecessor Activities" colspan="4"/>
-                        <field colspan="4" height="150" name="parent_ids" nolabel="1"/>
+                        <field colspan="4" height="150" name="parent_ids" nolabel="1" domain="[('project_id','=',project_id)]"/>
                         <separator string="Successor Activities" colspan="4"/>
-                        <field colspan="4" height="150" name="child_ids" nolabel="1"/>                            
+                        <field colspan="4" height="150" name="child_ids" nolabel="1" domain="[('project_id','=',project_id)]"/>                            
                     </page>                    
         		</xpath>              	        		        		
             </field>
         </record>
-
+-->
 
 
     </data>

=== modified file 'project_time_sequence/wizard/project_task_link_predecessors.py'
--- project_time_sequence/wizard/project_task_link_predecessors.py	2012-10-02 23:10:39 +0000
+++ project_time_sequence/wizard/project_task_link_predecessors.py	2013-02-27 19:55:32 +0000
@@ -30,9 +30,7 @@
     _description = 'Link predecessor tasks'
 
     _columns = {
-        
-        'predecessor_ids_str': fields.char('Predecessors', size=64, required=False, select=True, help='List of predecessor task id''s separated by comma'), 
-                    
+        'predecessor_ids_str': fields.char('Predecessors', size=64, required=False, select=True, help='List of predecessor task id''s separated by comma'),              
     }
 
 
@@ -105,9 +103,10 @@
     _description = 'Link predecessor tasks'
 
     _columns = {
-        
+        'task_id': fields.many2one('project.task','Target task'),
+        'project_id': fields.related('task.id', 'project_id', string="Project", type="many2one", relation="project.task"),
         'parent_ids': fields.many2many('project.task', 'project_task_parent_rel', 'task_id', 'parent_id', 'Parent Tasks'),
-                
+
     }
 
 
@@ -122,10 +121,10 @@
         record_id = context and context.get('active_id', False) or False
         task_pool = self.pool.get('project.task')
         task_data=[]
-        task_data = task_pool.read(cr, uid, record_id, ['parent_ids'])
+        task_data = task_pool.read(cr, uid, record_id, ['parent_ids','project_id'])
         parent_ids = task_data['parent_ids']        
         
-        res.update({'parent_ids': parent_ids})
+        res.update({'parent_ids': parent_ids, 'task_id': record_id, 'project_id': task_data['project_id']})
         return res
 
 

=== modified file 'project_time_sequence/wizard/project_task_link_predecessors.xml'
--- project_time_sequence/wizard/project_task_link_predecessors.xml	2012-10-02 23:10:39 +0000
+++ project_time_sequence/wizard/project_task_link_predecessors.xml	2013-02-27 19:55:32 +0000
@@ -9,7 +9,8 @@
             <field name="arch" type="xml">
               	<form string="Project Task Link Predecessors">
                       <separator string="Predecessor Tasks" colspan="4"/>
-                      <field colspan="4" height="200" name="parent_ids" nolabel="1"/>
+                      <field name="project_id" invisible="1" />
+                      <field colspan="4" height="200" name="parent_ids" nolabel="1" domain="[('project_id','=',project_id)]"/>
                       <button string="_Cancel" icon="gtk-cancel" special="cancel" />
                       <button name="link_predecessors" type="object" string="Save" icon="gtk-ok" />
 			  	</form>

=== added directory 'project_wbs'
=== added file 'project_wbs/__init__.py'
--- project_wbs/__init__.py	1970-01-01 00:00:00 +0000
+++ project_wbs/__init__.py	2013-02-27 19:55:32 +0000
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2011 Eficent (<http://www.eficent.com/>)
+#              Jordi Ballester Alomar <jordi.ballester@xxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import project
+
+
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added file 'project_wbs/__openerp__.py'
--- project_wbs/__openerp__.py	1970-01-01 00:00:00 +0000
+++ project_wbs/__openerp__.py	2013-02-27 19:55:32 +0000
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2011 Eficent (<http://www.eficent.com/>)
+#              Jordi Ballester Alomar <jordi.ballester@xxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+{
+    'name': 'Project Management',
+    'version': '1.0',
+    'author': 'Sistemas ADHOC',
+    'website': 'http://www.sistemasadhoc.com.ar/',
+    'category': 'Generic Modules/Projects & Services',
+    'depends': ['account','project', 'project_time_schedule', 'analytic'],
+    'description': """""",
+    'init_xml': [],
+    'update_xml': [
+        'project_view.xml',
+    ],
+    'demo_xml': [],
+    'test':[],
+    'installable': True,
+    'active': False,
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added file 'project_wbs/project.py'
--- project_wbs/project.py	1970-01-01 00:00:00 +0000
+++ project_wbs/project.py	2013-02-27 19:55:32 +0000
@@ -0,0 +1,234 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    Copyright (C) 2011 Eficent (<http://www.eficent.com/>)
+#              Jordi Ballester Alomar <jordi.ballester@xxxxxxxxxxx>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import tools
+from osv import fields, osv
+from tools.translate import _
+
+class project_class(osv.osv):
+    _name = 'project.class'
+    _description = 'Project Class'
+    
+    _columns = {        
+        'name': fields.char('Name', size=16, required=True),
+        'parent': fields.selection((('oerp_default', 'OpenERP Default'),
+                                    ('must_have', 'Must have'),
+                                    ('must_not_have', 'Must not have')), 'Parent', required=True,),
+        'default_child_project_class': fields.many2one('project.class', 'Default Child Project Class',),
+        
+        'use_duration': fields.boolean('Use Duration'),
+        'show_wbs': fields.boolean('Show WBS'),
+        'use_relationships': fields.boolean('Use Relationships'),
+        'use_tasks': fields.boolean('Use Tasks'),
+        'use_sequence': fields.boolean('Use Sequence'),
+        'use_default_tasks_stages': fields.boolean('Use Default Tasks Stages'),
+        'use_related_partner': fields.boolean('Use Related Partner'),
+    }
+
+project_class()
+'''
+class account_analytic_account(osv.osv):
+    _name = 'account.analytic.account'
+    _inherit = 'account.analytic.account'
+    
+    def get_child_accounts(self, cr, uid, ids, context=None):
+        result = {}
+        read_data = []
+        read_data = self.pool.get('account.analytic.account').read(cr, uid, ids,['child_ids'])
+        for data in read_data:
+            for curr_id in ids:
+                result[curr_id] = True
+            for child_id in data['child_ids']:
+                lchild_id = []
+                lchild_id.append(child_id)
+                result.update(self.get_child_accounts(cr, uid, lchild_id, context))
+        return result
+
+    def _complete_wbs_code_calc2(self, cr, uid, ids, prop, unknow_none, unknow_dict):
+        if not ids:
+            return []
+        res = []
+        for account in self.browse(cr, uid, ids, context=None):
+            data = []
+            acc = account
+            while acc:
+                if acc.code:
+                    data.insert(0, acc.code)
+                else:
+                    data.insert(0,'')
+                acc = acc.parent_id
+                
+            data = '/'.join(data)
+            res.append((account.id, data))
+        return dict(res)
+    
+    def _complete_wbs_code_calc2(self, cr, uid, ids, prop, unknow_none, unknow_dict):
+        if not ids:
+            return []
+        res = []
+        for account in self.browse(cr, uid, ids, context=None):
+            data = []
+            acc = account
+            while acc:
+                if acc.code:
+                    data.insert(0, acc.code)
+                else:
+                    data.insert(0,'')
+                acc = acc.parent_id
+                
+            data = '/'.join(data)
+            res.append((account.id, data))
+        return dict(res)
+    
+    
+    
+    _columns = {
+        
+        #'complete_wbs_code': fields.function(_complete_wbs_code_calc, method=True, type='char', string='Full WBS Code', size=250,
+        #    help='The full WBS code describes the full path of this component within the project WBS hierarchy',
+        #    store={'account.analytic.account': (get_child_accounts, ['code'], 20),}),
+        
+        #'child_projects': fields.one2many('project.project', 'parent_id', 'WBS Components'),
+     }
+     
+    def code_get(self, cr, uid, ids, context=None):
+        if not ids:
+            return []
+        res = []
+        for account in self.browse(cr, uid, ids, context=context):
+            data = []
+            acc = account
+            while acc:
+                if acc.code:
+                    data.insert(0, acc.code)
+                else:
+                    data.insert(0,'')
+                    
+                acc = acc.parent_id
+            data = '/'.join(data)
+            res.append((account.id, data))
+        return res
+
+account_analytic_account()
+'''
+
+class project_project(osv.osv):
+    _name = 'project.project'
+    _inherit = 'project.project'
+    
+    def _complete_wbs_code_calc(self, cr, uid, ids, field_name, arg, context=None):
+        res = {}
+        for project in self.browse(cr, uid, ids, context=context):
+            project_name = project.code
+            
+            project_it = project
+            while project_it.project_parent_id:
+                project_it = project_it.project_parent_id
+                project_name = project_it.code + '/' + project_name
+                
+            res[project.id] = project_name
+        return res
+        
+    
+    _columns = {
+        'complete_wbs_code': fields.function(_complete_wbs_code_calc, string='Complete WBS Code', method=True, type='char', size=250,),
+    
+        'project_parent_id': fields.many2one('project.project', 'Parent Project',),
+        'project_child_ids': fields.one2many('project.project', 'project_parent_id', 'Child Projects'),
+        
+        'project_class_id': fields.many2one('project.class', 'Project Class', required=True, ),
+        
+        'class_use_duration': fields.related('project_class_id', 'use_duration', type='boolean', string='Use Duration'),
+        'class_parent': fields.related('project_class_id', 'parent', type='char', string='Parent'),
+        'class_show_wbs': fields.related('project_class_id', 'show_wbs', type='boolean', string='Show WBS'),
+        'class_use_relationships': fields.related('project_class_id', 'use_relationships', type='boolean',
+                    string='Use Relationships'),
+        'class_use_tasks': fields.related('project_class_id', 'use_tasks', type='boolean', string='Use tasks'),
+        'class_use_sequence': fields.related('project_class_id', 'use_sequence', type='boolean', string='Use Sequence'),
+        'class_use_default_tasks_stages': fields.related('project_class_id', 'use_default_tasks_stages',
+                    type='boolean', string='Use Default Tasks Stages'),
+        'class_use_related_partner': fields.related('project_class_id', 'use_related_partner', type='boolean',
+                    string='Use Related Partner'),
+        'class_default_child_project_class': fields.related('project_class_id', 'default_child_project_class',
+                    type="many2one", relation="project.class"),
+    }
+    
+    def onchange_project_class(self, cr, uid, ids, project_class_id, context=None):
+        v = {}
+        
+        if project_class_id:
+            project_class_obj = self.pool.get('project.class')
+            project_class = project_class_obj.browse(cr, uid, project_class_id, context=context)
+            
+            if not project_class:
+                return {'value': v}
+            
+            if isinstance(project_class, list):
+                project_class = project_class[0]
+            v['class_use_duration'] = project_class.use_duration
+            v['class_parent'] = project_class.parent
+            v['class_show_wbs'] = project_class.show_wbs
+            v['class_use_relationships'] = project_class.use_relationships
+            v['class_use_tasks'] = project_class.use_tasks
+            v['use_tasks'] = project_class.use_tasks
+            v['class_use_sequence'] = project_class.use_sequence
+            v['class_use_default_tasks_stages'] = project_class.use_default_tasks_stages
+            v['class_use_related_partner'] = project_class.use_related_partner
+        else:
+            v['class_use_duration'] = False
+            v['class_parent'] = 'oerp_default'
+            v['class_show_wbs'] = False
+            v['class_use_relationships'] = False
+            v['class_use_tasks'] = False
+            v['use_tasks'] = False
+            v['class_use_sequence'] = False
+            v['class_use_default_tasks_stages'] = False
+        
+        return {'value': v}
+    
+    def create(self, cr, uid, vals, context=None):
+        if 'use_tasks' not in vals and 'project_class_id' in vals:
+            project_class_obj = self.pool.get('project.class')
+            project_class = project_class_obj.browse(cr, uid, vals['project_class_id'], context=context)
+            if isinstance(project_class, list):
+                project_class = project_class[0]
+            vals['use_tasks'] = project_class.use_tasks
+            
+        return super(project_project, self).create(cr, uid, vals, context=context)
+            
+    
+    def write(self, cr, uid, ids, vals, context=None):
+        if 'use_tasks' not in vals and 'project_class_id' in vals:
+            project_class_obj = self.pool.get('project.class')
+            project_class = project_class_obj.browse(cr, uid, vals['project_class_id'], context=context)
+            if isinstance(project_class, list):
+                project_class = project_class[0]
+            vals['use_tasks'] = project_class.use_tasks
+            
+        return super(project_project, self).write(cr, uid, ids, vals, context=context)
+    
+project_project()
+
+
+
+
+
+

=== added file 'project_wbs/project_view.xml'
--- project_wbs/project_view.xml	1970-01-01 00:00:00 +0000
+++ project_wbs/project_view.xml	2013-02-27 19:55:32 +0000
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <!-- project.class -->
+        <record id="view_project_class_search" model="ir.ui.view">
+            <field name="name">project.class.search</field>
+            <field name="model">project.class</field>
+            <field name="type">search</field>
+            <field name="arch" type="xml">
+                <search string="Project Class">
+                    <field name="name"/>
+                    <field name="parent"/>
+                </search>
+            </field>
+        </record>
+        
+        <record id="view_project_class_form" model="ir.ui.view">
+            <field name="name">project.class.form</field>
+            <field name="model">project.class</field>
+            <field name="type">form</field>
+            <field name="arch" type="xml">
+                <form string="Project Class">
+                    <group colspan="4" col="2">
+                        <field name="name"/>
+                        <field name="parent"/>
+                        <field name="default_child_project_class"/>
+                    </group>
+                    <group colspan="4" col="4">
+                        <field name="use_duration"/>
+                        <field name="show_wbs"/>
+                        <field name="use_relationships"/>
+                        <field name="use_tasks"/>
+                        <field name="use_sequence"/>
+                        <field name="use_default_tasks_stages"/>
+                        <field name="use_related_partner"/>
+                    </group>
+                </form>
+            </field>
+        </record>
+        
+        <record id="view_project_class_tree" model="ir.ui.view">
+            <field name="name">project.class.tree</field>
+            <field name="model">project.class</field>
+            <field name="type">tree</field>
+            <field name="arch" type="xml">
+                <tree string="Project Class">
+                    <field name="name"/>
+                    <field name="parent"/>
+                </tree>
+            </field>
+        </record>
+        
+        <record id="action_project_class_tree" model="ir.actions.act_window">
+            <field name="name">Project Classes</field>
+            <field name="res_model">project.class</field>
+            <field name="view_id" ref="view_project_class_tree"/>
+            <field name="view_mode">tree,form</field>
+            <field name="search_view_id" ref="view_project_class_search"/>
+        </record>
+        
+        <menuitem
+            name="Project Classes"
+            id="menu_project_lifecycle_config"
+            action="action_project_class_tree"
+            parent="base.menu_definitions"
+            sequence="20"/>
+        
+        <!-- project.project -->
+        <record id="view_project_wbs_project_form" model="ir.ui.view">
+            <field name="name">project_wbs.project.form</field>
+            <field name="model">project.project</field>
+            <field name="inherit_id" ref="project_time_schedule.project_time_schedule_view_project_form"/>
+            <field name="sequence" eval="0"/>
+            <field name="arch" type="xml">
+                <!--<field name="parent_id" position="replace"/>-->
+                
+                <field name="user_id" position="after">
+                    <field name="project_parent_id" string="Parent"
+                           attrs="{'invisible': [('class_parent','=','must_not_have')], 'required': [('class_parent','=','must_have')]}"/>
+                    <field name="project_class_id" on_change="onchange_project_class(project_class_id)" widget="selection"/>
+                    <field name="code" string="Code" required="1"/>
+                    <field name="complete_wbs_code" readonly="1"/>
+                    <field name="class_use_duration" invisible="1"/>
+                    <field name="class_show_wbs" invisible="1"/>
+                    <field name="class_use_relationships" invisible="1"/>
+                    <field name="class_use_tasks" invisible="1"/>
+                    <field name="class_use_sequence" invisible="1"/>
+                    <field name="class_use_default_tasks_stages" invisible="1"/>
+                    <field name="class_parent" invisible="1"/>
+                    <field name="class_use_related_partner" invisible="1"/>
+                    <field name="class_default_child_project_class" invisible="1"/>
+                </field>
+                
+                <field name="use_tasks" position="attributes">
+                    <attribute name="readonly">1</attribute>
+                </field>
+                
+                <field name="duration" position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_duration', '=', False)]}</attribute>
+                </field>
+                
+                <field name="priority" position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_sequence', '=', False)]}</attribute>
+                </field>
+                
+                <xpath expr="//sheet[@string='Project']/group[1]/group[2]" position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_related_partner', '=', False)]}</attribute>
+                </xpath>
+                
+                <page string="Relationships" position="attributes">
+                    <attribute name="attrs">{'invisible': [('class_use_relationships', '=', False)]}</attribute>
+                </page>
+                
+                <page string="Tasks Stages" position="attributes">
+                    <attribute name="attrs">
+                        {'invisible': ['|', ('use_tasks', '=', False), ('class_use_default_tasks_stages', '=', True)]}
+                    </attribute>
+                </page>
+                
+                <page string="Other Info" position="after">
+                    <page string="WBS Components" attrs="{'invisible': [('class_show_wbs', '=', False)]}">
+                        <field colspan="4" name="project_child_ids" nolabel="1"
+                               context="{'form_view_ref':'view_project','tree_view_ref':'edit_project', 'default_project_parent_id': active_id}"/>
+                    </page>
+	            </page>
+	             
+	            <field name="parent_ids" position="attributes">
+                    <attribute name="domain">[('project_parent_id','=',project_parent_id),('id','!=',id)]</attribute>
+                    <attribute name="context">
+                        {'default_project_parent_id': project_parent_id, 'default_project_class_id': class_default_child_project_class}
+                    </attribute>
+                </field>
+                
+                <field name="child_ids" position="attributes">
+                    <attribute name="domain">[('project_parent_id','=',project_parent_id),('id','!=',id)]</attribute>
+                    <attribute name="context">
+                        {'default_project_parent_id': project_parent_id, 'default_project_class_id': class_default_child_project_class}
+                    </attribute>
+                </field>
+            </field>
+        </record>
+        
+        <record id="view_project_wbs_project_filter" model="ir.ui.view">
+            <field name="name">project_wbs.project.filter</field>
+            <field name="model">project.project</field>
+            <field name="inherit_id" ref="project.view_project_project_filter"/>
+            <field name="sequence" eval="0"/>
+            <field name="arch" type="xml">
+                <field name="name" position="after">
+                    <field name="project_class_id"/>
+                </field>
+                
+                <group string="Group By..." position="inside">
+                    <filter string="Project Class" name="Project Class" help="Project Class" icon="terp-folder-blue"
+                            domain = "[]" context="{'group_by':'project_class_id'}"/>
+                </group>
+            </field>
+        </record>
+    </data>
+</openerp>