diff --git a/addons/account/test/account_fiscalyear_close.yml b/addons/account/test/account_fiscalyear_close.yml index b80cfd0e6e9..cc683ca8d46 100644 --- a/addons/account/test/account_fiscalyear_close.yml +++ b/addons/account/test/account_fiscalyear_close.yml @@ -4,31 +4,27 @@ !record {model: account.fiscalyear, id: account_fiscalyear_fiscalyear0}: code: !eval "'FY%s'% (datetime.now().year+1)" company_id: base.main_company - date_start: !eval "'%s-01-01' %(datetime.now().year+1)" - date_stop: !eval "'%s-12-31' %(datetime.now().year+1)" - name: !eval "'Fiscal Year %s' %(datetime.now().year+1)" + date_start: !eval "'%s-01-01' %(datetime.now().year-1)" + date_stop: !eval "'%s-12-31' %(datetime.now().year-1)" + name: !eval "'Fiscal Year %s' %(datetime.now().year-1)" - - I create a period for the opening entries for the new fiscalyear + I generate periods for the new fiscalyear - - !record {model: account.period, id: account_period_jan11}: - company_id: base.main_company - date_start: !eval "'%s-01-01'% (datetime.now().year+1)" - date_stop: !eval "'%s-01-01'% (datetime.now().year+1)" - fiscalyear_id: account_fiscalyear_fiscalyear0 - name: !eval "'OP %s' %(datetime.now().year+1)" - special: 1 + !python {model: account.fiscalyear}: | + self.create_period(cr, uid, [ref("account_fiscalyear_fiscalyear0")]) - - I create a new account invoice a the partner in current fiscalyear + I create a new account invoice in the created fiscalyear - !record {model: account.invoice, id: account_invoice_current1}: partner_id: base.res_partner_2 + date_invoice: !eval "'%s-01-02' %(datetime.now().year-1)" invoice_line: - partner_id: base.res_partner_2 quantity: 1.0 price_unit: 15.00 name: Bying stuff - - I validate it the invoice + I validate the invoice - !workflow {model: account.invoice, action: invoice_open, ref: account.account_invoice_current1} - @@ -44,13 +40,13 @@ company_id: base.main_company centralisation: 1 - - I called the Generate Fiscalyear Opening Entries wizard + I call the Generate Fiscalyear Opening Entries wizard - !record {model: account.fiscalyear.close, id: account_fiscalyear_close_0}: - fy2_id: account_fiscalyear_fiscalyear0 - fy_id: account.data_fiscalyear + fy2_id: account.data_fiscalyear + fy_id: account_fiscalyear_fiscalyear0 journal_id: account.close_journal - period_id: account_period_jan11 + period_id: account.period_1 report_name: End of Fiscal Year Entry - I clicked on create Button @@ -63,7 +59,7 @@ I close the previous fiscalyear - !record {model: account.fiscalyear.close.state, id: account_fiscalyear_close_state_0}: - fy_id: data_fiscalyear + fy_id: account_fiscalyear_fiscalyear0 - I clicked on Close States Button to close fiscalyear - @@ -74,10 +70,10 @@ - I check that the fiscalyear state is now "Done" - - !assert {model: account.fiscalyear, id: data_fiscalyear, string: Fiscal Year is in Done state}: + !assert {model: account.fiscalyear, id: account_fiscalyear_fiscalyear0, string: Fiscal Year is in Done state}: - state == 'done' - I check that the past accounts are taken into account in partner credit - - !assert {model: res.partner, id: base.res_partner_2}: - - credit == 15.0, "Total Receivable does not takes unreconciled previous moves" + !assert {model: res.partner, id: base.res_partner_2, string: Total Receivable does not takes unreconciled moves of previous years}: + - credit == 15.0 diff --git a/addons/contacts/i18n/ja.po b/addons/contacts/i18n/ja.po new file mode 100644 index 00000000000..20c79674f9b --- /dev/null +++ b/addons/contacts/i18n/ja.po @@ -0,0 +1,37 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-10-22 03:49+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-10-23 04:34+0000\n" +"X-Generator: Launchpad (build 16810)\n" + +#. module: contacts +#: model:ir.actions.act_window,help:contacts.action_contacts +msgid "" +"

\n" +" Click to add a contact in your address book.\n" +"

\n" +" OpenERP helps you easily track all activities related to\n" +" a customer; discussions, history of business opportunities,\n" +" documents, etc.\n" +"

\n" +" " +msgstr "" + +#. module: contacts +#: model:ir.actions.act_window,name:contacts.action_contacts +#: model:ir.ui.menu,name:contacts.menu_contacts +msgid "Contacts" +msgstr "連絡先" diff --git a/addons/l10n_fr/fr_fiscal_templates.xml b/addons/l10n_fr/fr_fiscal_templates.xml index b11f8d4f0dd..bf49d15e08c 100644 --- a/addons/l10n_fr/fr_fiscal_templates.xml +++ b/addons/l10n_fr/fr_fiscal_templates.xml @@ -2,6 +2,12 @@ + + + + diff --git a/addons/mail/mail_mail.py b/addons/mail/mail_mail.py index 91799b0ac63..8e99655dddb 100644 --- a/addons/mail/mail_mail.py +++ b/addons/mail/mail_mail.py @@ -157,9 +157,9 @@ class mail_mail(osv.Model): 'action': 'mail.action_mail_redirect', } if mail.notification: - fragment.update({ - 'message_id': mail.mail_message_id.id, - }) + fragment['message_id'] = mail.mail_message_id.id + elif mail.model and mail.res_id: + fragment.update(model=mail.model, res_id=mail.res_id) url = urljoin(base_url, "?%s#%s" % (urlencode(query), urlencode(fragment))) return _("""Access your messages and documents in OpenERP""") % url else: diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index b902f733207..9692b94f159 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -566,29 +566,37 @@ class mail_thread(osv.AbstractModel): self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context) act_model, act_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, *self._get_inbox_action_xml_id(cr, uid, context=context)) action = self.pool.get(act_model).read(cr, uid, act_id, []) + params = context.get('params') + msg_id = model = res_id = None - # if msg_id specified: try to redirect to the document or fallback on the Inbox - msg_id = context.get('params', {}).get('message_id') - if not msg_id: + if params: + msg_id = params.get('message_id') + model = params.get('model') + res_id = params.get('res_id') + if not msg_id and not (model and res_id): return action - msg = self.pool.get('mail.message').browse(cr, uid, msg_id, context=context) - if msg.model and msg.res_id: - action.update({ - 'context': { - 'search_default_model': msg.model, - 'search_default_res_id': msg.res_id, - } - }) - if self.pool.get(msg.model).check_access_rights(cr, uid, 'read', raise_exception=False): + if msg_id and not (model and res_id): + msg = self.pool.get('mail.message').browse(cr, uid, msg_id, context=context) + model, res_id = msg.model, msg.res_id + + # if model + res_id found: try to redirect to the document or fallback on the Inbox + if model and res_id: + model_obj = self.pool.get(model) + if model_obj.check_access_rights(cr, uid, 'read', raise_exception=False): try: - model_obj = self.pool.get(msg.model) - model_obj.check_access_rule(cr, uid, [msg.res_id], 'read', context=context) + model_obj.check_access_rule(cr, uid, [res_id], 'read', context=context) if not hasattr(model_obj, '_get_formview_action'): - action = self.pool.get('mail.thread')._get_formview_action(cr, uid, msg.res_id, model=msg.model, context=context) + action = self.pool.get('mail.thread')._get_formview_action(cr, uid, res_id, model=model, context=context) else: - action = model_obj._get_formview_action(cr, uid, msg.res_id, context=context) + action = model_obj._get_formview_action(cr, uid, res_id, context=context) except (osv.except_osv, orm.except_orm): pass + action.update({ + 'context': { + 'search_default_model': model, + 'search_default_res_id': res_id, + } + }) return action #------------------------------------------------------ diff --git a/addons/mail/tests/test_mail_features.py b/addons/mail/tests/test_mail_features.py index 0688bf02606..62c76db5a40 100644 --- a/addons/mail/tests/test_mail_features.py +++ b/addons/mail/tests/test_mail_features.py @@ -231,6 +231,8 @@ class test_mail(TestMail): def test_11_notification_url(self): """ Tests designed to test the URL added in notification emails. """ cr, uid, group_pigs = self.cr, self.uid, self.group_pigs + # Test URL formatting + base_url = self.registry('ir.config_parameter').get_param(cr, uid, 'web.base.url') # Partner data partner_raoul = self.res_partner.browse(cr, uid, self.partner_raoul_id) @@ -243,19 +245,59 @@ class test_mail(TestMail): # Test: link for nobody -> None url = mail_mail._get_partner_access_link(self.mail_mail, cr, uid, mail) self.assertEqual(url, None, - 'notification email: mails not send to a specific partner should not have any URL') + 'notification email: mails not send to a specific partner should not have any URL') # Test: link for partner -> None url = mail_mail._get_partner_access_link(self.mail_mail, cr, uid, mail, partner=partner_bert) self.assertEqual(url, None, - 'notification email: mails send to a not-user partner should not have any URL') + 'notification email: mails send to a not-user partner should not have any URL') # Test: link for user -> signin url = mail_mail._get_partner_access_link(self.mail_mail, cr, uid, mail, partner=partner_raoul) + self.assertIn(base_url, url, + 'notification email: link should contain web.base.url') + self.assertIn('db=%s' % cr.dbname, url, + 'notification email: link should contain database name') self.assertIn('action=mail.action_mail_redirect', url, - 'notification email: link should contain the redirect action') + 'notification email: link should contain the redirect action') self.assertIn('login=%s' % partner_raoul.user_ids[0].login, url, - 'notification email: link should contain the user login') + 'notification email: link should contain the user login') + + # Test: link for user -> with model and res_id + mail_mail_id = self.mail_mail.create(cr, uid, {'model': 'mail.group', 'res_id': group_pigs.id}) + mail = self.mail_mail.browse(cr, uid, mail_mail_id) + url = mail_mail._get_partner_access_link(self.mail_mail, cr, uid, mail, partner=partner_raoul) + self.assertIn(base_url, url, + 'notification email: link should contain web.base.url') + self.assertIn('db=%s' % cr.dbname, url, + 'notification email: link should contain database name') + self.assertIn('action=mail.action_mail_redirect', url, + 'notification email: link should contain the redirect action') + self.assertIn('login=%s' % partner_raoul.user_ids[0].login, url, + 'notification email: link should contain the user login') + self.assertIn('model=mail.group', url, + 'notification email: link should contain the model when having not notification email on a record') + self.assertIn('res_id=%s' % group_pigs.id, url, + 'notification email: link should contain the res_id when having not notification email on a record') + + # Test: link for user -> with model and res_id + mail_mail_id = self.mail_mail.create(cr, uid, {'notification': True, 'model': 'mail.group', 'res_id': group_pigs.id}) + mail = self.mail_mail.browse(cr, uid, mail_mail_id) + url = mail_mail._get_partner_access_link(self.mail_mail, cr, uid, mail, partner=partner_raoul) + self.assertIn(base_url, url, + 'notification email: link should contain web.base.url') + self.assertIn('db=%s' % cr.dbname, url, + 'notification email: link should contain database name') + self.assertIn('action=mail.action_mail_redirect', url, + 'notification email: link should contain the redirect action') + self.assertIn('login=%s' % partner_raoul.user_ids[0].login, url, + 'notification email: link should contain the user login') + self.assertIn('message_id=%s' % mail.mail_message_id.id, url, + 'notification email: link based on message should contain the mail_message id') + self.assertNotIn('model', url, + 'notification email: link based on message should not contain model') + self.assertNotIn('res_id', url, + 'notification email: link based on message should not contain res_id') @mute_logger('openerp.addons.mail.mail_thread', 'openerp.osv.orm') def test_12_inbox_redirection(self): @@ -267,24 +309,54 @@ class test_mail(TestMail): # No specific parameters -> should redirect to Inbox action = mail_thread.message_redirect_action(self.mail_thread, cr, self.user_raoul_id, {'params': {}}) - self.assertEqual(action.get('type'), 'ir.actions.client', - 'URL redirection: action without parameters should redirect to client action Inbox') - self.assertEqual(action.get('id'), act_id, - 'URL redirection: action without parameters should redirect to client action Inbox') + self.assertEqual( + action.get('type'), 'ir.actions.client', + 'URL redirection: action without parameters should redirect to client action Inbox' + ) + self.assertEqual( + action.get('id'), act_id, + 'URL redirection: action without parameters should redirect to client action Inbox' + ) - # Bert has read access to Pigs -> should redirect to form view of Pigs + # Raoul has read access to Pigs -> should redirect to form view of Pigs action = mail_thread.message_redirect_action(self.mail_thread, cr, self.user_raoul_id, {'params': {'message_id': msg_id}}) - self.assertEqual(action.get('type'), 'ir.actions.act_window', - 'URL redirection: action with message_id for read-accredited user should redirect to Pigs') - self.assertEqual(action.get('res_id'), group_pigs.id, - 'URL redirection: action with message_id for read-accredited user should redirect to Pigs') + self.assertEqual( + action.get('type'), 'ir.actions.act_window', + 'URL redirection: action with message_id for read-accredited user should redirect to Pigs' + ) + self.assertEqual( + action.get('res_id'), group_pigs.id, + 'URL redirection: action with message_id for read-accredited user should redirect to Pigs' + ) + action = mail_thread.message_redirect_action(self.mail_thread, cr, self.user_raoul_id, {'params': {'model': 'mail.group', 'res_id': group_pigs.id}}) + self.assertEqual( + action.get('type'), 'ir.actions.act_window', + 'URL redirection: action with message_id for read-accredited user should redirect to Pigs' + ) + self.assertEqual( + action.get('res_id'), group_pigs.id, + 'URL redirection: action with message_id for read-accredited user should redirect to Pigs' + ) # Bert has no read access to Pigs -> should redirect to Inbox action = mail_thread.message_redirect_action(self.mail_thread, cr, self.user_bert_id, {'params': {'message_id': msg_id}}) - self.assertEqual(action.get('type'), 'ir.actions.client', - 'URL redirection: action without parameters should redirect to client action Inbox') - self.assertEqual(action.get('id'), act_id, - 'URL redirection: action without parameters should redirect to client action Inbox') + self.assertEqual( + action.get('type'), 'ir.actions.client', + 'URL redirection: action without parameters should redirect to client action Inbox' + ) + self.assertEqual( + action.get('id'), act_id, + 'URL redirection: action without parameters should redirect to client action Inbox' + ) + action = mail_thread.message_redirect_action(self.mail_thread, cr, self.user_bert_id, {'params': {'model': 'mail.group', 'res_id': group_pigs.id}}) + self.assertEqual( + action.get('type'), 'ir.actions.client', + 'URL redirection: action without parameters should redirect to client action Inbox' + ) + self.assertEqual( + action.get('id'), act_id, + 'URL redirection: action without parameters should redirect to client action Inbox' + ) def test_20_message_post(self): """ Tests designed for message_post. """ diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py index 2ce046fe454..032952aa511 100644 --- a/addons/procurement/procurement.py +++ b/addons/procurement/procurement.py @@ -139,7 +139,7 @@ class procurement_order(osv.osv): if not proc.note or '_first_pass_done_' not in proc.note or proc.state not in ('confirmed', 'exception'): super(procurement_order, self).message_track(cr, uid, [proc.id], tracked_fields, initial_values, context=context) if proc.state == 'exception': - cr.execute("""UPDATE procurement_order set note = CONCAT(note, %s) WHERE id = %s""", ('_first_pass_done_',proc.id)) + cr.execute("""UPDATE procurement_order set note = TRIM(both E'\n' FROM COALESCE(note, '') || %s) WHERE id = %s""", ('\n\n_first_pass_done_',proc.id)) return True diff --git a/addons/project_long_term/i18n/es_MX.po b/addons/project_long_term/i18n/es_MX.po index 0b930ae70a6..f3e591746da 100644 --- a/addons/project_long_term/i18n/es_MX.po +++ b/addons/project_long_term/i18n/es_MX.po @@ -1,168 +1,329 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# Spanish (Mexico) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. +# FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-01-18 09:17+0000\n" -"Last-Translator: Borja López Soilán (NeoPolus) \n" -"Language-Team: Spanish \n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-10-21 16:57+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Spanish (Mexico) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:54+0000\n" -"X-Generator: Launchpad (build 13830)\n" +"X-Launchpad-Export-Date: 2013-10-22 04:44+0000\n" +"X-Generator: Launchpad (build 16807)\n" #. module: project_long_term -#: model:ir.module.module,shortdesc:project_long_term.module_meta_information -msgid "Long Term Project Management" -msgstr "Gestión de proyectos a largo plazo" +#: help:project.phase,constraint_date_end:0 +msgid "force the phase to finish before this date" +msgstr "" #. module: project_long_term -#: view:project.compute.phases:0 -msgid "Compute Scheduling of Phases" -msgstr "Calcular planificación de fases" +#: view:project.phase:0 +#: selection:project.phase,state:0 +msgid "In Progress" +msgstr "" + +#. module: project_long_term +#: field:account.analytic.account,use_phases:0 +#: model:ir.actions.act_window,name:project_long_term.act_project_phases +#: view:project.project:0 +msgid "Phases" +msgstr "" + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.act_resouce_allocation +#: model:ir.ui.menu,name:project_long_term.menu_resouce_allocation +#: view:project.phase:0 +#: view:project.user.allocation:0 +msgid "Team Planning" +msgstr "" + +#. module: project_long_term +#: field:project.phase,user_ids:0 +msgid "Assigned Users" +msgstr "" #. module: project_long_term #: view:project.phase:0 #: field:project.phase,next_phase_ids:0 msgid "Next Phases" -msgstr "Siguientes fases" +msgstr "" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_user_allocation +msgid "Phase User Allocation" +msgstr "" #. module: project_long_term #: view:project.phase:0 msgid "Project's Tasks" -msgstr "Tareas del proyecto" - -#. module: project_long_term -#: model:ir.actions.act_window,name:project_long_term.act_project_phases -msgid "Phases" -msgstr "Fases" - -#. module: project_long_term -#: view:project.phase:0 -#: view:project.resource.allocation:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: project_long_term -#: constraint:project.project:0 -msgid "Error! project start-date must be lower then project end-date." msgstr "" -"¡Error! La fecha de inicio del proyecto debe ser anterior a la fecha final " -"del proyecto." #. module: project_long_term -#: model:ir.actions.act_window,name:project_long_term.act_resouce_allocation -#: view:project.resource.allocation:0 -msgid "Resources Allocation" -msgstr "Asignación de recursos" +#: model:ir.actions.act_window,help:project_long_term.action_project_compute_phases +msgid "" +"To schedule phases of all or a specified project. It then open a gantt " +"view.\n" +" " +msgstr "" + +#. module: project_long_term +#: field:project.phase,task_ids:0 +msgid "Project Tasks" +msgstr "" + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.action_project_compute_phases +#: model:ir.ui.menu,name:project_long_term.menu_compute_phase +#: view:project.compute.phases:0 +msgid "Schedule Phases" +msgstr "" #. module: project_long_term #: view:project.phase:0 -msgid "Displaying Settings" -msgstr "Mostrando configuración" +#: field:project.phase,state:0 +msgid "Status" +msgstr "" #. module: project_long_term #: field:project.compute.phases,target_project:0 -msgid "Schedule" -msgstr "Programa" - -#. module: project_long_term -#: model:ir.module.module,description:project_long_term.module_meta_information -msgid "" -"\n" -"\n" -" Long Term Project management module that tracks planning, " -"scheduling, resources allocation.\n" -" Mainly used with Big project management.\n" -" - Project Phases will be maintained by Manager of the project\n" -" - Compute Phase Scheduling: Compute start date and end date of " -"the phases which are in draft,open and pending state of the project given.\n" -" If no project given then all the " -"draft,open and pending state phases will be taken\n" -" - Compute Task Scheduling: This works same as the scheduler " -"button on project.phase. It takes the project as argument and computes all " -"the open,draft and pending tasks\n" -" - Schedule Tasks: All the tasks which are in draft,pending and " -"open state are scheduled with taking the phase's start date\n" -"\n" -" " +msgid "Action" msgstr "" -"\n" -"\n" -" Módulo de Gestión de Proyectos a Largo Plazo que realiza el " -"seguimiento de planeamiento, programación, asignación de recursos.\n" -" Utilizado principalmente con la gestión de proyectos grandes.\n" -" - Las Fases del Proyecto serán gestionadas por el Administrador " -"del proyecto\n" -" - Calcula la Programación de Fases: Calcula la fecha de inicio y " -"fecha de finalización de las fases del proyecto en estado borrador, abierto " -"y pendiente.\n" -" Si no hay ningún proyecto concreto, " -"entonces se llevarán todas las fases en estado borrador, abierto y " -"pendiente\n" -" - Calcula la Programación de Tareas: Esto funciona igual que el " -"botón programador de project.phase. Toma el proyecto como argumento y " -"calcula todas las tareas abiertas, en borrador y pendientes.\n" -" - Programa tareas: Todas las tareas en estado borrador, " -"pendiente y abierto se programan desde la fecha de inicio de la fase\n" -"\n" -" " #. module: project_long_term -#: constraint:project.task:0 -msgid "Error ! You cannot create recursive tasks." -msgstr "¡Error! No se pueden crear tareas recursivas." - -#. module: project_long_term -#: model:ir.ui.menu,name:project_long_term.menu_resouce_allocation -msgid "Resource Allocations" -msgstr "Asignación de recursos" - -#. module: project_long_term -#: constraint:project.project:0 -msgid "Error! You cannot assign escalation to the same project!" -msgstr "¡Error! No puede asignar un escalado al mismo proyecto." - -#. module: project_long_term -#: code:addons/project_long_term/project_long_term.py:128 -#, python-format -msgid "Day" -msgstr "Día" +#: view:project.phase:0 +msgid "Start Phase" +msgstr "" #. module: project_long_term #: model:ir.model,name:project_long_term.model_project_task msgid "Task" -msgstr "Tarea" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Draft" +msgstr "" + +#. module: project_long_term +#: view:project.compute.phases:0 +#: view:project.compute.tasks:0 +msgid "C_ompute" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +#: selection:project.phase,state:0 +msgid "New" +msgstr "" + +#. module: project_long_term +#: field:project.phase,product_uom:0 +msgid "Duration Unit of Measure" +msgstr "" + +#. module: project_long_term +#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar_leaves +msgid "Resource Leaves" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +#: selection:project.phase,state:0 +msgid "Pending" +msgstr "" + +#. module: project_long_term +#: help:project.phase,progress:0 +msgid "Computed based on related tasks" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "In Progress Phases" +msgstr "" + +#. module: project_long_term +#: code:addons/project_long_term/project_long_term.py:140 +#, python-format +msgid "%s (copy)" +msgstr "" + +#. module: project_long_term +#: code:addons/project_long_term/wizard/project_compute_phases.py:48 +#, python-format +msgid "Please specify a project to schedule." +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +#: view:project.user.allocation:0 +msgid "Group By..." +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Remaining Hours" +msgstr "" + +#. module: project_long_term +#: field:project.phase,constraint_date_start:0 +msgid "Minimum Start Date" +msgstr "" + +#. module: project_long_term +#: help:project.phase,product_uom:0 +msgid "" +"Unit of Measure (Unit of Measure) is the unit of measurement for Duration" +msgstr "" + +#. module: project_long_term +#: help:project.phase,user_ids:0 +msgid "" +"The resources on the project can be computed automatically by the scheduler." +msgstr "" + +#. module: project_long_term +#: field:project.phase,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: project_long_term +#: help:account.analytic.account,use_phases:0 +msgid "Check this field if you plan to use phase-based scheduling" +msgstr "" + +#. module: project_long_term +#: help:project.phase,state:0 +msgid "" +"If the phase is created the status 'Draft'.\n" +" If the phase is started, the status becomes 'In Progress'.\n" +" If review is needed the phase is in 'Pending' status. " +" \n" +" If the phase is over, the status is set to 'Done'." +msgstr "" + +#. module: project_long_term +#: field:project.phase,progress:0 +msgid "Progress" +msgstr "" + +#. module: project_long_term +#: model:ir.ui.menu,name:project_long_term.menu_pm_users_project1 +#: model:ir.ui.menu,name:project_long_term.menu_view_resource +msgid "Resources" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "My Projects" +msgstr "" + +#. module: project_long_term +#: view:project.project:0 +#: view:project.user.allocation:0 +msgid "Phase" +msgstr "" + +#. module: project_long_term +#: help:project.phase,duration:0 +msgid "By default in days" +msgstr "" + +#. module: project_long_term +#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar +msgid "Working Time" +msgstr "Horario de trabajo" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Pending Phases" +msgstr "" + +#. module: project_long_term +#: help:project.user.allocation,date_start:0 +msgid "Starting Date" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Related Tasks" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Start Month" +msgstr "" + +#. module: project_long_term +#: field:project.phase,date_end:0 +#: field:project.user.allocation,date_end:0 +msgid "End Date" +msgstr "" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_compute_tasks +msgid "Project Compute Tasks" +msgstr "" + +#. module: project_long_term +#: model:ir.actions.act_window,help:project_long_term.act_project_phase +msgid "" +"A project can be split into the different phases. For each phase, you can " +"define your users allocation, describe different tasks and link your phase " +"to previous and next phases, add date constraints for the automated " +"scheduling. Use the long term planning in order to planify your available " +"users, convert your phases into a series of tasks when you start working on " +"the project." +msgstr "" #. module: project_long_term #: selection:project.compute.phases,target_project:0 msgid "Compute a Single Project" -msgstr "Calcular un sólo proyecto" +msgstr "" #. module: project_long_term #: view:project.phase:0 #: field:project.phase,previous_phase_ids:0 msgid "Previous Phases" -msgstr "Fases previas" +msgstr "" #. module: project_long_term -#: help:project.phase,product_uom:0 -msgid "UoM (Unit of Measure) is the unit of measurement for Duration" -msgstr "UdM (Unidad de Medida) es la unidad de medida para la duración" +#: view:project.phase:0 +msgid "New Phases" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Tasks Details" +msgstr "" + +#. module: project_long_term +#: field:project.project,phase_count:0 +msgid "Open Phases" +msgstr "" #. module: project_long_term #: help:project.phase,date_end:0 msgid "" " It's computed by the scheduler according to the start date and the duration." msgstr "" -" Es calculado por el planificador en fucnión de la fecha de inicio y la " -"duración" + +#. module: project_long_term +#: constraint:project.phase:0 +msgid "Loops in phases not allowed" +msgstr "" + +#. module: project_long_term +#: view:project.user.allocation:0 +#: field:project.user.allocation,user_id:0 +msgid "User" +msgstr "" #. module: project_long_term #: model:ir.model,name:project_long_term.model_project_project @@ -170,175 +331,88 @@ msgstr "" #: field:project.compute.tasks,project_id:0 #: view:project.phase:0 #: field:project.phase,project_id:0 -#: view:project.resource.allocation:0 -#: field:project.resource.allocation,project_id:0 #: view:project.task:0 +#: view:project.user.allocation:0 +#: field:project.user.allocation,project_id:0 msgid "Project" -msgstr "Proyecto" +msgstr "" #. module: project_long_term -#: code:addons/project_long_term/wizard/project_compute_phases.py:50 -#, python-format -msgid "Error!" -msgstr "¡Error!" +#: view:project.compute.phases:0 +#: view:project.compute.tasks:0 +msgid "Cancel" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Project Users" +msgstr "" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_project_phase +#: view:project.phase:0 +#: view:project.task:0 +#: field:project.task,phase_id:0 +#: field:project.user.allocation,phase_id:0 +msgid "Project Phase" +msgstr "" + +#. module: project_long_term +#: model:ir.ui.menu,name:project_long_term.menu_phase_schedule +msgid "Scheduling" +msgstr "" + +#. module: project_long_term +#: constraint:project.phase:0 +msgid "Phase start-date must be lower than phase end-date." +msgstr "" #. module: project_long_term #: selection:project.phase,state:0 msgid "Cancelled" -msgstr "Cancelado" - -#. module: project_long_term -#: help:project.resource.allocation,date_end:0 -msgid "Ending Date" -msgstr "Fecha de fin" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Planning" -msgstr "Planificación" - -#. module: project_long_term -#: field:project.phase,constraint_date_end:0 -msgid "Deadline" -msgstr "Fecha límite" - -#. module: project_long_term -#: view:project.compute.phases:0 -#: view:project.compute.tasks:0 -msgid "_Cancel" -msgstr "_Cancelar" - -#. module: project_long_term -#: model:ir.actions.act_window,name:project_long_term.action_project_compute_phases -#: model:ir.ui.menu,name:project_long_term.menu_compute_phase -msgid "Compute Phase Scheduling" -msgstr "Calcular planificación de fases" - -#. module: project_long_term -#: code:addons/project_long_term/project_long_term.py:190 -#, python-format -msgid " (copy)" -msgstr " (copia)" - -#. module: project_long_term -#: view:project.phase:0 -#: view:project.resource.allocation:0 -#: field:project.resource.allocation,useability:0 -msgid "Availability" -msgstr "Disponibilidad" - -#. module: project_long_term -#: view:project.phase:0 -#: field:project.phase,state:0 -msgid "State" -msgstr "Estado" - -#. module: project_long_term -#: view:project.compute.phases:0 -#: view:project.compute.tasks:0 -msgid "C_ompute" -msgstr "C_alcular" - -#. module: project_long_term -#: view:project.compute.phases:0 -msgid "Compute Scheduling of phases for all or specified project" msgstr "" -"Calcular planificación de fases para todos o el proyecto especificado" #. module: project_long_term -#: field:project.phase,product_uom:0 -msgid "Duration UoM" -msgstr "UdM duración" - -#. module: project_long_term -#: model:ir.actions.act_window,name:project_long_term.action_project_compute_tasks -#: model:ir.ui.menu,name:project_long_term.menu_compute_tasks -msgid "Compute Task Scheduling" -msgstr "Calcular planificación de tareas" - -#. module: project_long_term -#: field:project.phase,constraint_date_start:0 -msgid "Minimum Start Date" -msgstr "Fecha de inicio mínima" - -#. module: project_long_term -#: model:ir.model,name:project_long_term.model_project_resource_allocation #: view:project.phase:0 -#: view:project.resource.allocation:0 -msgid "Project Resource Allocation" -msgstr "Asignación de recursos de proyecto" - -#. module: project_long_term -#: view:project.compute.tasks:0 -msgid "Compute Scheduling of Task" -msgstr "Calcular planificación de tarea" - -#. module: project_long_term -#: model:ir.actions.act_window,name:project_long_term.act_project_resource -#: model:ir.ui.menu,name:project_long_term.menu_pm_resources_project1 -#: model:ir.ui.menu,name:project_long_term.menu_view_resource -#: view:project.resource.allocation:0 -msgid "Resources" -msgstr "Recursos" - -#. module: project_long_term -#: model:ir.actions.act_window,help:project_long_term.action_project_compute_phases -msgid "" -"To schedule phases of all or a specified project. It then open a gantt " -"view.\n" -"\t " +msgid "Total Hours" msgstr "" -"Para programar las fases de todos los proyectos, o uno específico. A " -"continuación, abrirá una vista de Gantt.\n" -"\t " #. module: project_long_term -#: help:project.resource.allocation,date_start:0 -msgid "Starting Date" -msgstr "Fecha de inicio" +#: model:ir.model,name:project_long_term.model_project_compute_phases +msgid "Project Compute Phases" +msgstr "" + +#. module: project_long_term +#: field:project.phase,date_start:0 +#: field:project.user.allocation,date_start:0 +msgid "Start Date" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Constraints" +msgstr "" + +#. module: project_long_term +#: help:project.phase,sequence:0 +msgid "Gives the sequence order when displaying a list of phases." +msgstr "" #. module: project_long_term #: model:ir.actions.act_window,name:project_long_term.project_phase_task_list -msgid "Related Tasks" -msgstr "Tareas relacionadas" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Dates" -msgstr "Fechas" - -#. module: project_long_term -#: help:project.resource.allocation,useability:0 -msgid "" -"Availability of this resource for this project phase in percentage (=50%)" +msgid "Tasks" msgstr "" -"La disponibilidad de este recurso para esta fase de proyecto en porcentaje " -"(=50%)" #. module: project_long_term -#: help:project.phase,constraint_date_start:0 -msgid "force the phase to start after this date" -msgstr "Forzar que la fase epiece después de esta fecha" +#: help:project.user.allocation,date_end:0 +msgid "Ending Date" +msgstr "" #. module: project_long_term -#: field:project.phase,task_ids:0 -msgid "Project Tasks" -msgstr "Tareas de proyecto" - -#. module: project_long_term -#: field:project.phase,resource_ids:0 -msgid "Project Resources" -msgstr "Recursos de proyecto" - -#. module: project_long_term -#: view:project.schedule.tasks:0 -msgid "_Ok" -msgstr "_Aceptar" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Schedule and Display info" -msgstr "Planificar y mostrar información" +#: code:addons/project_long_term/wizard/project_compute_phases.py:48 +#, python-format +msgid "Error!" +msgstr "" #. module: project_long_term #: help:project.phase,date_start:0 @@ -346,103 +420,6 @@ msgid "" "It's computed by the scheduler according the project date or the end date of " "the previous phase." msgstr "" -"Es calculado por el planificador en función de la fecha inicio o fecha fin " -"de la fase anterior" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Month" -msgstr "Mes" - -#. module: project_long_term -#: constraint:project.phase:0 -msgid "Phase start-date must be lower than phase end-date." -msgstr "La fecha-inicio de la fase debe ser anterior a la fecha-fin." - -#. module: project_long_term -#: model:ir.model,name:project_long_term.model_project_schedule_tasks -msgid "project.schedule.tasks" -msgstr "proyecto.planificar.tareas" - -#. module: project_long_term -#: model:ir.actions.act_window,help:project_long_term.act_project_phase -msgid "" -"A project can be split into the different phases. For each phase, you can " -"define your resources allocation, describe different tasks and link your " -"phase to previous and next phases, add date constraints for the automated " -"scheduling. Use the long term planning in order to planify your available " -"human resources, convert your phases into a series of tasks when you start " -"working on the project." -msgstr "" -"Un proyecto se puede dividir en diferentes fases. Para cada fase, puede " -"definir su asignación de recursos, describir diferentes tareas y vincular su " -"fase a fases previas y posteriores, añadir restricciones de fecha para la " -"programación automática. Cuando empiece a trabajar en el proyecto, use el " -"planeamiento a largo plazo para planificar sus recursos humanos disponibles " -"y convertir sus fases en una serie de tareas." - -#. module: project_long_term -#: field:project.phase,date_start:0 -#: field:project.resource.allocation,date_start:0 -msgid "Start Date" -msgstr "Fecha inicio" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Resource Allocation" -msgstr "Asignación de recursos" - -#. module: project_long_term -#: help:project.phase,constraint_date_end:0 -msgid "force the phase to finish before this date" -msgstr "Forzar que la fase termine antes de esta fecha" - -#. module: project_long_term -#: view:project.phase:0 -#: selection:project.phase,state:0 -msgid "Draft" -msgstr "Borrador" - -#. module: project_long_term -#: view:project.phase:0 -#: selection:project.phase,state:0 -msgid "Pending" -msgstr "Pendiente" - -#. module: project_long_term -#: field:project.resource.allocation,name:0 -msgid "unknown" -msgstr "desconocido" - -#. module: project_long_term -#: field:project.resource.allocation,user_id:0 -msgid "User" -msgstr "Usuario" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Task Detail" -msgstr "Detalles tarea" - -#. module: project_long_term -#: help:project.project,resource_calendar_id:0 -msgid "Timetable working hours to adjust the gantt diagram report" -msgstr "Horario de trabajo para ajustar el informe del diagrama de Gantt" - -#. module: project_long_term -#: model:ir.model,name:project_long_term.model_project_compute_tasks -msgid "Project Compute Tasks" -msgstr "Calcular tareas proyecto" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Constraints" -msgstr "Restricciones" - -#. module: project_long_term -#: help:project.phase,sequence:0 -msgid "Gives the sequence order when displaying a list of phases." -msgstr "Indica el orden cuando se muestra la lista de fases" #. module: project_long_term #: model:ir.actions.act_window,name:project_long_term.act_project_phase @@ -452,182 +429,74 @@ msgstr "Indica el orden cuando se muestra la lista de fases" #: view:project.phase:0 #: field:project.project,phase_ids:0 msgid "Project Phases" -msgstr "Fases proyecto" +msgstr "" + +#. module: project_long_term +#: help:project.phase,constraint_date_start:0 +msgid "force the phase to start after this date" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +msgid "Month" +msgstr "" + +#. module: project_long_term +#: model:ir.model,name:project_long_term.model_account_analytic_account +msgid "Analytic Account" +msgstr "" + +#. module: project_long_term +#: field:project.phase,constraint_date_end:0 +msgid "Deadline" +msgstr "" + +#. module: project_long_term +#: view:project.user.allocation:0 +msgid "Project User Allocation" +msgstr "" + +#. module: project_long_term +#: model:ir.actions.act_window,name:project_long_term.action_project_compute_tasks +#: model:ir.ui.menu,name:project_long_term.menu_compute_tasks +#: view:project.compute.tasks:0 +msgid "Schedule Tasks" +msgstr "" #. module: project_long_term #: view:project.phase:0 #: selection:project.phase,state:0 msgid "Done" -msgstr "Hecho" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Cancel" -msgstr "Cancelar" - -#. module: project_long_term -#: view:project.phase:0 -#: selection:project.phase,state:0 -msgid "In Progress" -msgstr "En proceso" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Remaining Hours" -msgstr "Horas restantes" - -#. module: project_long_term -#: view:project.phase:0 -#: field:project.phase,responsible_id:0 -msgid "Responsible" -msgstr "Responsable" - -#. module: project_long_term -#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar -#: field:project.project,resource_calendar_id:0 -msgid "Working Time" -msgstr "Horario de trabajo" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Current" -msgstr "Actual" - -#. module: project_long_term -#: view:project.phase:0 -msgid "Start Phase" -msgstr "Comenzar fase" - -#. module: project_long_term -#: code:addons/project_long_term/wizard/project_compute_phases.py:50 -#, python-format -msgid "Please Specify Project to be schedule" -msgstr "Por favor seleccione el proyecto a planificar" - -#. module: project_long_term -#: view:project.phase:0 -#: field:project.phase,total_hours:0 -msgid "Total Hours" -msgstr "Total horas" - -#. module: project_long_term -#: view:project.schedule.tasks:0 -msgid "Task Scheduling completed successfully." -msgstr "Planificación de tareas completada satisfactoriamente." - -#. module: project_long_term -#: view:project.compute.tasks:0 -msgid "Compute Scheduling of Task for specified project." -msgstr "Calcular planificación de tareas para un proyecto específico" - -#. module: project_long_term -#: view:project.resource.allocation:0 -msgid "Phase" -msgstr "Fase" - -#. module: project_long_term -#: help:project.phase,state:0 -msgid "" -"If the phase is created the state 'Draft'.\n" -" If the phase is started, the state becomes 'In Progress'.\n" -" If review is needed the phase is in 'Pending' state. " -" \n" -" If the phase is over, the states is set to 'Done'." msgstr "" -"Si la fase se crea, el estado es \"Borrador\".\n" -" Si la fase comienza, el estado cambia a \"En Proceso\".\n" -" Si se necesita revisión, la fase está en estado \"Pendiente\".\n" -" Si la fase está terminada, el estado se fija en \"Hecho\"." #. module: project_long_term -#: field:project.phase,date_end:0 -#: field:project.resource.allocation,date_end:0 -msgid "End Date" -msgstr "Fecha de fin" +#: selection:project.compute.phases,target_project:0 +msgid "Compute All My Projects" +msgstr "" #. module: project_long_term -#: view:project.resource.allocation:0 -#: field:project.resource.allocation,resource_id:0 -msgid "Resource" -msgstr "Recurso" +#: field:project.phase,user_force_ids:0 +msgid "Force Assigned Users" +msgstr "" + +#. module: project_long_term +#: view:project.phase:0 +#: field:project.phase,duration:0 +msgid "Duration" +msgstr "" + +#. module: project_long_term +#: view:project.user.allocation:0 +msgid "Users" +msgstr "" #. module: project_long_term #: field:project.phase,name:0 msgid "Name" -msgstr "Nombre" +msgstr "" #. module: project_long_term -#: view:project.phase:0 -msgid "Tasks Details" -msgstr "Detalles tareas" - -#. module: project_long_term -#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar -msgid "Working Period" -msgstr "Periodo de trabajo" - -#. module: project_long_term -#: model:ir.model,name:project_long_term.model_resource_resource -msgid "Resource Detail" -msgstr "Detalle recurso" - -#. module: project_long_term -#: model:ir.ui.menu,name:project_long_term.menu_phase_schedule -msgid "Scheduling" -msgstr "Planificación" - -#. module: project_long_term -#: model:ir.model,name:project_long_term.model_project_phase -#: view:project.phase:0 -#: field:project.resource.allocation,phase_id:0 -#: view:project.task:0 -#: field:project.task,phase_id:0 -msgid "Project Phase" -msgstr "Fase proyecto" - -#. module: project_long_term -#: model:ir.model,name:project_long_term.model_project_compute_phases -msgid "Project Compute Phases" -msgstr "Calcular fases del proyecto" - -#. module: project_long_term -#: field:project.schedule.tasks,msg:0 -msgid "Message" -msgstr "Mensaje" - -#. module: project_long_term -#: constraint:project.phase:0 -msgid "Loops in phases not allowed" -msgstr "No se permiten bucles en fases" - -#. module: project_long_term -#: field:project.phase,sequence:0 -msgid "Sequence" -msgstr "Secuencia" - -#. module: project_long_term -#: selection:project.compute.phases,target_project:0 -msgid "Compute All Projects" -msgstr "Calcular todos los proyectos" - -#. module: project_long_term -#: model:ir.ui.menu,name:project_long_term.menu_view_resource_calendar_leaves -msgid "Resource Leaves" -msgstr "Ausencias recursos" - -#. module: project_long_term -#: model:ir.actions.act_window,name:project_long_term.action_project_schedule_tasks -#: view:project.phase:0 -#: view:project.schedule.tasks:0 -msgid "Schedule Tasks" -msgstr "Planificar tareas" - -#. module: project_long_term -#: help:project.phase,duration:0 -msgid "By default in days" -msgstr "Por defecto en días" - -#. module: project_long_term -#: field:project.phase,duration:0 -msgid "Duration" -msgstr "Duración" +#: view:project.compute.phases:0 +#: view:project.compute.tasks:0 +msgid "or" +msgstr ""