From 21344cbb70814c41c7570dff844707a386398722 Mon Sep 17 00:00:00 2001 From: "stefan@therp.nl" <> Date: Thu, 24 Mar 2011 17:42:00 +0100 Subject: [PATCH 001/831] [FIX] Cash and Bank journals are unintendedly created as refund journals lp bug: https://launchpad.net/bugs/741863 fixed bzr revid: stefan@therp.nl-20110324164200-npm4eo8ed2my838y --- addons/account/account.py | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/account/account.py b/addons/account/account.py index df27fc2e6bc..ed61da05cbe 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -2946,6 +2946,7 @@ class wizard_multi_charts_accounts(osv.osv_memory): analitical_bank_ids = analytic_journal_obj.search(cr,uid,[('type','=','situation')]) analitical_journal_bank = analitical_bank_ids and analitical_bank_ids[0] or False + vals_journal = {} vals_journal['name']= vals['name'] vals_journal['code']= _('BNK') + str(current_num) vals_journal['sequence_id'] = seq_id From a3f4cb4df31e362f10181b26995056b2d670b9eb Mon Sep 17 00:00:00 2001 From: "Jay Vora (OpenERP)" Date: Wed, 20 Apr 2011 13:17:05 +0530 Subject: [PATCH 002/831] [FIX] Chained locations: processing first move does not copy prod.lot in chained moves lp bug: https://launchpad.net/bugs/763437 fixed bzr revid: jvo@tinyerp.com-20110420074705-a6fmsamg7xzstk5m --- addons/stock/stock.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index a728e06fb01..a9e19670d7e 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -2125,6 +2125,8 @@ class stock_move(osv.osv): self.write(cr, uid, [move.id], {'move_history_ids': [(4, move.move_dest_id.id)]}) #cr.execute('insert into stock_move_history_ids (parent_id,child_id) values (%s,%s)', (move.id, move.move_dest_id.id)) if move.move_dest_id.state in ('waiting', 'confirmed'): + if move.prodlot_id.id: + self.write(cr, uid, [move.move_dest_id.id], {'prodlot_id':move.prodlot_id.id}) self.force_assign(cr, uid, [move.move_dest_id.id], context=context) if move.move_dest_id.picking_id: wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr) From 0a7a91b22592eb100b07975425253b82d112d224 Mon Sep 17 00:00:00 2001 From: "Tejas (OpenERP)" Date: Wed, 27 Apr 2011 15:50:56 +0530 Subject: [PATCH 003/831] [FIX] 4635 create project from template and project duplication fixed bzr revid: tta@openerp.com-20110427102056-wndhpylsnzgdoxtv --- addons/project_long_term/project_long_term.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py index c2bc55db212..96811927c12 100644 --- a/addons/project_long_term/project_long_term.py +++ b/addons/project_long_term/project_long_term.py @@ -581,6 +581,37 @@ def Project_%d(): context = {} allocation = {} return allocation + def copy(self, cr, uid, id, default=None, context=None): + if context is None: + context = {} + if default is None: + default = {} + pool_task = self.pool.get('project.task') + pool_phase = self.pool.get('project.phase') + proj = self.browse(cr, uid, id, context=context) + map_phase = {} #maintains a dictionary of old to new phase + map_tasks = {} #maintains a dictionary of tasks either orphan to related to any phase + #Creating a list of new phases + for phase in proj.phase_ids: + map_phase[phase.id] = pool_phase.copy(cr, uid, phase.id, default={}, context=context) + list_phases = map_phase.keys() + map_phase.values() + + for phase_id in map_phase.values(): + for task in pool_phase.browse(cr, uid, phase_id, context).task_ids: + map_tasks[task.id] = phase_id + + #Creating a list of tasks which are not linked to phases + for task in proj.tasks: + if (not task.phase_id.id) or (task.phase_id.id and task.phase_id.id not in list_phases) or (task.phase_id.id and task.phase_id.id in list_phases and not task.active): + #Copy of Real tasks (without Phase) and inactive template tasks + default_phase = task.phase_id.id and {'phase_id' : map_phase.get(task.phase_id.id,False)} or {} + map_tasks[pool_task.copy(cr, uid, task.id, default_phase, context=context)] = map_phase.get(task.phase_id.id,False) + + default.update({'tasks':[(6,0, map_tasks.keys())]}) + default.update({'phase_ids':[(6,0, map_phase.values())]}) + + return super(project, self).copy(cr, uid, id, default, context) + def schedule_tasks(self, cr, uid, ids, context=None): """ From 8fd72aff40eb757013eaee6a0c182c9e1acee7c5 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 5 May 2011 18:12:21 +0200 Subject: [PATCH 004/831] [FIX] share: avoid crash in web addon with empty share filter bzr revid: odo@openerp.com-20110505161221-d4k3y8v81qz2wbrp --- addons/share/web/controllers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/share/web/controllers.py b/addons/share/web/controllers.py index aa689019259..1b57d960e99 100644 --- a/addons/share/web/controllers.py +++ b/addons/share/web/controllers.py @@ -13,7 +13,7 @@ class ShareWizardController(openerp.controllers.SecuredController): _cp_path = "/share" @expose() - def index(self, domain, search_domain, context, view_id, action_id=None): + def index(self, domain, context, view_id, search_domain='[]', action_id=None): context = ast.literal_eval(context) if not action_id: From ef4c13fad553cbdae08cc82a8f07991f4539f1b6 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 5 May 2011 18:14:26 +0200 Subject: [PATCH 005/831] [FIX] share: hide Share button when user does not belong to Sharing group bzr revid: odo@openerp.com-20110505161426-c4ocuy98mgbceq5w --- addons/share/web/editors.py | 14 ++++++++++---- addons/share/wizard/share_wizard.py | 12 ++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/addons/share/web/editors.py b/addons/share/web/editors.py index fd6199a4fd6..1928b644073 100644 --- a/addons/share/web/editors.py +++ b/addons/share/web/editors.py @@ -11,8 +11,13 @@ class ShareActionEditor(openobject.templating.TemplateEditor): share_opener_insertion = output.index( '\n', output.index(self.ADD_SHARE_SECTION)) + 1 - return output[:share_opener_insertion] + \ - '''

${_("Sharing")}

+ return output[:share_opener_insertion] + ''' + <% + if 'has_share' not in cp.session: + cp.session['has_share'] = rpc.RPCProxy('share.wizard').has_share() + %> + % if cp.session['has_share']: +

${_("Sharing")}

  • ${_("Share")} @@ -33,8 +38,9 @@ class ShareActionEditor(openobject.templating.TemplateEditor): }); }); - \n''' + \ - output[share_opener_insertion:] + \n + % endif +''' + output[share_opener_insertion:] def edit(self, template, template_text): return self.insert_share_link( diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index 48243c57dda..755e4777eca 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -50,6 +50,18 @@ class share_create(osv.osv_memory): _name = 'share.wizard' _description = 'Share Wizard' + def has_group(self, cr, uid, module, group_xml_id, context=None): + """Returns True if current user is a member of the group identified by the module, group_xml_id pair.""" + # if the group was deleted or does not exist, we say NO (better safe than sorry) + try: + model, group_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, module, group_xml_id) + except ValueError: + return False + return group_id in self.pool.get('res.users').read(cr, uid, uid, ['groups_id'], context=context)['groups_id'] + + def has_share(self, cr, uid, context=None): + return self.has_group(cr, uid, module='share', group_xml_id='group_share_user', context=context) + _columns = { 'action_id': fields.many2one('ir.actions.act_window', 'Action to share', required=True, help="The action that opens the screen containing the data you wish to share."), From fe6bc5db26b55b8bc20a49036d30ac6aa0b98170 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 5 May 2011 18:15:39 +0200 Subject: [PATCH 006/831] [FIX] share: bumped up module version after changes to web addon This will notify the web clients to refresh the web addon. bzr revid: odo@openerp.com-20110505161539-cp21x19ii81wr3o6 --- addons/share/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/share/__openerp__.py b/addons/share/__openerp__.py index 7a68936970d..9b1b331abb2 100644 --- a/addons/share/__openerp__.py +++ b/addons/share/__openerp__.py @@ -22,7 +22,7 @@ { "name" : "Sharing Tools", - "version" : "1.3", + "version" : "1.3.1", "depends" : ["base"], "author" : "OpenERP SA", "category": 'Generic Modules', From b26d354d34054eb102196f02bf79e2c8a956e6ce Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 5 May 2011 18:18:53 +0200 Subject: [PATCH 007/831] [FIX] share: share users with multi-shares should keep same home action Previously they were assigned the generic menu as home action but that is not very relevant because it does not contain their shortcuts most of the time, and also this breaks the web client in v6.0 as it does not support the Menu as home action. bzr revid: odo@openerp.com-20110505161853-y1gc21wdn6k2wg41 --- addons/share/wizard/share_wizard.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index 755e4777eca..cae12ddbfe7 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -156,7 +156,6 @@ class share_create(osv.osv_memory): def _setup_action_and_shortcut(self, cr, uid, wizard_data, user_ids, new_users, context=None): user_obj = self.pool.get('res.users') - menu_action_id = user_obj._get_menu(cr, uid, context=context) values = { 'name': (_('%s (Shared)') % wizard_data.action_id.name)[:64], 'domain': wizard_data.domain, @@ -169,9 +168,11 @@ class share_create(osv.osv_memory): for user_id in user_ids: action_id = self._create_shortcut(cr, user_id, values) if new_users: + # We do this only for new share users, as existing ones already have their initial home + # action. Resetting to the default menu does not work well as the menu is rather empty + # and does not contain the shortcuts in most cases. user_obj.write(cr, 1, [user_id], {'action_id': action_id}) - else: - user_obj.write(cr, 1, [user_id], {'action_id': menu_action_id}) + def _get_recursive_relations(self, cr, uid, model, ttypes, relation_fields=None, suffix=None, context=None): """Returns list of tuples representing recursive relationships of type ``ttypes`` starting from From b1bcc6b036674f674ee3ef9f2568743faddfc4ee Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 5 May 2011 18:22:31 +0200 Subject: [PATCH 008/831] [FIX] share: use empty domain for shared actions, as ir.rules do enforce the filtering. We must not use a normal domain for the shared action, because it may be constructed with records the user may not see (e.g. sharing tasks from a certain project does not give right to see the project itself.) Evaluating the domain of an action requires rights that the user will not have. Moreover, this is useless because ir.rules are created with each share access to filter appropriately the records, and they are evaluated as root user without risk of failed access right. bzr revid: odo@openerp.com-20110505162231-vbkh4vqrtk93yg1q --- addons/share/wizard/share_wizard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index cae12ddbfe7..f153f26f4d4 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -158,7 +158,7 @@ class share_create(osv.osv_memory): user_obj = self.pool.get('res.users') values = { 'name': (_('%s (Shared)') % wizard_data.action_id.name)[:64], - 'domain': wizard_data.domain, + 'domain': '[]', 'context': wizard_data.action_id.context, 'res_model': wizard_data.action_id.res_model, 'view_mode': wizard_data.action_id.view_mode, From 4d9ce4260f820a762095f97ea307859bc782d038 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 5 May 2011 18:25:08 +0200 Subject: [PATCH 009/831] [FIX] share: current user restrictions were not properly copied This could lead to security issues, because shared users could have more access rights than the user sharing the data. The mechanism was working to copy them, but unfortunately not working. bzr revid: odo@openerp.com-20110505162508-3r12bl7rg1hpyzps --- addons/share/wizard/share_wizard.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index f153f26f4d4..364e4127b93 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -271,21 +271,21 @@ class share_create(osv.osv_memory): user_obj = self.pool.get('res.users') rule_obj = self.pool.get('ir.rule') current_user = user_obj.browse(cr, uid, uid, context=context) - completed_models = set() + rules_done = set() for group in current_user.groups_id: for dummy, model in fields_relations: - if model.id in completed_models: - continue - completed_models.add(model.id) for rule in group.rule_groups: - if rule.model_id == model.id: + if rule.id in rules_done: + continue + rules_done.add(rule.id) + if rule.model_id.id == model.id: if 'user.' in rule.domain_force: # Above pattern means there is likely a condition # specific to current user, so we must copy the rule using # the evaluated version of the domain. # And it's better to copy one time too much than too few rule_obj.copy(cr, 1, rule.id, default={ - 'name': '%s (%s)' %(rule.name, _('(Copy for sharing)')), + 'name': '%s %s' %(rule.name, _('(Copy for sharing)')), 'groups': [(6,0,[group_id])], 'domain_force': rule.domain, # evaluated version! }) From 6d512bb2da7b113e7dd08b91f4c55adbfc167b24 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 5 May 2011 18:27:01 +0200 Subject: [PATCH 010/831] [FIX] share: multi-sharing with an empty filter was not working An empty share filter should be translated as a dummy ir.rule to make sure it is properly combined with other rules after multiple shared access are granted to the same user. bzr revid: odo@openerp.com-20110505162701-eq02jb3c0942x3bt --- addons/share/wizard/share_wizard.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/share/wizard/share_wizard.py b/addons/share/wizard/share_wizard.py index 364e4127b93..c22be871b60 100644 --- a/addons/share/wizard/share_wizard.py +++ b/addons/share/wizard/share_wizard.py @@ -31,6 +31,9 @@ from tools.safe_eval import safe_eval FULL_ACCESS = ('perm_read', 'perm_write', 'perm_create', 'perm_unlink') READ_ONLY_ACCESS = ('perm_read',) +# Pseudo-domain to represent an empty filter, constructed using +# osv.expression's DUMMY_LEAF +DOMAIN_ALL = [(1, '=', 1)] RANDOM_PASS_CHARACTERS = [chr(x) for x in range(48, 58) + range(97, 123) + range(65, 91)] RANDOM_PASS_CHARACTERS.remove('l') #lowercase l, easily mistaken as one or capital i @@ -427,11 +430,12 @@ class share_create(osv.osv_memory): # to uid, and it must be replaced correctly) rule_obj = self.pool.get('ir.rule') # A. + main_domain = wizard_data.domain if wizard_data.domain != '[]' else DOMAIN_ALL rule_obj.create(cr, 1, { 'name': _('Sharing filter created by user %s (%s) for group %s') % \ (current_user.name, current_user.login, group_id), 'model_id': model.id, - 'domain_force': wizard_data.domain, + 'domain_force': main_domain, 'groups': [(4,group_id)] }) # B. From 7928a00024def2ff1f31ef4c1c7544b6e473477d Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 5 May 2011 18:55:30 +0200 Subject: [PATCH 011/831] [FIX] share: form view should share current record only Version bumped to force web addons updates bzr revid: odo@openerp.com-20110505165530-jnfglbocvzku6rkb --- addons/share/__openerp__.py | 2 +- addons/share/web/editors.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/share/__openerp__.py b/addons/share/__openerp__.py index 9b1b331abb2..9a71412523a 100644 --- a/addons/share/__openerp__.py +++ b/addons/share/__openerp__.py @@ -22,7 +22,7 @@ { "name" : "Sharing Tools", - "version" : "1.3.1", + "version" : "1.3.2", "depends" : ["base"], "author" : "OpenERP SA", "category": 'Generic Modules', diff --git a/addons/share/web/editors.py b/addons/share/web/editors.py index 1928b644073..1e1573b05af 100644 --- a/addons/share/web/editors.py +++ b/addons/share/web/editors.py @@ -33,7 +33,9 @@ class ShareActionEditor(openobject.templating.TemplateEditor): domain: jQuery("#_terp_domain").val(), view_id: jQuery("#_terp_view_id").val(), action_id: jQuery("#_terp_action_id").val(), - search_domain: jQuery("#_terp_search_domain").val(), + search_domain: jQuery("#_terp_view_type").val() == "form" ? + ("[('id','=',"+jQuery("#_terp_id").val()+")]") : + jQuery("#_terp_search_domain").val(), })); }); }); From 1d746d88e1a7bdbaec5153fafcdb5d3598d6e1f4 Mon Sep 17 00:00:00 2001 From: "Anup (OpenERP)" Date: Mon, 16 May 2011 17:38:18 +0530 Subject: [PATCH 012/831] [FIX] base : Record Rules being ended in a single group now lp bug: https://launchpad.net/bugs/766982 fixed bzr revid: ach@tinyerp.com-20110516120818-56d17xau3bwo26lt --- bin/addons/base/ir/ir_rule.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bin/addons/base/ir/ir_rule.py b/bin/addons/base/ir/ir_rule.py index befa47e25b0..9eacce9c6fd 100644 --- a/bin/addons/base/ir/ir_rule.py +++ b/bin/addons/base/ir/ir_rule.py @@ -126,10 +126,11 @@ class ir_rule(osv.osv): if group_domain: group_domains += group_domain count += 1 - if count and global_domain: - return ['&'] + global_domain + ['|'] * (count-1) + group_domains if count: - return ['|'] * (count-1) + group_domains + dom = ['&'] * (count-1) + group_domains + if global_domain: + return ['&'] + global_domain + dom + return dom return global_domain return [] From 8666a526152cd2033ca2c11d74d64bfe7b07bd2c Mon Sep 17 00:00:00 2001 From: Leonardo Pistone Date: Wed, 18 May 2011 12:03:56 +0200 Subject: [PATCH 013/831] [FIX] use only current company to choose a default account_id for a non-product invoice line lp bug: https://launchpad.net/bugs/784499 fixed bzr revid: leonardo.pistone@domsense.com-20110518100356-cs9gwtn663w85bpa --- addons/account_invoice_layout/account_invoice_layout.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/account_invoice_layout/account_invoice_layout.py b/addons/account_invoice_layout/account_invoice_layout.py index 3337710420f..1690ac4319e 100644 --- a/addons/account_invoice_layout/account_invoice_layout.py +++ b/addons/account_invoice_layout/account_invoice_layout.py @@ -165,7 +165,8 @@ class account_invoice_line(osv.osv): } def _default_account(self, cr, uid, context=None): - cr.execute("select id from account_account where parent_id IS NULL LIMIT 1") + current_company = self.pool.get('res.users').browse(cr,uid,uid).company_id.id + cr.execute("select id from account_account where company_id = %s and parent_id IS NULL LIMIT 1", [current_company]) res = cr.fetchone() return res[0] From 61aa21b90c74bc509f193677cdeede07de3c4563 Mon Sep 17 00:00:00 2001 From: "Amit Bhavsar (Open ERP)" Date: Wed, 18 May 2011 17:54:09 +0530 Subject: [PATCH 014/831] [usability] move action rules into administration, base_action_rule_view bzr revid: amb@tinyerp.com-20110518122409-3dpyvfdq0fai5hmj --- addons/base_action_rule/base_action_rule_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index 65c16edf4ae..a9262a6b746 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -118,7 +118,7 @@ + parent="base.menu_custom" action="base_action_rule_act" sequence="1"/> From 7992a309fc5c0f372309ddf31c6bb0667c8de148 Mon Sep 17 00:00:00 2001 From: "Hardik Ansodariy (OpenERP)" Date: Wed, 18 May 2011 18:37:27 +0530 Subject: [PATCH 015/831] [usability] improve product view, sale_view and point_of_sale_view bzr revid: han@tinyerp.com-20110518130727-rdi4p0cqrarlceyh --- addons/point_of_sale/point_of_sale_view.xml | 13 ++++++++----- addons/sale/sale_view.xml | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index acc0a72ff3b..1f63b6ed382 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -654,11 +654,14 @@ form - - - - - + + + + + + + + diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 9b6664daf20..67f8b5b9a90 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -521,7 +521,7 @@ From bcb7982ec8e607c878d5ec83685beb70e062752b Mon Sep 17 00:00:00 2001 From: "Anup (OpenERP)" Date: Thu, 19 May 2011 11:28:55 +0530 Subject: [PATCH 016/831] [FIX] report_webkit : Webkit reports now getting translated(setLang and formatLang fixed. Maintenance Case:5770) lp bug: https://launchpad.net/bugs/710061 fixed bzr revid: ach@tinyerp.com-20110519055855-nnblkst14g3vwvu0 --- addons/report_webkit/webkit_report.py | 2 + addons/report_webkit_sample/i18n/bg.po | 40 +++++++++---------- addons/report_webkit_sample/i18n/ca.po | 40 +++++++++---------- addons/report_webkit_sample/i18n/de.po | 40 +++++++++---------- addons/report_webkit_sample/i18n/es.po | 40 +++++++++---------- addons/report_webkit_sample/i18n/fr.po | 40 +++++++++---------- addons/report_webkit_sample/i18n/hu.po | 40 +++++++++---------- addons/report_webkit_sample/i18n/it.po | 40 +++++++++---------- addons/report_webkit_sample/i18n/nl.po | 40 +++++++++---------- addons/report_webkit_sample/i18n/pt.po | 40 +++++++++---------- addons/report_webkit_sample/i18n/pt_BR.po | 40 +++++++++---------- .../i18n/report_webkit_sample.pot | 40 +++++++++---------- 12 files changed, 222 insertions(+), 220 deletions(-) diff --git a/addons/report_webkit/webkit_report.py b/addons/report_webkit/webkit_report.py index 406013cef12..d4eabf13da7 100644 --- a/addons/report_webkit/webkit_report.py +++ b/addons/report_webkit/webkit_report.py @@ -294,6 +294,8 @@ class WebKitParser(report_sxw): #default_filters=['unicode', 'entity'] can be used to set global filter body_mako_tpl = mako_template(template) helper = WebKitHelper(cursor, uid, report_xml.id, context) + self.parser_instance.localcontext.update({'setLang':self.setLang}) + self.parser_instance.localcontext.update({'formatLang':self.formatLang}) try : html = body_mako_tpl.render( helper=helper, css=css, diff --git a/addons/report_webkit_sample/i18n/bg.po b/addons/report_webkit_sample/i18n/bg.po index 728abf1702a..f7d839acb72 100644 --- a/addons/report_webkit_sample/i18n/bg.po +++ b/addons/report_webkit_sample/i18n/bg.po @@ -23,12 +23,12 @@ msgid "WebKit invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "Фактура към доставчик" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "Единична цена" @@ -53,91 +53,91 @@ msgid "Webkit Report Samples" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "Отстъпка (%)" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "Факс" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "Документ" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "Описание" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "Цена" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "Дата на фактура" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "КОЛ." #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "База" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "Отпратка към контрагент" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "Данъци" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "Количество" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "ДДС" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "Обезщетение" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "Тел" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "Имейл" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "Фактура" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "Обезщетение на доставчик" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "Общо" diff --git a/addons/report_webkit_sample/i18n/ca.po b/addons/report_webkit_sample/i18n/ca.po index 96b73c3b6e7..d704661e1a0 100644 --- a/addons/report_webkit_sample/i18n/ca.po +++ b/addons/report_webkit_sample/i18n/ca.po @@ -23,12 +23,12 @@ msgid "WebKit invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "" @@ -53,91 +53,91 @@ msgid "Webkit Report Samples" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "" diff --git a/addons/report_webkit_sample/i18n/de.po b/addons/report_webkit_sample/i18n/de.po index ea8491535fe..4b4e6e10e02 100644 --- a/addons/report_webkit_sample/i18n/de.po +++ b/addons/report_webkit_sample/i18n/de.po @@ -24,12 +24,12 @@ msgid "WebKit invoice" msgstr "Webkit Rechnung" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "Lieferanten Rechnung" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "Preis/ME" @@ -65,91 +65,91 @@ msgid "Webkit Report Samples" msgstr "Beispiele Webkit Reports" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "Rabatt (%)" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "Fax" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "Dokument" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "Beschreibung" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "Preis" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "Datum Rechnung" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "Anz." #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "Steuergrundbetrag" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "Partner Ref." #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "Steuern" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "Betrag" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "USt." #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "Gutschrift" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "Tel." #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "E-Mail" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "Rechnung" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "Lieferanten Gutschrift" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "Summe" diff --git a/addons/report_webkit_sample/i18n/es.po b/addons/report_webkit_sample/i18n/es.po index c10ffa7ecaf..5affb1ab26f 100644 --- a/addons/report_webkit_sample/i18n/es.po +++ b/addons/report_webkit_sample/i18n/es.po @@ -24,12 +24,12 @@ msgid "WebKit invoice" msgstr "Factura Webkit" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "Factura de Proveedor" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "Precio unitario" @@ -65,91 +65,91 @@ msgid "Webkit Report Samples" msgstr "Informes Webkit de ejemplo" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "Desc.(%)" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "Fax" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "Documento" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "Descripción" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "Precio" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "Fecha factura" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "CTDAD" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "Base" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "Ref. empresa" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "Impuestos" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "Importe" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "CIF/NIF" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "Reembolso" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "Tel" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "E-mail" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "Factura" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "Factura rectificativa (abono) de proveedor" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "Total" diff --git a/addons/report_webkit_sample/i18n/fr.po b/addons/report_webkit_sample/i18n/fr.po index 47046c1d142..5a4dee89fed 100644 --- a/addons/report_webkit_sample/i18n/fr.po +++ b/addons/report_webkit_sample/i18n/fr.po @@ -23,12 +23,12 @@ msgid "WebKit invoice" msgstr "facture WebKit" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "Facture fournisseur" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "Prix unitaire" @@ -63,91 +63,91 @@ msgid "Webkit Report Samples" msgstr "Exemples de rapports Webkit" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "Disc.(%)" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "Fax" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "Ref. document" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "Description" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "Prix" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "Date de la facture" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "QTÉ" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "Base" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "Réf. partenaire" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "Impôts" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "Montant" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "TVA" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "Remboursement" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "Tél" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "Courriel" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "Facture" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "Remboursement fournisseur" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "Total" diff --git a/addons/report_webkit_sample/i18n/hu.po b/addons/report_webkit_sample/i18n/hu.po index f46d685afe8..6515766772c 100644 --- a/addons/report_webkit_sample/i18n/hu.po +++ b/addons/report_webkit_sample/i18n/hu.po @@ -22,12 +22,12 @@ msgid "WebKit invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "" @@ -52,91 +52,91 @@ msgid "Webkit Report Samples" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "" diff --git a/addons/report_webkit_sample/i18n/it.po b/addons/report_webkit_sample/i18n/it.po index 876de152b4d..93dfbf37ca2 100644 --- a/addons/report_webkit_sample/i18n/it.po +++ b/addons/report_webkit_sample/i18n/it.po @@ -23,12 +23,12 @@ msgid "WebKit invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "Fattura Fornitore" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "Prezzo unitario" @@ -53,91 +53,91 @@ msgid "Webkit Report Samples" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "Sconto (%)" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "Fax" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "Documento" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "Descrizione" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "Prezzo" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "Data fattura" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "Q.ta" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "Base" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "Rif. Partner" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "Tasse" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "Importo" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "IVA" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "Tel." #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "Email" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "Fattura" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "Totale" diff --git a/addons/report_webkit_sample/i18n/nl.po b/addons/report_webkit_sample/i18n/nl.po index 4268d174904..7db14897851 100644 --- a/addons/report_webkit_sample/i18n/nl.po +++ b/addons/report_webkit_sample/i18n/nl.po @@ -23,12 +23,12 @@ msgid "WebKit invoice" msgstr "WebKit factuur" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "Inkoopfactuur" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "Stuksprijs" @@ -64,91 +64,91 @@ msgid "Webkit Report Samples" msgstr "Webkit overzicht voorbeelden" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "Krt. (%)" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "Fax" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "Document" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "Omschrijving" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "Prijs" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "Factuurdatum" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "AANT" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "Basis" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "Relatie ref." #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "BTW" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "Bedrag" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "BTW" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "Creditnota" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "Tel" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "E-mail" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "Factuur" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "Creditfactuur inkoop" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "Totaal" diff --git a/addons/report_webkit_sample/i18n/pt.po b/addons/report_webkit_sample/i18n/pt.po index 256566369c5..da64345f81c 100644 --- a/addons/report_webkit_sample/i18n/pt.po +++ b/addons/report_webkit_sample/i18n/pt.po @@ -23,12 +23,12 @@ msgid "WebKit invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "Factura de fornecedor" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "Preço unitário" @@ -53,91 +53,91 @@ msgid "Webkit Report Samples" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "Fax" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "Documento" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "Descrição" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "Preço" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "Data da fatura" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "Ref. do parceiro" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "Telefone" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "Fatura" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "Reembolso de Fornecedor" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "Total" diff --git a/addons/report_webkit_sample/i18n/pt_BR.po b/addons/report_webkit_sample/i18n/pt_BR.po index febd7c23bf8..46e3797de2e 100644 --- a/addons/report_webkit_sample/i18n/pt_BR.po +++ b/addons/report_webkit_sample/i18n/pt_BR.po @@ -23,12 +23,12 @@ msgid "WebKit invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "Fatura de Fornecedor" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "Preço Unitário" @@ -53,91 +53,91 @@ msgid "Webkit Report Samples" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "Desc.(%)" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "Fax" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "Documento" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "Descrição" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "Preço" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "" diff --git a/addons/report_webkit_sample/i18n/report_webkit_sample.pot b/addons/report_webkit_sample/i18n/report_webkit_sample.pot index c7e056003b8..a6acd48d0f7 100644 --- a/addons/report_webkit_sample/i18n/report_webkit_sample.pot +++ b/addons/report_webkit_sample/i18n/report_webkit_sample.pot @@ -21,12 +21,12 @@ msgid "WebKit invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:35 +#: report:report.webkitaccount.invoice:35 msgid "Supplier Invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Unit Price" msgstr "" @@ -48,92 +48,92 @@ msgid "Webkit Report Samples" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Disc.(%)" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:22 +#: report:report.webkitaccount.invoice:22 msgid "Fax" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Document" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Description" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Price" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Invoice Date" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "QTY" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Base" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:44 +#: report:report.webkitaccount.invoice:44 msgid "Partner Ref." msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:49 +#: report:report.webkitaccount.invoice:49 msgid "Taxes" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:64 +#: report:report.webkitaccount.invoice:64 msgid "Amount" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:28 +#: report:report.webkitaccount.invoice:28 msgid "VAT" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:37 +#: report:report.webkitaccount.invoice:37 msgid "Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:19 +#: report:report.webkitaccount.invoice:19 msgid "Tel" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:25 +#: report:report.webkitaccount.invoice:25 msgid "E-mail" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:33 +#: report:report.webkitaccount.invoice:33 msgid "Invoice" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:39 +#: report:report.webkitaccount.invoice:39 msgid "Supplier Refund" msgstr "" #. module: report_webkit_sample -#: report:addons/report_webkit_sample/report/report_webkit_html.mako:76 +#: report:report.webkitaccount.invoice:76 msgid "Total" msgstr "" From 8ade69632e43b7c1ea5a33933e39f0de0958ccd8 Mon Sep 17 00:00:00 2001 From: "Amit Bhavsar (Open ERP)" Date: Thu, 19 May 2011 12:02:55 +0530 Subject: [PATCH 017/831] [usability], with project task in calendar view replaced the start date with deadline date bzr revid: amb@tinyerp.com-20110519063255-lao3cufauxk6sfpe --- addons/project/project_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index d3b28c0d562..a2c52d3d85b 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -356,7 +356,7 @@ calendar - + From 26b4bcfde8bb19267189adb8006e6979186dd2c3 Mon Sep 17 00:00:00 2001 From: "Hardik Ansodariy (OpenERP)" Date: Thu, 19 May 2011 12:52:39 +0530 Subject: [PATCH 018/831] [IMP]:point_of_sale:add seprator above point_of_sale's fields bzr revid: han@tinyerp.com-20110519072239-itbv5am3kkfbq5ck --- addons/point_of_sale/point_of_sale_view.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 1f63b6ed382..6c85fbfd9e1 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -654,7 +654,8 @@ form - + + @@ -662,7 +663,7 @@ - + From 42d29b0af67eb4863acb9237a21b2e1c305d22b9 Mon Sep 17 00:00:00 2001 From: "Hardik Ansodariy (OpenERP)" Date: Thu, 19 May 2011 12:56:19 +0530 Subject: [PATCH 019/831] [IMP]:point_of_sale:removed comments bzr revid: han@tinyerp.com-20110519072619-7cd3ln1q0g2fd7y5 --- addons/point_of_sale/point_of_sale_view.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 6c85fbfd9e1..32cc6ba6f03 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -655,7 +655,6 @@ - From 0c0065a913995ac03e5a64e8451aaacc1aa89906 Mon Sep 17 00:00:00 2001 From: "Hardik Ansodariy (OpenERP)" Date: Thu, 19 May 2011 15:53:40 +0530 Subject: [PATCH 020/831] [IMP]:partner, base contact is reset to addresses bzr revid: han@tinyerp.com-20110519102340-jeds70ggm76di2st --- addons/base_contact/base_contact_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_contact/base_contact_view.xml b/addons/base_contact/base_contact_view.xml index 659307e289c..30174e746c3 100644 --- a/addons/base_contact/base_contact_view.xml +++ b/addons/base_contact/base_contact_view.xml @@ -125,7 +125,7 @@ - + + From fca888b1c89e873814ee850859fb65805da43598 Mon Sep 17 00:00:00 2001 From: "Amit Bhavsar (Open ERP)" Date: Thu, 19 May 2011 18:07:47 +0530 Subject: [PATCH 023/831] [usability],change in manu automated action bzr revid: amb@tinyerp.com-20110519123747-ysmde794md2m1esg --- addons/base_action_rule/base_action_rule_view.xml | 6 +++--- addons/process/process_view.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/base_action_rule/base_action_rule_view.xml b/addons/base_action_rule/base_action_rule_view.xml index a9262a6b746..57c862cb2fe 100644 --- a/addons/base_action_rule/base_action_rule_view.xml +++ b/addons/base_action_rule/base_action_rule_view.xml @@ -3,7 +3,7 @@ + parent="base.menu_custom" sequence="3" /> From 184cdbe346e3ed3dc87d4d2baf43e6aa23e8a315 Mon Sep 17 00:00:00 2001 From: "Amit Bhavsar (Open ERP)" Date: Fri, 20 May 2011 11:30:11 +0530 Subject: [PATCH 024/831] [usability],text improvement in outlook module bzr revid: amb@tinyerp.com-20110520060011-prkqbpuon7x4ns3u --- addons/outlook/installer.py | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/addons/outlook/installer.py b/addons/outlook/installer.py index c6947263996..21332551fc2 100644 --- a/addons/outlook/installer.py +++ b/addons/outlook/installer.py @@ -51,21 +51,19 @@ class outlook_installer(osv.osv_memory): 'doc_name' : 'Installation Guide to OpenERP Outlook Plug-in.doc', 'description' : """ * Save the Outlook plug­-in. -* Follows these steps to install outlook plug­in. -Pre-requirements : - 1. Python 2.6+ . - 2. Python for Windows extensions - PyWin32 this module for python must be installed for appropriate version of the Python. - 3.1 If With MS Outlook 2007 it is required to install externally "Collaboration Data Objects, version 1.2.1". - - http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2714320D-C997-4DE1-986F-24F081725D36&displaylang=en - 3.2 With MS Outlook2003 Install inbuilt Collaboration Data Objects(CDO) while installing Outlook. +* steps to install outlook plug­in. + Required : + 1. Python 2.6+ . + 2. Python for Windows extensions - PyWin32 this module for python must be installed for appropriate version of the Python. + 3.1 With MS Outlook 2007, install externally "Collaboration Data Objects, version 1.2.1". - http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2714320D-C997-4DE1-986F-24F081725D36&displaylang=en + 3.2 With MS Outlook2003 Install inbuilt Collaboration Data Objects(CDO) while installing Outlook. -How to install openerp-outlook plug-in? - 1. Save the executable plug-in file. - 2. Close Outlook Application if Running. - 3. Run executable plug-in file and the folllow the instruction. - -Note : - Please refer README file for dependecies external link, openobject-addons/outlook/README. + * install openerp-outlook plug-in? + 1. Save the executable plug-in file. + 2. Close Outlook Application if Running. + 3. Run executable plug-in file and folllow the instruction. + * Note : + Please refer README file for dependecies external link, openobject-addons/outlook/README. """ } outlook_installer() From a1135313a6a2c97cb64bfa6111b6453bae65f385 Mon Sep 17 00:00:00 2001 From: skh Date: Fri, 20 May 2011 13:05:20 +0530 Subject: [PATCH 025/831] [FIX] Product: name_search() corrected while duplicating ids in sale_order_line (Ref : Case 5861) bzr revid: skh@tinyerp.com-20110520073520-5abu4xp34x74dhxu --- addons/product/product.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/product/product.py b/addons/product/product.py index f82e5791fd7..b566ac681e9 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -563,8 +563,7 @@ class product_product(osv.osv): if not len(ids): ids = self.search(cr, user, [('ean13','=',name)]+ args, limit=limit, context=context) if not len(ids): - ids = self.search(cr, user, [('default_code',operator,name)]+ args, limit=limit, context=context) - ids += self.search(cr, user, [('name',operator,name)]+ args, limit=limit, context=context) + ids = self.search(cr, user, ['|',('name',operator,name),('default_code',operator,name)] + args, limit=limit, context=context) if not len(ids): ptrn=re.compile('(\[(.*?)\])') res = ptrn.search(name) From 601a0799ca55d6a38955fc8a53f0c7784aacc7ce Mon Sep 17 00:00:00 2001 From: "Amit Bhavsar (Open ERP)" Date: Fri, 20 May 2011 14:10:37 +0530 Subject: [PATCH 026/831] [usability],improve text with thunderbird module bzr revid: amb@tinyerp.com-20110520084037-44s4vus359ezxpqf --- addons/thunderbird/installer.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/addons/thunderbird/installer.py b/addons/thunderbird/installer.py index ef8fc2fced4..943e97ede9f 100644 --- a/addons/thunderbird/installer.py +++ b/addons/thunderbird/installer.py @@ -52,19 +52,19 @@ class thunderbird_installer(osv.osv_memory): 'name' : 'openerp_plugin.xpi', 'description' : """ * Save the Thunderbird plug-­in. - * Follow these steps to install Thunderbird plug-­in. - 1. From Menu Bar of Thunderbird, open Tools ­> Add-ons. - 2. Click "Install" button. - 3. Select the plug-in(openerp_plugin.xpi file) - 5. Click "Install Now". - 6. Restart Thunderbird. - * Follow the steps to configure OpenERP in Thunderbird. - 1. Go to Tools > OpenERP Configuration. - 2. Check data (configured by default). - 3. Click "Connect". - 4. A message appears with the state of your connection. - 5. If your connection failed, check if your database is opened, and check data again. - 6. If your database is connected successfully, you can start to archive your e-mail in OpenERP. """ + * Steps to install Thunderbird plug-­in. + 1. From Menu Bar of Thunderbird, open Tools ­> Add-ons. + 2. Click "Install" + 3. Select the plug-in (openerp_plugin.xpi file) + 5. Click "Install Now". + 6. Restart Thunderbird. + * Steps to configure OpenERP in Thunderbird. + 1. Go to Tools > OpenERP Configuration. + 2. Check data (configured by default). + 3. Click "Connect". + 4. A message appears with the state of your connection. + 5. If your connection failed, check if your database is opened, and check data again. + 6. If database is connected successfully, start to archive e-mails in OpenERP. """ } thunderbird_installer() From 7c3c8956311289317bb858c3240c30d82b0963b0 Mon Sep 17 00:00:00 2001 From: "Amit (OpenERP)" Date: Fri, 20 May 2011 15:46:07 +0530 Subject: [PATCH 027/831] [IMP]:point_of_sale: Added two products in the module data : - "Cash In" with field "Product for Input" set (it must appear in Point of Sale / Configuration / Products for Input Operations) - "Cash Out" with field "Product for expenses" set (it must appear in Point of Sale / Configuration / Products for Output Operations) Rename the fields: - income_pdt as "Product for Input Operation" - expense_pdt as "Product for Output Operation" In Journal view (Accounting/Configuration/Financial Accounting/ Journals/Journals): - Changed the label "Users" to "POS Users. - Fixed separator label "Extended Configureation" -> "Extended Configuration. - In demo data, the journal type "Cash" should have field check_dtls set. - Renamed "check details" into "Check Cash Balance." bzr revid: apa@tinyerp.com-20110520101607-5ilo2t7zna392s63 --- .../point_of_sale/account_statement_demo.xml | 3 +++ .../point_of_sale/account_statement_view.xml | 6 +++--- addons/point_of_sale/point_of_sale_demo.xml | 18 ++++++++++++++++++ addons/point_of_sale/point_of_sale_view.xml | 4 ++-- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/addons/point_of_sale/account_statement_demo.xml b/addons/point_of_sale/account_statement_demo.xml index c4850ded0a3..7cdbbf99596 100644 --- a/addons/point_of_sale/account_statement_demo.xml +++ b/addons/point_of_sale/account_statement_demo.xml @@ -5,6 +5,7 @@ Visa Journal VIJ cash + @@ -30,6 +31,7 @@ Bancontact Journal BACJ cash + @@ -68,6 +70,7 @@ + diff --git a/addons/point_of_sale/account_statement_view.xml b/addons/point_of_sale/account_statement_view.xml index 2b09639588b..45f89c5062c 100644 --- a/addons/point_of_sale/account_statement_view.xml +++ b/addons/point_of_sale/account_statement_view.xml @@ -10,12 +10,12 @@ - - + + - + diff --git a/addons/point_of_sale/point_of_sale_demo.xml b/addons/point_of_sale/point_of_sale_demo.xml index b022bd86693..e95ce05256f 100644 --- a/addons/point_of_sale/point_of_sale_demo.xml +++ b/addons/point_of_sale/point_of_sale_demo.xml @@ -7,6 +7,24 @@ + + + buy + + Cash In + + Cash In + + + + + buy + + Cash Out + + Cash Out + + POS/019 diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index bf21eca349f..e08ec7cbaf9 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -657,8 +657,8 @@ - - + + From b25bf17013565154b4c4e65cd28747d03048735a Mon Sep 17 00:00:00 2001 From: "Tejas (OpenERP)" Date: Mon, 23 May 2011 12:55:24 +0530 Subject: [PATCH 028/831] [usability] purchase improvement , added picking to invoice bzr revid: tta@openerp.com-20110523072524-1sid4yhe9u1dqt9m --- addons/purchase/stock_view.xml | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/addons/purchase/stock_view.xml b/addons/purchase/stock_view.xml index a65f557a3b2..fff91c4e627 100644 --- a/addons/purchase/stock_view.xml +++ b/addons/purchase/stock_view.xml @@ -57,5 +57,62 @@ + + + + stock.picking.in.search + stock.picking + search + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Picking to Invoice + stock.picking + ir.actions.act_window + form + tree,form,calendar + [('type','=','in')] + + {"search_default_done":1,"search_default_to_invoice":1} + + + + Create invoice from picking. If you selected this invoice method in the purchase order, all reception done are available here to be invoiced. + + + + From 44a6af1f4ee1fbb30ead1ddf4ca52c29c3c46280 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Mon, 23 May 2011 10:56:25 +0200 Subject: [PATCH 029/831] [FIX] in POS, rename all 'Product for expenses' into 'Product for Output' bzr revid: rco@openerp.com-20110523085625-t1r3k84umw3u31ww --- addons/point_of_sale/i18n/ar.po | 2 +- addons/point_of_sale/i18n/bg.po | 2 +- addons/point_of_sale/i18n/bs.po | 2 +- addons/point_of_sale/i18n/ca.po | 2 +- addons/point_of_sale/i18n/cs.po | 2 +- addons/point_of_sale/i18n/da.po | 2 +- addons/point_of_sale/i18n/de.po | 2 +- addons/point_of_sale/i18n/el.po | 2 +- addons/point_of_sale/i18n/es.po | 2 +- addons/point_of_sale/i18n/es_AR.po | 2 +- addons/point_of_sale/i18n/es_EC.po | 4 ++-- addons/point_of_sale/i18n/et.po | 2 +- addons/point_of_sale/i18n/fi.po | 2 +- addons/point_of_sale/i18n/fr.po | 2 +- addons/point_of_sale/i18n/hi.po | 2 +- addons/point_of_sale/i18n/hr.po | 2 +- addons/point_of_sale/i18n/hu.po | 2 +- addons/point_of_sale/i18n/id.po | 2 +- addons/point_of_sale/i18n/it.po | 2 +- addons/point_of_sale/i18n/ko.po | 2 +- addons/point_of_sale/i18n/lt.po | 2 +- addons/point_of_sale/i18n/mn.po | 2 +- addons/point_of_sale/i18n/nl.po | 2 +- addons/point_of_sale/i18n/nl_BE.po | 2 +- addons/point_of_sale/i18n/pl.po | 2 +- addons/point_of_sale/i18n/point_of_sale.pot | 2 +- addons/point_of_sale/i18n/pt.po | 2 +- addons/point_of_sale/i18n/pt_BR.po | 2 +- addons/point_of_sale/i18n/ro.po | 2 +- addons/point_of_sale/i18n/ru.po | 2 +- addons/point_of_sale/i18n/sl.po | 2 +- addons/point_of_sale/i18n/sq.po | 2 +- addons/point_of_sale/i18n/sr.po | 2 +- addons/point_of_sale/i18n/sr@latin.po | 2 +- addons/point_of_sale/i18n/sv.po | 2 +- addons/point_of_sale/i18n/tlh.po | 2 +- addons/point_of_sale/i18n/tr.po | 2 +- addons/point_of_sale/i18n/uk.po | 2 +- addons/point_of_sale/i18n/vi.po | 2 +- addons/point_of_sale/i18n/zh_CN.po | 2 +- addons/point_of_sale/i18n/zh_HK.po | 2 +- addons/point_of_sale/i18n/zh_TW.po | 2 +- addons/point_of_sale/point_of_sale.py | 2 +- 43 files changed, 44 insertions(+), 44 deletions(-) diff --git a/addons/point_of_sale/i18n/ar.po b/addons/point_of_sale/i18n/ar.po index 9e123debacc..b51c591718e 100644 --- a/addons/point_of_sale/i18n/ar.po +++ b/addons/point_of_sale/i18n/ar.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/bg.po b/addons/point_of_sale/i18n/bg.po index a013c85335d..1b96cb6a671 100644 --- a/addons/point_of_sale/i18n/bg.po +++ b/addons/point_of_sale/i18n/bg.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/bs.po b/addons/point_of_sale/i18n/bs.po index 7a704f6f381..feca51685c8 100644 --- a/addons/point_of_sale/i18n/bs.po +++ b/addons/point_of_sale/i18n/bs.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/ca.po b/addons/point_of_sale/i18n/ca.po index c7e564988ad..e67ad396923 100644 --- a/addons/point_of_sale/i18n/ca.po +++ b/addons/point_of_sale/i18n/ca.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/cs.po b/addons/point_of_sale/i18n/cs.po index 3d378e19bd2..6572c211ff4 100644 --- a/addons/point_of_sale/i18n/cs.po +++ b/addons/point_of_sale/i18n/cs.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/da.po b/addons/point_of_sale/i18n/da.po index 50d77c82e79..5d826a9ce85 100644 --- a/addons/point_of_sale/i18n/da.po +++ b/addons/point_of_sale/i18n/da.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/de.po b/addons/point_of_sale/i18n/de.po index 59e772f8cb4..4d29f3ae7bb 100644 --- a/addons/point_of_sale/i18n/de.po +++ b/addons/point_of_sale/i18n/de.po @@ -778,7 +778,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "Produkt für Ausgaben" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/el.po b/addons/point_of_sale/i18n/el.po index a2ce1c4beed..639edf9dd3a 100644 --- a/addons/point_of_sale/i18n/el.po +++ b/addons/point_of_sale/i18n/el.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/es.po b/addons/point_of_sale/i18n/es.po index 0f02805713f..de505a2b245 100644 --- a/addons/point_of_sale/i18n/es.po +++ b/addons/point_of_sale/i18n/es.po @@ -778,7 +778,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "Producto para gastos" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/es_AR.po b/addons/point_of_sale/i18n/es_AR.po index 44f81e309aa..ea0e6cd29aa 100644 --- a/addons/point_of_sale/i18n/es_AR.po +++ b/addons/point_of_sale/i18n/es_AR.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/es_EC.po b/addons/point_of_sale/i18n/es_EC.po index 0abeddfbfff..d0258d26334 100644 --- a/addons/point_of_sale/i18n/es_EC.po +++ b/addons/point_of_sale/i18n/es_EC.po @@ -777,8 +777,8 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" -msgstr "Product for expenses" +msgid "Product for Output" +msgstr "Product for Output" #. module: point_of_sale #: model:ir.actions.act_window,name:point_of_sale.action_report_pos_sales_user_today_current_user diff --git a/addons/point_of_sale/i18n/et.po b/addons/point_of_sale/i18n/et.po index b337178faa3..ad1de47d48b 100644 --- a/addons/point_of_sale/i18n/et.po +++ b/addons/point_of_sale/i18n/et.po @@ -774,7 +774,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/fi.po b/addons/point_of_sale/i18n/fi.po index 05261c37364..9d9b3aa8ba2 100644 --- a/addons/point_of_sale/i18n/fi.po +++ b/addons/point_of_sale/i18n/fi.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/fr.po b/addons/point_of_sale/i18n/fr.po index 79287926ac9..c98b071164d 100644 --- a/addons/point_of_sale/i18n/fr.po +++ b/addons/point_of_sale/i18n/fr.po @@ -780,7 +780,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "Produits pour Sortie de Caisse" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/hi.po b/addons/point_of_sale/i18n/hi.po index 03a905d7cb8..fe1aa7b0671 100644 --- a/addons/point_of_sale/i18n/hi.po +++ b/addons/point_of_sale/i18n/hi.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/hr.po b/addons/point_of_sale/i18n/hr.po index abb2fdb1054..18196580bed 100644 --- a/addons/point_of_sale/i18n/hr.po +++ b/addons/point_of_sale/i18n/hr.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/hu.po b/addons/point_of_sale/i18n/hu.po index 16bd5c42fec..47e1947d562 100644 --- a/addons/point_of_sale/i18n/hu.po +++ b/addons/point_of_sale/i18n/hu.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/id.po b/addons/point_of_sale/i18n/id.po index 5c5db29269a..cd444e5c830 100644 --- a/addons/point_of_sale/i18n/id.po +++ b/addons/point_of_sale/i18n/id.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/it.po b/addons/point_of_sale/i18n/it.po index e978536e1c0..803a569482b 100644 --- a/addons/point_of_sale/i18n/it.po +++ b/addons/point_of_sale/i18n/it.po @@ -778,7 +778,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "Prodotto per spese" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/ko.po b/addons/point_of_sale/i18n/ko.po index 52c56982b36..0bad0a5c2ab 100644 --- a/addons/point_of_sale/i18n/ko.po +++ b/addons/point_of_sale/i18n/ko.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/lt.po b/addons/point_of_sale/i18n/lt.po index 8d5faeb01c7..a5e452458a4 100644 --- a/addons/point_of_sale/i18n/lt.po +++ b/addons/point_of_sale/i18n/lt.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/mn.po b/addons/point_of_sale/i18n/mn.po index 162ca31703d..9bd79ac9cbf 100644 --- a/addons/point_of_sale/i18n/mn.po +++ b/addons/point_of_sale/i18n/mn.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/nl.po b/addons/point_of_sale/i18n/nl.po index 05814df59e4..d7dd3e5ba65 100644 --- a/addons/point_of_sale/i18n/nl.po +++ b/addons/point_of_sale/i18n/nl.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/nl_BE.po b/addons/point_of_sale/i18n/nl_BE.po index f9b0fbe4e97..3d7f392cb2b 100644 --- a/addons/point_of_sale/i18n/nl_BE.po +++ b/addons/point_of_sale/i18n/nl_BE.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/pl.po b/addons/point_of_sale/i18n/pl.po index 323efb6f2b4..aff595ac16a 100644 --- a/addons/point_of_sale/i18n/pl.po +++ b/addons/point_of_sale/i18n/pl.po @@ -772,7 +772,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/point_of_sale.pot b/addons/point_of_sale/i18n/point_of_sale.pot index e4dcfccbe50..d9fb20dccbb 100644 --- a/addons/point_of_sale/i18n/point_of_sale.pot +++ b/addons/point_of_sale/i18n/point_of_sale.pot @@ -793,7 +793,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/pt.po b/addons/point_of_sale/i18n/pt.po index f7857c6568b..ea2d62aa43b 100644 --- a/addons/point_of_sale/i18n/pt.po +++ b/addons/point_of_sale/i18n/pt.po @@ -774,7 +774,7 @@ msgstr "O montante do vale deve ser o mesmo que o da linha do extracto" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "Produto para despesas" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/pt_BR.po b/addons/point_of_sale/i18n/pt_BR.po index 4aba5f89473..bf2472cd7bf 100644 --- a/addons/point_of_sale/i18n/pt_BR.po +++ b/addons/point_of_sale/i18n/pt_BR.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "Produto para Despesas" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/ro.po b/addons/point_of_sale/i18n/ro.po index 4e1629bbc55..b9a9c4bcbea 100644 --- a/addons/point_of_sale/i18n/ro.po +++ b/addons/point_of_sale/i18n/ro.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/ru.po b/addons/point_of_sale/i18n/ru.po index 50fe81005c5..6d119a7d14d 100644 --- a/addons/point_of_sale/i18n/ru.po +++ b/addons/point_of_sale/i18n/ru.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/sl.po b/addons/point_of_sale/i18n/sl.po index 19ddfbc1d79..f0d246e826e 100644 --- a/addons/point_of_sale/i18n/sl.po +++ b/addons/point_of_sale/i18n/sl.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/sq.po b/addons/point_of_sale/i18n/sq.po index a359cfd3088..072137798d9 100644 --- a/addons/point_of_sale/i18n/sq.po +++ b/addons/point_of_sale/i18n/sq.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/sr.po b/addons/point_of_sale/i18n/sr.po index 28b674dfdd7..d3246cf3262 100644 --- a/addons/point_of_sale/i18n/sr.po +++ b/addons/point_of_sale/i18n/sr.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "Proizvodi za Troskove" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/sr@latin.po b/addons/point_of_sale/i18n/sr@latin.po index c52da341fa9..250c8ee3580 100644 --- a/addons/point_of_sale/i18n/sr@latin.po +++ b/addons/point_of_sale/i18n/sr@latin.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "Proizvodi za Troskove" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/sv.po b/addons/point_of_sale/i18n/sv.po index 5801d102015..2fd7656fa66 100644 --- a/addons/point_of_sale/i18n/sv.po +++ b/addons/point_of_sale/i18n/sv.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/tlh.po b/addons/point_of_sale/i18n/tlh.po index 52563a6c3f7..e2bfba37d81 100644 --- a/addons/point_of_sale/i18n/tlh.po +++ b/addons/point_of_sale/i18n/tlh.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/tr.po b/addons/point_of_sale/i18n/tr.po index 79f1801e7a6..683103d47e6 100644 --- a/addons/point_of_sale/i18n/tr.po +++ b/addons/point_of_sale/i18n/tr.po @@ -806,7 +806,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/uk.po b/addons/point_of_sale/i18n/uk.po index 28508a5c583..c0c1dbe6bcd 100644 --- a/addons/point_of_sale/i18n/uk.po +++ b/addons/point_of_sale/i18n/uk.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/vi.po b/addons/point_of_sale/i18n/vi.po index be5a240147e..d67353905fd 100644 --- a/addons/point_of_sale/i18n/vi.po +++ b/addons/point_of_sale/i18n/vi.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/zh_CN.po b/addons/point_of_sale/i18n/zh_CN.po index 450b2a6b160..e3a3804294a 100644 --- a/addons/point_of_sale/i18n/zh_CN.po +++ b/addons/point_of_sale/i18n/zh_CN.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/zh_HK.po b/addons/point_of_sale/i18n/zh_HK.po index 1f3b56d7bcf..cbe4d6e10f6 100644 --- a/addons/point_of_sale/i18n/zh_HK.po +++ b/addons/point_of_sale/i18n/zh_HK.po @@ -769,7 +769,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/i18n/zh_TW.po b/addons/point_of_sale/i18n/zh_TW.po index d407a999d9e..e4f64e6fb10 100644 --- a/addons/point_of_sale/i18n/zh_TW.po +++ b/addons/point_of_sale/i18n/zh_TW.po @@ -768,7 +768,7 @@ msgstr "" #. module: point_of_sale #: field:product.product,expense_pdt:0 -msgid "Product for expenses" +msgid "Product for Output" msgstr "" #. module: point_of_sale diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 4eeb7b2dd9f..1f4df6e482f 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -1231,7 +1231,7 @@ class product_product(osv.osv): _inherit = 'product.product' _columns = { 'income_pdt': fields.boolean('Product for Input'), - 'expense_pdt': fields.boolean('Product for expenses'), + 'expense_pdt': fields.boolean('Product for Output'), 'am_out': fields.boolean('Control for Output Operations'), 'disc_controle': fields.boolean('Discount Control'), } From 7dcc7ce82812562e1d7109344bf4efacfb9aa329 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Mon, 23 May 2011 11:06:56 +0200 Subject: [PATCH 030/831] [IMP] remove unused modules bzr revid: rco@openerp.com-20110523090656-qfuk3rquictzlprj --- addons/thunderbird/installer.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/thunderbird/installer.py b/addons/thunderbird/installer.py index 69644f55579..5bf11218842 100644 --- a/addons/thunderbird/installer.py +++ b/addons/thunderbird/installer.py @@ -21,11 +21,9 @@ from osv import fields from osv import osv -from tools import config import base64 import addons -import difflib class thunderbird_installer(osv.osv_memory): _name = 'thunderbird.installer' From e9581423e2410a070d28baa1f702a439219036b8 Mon Sep 17 00:00:00 2001 From: "Ravi Gohil (Open ERP)" Date: Mon, 23 May 2011 15:07:11 +0530 Subject: [PATCH 031/831] [FIX] stock : lambda missing with dates in _defaults fixed lp bug: https://launchpad.net/bugs/761460 fixed bzr revid: rgo@tinyerp.com-20110523093711-wjujxn7kf7qm9goy --- addons/stock/stock.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 5591b0e6333..99ee5e4de7f 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -440,7 +440,7 @@ class stock_location(osv.osv): total = 0.0 results2 = 0.0 - + for r in results: amount = pool_uom._compute_qty(cr, uid, r['product_uom'], r['product_qty'], context.get('uom', False)) results2 += amount @@ -494,7 +494,7 @@ class stock_tracking(osv.osv): _defaults = { 'active': 1, 'name': make_sscc, - 'date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), } def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100): @@ -657,7 +657,7 @@ class stock_picking(osv.osv): 'move_type': 'direct', 'type': 'in', 'invoice_state': 'none', - 'date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.picking', context=c) } def action_process(self, cr, uid, ids, context=None): @@ -1413,7 +1413,7 @@ class stock_production_lot(osv.osv): 'move_ids': fields.one2many('stock.move', 'prodlot_id', 'Moves for this production lot', readonly=True), } _defaults = { - 'date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), 'name': lambda x, y, z, c: x.pool.get('ir.sequence').get(y, z, 'stock.lot.serial'), 'product_id': lambda x, y, z, c: c.get('product_id', False), } @@ -1449,7 +1449,7 @@ class stock_production_lot_revision(osv.osv): _defaults = { 'author_id': lambda x, y, z, c: z, - 'date': time.strftime('%Y-%m-%d'), + 'date': lambda *a: time.strftime('%Y-%m-%d'), } stock_production_lot_revision() @@ -1614,9 +1614,9 @@ class stock_move(osv.osv): 'priority': '1', 'product_qty': 1.0, 'scrapped' : False, - 'date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.move', context=c), - 'date_expected': time.strftime('%Y-%m-%d %H:%M:%S'), + 'date_expected': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), } def write(self, cr, uid, ids, vals, context=None): @@ -2257,7 +2257,7 @@ class stock_move(osv.osv): new_move = self.copy(cr, uid, move.id, default_val) res += [new_move] - + for (id, name) in product_obj.name_get(cr, uid, [move.product_id.id]): self.log(cr, uid, move.id, "%s x %s %s" % (move.product_qty, name, _("were scrapped"))) @@ -2527,7 +2527,7 @@ class stock_inventory(osv.osv): } _defaults = { - 'date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), 'state': 'draft', 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c) } From fe75955b1c30bc8f9e6c48849518667f71f87b6d Mon Sep 17 00:00:00 2001 From: "Ravi Gohil (Open ERP)" Date: Mon, 23 May 2011 15:19:40 +0530 Subject: [PATCH 032/831] [FIX] crm : missing partner information while schedule phone call is fixed lp bug: https://launchpad.net/bugs/777347 fixed bzr revid: rgo@tinyerp.com-20110523094940-q1p8amsjr05qup4t --- addons/crm/crm_phonecall_menu.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/crm/crm_phonecall_menu.xml b/addons/crm/crm_phonecall_menu.xml index f223ee16be9..cfaf5720cb1 100644 --- a/addons/crm/crm_phonecall_menu.xml +++ b/addons/crm/crm_phonecall_menu.xml @@ -9,6 +9,7 @@ src_model="res.partner" view_mode="calendar,tree,form" context="{'search_default_partner_id': [active_id], 'default_duration': 1.0}" + domain="[('partner_id', '=', active_id)]" groups="base.group_extended" /> From ac86286670637e1af8e2702cf39eb81099d8aa8e Mon Sep 17 00:00:00 2001 From: "Ravi Gohil (Open ERP)" Date: Mon, 23 May 2011 15:43:58 +0530 Subject: [PATCH 033/831] [FIX] stock : correct value in field creation date of stock_inventory object lp bug: https://launchpad.net/bugs/783361 fixed bzr revid: rgo@tinyerp.com-20110523101358-1z9az90dqss9weye --- addons/stock/stock.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 5591b0e6333..f97d7d202af 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -2527,7 +2527,7 @@ class stock_inventory(osv.osv): } _defaults = { - 'date': time.strftime('%Y-%m-%d %H:%M:%S'), + 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'), 'state': 'draft', 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c) } From 4a71ddbb1b105d3834542932b6723210d58f3eb3 Mon Sep 17 00:00:00 2001 From: "Tejas (OpenERP)" Date: Tue, 24 May 2011 14:43:58 +0530 Subject: [PATCH 034/831] [usability] in user form : department, sales team and project should be on the same level. bzr revid: tta@openerp.com-20110524091358-0dwzrnr8jc7zwjbs --- addons/hr/hr_department_view.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/addons/hr/hr_department_view.xml b/addons/hr/hr_department_view.xml index 08fa5e0d7d8..fe6f75244ef 100644 --- a/addons/hr/hr_department_view.xml +++ b/addons/hr/hr_department_view.xml @@ -71,11 +71,9 @@ res.users - - + - - + From 26d26a234b3ff66cb0dfd209ef4f491a8b2e3818 Mon Sep 17 00:00:00 2001 From: "Hardik Ansodariy (OpenERP)" Date: Tue, 24 May 2011 18:27:03 +0530 Subject: [PATCH 035/831] [IMP]:hr_evaluation:i have add two data in this module 1)Employee Evaluation 2)job Survey bzr revid: han@tinyerp.com-20110524125703-6nt9o8hgckwh2c6i --- addons/hr_evaluation/__openerp__.py | 3 +- addons/hr_evaluation/hr_evaluation_data.xml | 597 ++++++++++++++ addons/hr_evaluation/hr_evaluation_demo.xml | 772 ------------------ addons/hr_recruitment/hr_recruitment_data.xml | 372 +++++++++ addons/hr_recruitment/hr_recruitment_demo.xml | 437 ---------- addons/survey/survey_data.xml | 15 +- addons/survey/survey_demo.xml | 4 +- 7 files changed, 986 insertions(+), 1214 deletions(-) create mode 100644 addons/hr_evaluation/hr_evaluation_data.xml diff --git a/addons/hr_evaluation/__openerp__.py b/addons/hr_evaluation/__openerp__.py index 1a611768d7e..3e45d38156e 100644 --- a/addons/hr_evaluation/__openerp__.py +++ b/addons/hr_evaluation/__openerp__.py @@ -47,7 +47,8 @@ in the form of pdf file. Implements a dashboard for My Current Evaluations "wizard/hr_evaluation_mail_view.xml", "hr_evaluation_view.xml", "report/hr_evaluation_report_view.xml", - "board_hr_evaluation_view.xml" + "board_hr_evaluation_view.xml", + "hr_evaluation_data.xml" ], "test": ["test/test_hr_evaluation.yml"], "active": False, diff --git a/addons/hr_evaluation/hr_evaluation_data.xml b/addons/hr_evaluation/hr_evaluation_data.xml new file mode 100644 index 00000000000..769522e876b --- /dev/null +++ b/addons/hr_evaluation/hr_evaluation_data.xml @@ -0,0 +1,597 @@ + + + + + Employee Evaluation + 20 + + + + 5 + open + + + Employee Evaluation Form + + + + + Work Plan + + + + + Employee Performance In Key Areas + + + The appraiser should rate the employee’s major work accomplishments and performance according to the metric provided below : + 1 - Significantly exceeds standards and expectations required of the position + 2 - Exceeds standards and expectations + 3 - Meet standards and expectations + 4 - Did not meet standards and expectations + 5 - Significantly below standards and expectations + + + Professional Development And Performance Plan (optional) + + + Identify professional, performance, or project objectives you recommend for employee’s continued career development over the coming year. + + + Employee Comments + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Employee Information + + multiple_textboxes_diff_type + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Overall Purpose Of Employee Appraisal + + descriptive_text + The comment you entered is in an invalid format. + * To initiate a clear and open communication of performance expectations + +* To assist employees in their professional growth, through the identification of strengths and opportunities for development + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + At the outset of the appraisal time period + + descriptive_text + The comment you entered is in an invalid format. + * It is the joint responsibility of the employee and the supervisor (appraiser) to establish a feasible work plan for the coming year, including major employee responsibilities and corresponding benchmarks against which results will be evaluated. +* Critical or key elements of performance and professional development needs (if any), should also be noted at this time + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + At the conclusion of the appraisal time period + + descriptive_text + The comment you entered is in an invalid format. + * The employee will be responsible for completing a draft of the Appraisal Form as a tool for self-evaluation and a starting point for the supervisor’s evaluation. The employee can add examples of achievements for each criterion. +Once the form had been filled, the employee send it to his supervisor. + +* It is the primary responsibility of the supervisor to gather the necessary input from the appropriate sources of feedback (internal and/or external customers, peers). In case of collaboration with OpenERP SA Belgium, the supervisor must receive completed evaluation form from the employee's Belgian project manager. + +* The supervisor synthesizes and integrates all input into the completed appraisal. He motivates his evaluation in the ad hoc fields. + +* The employee may choose to offer comments or explanation regarding the completed review. + +* The supervisor send the form to the HR department in India and in Belgium. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Work Plan + + table + The comment you entered is in an invalid format. + + + + Other + + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Additional comments : + + comment + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Subject + + matrix_of_choices_only_one_ans + Recommendations / Evaluations + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Supervisors only : + + matrix_of_choices_only_one_ans + Recommendations / Evaluations + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Overall Performance Summary Rating + + descriptive_text + The comment you entered is in an invalid format. + including the project evaluation form (if any) + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Professional Development Objectives + + comment + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Personal Performance Objectives + + comment + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Project Objectives + + comment + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Use the following space to make any comments regarding the above performance evaluation. + + comment + The comment you entered is in an invalid format. + + + + Other + + + + + Name + + char + + + + Position Title + + char + + + + Appraisal for Period + + char + + + + Date of Review + + datetime + + + + Appraiser + + char + + + + Title + + char + + + + 1 + 1 + 1 + + + + 1 + 1 + 2 + + + + 1 + 1 + 3 + + + + 1 + 1 + 4 + + + + 1 + 1 + 5 + + + + 1 + Ability to cope with multidisciplinary of team + + + + + 1 + Enthusiasm & implication toward projects/assignments + + + + + 1 + Compliance to internal rules and processes (timesheets completion, etc.) + + + + + 1 + Team spirit : ability to work efficiently with peers, manage the conflicts with diplomacy + + + + + 1 + Initiative and self autonomy + + + + + 1 + Ability to follow and complete work as instructed + + + + + 1 + Decision making + + + + + 1 + Customer commitment + + + + + 1 + Communication skills ( written & verbally): clearness, concision, exactitude + + + + + 1 + Technical skills regarding to the job requirements + + + + + 1 + Analytical and synthetic mind + + + + + 1 + Promptness and attendance record + + + + + 1 + Adaptability : Ability to adapt oneself to organizational changes while keeping efficiency + + + + + 1 + Creativity and forward looking aptitude + + + + + 1 + Time management : projects/tasks are completed on time + + + + + 1 + 1 + 1 + + + + 1 + 1 + 2 + + + + 1 + 1 + 3 + + + + 1 + 1 + 4 + + + + 1 + 1 + 5 + + + + 1 + Results of the bottom-up survey and mitigation actions to face technical, organizational, structural and/or relational issues + + + + + 1 + Delegation : Ability to efficiently assign tasks to other people + + + + + 1 + Leadership: create a challenging and motivating work environment aligned with the company's strategy + + + + + 1 + Leadership: sustain subordinates in their professional growth + + + + + 1 + Ability to manage planning resources, risks, budgets and deadlines + + + + + 1 + 1 + Objectives + + + + 1 + 1 + Results + + + + 1 + 1 + Comments + + + + 1 + At the conclusion of the appraisal time period: + + + + + 1 + At the outset of the appraisal time period: + + + + + diff --git a/addons/hr_evaluation/hr_evaluation_demo.xml b/addons/hr_evaluation/hr_evaluation_demo.xml index 59396717d49..a7be585272f 100644 --- a/addons/hr_evaluation/hr_evaluation_demo.xml +++ b/addons/hr_evaluation/hr_evaluation_demo.xml @@ -1,17 +1,5 @@ - - - - Employee Evaluation - 20 - - - - 5 - open - - @@ -24,14 +12,6 @@ - - - Employee Evaluation Form - - - - - Process @@ -40,45 +20,6 @@ - - - Work Plan - - - - - - - - Employee Performance In Key Areas - - - The appraiser should rate the employee’s major work accomplishments and performance according to the metric provided below : - 1 - Significantly exceeds standards and expectations required of the position - 2 - Exceeds standards and expectations - 3 - Meet standards and expectations - 4 - Did not meet standards and expectations - 5 - Significantly below standards and expectations - - - - - - Professional Development And Performance Plan (optional) - - - Identify professional, performance, or project objectives you recommend for employee’s continued career development over the coming year. - - - - - - Employee Comments - - - - - Survey @@ -112,31 +53,6 @@ - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Employee Information - - multiple_textboxes_diff_type - The comment you entered is in an invalid format. - - - - Other - - - - - 1 @@ -162,32 +78,6 @@ - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Subject - - matrix_of_choices_only_one_ans - Recommendations / Evaluations - The comment you entered is in an invalid format. - - - - Other - - - - - 1 @@ -213,58 +103,6 @@ - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Supervisors only : - - matrix_of_choices_only_one_ans - Recommendations / Evaluations - The comment you entered is in an invalid format. - - - - Other - - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Work Plan - - table - The comment you entered is in an invalid format. - - - - Other - - - - - - 1 @@ -315,31 +153,6 @@ - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Additional comments : - - comment - The comment you entered is in an invalid format. - - - - Other - - - - - 1 @@ -365,60 +178,6 @@ - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Overall Performance Summary Rating - - descriptive_text - The comment you entered is in an invalid format. - including the project evaluation form (if any) - - - - Other - - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Overall Purpose Of Employee Appraisal - - descriptive_text - The comment you entered is in an invalid format. - * To initiate a clear and open communication of performance expectations - -* To assist employees in their professional growth, through the identification of strengths and opportunities for development - - - - Other - - - - - 1 @@ -469,68 +228,6 @@ - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - At the outset of the appraisal time period - - descriptive_text - The comment you entered is in an invalid format. - * It is the joint responsibility of the employee and the supervisor (appraiser) to establish a feasible work plan for the coming year, including major employee responsibilities and corresponding benchmarks against which results will be evaluated. -* Critical or key elements of performance and professional development needs (if any), should also be noted at this time - - - - Other - - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - At the conclusion of the appraisal time period - - descriptive_text - The comment you entered is in an invalid format. - * The employee will be responsible for completing a draft of the Appraisal Form as a tool for self-evaluation and a starting point for the supervisor’s evaluation. The employee can add examples of achievements for each criterion. -Once the form had been filled, the employee send it to his supervisor. - -* It is the primary responsibility of the supervisor to gather the necessary input from the appropriate sources of feedback (internal and/or external customers, peers). In case of collaboration with OpenERP SA Belgium, the supervisor must receive completed evaluation form from the employee's Belgian project manager. - -* The supervisor synthesizes and integrates all input into the completed appraisal. He motivates his evaluation in the ad hoc fields. - -* The employee may choose to offer comments or explanation regarding the completed review. - -* The supervisor send the form to the HR department in India and in Belgium. - - - - Other - - - - - 1 @@ -566,197 +263,6 @@ Once the form had been filled, the employee send it to his supervisor. - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Professional Development Objectives - - comment - The comment you entered is in an invalid format. - - - - Other - - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Personal Performance Objectives - - comment - The comment you entered is in an invalid format. - - - - Other - - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Project Objectives - - comment - The comment you entered is in an invalid format. - - - - Other - - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Use the following space to make any comments regarding the above performance evaluation. - - comment - The comment you entered is in an invalid format. - - - - Other - - - - - - - - 1 - 1 - 1 - - - - - - - 1 - 1 - 2 - - - - - - - 1 - 1 - 3 - - - - - - - 1 - 1 - 4 - - - - - - - 1 - 1 - 5 - - - - - - - 1 - 1 - 1 - - - - - - - 1 - 1 - 2 - - - - - - - 1 - 1 - 3 - - - - - - - 1 - 1 - 4 - - - - - - - 1 - 1 - 5 - - - - 1 @@ -1036,15 +542,6 @@ Once the form had been filled, the employee send it to his supervisor. - - - Name - - char - - - - 1 @@ -1119,15 +616,6 @@ Once the form had been filled, the employee send it to his supervisor. - - - Position Title - - char - - - - 1 @@ -1210,15 +698,6 @@ Once the form had been filled, the employee send it to his supervisor. - - - Appraisal for Period - - char - - - - 1 @@ -1255,113 +734,6 @@ Once the form had been filled, the employee send it to his supervisor. - - - Date of Review - - datetime - - - - - - - 1 - Time management : projects/tasks are completed on time - - - - - - - - 1 - Results of the bottom-up survey and mitigation actions to face technical, organizational, structural and/or relational issues - - - - - - - - 1 - Delegation : Ability to efficiently assign tasks to other people - - - - - - - - Appraiser - - char - - - - - - - 1 - Ability to cope with multidisciplinary of team - - - - - - - - 1 - Enthusiasm & implication toward projects/assignments - - - - - - - - 1 - Compliance to internal rules and processes (timesheets completion, etc.) - - - - - - - - 1 - Team spirit : ability to work efficiently with peers, manage the conflicts with diplomacy - - - - - - - - 1 - Leadership: create a challenging and motivating work environment aligned with the company's strategy - - - - - - - - 1 - Leadership: sustain subordinates in their professional growth - - - - - - - - 1 - Ability to manage planning resources, risks, budgets and deadlines - - - - @@ -1381,150 +753,6 @@ Once the form had been filled, the employee send it to his supervisor. - - - 1 - Initiative and self autonomy - - - - - - - - 1 - Ability to follow and complete work as instructed - - - - - - - - 1 - Decision making - - - - - - - - 1 - At the conclusion of the appraisal time period: - - - - - - - - 1 - At the outset of the appraisal time period: - - - - - - - - 1 - Customer commitment - - - - - - - - 1 - Communication skills ( written & verbally): clearness, concision, exactitude - - - - - - - - 1 - Technical skills regarding to the job requirements - - - - - - - - 1 - Analytical and synthetic mind - - - - - - - - 1 - Promptness and attendance record - - - - - - - - 1 - Adaptability : Ability to adapt oneself to organizational changes while keeping efficiency - - - - - - - - 1 - Creativity and forward looking aptitude - - - - - - - - Title - - char - - - - - - - 1 - 1 - Objectives - - - - - - - 1 - 1 - Results - - - - - - - 1 - 1 - Comments - - - - diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml index 7985ddb42f0..2287f3c05c3 100644 --- a/addons/hr_recruitment/hr_recruitment_data.xml +++ b/addons/hr_recruitment/hr_recruitment_data.xml @@ -65,6 +65,378 @@ 7 + + Job Survey + draft + 20 + + + + 5 + + + Default Section + + + + + Education & Activities + + + + + Importance + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + From which university will you graduate? + + single_textbox + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Rate the Importance + + matrix_of_choices_only_one_ans + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Education + + comment + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Knowledge + + comment + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + What is your gender? + + multiple_choice_only_one_ans + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + Male + + + + + + 1 + Female + + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + What age group do you belong to? + + multiple_choice_only_one_ans + The comment you entered is in an invalid format. + + + + Other + + + + + + 1 + 0 - 15 + + + + + 1 + 16 - 20 + + + + + 1 + 21 - 30 + + + + + 1 + 31 - 40 + + + + + 1 + 41 - 50 + + + + + 1 + 51 - 60 + + + + + 1 + 61 - 70 + + + + + 1 + 71 + + + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Exprience + + comment + The comment you entered is in an invalid format. + + + + Other + + + + + 1 + do_not_validate + do_not_validate + Please enter a comment. + The choices need to add up to [enter sum here]. + + The comment you entered is in an invalid format. + + This question requires an answer. + + Activities + + comment + The comment you entered is in an invalid format. + + + + Other + + + + + + Not important + + + + + + Somewhat important + + + + + + Important + + + + + + Very important + + + + + + Most important + + + + + 1 + Good pay + + + + + 1 + Getting on with colleagues + + + + + 1 + Office environment (décor, light, space etc) + + + + + 1 + Desk space + + + + + 1 + State of the art technology + + + + + 1 + Office location (proximity to home) + + + + + 1 + Good management/boss + + + + + 1 + Freebies such as tea, coffee and stationery + + + + + 1 + Perks such as free parking, gym passes etc + + + + + 1 + No out of hours working + + + + + 1 + Dress code + + + + + 1 + Regular meetings + + + + + 1 + Good social life (office nights out, good Christmas parties etc) + + + diff --git a/addons/hr_recruitment/hr_recruitment_demo.xml b/addons/hr_recruitment/hr_recruitment_demo.xml index 4811e2b91a2..df34ec093c8 100644 --- a/addons/hr_recruitment/hr_recruitment_demo.xml +++ b/addons/hr_recruitment/hr_recruitment_demo.xml @@ -134,442 +134,5 @@ - - - - - Job Survey - draft - 20 - - - - 5 - - - - - Default Section - - - - - - - Education & Activities - - - - - - - Importance - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - From which university will you graduate? - - single_textbox - The comment you entered is in an invalid format. - - - - Other - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Rate the Importance - - matrix_of_choices_only_one_ans - The comment you entered is in an invalid format. - - - - Other - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Education - - comment - The comment you entered is in an invalid format. - - - - Other - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Knowledge - - comment - The comment you entered is in an invalid format. - - - - Other - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - What is your gender? - - multiple_choice_only_one_ans - The comment you entered is in an invalid format. - - - - Other - - - - - - 1 - Male - - - - - - 1 - Female - - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - What age group do you belong to? - - multiple_choice_only_one_ans - The comment you entered is in an invalid format. - - - - Other - - - - - - 1 - 0 - 15 - - - - - 1 - 16 - 20 - - - - - 1 - 21 - 30 - - - - - 1 - 31 - 40 - - - - - 1 - 41 - 50 - - - - - 1 - 51 - 60 - - - - - 1 - 61 - 70 - - - - - 1 - 71 + - - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Exprience - - comment - The comment you entered is in an invalid format. - - - - Other - - - - - - - 1 - do_not_validate - do_not_validate - Please enter a comment. - The choices need to add up to [enter sum here]. - - The comment you entered is in an invalid format. - - This question requires an answer. - - Activities - - comment - The comment you entered is in an invalid format. - - - - Other - - - - - - - - Not important - - - - - - - - Somewhat important - - - - - - - - Important - - - - - - - - Very important - - - - - - - - Most important - - - - - - - - 1 - Good pay - - - - - - - 1 - Getting on with colleagues - - - - - - - 1 - Office environment (décor, light, space etc) - - - - - - - 1 - Desk space - - - - - - - 1 - State of the art technology - - - - - - - 1 - Office location (proximity to home) - - - - - - - 1 - Good management/boss - - - - - - - 1 - Freebies such as tea, coffee and stationery - - - - - - - 1 - Perks such as free parking, gym passes etc - - - - - - - 1 - No out of hours working - - - - - - - 1 - Dress code - - - - - - - 1 - Regular meetings - - - - - - - 1 - Good social life (office nights out, good Christmas parties etc) - - - - - diff --git a/addons/survey/survey_data.xml b/addons/survey/survey_data.xml index c057868d6de..7627c5d54b0 100644 --- a/addons/survey/survey_data.xml +++ b/addons/survey/survey_data.xml @@ -1,6 +1,17 @@ - + + Human Resources + Human Resources + + + Customer Feeback + Customer Feeback + + + Supplier Selection + Supplier Selection + - \ No newline at end of file + diff --git a/addons/survey/survey_demo.xml b/addons/survey/survey_demo.xml index c8fa9c269ff..e9e4821e957 100644 --- a/addons/survey/survey_demo.xml +++ b/addons/survey/survey_demo.xml @@ -6,7 +6,7 @@ - + From 5285ccfae52e442157fe277a06ab5222c867abe3 Mon Sep 17 00:00:00 2001 From: "Hardik Ansodariy (OpenERP)" Date: Tue, 24 May 2011 18:40:38 +0530 Subject: [PATCH 036/831] [IMP]:survey, removed commented code bzr revid: han@tinyerp.com-20110524131038-4s4rhg7b72bnage7 --- addons/survey/survey_demo.xml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/addons/survey/survey_demo.xml b/addons/survey/survey_demo.xml index e9e4821e957..97e8daeb5b4 100644 --- a/addons/survey/survey_demo.xml +++ b/addons/survey/survey_demo.xml @@ -6,19 +6,6 @@ - - OpenERP Partner Feedback From d3b701d97cc8dc0f2dcc83f28ad862d8b516df87 Mon Sep 17 00:00:00 2001 From: skh Date: Wed, 25 May 2011 17:21:33 +0530 Subject: [PATCH 037/831] [FIX]: Change in data[] and init_xml[] in the stable 6.0 addons (Ref : Case 5661) bzr revid: skh@tinyerp.com-20110525115133-nif4bdakz2rd222i --- addons/auction/auction_data.xml | 2 +- addons/base_iban/base_iban_data.xml | 2 +- addons/base_report_designer/wizard/base_report_design_view.xml | 2 +- addons/crm/__openerp__.py | 1 - addons/document_ics/document_data.xml | 2 +- addons/hr_timesheet/hr_timesheet_data.xml | 2 +- addons/l10n_ch/dta_data.xml | 2 +- addons/l10n_ch/journal_data.xml | 2 +- addons/l10n_ch/sterchi_chart/fiscal_position.xml | 2 +- addons/l10n_cn/base_data.xml | 2 +- addons/l10n_es/taxes_data.xml | 2 +- addons/project_timesheet/project_timesheet_data.xml | 2 +- addons/survey/survey_data.xml | 2 +- 13 files changed, 12 insertions(+), 13 deletions(-) diff --git a/addons/auction/auction_data.xml b/addons/auction/auction_data.xml index d1f3f94a510..632219b80a5 100644 --- a/addons/auction/auction_data.xml +++ b/addons/auction/auction_data.xml @@ -1,6 +1,6 @@ - + diff --git a/addons/base_iban/base_iban_data.xml b/addons/base_iban/base_iban_data.xml index dae3999505e..e4c03b63996 100644 --- a/addons/base_iban/base_iban_data.xml +++ b/addons/base_iban/base_iban_data.xml @@ -1,6 +1,6 @@ - + diff --git a/addons/l10n_cn/base_data.xml b/addons/l10n_cn/base_data.xml index 252a04feb18..8ef15a80ca8 100644 --- a/addons/l10n_cn/base_data.xml +++ b/addons/l10n_cn/base_data.xml @@ -1,6 +1,6 @@ - + diff --git a/addons/l10n_es/taxes_data.xml b/addons/l10n_es/taxes_data.xml index 1c6e7e00a3a..09759e033e7 100644 --- a/addons/l10n_es/taxes_data.xml +++ b/addons/l10n_es/taxes_data.xml @@ -1,6 +1,6 @@ - + + + + +
    + +
    + + + + +
    +
    +
    +
    + +
    + +
    + + + + + +
    +
    +
    +
    From 4c72e4401fead3f7399b7c52cf97c94a6bd36592 Mon Sep 17 00:00:00 2001 From: "Jay Vora (OpenERP)" Date: Tue, 7 Jun 2011 12:40:47 +0530 Subject: [PATCH 076/831] [FIX] Backported the fix from trunk for the module Audittrail : audit_trail settings should be readable by everyone, not just the user in employee group lp bug: https://launchpad.net/bugs/722579 fixed bzr revid: jvo@tinyerp.com-20110607071047-ubogvm2fndrhh1zd --- addons/audittrail/audittrail.py | 44 +++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/addons/audittrail/audittrail.py b/addons/audittrail/audittrail.py index f280dd0ab36..196e5f664e6 100644 --- a/addons/audittrail/audittrail.py +++ b/addons/audittrail/audittrail.py @@ -301,6 +301,8 @@ class audittrail_objects_proxy(object_proxy): @return: Returns result as per method of Object proxy """ + uid_orig = uid + uid = 1 res2 = args pool = pooler.get_pool(db) cr = pooler.get_db(db).cursor() @@ -314,13 +316,13 @@ class audittrail_objects_proxy(object_proxy): model = model_pool.browse(cr, uid, model_id) if method in ('create'): - res_id = fct_src(db, uid, model.model, method, *args) + res_id = fct_src(db, uid_orig, model.model, method, *args) cr.commit() resource = resource_pool.read(cr, uid, res_id, args[0].keys()) vals = { "method": method, "object_id": model.id, - "user_id": uid, + "user_id": uid_orig, "res_id": resource['id'], } if 'id' in resource: @@ -343,7 +345,7 @@ class audittrail_objects_proxy(object_proxy): elif method in ('read'): res_ids = args[0] old_values = {} - res = fct_src(db, uid, model.model, method, *args) + res = fct_src(db, uid_orig, model.model, method, *args) if type(res) == list: for v in res: old_values[v['id']] = v @@ -353,7 +355,7 @@ class audittrail_objects_proxy(object_proxy): vals = { "method": method, "object_id": model.id, - "user_id": uid, + "user_id": uid_orig, "res_id": res_id, } @@ -382,7 +384,7 @@ class audittrail_objects_proxy(object_proxy): vals = { "method": method, "object_id": model.id, - "user_id": uid, + "user_id": uid_orig, "res_id": res_id, } @@ -399,7 +401,7 @@ class audittrail_objects_proxy(object_proxy): lines.append(line) self.create_log_line(cr, uid, log_id, model, lines) - res = fct_src(db, uid, model.model, method, *args) + res = fct_src(db, uid_orig, model.model, method, *args) cr.commit() cr.close() return res @@ -426,7 +428,7 @@ class audittrail_objects_proxy(object_proxy): old_values_text[field] = self.get_value_text(cr, uid, field, resource[field], model) old_values[resource_id] = {'text':old_values_text, 'value': old_value} - res = fct_src(db, uid, model.model, method, *args) + res = fct_src(db, uid_orig, model.model, method, *args) cr.commit() if res_ids: @@ -437,7 +439,7 @@ class audittrail_objects_proxy(object_proxy): vals = { "method": method, "object_id": model.id, - "user_id": uid, + "user_id": uid_orig, "res_id": resource_id, } @@ -472,6 +474,8 @@ class audittrail_objects_proxy(object_proxy): @return: Returns result as per method of Object proxy """ + uid_orig = uid + uid = 1 pool = pooler.get_pool(db) model_pool = pool.get('ir.model') rule_pool = pool.get('audittrail.rule') @@ -489,13 +493,13 @@ class audittrail_objects_proxy(object_proxy): if model_name == 'audittrail.rule': rule = True if not rule: - return fct_src(db, uid, model, method, *args) + return fct_src(db, uid_orig, model, method, *args) if not model_id: - return fct_src(db, uid, model, method, *args) + return fct_src(db, uid_orig, model, method, *args) rule_ids = rule_pool.search(cr, uid, [('object_id', '=', model_id), ('state', '=', 'subscribed')]) if not rule_ids: - return fct_src(db, uid, model, method, *args) + return fct_src(db, uid_orig, model, method, *args) for thisrule in rule_pool.browse(cr, uid, rule_ids): for user in thisrule.user_id: @@ -503,13 +507,13 @@ class audittrail_objects_proxy(object_proxy): if not logged_uids or uid in logged_uids: if method in ('read', 'write', 'create', 'unlink'): if getattr(thisrule, 'log_' + method): - return self.log_fct(db, uid, model, method, fct_src, *args) + return self.log_fct(db, uid_orig, model, method, fct_src, *args) elif method not in ('default_get','read','fields_view_get','fields_get','search','search_count','name_search','name_get','get','request_get', 'get_sc', 'unlink', 'write', 'create'): if thisrule.log_action: - return self.log_fct(db, uid, model, method, fct_src, *args) + return self.log_fct(db, uid_orig, model, method, fct_src, *args) - return fct_src(db, uid, model, method, *args) + return fct_src(db, uid_orig, model, method, *args) try: res = my_fct(db, uid, model, method, *args) return res @@ -517,6 +521,8 @@ class audittrail_objects_proxy(object_proxy): cr.close() def exec_workflow(self, db, uid, model, method, *args, **argv): + uid_orig = uid + uid = 1 pool = pooler.get_pool(db) logged_uids = [] fct_src = super(audittrail_objects_proxy, self).exec_workflow @@ -532,21 +538,21 @@ class audittrail_objects_proxy(object_proxy): if obj_name == 'audittrail.rule': rule = True if not rule: - return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv) + return super(audittrail_objects_proxy, self).exec_workflow(db, uid_orig, model, method, *args, **argv) if not model_ids: - return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv) + return super(audittrail_objects_proxy, self).exec_workflow(db, uid_orig, model, method, *args, **argv) rule_ids = rule_pool.search(cr, uid, [('object_id', 'in', model_ids), ('state', '=', 'subscribed')]) if not rule_ids: - return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv) + return super(audittrail_objects_proxy, self).exec_workflow(db, uid_orig, model, method, *args, **argv) for thisrule in rule_pool.browse(cr, uid, rule_ids): for user in thisrule.user_id: logged_uids.append(user.id) if not logged_uids or uid in logged_uids: if thisrule.log_workflow: - return self.log_fct(db, uid, model, method, fct_src, *args) - return super(audittrail_objects_proxy, self).exec_workflow(db, uid, model, method, *args, **argv) + return self.log_fct(db, uid_orig, model, method, fct_src, *args) + return super(audittrail_objects_proxy, self).exec_workflow(db, uid_orig, model, method, *args, **argv) return True finally: From 5cc546bad9685fa80b67f111fe756147bc99bf8d Mon Sep 17 00:00:00 2001 From: "Tejas (OpenERP)" Date: Tue, 7 Jun 2011 14:31:31 +0530 Subject: [PATCH 077/831] [usability] res_partner_address default is default (create one default address if none given) bzr revid: tta@openerp.com-20110607090131-6qxynpmrlzq68a0s --- openerp/addons/base/res/partner/partner.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/openerp/addons/base/res/partner/partner.py b/openerp/addons/base/res/partner/partner.py index a5ef8bfa49c..42928877b8d 100644 --- a/openerp/addons/base/res/partner/partner.py +++ b/openerp/addons/base/res/partner/partner.py @@ -267,7 +267,12 @@ class res_partner(osv.osv): cr, uid, model_data.search(cr, uid, [('module','=','base'), ('name','=','main_partner')])[0], - ).res_id + ).res_id + def create(self, cr, user, vals, context=None): + if vals.has_key('address') and vals['address'] == []: + address={'address': [[0, 0, {'type': 'default'}]]} + vals.update(address) + return super(res_partner, self).create(cr, user, vals, context) res_partner() class res_partner_address(osv.osv): From 8c2e45a40315beae65a8c25b1770e27a8c9666d4 Mon Sep 17 00:00:00 2001 From: "vda (OpenERP)" Date: Tue, 7 Jun 2011 14:39:35 +0530 Subject: [PATCH 078/831] [FIX] set dataset index to null for new event. bzr revid: vda@tinyerp.com-20110607090935-hap62nbpb1ymys4r --- addons/base_calendar/static/src/js/calendar.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 498664854a8..c28518a3318 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -120,20 +120,24 @@ openerp.base_calendar.CalendarView = openerp.base.Controller.extend({ var self = this; scheduler.attachEvent( "onDblClick", - function(event_id, event_object) { + function(event_id, e) { self.popup_event(event_id); + e.stopPropagation(); + e.preventDefault(); } ); scheduler.attachEvent( "onEventCreated", - function(event_id, event_object) { + function(event_id, e) { //Replace default Lightbox with Popup Form of new Event - + scheduler.showLightbox = function(){ //Delete Newly created Event,Later we reload Scheduler scheduler.deleteEvent(event_id) self.popup_event(); + e.stopPropagation(); + e.preventDefault(); } } ); @@ -304,6 +308,9 @@ openerp.base_calendar.CalendarView = openerp.base.Controller.extend({ var action_manager = new openerp.base.ActionManager(this.session, element_id); action_manager.start(); action_manager.do_action(action); + + //Default_get + if(!event_id) action_manager.viewmanager.dataset.index = null; } }); From 74b9c6aa19c0874a08e8d9b27e70e2aec4347056 Mon Sep 17 00:00:00 2001 From: "Mohammed Shekha(Open ERP)" <> Date: Tue, 7 Jun 2011 15:34:44 +0530 Subject: [PATCH 079/831] [FIX] Domain should be in list. bzr revid: noz@tinyerp.com-20110607100444-u4ba95ts7tssy1j6 --- addons/share/web/controllers.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/share/web/controllers.py b/addons/share/web/controllers.py index 1b57d960e99..a59dde6f812 100644 --- a/addons/share/web/controllers.py +++ b/addons/share/web/controllers.py @@ -7,14 +7,15 @@ from openerp.utils import rpc import openerp.controllers import cherrypy - - class ShareWizardController(openerp.controllers.SecuredController): _cp_path = "/share" @expose() def index(self, domain, context, view_id, search_domain='[]', action_id=None): context = ast.literal_eval(context) + + if search_domain == 'None': + search_domain = '[]' if not action_id: # This should not be needed anymore, but just in case users are From 2ac53360ce2a81a927e13d49202e39066551b33a Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Tue, 7 Jun 2011 16:43:40 +0530 Subject: [PATCH 080/831] [FIX] Set event hour when less then day_langth, use addChildTask instand of inseartTask. bzr revid: cpa@tinyerp.com-20110607111340-9krewbfmg0hpegbz --- addons/base_gantt/static/src/js/gantt.js | 30 +++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 5f47e7bfb00..5a71fd1f3c1 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -117,8 +117,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { } } project = new GanttProjectInfo(1, self.name, smalldate); - task = new GanttTaskInfo(111, "temp", smalldate, 1, 100, "", "red"); - project.addTask(task); ganttChartControl.addProject(project); } @@ -162,7 +160,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { if (self.grp != undefined){ for (j in self.grp){ var grp_key = res[self.grp[j]['group_by']]; - if (typeof(grp_key) == "object"){ grp_key = res[self.grp[j]['group_by']][1]; } @@ -205,16 +202,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { } } - ganttChartControl.create("GanttDiv"); - ganttChartControl.attachEvent("onTaskStartDrag", function(task) {self.on_drag_start(task);}); - ganttChartControl.attachEvent("onTaskEndResize", function(task) {self.on_resize_drag_end(task, "resize");}); - ganttChartControl.attachEvent("onTaskEndDrag", function(task) {self.on_resize_drag_end(task, "drag");}); - ganttChartControl.attachEvent("onTaskDblClick", function(task) {self.open_popup(task);}); - - - project = ganttChartControl.getProjectById(1); - project.deleteTask(111); - for (i in final_events){ var evt_id = final_events[i]; var evt_date = all_events[evt_id]['evt'][2]; @@ -255,8 +242,23 @@ init: function(view_manager, session, element_id, dataset, view_id) { res['evt'][3] = self.hours_between(res['evt'][2],res['evt'][3]); } - project.insertTask(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], 100, "",res['evt'][6], res['parent']); + if(res['parent'] == ""){ + task=new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], 100, "",res['evt'][6]); + project.addTask(task); + }else{ + task=new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], 100, "",res['evt'][6]); + prt = project.getTaskById(res['parent']); + prt.addChildTask(task); + } + } + + ganttChartControl.create("GanttDiv"); + ganttChartControl.attachEvent("onTaskStartDrag", function(task) {self.on_drag_start(task);}); + ganttChartControl.attachEvent("onTaskEndResize", function(task) {self.on_resize_drag_end(task, "resize");}); + ganttChartControl.attachEvent("onTaskEndDrag", function(task) {self.on_resize_drag_end(task, "drag");}); + ganttChartControl.attachEvent("onTaskDblClick", function(task) {self.open_popup(task);}); + }, end_date: function(dat, duration) { From 03d602ef27a5e073ec8b71be4e29e4bb3ffe6172 Mon Sep 17 00:00:00 2001 From: "Rifakat Haradwala (Open ERP)" Date: Tue, 7 Jun 2011 16:56:40 +0530 Subject: [PATCH 081/831] [IMP]: useability improvement in company for Security Days bzr revid: rha@tinyerp.com-20110607112640-r5t44iycnh6x2ayj --- addons/sale/company.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sale/company.py b/addons/sale/company.py index 2b310925107..bc4729cadbc 100644 --- a/addons/sale/company.py +++ b/addons/sale/company.py @@ -29,9 +29,9 @@ class company(osv.osv): "for security purpose"), } _defaults = { - 'security_lead': 5.0, + 'security_lead': 0.0, } - + company() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file From 3571b8df7a48fd11bfbfcb23a7b04c2012f0aecf Mon Sep 17 00:00:00 2001 From: "Tejas (OpenERP)" Date: Tue, 7 Jun 2011 17:23:53 +0530 Subject: [PATCH 082/831] [Usability] create a default address if non is exists, improved code bzr revid: tta@openerp.com-20110607115353-l7ljzhbot7fjk5wy --- openerp/addons/base/res/partner/partner.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/res/partner/partner.py b/openerp/addons/base/res/partner/partner.py index 42928877b8d..62ff1adf049 100644 --- a/openerp/addons/base/res/partner/partner.py +++ b/openerp/addons/base/res/partner/partner.py @@ -269,9 +269,8 @@ class res_partner(osv.osv): ('name','=','main_partner')])[0], ).res_id def create(self, cr, user, vals, context=None): - if vals.has_key('address') and vals['address'] == []: - address={'address': [[0, 0, {'type': 'default'}]]} - vals.update(address) + if vals.has_key('address') and not vals.get('address'): + vals.get('address').append((0, 0, {'type': 'default'})) return super(res_partner, self).create(cr, user, vals, context) res_partner() From 4b15c43c4336f597819e3f446b1cce93e77a9e8f Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Tue, 7 Jun 2011 18:44:19 +0530 Subject: [PATCH 083/831] [FIX] Stopped multiple request during collapse (still collapse is in progress). bzr revid: bth@tinyerp.com-20110607131419-wxbpvdqvop2wonvo --- addons/base/static/src/img/collapse.gif | Bin 0 -> 80 bytes addons/base/static/src/img/expand.gif | Bin 0 -> 81 bytes addons/base/static/src/js/tree.js | 46 ++++++++++++++++++++---- addons/base/static/src/xml/base.xml | 21 ++++++----- 4 files changed, 49 insertions(+), 18 deletions(-) create mode 100755 addons/base/static/src/img/collapse.gif create mode 100755 addons/base/static/src/img/expand.gif diff --git a/addons/base/static/src/img/collapse.gif b/addons/base/static/src/img/collapse.gif new file mode 100755 index 0000000000000000000000000000000000000000..759e72ebcfe18bc1bc714b6451c301b12a1f27d5 GIT binary patch literal 80 zcmZ?wbhEHb6krfwSjfZx1Zin$|G_}
    @@ -127,7 +127,7 @@
    - + @@ -244,7 +244,7 @@
    - +
    @@ -262,11 +262,11 @@
    -
    + -
    +
- - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
- - - - -
- -
- - - - - - - - - - - - - - -
-
- - - - - -
- -
- - - - + + + + + + + +
+
+ + + + +
+ +
+ + + - - - - - - - - - - -
+
+ +
+ +
+ + + + +
+ +
+ + + + + + + + + + + + +
+ + + +
+
- - - - -
- -
- - - - - - - - - - - - - - - - -
+
+ + + + +
+ +
+ + + + + + + + + + + + + + + + +
+
-
+ - +
@@ -221,9 +229,7 @@
- -
From 5ffdaf4ec14aee10feede010c4eb20ad8fe6e0c3 Mon Sep 17 00:00:00 2001 From: "noz (OpenERP)" Date: Tue, 5 Jul 2011 19:12:13 +0530 Subject: [PATCH 224/831] [FIX] Fixed methods for submit. bzr revid: noz@tinyerp.com-20110705134213-c83d7bxpxd676uu4 --- addons/base/controllers/main.py | 4 +++- addons/base/static/src/js/chrome.js | 20 +++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index b085b5baab8..1a15d4ea933 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -133,9 +133,11 @@ class Session(openerpweb.Controller): elif flag == 'backup': db = kw.get('db') password = kw.get('password') - # todo: content type + res = req.session.proxy("db").dump(password, db) if res: + cherrypy.response.headers['Content-Type'] = "application/data" + cherrypy.response.headers['Content-Disposition'] = 'filename="' + db + '.dump"' return base64.decodestring(res) elif flag == 'restore': diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 4316d6f6fa6..fb7b7ace862 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -943,14 +943,16 @@ openerp.base.Database = openerp.base.Controller.extend({ $("form[name=drop_db_form]").validate(); - self.$option_id.find('#drop_db_btn').click(function() { + self.$option_id.find('form[name=drop_db_form]').submit(function(ev) { + ev.preventDefault(); + var db = self.$option_id.find("select[name=drop_db]").val(); var password = self.$option_id.find("input[name=drop_pwd]").val(); if (confirm("Do you really want to delete the database: " + db + " ?")) { self.rpc("/base/session/db_operation", {'flag': 'drop', 'db': db, 'password': password}, function(result) { - if (!result.error) { + if (result && !result.error) { self.$option_id.find("select[name=drop_db] :selected").remove(); self.notification.notify("Dropping database", "The database '" + db + "' has been dropped"); } @@ -965,13 +967,15 @@ openerp.base.Database = openerp.base.Controller.extend({ $("form[name=backup_db_form]").validate(); - self.$option_id.find('#backup_db_btn').click(function() { + self.$option_id.find('form[name=backup_db_form]').submit(function(ev) { + ev.preventDefault(); + var db = self.$option_id.find("select[name=backup_db]").val(); var password = self.$option_id.find("input[name=backup_pwd]").val(); - + self.rpc("/base/session/db_operation", {'flag': 'backup', 'db': db, 'password': password}, function(result) { - if (!result.error) { + if (result && !result.error) { self.notification.notify("Backup has been created for the database: '" + db + "'"); } }); @@ -984,14 +988,16 @@ openerp.base.Database = openerp.base.Controller.extend({ $("form[name=restore_db_form]").validate(); - self.$option_id.find('#restore_db_btn').click(function() { + self.$option_id.find('form[name=restore_db_form]').submit(function(ev) { + ev.preventDefault(); + var db = self.$option_id.find("input[name=restore_db]").val(); var password = self.$option_id.find("input[name=restore_pwd]").val(); var new_db = self.$option_id.find("input[name=new_db]").val(); self.rpc("/base/session/db_operation", {'flag': 'restore', 'db': db, 'password': password, 'new_db': new_db}, function(result) { - if (!result.error) { + if (result && !result.error) { self.notification.notify("You restored your database as: '" + new_db + "'"); } }); From 6fb4cd03009bfdfe619bdd02fa4a48155f2d6c0b Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Wed, 6 Jul 2011 05:17:46 +0000 Subject: [PATCH 225/831] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20110706051746-wywg8cqfd8j975uf --- addons/account/i18n/zh_CN.po | 227 ++++++++++++----------- addons/base_synchro/i18n/vi.po | 289 +++++++++++++++++++++++++++++ addons/event_project/i18n/tr.po | 41 +++-- addons/mrp/i18n/zh_CN.po | 311 ++++++++++++++++++-------------- addons/project/i18n/zh_CN.po | 2 +- 5 files changed, 614 insertions(+), 256 deletions(-) create mode 100644 addons/base_synchro/i18n/vi.po diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po index 88b38630a91..85d89c63e6f 100644 --- a/addons/account/i18n/zh_CN.po +++ b/addons/account/i18n/zh_CN.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-06-27 17:05+0000\n" +"PO-Revision-Date: 2011-07-06 03:37+0000\n" "Last-Translator: dquo \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-06-28 05:30+0000\n" +"X-Launchpad-Export-Date: 2011-07-06 05:17+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: account @@ -253,7 +253,7 @@ msgstr "勾选此项使发票上不显示增值税" #: code:addons/account/invoice.py:1224 #, python-format msgid "Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)" -msgstr "" +msgstr "发票'%s'已部分支付了%s%s ,总金额为:%s%s, 尚余%s%s未付" #. module: account #: model:process.transition,note:account.process_transition_supplierentriesreconcile0 @@ -281,7 +281,7 @@ msgstr "计算余额" #: model:ir.actions.act_window,name:account.action_view_account_use_model #: model:ir.ui.menu,name:account.menu_action_manual_recurring msgid "Manual Recurring" -msgstr "" +msgstr "手动循环" #. module: account #: view:account.fiscalyear.close.state:0 @@ -319,7 +319,7 @@ msgstr "字段名" msgid "" "Installs localized accounting charts to match as closely as possible the " "accounting needs of your company based on your country." -msgstr "" +msgstr "安装本地化财务系统以尽可能的适应本国的财务要求" #. module: account #: code:addons/account/wizard/account_move_journal.py:63 @@ -329,7 +329,7 @@ msgid "" "\n" "You can create one in the menu: \n" "Configuration/Financial Accounting/Accounts/Journals." -msgstr "" +msgstr "无法找到针对该公司%s类型的分类账簿" #. module: account #: model:ir.model,name:account.model_account_unreconcile @@ -346,7 +346,7 @@ msgstr "采购属性" #: view:account.installer:0 #: view:account.installer.modules:0 msgid "Configure" -msgstr "" +msgstr "设置" #. module: account #: selection:account.entries.report,month:0 @@ -364,11 +364,12 @@ msgid "" "OpenERP. Journal items are created by OpenERP if you use Bank Statements, " "Cash Registers, or Customer/Supplier payments." msgstr "" +"本界面供财务人员在OpenERP中批量录入凭证之用。如果你在OpenERP使用银行对帐单,收银机,或者客户/供应商付款, 相应的分录会由系统自动产生。" #. module: account #: model:ir.model,name:account.model_account_tax_template msgid "account.tax.template" -msgstr "" +msgstr "account.tax.template" #. module: account #: model:ir.model,name:account.model_account_bank_accounts_wizard @@ -384,12 +385,12 @@ msgstr "建立日期" #. module: account #: selection:account.journal,type:0 msgid "Purchase Refund" -msgstr "" +msgstr "采购退款" #. module: account #: selection:account.journal,type:0 msgid "Opening/Closing Situation" -msgstr "" +msgstr "开/关账状态" #. module: account #: help:account.journal,currency:0 @@ -406,7 +407,7 @@ msgstr "打开会计年度" msgid "" "This field contains the informatin related to the numbering of the journal " "entries of this journal." -msgstr "" +msgstr "该字段包含该分类账簿记录数量的信息" #. module: account #: field:account.journal,default_debit_account_id:0 @@ -426,7 +427,7 @@ msgstr "正数" #. module: account #: view:account.move.line.unreconcile.select:0 msgid "Open For Unreconciliation" -msgstr "" +msgstr "打开反核销" #. module: account #: field:account.fiscal.position.template,chart_template_id:0 @@ -456,6 +457,7 @@ msgid "" "amount of each area of the tax declaration for your country. It’s presented " "in a hierarchical structure, which can be modified to fit your needs." msgstr "" +"税务表是一个树状视图,反映了税务结构,并显示当前的纳税情况。税务表反映了国家规定的不同纳税领域的纳税申报数量情况。其设置为一个层次结构,请根据需要修改。" #. module: account #: view:account.analytic.line:0 @@ -494,17 +496,17 @@ msgstr "业务类型" #. module: account #: model:ir.model,name:account.model_account_invoice_confirm msgid "Confirm the selected invoices" -msgstr "" +msgstr "确认选定的发票" #. module: account #: field:account.addtmpl.wizard,cparent_id:0 msgid "Parent target" -msgstr "" +msgstr "上级目标" #. module: account #: field:account.bank.statement,account_id:0 msgid "Account used in this journal" -msgstr "" +msgstr "这个分类账簿上的科目" #. module: account #: help:account.aged.trial.balance,chart_account_id:0 @@ -523,7 +525,7 @@ msgstr "" #: help:account.report.general.ledger,chart_account_id:0 #: help:account.vat.declaration,chart_account_id:0 msgid "Select Charts of Accounts" -msgstr "" +msgstr "选择科目表" #. module: account #: view:product.product:0 @@ -533,7 +535,7 @@ msgstr "进项税" #. module: account #: model:ir.model,name:account.model_account_invoice_refund msgid "Invoice Refund" -msgstr "" +msgstr "发票退款" #. module: account #: report:account.overdue:0 @@ -567,7 +569,7 @@ msgstr "关闭一个会计年度" #. module: account #: model:process.transition,note:account.process_transition_confirmstatementfromdraft0 msgid "The accountant confirms the statement." -msgstr "" +msgstr "会计确认的报表" #. module: account #: selection:account.balance.report,display_account:0 @@ -615,7 +617,7 @@ msgstr "税一览" #. module: account #: report:account.central.journal:0 msgid "Centralized Journal" -msgstr "" +msgstr "日记帐集合" #. module: account #: sql_constraint:account.sequence.fiscalyear:0 @@ -637,7 +639,7 @@ msgstr "SAJ" #. module: account #: help:account.bank.statement,balance_end_real:0 msgid "closing balance entered by the cashbox verifier" -msgstr "" +msgstr "会计帐面现金余额由出纳输入" #. module: account #: view:account.period:0 @@ -665,7 +667,7 @@ msgstr "明细帐期间" #: code:addons/account/account_move_line.py:767 #, python-format msgid "To reconcile the entries company should be the same for all entries" -msgstr "" +msgstr "公司所有科目之合应借贷相等" #. module: account #: view:account.account:0 @@ -682,7 +684,7 @@ msgstr "应收款科目" #. module: account #: model:ir.model,name:account.model_account_report_general_ledger msgid "General Ledger Report" -msgstr "" +msgstr "总账报表" #. module: account #: view:account.invoice:0 @@ -697,7 +699,7 @@ msgstr "你确定创建凭证?" #. module: account #: selection:account.bank.accounts.wizard,account_type:0 msgid "Check" -msgstr "" +msgstr "核对" #. module: account #: field:account.partner.reconcile.process,today_reconciled:0 @@ -726,7 +728,7 @@ msgstr "表" #: model:ir.model,name:account.model_project_account_analytic_line #, python-format msgid "Analytic Entries by line" -msgstr "" +msgstr "按行显示分析科目数据" #. module: account #: code:addons/account/wizard/account_change_currency.py:38 @@ -812,7 +814,7 @@ msgstr "如果选中,这一点的新报表科目将不包含在默认情况下 msgid "" "Can not %s invoice which is already reconciled, invoice should be " "unreconciled first. You can only Refund this invoice" -msgstr "" +msgstr "无法%s该发票,该发票已核销,除非先将其反核销。目前只能对该发票做退款处理" #. module: account #: model:ir.actions.act_window,name:account.action_subscription_form_new @@ -872,7 +874,7 @@ msgstr "总税单(纳税合计)" #: view:validate.account.move:0 #: view:validate.account.move.lines:0 msgid "Approve" -msgstr "" +msgstr "核准" #. module: account #: view:account.invoice:0 @@ -894,7 +896,7 @@ msgstr "合并" #: view:account.invoice.report:0 #: view:account.move.line:0 msgid "Extended Filters..." -msgstr "" +msgstr "增加筛选条件" #. module: account #: model:ir.ui.menu,name:account.menu_account_central_journal @@ -922,12 +924,12 @@ msgid "" "If the Tax account is a tax code account, this field will contain the taxed " "amount.If the tax account is base tax code, this field will contain the " "basic amount(without tax)." -msgstr "" +msgstr "选上就是表示此科目以含税价计算税额" #. module: account #: view:account.analytic.line:0 msgid "Purchases" -msgstr "" +msgstr "采购单列表" #. module: account #: field:account.model,lines_id:0 @@ -1188,7 +1190,7 @@ msgstr "项目分析" #. module: account #: field:account.account,level:0 msgid "Level" -msgstr "" +msgstr "级别" #. module: account #: report:account.invoice:0 @@ -1219,7 +1221,7 @@ msgstr "科目模板" #. module: account #: view:account.tax.code.template:0 msgid "Search tax template" -msgstr "" +msgstr "搜索税模板" #. module: account #: report:account.invoice:0 @@ -1248,7 +1250,7 @@ msgstr "期初余额" #. module: account #: view:account.invoice:0 msgid "Reset to Draft" -msgstr "" +msgstr "重置为草稿" #. module: account #: view:wizard.multi.charts.accounts:0 @@ -1349,7 +1351,7 @@ msgstr "数字 #" #. module: account #: field:account.journal,entry_posted:0 msgid "Skip 'Draft' State for Manual Entries" -msgstr "" +msgstr "如果是手工分录的话就跳过“草稿”状态" #. module: account #: view:account.invoice.report:0 @@ -1365,16 +1367,18 @@ msgid "" "entry per accounting document: invoice, refund, supplier payment, bank " "statements, etc." msgstr "" +"现金及银行日记帐由多个日记帐明细组成,每一日记帐明细都可以是借或贷对应科目。 " +"OpenERP会自动创建每个会计凭证日记帐分录:发票,退款,供应商付款,银行对账单等。" #. module: account #: view:account.entries.report:0 msgid "# of Entries " -msgstr "" +msgstr "号分录 " #. module: account #: model:ir.model,name:account.model_temp_range msgid "A Temporary table used for Dashboard view" -msgstr "" +msgstr "用于仪表盘视图的临时表" #. module: account #: model:ir.actions.act_window,name:account.action_invoice_tree4 @@ -1567,7 +1571,7 @@ msgstr "作废发票,退货发票,核销当前发票" #. module: account #: model:ir.ui.menu,name:account.periodical_processing_invoicing msgid "Invoicing" -msgstr "" +msgstr "开发票" #. module: account #: field:account.chart.template,tax_code_root_id:0 @@ -1612,7 +1616,7 @@ msgstr "科目未设定为可核销!" #. module: account #: field:account.cashbox.line,pieces:0 msgid "Values" -msgstr "" +msgstr "值" #. module: account #: help:account.journal.period,active:0 @@ -1862,7 +1866,7 @@ msgstr "帐户盈亏" #: field:account.installer.modules,config_logo:0 #: field:wizard.multi.charts.accounts,config_logo:0 msgid "Image" -msgstr "" +msgstr "图像" #. module: account #: view:account.invoice:0 @@ -1930,17 +1934,17 @@ msgstr "进口发票" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "January" -msgstr "" +msgstr "一月" #. module: account #: view:account.journal:0 msgid "Validations" -msgstr "" +msgstr "有效性" #. module: account #: view:account.entries.report:0 msgid "This F.Year" -msgstr "" +msgstr "本财年" #. module: account #: view:account.tax.chart:0 @@ -2314,7 +2318,7 @@ msgstr "这份报告是给你一个特定财务情况概述" #. module: account #: constraint:product.category:0 msgid "Error ! You can not create recursive categories." -msgstr "" +msgstr "错误!你不能创建递归的类型." #. module: account #: report:account.invoice:0 @@ -2368,7 +2372,7 @@ msgstr "日期:" msgid "" "You cannot modify company of this journal as its related record exist in " "Entry Lines" -msgstr "" +msgstr "您不能修改公司此报表,此报表有其存在相关的凭证" #. module: account #: report:account.journal.period.print:0 @@ -2611,7 +2615,7 @@ msgstr "留空使用审核(发票)日期的会计期间" #: help:account.bank.statement,account_id:0 msgid "" "used in statement reconciliation domain, but shouldn't be used elswhere." -msgstr "" +msgstr "用于声明核销区间,但不能使用到别处。" #. module: account #: field:account.invoice.tax,base_amount:0 @@ -2759,7 +2763,7 @@ msgstr "搜索会计年度" #. module: account #: selection:account.tax,applicable_type:0 msgid "Always" -msgstr "" +msgstr "总是" #. module: account #: view:account.analytic.line:0 @@ -2849,7 +2853,7 @@ msgstr "将此科目的所有发生都转移到他的二级科目。" msgid "" "This wizard will validate all journal entries of a particular journal and " "period. Once journal entries are validated, you can not update them anymore." -msgstr "" +msgstr "该向导将核销特定期间的所有报表和凭证。一旦凭证明细进行了验证,你不能更改它们了。" #. module: account #: model:ir.actions.act_window,name:account.action_account_chart_template_form @@ -3154,7 +3158,7 @@ msgstr "描述" #: view:account.addtmpl.wizard:0 #: model:ir.actions.act_window,name:account.action_account_addtmpl_wizard_form msgid "Create Account" -msgstr "" +msgstr "创建科目" #. module: account #: model:ir.model,name:account.model_report_account_type_sales @@ -3289,7 +3293,7 @@ msgstr "部分凭证已核销!" msgid "" "You cannot validate a Journal Entry unless all journal items are in same " "chart of accounts !" -msgstr "" +msgstr "您不能核销日记帐明细,除非所有日记明细为同一科目" #. module: account #: view:account.tax:0 @@ -3299,7 +3303,7 @@ msgstr "税" #. module: account #: model:ir.ui.menu,name:account.menu_finance_reporting_budgets msgid "Budgets" -msgstr "" +msgstr "预算" #. module: account #: selection:account.aged.trial.balance,filter:0 @@ -3328,7 +3332,7 @@ msgstr "状况" #. module: account #: view:res.partner:0 msgid "History" -msgstr "" +msgstr "历史记录" #. module: account #: help:account.tax,applicable_type:0 @@ -3348,12 +3352,12 @@ msgstr "可用代码(如果类型=代码)" #: view:account.invoice.report:0 #: field:account.invoice.report,product_qty:0 msgid "Qty" -msgstr "" +msgstr "数量" #. module: account #: field:account.invoice.report,address_contact_id:0 msgid "Contact Address Name" -msgstr "" +msgstr "联系地址" #. module: account #: field:account.move.line,blocked:0 @@ -3363,7 +3367,7 @@ msgstr "有争议" #. module: account #: view:account.analytic.line:0 msgid "Search Analytic Lines" -msgstr "" +msgstr "搜索分析明细" #. module: account #: field:res.partner,property_account_payable:0 @@ -3374,7 +3378,7 @@ msgstr "应付帐" #: constraint:account.move:0 msgid "" "You cannot create entries on different periods/journals in the same move" -msgstr "" +msgstr "您不能创建和移动在不同的时期报表/明细" #. module: account #: model:process.node,name:account.process_node_supplierpaymentorder0 @@ -3401,7 +3405,7 @@ msgstr "单价" #. module: account #: model:ir.actions.act_window,name:account.action_account_tree1 msgid "Analytic Items" -msgstr "" +msgstr "分析科目" #. module: account #: code:addons/account/account_move_line.py:1134 @@ -3419,7 +3423,7 @@ msgstr "" #, python-format msgid "" "You selected an Unit of Measure which is not compatible with the product." -msgstr "" +msgstr "您选择的计量单位不适合本产品。" #. module: account #: code:addons/account/invoice.py:476 @@ -3442,7 +3446,7 @@ msgstr "" #. module: account #: view:account.fiscal.position:0 msgid "Mapping" -msgstr "" +msgstr "图表" #. module: account #: field:account.account,name:0 @@ -3460,7 +3464,7 @@ msgstr "名称" #. module: account #: model:ir.model,name:account.model_account_aged_trial_balance msgid "Account Aged Trial balance Report" -msgstr "" +msgstr "账龄试算平衡表" #. module: account #: field:account.move.line,date:0 @@ -3476,7 +3480,7 @@ msgstr "标准编码" #. module: account #: help:account.journal,analytic_journal_id:0 msgid "Journal for analytic entries" -msgstr "" +msgstr "分析明细项" #. module: account #: model:ir.ui.menu,name:account.menu_finance @@ -3496,12 +3500,12 @@ msgstr "会计" msgid "" "Print Report with the currency column if the currency is different then the " "company currency" -msgstr "" +msgstr "如果打印货币与报表的货币是不同的,那么使用公司的货币" #. module: account #: view:account.analytic.line:0 msgid "General Accounting" -msgstr "" +msgstr "会计员" #. module: account #: report:account.overdue:0 @@ -3522,7 +3526,7 @@ msgstr "" #: view:account.installer.modules:0 #: view:wizard.multi.charts.accounts:0 msgid "title" -msgstr "" +msgstr "职位" #. module: account #: view:account.invoice:0 @@ -3534,12 +3538,12 @@ msgstr "设为草稿" #. module: account #: model:ir.actions.act_window,name:account.action_subscription_form msgid "Recurring Lines" -msgstr "" +msgstr "循环项" #. module: account #: field:account.partner.balance,display_partner:0 msgid "Display Partners" -msgstr "" +msgstr "显示业务伙伴" #. module: account #: view:account.invoice:0 @@ -3562,7 +3566,7 @@ msgstr "" #. module: account #: view:account.invoice.confirm:0 msgid "Confirm Invoices" -msgstr "" +msgstr "确认发票" #. module: account #: selection:account.account,currency_mode:0 @@ -3592,7 +3596,7 @@ msgstr "(如果你想打开它发票要反核销)" #: field:account.report.general.ledger,period_from:0 #: field:account.vat.declaration,period_from:0 msgid "Start period" -msgstr "" +msgstr "开始期间" #. module: account #: field:account.tax,name:0 @@ -3626,24 +3630,24 @@ msgstr "辅助核算余额" #: code:addons/account/report/account_profit_loss.py:124 #, python-format msgid "Net Loss" -msgstr "" +msgstr "净亏损" #. module: account #: help:account.account,active:0 msgid "" "If the active field is set to False, it will allow you to hide the account " "without removing it." -msgstr "" +msgstr "如果活动字段设置为False,它可以让你隐藏而不在科目删除。" #. module: account #: view:account.tax.template:0 msgid "Search Tax Templates" -msgstr "" +msgstr "搜寻税模板" #. module: account #: model:ir.ui.menu,name:account.periodical_processing_journal_entries_validation msgid "Draft Entries" -msgstr "" +msgstr "草案项" #. module: account #: field:account.account,shortcut:0 @@ -3672,12 +3676,12 @@ msgstr "类型" #: model:ir.actions.report.xml,name:account.account_account_balance #: model:ir.ui.menu,name:account.menu_general_Balance_report msgid "Trial Balance" -msgstr "" +msgstr "试算平衡" #. module: account #: model:ir.model,name:account.model_account_invoice_cancel msgid "Cancel the Selected Invoices" -msgstr "" +msgstr "取消选定的发票" #. module: account #: help:product.category,property_account_income_categ:0 @@ -3685,7 +3689,7 @@ msgstr "" msgid "" "This account will be used to value outgoing stock for the current product " "category using sale price" -msgstr "" +msgstr "此科目将用于输出库存价值为目前产品的销售价格分类使用" #. module: account #: selection:account.automatic.reconcile,power:0 @@ -3697,12 +3701,12 @@ msgstr "3" msgid "" "Analytic costs (timesheets, some purchased products, ...) come from analytic " "accounts. These generate draft supplier invoices." -msgstr "" +msgstr "(时间表,一些购买的产品,... ...)分析成本来自分析帐目。这些生成供应商行式(自制)发票。" #. module: account #: view:account.bank.statement:0 msgid "Close CashBox" -msgstr "" +msgstr "关闭现金帐" #. module: account #: view:account.invoice.report:0 @@ -3735,7 +3739,7 @@ msgstr "月份" #. module: account #: field:account.invoice.report,uom_name:0 msgid "Reference UoM" -msgstr "" +msgstr "参考计量单位(UoM)" #. module: account #: field:account.account,note:0 @@ -3746,7 +3750,7 @@ msgstr "备注" #. module: account #: view:account.analytic.account:0 msgid "Overdue Account" -msgstr "" +msgstr "逾期科目" #. module: account #: selection:account.invoice,state:0 @@ -3762,7 +3766,7 @@ msgstr "税明细" #. module: account #: field:account.tax,base_code_id:0 msgid "Account Base Code" -msgstr "" +msgstr "科目的基本原则" #. module: account #: help:account.move,state:0 @@ -3823,7 +3827,7 @@ msgstr "" #. module: account #: constraint:account.fiscalyear:0 msgid "Error! The duration of the Fiscal Year is invalid. " -msgstr "" +msgstr "错误!本年度的期间设置是无效的 " #. module: account #: field:report.aged.receivable,name:0 @@ -3838,12 +3842,12 @@ msgstr "检查,如果你想显示平衡科目" #. module: account #: view:account.tax:0 msgid "Compute Code" -msgstr "" +msgstr "计算代码" #. module: account #: view:account.account.template:0 msgid "Default taxes" -msgstr "" +msgstr "默认税" #. module: account #: code:addons/account/invoice.py:88 @@ -3866,12 +3870,12 @@ msgstr "" #. module: account #: field:account.journal,view_id:0 msgid "Display Mode" -msgstr "" +msgstr "显示模式" #. module: account #: model:process.node,note:account.process_node_importinvoice0 msgid "Statement from invoice or payment" -msgstr "" +msgstr "发票或付款清单" #. module: account #: view:account.payment.term.line:0 @@ -3881,7 +3885,7 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_account_chart msgid "Account chart" -msgstr "" +msgstr "科目表" #. module: account #: report:account.account.balance.landscape:0 @@ -3893,23 +3897,23 @@ msgstr "科目名称" #. module: account #: help:account.fiscalyear.close,report_name:0 msgid "Give name of the new entries" -msgstr "" +msgstr "给新条目名称" #. module: account #: model:ir.model,name:account.model_account_invoice_report msgid "Invoices Statistics" -msgstr "" +msgstr "发票统计" #. module: account #: model:process.transition,note:account.process_transition_paymentorderreconcilation0 msgid "Bank statements are entered in the system." -msgstr "" +msgstr "把银行对账单输入到系统中。" #. module: account #: code:addons/account/wizard/account_reconcile.py:133 #, python-format msgid "Reconcile Writeoff" -msgstr "" +msgstr "核销注销" #. module: account #: field:account.model.line,date_maturity:0 @@ -3932,17 +3936,17 @@ msgstr "期终结余" #: code:addons/account/report/common_report_header.py:92 #, python-format msgid "Not implemented" -msgstr "" +msgstr "未实现" #. module: account #: model:ir.model,name:account.model_account_journal_select msgid "Account Journal Select" -msgstr "" +msgstr "选择明细科目" #. module: account #: view:account.invoice:0 msgid "Print Invoice" -msgstr "" +msgstr "打印发票" #. module: account #: view:account.tax.template:0 @@ -3969,7 +3973,7 @@ msgstr "" #. module: account #: view:account.unreconcile:0 msgid "Unreconciliate transactions" -msgstr "" +msgstr "反核销业务" #. module: account #: view:account.use.model:0 @@ -4011,13 +4015,13 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_account_analytic_cost_ledger_journal_report msgid "Account Analytic Cost Ledger For Journal Report" -msgstr "" +msgstr "分析本期成本总帐的报表" #. module: account #: model:ir.actions.act_window,name:account.action_model_form #: model:ir.ui.menu,name:account.menu_action_model_form msgid "Recurring Models" -msgstr "" +msgstr "经常性模型" #. module: account #: selection:account.automatic.reconcile,power:0 @@ -4053,12 +4057,12 @@ msgstr "类型控制" #. module: account #: help:account.journal,default_credit_account_id:0 msgid "It acts as a default account for credit amount" -msgstr "" +msgstr "它将充当默认帐户的信贷数额" #. module: account #: help:account.partner.ledger,reconcil:0 msgid "Consider reconciled entries" -msgstr "" +msgstr "考虑核销项" #. module: account #: model:ir.actions.act_window,name:account.action_validate_account_move_line @@ -4066,7 +4070,7 @@ msgstr "" #: view:validate.account.move:0 #: view:validate.account.move.lines:0 msgid "Post Journal Entries" -msgstr "" +msgstr "职位明细帐" #. module: account #: selection:account.invoice,state:0 @@ -4078,7 +4082,7 @@ msgstr "已取消" #. module: account #: help:account.bank.statement,balance_end_cash:0 msgid "Closing balance based on cashBox" -msgstr "" +msgstr "出纳帐面余额" #. module: account #: constraint:account.account:0 @@ -4091,12 +4095,12 @@ msgstr "错误!你不能创建递归的科目" #: model:ir.actions.act_window,name:account.action_account_subscription_generate #: model:ir.ui.menu,name:account.menu_generate_subscription msgid "Generate Entries" -msgstr "" +msgstr "生成凭证" #. module: account #: help:account.vat.declaration,chart_tax_id:0 msgid "Select Charts of Taxes" -msgstr "" +msgstr "选择税种" #. module: account #: view:account.fiscal.position:0 @@ -4117,12 +4121,12 @@ msgstr "客户" #. module: account #: view:account.bank.statement:0 msgid "Confirmed" -msgstr "" +msgstr "确认" #. module: account #: report:account.invoice:0 msgid "Cancelled Invoice" -msgstr "" +msgstr "取消发票" #. module: account #: code:addons/account/invoice.py:73 @@ -4171,7 +4175,7 @@ msgstr "" #. module: account #: field:account.automatic.reconcile,date1:0 msgid "Starting Date" -msgstr "" +msgstr "开始日期" #. module: account #: field:account.chart.template,property_account_income:0 @@ -4182,7 +4186,7 @@ msgstr "产品模板的收入科目" #: help:res.partner,last_reconciliation_date:0 msgid "" "Date on which the partner accounting entries were reconciled last time" -msgstr "" +msgstr "合作伙伴在此日期中的最后一次对账" #. module: account #: field:account.fiscalyear.close,fy2_id:0 @@ -9585,3 +9589,18 @@ msgid "" "The residual amount on a receivable or payable of a journal entry expressed " "in its currency (maybe different of the company currency)." msgstr "" + +#~ msgid "Print Voucher" +#~ msgstr "打印原始凭证" + +#~ msgid "Ref. :" +#~ msgstr "关联单号:" + +#~ msgid "Canceled" +#~ msgstr "已作废" + +#~ msgid "Authorised Signatory" +#~ msgstr "授权的签字人" + +#~ msgid "Journal:" +#~ msgstr "账簿:" diff --git a/addons/base_synchro/i18n/vi.po b/addons/base_synchro/i18n/vi.po new file mode 100644 index 00000000000..b27a4889640 --- /dev/null +++ b/addons/base_synchro/i18n/vi.po @@ -0,0 +1,289 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-07-06 04:09+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-07-06 05:17+0000\n" +"X-Generator: Launchpad (build 13168)\n" + +#. module: base_synchro +#: model:ir.actions.act_window,name:base_synchro.action_view_base_synchro +msgid "Base Synchronization" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.server,server_db:0 +msgid "Server Database" +msgstr "" + +#. module: base_synchro +#: view:base.synchro.server:0 +#: model:ir.model,name:base_synchro.model_base_synchro_server +msgid "Synchronized server" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj.avoid,name:0 +msgid "Field Name" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj,synchronize_date:0 +msgid "Latest Synchronization" +msgstr "" + +#. module: base_synchro +#: field:base.synchro,user_id:0 +msgid "Send Result To" +msgstr "" + +#. module: base_synchro +#: model:ir.model,name:base_synchro.model_base_synchro_obj_avoid +msgid "Fields to not synchronize" +msgstr "" + +#. module: base_synchro +#: view:base.synchro:0 +msgid "_Close" +msgstr "" + +#. module: base_synchro +#: view:base.synchro:0 +msgid "Transfer Data To Server" +msgstr "" + +#. module: base_synchro +#: model:ir.model,name:base_synchro.model_base_synchro_obj +msgid "Register Class" +msgstr "" + +#. module: base_synchro +#: view:base.synchro.obj:0 +#: model:ir.actions.act_window,name:base_synchro.action_transfer_tree +#: model:ir.ui.menu,name:base_synchro.transfer_menu_id +msgid "Synchronized objects" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.server,obj_ids:0 +msgid "Models" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj.avoid,obj_id:0 +#: view:base.synchro.obj.line:0 +#: field:base.synchro.obj.line,obj_id:0 +msgid "Object" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.server,login:0 +msgid "User Name" +msgstr "" + +#. module: base_synchro +#: view:base.synchro.obj:0 +#: view:base.synchro.obj.line:0 +msgid "Group By" +msgstr "" + +#. module: base_synchro +#: selection:base.synchro.obj,action:0 +msgid "Upload" +msgstr "" + +#. module: base_synchro +#: view:base.synchro.obj:0 +msgid "Latest synchronization" +msgstr "" + +#. module: base_synchro +#: model:ir.module.module,description:base_synchro.module_meta_information +msgid "Synchronization with all objects." +msgstr "" + +#. module: base_synchro +#: view:base.synchro.obj.line:0 +#: field:base.synchro.obj.line,name:0 +msgid "Date" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.server,password:0 +msgid "Password" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj,avoid_ids:0 +msgid "Fields Not Sync." +msgstr "" + +#. module: base_synchro +#: selection:base.synchro.obj,action:0 +msgid "Both" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj,name:0 +msgid "Name" +msgstr "" + +#. module: base_synchro +#: view:base.synchro.obj:0 +msgid "Fields" +msgstr "" + +#. module: base_synchro +#: view:base.synchro.obj.line:0 +msgid "Transfered Ids Details" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj,action:0 +msgid "Synchronisation direction" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj,server_id:0 +msgid "Server" +msgstr "" + +#. module: base_synchro +#: model:ir.actions.act_window,name:base_synchro.action_base_synchro_obj_line_tree +#: model:ir.model,name:base_synchro.model_base_synchro_obj_line +#: model:ir.ui.menu,name:base_synchro.menu_action_base_synchro_obj_line_tree +msgid "Synchronized instances" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj,active:0 +msgid "Active" +msgstr "" + +#. module: base_synchro +#: view:base.synchro.obj:0 +#: field:base.synchro.obj,model_id:0 +msgid "Object to synchronize" +msgstr "" + +#. module: base_synchro +#: model:ir.module.module,shortdesc:base_synchro.module_meta_information +msgid "Base Synchro" +msgstr "" + +#. module: base_synchro +#: model:ir.actions.act_window,name:base_synchro.action_base_synchro_server_tree +#: model:ir.ui.menu,name:base_synchro.synchro_server_tree_menu_id +msgid "Servers to be synchronized" +msgstr "" + +#. module: base_synchro +#: view:base.synchro.obj:0 +msgid "Transfer Details" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj.line,remote_id:0 +msgid "Remote Id" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj,line_id:0 +msgid "Ids Affected" +msgstr "" + +#. module: base_synchro +#: model:ir.ui.menu,name:base_synchro.next_id_63 +msgid "History" +msgstr "" + +#. module: base_synchro +#: model:ir.ui.menu,name:base_synchro.next_id_62 +#: model:ir.ui.menu,name:base_synchro.synch_config +msgid "Synchronization" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj,domain:0 +msgid "Domain" +msgstr "" + +#. module: base_synchro +#: view:base.synchro:0 +msgid "_Synchronize" +msgstr "" + +#. module: base_synchro +#: view:base.synchro:0 +msgid "OK" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.server,name:0 +msgid "Server name" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: base_synchro +#: view:base.synchro:0 +msgid "" +"The synchronisation has been started.You will receive a request when it's " +"done." +msgstr "" + +#. module: base_synchro +#: field:base.synchro.server,server_port:0 +msgid "Server Port" +msgstr "" + +#. module: base_synchro +#: model:ir.ui.menu,name:base_synchro.menu_action_view_base_synchro +msgid "Synchronize objects" +msgstr "" + +#. module: base_synchro +#: view:base.synchro:0 +msgid "Synchronization Complited!" +msgstr "" + +#. module: base_synchro +#: model:ir.model,name:base_synchro.model_base_synchro +msgid "base.synchro" +msgstr "" + +#. module: base_synchro +#: field:base.synchro.obj.line,local_id:0 +msgid "Local Id" +msgstr "" + +#. module: base_synchro +#: model:ir.actions.act_window,name:base_synchro.actions_regclass_tree +#: model:ir.actions.act_window,name:base_synchro.actions_transfer_line_form +msgid "Filters" +msgstr "" + +#. module: base_synchro +#: selection:base.synchro.obj,action:0 +msgid "Download" +msgstr "" + +#. module: base_synchro +#: field:base.synchro,server_url:0 +#: field:base.synchro.server,server_url:0 +msgid "Server URL" +msgstr "" diff --git a/addons/event_project/i18n/tr.po b/addons/event_project/i18n/tr.po index 17ac7a28c8d..c32739da546 100644 --- a/addons/event_project/i18n/tr.po +++ b/addons/event_project/i18n/tr.po @@ -7,29 +7,29 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: Mustafa Yılmaz \n" +"PO-Revision-Date: 2011-07-05 09:04+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-01-25 06:39+0000\n" -"X-Generator: Launchpad (build 12177)\n" +"X-Launchpad-Export-Date: 2011-07-06 05:17+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: event_project #: model:ir.model,name:event_project.model_event_project msgid "Event Project" -msgstr "" +msgstr "Etkinlik Projesi" #. module: event_project #: field:event.project,date:0 msgid "Date End" -msgstr "" +msgstr "Bitiş Tarihi" #. module: event_project #: view:event.project:0 msgid "Ok" -msgstr "Tamam" +msgstr "Tmm" #. module: event_project #: model:ir.module.module,description:event_project.module_meta_information @@ -39,6 +39,10 @@ msgid "" " This module allows you to create retro planning for managing your " "events.\n" msgstr "" +"Etkinliklerin düzenlenmesi ve yönetimi.\n" +"\n" +" Bu modül, etkinlerinizin yönetebilmeniz için geriye dönük plan " +"oluşturmanızı sağlar.\n" #. module: event_project #: help:event.project,project_id:0 @@ -47,17 +51,20 @@ msgid "" "After click on 'Create Retro-planning', New Project will be duplicated from " "this template project." msgstr "" +"Bu Proje Şablonudur. Etkinlik projesi bu Şablonun eşidir, 'Geriye Dönük-" +"planlama' ya tıkladıktan sonra, Yeni Proje bu proje şablonundan " +"türetilecektir." #. module: event_project #: view:event.project:0 #: model:ir.actions.act_window,name:event_project.action_event_project msgid "Retro-Planning" -msgstr "" +msgstr "Geriye Dönük-Planlama" #. module: event_project #: constraint:event.event:0 msgid "Error ! Closing Date cannot be set before Beginning Date." -msgstr "" +msgstr "Hata ! Kapanış Tarihi, Başlangıç Tarihinden önceye ayarlanamaz." #. module: event_project #: field:event.event,project_id:0 @@ -73,22 +80,24 @@ msgstr "Görevler" #. module: event_project #: view:event.event:0 msgid "All tasks" -msgstr "" +msgstr "Tüm görevler" #. module: event_project #: model:ir.module.module,shortdesc:event_project.module_meta_information msgid "Event Project - Create Retro-Planning to manage your Events" msgstr "" +"Etkinlik Projesi - Etikinlerinizi yönetmek için Geriye Dönük Planlama " +"oluşturun" #. module: event_project #: field:event.project,project_id:0 msgid "Template of Project" -msgstr "" +msgstr "Proje Şablonu" #. module: event_project #: constraint:event.event:0 msgid "Error ! You cannot create recursive event." -msgstr "" +msgstr "Hata ! Yinelenen etkinlik oluşturmazsınız." #. module: event_project #: field:event.event,task_ids:0 @@ -98,22 +107,22 @@ msgstr "Proje görevleri" #. module: event_project #: view:event.project:0 msgid "Close" -msgstr "" +msgstr "Kapat" #. module: event_project #: field:event.project,date_start:0 msgid "Date Start" -msgstr "" +msgstr "Başlangıç Tarihi" #. module: event_project #: view:event.event:0 msgid "Create Retro-Planning" -msgstr "Retro-Planning Oluştur." +msgstr "Geriye Dönük Planlama Oluştur." #. module: event_project #: model:ir.model,name:event_project.model_event_event msgid "Event" -msgstr "Olay" +msgstr "Etkinlik" #. module: event_project #: view:event.event:0 diff --git a/addons/mrp/i18n/zh_CN.po b/addons/mrp/i18n/zh_CN.po index a6b3accb4c0..a6796dfdc54 100644 --- a/addons/mrp/i18n/zh_CN.po +++ b/addons/mrp/i18n/zh_CN.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:19+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: Wei \"oldrev\" Li \n" +"PO-Revision-Date: 2011-07-05 15:38+0000\n" +"Last-Translator: Jeff Wang \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:35+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-06 05:17+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: mrp #: field:mrp.production,move_created_ids:0 @@ -31,21 +31,22 @@ msgid "" "raw materials (stock decrease) and the production of the finished products " "(stock increase) when the order is processed." msgstr "" +"生产订单一般是由OpenERP根据BOM和补货规则自动生成的,但也可以手工输入。在生产订单处理过程中OpenERP负责原材料的消耗和产成品的产出。" #. module: mrp #: help:mrp.production,location_src_id:0 msgid "Location where the system will look for components." -msgstr "" +msgstr "系统用于查找部件的位置。" #. module: mrp #: field:mrp.production,workcenter_lines:0 msgid "Work Centers Utilisation" -msgstr "" +msgstr "工作中心" #. module: mrp #: view:mrp.routing.workcenter:0 msgid "Routing Work Centers" -msgstr "" +msgstr "工序所在工作中心" #. module: mrp #: model:ir.module.module,shortdesc:mrp.module_meta_information @@ -67,7 +68,7 @@ msgstr "周期数" msgid "" "The 'Minimum stock rule' allows the system to create procurement orders " "automatically as soon as the minimum stock is reached." -msgstr "" +msgstr "最小库存规则允许系统在达到最小库存数量的时候立即创建补货单" #. module: mrp #: field:mrp.production,picking_id:0 @@ -90,7 +91,7 @@ msgstr "单位成本" #. module: mrp #: view:mrp.production:0 msgid "Scrap Products" -msgstr "" +msgstr "原料消耗" #. module: mrp #: view:mrp.production.order:0 @@ -107,7 +108,7 @@ msgstr "工艺路线" #. module: mrp #: field:mrp.workcenter,product_id:0 msgid "Work Center Product" -msgstr "" +msgstr "工作中心产品" #. module: mrp #: view:mrp.bom:0 @@ -117,7 +118,7 @@ msgstr "搜索物料表" #. module: mrp #: model:process.node,note:mrp.process_node_stockproduct1 msgid "For stockable products and consumables" -msgstr "" +msgstr "可库存的物料或消耗品" #. module: mrp #: model:process.transition,name:mrp.process_transition_stockproduction0 @@ -129,7 +130,7 @@ msgstr "待生产" msgid "" "Number of iterations this work center has to do in the specified operation " "of the routing." -msgstr "" +msgstr "工作中心完成这道工序需要执行的次数" #. module: mrp #: view:mrp.bom:0 @@ -160,12 +161,12 @@ msgstr "原料位置" msgid "" "Enhances production orders with readiness states as well as the start date " "and end date of execution of the order." -msgstr "" +msgstr "增强了生产订单功能,订单状态的可读性更强了,并增加了订单执行的开始日期和结束日期" #. module: mrp #: model:process.transition,note:mrp.process_transition_purchaseprocure0 msgid "The system launches automatically a RFQ to the preferred supplier." -msgstr "" +msgstr "系统将自动向首选供应商发起询价单。" #. module: mrp #: view:mrp.production:0 @@ -200,7 +201,7 @@ msgstr "每小时成本" msgid "" "This is used in case of a service without any impact in the system, a " "training session for instance." -msgstr "" +msgstr "用于对系统无任何影响的服务,例如一次培训。" #. module: mrp #: view:mrp.production:0 @@ -222,12 +223,12 @@ msgstr "产品数量" msgid "" "Fill this product to track easily your production costs in the analytic " "accounting." -msgstr "" +msgstr "输入一个费用产品用于跟踪辅助核算会计中的成本" #. module: mrp #: model:process.node,note:mrp.process_node_purchaseprocure0 msgid "For purchased material" -msgstr "" +msgstr "用于采购原料" #. module: mrp #: field:mrp.bom.revision,indice:0 @@ -273,7 +274,7 @@ msgstr "目标库位" #. module: mrp #: view:mrp.installer:0 msgid "title" -msgstr "" +msgstr "标题" #. module: mrp #: model:ir.ui.menu,name:mrp.menu_mrp_bom @@ -285,7 +286,7 @@ msgstr "控制数据" msgid "" "The system waits for the products to be available in the stock. These " "products are typically procured manually or through a minimum stock rule." -msgstr "" +msgstr "系统等待原材料在对应库位可用。这些原材料一般是手工输入独立需求或通过最小库存规则触发需求。" #. module: mrp #: report:mrp.production.order:0 @@ -320,7 +321,7 @@ msgstr "八月" #. module: mrp #: constraint:stock.move:0 msgid "You try to assign a lot which is not from the same product" -msgstr "" +msgstr "您尝试为另外的产品赋予批次" #. module: mrp #: model:ir.model,name:mrp.model_mrp_production_order @@ -335,7 +336,7 @@ msgstr "六月" #. module: mrp #: model:ir.model,name:mrp.model_mrp_product_produce msgid "Product Produce" -msgstr "" +msgstr "产品生产" #. module: mrp #: selection:mrp.production.order,month:0 @@ -346,12 +347,12 @@ msgstr "十月" #: code:addons/mrp/report/price.py:177 #, python-format msgid "Components Cost of " -msgstr "" +msgstr "产品成本构成 " #. module: mrp #: model:process.transition,name:mrp.process_transition_procurestockableproduct0 msgid "Procurement of stockable Product" -msgstr "" +msgstr "可库存产品的补货" #. module: mrp #: view:mrp.bom:0 @@ -370,7 +371,7 @@ msgstr "数量" #. module: mrp #: field:mrp.production.workcenter.line,hour:0 msgid "Nbr of hours" -msgstr "" +msgstr "小时数" #. module: mrp #: view:mrp.production:0 @@ -382,14 +383,14 @@ msgstr "确认生产" msgid "" "The system creates an order (production or purchased) depending on the sold " "quantity and the products parameters." -msgstr "" +msgstr "系统根据销售的数量和产品的参数创建一张订单(生产订单或采购订单)" #. module: mrp #: model:process.transition,note:mrp.process_transition_stockproduction0 msgid "" "In case the Supply method of the product is Produce, the system creates a " "production order." -msgstr "" +msgstr "如果产品的供应方法是自制,则系统创建生产订单。" #. module: mrp #: field:mrp.installer,mrp_repair:0 @@ -399,7 +400,7 @@ msgstr "维修" #. module: mrp #: field:mrp.installer,stock_location:0 msgid "Advanced Routes" -msgstr "" +msgstr "高级路线" #. module: mrp #: model:ir.ui.menu,name:mrp.menu_view_resource_calendar_search_mrp @@ -416,7 +417,7 @@ msgstr "每周库存值变动" msgid "" "Enables warranty and repair management (and their impact on stocks and " "invoicing)." -msgstr "" +msgstr "实现质保期和维修管理(极其对库存和发票的影响)" #. module: mrp #: field:mrp.production,date_planned_date:0 @@ -441,7 +442,7 @@ msgstr "如果你在本地生产这成品你需要留空" #. module: mrp #: view:board.board:0 msgid "Stock Value Variation" -msgstr "" +msgstr "库存价值差异" #. module: mrp #: model:ir.actions.act_window,name:mrp.action2 @@ -458,17 +459,17 @@ msgstr "产品的类型是服务" msgid "" "Define specific property groups that can be assigned to the properties of " "your bill of materials." -msgstr "" +msgstr "定义属性组用于分配给物料清单上的属性" #. module: mrp #: model:process.transition,name:mrp.process_transition_bom0 msgid "Manufacturing decomposition" -msgstr "" +msgstr "产品数量结构分解" #. module: mrp #: model:process.node,note:mrp.process_node_serviceproduct1 msgid "For Services." -msgstr "" +msgstr "用于服务。" #. module: mrp #: field:mrp.bom.revision,date:0 @@ -486,20 +487,20 @@ msgstr "如果你需要生产单的自动辅助核算项目凭证只有完成这 #. module: mrp #: field:mrp.production.workcenter.line,cycle:0 msgid "Nbr of cycles" -msgstr "" +msgstr "周期数" #. module: mrp #: model:process.node,note:mrp.process_node_orderrfq0 #: model:process.node,note:mrp.process_node_rfq0 msgid "Request for Quotation." -msgstr "" +msgstr "询价单" #. module: mrp #: model:process.transition,note:mrp.process_transition_billofmaterialrouting0 msgid "" "The Bill of Material is linked to a routing, i.e. the succession of work " "centers." -msgstr "" +msgstr "物料清单绑定到工艺,即工作中心的集合" #. module: mrp #: constraint:product.product:0 @@ -540,7 +541,7 @@ msgstr "物料清单结构" #. module: mrp #: view:mrp.production:0 msgid "Search Production" -msgstr "" +msgstr "搜索产品" #. module: mrp #: code:addons/mrp/report/price.py:130 @@ -568,14 +569,14 @@ msgstr "生产" #. module: mrp #: help:mrp.workcenter,costs_cycle:0 msgid "Specify Cost of Work center per cycle." -msgstr "" +msgstr "输入工作中心每个循环的成本" #. module: mrp #: selection:mrp.production,state:0 #: view:mrp.production.order:0 #: selection:mrp.production.order,state:0 msgid "Picking Exception" -msgstr "" +msgstr "领料异常" #. module: mrp #: field:mrp.bom,bom_lines:0 @@ -592,12 +593,12 @@ msgstr "生产准备时间" msgid "" "If the active field is set to False, it will allow you to hide the routing " "without removing it." -msgstr "" +msgstr "如果去掉这个启用的勾,工艺不需要删除就可以隐藏" #. module: mrp #: model:process.transition,name:mrp.process_transition_billofmaterialrouting0 msgid "Material Routing" -msgstr "" +msgstr "产品工艺" #. module: mrp #: view:mrp.production:0 @@ -617,7 +618,7 @@ msgstr "错误!你不能创建递归的物料清单" #: model:ir.model,name:mrp.model_mrp_workcenter_load #: model:ir.model,name:mrp.model_report_workcenter_load msgid "Work Center Load" -msgstr "" +msgstr "工作中心负载" #. module: mrp #: code:addons/mrp/procurement.py:45 @@ -629,7 +630,7 @@ msgstr "该产品尚未定义物料清单!" #: model:ir.actions.act_window,name:mrp.mrp_bom_form_action2 #: model:ir.ui.menu,name:mrp.menu_mrp_bom_form_action2 msgid "Bill of Material Components" -msgstr "" +msgstr "物料清单组件" #. module: mrp #: field:mrp.production.order,nbr:0 @@ -653,7 +654,7 @@ msgid "" "product. The routing is mainly used to compute work center costs during " "operations and to plan future loads on work centers based on production " "plannification." -msgstr "" +msgstr "制造产成品需要的工序列表(也就是工作中心的列表)。工艺主要用于计算工作中心在制造过程中的成本和在生产计划过程中规划工作中心的工作负载" #. module: mrp #: help:mrp.workcenter,time_cycle:0 @@ -663,7 +664,7 @@ msgstr "一个周期的工作小时数" #. module: mrp #: report:bom.structure:0 msgid "BOM Ref" -msgstr "" +msgstr "物料表编号" #. module: mrp #: view:mrp.production:0 @@ -676,14 +677,14 @@ msgstr "生产中" #. module: mrp #: model:ir.ui.menu,name:mrp.menu_mrp_property msgid "Master Bill of Materials" -msgstr "" +msgstr "主物料表" #. module: mrp #: help:mrp.bom,product_uos:0 msgid "" "Product UOS (Unit of Sale) is the unit of measurement for the invoicing and " "promotion of stock." -msgstr "" +msgstr "销售单位是用于开发票和推销产品的计量单位" #. module: mrp #: view:mrp.product_price:0 @@ -702,12 +703,12 @@ msgstr "类型" #: code:addons/mrp/report/price.py:201 #, python-format msgid "Total Cost of " -msgstr "" +msgstr "总成本 " #. module: mrp #: model:process.node,note:mrp.process_node_minimumstockrule0 msgid "Linked to the 'Minimum stock rule' supplying method." -msgstr "" +msgstr "链接到“最小库存规则”供货方式" #. module: mrp #: selection:mrp.workcenter.load,time_unit:0 @@ -736,14 +737,14 @@ msgstr "无效动作" #. module: mrp #: help:mrp.bom,product_efficiency:0 msgid "A factor of 0.9 means a loss of 10% within the production process." -msgstr "" +msgstr "指标值为0.9意味着生产过程中损耗了10%" #. module: mrp #: view:mrp.installer:0 msgid "" "Add more functionalities to the core Manufacturing Application with the " "following addons." -msgstr "" +msgstr "安装以下模块可以在核心制造功能上增加更多的功能" #. module: mrp #: report:mrp.production.order:0 @@ -759,17 +760,17 @@ msgstr "要求报价" #. module: mrp #: model:process.transition,name:mrp.process_transition_producttostockrules0 msgid "Procurement rule" -msgstr "" +msgstr "补货规则" #. module: mrp #: help:mrp.workcenter,costs_hour:0 msgid "Specify Cost of Work center per hour." -msgstr "" +msgstr "输入工作中心每小时的成本" #. module: mrp #: view:mrp.production:0 msgid "Partial" -msgstr "" +msgstr "部分" #. module: mrp #: selection:mrp.production.order,month:0 @@ -787,7 +788,7 @@ msgid "" "Depending on the chosen method to 'supply' the service, the procurement " "order creates a RFQ for a subcontracting purchase order or waits until the " "service is done (= the delivery of the products)." -msgstr "" +msgstr "根据服务供应方法的不同,补货单创建外包的采购订单或等待服务完成(等同于产品交货)" #. module: mrp #: selection:mrp.production,priority:0 @@ -798,7 +799,7 @@ msgstr "紧急" #. module: mrp #: model:ir.model,name:mrp.model_mrp_routing_workcenter msgid "Workcenter Usage" -msgstr "" +msgstr "使用的工作中心" #. module: mrp #: model:ir.model,name:mrp.model_mrp_production @@ -808,14 +809,14 @@ msgstr "生产单" #. module: mrp #: model:process.transition,name:mrp.process_transition_productionprocureproducts0 msgid "Procurement of raw material" -msgstr "" +msgstr "原材料补货" #. module: mrp #: help:mrp.routing.workcenter,hour_nbr:0 msgid "" "Time in hours for this work center to achieve the operation of the specified " "routing." -msgstr "" +msgstr "这个工作中心在这个工序上需要花费的工时数" #. module: mrp #: view:mrp.production:0 @@ -857,7 +858,7 @@ msgstr "扩展过滤器..." #, python-format msgid "" "Procurement '%s' has an exception: 'No BoM defined for this product !'" -msgstr "" +msgstr "补货单 '%s' 发生错误:'没有为产品定义物料清单!'" #. module: mrp #: view:mrp.production.order:0 @@ -869,7 +870,7 @@ msgstr "搜索" #: code:addons/mrp/mrp.py:619 #, python-format msgid "Could not cancel manufacturing order !" -msgstr "" +msgstr "生产订单不能作废!" #. module: mrp #: field:report.workcenter.load,cycle:0 @@ -887,13 +888,13 @@ msgstr "公司" msgid "" "You must first cancel related internal picking attached to this " "manufacturing order." -msgstr "" +msgstr "必须先作废与此生产订单相关的移库单" #. module: mrp #: model:process.node,name:mrp.process_node_minimumstockrule0 #: model:process.node,name:mrp.process_node_productminimumstockrule0 msgid "Minimum Stock" -msgstr "" +msgstr "最小库存" #. module: mrp #: model:ir.ui.menu,name:mrp.menus_dash_mrp @@ -903,7 +904,7 @@ msgstr "仪表盘" #. module: mrp #: view:board.board:0 msgid "Work Center Future Load" -msgstr "" +msgstr "工作中心未来负载" #. module: mrp #: model:process.node,name:mrp.process_node_stockproduct0 @@ -916,7 +917,7 @@ msgstr "可库存产品" #: code:addons/mrp/report/price.py:121 #, python-format msgid "Work Center name" -msgstr "" +msgstr "工作中心名称" #. module: mrp #: field:mrp.routing,code:0 @@ -931,7 +932,7 @@ msgstr "小时编号" #. module: mrp #: field:mrp.installer,mrp_jit:0 msgid "Just In Time Scheduling" -msgstr "" +msgstr "及时生产计划" #. module: mrp #: view:mrp.property:0 @@ -960,7 +961,7 @@ msgstr "未活动的" msgid "" "Enables multiple product output from a single production order: without " "this, a production order can have only one output product." -msgstr "" +msgstr "可以让一张生产订单产出多种产品。没有这个模块,一张生产订单只能产出一种产品。" #. module: mrp #: view:change.production.qty:0 @@ -981,14 +982,14 @@ msgstr "拆分生产批次" msgid "" "Number of operations this work center can do in parallel. If this work " "center represents a team of 5 workers, the capacity per cycle is 5." -msgstr "" +msgstr "这个工作中心可以并行工作的数量。如果一个工作中心是一个5个工人组成的团队,每个循环的能力就是5" #. module: mrp #: model:process.transition,note:mrp.process_transition_servicerfq0 msgid "" "If the service has a 'Buy' supply method, this creates a RFQ, a " "subcontracting demand for instance." -msgstr "" +msgstr "如果这个服务的供应方法是'外购',这里会创建一个采购申请,比如外包请求。" #. module: mrp #: field:mrp.production,move_prod_id:0 @@ -998,7 +999,7 @@ msgstr "产品调拨" #. module: mrp #: view:mrp.production:0 msgid "Late" -msgstr "" +msgstr "延迟" #. module: mrp #: model:process.node,name:mrp.process_node_servicemts0 @@ -1009,12 +1010,12 @@ msgstr "按库存生产" #: help:mrp.routing.workcenter,sequence:0 msgid "" "Gives the sequence order when displaying a list of routing work centers." -msgstr "" +msgstr "指定序号用于在工艺中显示工作中心的顺序" #. module: mrp #: report:bom.structure:0 msgid "BOM Name" -msgstr "" +msgstr "物料表名称" #. module: mrp #: view:mrp.production:0 @@ -1025,29 +1026,29 @@ msgstr "启动生产" #: model:ir.actions.act_window,name:mrp.open_board_manufacturing #: model:ir.ui.menu,name:mrp.menu_board_manufacturing msgid "Production Dashboard" -msgstr "" +msgstr "生产仪表盘" #. module: mrp #: view:mrp.production:0 msgid "Source Loc." -msgstr "" +msgstr "来源位置" #. module: mrp #: field:mrp.bom,position:0 msgid "Internal Reference" -msgstr "" +msgstr "内部单号" #. module: mrp #: help:mrp.installer,stock_location:0 msgid "" "Manages product routes and paths within and between locations (e.g. " "warehouses)." -msgstr "" +msgstr "管理产品在仓库内和仓库间的流转路径" #. module: mrp #: model:process.node,note:mrp.process_node_billofmaterial0 msgid "Product's structure" -msgstr "" +msgstr "产品结构" #. module: mrp #: field:mrp.bom,name:0 @@ -1061,7 +1062,7 @@ msgstr "名称" #. module: mrp #: view:mrp.installer:0 msgid "MRP Application Configuration" -msgstr "" +msgstr "生产功能配置" #. module: mrp #: help:mrp.installer,mrp_jit:0 @@ -1072,16 +1073,18 @@ msgid "" "avoids having to wait for the procurement scheduler to run or having to run " "the procurement scheduler manually." msgstr "" +"能够即时地计算补货单。\n" +"虽然这比定期运行MRP的方式需要更多材料,即时运算避免了等待MRP运行或手动触发MRP运行。" #. module: mrp #: field:mrp.product.produce,mode:0 msgid "Mode" -msgstr "" +msgstr "模式" #. module: mrp #: report:bom.structure:0 msgid "]" -msgstr "" +msgstr "]" #. module: mrp #: field:mrp.workcenter.load,measure_unit:0 @@ -1098,16 +1101,18 @@ msgid "" "materials have been defined, OpenERP is capable of automatically deciding on " "the manufacturing route depending on the needs of the company." msgstr "" +"生产订单描述了制造产品过程中需要的生产过程和消耗的原材料。你用物料清单描述了原料的需求以及生产订单要生产的产成品。选择了物料清单后,OpenERP就能根据" +"企业的需求自动决定制造的工艺。" #. module: mrp #: constraint:mrp.production:0 msgid "Order quantity cannot be negative or zero !" -msgstr "" +msgstr "订单数量不能为0或者负数!" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_production_action3 msgid "Manufacturing Orders in Progress" -msgstr "" +msgstr "未完成的生产订单" #. module: mrp #: model:ir.module.module,description:mrp.module_meta_information @@ -1147,11 +1152,43 @@ msgid "" " * List of procurement in exception\n" " " msgstr "" +"\n" +" 这是OpenERP中管理生产过程的基本模块。\n" +"功能:\n" +"按订单生产或按库存生产\n" +"多层物料清单,层数不限\n" +"多层工艺,层数不限\n" +"工艺和工作中心与辅助核算会计集成\n" +"定期运行MRP或使用即时计算模块\n" +"多地点,多仓库\n" +"多种补货规则\n" +"每个产品的成本计价方式:标准价或移动平均价\n" +"容易诊断问题和需求\n" +"非常灵活\n" +"能够以复杂的结构展示物料清单\n" +"支持子BOM和虚拟BOM\n" +"支持可库存产品、消耗品和服务的完全集成和计划\n" +"服务也与软件的其他功能很好地集成了。例如,你\n" +"可以在BOM里添加一个外包的服务产品,这样就能\n" +"自动创建装配的外包订单。\n" +"\n" +"此模块提供的报表:\n" +"BOM结构和部件\n" +"工作中心的负载计划\n" +"打印生产订单\n" +"库存规划\n" +"\n" +"此模块提供的控制台:\n" +"未完成的生产订单列表\n" +"发货单列表\n" +"工作中心负载图\n" +"补货错误的列表\n" +" " #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_production_action4 msgid "Manufacturing Orders Waiting Products" -msgstr "" +msgstr "等待原材料的生产订单" #. module: mrp #: view:mrp.bom:0 @@ -1161,7 +1198,7 @@ msgstr "" #: view:mrp.routing:0 #: view:mrp.workcenter:0 msgid "Group By..." -msgstr "" +msgstr "分组..." #. module: mrp #: code:addons/mrp/report/price.py:121 @@ -1184,7 +1221,7 @@ msgstr "成品库位" #. module: mrp #: model:ir.ui.menu,name:mrp.menu_pm_resources_config msgid "Resources" -msgstr "" +msgstr "资源" #. module: mrp #: field:mrp.workcenter,costs_journal_id:0 @@ -1196,7 +1233,7 @@ msgstr "分析日记账" #: model:ir.ui.menu,name:mrp.menu_view_resource_search_mrp #: field:mrp.routing,workcenter_lines:0 msgid "Work Centers" -msgstr "" +msgstr "工作中心" #. module: mrp #: selection:mrp.workcenter.load,time_unit:0 @@ -1210,7 +1247,7 @@ msgid "" "should be followed within your work centers in order to produce a product. " "They are attached to bills of materials that will define the required raw " "materials." -msgstr "" +msgstr "工艺允许创建或管理在工作中心上要执行的操作。它被指定给物料清单。" #. module: mrp #: field:report.workcenter.load,hour:0 @@ -1220,7 +1257,7 @@ msgstr "小时数" #. module: mrp #: view:mrp.routing:0 msgid "Work Center Operations" -msgstr "" +msgstr "工作中心操作" #. module: mrp #: view:mrp.routing:0 @@ -1244,7 +1281,7 @@ msgstr "选择时间单位" #. module: mrp #: view:report.workcenter.load:0 msgid "Work Center load" -msgstr "" +msgstr "工作中心负载" #. module: mrp #: help:mrp.production,location_dest_id:0 @@ -1256,17 +1293,17 @@ msgstr "系统存储成品的库位" msgid "" "This is the internal picking list that brings the finished product to the " "production plan" -msgstr "" +msgstr "这是一张移库单的编号,是把产成品从生产线上移动到库房里" #. module: mrp #: field:stock.change.standard.price,change_parent_price:0 msgid "Change Parent Price" -msgstr "" +msgstr "修改标准价" #. module: mrp #: model:ir.model,name:mrp.model_stock_move msgid "Stock Move" -msgstr "" +msgstr "库存调拨" #. module: mrp #: model:process.transition,note:mrp.process_transition_producttostockrules0 @@ -1274,7 +1311,7 @@ msgid "" "The Minimum Stock Rule is an automatic procurement rule based on a mini and " "maxi quantity. It's available in the Inventory management menu and " "configured by product." -msgstr "" +msgstr "最小库存规则是基于最小和最大库存数量定义的自动补货规则。菜单在库存管理菜单下,是针对每产品来配置的。" #. module: mrp #: selection:mrp.workcenter.load,time_unit:0 @@ -1289,7 +1326,7 @@ msgstr "修改" #. module: mrp #: view:mrp.installer:0 msgid "Configure Your Manufacturing Resource Planning Application" -msgstr "" +msgstr "配置你的制造模块" #. module: mrp #: field:mrp.production,priority:0 @@ -1300,18 +1337,18 @@ msgstr "优先级" #. module: mrp #: model:ir.model,name:mrp.model_stock_picking msgid "Picking List" -msgstr "" +msgstr "移库单" #. module: mrp #: view:mrp.production.order:0 msgid "Month -1" -msgstr "" +msgstr "上个月" #. module: mrp #: code:addons/mrp/mrp.py:924 #, python-format msgid "Manufacturing order '%s' is scheduled for the %s." -msgstr "" +msgstr "生产订单 '%s' 已创建,要生产的是 %s" #. module: mrp #: report:mrp.production.order:0 @@ -1322,12 +1359,12 @@ msgstr "生产单号:" #: code:addons/mrp/mrp.py:640 #, python-format msgid "Manufacturing order '%s' is ready to produce." -msgstr "" +msgstr "生产订单 '%s' 已可以开始生产" #. module: mrp #: model:ir.model,name:mrp.model_mrp_production_product_line msgid "Production Scheduled Product" -msgstr "" +msgstr "要生产的产品" #. module: mrp #: help:res.company,manufacturing_lead:0 @@ -1337,7 +1374,7 @@ msgstr "每个生产活动的确保天数" #. module: mrp #: view:mrp.bom:0 msgid "Component Name" -msgstr "" +msgstr "部件名称" #. module: mrp #: model:process.node,name:mrp.process_node_mts0 @@ -1349,7 +1386,7 @@ msgstr "按库存生产" #. module: mrp #: selection:mrp.production.order,month:0 msgid "July" -msgstr "" +msgstr "七月" #. module: mrp #: model:ir.actions.act_window,help:mrp.mrp_bom_form_action @@ -1360,13 +1397,15 @@ msgid "" "product needs. You can either create a bill of materials to define specific " "production steps or define a single multi-level bill of materials." msgstr "" +"主物料清单允许创建和管理生产此产品必需的原材料。OpenERP将根据这些物料清单针对产品需求创建生产订单。可以创建一个描述生产步骤的订单也可以定义一个多层" +"的物料清单。" #. module: mrp #: model:process.transition,note:mrp.process_transition_stockrfq0 msgid "" "In case the Supply method of the product is Buy, the system creates a " "purchase order." -msgstr "" +msgstr "如果产品的供应方法是外购,系统创建采购订单。" #. module: mrp #: model:ir.model,name:mrp.model_procurement_order @@ -1383,34 +1422,34 @@ msgstr "产品成本构成" #: code:addons/mrp/report/price.py:130 #, python-format msgid "Components suppliers" -msgstr "" +msgstr "部件供应商" #. module: mrp #: model:ir.model,name:mrp.model_mrp_installer msgid "mrp.installer" -msgstr "" +msgstr "mrp.installer" #. module: mrp #: view:mrp.production:0 msgid "Production Work Centers" -msgstr "" +msgstr "生产工作中心" #. module: mrp #: view:mrp.production.order:0 #: field:mrp.production.order,month:0 msgid "Month" -msgstr "" +msgstr "月份" #. module: mrp #: code:addons/mrp/wizard/change_production_qty.py:62 #, python-format msgid "Active Id is not found" -msgstr "" +msgstr "没找到对应的记录" #. module: mrp #: view:mrp.workcenter:0 msgid "Search for mrp workcenter" -msgstr "" +msgstr "工作中心列表" #. module: mrp #: view:mrp.bom:0 @@ -1431,17 +1470,17 @@ msgstr "时间科目" #. module: mrp #: view:mrp.production:0 msgid "Destination Loc." -msgstr "" +msgstr "目的库位" #. module: mrp #: field:mrp.production.order,product_id2:0 msgid "Product Consumed" -msgstr "" +msgstr "原材料" #. module: mrp #: view:mrp.production:0 msgid "Pending" -msgstr "" +msgstr "等待中" #. module: mrp #: field:mrp.bom,active:0 @@ -1458,7 +1497,7 @@ msgstr "生产产品" #: model:ir.actions.act_window,name:mrp.action_report_workcenter_load_tree #: view:report.workcenter.load:0 msgid "Work Center Loads" -msgstr "" +msgstr "工作中心负载" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_property_action @@ -1475,7 +1514,7 @@ msgstr "属性" #: help:mrp.production,origin:0 msgid "" "Reference of the document that generated this production order request." -msgstr "" +msgstr "生成这张生产订单的前置单据编号" #. module: mrp #: sql_constraint:mrp.bom:0 @@ -1484,6 +1523,8 @@ msgid "" "You should install the mrp_subproduct module if you want to manage extra " "products on BoMs !" msgstr "" +"所有产品的数量必须大于0。\n" +"如果需要管理带副产品的BOM请安装 mrp_subproduct 模块" #. module: mrp #: view:mrp.production:0 @@ -1493,17 +1534,17 @@ msgstr "额外信息" #. module: mrp #: model:ir.model,name:mrp.model_change_production_qty msgid "Change Quantity of Products" -msgstr "" +msgstr "修改产成品数量" #. module: mrp #: model:process.node,note:mrp.process_node_productionorder0 msgid "Drives the procurement orders for raw material." -msgstr "" +msgstr "生成原材料的补货单" #. module: mrp #: view:mrp.production.order:0 msgid "Current" -msgstr "" +msgstr "当前的" #. module: mrp #: field:mrp.workcenter,costs_general_account_id:0 @@ -1525,14 +1566,14 @@ msgstr "完成" #. module: mrp #: model:ir.model,name:mrp.model_stock_change_standard_price msgid "Change Standard Price" -msgstr "" +msgstr "更改标准价" #. module: mrp #: field:mrp.production,origin:0 #: report:mrp.production.order:0 #: field:mrp.production.order,origin:0 msgid "Source Document" -msgstr "" +msgstr "源单据" #. module: mrp #: selection:mrp.production,priority:0 @@ -1545,18 +1586,18 @@ msgstr "不紧急" msgid "" "This will change the price of parent products also according to the BoM " "structure specified for the product." -msgstr "" +msgstr "这样也会根据这个材料所在的BOM去修改最终产成品的标准价" #. module: mrp #: model:ir.actions.act_window,name:mrp.mrp_production_action2 msgid "Manufacturing Orders To Start" -msgstr "" +msgstr "未开始的生产订单" #. module: mrp #: code:addons/mrp/mrp.py:495 #, python-format msgid "Cannot delete Production Order(s) which are in %s State!" -msgstr "" +msgstr "不能删除状态是 %s 的生产订单" #. module: mrp #: model:ir.model,name:mrp.model_mrp_workcenter @@ -1565,7 +1606,7 @@ msgstr "" #: view:mrp.workcenter:0 #: field:report.workcenter.load,workcenter_id:0 msgid "Work Center" -msgstr "" +msgstr "工作中心" #. module: mrp #: field:mrp.workcenter,capacity_per_cycle:0 @@ -1600,7 +1641,7 @@ msgstr "原料库位" #. module: mrp #: view:mrp.product_price:0 msgid "Print Cost Structure of Product." -msgstr "" +msgstr "打印产品成本结构" #. module: mrp #: field:mrp.bom,product_uos:0 @@ -1614,12 +1655,12 @@ msgid "" "Work Centers allow you to create and manage manufacturing units consisting " "of one or more persons and/or machines that can be considered as a unit for " "capacity and planning forecasting." -msgstr "" +msgstr "工作中心允许你创建和管理生产单元,这些单元可以是一个或多个工人或机器。这个单元的能力和计划可供分析。" #. module: mrp #: view:mrp.production:0 msgid "Consume Products" -msgstr "" +msgstr "消耗的产品" #. module: mrp #: field:mrp.bom,product_uom:0 @@ -1634,19 +1675,19 @@ msgstr "产品计量单位" #: model:process.transition,name:mrp.process_transition_servicemto0 #: model:process.transition,name:mrp.process_transition_stockproduct0 msgid "Make to Order" -msgstr "" +msgstr "按订单生产" #. module: mrp #: model:ir.actions.act_window,name:mrp.action_report_mrp_production_order #: model:ir.ui.menu,name:mrp.menu_report_mrp_production_orders_tree msgid "Production Analysis" -msgstr "" +msgstr "生产分析" #. module: mrp #: code:addons/mrp/mrp.py:349 #, python-format msgid "Copy" -msgstr "" +msgstr "副本" #. module: mrp #: view:mrp.production.lot.line:0 @@ -1662,7 +1703,7 @@ msgstr "结束日期" #. module: mrp #: field:mrp.workcenter,resource_id:0 msgid "Resource" -msgstr "" +msgstr "资源" #. module: mrp #: help:mrp.bom,date_start:0 @@ -1678,7 +1719,7 @@ msgstr "产品销售单位" #. module: mrp #: view:mrp.production.order:0 msgid "#Line Orders" -msgstr "" +msgstr "行号" #. module: mrp #: selection:mrp.production,priority:0 @@ -1693,12 +1734,12 @@ msgid "" "product. The routing is mainly used to compute work center costs during " "operations and to plan future loads on work centers based on production " "planning." -msgstr "" +msgstr "生产产成品需要的一系列操作(发生在一系列工作中心上)。工艺主要用于计算工作中心成本和根据生产计划来规划工作中心负载。" #. module: mrp #: view:change.production.qty:0 msgid "Approve" -msgstr "" +msgstr "核准" #. module: mrp #: view:mrp.property.group:0 @@ -1708,7 +1749,7 @@ msgstr "属性分类" #. module: mrp #: help:mrp.production.workcenter.line,sequence:0 msgid "Gives the sequence order when displaying a list of work orders." -msgstr "" +msgstr "输入序号用于显示工作中心列表" #. module: mrp #: report:mrp.production.order:0 @@ -1733,7 +1774,7 @@ msgstr "产品生产消耗" #: model:ir.ui.menu,name:mrp.menu_mrp_production_order_action #: view:mrp.production:0 msgid "Manufacturing Orders" -msgstr "" +msgstr "生产订单" #. module: mrp #: help:mrp.product.produce,mode:0 @@ -1760,13 +1801,13 @@ msgstr "每循环成本" #: model:process.node,name:mrp.process_node_serviceproduct0 #: model:process.node,name:mrp.process_node_serviceproduct1 msgid "Service" -msgstr "" +msgstr "服务" #. module: mrp #: selection:mrp.production,state:0 #: selection:mrp.production.order,state:0 msgid "Cancelled" -msgstr "" +msgstr "已取消" #. module: mrp #: view:mrp.production.order:0 @@ -1777,7 +1818,7 @@ msgstr "物料清单" #: help:mrp.bom,product_uom:0 msgid "" "UoM (Unit of Measure) is the unit of measurement for the inventory control" -msgstr "" +msgstr "基本计量单位是库存控制的计量单位" #. module: mrp #: model:process.transition,note:mrp.process_transition_bom0 diff --git a/addons/project/i18n/zh_CN.po b/addons/project/i18n/zh_CN.po index bd8d20c7608..72b01c9e153 100644 --- a/addons/project/i18n/zh_CN.po +++ b/addons/project/i18n/zh_CN.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-07-05 05:08+0000\n" +"X-Launchpad-Export-Date: 2011-07-06 05:17+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: project From c4f87f8503d14d47d8cceb0e6f760b981384f0f4 Mon Sep 17 00:00:00 2001 From: "sma (Tiny)" Date: Wed, 6 Jul 2011 11:31:55 +0530 Subject: [PATCH 226/831] [IMP] Implement resize for window events. bzr revid: sma@tinyerp.com-20110706060155-jmoovg7hd3osdzdk --- addons/base_gantt/static/src/js/gantt.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 948091190bd..c088d3b1075 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -300,16 +300,15 @@ init: function(view_manager, session, element_id, dataset, view_id) { gtd = ganttrow.children(':first-child'); gtd.children().addClass('task-name'); - self.set_heigth(); - self.set_width(); - jQuery(".toggle-sidebar").click(function(e) { self.set_width(); }); - jQuery(window).bind('resize', function () { - self.set_heigth(); - self.set_width(); + jQuery(window).bind('resize',function(){ + window.clearTimeout(ganttChartControl._resize_timer); + ganttChartControl._resize_timer = window.setTimeout(function(){ + self.reload_gantt(); + }, 200); }); jQuery("div #_1, div #_1 + div").hide(); From ec4ae5e6bb60dfac864b4fcd7c1639104f4d0583 Mon Sep 17 00:00:00 2001 From: "sma (Tiny)" Date: Wed, 6 Jul 2011 12:04:57 +0530 Subject: [PATCH 227/831] [REM] Remove unsused code, no need to set heigth manually. bzr revid: sma@tinyerp.com-20110706063457-h3szv3akaax03ct1 --- addons/base_gantt/static/src/js/gantt.js | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index c088d3b1075..780ed8d18b0 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -314,23 +314,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { jQuery("div #_1, div #_1 + div").hide(); }, - set_heigth: function() { - - gantt_hgt = jQuery(window).height() - oth_hgt; - - if (gantt_hgt < min_hgt){ - gantt_hgt = min_hgt; - } - jQuery('#GanttDiv').css('height','100%'); - jQuery('.task-name').height(gantt_hgt - 40 -16); - taskdiv.height(gantt_hgt - 40); - - if (taskdiv.height() > jQuery('.taskPanel').height() + 16){ - jQuery('.taskPanel').height(taskdiv.height() - 16); - jQuery('.task-name').children().height(taskdiv.height() - 16); - } - }, - set_width: function() { $gantt_panel.width(1); From 0f88193e8f9c2e0ae5e70230066844321c35bd40 Mon Sep 17 00:00:00 2001 From: "noz (OpenERP)" Date: Wed, 6 Jul 2011 12:45:46 +0530 Subject: [PATCH 228/831] [FIX] Some improvement in exception handling. bzr revid: noz@tinyerp.com-20110706071546-w9fcjdsbxg473a90 --- addons/base/controllers/main.py | 22 ++++++++++++++-------- addons/base/static/src/js/chrome.js | 10 +++++++--- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 1a15d4ea933..f153c3da747 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -133,20 +133,26 @@ class Session(openerpweb.Controller): elif flag == 'backup': db = kw.get('db') password = kw.get('password') - - res = req.session.proxy("db").dump(password, db) - if res: - cherrypy.response.headers['Content-Type'] = "application/data" - cherrypy.response.headers['Content-Disposition'] = 'filename="' + db + '.dump"' - return base64.decodestring(res) + try: + res = req.session.proxy("db").dump(password, db) + if res: + cherrypy.response.headers['Content-Type'] = "application/data" + cherrypy.response.headers['Content-Disposition'] = 'filename="' + db + '.dump"' + return base64.decodestring(res) + except Exception: + return {'error': 'Could not create backup !'} elif flag == 'restore': filename = kw.get('filename') db = kw.get('db') password = kw.get('password') - data = base64.encodestring(filename.file.read()) - return req.session.proxy("db").restore(password, db, data) + try: + if filename: + data = base64.encodestring(filename.file.read()) + return req.session.proxy("db").restore(password, db, data) + except Exception: + return {'error': 'Could not restore database !'} elif flag == 'change_password': old_password = kw.get('old_password') diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index fb7b7ace862..ef86595245d 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -976,7 +976,9 @@ openerp.base.Database = openerp.base.Controller.extend({ self.rpc("/base/session/db_operation", {'flag': 'backup', 'db': db, 'password': password}, function(result) { if (result && !result.error) { - self.notification.notify("Backup has been created for the database: '" + db + "'"); + self.notification.notify("Backup Database", "Backup has been created for the database: '" + db + "'"); + } else if (result.error) { + self.notification.notify("Backup Database", result.error); } }); }); @@ -998,7 +1000,9 @@ openerp.base.Database = openerp.base.Controller.extend({ self.rpc("/base/session/db_operation", {'flag': 'restore', 'db': db, 'password': password, 'new_db': new_db}, function(result) { if (result && !result.error) { - self.notification.notify("You restored your database as: '" + new_db + "'"); + self.notification.notify("Restore Database", "You restored your database as: '" + new_db + "'"); + } else if (result.error) { + self.notification.notify("Restore Database", result.error); } }); }); @@ -1044,7 +1048,7 @@ openerp.base.Database = openerp.base.Controller.extend({ self.rpc("/base/session/db_operation", {'flag': 'change_password', 'old_password': old_pwd, 'new_password': new_pwd, 'confirm_password': confirm_pwd}, function(result) { if (result && !result.error) { - self.notification.notify("Password has been changed successfully"); + self.notification.notify("Changed Password", "Password has been changed successfully"); } }); }); From 90734e477cd63b577f59d540763caffa2bd659a7 Mon Sep 17 00:00:00 2001 From: "Amit Bhavsar (Open ERP)" Date: Wed, 6 Jul 2011 13:01:13 +0530 Subject: [PATCH 229/831] [usability],In routing form view change selection feild to search bzr revid: amb@tinyerp.com-20110706073113-02leyku0z289ifqj --- addons/mrp/mrp_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index 1ac11707870..377b8d89c0e 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -229,7 +229,7 @@ - + From 1f5aa0643ffee36327151e8e2b30315c883e0cd5 Mon Sep 17 00:00:00 2001 From: "Hardik Ansodariy (OpenERP)" Date: Wed, 6 Jul 2011 17:59:28 +0530 Subject: [PATCH 230/831] [IMP]: module is defined by its complexity bzr revid: han@tinyerp.com-20110706122928-xvcpdu5inpkganfy --- addons/account/__openerp__.py | 1 + addons/account_accountant/__openerp__.py | 1 + .../account_analytic_analysis/__openerp__.py | 1 + .../account_analytic_default/__openerp__.py | 1 + addons/account_analytic_plans/__openerp__.py | 1 + addons/account_anglo_saxon/__openerp__.py | 1 + addons/account_budget/__openerp__.py | 1 + addons/account_cancel/__openerp__.py | 1 + addons/account_coda/__openerp__.py | 1 + addons/account_followup/__openerp__.py | 1 + addons/account_invoice_layout/__openerp__.py | 1 + addons/account_payment/__openerp__.py | 1 + addons/account_sequence/__openerp__.py | 1 + addons/account_voucher/__openerp__.py | 1 + addons/anonymization/__openerp__.py | 1 + addons/association/__openerp__.py | 1 + addons/auction/__openerp__.py | 1 + addons/base_action_rule/__openerp__.py | 1 + addons/base_calendar/__openerp__.py | 63 ++++++++++++++++--- addons/base_contact/__openerp__.py | 1 + addons/base_crypt/__openerp__.py | 1 + addons/base_iban/__openerp__.py | 1 + addons/base_report_creator/__openerp__.py | 1 + addons/base_report_designer/__openerp__.py | 1 + addons/base_setup/__openerp__.py | 1 + addons/base_tools/__openerp__.py | 1 + addons/base_vat/__openerp__.py | 1 + addons/board/__openerp__.py | 1 + addons/caldav/__openerp__.py | 1 + addons/crm/__openerp__.py | 1 + addons/crm_caldav/__openerp__.py | 1 + addons/crm_claim/__openerp__.py | 1 + addons/crm_fundraising/__openerp__.py | 1 + addons/crm_helpdesk/__openerp__.py | 1 + addons/crm_partner_assign/__openerp__.py | 1 + addons/crm_profiling/__openerp__.py | 1 + addons/decimal_precision/__openerp__.py | 1 + addons/delivery/__openerp__.py | 1 + addons/document/__openerp__.py | 1 + addons/document_ftp/__openerp__.py | 1 + addons/document_ics/__openerp__.py | 1 + addons/document_webdav/__openerp__.py | 1 + addons/email_template/__openerp__.py | 1 + addons/event/__openerp__.py | 1 + addons/event_project/__openerp__.py | 1 + addons/google_map/__openerp__.py | 1 + addons/hr/__openerp__.py | 1 + addons/hr_attendance/__openerp__.py | 1 + addons/hr_contract/__openerp__.py | 1 + addons/hr_evaluation/__openerp__.py | 1 + addons/hr_expense/__openerp__.py | 1 + addons/hr_holidays/__openerp__.py | 1 + addons/hr_payroll/__openerp__.py | 1 + addons/hr_payroll_account/__openerp__.py | 1 + addons/hr_recruitment/__openerp__.py | 1 + addons/hr_timesheet/__openerp__.py | 1 + addons/idea/__openerp__.py | 1 + addons/knowledge/__openerp__.py | 1 + addons/lunch/__openerp__.py | 1 + addons/mail_gateway/__openerp__.py | 1 + addons/marketing/__openerp__.py | 1 + addons/marketing_campaign/__openerp__.py | 1 + addons/mrp_jit/__openerp__.py | 1 + addons/mrp_operations/__openerp__.py | 1 + addons/multi_company/__openerp__.py | 1 + addons/pad/__openerp__.py | 1 + addons/product_expiry/__openerp__.py | 1 + addons/product_manufacturer/__openerp__.py | 1 + .../product_visible_discount/__openerp__.py | 1 + addons/profile_tools/__openerp__.py | 1 + addons/project/__openerp__.py | 1 + addons/project_gtd/__openerp__.py | 1 + addons/project_issue/__openerp__.py | 1 + addons/project_mailgate/__openerp__.py | 1 + addons/project_messages/__openerp__.py | 1 + addons/project_mrp/__openerp__.py | 1 + addons/project_planning/__openerp__.py | 1 + addons/project_scrum/__openerp__.py | 1 + addons/purchase/__openerp__.py | 1 + .../purchase_double_validation/__openerp__.py | 1 + addons/purchase_requisition/__openerp__.py | 1 + addons/sale/__openerp__.py | 1 + addons/sale_crm/__openerp__.py | 1 + addons/sale_journal/__openerp__.py | 1 + addons/sale_layout/__openerp__.py | 1 + addons/sale_mrp/__openerp__.py | 1 + addons/sale_order_dates/__openerp__.py | 1 + addons/share/__openerp__.py | 1 + addons/stock/__openerp__.py | 1 + addons/stock_invoice_directly/__openerp__.py | 1 + addons/users_ldap/__openerp__.py | 1 + addons/warning/__openerp__.py | 1 + addons/web_livechat/__openerp__.py | 1 + addons/web_uservoice/__openerp__.py | 1 + addons/wiki/__openerp__.py | 1 + addons/wiki_faq/__openerp__.py | 1 + addons/wiki_quality_manual/__openerp__.py | 1 + addons/wiki_sale_faq/__openerp__.py | 1 + 98 files changed, 152 insertions(+), 8 deletions(-) diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py index 3b04713a1bb..9a48ab171d2 100644 --- a/addons/account/__openerp__.py +++ b/addons/account/__openerp__.py @@ -23,6 +23,7 @@ "version" : "1.1", "author" : "OpenERP SA", "category": 'Finance', + 'complexity': "normal", "description": """ Accounting and Financial Management. ==================================== diff --git a/addons/account_accountant/__openerp__.py b/addons/account_accountant/__openerp__.py index e00353f28ce..8194b9537a3 100644 --- a/addons/account_accountant/__openerp__.py +++ b/addons/account_accountant/__openerp__.py @@ -23,6 +23,7 @@ "version" : "1.1", "author" : "OpenERP SA", "category": 'Finance', + 'complexity': "normal", "description": """ Accounting Access Rights. ========================= diff --git a/addons/account_analytic_analysis/__openerp__.py b/addons/account_analytic_analysis/__openerp__.py index 588055b3741..5e93307865c 100644 --- a/addons/account_analytic_analysis/__openerp__.py +++ b/addons/account_analytic_analysis/__openerp__.py @@ -24,6 +24,7 @@ 'name' : 'Analytic Account View', 'version' : '1.1', 'category' : 'Finance', + 'complexity': "normal", 'description': """ This module is for modifying account analytic view to show important data to project manager of services companies. =================================================================================================================== diff --git a/addons/account_analytic_default/__openerp__.py b/addons/account_analytic_default/__openerp__.py index 0b9aa33c503..c2bea6783df 100644 --- a/addons/account_analytic_default/__openerp__.py +++ b/addons/account_analytic_default/__openerp__.py @@ -23,6 +23,7 @@ 'name' : 'Account Analytic Defaults', 'version' : '1.0', 'category' : 'Finance', + 'complexity': "normal", 'description': """Set default values for your analytic accounts Allows to automatically select analytic accounts based on criterions: ===================================================================== diff --git a/addons/account_analytic_plans/__openerp__.py b/addons/account_analytic_plans/__openerp__.py index dab9e83c75a..85f0643ef66 100644 --- a/addons/account_analytic_plans/__openerp__.py +++ b/addons/account_analytic_plans/__openerp__.py @@ -24,6 +24,7 @@ 'name' : 'Manage multiple plans in Analytic Accounting', 'version' : '1.0', 'category' : 'Finance', + 'complexity': "normal", 'description': """ This module allows to use several analytic plans, according to the general journal. =================================================================================== diff --git a/addons/account_anglo_saxon/__openerp__.py b/addons/account_anglo_saxon/__openerp__.py index 46052c77a36..79afb26ab26 100644 --- a/addons/account_anglo_saxon/__openerp__.py +++ b/addons/account_anglo_saxon/__openerp__.py @@ -23,6 +23,7 @@ "version" : "1.2", "author" : "OpenERP SA, Veritos", "website" : "http://tinyerp.com - http://veritos.nl", + 'complexity': "normal", "description" : """ This module supports the Anglo-Saxon accounting methodology by changing the accounting logic with stock transactions. ===================================================================================================================== diff --git a/addons/account_budget/__openerp__.py b/addons/account_budget/__openerp__.py index b9f972f83e5..9ff5964637a 100644 --- a/addons/account_budget/__openerp__.py +++ b/addons/account_budget/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Budget Management', 'version': '1.0', 'category': 'Finance', + 'complexity': "normal", 'description': """ This module allows accountants to manage analytic and crossovered budgets. ========================================================================== diff --git a/addons/account_cancel/__openerp__.py b/addons/account_cancel/__openerp__.py index f5ab865b1ab..469033ac56e 100644 --- a/addons/account_cancel/__openerp__.py +++ b/addons/account_cancel/__openerp__.py @@ -24,6 +24,7 @@ "version" : "1.1", "author" : "OpenERP SA", "category": 'Finance', + 'complexity': "normal", "description": """ Allows cancelling accounting entries. ===================================== diff --git a/addons/account_coda/__openerp__.py b/addons/account_coda/__openerp__.py index 1883d744779..fb39bc4c5ba 100644 --- a/addons/account_coda/__openerp__.py +++ b/addons/account_coda/__openerp__.py @@ -24,6 +24,7 @@ "version" : "1.0", "author" : "OpenERP SA", "category" : "Finance", + 'complexity': "normal", "description": """ Module provides functionality to import bank statements from coda files. ======================================================================== diff --git a/addons/account_followup/__openerp__.py b/addons/account_followup/__openerp__.py index bda833d5767..fd5cc859646 100644 --- a/addons/account_followup/__openerp__.py +++ b/addons/account_followup/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Reminders', 'version': '1.0', 'category': 'Finance', + 'complexity': "normal", 'description': """ Modules to automate letters for unpaid invoices, with multi-level recalls. ========================================================================== diff --git a/addons/account_invoice_layout/__openerp__.py b/addons/account_invoice_layout/__openerp__.py index feb77ae4547..b045b7b0b5d 100644 --- a/addons/account_invoice_layout/__openerp__.py +++ b/addons/account_invoice_layout/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Improve Invoice Layout', 'version': '1.0', 'category': 'Finance', + 'complexity': "easy", 'description': """ This module provides some features to improve the layout of the invoices. ========================================================================= diff --git a/addons/account_payment/__openerp__.py b/addons/account_payment/__openerp__.py index 105a883e432..8a90a140558 100644 --- a/addons/account_payment/__openerp__.py +++ b/addons/account_payment/__openerp__.py @@ -24,6 +24,7 @@ "version": "1.1", "author": "OpenERP SA", "category": "Finance", + 'complexity': "easy", "description": """ Module to manage invoice payment. ================================= diff --git a/addons/account_sequence/__openerp__.py b/addons/account_sequence/__openerp__.py index 18ca7a8c8ec..f7ab18f3e7e 100644 --- a/addons/account_sequence/__openerp__.py +++ b/addons/account_sequence/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Entries Sequence Numbering', 'version': '1.1', 'category': 'Finance', + 'complexity': "easy", 'description': """ This module maintains internal sequence number for accounting entries. ====================================================================== diff --git a/addons/account_voucher/__openerp__.py b/addons/account_voucher/__openerp__.py index ef93be397a0..7da2b2da99c 100644 --- a/addons/account_voucher/__openerp__.py +++ b/addons/account_voucher/__openerp__.py @@ -23,6 +23,7 @@ "name" : "Accounting Voucher Entries", "version" : "1.0", "author" : 'OpenERP SA', + 'complexity': "normal", "description": """ Account Voucher module includes all the basic requirements of Voucher Entries for Bank, Cash, Sales, Purchase, Expanse, Contra, etc. ==================================================================================================================================== diff --git a/addons/anonymization/__openerp__.py b/addons/anonymization/__openerp__.py index 97597eb7ca9..842b774eb9c 100644 --- a/addons/anonymization/__openerp__.py +++ b/addons/anonymization/__openerp__.py @@ -25,6 +25,7 @@ 'name': 'Database Anonymization', 'version': '1.0', 'category': 'Tools', + 'complexity': "easy", 'description': """ This module allows you to anonymize a database. =============================================== diff --git a/addons/association/__openerp__.py b/addons/association/__openerp__.py index 3a32a5b48c0..22489f72ea4 100644 --- a/addons/association/__openerp__.py +++ b/addons/association/__openerp__.py @@ -25,6 +25,7 @@ 'version': '0.1', 'category': 'General', 'category': 'Profile', + 'complexity': "normal", 'description': """ This module is to configure modules related to an association. ============================================================== diff --git a/addons/auction/__openerp__.py b/addons/auction/__openerp__.py index fa5f2f5f635..e1ceaf9921c 100644 --- a/addons/auction/__openerp__.py +++ b/addons/auction/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Auction Management', 'version': '1.0', 'category': 'General', + 'complexity': "normal", 'description': """ This module manages the records of artists, auction articles, buyers and sellers. ================================================================================= diff --git a/addons/base_action_rule/__openerp__.py b/addons/base_action_rule/__openerp__.py index 018f14d83a9..b6796f8958d 100644 --- a/addons/base_action_rule/__openerp__.py +++ b/addons/base_action_rule/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Action Rule', 'version': '1.0', 'category': 'Tools', + 'complexity': "expert", 'category': 'Generic Modules/Others', 'description': """ This module allows to implement action rules for any object. diff --git a/addons/base_calendar/__openerp__.py b/addons/base_calendar/__openerp__.py index 5688c0e05b5..45e98149809 100644 --- a/addons/base_calendar/__openerp__.py +++ b/addons/base_calendar/__openerp__.py @@ -1,11 +1,58 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# 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 . +# +############################################################################## + { - "name": "Base calendar", - "version": "2.0", - "depends": ['base'], - "js": [ - 'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js', - 'static/src/js/calendar.js' + "name" : "Basic Calendar Functionality", + "version" : "1.0", + "depends" : ["base"], + 'complexity': "easy", + 'description': """ +This is a full-featured calendar system. +======================================== + +It supports: + - Calendar of events + - Alerts (create requests) + - Recurring events + - Invitations to people""", + "author" : "OpenERP SA", + 'category': 'Tools', + 'website': 'http://www.openerp.com', + "init_xml" : [ + 'base_calendar_data.xml' ], - "css": ['static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css'], - 'active': True + "demo_xml" : [], + "update_xml" : [ + 'security/calendar_security.xml', + 'security/ir.model.access.csv', + 'wizard/calendar_event_edit_all_view.xml', + 'wizard/base_calendar_invite_attendee_view.xml', + 'wizard/base_calendar_set_exrule_view.xml', + 'base_calendar_view.xml' + ], + "test" : ['test/base_calendar_test.yml'], + "installable" : True, + "active" : False, + "certificate" : "00694071962960352821", + 'images': ['images/base_calendar1.jpeg','images/base_calendar2.jpeg','images/base_calendar3.jpeg','images/base_calendar4.jpeg',], } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_contact/__openerp__.py b/addons/base_contact/__openerp__.py index 1f8667e4cc6..17e7d3a69c8 100644 --- a/addons/base_contact/__openerp__.py +++ b/addons/base_contact/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Base Contact', 'version': '1.0', 'category': 'Tools', + 'complexity': "expert", 'description': """ This module allows you to manage your contacts entirely. ======================================================== diff --git a/addons/base_crypt/__openerp__.py b/addons/base_crypt/__openerp__.py index fb152da929d..1054f854874 100644 --- a/addons/base_crypt/__openerp__.py +++ b/addons/base_crypt/__openerp__.py @@ -25,6 +25,7 @@ "maintainer" : "OpenERP SA", "website" : "http://www.openerp.com", "category" : "Tools", + 'complexity': "easy", "description": """ This module replaces the cleartext password in the database with a password hash. ================================================================================= diff --git a/addons/base_iban/__openerp__.py b/addons/base_iban/__openerp__.py index 6de0e6d0735..4cbef04a204 100644 --- a/addons/base_iban/__openerp__.py +++ b/addons/base_iban/__openerp__.py @@ -22,6 +22,7 @@ 'name': 'Create IBAN bank accounts', 'version': '1.0', 'category': 'Finance', + 'complexity': "easy", 'description': """ This module installs the base for IBAN (International Bank Account Number) bank accounts and checks for its validity. ===================================================================================================================== diff --git a/addons/base_report_creator/__openerp__.py b/addons/base_report_creator/__openerp__.py index 9e469fe37c6..6c0a01f78fd 100644 --- a/addons/base_report_creator/__openerp__.py +++ b/addons/base_report_creator/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Statistical Report Creator', 'version': '1.0', 'category': 'Tools', + 'complexity': "expert", 'description': """ This module allows you to create any statistic report on several objects. ========================================================================= diff --git a/addons/base_report_designer/__openerp__.py b/addons/base_report_designer/__openerp__.py index 1d280de71fe..c5bbbbd34ec 100644 --- a/addons/base_report_designer/__openerp__.py +++ b/addons/base_report_designer/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'OpenOffice Report Designer Interface', 'version': '0.1', 'category': 'Tools', + 'complexity': "normal", 'description': """ This module is used along with OpenERP OpenOffice Plugin. ========================================================= diff --git a/addons/base_setup/__openerp__.py b/addons/base_setup/__openerp__.py index 420deb46bfb..2d534917da3 100644 --- a/addons/base_setup/__openerp__.py +++ b/addons/base_setup/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Base Setup', 'version': '1.0', 'category': 'Tools', + 'complexity': "easy", 'description': """ This module helps to configure the system at the installation of a new database. ================================================================================ diff --git a/addons/base_tools/__openerp__.py b/addons/base_tools/__openerp__.py index f915d8929a2..aade7664041 100644 --- a/addons/base_tools/__openerp__.py +++ b/addons/base_tools/__openerp__.py @@ -5,6 +5,7 @@ "version": "1.0", "depends": ["base"], "category" : "Tools", + 'complexity': "easy", 'description': """ Common base for tools modules. ============================== diff --git a/addons/base_vat/__openerp__.py b/addons/base_vat/__openerp__.py index 1de5a94fabd..92af5664336 100644 --- a/addons/base_vat/__openerp__.py +++ b/addons/base_vat/__openerp__.py @@ -23,6 +23,7 @@ 'version': '1.0', 'category': 'Tools', 'category': 'Generic Modules/Base', + 'complexity': "easy", 'description': """ Enable VAT Number for a partner and check its validity. ======================================================= diff --git a/addons/board/__openerp__.py b/addons/board/__openerp__.py index 587dd92362f..f4de253c4f5 100644 --- a/addons/board/__openerp__.py +++ b/addons/board/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Dashboard Creator', 'version': '1.0', 'category': 'Tools', + 'complexity': "normal", 'description': """ Lets the user create a custom dashboard. ======================================== diff --git a/addons/caldav/__openerp__.py b/addons/caldav/__openerp__.py index 346e49949c1..edf852e4d5e 100644 --- a/addons/caldav/__openerp__.py +++ b/addons/caldav/__openerp__.py @@ -23,6 +23,7 @@ { "name" : "Share Calendar using CalDAV", "version" : "1.1", + 'complexity': "normal", "depends" : [ "base", "document_webdav", diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index 903bf5f0b68..a0ff9067a76 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Customer & Supplier Relationship Management', 'version': '1.0', 'category': 'Sales', + 'complexity': "easy", 'description': """ The generic OpenERP Customer Relationship Management. ===================================================== diff --git a/addons/crm_caldav/__openerp__.py b/addons/crm_caldav/__openerp__.py index 58b01bc6511..fdbde1c8d2d 100644 --- a/addons/crm_caldav/__openerp__.py +++ b/addons/crm_caldav/__openerp__.py @@ -26,6 +26,7 @@ 'version': '1.1', 'category': 'Sales', 'category': 'Generic Modules/CRM & SRM', + 'complexity': "normal", 'description': """ Caldav features in Meeting. =========================== diff --git a/addons/crm_claim/__openerp__.py b/addons/crm_claim/__openerp__.py index 43894185ac0..696298d275b 100644 --- a/addons/crm_claim/__openerp__.py +++ b/addons/crm_claim/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Customer & Supplier Claims Management', 'version': '1.0', 'category': 'Sales', + 'complexity': "easy", 'description': """ This modules allows you to track your customers/suppliers claims and grievances. ================================================================================ diff --git a/addons/crm_fundraising/__openerp__.py b/addons/crm_fundraising/__openerp__.py index 4315eea87a5..7a37bd13d16 100644 --- a/addons/crm_fundraising/__openerp__.py +++ b/addons/crm_fundraising/__openerp__.py @@ -24,6 +24,7 @@ 'category': 'Sales', 'name': 'CRM Fundraising', 'version': '1.0', + 'complexity': "easy", 'description': """ Fundraising. ============ diff --git a/addons/crm_helpdesk/__openerp__.py b/addons/crm_helpdesk/__openerp__.py index 3a62433a591..b69f1de1b08 100644 --- a/addons/crm_helpdesk/__openerp__.py +++ b/addons/crm_helpdesk/__openerp__.py @@ -24,6 +24,7 @@ 'category': 'Sales', 'name': 'CRM Helpdesk', 'version': '1.0', + 'complexity': "easy", 'description': """ Helpdesk Management. ==================== diff --git a/addons/crm_partner_assign/__openerp__.py b/addons/crm_partner_assign/__openerp__.py index a00434e8ee0..eca5307df91 100644 --- a/addons/crm_partner_assign/__openerp__.py +++ b/addons/crm_partner_assign/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Partner Geo-Localization', 'version': '1.0', 'category': 'Sales', + 'complexity': "normal", 'description': """ This is the module used by OpenERP SA to redirect customers to its partners, based on geolocalization. ====================================================================================================== diff --git a/addons/crm_profiling/__openerp__.py b/addons/crm_profiling/__openerp__.py index b2a539ab305..c76278201b1 100644 --- a/addons/crm_profiling/__openerp__.py +++ b/addons/crm_profiling/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'CRM Profiling Management - To Perform Segmentation within Partners', 'version': '1.3', 'category': 'Sales', + 'complexity': "easy", 'description': """ This module allows users to perform segmentation within partners. ================================================================= diff --git a/addons/decimal_precision/__openerp__.py b/addons/decimal_precision/__openerp__.py index fc6399fb730..a2e94c7f58d 100644 --- a/addons/decimal_precision/__openerp__.py +++ b/addons/decimal_precision/__openerp__.py @@ -31,6 +31,7 @@ The decimal precision is configured per company. "version": "0.1", "depends": ["base"], "category" : "Tools", + 'complexity': "easy", "init_xml": [], "update_xml": [ 'decimal_precision_view.xml', diff --git a/addons/delivery/__openerp__.py b/addons/delivery/__openerp__.py index 3d1dcfbffde..e9fa8240e21 100644 --- a/addons/delivery/__openerp__.py +++ b/addons/delivery/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Carriers and Deliveries', 'version': '1.0', 'category': 'Warehouse', + 'complexity': "normal", 'description': """ Allows you to add delivery methods in sale orders and picking. ============================================================== diff --git a/addons/document/__openerp__.py b/addons/document/__openerp__.py index e8d85a8c5a6..c98daa4eaaf 100644 --- a/addons/document/__openerp__.py +++ b/addons/document/__openerp__.py @@ -25,6 +25,7 @@ 'version': '2.1', 'category': 'Tools', 'category': 'Generic Modules/Others', + 'complexity': "normal", 'description': """ This is a complete document management system. ============================================== diff --git a/addons/document_ftp/__openerp__.py b/addons/document_ftp/__openerp__.py index ff38e3b92b4..2683ba5ef0a 100644 --- a/addons/document_ftp/__openerp__.py +++ b/addons/document_ftp/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Integrated FTP Server with Document Management System', 'version': '1.99', 'category': 'Tools', + 'complexity': "normal", 'description': """ This is a support FTP Interface with document management system. ================================================================ diff --git a/addons/document_ics/__openerp__.py b/addons/document_ics/__openerp__.py index e232c8dd487..56bb8f11fee 100644 --- a/addons/document_ics/__openerp__.py +++ b/addons/document_ics/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Support for iCal based on Document Management System', 'version': '1.0', 'category': 'Tools', + 'complexity': "normal", 'description': """ Allows to synchronise calendars with others applications. ========================================================= diff --git a/addons/document_webdav/__openerp__.py b/addons/document_webdav/__openerp__.py index 52ec679cf21..dc74085ab6f 100644 --- a/addons/document_webdav/__openerp__.py +++ b/addons/document_webdav/__openerp__.py @@ -33,6 +33,7 @@ "version" : "2.3", "author" : "OpenERP SA", "category" : "Tools", + 'complexity': "normal", "website": "http://www.openerp.com", "description": """ With this module, the WebDAV server for documents is activated. diff --git a/addons/email_template/__openerp__.py b/addons/email_template/__openerp__.py index e5e712624ac..f56062f37ed 100644 --- a/addons/email_template/__openerp__.py +++ b/addons/email_template/__openerp__.py @@ -26,6 +26,7 @@ "author" : "Openlabs", "website" : "http://openerp.com", "category" : "Tools", + 'complexity': "expert", "depends" : ['marketing', 'base_tools'], "description": """ Email Template is extraction of Power Email basically just to send emails. diff --git a/addons/event/__openerp__.py b/addons/event/__openerp__.py index a2e0932b062..680cf1e6572 100644 --- a/addons/event/__openerp__.py +++ b/addons/event/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Event', 'version': '0.1', 'category': 'Tools', + 'complexity': "easy", 'description': """ Organization and management of Events. ====================================== diff --git a/addons/event_project/__openerp__.py b/addons/event_project/__openerp__.py index 75ac9e2b17c..ddd32c37631 100644 --- a/addons/event_project/__openerp__.py +++ b/addons/event_project/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Event Project - Create Retro-Planning to manage your Events', 'version': '0.1', 'category': 'Tools', + 'complexity': "easy", 'description': """ Organization and management of events. ====================================== diff --git a/addons/google_map/__openerp__.py b/addons/google_map/__openerp__.py index 16be73f1e2d..5c48a9370d7 100644 --- a/addons/google_map/__openerp__.py +++ b/addons/google_map/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Google Map', 'version': '1.0', 'category': 'Tools', + 'complexity': "easy", 'category': 'Generic Modules/Others', 'description': """ The module adds Google Map field in partner address. diff --git a/addons/hr/__openerp__.py b/addons/hr/__openerp__.py index 86083d6b37e..82be7c9f367 100644 --- a/addons/hr/__openerp__.py +++ b/addons/hr/__openerp__.py @@ -24,6 +24,7 @@ "version": "1.1", "author": "OpenERP SA", "category": "Human Resources", + 'complexity': "easy", "website": "http://www.openerp.com", "description": """ Module for human resource management. diff --git a/addons/hr_attendance/__openerp__.py b/addons/hr_attendance/__openerp__.py index 5d58ce2d647..f7111fdb191 100644 --- a/addons/hr_attendance/__openerp__.py +++ b/addons/hr_attendance/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Attendances Of Employees', 'version': '1.1', 'category': 'Human Resources', + 'complexity': "easy", 'description': """ This module aims to manage employee's attendances. ================================================== diff --git a/addons/hr_contract/__openerp__.py b/addons/hr_contract/__openerp__.py index 380a4f1c696..6a4d7e6a27e 100644 --- a/addons/hr_contract/__openerp__.py +++ b/addons/hr_contract/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Human Resources Contracts', 'version': '1.0', 'category': 'Human Resources', + 'complexity': "easy", 'description': """ Add all information on the employee form to manage contracts. ============================================================= diff --git a/addons/hr_evaluation/__openerp__.py b/addons/hr_evaluation/__openerp__.py index 3e45d38156e..d11d07ece66 100644 --- a/addons/hr_evaluation/__openerp__.py +++ b/addons/hr_evaluation/__openerp__.py @@ -24,6 +24,7 @@ "version": "0.1", "author": "OpenERP SA", "category": "Human Resources", + 'complexity': "easy", "website": "http://www.openerp.com", "images": ["images/hr_evaluation_analysis.jpeg","images/hr_evaluation.jpeg"], "depends": ["hr",'hr_recruitment','survey'], diff --git a/addons/hr_expense/__openerp__.py b/addons/hr_expense/__openerp__.py index 95d2b60300b..baf992d2132 100644 --- a/addons/hr_expense/__openerp__.py +++ b/addons/hr_expense/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Human Resources Expenses Tracking', 'version': '1.0', 'category': 'Human Resources', + 'complexity': "easy", 'description': """ This module aims to manage employee's expenses. =============================================== diff --git a/addons/hr_holidays/__openerp__.py b/addons/hr_holidays/__openerp__.py index e63d86b2041..63c2eb76195 100644 --- a/addons/hr_holidays/__openerp__.py +++ b/addons/hr_holidays/__openerp__.py @@ -25,6 +25,7 @@ "version": "1.5", "author": ['OpenERP SA', 'Axelor'], "category": "Human Resources", + 'complexity': "easy", "website": "http://www.openerp.com", "description": """ This module allows you to manage leaves and leaves' requests. diff --git a/addons/hr_payroll/__openerp__.py b/addons/hr_payroll/__openerp__.py index 69cba040d6b..1cc1b44177b 100644 --- a/addons/hr_payroll/__openerp__.py +++ b/addons/hr_payroll/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Human Resource Payroll', 'version': '1.0', 'category': 'Human Resources', + 'complexity': "expert", 'description': """ Generic Payroll system. ======================= diff --git a/addons/hr_payroll_account/__openerp__.py b/addons/hr_payroll_account/__openerp__.py index 30dcd9e7b55..d9bad77a101 100644 --- a/addons/hr_payroll_account/__openerp__.py +++ b/addons/hr_payroll_account/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Human Resource Payroll Accounting', 'version': '1.0', 'category': 'Human Resources', + 'complexity': "expert", 'description': """ Generic Payroll system Integrated with Accountings. =================================================== diff --git a/addons/hr_recruitment/__openerp__.py b/addons/hr_recruitment/__openerp__.py index c7f97cf3075..d36ba69a844 100644 --- a/addons/hr_recruitment/__openerp__.py +++ b/addons/hr_recruitment/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'HR - Recruitment', 'version': '1.0', 'category': 'Human Resources', + 'complexity': "easy", 'description': """ Manages job positions and the recruitment process. ================================================== diff --git a/addons/hr_timesheet/__openerp__.py b/addons/hr_timesheet/__openerp__.py index e58d09c296d..411ac68d57b 100644 --- a/addons/hr_timesheet/__openerp__.py +++ b/addons/hr_timesheet/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Human Resources (Timesheet encoding)', 'version': '1.0', 'category': 'Human Resources', + 'complexity': "easy", 'description': """ This module implements a timesheet system. ========================================== diff --git a/addons/idea/__openerp__.py b/addons/idea/__openerp__.py index 8c6ed4aff4c..2a561a93b81 100644 --- a/addons/idea/__openerp__.py +++ b/addons/idea/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Idea Manager', 'version': '0.1', 'category': 'Tools', + 'complexity': "easy", 'description': """ This module allows your user to easily and efficiently participate in enterprise innovation. ============================================================================================ diff --git a/addons/knowledge/__openerp__.py b/addons/knowledge/__openerp__.py index 3add4ee977c..d924f203b47 100644 --- a/addons/knowledge/__openerp__.py +++ b/addons/knowledge/__openerp__.py @@ -26,6 +26,7 @@ "depends" : ["base"], "author" : "OpenERP SA", "category": 'Tools', + 'complexity': "easy", "description": """ Installer for knowledge-based tools. ==================================== diff --git a/addons/lunch/__openerp__.py b/addons/lunch/__openerp__.py index e5317cd8a94..b0140a95f51 100644 --- a/addons/lunch/__openerp__.py +++ b/addons/lunch/__openerp__.py @@ -22,6 +22,7 @@ { "name": "Lunch Module", "author": "OpenERP SA", + 'complexity': "easy", "Description": """ The lunch module is for keeping a record of the order placed and payment of the orders. ======================================================================================= diff --git a/addons/mail_gateway/__openerp__.py b/addons/mail_gateway/__openerp__.py index 2ec47eb0159..af1e28e0c2c 100644 --- a/addons/mail_gateway/__openerp__.py +++ b/addons/mail_gateway/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Email Gateway System', 'version': '1.0', 'category': 'Tools', + 'complexity': "easy", 'description': """ The generic email gateway system allows to send and receive emails. =================================================================== diff --git a/addons/marketing/__openerp__.py b/addons/marketing/__openerp__.py index b4283a60406..b6e94b9b5cc 100644 --- a/addons/marketing/__openerp__.py +++ b/addons/marketing/__openerp__.py @@ -26,6 +26,7 @@ "depends" : ["base"], "author" : "OpenERP SA", "category": 'Sales', + 'complexity': "expert", "description": """ Menu for Marketing. =================== diff --git a/addons/marketing_campaign/__openerp__.py b/addons/marketing_campaign/__openerp__.py index 24a251bc000..78060b1e571 100644 --- a/addons/marketing_campaign/__openerp__.py +++ b/addons/marketing_campaign/__openerp__.py @@ -30,6 +30,7 @@ ], "author" : "OpenERP SA", "category": 'Sales', + 'complexity': "expert", "description": """ This module provides leads automation through marketing campaigns (campaigns can in fact be defined on any resource, not just CRM Leads). ========================================================================================================================================= diff --git a/addons/mrp_jit/__openerp__.py b/addons/mrp_jit/__openerp__.py index 99edd7fe507..77bece7cfd6 100644 --- a/addons/mrp_jit/__openerp__.py +++ b/addons/mrp_jit/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'MRP JIT', 'version': '1.0', 'category': 'Manufacturing', + 'complexity': "easy", 'description': """ This module allows Just In Time computation of procurement orders. ================================================================== diff --git a/addons/mrp_operations/__openerp__.py b/addons/mrp_operations/__openerp__.py index 7bf64376f70..08f8f5b7f5b 100644 --- a/addons/mrp_operations/__openerp__.py +++ b/addons/mrp_operations/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Work Center Production start end workflow', 'version': '1.0', 'category': 'Manufacturing', + 'complexity': "easy", 'description': """ This module adds state, date_start,date_stop in production order operation lines (in the "Work Centers" tab). ============================================================================================================= diff --git a/addons/multi_company/__openerp__.py b/addons/multi_company/__openerp__.py index baf3a88c32e..d82f0e1eb7c 100644 --- a/addons/multi_company/__openerp__.py +++ b/addons/multi_company/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Multi-Company', 'version': '1.0', 'category': 'Tools', + 'complexity': "expert", 'description': """ This module is for managing a multicompany environment. ======================================================= diff --git a/addons/pad/__openerp__.py b/addons/pad/__openerp__.py index d26af68f170..b3429dde329 100644 --- a/addons/pad/__openerp__.py +++ b/addons/pad/__openerp__.py @@ -3,6 +3,7 @@ 'name': 'Enhanced support for (Ether)Pad attachments', 'version': '1.0.3', 'category': 'Tools', + 'complexity': "easy", 'description': """ Adds enhanced support for (Ether)Pad attachments in the web client. =================================================================== diff --git a/addons/product_expiry/__openerp__.py b/addons/product_expiry/__openerp__.py index 847f7e6a536..434f5605baa 100644 --- a/addons/product_expiry/__openerp__.py +++ b/addons/product_expiry/__openerp__.py @@ -22,6 +22,7 @@ "version" : "1.0", "author" : "OpenERP SA", "category" : "Warehouse", + 'complexity': "easy", "depends" : ["stock"], "init_xml" : [], "demo_xml" : ["product_expiry_demo.xml"], diff --git a/addons/product_manufacturer/__openerp__.py b/addons/product_manufacturer/__openerp__.py index 90beef4343a..5aea3f333d3 100644 --- a/addons/product_manufacturer/__openerp__.py +++ b/addons/product_manufacturer/__openerp__.py @@ -22,6 +22,7 @@ "version" : "1.0", "author" : "OpenERP SA", "category" : "Tools", + 'complexity': "easy", "depends" : ["stock"], "init_xml" : [], "demo_xml" : [], diff --git a/addons/product_visible_discount/__openerp__.py b/addons/product_visible_discount/__openerp__.py index faf0dbba051..903bc6c7523 100644 --- a/addons/product_visible_discount/__openerp__.py +++ b/addons/product_visible_discount/__openerp__.py @@ -22,6 +22,7 @@ "version": "1.0", "author": "OpenERP SA", "category": "Sales", + 'complexity': "easy", "description": """ This module lets you calculate discounts on Sale Order lines and Invoice lines base on the partner's pricelist. =============================================================================================================== diff --git a/addons/profile_tools/__openerp__.py b/addons/profile_tools/__openerp__.py index 8f99b32cee0..efb155d4cf0 100644 --- a/addons/profile_tools/__openerp__.py +++ b/addons/profile_tools/__openerp__.py @@ -26,6 +26,7 @@ "depends" : ["base"], "author" : "OpenERP SA", "category" : "Tools", + 'complexity': "easy", "description": """ Installer for extra tools like lunch, survey, idea, share, etc. =============================================================== diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py index f8cab193ab3..47b6345beeb 100644 --- a/addons/project/__openerp__.py +++ b/addons/project/__openerp__.py @@ -26,6 +26,7 @@ "author": "OpenERP SA", "website": "http://www.openerp.com", "category": "Project Management", + 'complexity': "easy", "images": ["images/gantt.png", "images/project_dashboard.jpeg","images/project_task_tree.jpeg","images/project_task.jpeg","images/project.jpeg","images/task_analysis.jpeg"], "depends": ["product", "analytic", "board"], "description": """ diff --git a/addons/project_gtd/__openerp__.py b/addons/project_gtd/__openerp__.py index 8b0ad03f5cf..5f70392352b 100644 --- a/addons/project_gtd/__openerp__.py +++ b/addons/project_gtd/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Getting Things Done - Time Management Module', 'version': '1.0', 'category': 'Project Management', + 'complexity': "easy", 'description': """ This module implements all concepts defined by the Getting Things Done methodology. =================================================================================== diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py index 931d9f97727..459c44dea04 100644 --- a/addons/project_issue/__openerp__.py +++ b/addons/project_issue/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Issue Management in Project Management', 'version': '1.0', 'category': 'Project Management', + 'complexity': "easy", 'description': """ This module provides Issues/Bugs Management in Project. ======================================================= diff --git a/addons/project_mailgate/__openerp__.py b/addons/project_mailgate/__openerp__.py index 9140a04f36e..4551d19bb1f 100644 --- a/addons/project_mailgate/__openerp__.py +++ b/addons/project_mailgate/__openerp__.py @@ -26,6 +26,7 @@ "author": "OpenERP SA", "website": "http://www.openerp.com", "category": "Project Management", + 'complexity': "easy", "images": ["images/project_mailgate_task.jpeg"], "depends": ["project", "mail_gateway"], "description": """ diff --git a/addons/project_messages/__openerp__.py b/addons/project_messages/__openerp__.py index 1e584c3be13..3f1882ed376 100644 --- a/addons/project_messages/__openerp__.py +++ b/addons/project_messages/__openerp__.py @@ -27,6 +27,7 @@ "depends": ["project"], "author": "OpenERP SA", "category": 'Project Management', + 'complexity': "easy", "description": """ This module provides the functionality to send messages within a project. ========================================================================= diff --git a/addons/project_mrp/__openerp__.py b/addons/project_mrp/__openerp__.py index 09d2c48fa08..cfd745cb24c 100644 --- a/addons/project_mrp/__openerp__.py +++ b/addons/project_mrp/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Procurement and Project Management integration', 'version': '1.0', 'category': 'Project Management', + 'complexity': "easy", 'description': """ This module creates a link between procurement orders containing "service" lines and project management tasks. ============================================================================================================== diff --git a/addons/project_planning/__openerp__.py b/addons/project_planning/__openerp__.py index 9dbcf66c274..537170d4e3d 100644 --- a/addons/project_planning/__openerp__.py +++ b/addons/project_planning/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Planning Management Module', 'version': '1.0', 'category': 'Project Management', + 'complexity': "easy", 'description': """Keep track of your planning This module helps you to manage your plannings. =============================================== diff --git a/addons/project_scrum/__openerp__.py b/addons/project_scrum/__openerp__.py index 0f9649fd31d..9a1713b9014 100644 --- a/addons/project_scrum/__openerp__.py +++ b/addons/project_scrum/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Scrum, Agile Development Method', 'version': '1.0', 'category': 'Project Management', + 'complexity': "easy", 'description': """ This module implements all concepts defined by the scrum project management methodology for IT companies. ========================================================================================================= diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py index 1fb49198404..975754dd5fe 100644 --- a/addons/purchase/__openerp__.py +++ b/addons/purchase/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Purchase Management', 'version': '1.1', 'category': 'Purchases', + 'complexity': "easy", 'description': """ Purchase module is for generating a purchase order for purchase of goods from a supplier. ========================================================================================= diff --git a/addons/purchase_double_validation/__openerp__.py b/addons/purchase_double_validation/__openerp__.py index 1a10fb5c0ce..c111d0679c1 100644 --- a/addons/purchase_double_validation/__openerp__.py +++ b/addons/purchase_double_validation/__openerp__.py @@ -23,6 +23,7 @@ "name" : "Double Validation for Purchase", "version" : "1.1", "category": 'Purchases', + 'complexity': "easy", "images" : ["images/purchase_validation.jpeg"], "depends" : ["base","purchase"], "author" : 'OpenERP SA', diff --git a/addons/purchase_requisition/__openerp__.py b/addons/purchase_requisition/__openerp__.py index 5fd224b14f9..a3658414e0f 100644 --- a/addons/purchase_requisition/__openerp__.py +++ b/addons/purchase_requisition/__openerp__.py @@ -22,6 +22,7 @@ "version" : "0.1", "author" : "OpenERP SA", "category" : "Purchases", + 'complexity': "easy", "images" : ['images/purchase_requisitions.jpeg'], "website" : "http://www.openerp.com", "description": """ diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py index c223fd348d2..c983edc881e 100644 --- a/addons/sale/__openerp__.py +++ b/addons/sale/__openerp__.py @@ -24,6 +24,7 @@ 'version': '1.0', 'category': 'Sales', 'category': 'Generic Modules/Sales & Purchases', + 'complexity': "easy", 'description': """ The base module to manage quotations and sales orders. ====================================================== diff --git a/addons/sale_crm/__openerp__.py b/addons/sale_crm/__openerp__.py index 754b5e95b24..7fe2bd135c7 100644 --- a/addons/sale_crm/__openerp__.py +++ b/addons/sale_crm/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Creates Sales order from Opportunity', 'version': '1.0', 'category': 'Sales', + 'complexity': "easy", 'description': """ This module adds a shortcut on one or several opportunity cases in the CRM. =========================================================================== diff --git a/addons/sale_journal/__openerp__.py b/addons/sale_journal/__openerp__.py index 7aca468c397..c95b94da3ee 100644 --- a/addons/sale_journal/__openerp__.py +++ b/addons/sale_journal/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Managing sales and deliveries by journal', 'version': '1.0', 'category': 'Sales', + 'complexity': "easy", 'description': """ The sales journal modules allows you to categorise your sales and deliveries (picking lists) between different journals. ======================================================================================================================== diff --git a/addons/sale_layout/__openerp__.py b/addons/sale_layout/__openerp__.py index d3fa8388a76..8f9005e50a0 100644 --- a/addons/sale_layout/__openerp__.py +++ b/addons/sale_layout/__openerp__.py @@ -24,6 +24,7 @@ "images" : ["images/sale_layout.jpeg"], "depends" : ["sale", "account_invoice_layout"], "author" : "OpenERP SA", + 'complexity': "easy", "description": """ This module provides features to improve the layout of the Sales Order. ======================================================================= diff --git a/addons/sale_mrp/__openerp__.py b/addons/sale_mrp/__openerp__.py index 641290ec6ee..1fd1fab9d2f 100644 --- a/addons/sale_mrp/__openerp__.py +++ b/addons/sale_mrp/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Sales and MRP Management', 'version': '1.0', 'category': 'Sales', + 'complexity': "easy", 'description': """ This module provides facility to the user to install mrp and sales modulesat a time. ==================================================================================== diff --git a/addons/sale_order_dates/__openerp__.py b/addons/sale_order_dates/__openerp__.py index 554f01af1b1..eb7e3a516fa 100644 --- a/addons/sale_order_dates/__openerp__.py +++ b/addons/sale_order_dates/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Sales Order Dates', 'version': '1.0', 'category': 'Sales', + 'complexity': "easy", 'description': """ Add additional date information to the sales order. =================================================== diff --git a/addons/share/__openerp__.py b/addons/share/__openerp__.py index 085266b4dae..597e1af1879 100644 --- a/addons/share/__openerp__.py +++ b/addons/share/__openerp__.py @@ -26,6 +26,7 @@ "depends" : ["base"], "author" : "OpenERP SA", "category": 'Tools', + 'complexity': "easy", "description": """ This module adds generic sharing tools to your current OpenERP database. ======================================================================== diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py index 1a33fd3012c..70dc37ec2da 100644 --- a/addons/stock/__openerp__.py +++ b/addons/stock/__openerp__.py @@ -23,6 +23,7 @@ "name" : "Inventory Management", "version" : "1.1", "author" : "OpenERP SA", + 'complexity': "easy", "description" : """ OpenERP Inventory Management module can manage multi-warehouses, multi and structured stock locations. ====================================================================================================== diff --git a/addons/stock_invoice_directly/__openerp__.py b/addons/stock_invoice_directly/__openerp__.py index 712aaca289d..98c63dca506 100644 --- a/addons/stock_invoice_directly/__openerp__.py +++ b/addons/stock_invoice_directly/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Invoice Picking Directly', 'version': '1.0', 'category': 'Warehouse', + 'complexity': "easy", 'description': """ Invoice Wizard for Delivery. ============================ diff --git a/addons/users_ldap/__openerp__.py b/addons/users_ldap/__openerp__.py index 71ed399c5da..1278ffc74f3 100644 --- a/addons/users_ldap/__openerp__.py +++ b/addons/users_ldap/__openerp__.py @@ -24,6 +24,7 @@ "depends" : ["base"], "images" : ["images/ldap_configuration.jpeg"], "author" : "OpenERP SA", + 'complexity': "easy", "description": """ Adds support for authentication by LDAP server. =============================================== diff --git a/addons/warning/__openerp__.py b/addons/warning/__openerp__.py index d2c8e923c16..66915423af8 100644 --- a/addons/warning/__openerp__.py +++ b/addons/warning/__openerp__.py @@ -24,6 +24,7 @@ 'name': 'Display Warning Messages', 'version': '1.0', 'category': 'Tools', + 'complexity': "easy", 'description': """ Module to trigger warnings in OpenERP objects. ============================================== diff --git a/addons/web_livechat/__openerp__.py b/addons/web_livechat/__openerp__.py index 2ee8b47b55b..cea342ef05e 100644 --- a/addons/web_livechat/__openerp__.py +++ b/addons/web_livechat/__openerp__.py @@ -22,6 +22,7 @@ 'name': 'Live Chat Support', 'version': '1.1', 'category': 'Tools', + 'complexity': "easy", 'description': """ Enable live chat support for those who have a maintenance contract. =================================================================== diff --git a/addons/web_uservoice/__openerp__.py b/addons/web_uservoice/__openerp__.py index 14d59e993ab..cc248e90da7 100644 --- a/addons/web_uservoice/__openerp__.py +++ b/addons/web_uservoice/__openerp__.py @@ -22,6 +22,7 @@ 'name': 'Receive User Feedback', 'version': '1.0', 'category': 'Tools', + 'complexity': "easy", 'description': """ Add Feedback button in header. ============================== diff --git a/addons/wiki/__openerp__.py b/addons/wiki/__openerp__.py index ef746cb2d44..cf2234b4386 100644 --- a/addons/wiki/__openerp__.py +++ b/addons/wiki/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Document Management - Wiki', 'version': '1.0.1', 'category': 'Tools', + 'complexity': "easy", 'description': """ The base module to manage documents(wiki). ========================================== diff --git a/addons/wiki_faq/__openerp__.py b/addons/wiki_faq/__openerp__.py index caf2ca80d03..873b4fea9d0 100644 --- a/addons/wiki_faq/__openerp__.py +++ b/addons/wiki_faq/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Document Management - Wiki - FAQ', 'version': '1.0', 'category': 'Tools', + 'complexity': "easy", 'description': """ This module provides a Wiki FAQ Template. ========================================= diff --git a/addons/wiki_quality_manual/__openerp__.py b/addons/wiki_quality_manual/__openerp__.py index ce8c2bdb061..e962265cea8 100644 --- a/addons/wiki_quality_manual/__openerp__.py +++ b/addons/wiki_quality_manual/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Document Management - Wiki - Quality Manual', 'version': '1.0', 'category': 'Tools', + 'complexity': "easy", 'description': """ Quality Manual Template. ======================== diff --git a/addons/wiki_sale_faq/__openerp__.py b/addons/wiki_sale_faq/__openerp__.py index 74eb722257b..7d06dc73712 100644 --- a/addons/wiki_sale_faq/__openerp__.py +++ b/addons/wiki_sale_faq/__openerp__.py @@ -23,6 +23,7 @@ 'name': 'Wiki - Sale-FAQ', 'version': '1.0', 'category': 'Tools', + 'complexity': "easy", 'description': """ This module provides a Wiki Sales FAQ Template. =============================================== From 409cf866737982d6e6d50b2c28633d3356ea6e05 Mon Sep 17 00:00:00 2001 From: "Hardik Ansodariy (OpenERP)" Date: Wed, 6 Jul 2011 18:00:53 +0530 Subject: [PATCH 231/831] [IMP]: complexity field is added in ir_module_module bzr revid: han@tinyerp.com-20110706123053-an4rk7vspzrdh8u0 --- openerp/addons/base/__openerp__.py | 1 + openerp/addons/base/module/module.py | 5 +++++ openerp/addons/base/module/module_view.xml | 3 +++ 3 files changed, 9 insertions(+) diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py index 5fb2da9beb8..3f10179f147 100644 --- a/openerp/addons/base/__openerp__.py +++ b/openerp/addons/base/__openerp__.py @@ -25,6 +25,7 @@ 'name': 'Base', 'version': '1.3', 'category': 'Generic Modules/Base', + 'complexity': "easy", 'description': """The kernel of OpenERP, needed for all installation.""", 'author': 'OpenERP SA', 'maintainer': 'OpenERP SA', diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index 5458771b49d..c0091b1a517 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -188,6 +188,10 @@ class module(osv.osv): 'views_by_module': fields.function(_get_views, method=True, string='Views', type='text', multi="meta", store=True), 'certificate' : fields.char('Quality Certificate', size=64, readonly=True), 'web': fields.boolean('Has a web component', readonly=True), + 'complexity':fields.selection([('easy','Easy'), + ('normal','Normal'), + ('expert','Expert')], + string='Complexity', readonly=True, help='"Level of difficulties of module. Easy : this module is intuitive and easy to use for everyone. Normal : easy to use for business expert. Expert : this module needs some technical skills".'), } _defaults = { @@ -364,6 +368,7 @@ class module(osv.osv): 'license': terp.get('license', 'AGPL-3'), 'certificate': terp.get('certificate') or False, 'web': terp.get('web') or False, + 'complexity': terp.get('complexity', ''), } # update the list of available packages diff --git a/openerp/addons/base/module/module_view.xml b/openerp/addons/base/module/module_view.xml index 16527641656..e3fc13ad98b 100644 --- a/openerp/addons/base/module/module_view.xml +++ b/openerp/addons/base/module/module_view.xml @@ -46,6 +46,7 @@ + @@ -90,6 +91,7 @@ + @@ -149,6 +151,7 @@ + From 0d3aa4cada845fc25f0bd69cb0e3dd5379e7a4e5 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 6 Jul 2011 16:26:37 +0200 Subject: [PATCH 232/831] [IMP] switch to jquery 1.6, has more go fast bzr revid: xmo@openerp.com-20110706142637-bdmgmv29sgl15iyb --- .../{jquery-1.5.2.js => jquery-1.6.2.js} | 2685 ++++++++++------- addons/base/static/src/base.html | 2 +- 2 files changed, 1647 insertions(+), 1040 deletions(-) rename addons/base/static/lib/jquery/{jquery-1.5.2.js => jquery-1.6.2.js} (77%) diff --git a/addons/base/static/lib/jquery/jquery-1.5.2.js b/addons/base/static/lib/jquery/jquery-1.6.2.js similarity index 77% rename from addons/base/static/lib/jquery/jquery-1.5.2.js rename to addons/base/static/lib/jquery/jquery-1.6.2.js index ae0234d2bb4..f3201aacb6f 100644 --- a/addons/base/static/lib/jquery/jquery-1.5.2.js +++ b/addons/base/static/lib/jquery/jquery-1.6.2.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v1.5.2 + * jQuery JavaScript Library v1.6.2 * http://jquery.com/ * * Copyright 2011, John Resig @@ -11,12 +11,14 @@ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Thu Mar 31 15:28:23 2011 -0400 + * Date: Thu Jun 30 14:16:56 2011 -0400 */ (function( window, undefined ) { // Use the correct document accordingly with window argument (sandbox) -var document = window.document; +var document = window.document, + navigator = window.navigator, + location = window.location; var jQuery = (function() { // Define a local copy of jQuery @@ -36,7 +38,7 @@ var jQuery = function( selector, context ) { // A simple way to check for HTML strings or ID strings // (both of which we optimize for) - quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, + quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, // Check if a string has a non-whitespace character in it rnotwhite = /\S/, @@ -63,6 +65,14 @@ var jQuery = function( selector, context ) { rmsie = /(msie) ([\w.]+)/, rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + // Matches dashed string for camelizing + rdashAlpha = /-([a-z])/ig, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + // Keep a UserAgent string for use with jQuery.browser userAgent = navigator.userAgent, @@ -107,7 +117,7 @@ jQuery.fn = jQuery.prototype = { if ( selector === "body" && !context && document.body ) { this.context = document; this[0] = document.body; - this.selector = "body"; + this.selector = selector; this.length = 1; return this; } @@ -115,7 +125,13 @@ jQuery.fn = jQuery.prototype = { // Handle HTML strings if ( typeof selector === "string" ) { // Are we dealing with HTML string or an ID? - match = quickExpr.exec( selector ); + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } // Verify a match, and that no context was specified for #id if ( match && (match[1] || !context) ) { @@ -196,7 +212,7 @@ jQuery.fn = jQuery.prototype = { selector: "", // The current version of jQuery being used - jquery: "1.5.2", + jquery: "1.6.2", // The default length of a jQuery object is 0 length: 0, @@ -372,9 +388,11 @@ jQuery.extend = jQuery.fn.extend = function() { jQuery.extend({ noConflict: function( deep ) { - window.$ = _$; + if ( window.$ === jQuery ) { + window.$ = _$; + } - if ( deep ) { + if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } @@ -388,15 +406,19 @@ jQuery.extend({ // the ready event fires. See #6781 readyWait: 1, + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + // Handle when the DOM is ready ready: function( wait ) { - // A third-party is pushing the ready event forwards - if ( wait === true ) { - jQuery.readyWait--; - } - - // Make sure that the DOM is not already loaded - if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready, 1 ); @@ -446,7 +468,7 @@ jQuery.extend({ } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes - document.attachEvent("onreadystatechange", DOMContentLoaded); + document.attachEvent( "onreadystatechange", DOMContentLoaded ); // A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready ); @@ -534,20 +556,21 @@ jQuery.extend({ // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test(data.replace(rvalidescape, "@") - .replace(rvalidtokens, "]") - .replace(rvalidbraces, "")) ) { + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { - // Try to use the native JSON parser first - return window.JSON && window.JSON.parse ? - window.JSON.parse( data ) : - (new Function("return " + data))(); + return (new Function( "return " + data ))(); - } else { - jQuery.error( "Invalid JSON: " + data ); } + jQuery.error( "Invalid JSON: " + data ); }, // Cross-browser xml parsing @@ -574,27 +597,26 @@ jQuery.extend({ noop: function() {}, - // Evalulates a script in a global context + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { - if ( data && rnotwhite.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement, - script = document.createElement( "script" ); - - if ( jQuery.support.scriptEval() ) { - script.appendChild( document.createTextNode( data ) ); - } else { - script.text = data; - } - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); } }, + // Converts a dashed string to camelCased string; + // Used by both the css and data modules + camelCase: function( string ) { + return string.replace( rdashAlpha, fcamelCase ); + }, + nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); }, @@ -603,7 +625,7 @@ jQuery.extend({ each: function( object, callback, args ) { var name, i = 0, length = object.length, - isObj = length === undefined || jQuery.isFunction(object); + isObj = length === undefined || jQuery.isFunction( object ); if ( args ) { if ( isObj ) { @@ -629,8 +651,11 @@ jQuery.extend({ } } } else { - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } } } @@ -661,7 +686,7 @@ jQuery.extend({ // The extra typeof function check is to prevent crashes // in Safari 2 (See: #3039) // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 - var type = jQuery.type(array); + var type = jQuery.type( array ); if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { push.call( ret, array ); @@ -674,8 +699,9 @@ jQuery.extend({ }, inArray: function( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); + + if ( indexOf ) { + return indexOf.call( array, elem ); } for ( var i = 0, length = array.length; i < length; i++ ) { @@ -725,15 +751,30 @@ jQuery.extend({ // arg is for internal usage only map: function( elems, callback, arg ) { - var ret = [], value; + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; // Go through the array, translating each of the items to their - // new value (or values). - for ( var i = 0, length = elems.length; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); - if ( value != null ) { - ret[ ret.length ] = value; + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } } } @@ -744,36 +785,35 @@ jQuery.extend({ // A global GUID counter for objects guid: 1, - proxy: function( fn, proxy, thisObject ) { - if ( arguments.length === 2 ) { - if ( typeof proxy === "string" ) { - thisObject = fn; - fn = thisObject[ proxy ]; - proxy = undefined; - - } else if ( proxy && !jQuery.isFunction( proxy ) ) { - thisObject = proxy; - proxy = undefined; - } + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; } - if ( !proxy && fn ) { + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), proxy = function() { - return fn.apply( thisObject || this, arguments ); + return fn.apply( context, args.concat( slice.call( arguments ) ) ); }; - } // Set the guid of unique handler to the same of original handler, so it can be removed - if ( fn ) { - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - } + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - // So proxy can be declared as an argument return proxy; }, // Mutifunctional method to get and set values to a collection - // The value/s can be optionally by executed if its a function + // The value/s can optionally be executed if it's a function access: function( elems, key, value, exec, fn, pass ) { var length = elems.length; @@ -820,24 +860,24 @@ jQuery.extend({ }, sub: function() { - function jQuerySubclass( selector, context ) { - return new jQuerySubclass.fn.init( selector, context ); + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); } - jQuery.extend( true, jQuerySubclass, this ); - jQuerySubclass.superclass = this; - jQuerySubclass.fn = jQuerySubclass.prototype = this(); - jQuerySubclass.fn.constructor = jQuerySubclass; - jQuerySubclass.subclass = this.subclass; - jQuerySubclass.fn.init = function init( selector, context ) { - if ( context && context instanceof jQuery && !(context instanceof jQuerySubclass) ) { - context = jQuerySubclass(context); + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); } - return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass ); + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); }; - jQuerySubclass.fn.init.prototype = jQuerySubclass.fn; - var rootjQuerySubclass = jQuerySubclass(document); - return jQuerySubclass; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; }, browser: {} @@ -859,12 +899,6 @@ if ( jQuery.browser.webkit ) { jQuery.browser.safari = true; } -if ( indexOf ) { - jQuery.inArray = function( elem, array ) { - return indexOf.call( array, elem ); - }; -} - // IE doesn't match non-breaking spaces with \s if ( rnotwhite.test( "\xA0" ) ) { trimLeft = /^[\s\xA0]+/; @@ -910,14 +944,13 @@ function doScrollCheck() { jQuery.ready(); } -// Expose jQuery to the global object return jQuery; })(); var // Promise methods - promiseMethods = "then done fail isResolved isRejected promise".split( " " ), + promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ), // Static reference to slice sliceDeferred = [].slice; @@ -1016,10 +1049,37 @@ jQuery.extend({ deferred.done( doneCallbacks ).fail( failCallbacks ); return this; }, + always: function() { + return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments ); + }, fail: failDeferred.done, rejectWith: failDeferred.resolveWith, reject: failDeferred.resolve, isRejected: failDeferred.isResolved, + pipe: function( fnDone, fnFail ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject ); + } else { + newDefer[ action ]( returned ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { @@ -1035,7 +1095,7 @@ jQuery.extend({ } return obj; } - } ); + }); // Make sure only one callback list will be used deferred.done( failDeferred.cancel ).fail( deferred.cancel ); // Unexpose cancel @@ -1087,46 +1147,64 @@ jQuery.extend({ +jQuery.support = (function() { -(function() { + var div = document.createElement( "div" ), + documentElement = document.documentElement, + all, + a, + select, + opt, + input, + marginDiv, + support, + fragment, + body, + testElementParent, + testElement, + testElementStyle, + tds, + events, + eventName, + i, + isSupported; - jQuery.support = {}; + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
a"; - var div = document.createElement("div"); - - div.style.display = "none"; - div.innerHTML = "
a"; - - var all = div.getElementsByTagName("*"), - a = div.getElementsByTagName("a")[0], - select = document.createElement("select"), - opt = select.appendChild( document.createElement("option") ), - input = div.getElementsByTagName("input")[0]; + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; // Can't get basic test support if ( !all || !all.length || !a ) { - return; + return {}; } - jQuery.support = { + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: div.firstChild.nodeType === 3, + leadingWhitespace: ( div.firstChild.nodeType === 3 ), // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables - tbody: !div.getElementsByTagName("tbody").length, + tbody: !div.getElementsByTagName( "tbody" ).length, // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName("link").length, + htmlSerialize: !!div.getElementsByTagName( "link" ).length, // Get the style information from getAttribute - // (IE uses .cssText insted) - style: /red/.test( a.getAttribute("style") ), + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), // Make sure that URLs aren't manipulated // (IE normalizes it by default) - hrefNormalized: a.getAttribute("href") === "/a", + hrefNormalized: ( a.getAttribute( "href" ) === "/a" ), // Make sure that element opacity exists // (IE uses filter instead) @@ -1140,188 +1218,193 @@ jQuery.extend({ // Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) - checkOn: input.value === "on", + checkOn: ( input.value === "on" ), // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: opt.selected, + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, deleteExpando: true, - optDisabled: false, - checkClone: false, noCloneEvent: true, - noCloneChecked: true, - boxModel: null, inlineBlockNeedsLayout: false, shrinkWrapBlocks: false, - reliableHiddenOffsets: true, reliableMarginRight: true }; + // Make sure checked status is properly cloned input.checked = true; - jQuery.support.noCloneChecked = input.cloneNode( true ).checked; + support.noCloneChecked = input.cloneNode( true ).checked; // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as diabled) + // (WebKit marks them as disabled) select.disabled = true; - jQuery.support.optDisabled = !opt.disabled; - - var _scriptEval = null; - jQuery.support.scriptEval = function() { - if ( _scriptEval === null ) { - var root = document.documentElement, - script = document.createElement("script"), - id = "script" + jQuery.now(); - - // Make sure that the execution of code works by injecting a script - // tag with appendChild/createTextNode - // (IE doesn't support this, fails, and uses .text instead) - try { - script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - } catch(e) {} - - root.insertBefore( script, root.firstChild ); - - if ( window[ id ] ) { - _scriptEval = true; - delete window[ id ]; - } else { - _scriptEval = false; - } - - root.removeChild( script ); - } - - return _scriptEval; - }; + support.optDisabled = !opt.disabled; // Test to see if it's possible to delete an expando from an element // Fails in Internet Explorer try { delete div.test; - - } catch(e) { - jQuery.support.deleteExpando = false; + } catch( e ) { + support.deleteExpando = false; } if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { - div.attachEvent("onclick", function click() { + div.attachEvent( "onclick", function() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) - jQuery.support.noCloneEvent = false; - div.detachEvent("onclick", click); + support.noCloneEvent = false; }); - div.cloneNode(true).fireEvent("onclick"); + div.cloneNode( true ).fireEvent( "onclick" ); } - div = document.createElement("div"); - div.innerHTML = ""; + // Check if a radio maintains it's value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; - var fragment = document.createDocumentFragment(); + input.setAttribute("checked", "checked"); + div.appendChild( input ); + fragment = document.createDocumentFragment(); fragment.appendChild( div.firstChild ); // WebKit doesn't clone checked state correctly in fragments - jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + div.innerHTML = ""; // Figure out if the W3C box model works as expected - // document.body must exist before we can do this - jQuery(function() { - var div = document.createElement("div"), - body = document.getElementsByTagName("body")[0]; + div.style.width = div.style.paddingLeft = "1px"; - // Frameset documents with no body should not run this code - if ( !body ) { - return; - } + body = document.getElementsByTagName( "body" )[ 0 ]; + // We use our own, invisible, body unless the body is already present + // in which case we use a div (#9239) + testElement = document.createElement( body ? "div" : "body" ); + testElementStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0 + }; + if ( body ) { + jQuery.extend( testElementStyle, { + position: "absolute", + left: -1000, + top: -1000 + }); + } + for ( i in testElementStyle ) { + testElement.style[ i ] = testElementStyle[ i ]; + } + testElement.appendChild( div ); + testElementParent = body || documentElement; + testElementParent.insertBefore( testElement, testElementParent.firstChild ); - div.style.width = div.style.paddingLeft = "1px"; - body.appendChild( div ); - jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; - if ( "zoom" in div.style ) { - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - // (IE < 8 does this) - div.style.display = "inline"; - div.style.zoom = 1; - jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2; + support.boxModel = div.offsetWidth === 2; - // Check if elements with layout shrink-wrap their children - // (IE 6 does this) - div.style.display = ""; - div.innerHTML = "
"; - jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2; - } + if ( "zoom" in div.style ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); - div.innerHTML = "
t
"; - var tds = div.getElementsByTagName("td"); + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + } - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - // (only IE 8 fails this test) - jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0; + div.innerHTML = "
t
"; + tds = div.getElementsByTagName( "td" ); - tds[0].style.display = ""; - tds[1].style.display = "none"; + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + isSupported = ( tds[ 0 ].offsetHeight === 0 ); - // Check if empty table cells still have offsetWidth/Height - // (IE < 8 fail this test) - jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0; - div.innerHTML = ""; + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. For more - // info see bug #3333 - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - if ( document.defaultView && document.defaultView.getComputedStyle ) { - div.style.width = "1px"; - div.style.marginRight = "0"; - jQuery.support.reliableMarginRight = ( parseInt(document.defaultView.getComputedStyle(div, null).marginRight, 10) || 0 ) === 0; - } + // Check if empty table cells still have offsetWidth/Height + // (IE < 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + div.innerHTML = ""; - body.removeChild( div ).style.display = "none"; - div = tds = null; - }); + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( document.defaultView && document.defaultView.getComputedStyle ) { + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + // Remove the body element we added + testElement.innerHTML = ""; + testElementParent.removeChild( testElement ); // Technique from Juriy Zaytsev // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - var eventSupported = function( eventName ) { - var el = document.createElement("div"); - eventName = "on" + eventName; - - // We only care about the case where non-standard event systems - // are used, namely in IE. Short-circuiting here helps us to - // avoid an eval call (in setAttribute) which can cause CSP - // to go haywire. See: https://developer.mozilla.org/en/Security/CSP - if ( !el.attachEvent ) { - return true; + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for( i in { + submit: 1, + change: 1, + focusin: 1 + } ) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; } + } - var isSupported = (eventName in el); - if ( !isSupported ) { - el.setAttribute(eventName, "return;"); - isSupported = typeof el[eventName] === "function"; - } - return isSupported; - }; + // Null connected elements to avoid leaks in IE + testElement = fragment = select = opt = body = marginDiv = div = input = null; - jQuery.support.submitBubbles = eventSupported("submit"); - jQuery.support.changeBubbles = eventSupported("change"); - - // release memory in IE - div = all = a = null; + return support; })(); +// Keep track of boxModel +jQuery.boxModel = jQuery.support.boxModel; -var rbrace = /^(?:\{.*\}|\[.*\])$/; + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([a-z])([A-Z])/g; jQuery.extend({ cache: {}, @@ -1418,7 +1501,7 @@ jQuery.extend({ } if ( data !== undefined ) { - thisCache[ name ] = data; + thisCache[ jQuery.camelCase( name ) ] = data; } // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should @@ -1428,7 +1511,10 @@ jQuery.extend({ return thisCache[ internalKey ] && thisCache[ internalKey ].events; } - return getByName ? thisCache[ name ] : thisCache; + return getByName ? + // Check for both converted-to-camel and non-converted data property names + thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] : + thisCache; }, removeData: function( elem, name, pvt /* Internal Use Only */ ) { @@ -1544,12 +1630,13 @@ jQuery.fn.extend({ data = jQuery.data( this[0] ); if ( this[0].nodeType === 1 ) { - var attr = this[0].attributes, name; + var attr = this[0].attributes, name; for ( var i = 0, l = attr.length; i < l; i++ ) { name = attr[i].name; if ( name.indexOf( "data-" ) === 0 ) { - name = name.substr( 5 ); + name = jQuery.camelCase( name.substring(5) ); + dataAttr( this[0], name, data[ name ] ); } } @@ -1603,7 +1690,9 @@ function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { - data = elem.getAttribute( "data-" + key ); + var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); + + data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { @@ -1642,35 +1731,76 @@ function isEmptyDataObject( obj ) { +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery.data( elem, deferDataKey, undefined, true ); + if ( defer && + ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) && + ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery.data( elem, queueDataKey, undefined, true ) && + !jQuery.data( elem, markDataKey, undefined, true ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.resolve(); + } + }, 0 ); + } +} + jQuery.extend({ - queue: function( elem, type, data ) { - if ( !elem ) { - return; + + _mark: function( elem, type ) { + if ( elem ) { + type = (type || "fx") + "mark"; + jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true ); } + }, - type = (type || "fx") + "queue"; - var q = jQuery._data( elem, type ); + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 ); + if ( count ) { + jQuery.data( elem, key, count, true ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, - // Speed up dequeue by getting out quickly if this is just a lookup - if ( !data ) { + queue: function( elem, type, data ) { + if ( elem ) { + type = (type || "fx") + "queue"; + var q = jQuery.data( elem, type, undefined, true ); + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery.data( elem, type, jQuery.makeArray(data), true ); + } else { + q.push( data ); + } + } return q || []; } - - if ( !q || jQuery.isArray(data) ) { - q = jQuery._data( elem, type, jQuery.makeArray(data) ); - - } else { - q.push( data ); - } - - return q; }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), - fn = queue.shift(); + fn = queue.shift(), + defer; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { @@ -1691,6 +1821,7 @@ jQuery.extend({ if ( !queue.length ) { jQuery.removeData( elem, type + "queue", true ); + handleQueueMarkDefer( elem, type, "queue" ); } } }); @@ -1705,7 +1836,7 @@ jQuery.fn.extend({ if ( data === undefined ) { return jQuery.queue( this[0], type ); } - return this.each(function( i ) { + return this.each(function() { var queue = jQuery.queue( this, type, data ); if ( type === "fx" && queue[0] !== "inprogress" ) { @@ -1718,7 +1849,6 @@ jQuery.fn.extend({ jQuery.dequeue( this, type ); }); }, - // Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { @@ -1732,9 +1862,41 @@ jQuery.fn.extend({ }, time ); }); }, - clearQueue: function( type ) { return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) { + count++; + tmp.done( resolve ); + } + } + resolve(); + return defer.promise(); } }); @@ -1742,66 +1904,67 @@ jQuery.fn.extend({ var rclass = /[\n\t\r]/g, - rspaces = /\s+/, + rspace = /\s+/, rreturn = /\r/g, - rspecialurl = /^(?:href|src|style)$/, rtype = /^(?:button|input)$/i, rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea)?$/i, - rradiocheck = /^(?:radio|checkbox)$/i; - -jQuery.props = { - "for": "htmlFor", - "class": "className", - readonly: "readOnly", - maxlength: "maxLength", - cellspacing: "cellSpacing", - rowspan: "rowSpan", - colspan: "colSpan", - tabindex: "tabIndex", - usemap: "useMap", - frameborder: "frameBorder" -}; + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + rinvalidChar = /\:|^on/, + formHook, boolHook; jQuery.fn.extend({ attr: function( name, value ) { return jQuery.access( this, name, value, true, jQuery.attr ); }, - removeAttr: function( name, fn ) { - return this.each(function(){ - jQuery.attr( this, name, "" ); - if ( this.nodeType === 1 ) { - this.removeAttribute( name ); - } + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.prop ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} }); }, addClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.addClass( value.call(this, i, self.attr("class")) ); + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); }); } if ( value && typeof value === "string" ) { - var classNames = (value || "").split( rspaces ); + classNames = value.split( rspace ); - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; if ( elem.nodeType === 1 ) { - if ( !elem.className ) { + if ( !elem.className && classNames.length === 1 ) { elem.className = value; } else { - var className = " " + elem.className + " ", - setClass = elem.className; + setClass = " " + elem.className + " "; - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { - setClass += " " + classNames[c]; + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; } } elem.className = jQuery.trim( setClass ); @@ -1814,24 +1977,25 @@ jQuery.fn.extend({ }, removeClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.removeClass( value.call(this, i, self.attr("class")) ); + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); }); } if ( (value && typeof value === "string") || value === undefined ) { - var classNames = (value || "").split( rspaces ); + classNames = (value || "").split( rspace ); - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; if ( elem.nodeType === 1 && elem.className ) { if ( value ) { - var className = (" " + elem.className + " ").replace(rclass, " "); - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[c] + " ", " "); + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); } elem.className = jQuery.trim( className ); @@ -1850,9 +2014,8 @@ jQuery.fn.extend({ isBool = typeof stateVal === "boolean"; if ( jQuery.isFunction( value ) ) { - return this.each(function(i) { - var self = jQuery(this); - self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); }); } @@ -1863,7 +2026,7 @@ jQuery.fn.extend({ i = 0, self = jQuery( this ), state = stateVal, - classNames = value.split( rspaces ); + classNames = value.split( rspace ); while ( (className = classNames[ i++ ]) ) { // check each className given, space seperated list @@ -1895,82 +2058,42 @@ jQuery.fn.extend({ }, val: function( value ) { + var hooks, ret, + elem = this[0]; + if ( !arguments.length ) { - var elem = this[0]; - if ( elem ) { - if ( jQuery.nodeName( elem, "option" ) ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; + hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; } - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && - (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { - - // Get the specific value for the option - value = jQuery(option).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - // Fixes Bug #2551 -- select.val() broken in IE after form.reset() - if ( one && !values.length && options.length ) { - return jQuery( options[ index ] ).val(); - } - - return values; - } - - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { - return elem.getAttribute("value") === null ? "on" : elem.value; - } - - // Everything else, we just grab the value - return (elem.value || "").replace(rreturn, ""); + ret = elem.value; + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; } return undefined; } - var isFunction = jQuery.isFunction(value); + var isFunction = jQuery.isFunction( value ); - return this.each(function(i) { - var self = jQuery(this), val = value; + return this.each(function( i ) { + var self = jQuery(this), val; if ( this.nodeType !== 1 ) { return; } if ( isFunction ) { - val = value.call(this, i, self.val()); + val = value.call( this, i, self.val() ); + } else { + val = value; } // Treat null/undefined as ""; convert numbers to string @@ -1978,27 +2101,16 @@ jQuery.fn.extend({ val = ""; } else if ( typeof val === "number" ) { val += ""; - } else if ( jQuery.isArray(val) ) { - val = jQuery.map(val, function (value) { + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { return value == null ? "" : value + ""; }); } - if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { - this.checked = jQuery.inArray( self.val(), val ) >= 0; + hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; - } else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(val); - - jQuery( "option", this ).each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - this.selectedIndex = -1; - } - - } else { + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; } }); @@ -2006,6 +2118,72 @@ jQuery.fn.extend({ }); jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + attrFn: { val: true, css: true, @@ -2016,115 +2194,340 @@ jQuery.extend({ height: true, offset: true }, - + + attrFix: { + // Always normalize to ensure hook usage + tabindex: "tabIndex" + }, + attr: function( elem, name, value, pass ) { + var nType = elem.nodeType; + // don't get/set attributes on text, comment and attribute nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || elem.nodeType === 2 ) { + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return undefined; } if ( pass && name in jQuery.attrFn ) { - return jQuery(elem)[name](value); + return jQuery( elem )[ name ]( value ); } - var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), - // Whether we are setting (or getting) - set = value !== undefined; + // Fallback to prop when attributes are not supported + if ( !("getAttribute" in elem) ) { + return jQuery.prop( elem, name, value ); + } - // Try to normalize/fix the name - name = notxml && jQuery.props[ name ] || name; + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - // Only do all the following if this is a node (faster for style) - if ( elem.nodeType === 1 ) { - // These attributes require special treatment - var special = rspecialurl.test( name ); + // Normalize the name if needed + if ( notxml ) { + name = jQuery.attrFix[ name ] || name; - // Safari mis-reports the default selected property of an option - // Accessing the parent's selectedIndex property fixes it - if ( name === "selected" && !jQuery.support.optSelected ) { - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; + hooks = jQuery.attrHooks[ name ]; - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } + if ( !hooks ) { + // Use boolHook for boolean attributes + if ( rboolean.test( name ) ) { + + hooks = boolHook; + + // Use formHook for forms and if the name contains certain characters + } else if ( formHook && name !== "className" && + (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) { + + hooks = formHook; } } + } - // If applicable, access the attribute via the DOM 0 way - // 'in' checks fail in Blackberry 4.7 #6931 - if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) { - if ( set ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } + if ( value !== undefined ) { - if ( value === null ) { - if ( elem.nodeType === 1 ) { - elem.removeAttribute( name ); - } - - } else { - elem[ name ] = value; - } - } - - // browsers index elements by id/name on forms, give priority to attributes. - if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { - return elem.getAttributeNode( name ).nodeValue; - } - - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - if ( name === "tabIndex" ) { - var attributeNode = elem.getAttributeNode( "tabIndex" ); - - return attributeNode && attributeNode.specified ? - attributeNode.value : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - - return elem[ name ]; - } - - if ( !jQuery.support.style && notxml && name === "style" ) { - if ( set ) { - elem.style.cssText = "" + value; - } - - return elem.style.cssText; - } - - if ( set ) { - // convert the value to a string (all browsers do this but IE) see #1070 - elem.setAttribute( name, "" + value ); - } - - // Ensure that missing attributes return undefined - // Blackberry 4.7 returns "" from getAttribute #6938 - if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); return undefined; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; } - var attr = !jQuery.support.hrefNormalized && notxml && special ? - // Some attributes require a special call on IE - elem.getAttribute( name, 2 ) : - elem.getAttribute( name ); + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); // Non-existent attributes return null, we normalize to undefined - return attr === null ? undefined : attr; + return ret === null ? + undefined : + ret; } - // Handle everything which isn't a DOM element node - if ( set ) { - elem[ name ] = value; + }, + + removeAttr: function( elem, name ) { + var propName; + if ( elem.nodeType === 1 ) { + name = jQuery.attrFix[ name ] || name; + + if ( jQuery.support.getSetAttribute ) { + // Use removeAttribute in browsers that support it + elem.removeAttribute( name ); + } else { + jQuery.attr( elem, name, "" ); + elem.removeAttributeNode( elem.getAttributeNode( name ) ); + } + + // Set corresponding property to false for boolean attributes + if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { + elem[ propName ] = false; + } } - return elem[ name ]; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabIndex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + }, + // Use the value property for back compat + // Use the formHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( formHook && jQuery.nodeName( elem, "button" ) ) { + return formHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( formHook && jQuery.nodeName( elem, "button" ) ) { + return formHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return (elem[ name ] = value); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: {} +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + return jQuery.prop( elem, name ) ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !jQuery.support.getSetAttribute ) { + + // propFix is more comprehensive and contains all fixes + jQuery.attrFix = jQuery.propFix; + + // Use this for any attribute on a form in IE6/7 + formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + // Return undefined if nodeValue is empty string + return ret && ret.nodeValue !== "" ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Check form objects in IE (multiple bugs related) + // Only use nodeValue if the attribute node exists on the form + var ret = elem.getAttributeNode( name ); + if ( ret ) { + ret.nodeValue = value; + return value; + } + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return (elem.style.cssText = "" + value); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }); +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0); + } + } + }); }); @@ -2133,7 +2536,7 @@ jQuery.extend({ var rnamespaces = /\.(.*)$/, rformElems = /^(?:textarea|input|select)$/i, rperiod = /\./g, - rspace = / /g, + rspaces = / /g, rescape = /[^\w\s.|`]/g, fcleanup = function( nm ) { return nm.replace(rescape, "\\$&"); @@ -2153,17 +2556,6 @@ jQuery.event = { return; } - // TODO :: Use a try/catch until it's safe to pull this out (likely 1.6) - // Minor release fix for bug #8018 - try { - // For whatever reason, IE has trouble passing the window object - // around, causing it to be cloned in the process - if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) { - elem = window; - } - } - catch ( e ) {} - if ( handler === false ) { handler = returnFalse; } else if ( !handler ) { @@ -2201,9 +2593,9 @@ jQuery.event = { if ( !eventHandle ) { elemData.handle = eventHandle = function( e ) { - // Handle the second event of a trigger and when - // an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.handle.apply( eventHandle.elem, arguments ) : undefined; }; @@ -2273,7 +2665,7 @@ jQuery.event = { // Add the function to the element's handler list handlers.push( handleObj ); - // Keep track of which events have been used, for global triggering + // Keep track of which events have been used, for event optimization jQuery.event.global[ type ] = true; } @@ -2406,182 +2798,185 @@ jQuery.event = { } } }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, - // bubbling is internal - trigger: function( event, data, elem /*, bubbling */ ) { + trigger: function( event, data, elem, onlyHandlers ) { // Event object or event type var type = event.type || event, - bubbling = arguments[3]; + namespaces = [], + exclusive; - if ( !bubbling ) { - event = typeof event === "object" ? - // jQuery.Event object - event[ jQuery.expando ] ? event : - // Object literal - jQuery.extend( jQuery.Event(type), event ) : - // Just the event type (string) - jQuery.Event(type); - - if ( type.indexOf("!") >= 0 ) { - event.type = type = type.slice(0, -1); - event.exclusive = true; - } - - // Handle a global trigger - if ( !elem ) { - // Don't bubble custom events when global (to avoid too much overhead) - event.stopPropagation(); - - // Only trigger if we've ever bound an event for it - if ( jQuery.event.global[ type ] ) { - // XXX This code smells terrible. event.js should not be directly - // inspecting the data cache - jQuery.each( jQuery.cache, function() { - // internalKey variable is just used to make it easier to find - // and potentially change this stuff later; currently it just - // points to jQuery.expando - var internalKey = jQuery.expando, - internalCache = this[ internalKey ]; - if ( internalCache && internalCache.events && internalCache.events[ type ] ) { - jQuery.event.trigger( event, data, internalCache.handle.elem ); - } - }); - } - } - - // Handle triggering a single element - - // don't do events on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - // Clean up in case it is reused - event.result = undefined; - event.target = elem; - - // Clone the incoming data, if any - data = jQuery.makeArray( data ); - data.unshift( event ); + if ( type.indexOf("!") >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; } - event.currentTarget = elem; - - // Trigger the event, it is assumed that "handle" is a function - var handle = jQuery._data( elem, "handle" ); - - if ( handle ) { - handle.apply( elem, data ); + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); } - var parent = elem.parentNode || elem.ownerDocument; + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } - // Trigger an inline bound script - try { - if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { - if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { - event.result = false; - event.preventDefault(); + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.exclusive = exclusive; + event.namespace = namespaces.join("."); + event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); + + // triggerHandler() and global events don't bubble or run the default action + if ( onlyHandlers || !elem ) { + event.preventDefault(); + event.stopPropagation(); + } + + // Handle a global trigger + if ( !elem ) { + // TODO: Stop taunting the data cache; remove global events and always attach to document + jQuery.each( jQuery.cache, function() { + // internalKey variable is just used to make it easier to find + // and potentially change this stuff later; currently it just + // points to jQuery.expando + var internalKey = jQuery.expando, + internalCache = this[ internalKey ]; + if ( internalCache && internalCache.events && internalCache.events[ type ] ) { + jQuery.event.trigger( event, data, internalCache.handle.elem ); } + }); + return; + } + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + event.target = elem; + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + var cur = elem, + // IE doesn't like method names with a colon (#3533, #8272) + ontype = type.indexOf(":") < 0 ? "on" + type : ""; + + // Fire event on the current element, then bubble up the DOM tree + do { + var handle = jQuery._data( cur, "handle" ); + + event.currentTarget = cur; + if ( handle ) { + handle.apply( cur, data ); } - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (inlineError) {} + // Trigger an inline bound script + if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) { + event.result = false; + event.preventDefault(); + } - if ( !event.isPropagationStopped() && parent ) { - jQuery.event.trigger( event, data, parent, true ); + // Bubble up to document, then to window + cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window; + } while ( cur && !event.isPropagationStopped() ); - } else if ( !event.isDefaultPrevented() ) { + // If nobody prevented the default action, do it now + if ( !event.isDefaultPrevented() ) { var old, - target = event.target, - targetType = type.replace( rnamespaces, "" ), - isClick = jQuery.nodeName( target, "a" ) && targetType === "click", - special = jQuery.event.special[ targetType ] || {}; + special = jQuery.event.special[ type ] || {}; - if ( (!special._default || special._default.call( elem, event ) === false) && - !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { + if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction)() check here because IE6/7 fails that test. + // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch. try { - if ( target[ targetType ] ) { - // Make sure that we don't accidentally re-trigger the onFOO events - old = target[ "on" + targetType ]; + if ( ontype && elem[ type ] ) { + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; if ( old ) { - target[ "on" + targetType ] = null; + elem[ ontype ] = null; } - jQuery.event.triggered = event.type; - target[ targetType ](); + jQuery.event.triggered = type; + elem[ type ](); } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (triggerError) {} + } catch ( ieError ) {} if ( old ) { - target[ "on" + targetType ] = old; + elem[ ontype ] = old; } jQuery.event.triggered = undefined; } } + + return event.result; }, handle: function( event ) { - var all, handlers, namespaces, namespace_re, events, - namespace_sort = [], - args = jQuery.makeArray( arguments ); + event = jQuery.event.fix( event || window.event ); + // Snapshot the handlers list since a called handler may add/remove events. + var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0), + run_all = !event.exclusive && !event.namespace, + args = Array.prototype.slice.call( arguments, 0 ); - event = args[0] = jQuery.event.fix( event || window.event ); + // Use the fix-ed Event rather than the (read-only) native event + args[0] = event; event.currentTarget = this; - // Namespaced event handlers - all = event.type.indexOf(".") < 0 && !event.exclusive; + for ( var j = 0, l = handlers.length; j < l; j++ ) { + var handleObj = handlers[ j ]; - if ( !all ) { - namespaces = event.type.split("."); - event.type = namespaces.shift(); - namespace_sort = namespaces.slice(0).sort(); - namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)"); - } + // Triggered event must 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event. + if ( run_all || event.namespace_re.test( handleObj.namespace ) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handleObj.handler; + event.data = handleObj.data; + event.handleObj = handleObj; - event.namespace = event.namespace || namespace_sort.join("."); + var ret = handleObj.handler.apply( this, args ); - events = jQuery._data(this, "events"); - - handlers = (events || {})[ event.type ]; - - if ( events && handlers ) { - // Clone the handlers to prevent manipulation - handlers = handlers.slice(0); - - for ( var j = 0, l = handlers.length; j < l; j++ ) { - var handleObj = handlers[ j ]; - - // Filter the functions by class - if ( all || namespace_re.test( handleObj.namespace ) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handleObj.handler; - event.data = handleObj.data; - event.handleObj = handleObj; - - var ret = handleObj.handler.apply( this, args ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); } + } - if ( event.isImmediatePropagationStopped() ) { - break; - } + if ( event.isImmediatePropagationStopped() ) { + break; } } } - return event.result; }, @@ -2620,8 +3015,9 @@ jQuery.event = { // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && event.clientX != null ) { - var doc = document.documentElement, - body = document.body; + var eventDocument = event.target.ownerDocument || document, + doc = eventDocument.documentElement, + body = eventDocument.body; event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); @@ -2700,10 +3096,10 @@ jQuery.removeEvent = document.removeEventListener ? } }; -jQuery.Event = function( src ) { +jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !this.preventDefault ) { - return new jQuery.Event( src ); + return new jQuery.Event( src, props ); } // Event object @@ -2721,6 +3117,11 @@ jQuery.Event = function( src ) { this.type = src; } + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + // timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value this.timeStamp = jQuery.now(); @@ -2782,33 +3183,27 @@ jQuery.Event.prototype = { // Checks if an event happened on an element within another element // Used in jQuery.event.special.mouseenter and mouseleave handlers var withinElement = function( event ) { + // Check if mouse(over|out) are still within the same parent element - var parent = event.relatedTarget; + var related = event.relatedTarget, + inside = false, + eventType = event.type; - // Firefox sometimes assigns relatedTarget a XUL element - // which we cannot access the parentNode property of - try { + event.type = event.data; - // Chrome does something similar, the parentNode property - // can be accessed but is null. - if ( parent && parent !== document && !parent.parentNode ) { - return; - } - // Traverse up the tree - while ( parent && parent !== this ) { - parent = parent.parentNode; + if ( related !== this ) { + + if ( related ) { + inside = jQuery.contains( this, related ); } - if ( parent !== this ) { - // set the correct event type - event.type = event.data; + if ( !inside ) { - // handle event if we actually just moused on to a non sub-element jQuery.event.handle.apply( this, arguments ); - } - // assuming we've left the element since we most likely mousedover a xul element - } catch(e) { } + event.type = eventType; + } + } }, // In case of event delegation, we only need to rename the event.type, @@ -2838,7 +3233,7 @@ if ( !jQuery.support.submitBubbles ) { jQuery.event.special.submit = { setup: function( data, namespaces ) { - if ( this.nodeName && this.nodeName.toLowerCase() !== "form" ) { + if ( !jQuery.nodeName( this, "form" ) ) { jQuery.event.add(this, "click.specialSubmit", function( e ) { var elem = e.target, type = elem.type; @@ -2887,7 +3282,7 @@ if ( !jQuery.support.changeBubbles ) { }).join("-") : ""; - } else if ( elem.nodeName.toLowerCase() === "select" ) { + } else if ( jQuery.nodeName( elem, "select" ) ) { val = elem.selectedIndex; } @@ -2927,9 +3322,9 @@ if ( !jQuery.support.changeBubbles ) { beforedeactivate: testChange, click: function( e ) { - var elem = e.target, type = elem.type; + var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; - if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { + if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) { testChange.call( this, e ); } }, @@ -2937,9 +3332,9 @@ if ( !jQuery.support.changeBubbles ) { // Change has to be called before submit // Keydown will be called before keypress, which is used in submit-event delegation keydown: function( e ) { - var elem = e.target, type = elem.type; + var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; - if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || + if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) || (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || type === "select-multiple" ) { testChange.call( this, e ); @@ -2996,12 +3391,12 @@ function trigger( type, elem, args ) { } // Create "bubbling" focus and blur events -if ( document.addEventListener ) { +if ( !jQuery.support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - + // Attach a single capturing handler while someone wants focusin/focusout var attaches = 0; - + jQuery.event.special[ fix ] = { setup: function() { if ( attaches++ === 0 ) { @@ -3031,6 +3426,8 @@ if ( document.addEventListener ) { jQuery.each(["bind", "one"], function( i, name ) { jQuery.fn[ name ] = function( type, data, fn ) { + var handler; + // Handle object literals if ( typeof type === "object" ) { for ( var key in type ) { @@ -3039,15 +3436,20 @@ jQuery.each(["bind", "one"], function( i, name ) { return this; } - if ( jQuery.isFunction( data ) || data === false ) { + if ( arguments.length === 2 || data === false ) { fn = data; data = undefined; } - var handler = name === "one" ? jQuery.proxy( fn, function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }) : fn; + if ( name === "one" ) { + handler = function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }; + handler.guid = fn.guid || jQuery.guid++; + } else { + handler = fn; + } if ( type === "unload" && name !== "one" ) { this.one( type, data, fn ); @@ -3085,7 +3487,7 @@ jQuery.fn.extend({ undelegate: function( selector, types, fn ) { if ( arguments.length === 0 ) { - return this.unbind( "live" ); + return this.unbind( "live" ); } else { return this.die( types, null, fn, selector ); @@ -3100,35 +3502,34 @@ jQuery.fn.extend({ triggerHandler: function( type, data ) { if ( this[0] ) { - var event = jQuery.Event( type ); - event.preventDefault(); - event.stopPropagation(); - jQuery.event.trigger( event, data, this[0] ); - return event.result; + return jQuery.event.trigger( type, data, this[0], true ); } }, toggle: function( fn ) { // Save reference to arguments for access in closure var args = arguments, - i = 1; + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; while ( i < args.length ) { - jQuery.proxy( fn, args[ i++ ] ); + args[ i++ ].guid = guid; } - return this.click( jQuery.proxy( fn, function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - })); + return this.click( toggler ); }, hover: function( fnOver, fnOut ) { @@ -3157,8 +3558,16 @@ jQuery.each(["live", "die"], function( i, name ) { return this; } - if ( jQuery.isFunction( data ) ) { - fn = data; + if ( name === "die" && !types && + origSelector && origSelector.charAt(0) === "." ) { + + context.unbind( origSelector ); + + return this; + } + + if ( data === false || jQuery.isFunction( data ) ) { + fn = data || returnFalse; data = undefined; } @@ -3180,7 +3589,7 @@ jQuery.each(["live", "die"], function( i, name ) { preType = type; - if ( type === "focus" || type === "blur" ) { + if ( liveMap[ type ] ) { types.push( liveMap[ type ] + namespaces ); type = type + namespaces; @@ -3251,6 +3660,11 @@ function liveHandler( event ) { if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { event.type = handleObj.preType; related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; + + // Make sure not to accidentally match a child element with the same selector + if ( related && jQuery.contains( elem, related ) ) { + related = elem; + } } if ( !related || related !== elem ) { @@ -3289,7 +3703,7 @@ function liveHandler( event ) { } function liveConvert( type, selector ) { - return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&"); + return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&"); } jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + @@ -3314,6 +3728,7 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl }); + /*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation @@ -3941,42 +4356,50 @@ var Expr = Sizzle.selectors = { var attr = elem.getAttribute( "type" ), type = elem.type; // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case - return "text" === type && ( attr === type || attr === null ); + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); }, radio: function( elem ) { - return "radio" === elem.type; + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; }, checkbox: function( elem ) { - return "checkbox" === elem.type; + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; }, file: function( elem ) { - return "file" === elem.type; + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; }, + password: function( elem ) { - return "password" === elem.type; + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; }, submit: function( elem ) { - return "submit" === elem.type; + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; }, image: function( elem ) { - return "image" === elem.type; + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; }, reset: function( elem ) { - return "reset" === elem.type; + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; }, button: function( elem ) { - return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; }, input: function( elem ) { return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; } }, setFilters: { @@ -4229,6 +4652,16 @@ if ( document.documentElement.compareDocumentPosition ) { } else { sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + var al, bl, ap = [], bp = [], @@ -4236,13 +4669,8 @@ if ( document.documentElement.compareDocumentPosition ) { bup = b.parentNode, cur = aup; - // The nodes are identical, we can exit early - if ( a === b ) { - hasDuplicate = true; - return 0; - // If the nodes are siblings (or identical) we can do a quick check - } else if ( aup === bup ) { + if ( aup === bup ) { return siblingCheck( a, b ); // If no parents were found then the nodes are disconnected @@ -4739,17 +5167,30 @@ var runtil = /Until$/, jQuery.fn.extend({ find: function( selector ) { - var ret = this.pushStack( "", "find", selector ), - length = 0; + var self = this, + i, l; - for ( var i = 0, l = this.length; i < l; i++ ) { + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { length = ret.length; jQuery.find( selector, this[i], ret ); if ( i > 0 ) { // Make sure that the results are unique - for ( var n = length; n < ret.length; n++ ) { - for ( var r = 0; r < length; r++ ) { + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { if ( ret[r] === ret[n] ) { ret.splice(n--, 1); break; @@ -4782,12 +5223,15 @@ jQuery.fn.extend({ }, is: function( selector ) { - return !!selector && jQuery.filter( selector, this ).length > 0; + return !!selector && ( typeof selector === "string" ? + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); }, closest: function( selectors, context ) { var ret = [], i, l, cur = this[0]; - + + // Array if ( jQuery.isArray( selectors ) ) { var match, selector, matches = {}, @@ -4797,8 +5241,8 @@ jQuery.fn.extend({ for ( i = 0, l = selectors.length; i < l; i++ ) { selector = selectors[i]; - if ( !matches[selector] ) { - matches[selector] = jQuery.expr.match.POS.test( selector ) ? + if ( !matches[ selector ] ) { + matches[ selector ] = POS.test( selector ) ? jQuery( selector, context || this.context ) : selector; } @@ -4806,9 +5250,9 @@ jQuery.fn.extend({ while ( cur && cur.ownerDocument && cur !== context ) { for ( selector in matches ) { - match = matches[selector]; + match = matches[ selector ]; - if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { + if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) { ret.push({ selector: selector, elem: cur, level: level }); } } @@ -4821,8 +5265,10 @@ jQuery.fn.extend({ return ret; } - var pos = POS.test( selectors ) ? - jQuery( selectors, context || this.context ) : null; + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; for ( i = 0, l = this.length; i < l; i++ ) { cur = this[i]; @@ -4834,14 +5280,14 @@ jQuery.fn.extend({ } else { cur = cur.parentNode; - if ( !cur || !cur.ownerDocument || cur === context ) { + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { break; } } } } - ret = ret.length > 1 ? jQuery.unique(ret) : ret; + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; return this.pushStack( ret, "closest", selectors ); }, @@ -4864,7 +5310,7 @@ jQuery.fn.extend({ add: function( selector, context ) { var set = typeof selector === "string" ? jQuery( selector, context ) : - jQuery.makeArray( selector ), + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), all = jQuery.merge( this.get(), set ); return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? @@ -5002,6 +5448,11 @@ jQuery.extend({ // Implement the identical functionality for filter and not function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep(elements, function( elem, i ) { var retVal = !!qualifier.call( elem, i, elem ); @@ -5042,6 +5493,8 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, rnocache = /<(?:script|object|embed|option|style)/i, // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], legend: [ 1, "
", "
" ], @@ -5102,7 +5555,7 @@ jQuery.fn.extend({ } return elem; - }).append(this); + }).append( this ); } return this; @@ -5410,21 +5863,27 @@ function cloneCopyEvent( src, dest ) { } } -function cloneFixAttributes(src, dest) { +function cloneFixAttributes( src, dest ) { + var nodeName; + // We do not need to do anything for non-Elements if ( dest.nodeType !== 1 ) { return; } - var nodeName = dest.nodeName.toLowerCase(); - // clearAttributes removes the attributes, which we don't want, // but also removes the attachEvent events, which we *do* want - dest.clearAttributes(); + if ( dest.clearAttributes ) { + dest.clearAttributes(); + } // mergeAttributes, in contrast, only merges back on the // original attributes, not the events - dest.mergeAttributes(src); + if ( dest.mergeAttributes ) { + dest.mergeAttributes( src ); + } + + nodeName = dest.nodeName.toLowerCase(); // IE6-8 fail to clone children inside object elements that use // the proprietary classid attribute value (rather than the type @@ -5463,8 +5922,21 @@ function cloneFixAttributes(src, dest) { } jQuery.buildFragment = function( args, nodes, scripts ) { - var fragment, cacheable, cacheresults, - doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document); + var fragment, cacheable, cacheresults, doc; + + // nodes may contain either an explicit document object, + // a jQuery collection or context object. + // If nodes[0] contains a valid object to assign to doc + if ( nodes && nodes[0] ) { + doc = nodes[0].ownerDocument || nodes[0]; + } + + // Ensure that an attr object doesn't incorrectly stand in as a document object + // Chrome and Firefox seem to allow this to occur and will throw exception + // Fixes #8950 + if ( !doc.createDocumentFragment ) { + doc = document; + } // Only cache "small" (1/2 KB) HTML strings that are associated with the main document // Cloning options loses the selected state, so don't cache them @@ -5474,11 +5946,10 @@ jQuery.buildFragment = function( args, nodes, scripts ) { args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) { cacheable = true; + cacheresults = jQuery.fragments[ args[0] ]; - if ( cacheresults ) { - if ( cacheresults !== 1 ) { - fragment = cacheresults; - } + if ( cacheresults && cacheresults !== 1 ) { + fragment = cacheresults; } } @@ -5527,7 +5998,7 @@ jQuery.each({ function getAll( elem ) { if ( "getElementsByTagName" in elem ) { return elem.getElementsByTagName( "*" ); - + } else if ( "querySelectorAll" in elem ) { return elem.querySelectorAll( "*" ); @@ -5536,6 +6007,21 @@ function getAll( elem ) { } } +// Used in clean, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( elem.type === "checkbox" || elem.type === "radio" ) { + elem.defaultChecked = elem.checked; + } +} +// Finds all inputs and passes them to fixDefaultChecked +function findInputs( elem ) { + if ( jQuery.nodeName( elem, "input" ) ) { + fixDefaultChecked( elem ); + } else if ( "getElementsByTagName" in elem ) { + jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); + } +} + jQuery.extend({ clone: function( elem, dataAndEvents, deepDataAndEvents ) { var clone = elem.cloneNode(true), @@ -5580,10 +6066,15 @@ jQuery.extend({ } } + srcElements = destElements = null; + // Return the cloned set return clone; -}, + }, + clean: function( elems, context, fragment, scripts ) { + var checkScriptType; + context = context || document; // !context.createElement fails in IE with an error but returns typeof 'object' @@ -5591,7 +6082,7 @@ jQuery.extend({ context = context.ownerDocument || context[0] && context[0].ownerDocument || document; } - var ret = []; + var ret = [], j; for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { if ( typeof elem === "number" ) { @@ -5603,54 +6094,67 @@ jQuery.extend({ } // Convert html string into DOM nodes - if ( typeof elem === "string" && !rhtml.test( elem ) ) { - elem = context.createTextNode( elem ); + if ( typeof elem === "string" ) { + if ( !rhtml.test( elem ) ) { + elem = context.createTextNode( elem ); + } else { + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1>"); - } else if ( typeof elem === "string" ) { - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(rxhtmlTag, "<$1>"); + // Trim whitespace, otherwise indexOf won't work as expected + var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(), + wrap = wrapMap[ tag ] || wrapMap._default, + depth = wrap[0], + div = context.createElement("div"); - // Trim whitespace, otherwise indexOf won't work as expected - var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(), - wrap = wrapMap[ tag ] || wrapMap._default, - depth = wrap[0], - div = context.createElement("div"); + // Go to html and back, then peel off extra wrappers + div.innerHTML = wrap[1] + elem + wrap[2]; - // Go to html and back, then peel off extra wrappers - div.innerHTML = wrap[1] + elem + wrap[2]; + // Move to the right depth + while ( depth-- ) { + div = div.lastChild; + } - // Move to the right depth - while ( depth-- ) { - div = div.lastChild; - } + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { - // Remove IE's autoinserted from table fragments - if ( !jQuery.support.tbody ) { + // String was a , *may* have spurious + var hasBody = rtbody.test(elem), + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : - // String was a
, *may* have spurious - var hasBody = rtbody.test(elem), - tbody = tag === "table" && !hasBody ? - div.firstChild && div.firstChild.childNodes : + // String was a bare or + wrap[1] === "
" && !hasBody ? + div.childNodes : + []; - // String was a bare or - wrap[1] === "
" && !hasBody ? - div.childNodes : - []; - - for ( var j = tbody.length - 1; j >= 0 ; --j ) { - if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { - tbody[ j ].parentNode.removeChild( tbody[ j ] ); + for ( j = tbody.length - 1; j >= 0 ; --j ) { + if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { + tbody[ j ].parentNode.removeChild( tbody[ j ] ); + } } } - } + // IE completely kills leading whitespace when innerHTML is used + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + } - // IE completely kills leading whitespace when innerHTML is used - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + elem = div.childNodes; } + } - elem = div.childNodes; + // Resets defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + var len; + if ( !jQuery.support.appendChecked ) { + if ( elem[0] && typeof (len = elem.length) === "number" ) { + for ( j = 0; j < len; j++ ) { + findInputs( elem[j] ); + } + } else { + findInputs( elem ); + } } if ( elem.nodeType ) { @@ -5661,13 +6165,18 @@ jQuery.extend({ } if ( fragment ) { + checkScriptType = function( elem ) { + return !elem.type || rscriptType.test( elem.type ); + }; for ( i = 0; ret[i]; i++ ) { if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); } else { if ( ret[i].nodeType === 1 ) { - ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) ); + var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType ); + + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); } fragment.appendChild( ret[i] ); } @@ -5729,7 +6238,7 @@ function evalScript( i, elem ) { dataType: "script" }); } else { - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) ); } if ( elem.parentNode ) { @@ -5739,14 +6248,14 @@ function evalScript( i, elem ) { - var ralpha = /alpha\([^)]*\)/i, ropacity = /opacity=([^)]*)/, - rdashAlpha = /-([a-z])/ig, // fixed for IE9, see #8346 rupper = /([A-Z]|^ms)/g, rnumpx = /^-?\d+(?:px)?$/i, rnum = /^-?\d/, + rrelNum = /^[+\-]=/, + rrelNumFilter = /[^+\-\.\de]+/g, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssWidth = [ "Left", "Right" ], @@ -5754,11 +6263,7 @@ var ralpha = /alpha\([^)]*\)/i, curCSS, getComputedStyle, - currentStyle, - - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; + currentStyle; jQuery.fn.css = function( name, value ) { // Setting 'undefined' is a no-op @@ -5793,11 +6298,14 @@ jQuery.extend({ // Exclude the following css properties to add px cssNumber: { - "zIndex": true, + "fillOpacity": true, "fontWeight": true, + "lineHeight": true, "opacity": true, - "zoom": true, - "lineHeight": true + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true }, // Add in properties whose names you wish to fix before @@ -5815,20 +6323,29 @@ jQuery.extend({ } // Make sure that we're working with the right name - var ret, origName = jQuery.camelCase( name ), + var ret, type, origName = jQuery.camelCase( name ), style = elem.style, hooks = jQuery.cssHooks[ origName ]; name = jQuery.cssProps[ origName ] || origName; // Check if we're setting a value if ( value !== undefined ) { + type = typeof value; + // Make sure that NaN and null values aren't set. See: #7116 - if ( typeof value === "number" && isNaN( value ) || value == null ) { + if ( type === "number" && isNaN( value ) || value == null ) { return; } + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && rrelNum.test( value ) ) { + value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( typeof value === "number" && !jQuery.cssNumber[ origName ] ) { + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { value += "px"; } @@ -5853,11 +6370,17 @@ jQuery.extend({ }, css: function( elem, name, extra ) { - // Make sure that we're working with the right name - var ret, origName = jQuery.camelCase( name ), - hooks = jQuery.cssHooks[ origName ]; + var ret, hooks; - name = jQuery.cssProps[ origName ] || origName; + // Make sure that we're working with the right name + name = jQuery.camelCase( name ); + hooks = jQuery.cssHooks[ name ]; + name = jQuery.cssProps[ name ] || name; + + // cssFloat needs a special treatment + if ( name === "cssFloat" ) { + name = "float"; + } // If a hook was provided get the computed value from there if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) { @@ -5865,7 +6388,7 @@ jQuery.extend({ // Otherwise, if a way to get the computed value exists, use that } else if ( curCSS ) { - return curCSS( elem, name, origName ); + return curCSS( elem, name ); } }, @@ -5885,10 +6408,6 @@ jQuery.extend({ for ( name in options ) { elem.style[ name ] = old[ name ]; } - }, - - camelCase: function( string ) { - return string.replace( rdashAlpha, fcamelCase ); } }); @@ -5902,44 +6421,21 @@ jQuery.each(["height", "width"], function( i, name ) { if ( computed ) { if ( elem.offsetWidth !== 0 ) { - val = getWH( elem, name, extra ); - + return getWH( elem, name, extra ); } else { jQuery.swap( elem, cssShow, function() { val = getWH( elem, name, extra ); }); } - if ( val <= 0 ) { - val = curCSS( elem, name, name ); - - if ( val === "0px" && currentStyle ) { - val = currentStyle( elem, name, name ); - } - - if ( val != null ) { - // Should return "auto" instead of 0, use 0 for - // temporary backwards-compat - return val === "" || val === "auto" ? "0px" : val; - } - } - - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - - // Should return "auto" instead of 0, use 0 for - // temporary backwards-compat - return val === "" || val === "auto" ? "0px" : val; - } - - return typeof val === "string" ? val : val + "px"; + return val; } }, set: function( elem, value ) { if ( rnumpx.test( value ) ) { // ignore negative width and height values #1599 - value = parseFloat(value); + value = parseFloat( value ); if ( value >= 0 ) { return value + "px"; @@ -5956,27 +6452,28 @@ if ( !jQuery.support.opacity ) { jQuery.cssHooks.opacity = { get: function( elem, computed ) { // IE uses filters for opacity - return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ? - (parseFloat(RegExp.$1) / 100) + "" : + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( parseFloat( RegExp.$1 ) / 100 ) + "" : computed ? "1" : ""; }, set: function( elem, value ) { - var style = elem.style; + var style = elem.style, + currentStyle = elem.currentStyle; // IE has trouble with opacity if it does not have layout // Force it by setting the zoom level style.zoom = 1; // Set the alpha filter to set the opacity - var opacity = jQuery.isNaN(value) ? + var opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")", - filter = style.filter || ""; + filter = currentStyle && currentStyle.filter || style.filter || ""; - style.filter = ralpha.test(filter) ? - filter.replace(ralpha, opacity) : - style.filter + ' ' + opacity; + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; } }; } @@ -6004,7 +6501,7 @@ jQuery(function() { }); if ( document.defaultView && document.defaultView.getComputedStyle ) { - getComputedStyle = function( elem, newName, name ) { + getComputedStyle = function( elem, name ) { var ret, defaultView, computedStyle; name = name.replace( rupper, "-$1" ).toLowerCase(); @@ -6061,27 +6558,50 @@ if ( document.documentElement.currentStyle ) { curCSS = getComputedStyle || currentStyle; function getWH( elem, name, extra ) { - var which = name === "width" ? cssWidth : cssHeight, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight; - if ( extra === "border" ) { - return val; + // Start with offset property + var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + which = name === "width" ? cssWidth : cssHeight; + + if ( val > 0 ) { + if ( extra !== "border" ) { + jQuery.each( which, function() { + if ( !extra ) { + val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0; + } + if ( extra === "margin" ) { + val += parseFloat( jQuery.css( elem, extra + this ) ) || 0; + } else { + val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0; + } + }); + } + + return val + "px"; } - jQuery.each( which, function() { - if ( !extra ) { - val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0; - } + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, name ); + if ( val < 0 || val == null ) { + val = elem.style[ name ] || 0; + } + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; - if ( extra === "margin" ) { - val += parseFloat(jQuery.css( elem, "margin" + this )) || 0; + // Add padding, border, margin + if ( extra ) { + jQuery.each( which, function() { + val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0; + if ( extra !== "padding" ) { + val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0; + } + if ( extra === "margin" ) { + val += parseFloat( jQuery.css( elem, extra + this ) ) || 0; + } + }); + } - } else { - val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0; - } - }); - - return val; + return val + "px"; } if ( jQuery.expr && jQuery.expr.filters ) { @@ -6115,10 +6635,6 @@ var r20 = /%20/g, rselectTextarea = /^(?:select|textarea)/i, rspacesAjax = /\s+/, rts = /([?&])_=[^&]*/, - rucHeaders = /(^|\-)([a-z])/g, - rucHeadersFunc = function( _, $1, $2 ) { - return $1 + $2.toUpperCase(); - }, rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/, // Keep a copy of the old load method @@ -6149,9 +6665,9 @@ var r20 = /%20/g, ajaxLocParts; // #8138, IE may throw an exception when accessing -// a field from document.location if document.domain has been set +// a field from window.location if document.domain has been set try { - ajaxLocation = document.location.href; + ajaxLocation = location.href; } catch( e ) { // Use the href attribute of an A element // since IE will modify it given document.location @@ -6199,7 +6715,7 @@ function addToPrefiltersOrTransports( structure ) { }; } -//Base inspection function for prefilters and transports +// Base inspection function for prefilters and transports function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, dataType /* internal */, inspected /* internal */ ) { @@ -6348,7 +6864,7 @@ jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".sp jQuery.fn[ o ] = function( f ){ return this.bind( o, f ); }; -} ); +}); jQuery.each( [ "get", "post" ], function( i, method ) { jQuery[ method ] = function( url, data, callback, type ) { @@ -6367,7 +6883,7 @@ jQuery.each( [ "get", "post" ], function( i, method ) { dataType: type }); }; -} ); +}); jQuery.extend({ @@ -6493,6 +7009,7 @@ jQuery.extend({ ifModifiedKey, // Headers (they are sent all at once) requestHeaders = {}, + requestHeadersNames = {}, // Response headers responseHeadersString, responseHeaders, @@ -6516,7 +7033,9 @@ jQuery.extend({ // Caches the header setRequestHeader: function( name, value ) { if ( !state ) { - requestHeaders[ name.toLowerCase().replace( rucHeaders, rucHeadersFunc ) ] = value; + var lname = name.toLowerCase(); + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; } return this; }, @@ -6764,24 +7283,27 @@ jQuery.extend({ // Set the correct header, if data is being sent if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - requestHeaders[ "Content-Type" ] = s.contentType; + jqXHR.setRequestHeader( "Content-Type", s.contentType ); } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. if ( s.ifModified ) { ifModifiedKey = ifModifiedKey || s.url; if ( jQuery.lastModified[ ifModifiedKey ] ) { - requestHeaders[ "If-Modified-Since" ] = jQuery.lastModified[ ifModifiedKey ]; + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); } if ( jQuery.etag[ ifModifiedKey ] ) { - requestHeaders[ "If-None-Match" ] = jQuery.etag[ ifModifiedKey ]; + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); } } // Set the Accepts header for the server, depending on the dataType - requestHeaders.Accept = s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) : - s.accepts[ "*" ]; + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) : + s.accepts[ "*" ] + ); // Check for headers option for ( i in s.headers ) { @@ -6857,7 +7379,7 @@ jQuery.extend({ // Serialize the form elements jQuery.each( a, function() { add( this.name, this.value ); - } ); + }); } else { // If traditional, encode the "old" way (the way 1.3.2 or older @@ -6873,7 +7395,7 @@ jQuery.extend({ }); function buildParams( prefix, obj, traditional, add ) { - if ( jQuery.isArray( obj ) && obj.length ) { + if ( jQuery.isArray( obj ) ) { // Serialize array item. jQuery.each( obj, function( i, v ) { if ( traditional || rbracket.test( prefix ) ) { @@ -6893,16 +7415,9 @@ function buildParams( prefix, obj, traditional, add ) { }); } else if ( !traditional && obj != null && typeof obj === "object" ) { - // If we see an array here, it is empty and should be treated as an empty - // object - if ( jQuery.isArray( obj ) || jQuery.isEmptyObject( obj ) ) { - add( prefix, "" ); - // Serialize object item. - } else { - for ( var name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } + for ( var name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); } } else { @@ -7095,13 +7610,12 @@ jQuery.ajaxSetup({ // Detect, normalize options and install callbacks for jsonp requests jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - var dataIsString = ( typeof s.data === "string" ); + var inspectData = s.contentType === "application/x-www-form-urlencoded" && + ( typeof s.data === "string" ); if ( s.dataTypes[ 0 ] === "jsonp" || - originalSettings.jsonpCallback || - originalSettings.jsonp != null || s.jsonp !== false && ( jsre.test( s.url ) || - dataIsString && jsre.test( s.data ) ) ) { + inspectData && jsre.test( s.data ) ) ) { var responseContainer, jsonpCallback = s.jsonpCallback = @@ -7109,20 +7623,12 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { previous = window[ jsonpCallback ], url = s.url, data = s.data, - replace = "$1" + jsonpCallback + "$2", - cleanUp = function() { - // Set callback back to previous value - window[ jsonpCallback ] = previous; - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( previous ) ) { - window[ jsonpCallback ]( responseContainer[ 0 ] ); - } - }; + replace = "$1" + jsonpCallback + "$2"; if ( s.jsonp !== false ) { url = url.replace( jsre, replace ); if ( s.url === url ) { - if ( dataIsString ) { + if ( inspectData ) { data = data.replace( jsre, replace ); } if ( s.data === data ) { @@ -7140,8 +7646,15 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { responseContainer = [ response ]; }; - // Install cleanUp function - jqXHR.then( cleanUp, cleanUp ); + // Clean-up function + jqXHR.always(function() { + // Set callback back to previous value + window[ jsonpCallback ] = previous; + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( previous ) ) { + window[ jsonpCallback ]( responseContainer[ 0 ] ); + } + }); // Use data converter to retrieve json after script execution s.converters["script json"] = function() { @@ -7157,7 +7670,7 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { // Delegate to script return "script"; } -} ); +}); @@ -7187,7 +7700,7 @@ jQuery.ajaxPrefilter( "script", function( s ) { s.type = "GET"; s.global = false; } -} ); +}); // Bind script tag hack transport jQuery.ajaxTransport( "script", function(s) { @@ -7215,7 +7728,7 @@ jQuery.ajaxTransport( "script", function(s) { // Attach handlers for all browsers script.onload = script.onreadystatechange = function( _, isAbort ) { - if ( !script.readyState || /loaded|complete/.test( script.readyState ) ) { + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { // Handle memory leak in IE script.onload = script.onreadystatechange = null; @@ -7246,27 +7759,20 @@ jQuery.ajaxTransport( "script", function(s) { } }; } -} ); +}); -var // #5280: next active xhr id and list of active xhrs' callbacks - xhrId = jQuery.now(), - xhrCallbacks, - - // XHR used to determine supports properties - testXHR; - -// #5280: Internet Explorer will keep connections alive if we don't abort on unload -function xhrOnUnloadAbort() { - jQuery( window ).unload(function() { +var // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject ? function() { // Abort all pending requests for ( var key in xhrCallbacks ) { xhrCallbacks[ key ]( 0, 1 ); } - }); -} + } : false, + xhrId = 0, + xhrCallbacks; // Functions to create xhrs function createStandardXHR() { @@ -7296,15 +7802,13 @@ jQuery.ajaxSettings.xhr = window.ActiveXObject ? // For all other browsers, use the standard XMLHttpRequest object createStandardXHR; -// Test if we can create an xhr object -testXHR = jQuery.ajaxSettings.xhr(); -jQuery.support.ajax = !!testXHR; - -// Does this browser support crossDomain XHR requests -jQuery.support.cors = testXHR && ( "withCredentials" in testXHR ); - -// No need for the temporary xhr anymore -testXHR = undefined; +// Determine support properties +(function( xhr ) { + jQuery.extend( jQuery.support, { + ajax: !!xhr, + cors: !!xhr && ( "withCredentials" in xhr ) + }); +})( jQuery.ajaxSettings.xhr() ); // Create transport if the browser can provide an xhr if ( jQuery.support.ajax ) { @@ -7387,7 +7891,9 @@ if ( jQuery.support.ajax ) { // Do not keep as active anymore if ( handle ) { xhr.onreadystatechange = jQuery.noop; - delete xhrCallbacks[ handle ]; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } } // If it's an abort @@ -7448,15 +7954,18 @@ if ( jQuery.support.ajax ) { if ( !s.async || xhr.readyState === 4 ) { callback(); } else { - // Create the active xhrs callbacks list if needed - // and attach the unload handler - if ( !xhrCallbacks ) { - xhrCallbacks = {}; - xhrOnUnloadAbort(); + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; } - // Add to list of active xhrs callbacks - handle = xhrId++; - xhr.onreadystatechange = xhrCallbacks[ handle ] = callback; + xhr.onreadystatechange = callback; } }, @@ -7474,6 +7983,7 @@ if ( jQuery.support.ajax ) { var elemdisplay = {}, + iframe, iframeDoc, rfxtypes = /^(?:toggle|show|hide)$/, rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i, timerId, @@ -7484,7 +7994,11 @@ var elemdisplay = {}, [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ], // opacity animations [ "opacity" ] - ]; + ], + fxNow, + requestAnimationFrame = window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame; jQuery.fn.extend({ show: function( speed, easing, callback ) { @@ -7496,19 +8010,22 @@ jQuery.fn.extend({ } else { for ( var i = 0, j = this.length; i < j; i++ ) { elem = this[i]; - display = elem.style.display; - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !jQuery._data(elem, "olddisplay") && display === "none" ) { - display = elem.style.display = ""; - } + if ( elem.style ) { + display = elem.style.display; - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( display === "" && jQuery.css( elem, "display" ) === "none" ) { - jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName)); + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !jQuery._data(elem, "olddisplay") && display === "none" ) { + display = elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( display === "" && jQuery.css( elem, "display" ) === "none" ) { + jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName)); + } } } @@ -7516,10 +8033,13 @@ jQuery.fn.extend({ // to avoid the constant reflow for ( i = 0; i < j; i++ ) { elem = this[i]; - display = elem.style.display; - if ( display === "" || display === "none" ) { - elem.style.display = jQuery._data(elem, "olddisplay") || ""; + if ( elem.style ) { + display = elem.style.display; + + if ( display === "" || display === "none" ) { + elem.style.display = jQuery._data(elem, "olddisplay") || ""; + } } } @@ -7533,17 +8053,21 @@ jQuery.fn.extend({ } else { for ( var i = 0, j = this.length; i < j; i++ ) { - var display = jQuery.css( this[i], "display" ); + if ( this[i].style ) { + var display = jQuery.css( this[i], "display" ); - if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) { - jQuery._data( this[i], "olddisplay", display ); + if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) { + jQuery._data( this[i], "olddisplay", display ); + } } } // Set the display of the elements in a second loop // to avoid the constant reflow for ( i = 0; i < j; i++ ) { - this[i].style.display = "none"; + if ( this[i].style ) { + this[i].style.display = "none"; + } } return this; @@ -7581,32 +8105,54 @@ jQuery.fn.extend({ var optall = jQuery.speed(speed, easing, callback); if ( jQuery.isEmptyObject( prop ) ) { - return this.each( optall.complete ); + return this.each( optall.complete, [ false ] ); } + // Do not change referenced properties as per-property easing will be lost + prop = jQuery.extend( {}, prop ); + return this[ optall.queue === false ? "each" : "queue" ](function() { // XXX 'this' does not always have a nodeName when running the // test suite - var opt = jQuery.extend({}, optall), p, + if ( optall.queue === false ) { + jQuery._mark( this ); + } + + var opt = jQuery.extend( {}, optall ), isElement = this.nodeType === 1, hidden = isElement && jQuery(this).is(":hidden"), - self = this; + name, val, p, + display, e, + parts, start, end, unit; + + // will store per property easing and be used to determine when an animation is complete + opt.animatedProperties = {}; for ( p in prop ) { - var name = jQuery.camelCase( p ); + // property name normalization + name = jQuery.camelCase( p ); if ( p !== name ) { prop[ name ] = prop[ p ]; delete prop[ p ]; - p = name; } - if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) { - return opt.complete.call(this); + val = prop[ name ]; + + // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default) + if ( jQuery.isArray( val ) ) { + opt.animatedProperties[ name ] = val[ 1 ]; + val = prop[ name ] = val[ 0 ]; + } else { + opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing'; } - if ( isElement && ( p === "height" || p === "width" ) ) { + if ( val === "hide" && hidden || val === "show" && !hidden ) { + return opt.complete.call( this ); + } + + if ( isElement && ( name === "height" || name === "width" ) ) { // Make sure that nothing sneaks out // Record all 3 overflow attributes because IE does not // change the overflow attribute when overflowX and @@ -7622,7 +8168,7 @@ jQuery.fn.extend({ this.style.display = "inline-block"; } else { - var display = defaultDisplay(this.nodeName); + display = defaultDisplay( this.nodeName ); // inline-level elements accept inline-block; // block-level elements need to be inline with layout @@ -7636,44 +8182,37 @@ jQuery.fn.extend({ } } } - - if ( jQuery.isArray( prop[p] ) ) { - // Create (if needed) and add to specialEasing - (opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1]; - prop[p] = prop[p][0]; - } } if ( opt.overflow != null ) { this.style.overflow = "hidden"; } - opt.curAnim = jQuery.extend({}, prop); - - jQuery.each( prop, function( name, val ) { - var e = new jQuery.fx( self, opt, name ); + for ( p in prop ) { + e = new jQuery.fx( this, opt, p ); + val = prop[ p ]; if ( rfxtypes.test(val) ) { - e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop ); + e[ val === "toggle" ? hidden ? "show" : "hide" : val ](); } else { - var parts = rfxnum.exec(val), - start = e.cur(); + parts = rfxnum.exec( val ); + start = e.cur(); if ( parts ) { - var end = parseFloat( parts[2] ), - unit = parts[3] || ( jQuery.cssNumber[ name ] ? "" : "px" ); + end = parseFloat( parts[2] ); + unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" ); // We need to compute starting value if ( unit !== "px" ) { - jQuery.style( self, name, (end || 1) + unit); + jQuery.style( this, p, (end || 1) + unit); start = ((end || 1) / e.cur()) * start; - jQuery.style( self, name, start + unit); + jQuery.style( this, p, start + unit); } // If a +=/-= token was provided, we're doing a relative animation if ( parts[1] ) { - end = ((parts[1] === "-=" ? -1 : 1) * end) + start; + end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start; } e.custom( start, end, unit ); @@ -7682,7 +8221,7 @@ jQuery.fn.extend({ e.custom( start, val, "" ); } } - }); + } // For JS strict compliance return true; @@ -7690,15 +8229,18 @@ jQuery.fn.extend({ }, stop: function( clearQueue, gotoEnd ) { - var timers = jQuery.timers; - if ( clearQueue ) { this.queue([]); } this.each(function() { - // go in reverse order so anything added to the queue during the loop is ignored - for ( var i = timers.length - 1; i >= 0; i-- ) { + var timers = jQuery.timers, + i = timers.length; + // clear marker counters if we know they won't be + if ( !gotoEnd ) { + jQuery._unmark( true, this ); + } + while ( i-- ) { if ( timers[i].elem === this ) { if (gotoEnd) { // force the next step to be the last @@ -7720,6 +8262,17 @@ jQuery.fn.extend({ }); +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout( clearFxNow, 0 ); + return ( fxNow = jQuery.now() ); +} + +function clearFxNow() { + fxNow = undefined; +} + +// Generate parameters to create a standard animation function genFx( type, num ) { var obj = {}; @@ -7758,13 +8311,16 @@ jQuery.extend({ // Queueing opt.old = opt.complete; - opt.complete = function() { - if ( opt.queue !== false ) { - jQuery(this).dequeue(); - } + opt.complete = function( noUnmark ) { if ( jQuery.isFunction( opt.old ) ) { opt.old.call( this ); } + + if ( opt.queue !== false ) { + jQuery.dequeue( this ); + } else if ( noUnmark !== false ) { + jQuery._unmark( this ); + } }; return opt; @@ -7786,9 +8342,7 @@ jQuery.extend({ this.elem = elem; this.prop = prop; - if ( !options.orig ) { - options.orig = {}; - } + options.orig = options.orig || {}; } }); @@ -7820,9 +8374,10 @@ jQuery.fx.prototype = { // Start an animation from one number to another custom: function( from, to, unit ) { var self = this, - fx = jQuery.fx; + fx = jQuery.fx, + raf; - this.startTime = jQuery.now(); + this.startTime = fxNow || createFxNow(); this.start = from; this.end = to; this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" ); @@ -7836,7 +8391,20 @@ jQuery.fx.prototype = { t.elem = this.elem; if ( t() && jQuery.timers.push(t) && !timerId ) { - timerId = setInterval(fx.tick, fx.interval); + // Use requestAnimationFrame instead of setInterval if available + if ( requestAnimationFrame ) { + timerId = true; + raf = function() { + // When timerId gets set to null at any point, this stops + if ( timerId ) { + requestAnimationFrame( raf ); + fx.tick(); + } + }; + requestAnimationFrame( raf ); + } else { + timerId = setInterval( fx.tick, fx.interval ); + } } }, @@ -7867,60 +8435,64 @@ jQuery.fx.prototype = { // Each step of an animation step: function( gotoEnd ) { - var t = jQuery.now(), done = true; + var t = fxNow || createFxNow(), + done = true, + elem = this.elem, + options = this.options, + i, n; - if ( gotoEnd || t >= this.options.duration + this.startTime ) { + if ( gotoEnd || t >= options.duration + this.startTime ) { this.now = this.end; this.pos = this.state = 1; this.update(); - this.options.curAnim[ this.prop ] = true; + options.animatedProperties[ this.prop ] = true; - for ( var i in this.options.curAnim ) { - if ( this.options.curAnim[i] !== true ) { + for ( i in options.animatedProperties ) { + if ( options.animatedProperties[i] !== true ) { done = false; } } if ( done ) { // Reset the overflow - if ( this.options.overflow != null && !jQuery.support.shrinkWrapBlocks ) { - var elem = this.elem, - options = this.options; + if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) { jQuery.each( [ "", "X", "Y" ], function (index, value) { elem.style[ "overflow" + value ] = options.overflow[index]; - } ); + }); } // Hide the element if the "hide" operation was done - if ( this.options.hide ) { - jQuery(this.elem).hide(); + if ( options.hide ) { + jQuery(elem).hide(); } // Reset the properties, if the item has been hidden or shown - if ( this.options.hide || this.options.show ) { - for ( var p in this.options.curAnim ) { - jQuery.style( this.elem, p, this.options.orig[p] ); + if ( options.hide || options.show ) { + for ( var p in options.animatedProperties ) { + jQuery.style( elem, p, options.orig[p] ); } } // Execute the complete function - this.options.complete.call( this.elem ); + options.complete.call( elem ); } return false; } else { - var n = t - this.startTime; - this.state = n / this.options.duration; - - // Perform the easing function, defaults to swing - var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop]; - var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear"); - this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration); - this.now = this.start + ((this.end - this.start) * this.pos); + // classical easing cannot be used with an Infinity duration + if ( options.duration == Infinity ) { + this.now = t; + } else { + n = t - this.startTime; + this.state = n / options.duration; + // Perform the easing function, defaults to swing + this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration ); + this.now = this.start + ((this.end - this.start) * this.pos); + } // Perform the next step of the animation this.update(); } @@ -7931,9 +8503,7 @@ jQuery.fx.prototype = { jQuery.extend( jQuery.fx, { tick: function() { - var timers = jQuery.timers; - - for ( var i = 0; i < timers.length; i++ ) { + for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) { if ( !timers[i]() ) { timers.splice(i--, 1); } @@ -7981,17 +8551,47 @@ if ( jQuery.expr && jQuery.expr.filters ) { }; } +// Try to restore the default display value of an element function defaultDisplay( nodeName ) { + if ( !elemdisplay[ nodeName ] ) { - var elem = jQuery("<" + nodeName + ">").appendTo("body"), - display = elem.css("display"); + + var body = document.body, + elem = jQuery( "<" + nodeName + ">" ).appendTo( body ), + display = elem.css( "display" ); elem.remove(); + // If the simple way fails, + // get element's real default display by attaching it to a temp iframe if ( display === "none" || display === "" ) { - display = "block"; + // No iframe to use yet, so create it + if ( !iframe ) { + iframe = document.createElement( "iframe" ); + iframe.frameBorder = iframe.width = iframe.height = 0; + } + + body.appendChild( iframe ); + + // Create a cacheable copy of the iframe document on first call. + // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML + // document to it; WebKit & Firefox won't allow reusing the iframe document. + if ( !iframeDoc || !iframe.createElement ) { + iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; + iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "" : "" ) + "" ); + iframeDoc.close(); + } + + elem = iframeDoc.createElement( nodeName ); + + iframeDoc.body.appendChild( elem ); + + display = jQuery.css( elem, "display" ); + + body.removeChild( iframe ); } + // Store the correct default display elemdisplay[ nodeName ] = display; } @@ -8181,17 +8781,19 @@ jQuery.offset = { curOffset = curElem.offset(), curCSSTop = jQuery.css( elem, "top" ), curCSSLeft = jQuery.css( elem, "left" ), - calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray('auto', [curCSSTop, curCSSLeft]) > -1, + calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, props = {}, curPosition = {}, curTop, curLeft; // need to be able to calculate position if either top or left is auto and position is either absolute or fixed if ( calculatePosition ) { curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; } - curTop = calculatePosition ? curPosition.top : parseInt( curCSSTop, 10 ) || 0; - curLeft = calculatePosition ? curPosition.left : parseInt( curCSSLeft, 10 ) || 0; - if ( jQuery.isFunction( options ) ) { options = options.call( elem, i, curOffset ); } @@ -8260,29 +8862,16 @@ jQuery.fn.extend({ jQuery.each( ["Left", "Top"], function( i, name ) { var method = "scroll" + name; - jQuery.fn[ method ] = function(val) { - var elem = this[0], win; + jQuery.fn[ method ] = function( val ) { + var elem, win; - if ( !elem ) { - return null; - } + if ( val === undefined ) { + elem = this[ 0 ]; - if ( val !== undefined ) { - // Set the scroll offset - return this.each(function() { - win = getWindow( this ); + if ( !elem ) { + return null; + } - if ( win ) { - win.scrollTo( - !i ? val : jQuery(win).scrollLeft(), - i ? val : jQuery(win).scrollTop() - ); - - } else { - this[ method ] = val; - } - }); - } else { win = getWindow( elem ); // Return the scroll offset @@ -8291,6 +8880,21 @@ jQuery.each( ["Left", "Top"], function( i, name ) { win.document.body[ method ] : elem[ method ]; } + + // Set the scroll offset + return this.each(function() { + win = getWindow( this ); + + if ( win ) { + win.scrollTo( + !i ? val : jQuery( win ).scrollLeft(), + i ? val : jQuery( win ).scrollTop() + ); + + } else { + this[ method ] = val; + } + }); }; }); @@ -8305,22 +8909,24 @@ function getWindow( elem ) { -// Create innerHeight, innerWidth, outerHeight and outerWidth methods +// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods jQuery.each([ "Height", "Width" ], function( i, name ) { var type = name.toLowerCase(); // innerHeight and innerWidth - jQuery.fn["inner" + name] = function() { - return this[0] ? - parseFloat( jQuery.css( this[0], type, "padding" ) ) : + jQuery.fn[ "inner" + name ] = function() { + var elem = this[0]; + return elem && elem.style ? + parseFloat( jQuery.css( elem, type, "padding" ) ) : null; }; // outerHeight and outerWidth - jQuery.fn["outer" + name] = function( margin ) { - return this[0] ? - parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) : + jQuery.fn[ "outer" + name ] = function( margin ) { + var elem = this[0]; + return elem && elem.style ? + parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) : null; }; @@ -8370,5 +8976,6 @@ jQuery.each([ "Height", "Width" ], function( i, name ) { }); +// Expose jQuery to the global object window.jQuery = window.$ = jQuery; })(window); diff --git a/addons/base/static/src/base.html b/addons/base/static/src/base.html index 2761638c6d0..4bc6d07cc15 100644 --- a/addons/base/static/src/base.html +++ b/addons/base/static/src/base.html @@ -12,7 +12,7 @@ - + From 7c19f7821014347210d95879a75b43f0716249d9 Mon Sep 17 00:00:00 2001 From: "Jay Vora (OpenERP)" Date: Thu, 7 Jul 2011 11:15:40 +0530 Subject: [PATCH 233/831] [FIX] Account_budget : Correction in the calculation of theoritical amount bzr revid: jvo@tinyerp.com-20110707054540-gc7c81y8ptudxqi5 --- addons/account_budget/account_budget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account_budget/account_budget.py b/addons/account_budget/account_budget.py index 12caba17374..1746a447cf1 100644 --- a/addons/account_budget/account_budget.py +++ b/addons/account_budget/account_budget.py @@ -161,7 +161,7 @@ class crossovered_budget_lines(osv.osv): total = strToDate(line.date_to) - strToDate(line.date_from) elapsed = min(strToDate(line.date_to),strToDate(date_to)) - max(strToDate(line.date_from),strToDate(date_from)) if strToDate(date_to) < strToDate(line.date_from): - elapsed = strToDate(date_to) - strToDate(date_to) + elapsed = strToDate(line.date_from) - strToDate(date_to) if total.days: theo_amt = float(elapsed.days / float(total.days)) * line.planned_amount From fd6563b818e1127344178fac58a9720d17d41cca Mon Sep 17 00:00:00 2001 From: "noz (OpenERP)" Date: Thu, 7 Jul 2011 14:34:44 +0530 Subject: [PATCH 234/831] [FIX] Improved required validation. bzr revid: noz@tinyerp.com-20110707090444-iaf58v4umq53lb88 --- addons/base/controllers/main.py | 5 +++- addons/base/static/src/css/base.css | 4 +++ addons/base/static/src/js/chrome.js | 46 +++++++++++++++++++++++++++-- addons/base/static/src/xml/base.xml | 20 ++++++------- 4 files changed, 61 insertions(+), 14 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index f153c3da747..609466a19df 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -124,7 +124,10 @@ class Session(openerpweb.Controller): @openerpweb.jsonrequest def db_operation(self, req, flag, **kw): - if flag == 'drop': + if flag == 'create': + pass + + elif flag == 'drop': db = kw.get('db') password = kw.get('password') diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index bf0d29de965..16c56ffd369 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -190,6 +190,10 @@ ul.db_options li { -moz-border-radius: 10px; } +table.db_option_table input.required { + background-color: #D2D2FF; +} + .db_option_table input[type="text"], input[type="password"], select { width: 300px; } diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index ef86595245d..3de046be84c 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -935,6 +935,49 @@ openerp.base.Database = openerp.base.Controller.extend({ self.$option_id.html(QWeb.render("CreateDB", self)); $("form[name=create_db_form]").validate(); + + $("input[name=create_confirm_pwd]").rules("add", { + equalTo: 'input[name=create_admin_pwd]', + messages: { + required: "Password did not match !" + } + }); + + $("input[name=super_admin_pwd]").focus(); + + self.$option_id.find('form[name=create_db_form]').submit(function(ev) { + ev.preventDefault(); + + var super_admin_pwd = self.$option_id.find("input[name=super_admin_pwd]").val(); + var db = self.$option_id.find("input[name=db_name]").val(); + var demo_data = self.$option_id.find("input[name=demo_data]:checked"); + var db_lang = self.$option_id.find("select[name=db_lang]").val(); + var admin_pwd = self.$option_id.find("input[name=create_admin_pwd]").val(); + var confirm_pwd = self.$option_id.find("input[name=create_confirm_pwd]").val(); + + if (demo_data.length) + demo_data = 'True'; + else + demo_data = 'False'; + + self.rpc("/base/session/db_operation", { + 'flag': 'create', + 'super_admin_pwd': super_admin_pwd, + 'db': db, + 'demo_data': demo_data, + 'db_lang': db_lang, + 'admin_pwd': admin_pwd, + 'confirm_pwd': confirm_pwd + }, + function(result) { + if (result && !result.error) { + + } + }); + + }); + + }); self.$element.find('#db-drop').click(function() { @@ -1015,21 +1058,18 @@ openerp.base.Database = openerp.base.Controller.extend({ $("form[name=change_pwd_form]").validate(); $("input[name=old_pwd]").rules("add", { - required: true, minlength: 1, messages: { required: "Please enter password !" } }); $("input[name=new_pwd]").rules("add", { - required: true, minlength: 1, messages: { required: "Please enter password !" } }); $("input[name=confirm_pwd]").rules("add", { - required: true, equalTo: 'input[name=new_pwd]', messages: { required: "Password did not match !" diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index add5f8a14b9..459c5d5b591 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -80,15 +80,15 @@
- + - + - + @@ -103,12 +103,12 @@ - - + + - - + + @@ -218,15 +218,15 @@
- + - + - + From 5985688d81c11d14d2c469cf47e3958d991851cb Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 7 Jul 2011 11:44:38 +0200 Subject: [PATCH 235/831] [ADD] dashboard for home page & home page actions bzr revid: xmo@openerp.com-20110707094438-07ca7kqw3vzrg5j4 --- addons/board/board_view.xml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/addons/board/board_view.xml b/addons/board/board_view.xml index d48ddd6a025..2c5cd432539 100644 --- a/addons/board/board_view.xml +++ b/addons/board/board_view.xml @@ -1,6 +1,38 @@ + + + Applications Tiles + board.home.applications + + + Homepage Widgets + board.home.widgets + + + board.homepage + board.board + form + +
+ + + + + + + + + +
+
+ + Home Page + board.board + form + + board.note.search From 521e2891f5d536e52193e0b007b70fce0247b332 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Thu, 7 Jul 2011 15:31:04 +0530 Subject: [PATCH 236/831] [ADD] add base_export module. bzr revid: ysa@tinyerp.com-20110707100104-3trko5x1njl1huhp --- addons/base/static/src/img/collapse.gif | Bin 0 -> 80 bytes addons/base/static/src/img/expand.gif | Bin 0 -> 81 bytes addons/base/static/src/js/views.js | 14 ++- addons/base_export/__init__.py | 2 + addons/base_export/__openerp__.py | 10 ++ addons/base_export/controllers/__init__.py | 1 + addons/base_export/controllers/main.py | 59 ++++++++++ .../static/src/css/base_export.css | 65 +++++++++++ .../base_export/static/src/js/base_export.js | 32 +++++ .../static/src/xml/base_export.xml | 109 ++++++++++++++++++ 10 files changed, 290 insertions(+), 2 deletions(-) create mode 100755 addons/base/static/src/img/collapse.gif create mode 100755 addons/base/static/src/img/expand.gif create mode 100644 addons/base_export/__init__.py create mode 100644 addons/base_export/__openerp__.py create mode 100644 addons/base_export/controllers/__init__.py create mode 100644 addons/base_export/controllers/main.py create mode 100644 addons/base_export/static/src/css/base_export.css create mode 100644 addons/base_export/static/src/js/base_export.js create mode 100644 addons/base_export/static/src/xml/base_export.xml diff --git a/addons/base/static/src/img/collapse.gif b/addons/base/static/src/img/collapse.gif new file mode 100755 index 0000000000000000000000000000000000000000..759e72ebcfe18bc1bc714b6451c301b12a1f27d5 GIT binary patch literal 80 zcmZ?wbhEHb6krfwSjfZx1Zin$|G_}', {id: element_id}).dialog({ + title: "Export Data", + modal: true, + width: '50%', + height: 'auto' + }).html(QWeb.render('ExportTreeView', {'fields': result})) + + jQuery(_export).find('[id^=parentimg_]').click(function(){ + console.log('this>>>id', this.id); + }); + }, +}); + +}; diff --git a/addons/base_export/static/src/xml/base_export.xml b/addons/base_export/static/src/xml/base_export.xml new file mode 100644 index 00000000000..4fd9c7d872e --- /dev/null +++ b/addons/base_export/static/src/xml/base_export.xml @@ -0,0 +1,109 @@ + \ No newline at end of file From 893a8fb7f8888bf83fc8d7d0287ff4119d10e5c8 Mon Sep 17 00:00:00 2001 From: "Jay Vora (OpenERP)" Date: Thu, 7 Jul 2011 16:20:50 +0530 Subject: [PATCH 237/831] [FIX] Sale/Purchase : Calculation of invoice rates corrected,revert of previous commit http://bazaar.launchpad.net/~openerp/openobject-addons/6.0/revision/4593 lp bug: https://launchpad.net/bugs/795026 fixed bzr revid: jvo@tinyerp.com-20110707105050-1ql2jji5pmblsu22 --- addons/purchase/purchase.py | 5 +++-- addons/sale/sale.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 46f36142090..d95a76f610a 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -98,9 +98,10 @@ class purchase_order(osv.osv): tot = 0.0 for invoice in purchase.invoice_ids: if invoice.state not in ('draft','cancel'): - tot += invoice.amount_untaxed - invoice.residual + tot += invoice.amount_untaxed + if purchase.amount_untaxed: - res[purchase.id] = tot * 100.0 / purchase.amount_untaxed + res[purchase.id] = min(100.0, tot * 100.0 / (purchase.amount_untaxed)) else: res[purchase.id] = 0.0 return res diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 2b218f7e5cf..6e64c6589e9 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -131,7 +131,7 @@ class sale_order(osv.osv): tot = 0.0 for invoice in sale.invoice_ids: if invoice.state not in ('draft', 'cancel'): - tot += invoice.amount_untaxed - invoice.residual + tot += invoice.amount_untaxed if tot: res[sale.id] = min(100.0, tot * 100.0 / (sale.amount_untaxed or 1.00)) else: From 02b5d5b5bce2450be14f2d5ca3efe62b284c0407 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 7 Jul 2011 12:53:23 +0200 Subject: [PATCH 238/831] [ADD] get a bunch of widgets to display (though not quite correctly... todo: fix that) bzr revid: xmo@openerp.com-20110707105323-ztjvlccxfpmgdxoj --- .../base_dashboard/static/src/js/dashboard.js | 67 ++++++++++++++++++- .../static/src/xml/base_dashboard.xml | 9 +++ 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/addons/base_dashboard/static/src/js/dashboard.js b/addons/base_dashboard/static/src/js/dashboard.js index b1e925c7b0a..3cdcbb3b218 100644 --- a/addons/base_dashboard/static/src/js/dashboard.js +++ b/addons/base_dashboard/static/src/js/dashboard.js @@ -355,5 +355,70 @@ openerp.base_dashboard.ApplicationTiles = openerp.base.View.extend({ .click();}); }); } -}) +}); +openerp.base.client_actions.add( + 'board.home.widgets', 'openerp.base_dashboard.Widgets'); +openerp.base_dashboard.Widgets = openerp.base.View.extend({ + init: function (parent_or_session, element_id) { + this._super(parent_or_session, element_id); + this.user_widgets = new openerp.base.DataSetSearch( + this.session, 'res.widget.user', null, + ['|', ['user_id', '=', false], + ['user_id', '=', this.session.uid]]); + this.widgets = new openerp.base.DataSetSearch(this.session, 'res.widget'); + }, + start: function () { + this.user_widgets.read_slice(['widget_id', 'user_id'], null, null, + this.on_widgets_list_loaded); + }, + on_widgets_list_loaded: function (user_widgets) { + var self = this; + var widget_user = {}; + _(user_widgets).each(function (widget) { + widget['widget_id'] = widget['widget_id'][0]; + widget_user[widget['widget_id']] = { + removable: widget['user_id'] !== false, + user_widget_id: widget['id'] + }; + }); + this.widgets.read_ids(_(user_widgets).pluck('widget_id'), [], function (widgets) { + _(widgets).each(function (widget) { + _.extend(widget, widget_user[widget['id']]); + }); + var root = self.$element[0]; + root.innerHTML = QWeb.render('HomeWidgets', { + widgets: widgets + }); + + self.process_widgets_scripts(0, root.getElementsByTagName('script')); + }) + }, + process_widgets_scripts: function (index, nodes) { + if (nodes.length <= index) { + return; + } + var old_write = window.document.write, + self = this, + script = nodes[index], + deferred = $.Deferred().then(function () { + window.document.write = old_write; }), + continuation = function () { + $.when(self.process_widgets_scripts(index+1, nodes)).then( + deferred.resolve()); + }; + window.document.write = function (s) { + $(script).closest('.oe-dashboard-home-widgets-widget') + .children('div') + .append(s); + }; + + if (!script.src) { + new Function(script.firstChild.nodeValue)(); + setTimeout(continuation); + } else { + $LAB.script(script.src).wait(continuation); + } + return deferred; + } +}); }; diff --git a/addons/base_dashboard/static/src/xml/base_dashboard.xml b/addons/base_dashboard/static/src/xml/base_dashboard.xml index 91fa13d763a..bb81aea45bd 100644 --- a/addons/base_dashboard/static/src/xml/base_dashboard.xml +++ b/addons/base_dashboard/static/src/xml/base_dashboard.xml @@ -98,4 +98,13 @@
+
+
+

+
+
+ +
+
From 565a06813837c44003355468566a58e61dfa26bb Mon Sep 17 00:00:00 2001 From: =Bhumi Thakkar Date: Thu, 7 Jul 2011 17:15:17 +0530 Subject: [PATCH 239/831] [IMP] Improved listview to add name search filter on top. bzr revid: jra@tinyerp.com-20110707114517-3zc9cl9yjogah598 --- addons/web_mobile/static/src/js/web_mobile.js | 61 +++++++++++++++---- addons/web_mobile/static/src/web_mobile.html | 5 +- .../web_mobile/static/src/xml/web_mobile.xml | 11 +++- 3 files changed, 59 insertions(+), 18 deletions(-) diff --git a/addons/web_mobile/static/src/js/web_mobile.js b/addons/web_mobile/static/src/js/web_mobile.js index b6cb2ffc9eb..36fe79164e0 100644 --- a/addons/web_mobile/static/src/js/web_mobile.js +++ b/addons/web_mobile/static/src/js/web_mobile.js @@ -1,8 +1,5 @@ - openerp.web_mobile = function(openerp) { - openerp.web_mobile = {}; - openerp.web_mobile.MobileWebClient = openerp.base.Controller.extend({ init: function(element_id) { var self = this; @@ -14,9 +11,7 @@ openerp.web_mobile.MobileWebClient = openerp.base.Controller.extend({ this.session = new openerp.base.Session("oe_errors"); this.crashmanager = new openerp.base.CrashManager(this.session); this.login = new openerp.web_mobile.Login(this.session, "oe_app"); - this.session.on_session_invalid.add(this.login.do_ask_login); - }, start: function() { this.session.start(); @@ -84,26 +79,66 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ var self = this; if (data.action.length) { this.action = data.action[0][2]; - this.dataset = (new openerp.base.DataSetSearch(this.session, this.action.res_model, null, null)) - this.dataset.read_slice(false, false, false, function(result){ - self.$element.html(QWeb.render("ListView", {'records' : result})); - self.$element.find("a#list-id").click(self.on_list_click); - }); + this.on_search_data(''); } }, + on_search_data: function(request){ + if(request){ + if(request.term){ + var search_val = request.term; + }else{ + if(request.which==27 || request.which==13 || request.which==9){ + var search_val = ''; + }else if(request.which==38 || request.which==40 || request.which==39 || request.which==37){ + return; + }else if($("#searchid").val()==""){ + var search_val = ''; + }else{ + return; + } + } + } + else{ + var search_val = ''; + } + var self = this; + + var dataset = new openerp.base.DataSetStatic(this.session, this.action.res_model, this.action.context); + dataset.domain=[['name','ilike',search_val]]; + dataset.name_search(search_val, dataset.domain, 'ilike',false ,function(result){ + self.$element.html(QWeb.render("ListView", {'records' : result.result})); + self.$element.find("#searchid").focus(); + if(request.term){ + self.$element.find("#searchid").val(request.term); + } + self.$element.find("#searchid").autocomplete({ + source: function(req) { self.on_search_data(req); }, + focus: function(e, ui) { + e.preventDefault(); + }, + html: true, + minLength: 0, + delay: 0 + }); + self.$element.find("#searchid").keyup(self.on_search_data); + self.$element.find("a#list-id").click(self.on_list_click); + + }); + }, on_list_click: function(ev) { $record = $(ev.currentTarget); var self = this; id = $record.data('id'); model = this.action.res_model; view_id = this.action.views[1][0]; + this.dataset = new openerp.base.DataSetSearch(this.session, this.action.res_model, null, null); this.dataset.read_slice(false, false, false, function(result){ for (var i = 0; i < result.length; i++) { if (result[i].id == id) { var data = result[i]; } } - self.rpc("/base/formview/load", {"model": model, "view_id": view_id }, + self.rpc("/base/formview/load", {"model": model, "view_id": view_id }, function(result){ var view_fields = result.fields_view.arch.children; get_fields = self.filter_fields(view_fields); @@ -162,8 +197,8 @@ openerp.web_mobile.Secondary = openerp.base.Controller.extend({ } else { if (id) { - this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", id); - this.listview.start(); + this.listview = new openerp.web_mobile.ListView(this.session, "oe_app", id); + this.listview.start(); } } } diff --git a/addons/web_mobile/static/src/web_mobile.html b/addons/web_mobile/static/src/web_mobile.html index 425666bd09c..b6abd9f3255 100755 --- a/addons/web_mobile/static/src/web_mobile.html +++ b/addons/web_mobile/static/src/web_mobile.html @@ -5,9 +5,10 @@ OpenERP Web Mobile - + - + + diff --git a/addons/web_mobile/static/src/xml/web_mobile.xml b/addons/web_mobile/static/src/xml/web_mobile.xml index cc6b2908c53..08727e3c5dc 100644 --- a/addons/web_mobile/static/src/xml/web_mobile.xml +++ b/addons/web_mobile/static/src/xml/web_mobile.xml @@ -67,12 +67,17 @@
-
    + +
    • From 22eea85f7e5efbba818c9bcb059f932f08c3edb3 Mon Sep 17 00:00:00 2001 From: "Bhumi Thakkar (Open ERP)" Date: Thu, 7 Jul 2011 18:04:35 +0530 Subject: [PATCH 240/831] [FIX] Parent category displayed in dropdownlist bzr revid: bth@tinyerp.com-20110707123435-i4qr7xxmrztc80jc --- addons/base/static/src/js/tree.js | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/addons/base/static/src/js/tree.js b/addons/base/static/src/js/tree.js index c12e6c6aec7..09052b3283c 100644 --- a/addons/base/static/src/js/tree.js +++ b/addons/base/static/src/js/tree.js @@ -44,6 +44,7 @@ openerp.base.TreeView = openerp.base.View.extend({ var self = this; this.fields_view = data.field_parent; this.fields = data.fields; + self.dataset.domain = [['parent_id', '=', '']]; this.dataset.read_slice([], 0, false, function (response) { self.$element.html(QWeb.render('TreeView', { 'field_data' : response, 'title' : self.fields_view.arch.attrs.string })); self.$element.find('#parent_id').bind('change', function(){ @@ -232,34 +233,6 @@ openerp.base.TreeView = openerp.base.View.extend({ } }, - reload_view: function (grouped) { - var self = this; - this.dataset.offset = 0; - this.dataset.limit = false; - - return this.rpc('/base/treeview/load', { - model: this.model, - view_id: this.view_id, - toolbar: !!this.flags.sidebar - }, function (field_view_get) { - self.on_loaded(field_view_get, grouped); - }); - }, - - do_search: function (domains, contexts, groupbys) { - var self = this; - return this.rpc('/base/session/eval_domain_and_context', { - domains: domains, - contexts: contexts, - group_by_seq: groupbys - }, function (results) { - self.dataset.context = results.context; - self.dataset.domain = results.domain; - self.reload_view(!!results.group_by).then( - $.proxy(self, 'reload_content')); - }); - }, - do_show: function () { this.$element.show(); this.view_manager.sidebar.do_refresh(true); From 7ba544da8612745f4c0c1e6380086371390657a0 Mon Sep 17 00:00:00 2001 From: "Jiten Rangwala (OpenERP)" Date: Thu, 7 Jul 2011 18:31:57 +0530 Subject: [PATCH 241/831] [IMP] Improved code for call formview. bzr revid: jra@tinyerp.com-20110707130157-26jqqigzwuehmwqq --- addons/web_mobile/static/src/js/web_mobile.js | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/addons/web_mobile/static/src/js/web_mobile.js b/addons/web_mobile/static/src/js/web_mobile.js index 36fe79164e0..7f13472a776 100644 --- a/addons/web_mobile/static/src/js/web_mobile.js +++ b/addons/web_mobile/static/src/js/web_mobile.js @@ -129,6 +129,20 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ $record = $(ev.currentTarget); var self = this; id = $record.data('id'); + this.formview = new openerp.web_mobile.FormView(this.session, "oe_app", id, this.action); + this.formview.start(); + } + }); + +openerp.web_mobile.FormView = openerp.base.Controller.extend({ + init: function(session, element_id, list_id, action) { + this._super(session, element_id); + this.list_id = list_id; + this.action = action; + }, + start: function() { + var self = this; + id = this.list_id; model = this.action.res_model; view_id = this.action.views[1][0]; this.dataset = new openerp.base.DataSetSearch(this.session, this.action.res_model, null, null); @@ -141,7 +155,7 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ self.rpc("/base/formview/load", {"model": model, "view_id": view_id }, function(result){ var view_fields = result.fields_view.arch.children; - get_fields = self.filter_fields(view_fields); + get_fields = self.get_fields(view_fields); for (var j = 0; j < view_fields.length; j++) { if (view_fields[j].tag == 'notebook') { var notebooks = view_fields[j]; @@ -152,19 +166,19 @@ openerp.web_mobile.ListView = openerp.base.Controller.extend({ }); }); }, - filter_fields: function(view_fields, fields) { + get_fields: function(view_fields, fields) { this.fields = fields || []; for (var i=0; i < view_fields.length; i++){ if (view_fields[i].tag == 'field') { this.fields.push(view_fields[i]); } if (view_fields[i].tag == 'group') { - this.filter_fields(view_fields[i].children, this.fields); + this.get_fields(view_fields[i].children, this.fields); } } return this.fields; } - }); +}); openerp.web_mobile.Secondary = openerp.base.Controller.extend({ init: function(session, element_id, secondary_menu_id) { From d5c770782340703941282a64239587e319936a5c Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Fri, 8 Jul 2011 05:53:46 +0000 Subject: [PATCH 242/831] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20110708055346-3qpd6fv6xd0b96sv --- addons/account/i18n/fi.po | 117 ++--- addons/account/i18n/id.po | 10 +- addons/account/i18n/zh_CN.po | 528 +++++++++++------------ addons/base_iban/i18n/zh_CN.po | 26 +- addons/base_module_quality/i18n/fi.po | 31 +- addons/base_report_creator/i18n/zh_CN.po | 19 +- addons/base_setup/i18n/fr.po | 13 +- addons/base_setup/i18n/zh_CN.po | 14 +- addons/base_synchro/i18n/vi.po | 2 +- addons/caldav/i18n/fr.po | 10 +- addons/crm/i18n/it.po | 63 +-- addons/crm_helpdesk/i18n/sr.po | 110 ++--- addons/hr/i18n/fr.po | 10 +- addons/hr_expense/i18n/fr.po | 11 +- addons/hr_payroll_account/i18n/fr.po | 12 +- addons/lunch/i18n/zh_CN.po | 165 ++++--- addons/mail_gateway/i18n/zh_CN.po | 68 +-- addons/marketing_campaign/i18n/zh_CN.po | 222 +++++----- addons/mrp/i18n/fr.po | 10 +- addons/outlook/i18n/zh_CN.po | 51 ++- addons/pad/i18n/zh_CN.po | 80 ++++ addons/resource/i18n/zh_CN.po | 47 +- addons/share/i18n/fr.po | 12 +- addons/share/i18n/zh_CN.po | 478 ++++++++++++++++++++ addons/survey/i18n/ca.po | 48 ++- addons/survey/i18n/zh_CN.po | 300 ++++++------- 26 files changed, 1544 insertions(+), 913 deletions(-) create mode 100644 addons/pad/i18n/zh_CN.po create mode 100644 addons/share/i18n/zh_CN.po diff --git a/addons/account/i18n/fi.po b/addons/account/i18n/fi.po index df4327684dd..35415ac4d9a 100644 --- a/addons/account/i18n/fi.po +++ b/addons/account/i18n/fi.po @@ -8,19 +8,19 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-06-27 10:05+0000\n" +"PO-Revision-Date: 2011-07-06 07:43+0000\n" "Last-Translator: Juha Kotamäki \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-06-28 05:30+0000\n" +"X-Launchpad-Export-Date: 2011-07-08 05:52+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 msgid "System payment" -msgstr "" +msgstr "Järjestelmämaksu" #. module: account #: view:account.journal:0 @@ -34,16 +34,18 @@ msgid "" "You cannot remove/deactivate an account which is set as a property to any " "Partner." msgstr "" +"Et voi poistaa/poistaa käytöstä tiliä joka on asetettu jonkin kumppanin " +"omaisuudeksi." #. module: account #: view:account.move.reconcile:0 msgid "Journal Entry Reconcile" -msgstr "" +msgstr "Päiväkirjavientien täsmäytys" #. module: account #: field:account.installer.modules,account_voucher:0 msgid "Voucher Management" -msgstr "" +msgstr "Kuponkien hallinta" #. module: account #: view:account.account:0 @@ -63,7 +65,7 @@ msgstr "Jäännös" #: code:addons/account/invoice.py:793 #, python-format msgid "Please define sequence on invoice journal" -msgstr "" +msgstr "Ole hyvä ja määrittele järjestys laskupäiväkirjalla" #. module: account #: constraint:account.period:0 @@ -78,12 +80,12 @@ msgstr "Tilin valuutta" #. module: account #: view:account.tax:0 msgid "Children Definition" -msgstr "" +msgstr "Alatason määrittelyt" #. module: account #: model:ir.model,name:account.model_report_aged_receivable msgid "Aged Receivable Till Today" -msgstr "" +msgstr "Ikääntyneet saatavat tähän päivään asti" #. module: account #: field:account.partner.ledger,reconcil:0 @@ -96,11 +98,13 @@ msgid "" "The Profit and Loss report gives you an overview of your company profit and " "loss in a single document" msgstr "" +"Voitto/tappio raportti antaa sinulle yleiskuvan yrityksen voitoista ja " +"tappioista yhdellä dokumentilla" #. module: account #: model:process.transition,name:account.process_transition_invoiceimport0 msgid "Import from invoice or payment" -msgstr "" +msgstr "Tuo laskulta tai maksulta" #. module: account #: model:ir.model,name:account.model_wizard_multi_charts_accounts @@ -118,6 +122,9 @@ msgid "" "If you unreconciliate transactions, you must also verify all the actions " "that are linked to those transactions because they will not be disabled" msgstr "" +"Jos poistat täsmäytyksen tapahtumilta, sinun pitää myös tarkistaa kaikki " +"toiminnot jotka on linkitetty näihin tapahtumiin, koska niitä ei oteta pois " +"käytöstä" #. module: account #: report:account.tax.code.entries:0 @@ -167,6 +174,8 @@ msgid "" "If the active field is set to False, it will allow you to hide the payment " "term without removing it." msgstr "" +"Jos aktiivinen kenttä on tilassa epätosi (false), voit piilottaa maksun " +"poistamatta sitä." #. module: account #: code:addons/account/invoice.py:1436 @@ -199,7 +208,7 @@ msgstr "Negatiivinen" #: code:addons/account/wizard/account_move_journal.py:95 #, python-format msgid "Journal: %s" -msgstr "" +msgstr "Päiväkirja: %s" #. module: account #: help:account.analytic.journal,type:0 @@ -208,6 +217,9 @@ msgid "" "invoice) to create analytic entries, OpenERP will look for a matching " "journal of the same type." msgstr "" +"Antaa analyyttisen päiväkirjan tyypin. Kun tarvitaan dokumentissa " +"(esim.lasku) analyyttisiä tilejä, OpenERP etsii vastaavaa samantyyppistä " +"päiväkirjaa" #. module: account #: model:ir.actions.act_window,name:account.action_account_tax_template_form @@ -233,7 +245,7 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_account_move_line_reconcile_select msgid "Move line reconcile select" -msgstr "" +msgstr "Siirtorivin täsmäytyksen valinta" #. module: account #: help:account.model.line,sequence:0 @@ -261,12 +273,12 @@ msgstr "Lasku '%s' on osittain maksettu: %s%s määrästä %s%s (%s%s jäljellä #. module: account #: model:process.transition,note:account.process_transition_supplierentriesreconcile0 msgid "Accounting entries are an input of the reconciliation." -msgstr "" +msgstr "Kirjanpitoviennit ovat syötteenä täsmäytykselle" #. module: account #: model:ir.ui.menu,name:account.menu_finance_management_belgian_reports msgid "Belgian Reports" -msgstr "" +msgstr "Belgialaiset raportit" #. module: account #: code:addons/account/account_move_line.py:1182 @@ -277,14 +289,14 @@ msgstr "Et voi muokata merkintöjä suljetussa päiväkirjassa." #. module: account #: view:account.bank.statement:0 msgid "Calculated Balance" -msgstr "" +msgstr "Laskettu saldo" #. module: account #: model:ir.actions.act_window,name:account.action_account_use_model_create_entry #: model:ir.actions.act_window,name:account.action_view_account_use_model #: model:ir.ui.menu,name:account.menu_action_manual_recurring msgid "Manual Recurring" -msgstr "" +msgstr "Käsin toistettava" #. module: account #: view:account.fiscalyear.close.state:0 @@ -310,7 +322,7 @@ msgstr "St." #: code:addons/account/invoice.py:532 #, python-format msgid "Invoice line account company does not match with invoice company." -msgstr "" +msgstr "Laskurivin tilin yritys ei täsmää laskun yritykseen" #. module: account #: field:account.journal.column,field:0 @@ -337,7 +349,7 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_account_unreconcile msgid "Account Unreconcile" -msgstr "" +msgstr "Poista tilin täsmäytys" #. module: account #: view:product.product:0 @@ -349,7 +361,7 @@ msgstr "Ostojen ominaisuudet" #: view:account.installer:0 #: view:account.installer.modules:0 msgid "Configure" -msgstr "" +msgstr "Konfiguroi" #. module: account #: selection:account.entries.report,month:0 @@ -387,12 +399,12 @@ msgstr "Luomispäivämäärä" #. module: account #: selection:account.journal,type:0 msgid "Purchase Refund" -msgstr "" +msgstr "Oston hyvitys" #. module: account #: selection:account.journal,type:0 msgid "Opening/Closing Situation" -msgstr "" +msgstr "Avaus/sulkeimistilanne" #. module: account #: help:account.journal,currency:0 @@ -497,17 +509,17 @@ msgstr "Päiväkirja" #. module: account #: model:ir.model,name:account.model_account_invoice_confirm msgid "Confirm the selected invoices" -msgstr "" +msgstr "Vahvista vlitut laskut" #. module: account #: field:account.addtmpl.wizard,cparent_id:0 msgid "Parent target" -msgstr "" +msgstr "Ylätason kohde" #. module: account #: field:account.bank.statement,account_id:0 msgid "Account used in this journal" -msgstr "" +msgstr "Tiliä käytetty tässä päiväkirjassa" #. module: account #: help:account.aged.trial.balance,chart_account_id:0 @@ -536,7 +548,7 @@ msgstr "Ostoverot" #. module: account #: model:ir.model,name:account.model_account_invoice_refund msgid "Invoice Refund" -msgstr "" +msgstr "Laskun hyvitys" #. module: account #: report:account.overdue:0 @@ -552,7 +564,7 @@ msgstr "Suorittamattomat tapahtumat" #: code:addons/account/account_cash_statement.py:349 #, python-format msgid "CashBox Balance is not matching with Calculated Balance !" -msgstr "" +msgstr "Kassan saldo ei täsmää laskettuun saldoon !" #. module: account #: view:account.fiscal.position:0 @@ -570,7 +582,7 @@ msgstr "Sulje tilikausi" #. module: account #: model:process.transition,note:account.process_transition_confirmstatementfromdraft0 msgid "The accountant confirms the statement." -msgstr "" +msgstr "Kirjanpitäjä vahvistaa tiliotteen." #. module: account #: selection:account.balance.report,display_account:0 @@ -586,12 +598,12 @@ msgstr "Kaikki" #. module: account #: field:account.invoice.report,address_invoice_id:0 msgid "Invoice Address Name" -msgstr "" +msgstr "Laskuosoitteen nimi" #. module: account #: selection:account.installer,period:0 msgid "3 Monthly" -msgstr "" +msgstr "neljännesvuosittainen" #. module: account #: view:account.unreconcile.reconcile:0 @@ -605,7 +617,7 @@ msgstr "" #. module: account #: view:analytic.entries.report:0 msgid " 30 Days " -msgstr "" +msgstr " 30 päivää " #. module: account #: field:ir.sequence,fiscal_ids:0 @@ -620,12 +632,12 @@ msgstr "Verokartoitus" #. module: account #: report:account.central.journal:0 msgid "Centralized Journal" -msgstr "" +msgstr "Keskitetty päiväkirja" #. module: account #: sql_constraint:account.sequence.fiscalyear:0 msgid "Main Sequence must be different from current !" -msgstr "" +msgstr "Pääjärjestyksen tulee olla eri nykyiseen nähden!" #. module: account #: field:account.invoice.tax,tax_amount:0 @@ -642,7 +654,7 @@ msgstr "SAJ" #. module: account #: help:account.bank.statement,balance_end_real:0 msgid "closing balance entered by the cashbox verifier" -msgstr "" +msgstr "Loppusaldo jonka on syöttänyt kassantarkistaja" #. module: account #: view:account.period:0 @@ -653,7 +665,7 @@ msgstr "Sulje jakso" #. module: account #: model:ir.model,name:account.model_account_common_partner_report msgid "Account Common Partner Report" -msgstr "" +msgstr "Tilin yhteiskumppanien raportti" #. module: account #: field:account.fiscalyear.close,period_id:0 @@ -663,7 +675,7 @@ msgstr "Avaa kohteiden jaksoa" #. module: account #: model:ir.model,name:account.model_account_journal_period msgid "Journal Period" -msgstr "" +msgstr "Päiväkirjan jakso" #. module: account #: code:addons/account/account_move_line.py:723 @@ -671,6 +683,7 @@ msgstr "" #, python-format msgid "To reconcile the entries company should be the same for all entries" msgstr "" +"Täsmäyttääksesi viennit yrityksen tulisi olla sama kaikille vienneille" #. module: account #: view:account.account:0 @@ -702,12 +715,12 @@ msgstr "Oletko varma että haluat luoda merkinnät?" #. module: account #: selection:account.bank.accounts.wizard,account_type:0 msgid "Check" -msgstr "" +msgstr "Šekki" #. module: account #: field:account.partner.reconcile.process,today_reconciled:0 msgid "Partners Reconciled Today" -msgstr "" +msgstr "Tänään täsmäytetyt kumppanit" #. module: account #: code:addons/account/account_bank_statement.py:306 @@ -731,13 +744,13 @@ msgstr "Tilikartat" #: model:ir.model,name:account.model_project_account_analytic_line #, python-format msgid "Analytic Entries by line" -msgstr "" +msgstr "Analyyttiset viennit riveittäin" #. module: account #: code:addons/account/wizard/account_change_currency.py:38 #, python-format msgid "You can only change currency for Draft Invoice !" -msgstr "" +msgstr "Voit vaihtaa valuutan vain luonnostilassa olevalle laskulle" #. module: account #: view:account.analytic.journal:0 @@ -774,17 +787,17 @@ msgstr "Suoritusten poisto" #. module: account #: model:ir.model,name:account.model_account_analytic_Journal_report msgid "Account Analytic Journal" -msgstr "" +msgstr "Analyyttisten tilien päiväkirja" #. module: account #: model:ir.model,name:account.model_account_automatic_reconcile msgid "Automatic Reconcile" -msgstr "" +msgstr "Automaattitäsmäytys" #. module: account #: view:account.payment.term.line:0 msgid "Due date Computation" -msgstr "" +msgstr "Eräpäivän laskenta" #. module: account #: report:account.analytic.account.quantity_cost_ledger:0 @@ -832,7 +845,7 @@ msgstr "Laskenta" #. module: account #: view:account.move.line:0 msgid "Next Partner to reconcile" -msgstr "" +msgstr "Seuraava täsmäytettävä kumppani" #. module: account #: code:addons/account/account_move_line.py:1197 @@ -848,7 +861,7 @@ msgstr "" #: view:account.invoice.report:0 #: field:account.invoice.report,delay_to_pay:0 msgid "Avg. Delay To Pay" -msgstr "" +msgstr "Keskimääräinen maksuviive" #. module: account #: model:ir.actions.act_window,name:account.action_account_tax_chart @@ -871,7 +884,7 @@ msgstr "kuluessa" #: view:account.invoice.report:0 #: field:account.invoice.report,price_total_tax:0 msgid "Total With Tax" -msgstr "" +msgstr "Summa sisältäen veron" #. module: account #: view:account.invoice:0 @@ -886,7 +899,7 @@ msgstr "" #: view:account.move:0 #: view:report.invoice.created:0 msgid "Total Amount" -msgstr "" +msgstr "Kokonaismäärä" #. module: account #: selection:account.account,type:0 @@ -901,22 +914,22 @@ msgstr "Yhdistetty" #: view:account.invoice.report:0 #: view:account.move.line:0 msgid "Extended Filters..." -msgstr "" +msgstr "Laajennetut Suotimet..." #. module: account #: model:ir.ui.menu,name:account.menu_account_central_journal msgid "Centralizing Journal" -msgstr "" +msgstr "Keskuspäiväkirja" #. module: account #: selection:account.journal,type:0 msgid "Sale Refund" -msgstr "" +msgstr "Myynnin hyvitys" #. module: account #: model:process.node,note:account.process_node_accountingstatemententries0 msgid "Bank statement" -msgstr "" +msgstr "Pankin tiliote" #. module: account #: field:account.analytic.line,move_id:0 @@ -934,7 +947,7 @@ msgstr "" #. module: account #: view:account.analytic.line:0 msgid "Purchases" -msgstr "" +msgstr "Ostot" #. module: account #: field:account.model,lines_id:0 @@ -981,7 +994,7 @@ msgstr "Kumppanin saldo" #. module: account #: field:account.bank.accounts.wizard,acc_name:0 msgid "Account Name." -msgstr "" +msgstr "Tilin nimi." #. module: account #: field:account.chart.template,property_reserve_and_surplus_account:0 @@ -992,7 +1005,7 @@ msgstr "" #. module: account #: field:report.account.receivable,name:0 msgid "Week of Year" -msgstr "" +msgstr "Vuoden viikko" #. module: account #: field:account.bs.report,display_type:0 diff --git a/addons/account/i18n/id.po b/addons/account/i18n/id.po index 0c0372dfadd..636785798f6 100644 --- a/addons/account/i18n/id.po +++ b/addons/account/i18n/id.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-05-13 08:36+0000\n" -"Last-Translator: moelyana \n" +"PO-Revision-Date: 2011-07-07 05:11+0000\n" +"Last-Translator: Ginandjar Satyanagara \n" "Language-Team: Indonesian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-14 05:52+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:52+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -129,7 +129,7 @@ msgstr "" #. module: account #: report:account.tax.code.entries:0 msgid "Accounting Entries-" -msgstr "Akuntansi Entri" +msgstr "Entri Akuntansi" #. module: account #: code:addons/account/account.py:1305 diff --git a/addons/account/i18n/zh_CN.po b/addons/account/i18n/zh_CN.po index 85d89c63e6f..cc205afc321 100644 --- a/addons/account/i18n/zh_CN.po +++ b/addons/account/i18n/zh_CN.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-07-06 03:37+0000\n" +"PO-Revision-Date: 2011-07-07 17:46+0000\n" "Last-Translator: dquo \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-07-06 05:17+0000\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: account @@ -1321,7 +1321,7 @@ msgstr "察找税种" #. module: account #: model:ir.model,name:account.model_account_analytic_cost_ledger msgid "Account Analytic Cost Ledger" -msgstr "" +msgstr "成本科目明细分析" #. module: account #: view:account.model:0 @@ -1399,7 +1399,7 @@ msgid "" "Cannot create the invoice !\n" "The payment term defined gives a computed amount greater than the total " "invoiced amount." -msgstr "" +msgstr "无法建立发票!" #. module: account #: field:account.installer.modules,account_anglo_saxon:0 @@ -1854,7 +1854,7 @@ msgstr "此选项增加一个辅助核算币种,他会自动转为记帐本位 msgid "" "If set to True then do not accept the entry if the entry date is not into " "the period dates" -msgstr "" +msgstr "选此选项可将时间自动确认为今天" #. module: account #: model:ir.actions.act_window,name:account.action_account_pl_report @@ -4170,7 +4170,7 @@ msgstr "科目余额 -" #: code:addons/account/invoice.py:997 #, python-format msgid "Invoice " -msgstr "" +msgstr "开发票 " #. module: account #: field:account.automatic.reconcile,date1:0 @@ -4219,12 +4219,12 @@ msgstr "请验证发票金额!实际合计金额与计算金额不符。" #: view:account.invoice.report:0 #: field:account.invoice.report,user_id:0 msgid "Salesman" -msgstr "" +msgstr "业务员" #. module: account #: view:account.invoice.report:0 msgid "Invoiced" -msgstr "" +msgstr "已开票" #. module: account #: view:account.use.model:0 @@ -4244,7 +4244,7 @@ msgstr "税说明中的税基" #. module: account #: view:account.addtmpl.wizard:0 msgid "Add" -msgstr "" +msgstr "添加" #. module: account #: help:account.invoice,date_invoice:0 @@ -4254,7 +4254,7 @@ msgstr "留空使用当前日期" #. module: account #: selection:account.journal,type:0 msgid "Bank and Cheques" -msgstr "" +msgstr "银行和支票" #. module: account #: view:account.period.close:0 @@ -4305,17 +4305,17 @@ msgstr "税适用" #: model:ir.ui.menu,name:account.menu_eaction_account_moves_sale #, python-format msgid "Journal Items" -msgstr "" +msgstr "日记帐项目" #. module: account #: selection:account.account.type,report_type:0 msgid "Balance Sheet (Assets Accounts)" -msgstr "" +msgstr "资产负债表(资产帐户)" #. module: account #: report:account.tax.code.entries:0 msgid "Third Party (Country)" -msgstr "" +msgstr "第三方(国家)" #. module: account #: model:ir.actions.act_window,help:account.action_invoice_tree4 @@ -4351,12 +4351,12 @@ msgstr "缺少税目!" msgid "" "To print an analytics (or costs) journal for a given period. The report give " "code, move name, account number, general amount and analytic amount." -msgstr "" +msgstr "打印期间内成本分析,该报告提供的代码,名称变化,科目简码,一般用量和分析量。" #. module: account #: help:account.journal,refund_journal:0 msgid "Fill this if the journal is to be used for refunds of invoices." -msgstr "" +msgstr "如果要退货的发票请填这个明细." #. module: account #: view:account.fiscalyear.close:0 @@ -4366,7 +4366,7 @@ msgstr "生成会计年度开账凭证" #. module: account #: field:account.journal,group_invoice_lines:0 msgid "Group Invoice Lines" -msgstr "" +msgstr "集团发票明细" #. module: account #: view:account.invoice.cancel:0 @@ -4383,17 +4383,17 @@ msgstr "凭证" #: model:ir.actions.act_window,name:account.action_account_vat_declaration #: model:ir.model,name:account.model_account_vat_declaration msgid "Account Vat Declaration" -msgstr "" +msgstr "科目复原申明" #. module: account #: view:account.period:0 msgid "To Close" -msgstr "" +msgstr "将关闭" #. module: account #: field:account.journal,allow_date:0 msgid "Check Date not in the Period" -msgstr "" +msgstr "检查日期不在期限内" #. module: account #: code:addons/account/account.py:1224 @@ -4420,7 +4420,7 @@ msgstr "子税科目" #: code:addons/account/account.py:954 #, python-format msgid "Start period should be smaller then End period" -msgstr "" +msgstr "开始日期应小于月底日期" #. module: account #: selection:account.automatic.reconcile,power:0 @@ -4478,7 +4478,7 @@ msgstr "付款" #. module: account #: view:account.tax:0 msgid "Reverse Compute Code" -msgstr "" +msgstr "逆向运算守则" #. module: account #: field:account.subscription.line,move_id:0 @@ -4517,17 +4517,17 @@ msgstr "" #: field:report.account.sales,name:0 #: field:report.account_type.sales,name:0 msgid "Year" -msgstr "" +msgstr "年" #. module: account #: field:account.bank.statement,starting_details_ids:0 msgid "Opening Cashbox" -msgstr "" +msgstr "开启出纳" #. module: account #: view:account.payment.term.line:0 msgid "Line 1:" -msgstr "" +msgstr "第一行" #. module: account #: code:addons/account/account.py:1181 @@ -4559,7 +4559,7 @@ msgstr "发票说明" #. module: account #: field:account.partner.reconcile.process,next_partner_id:0 msgid "Next Partner to Reconcile" -msgstr "" +msgstr "核销下一个合作伙伴" #. module: account #: field:account.invoice.tax,account_id:0 @@ -4577,12 +4577,12 @@ msgstr "核销结果" #: model:ir.actions.act_window,name:account.action_account_bs_report #: model:ir.ui.menu,name:account.menu_account_bs_report msgid "Balance Sheet" -msgstr "" +msgstr "资产负债表" #. module: account #: model:ir.ui.menu,name:account.final_accounting_reports msgid "Accounting Reports" -msgstr "" +msgstr "会计报告" #. module: account #: field:account.move,line_id:0 @@ -4595,7 +4595,7 @@ msgstr "凭证" #. module: account #: view:account.entries.report:0 msgid "This Period" -msgstr "" +msgstr "这个会计期间" #. module: account #: field:account.analytic.line,product_uom_id:0 @@ -4654,7 +4654,7 @@ msgstr "会计年度结束凭证" #: model:process.transition,name:account.process_transition_suppliervalidentries0 #: model:process.transition,name:account.process_transition_validentries0 msgid "Validation" -msgstr "" +msgstr "审核" #. module: account #: help:account.invoice,reconciled:0 @@ -4684,7 +4684,7 @@ msgstr "允许取消凭证" #. module: account #: field:account.tax.code,sign:0 msgid "Coefficent for parent" -msgstr "" +msgstr "母公司系数" #. module: account #: report:account.partner.balance:0 @@ -4694,7 +4694,7 @@ msgstr "(业务伙伴/科目)名称" #. module: account #: view:account.bank.statement:0 msgid "Transaction" -msgstr "" +msgstr "交易" #. module: account #: help:account.tax,base_code_id:0 @@ -4711,7 +4711,7 @@ msgstr "申报增值税使用的代码" #. module: account #: view:account.move.line:0 msgid "Debit/Credit" -msgstr "" +msgstr "借/贷" #. module: account #: view:report.hr.timesheet.invoice.journal:0 @@ -4785,7 +4785,7 @@ msgstr "" #. module: account #: field:account.bank.statement.line,name:0 msgid "Communication" -msgstr "" +msgstr "交流" #. module: account #: model:ir.ui.menu,name:account.menu_analytic_accounting @@ -4853,7 +4853,7 @@ msgstr "周期性凭证行" #. module: account #: field:account.entries.report,quantity:0 msgid "Products Quantity" -msgstr "" +msgstr "产品数量" #. module: account #: view:account.entries.report:0 @@ -4862,25 +4862,25 @@ msgstr "" #: selection:account.move,state:0 #: view:account.move.line:0 msgid "Unposted" -msgstr "" +msgstr "未公布" #. module: account #: view:account.change.currency:0 #: model:ir.actions.act_window,name:account.action_account_change_currency #: model:ir.model,name:account.model_account_change_currency msgid "Change Currency" -msgstr "" +msgstr "兑换货币" #. module: account #: model:process.node,note:account.process_node_accountingentries0 #: model:process.node,note:account.process_node_supplieraccountingentries0 msgid "Accounting entries." -msgstr "" +msgstr "会计分录。" #. module: account #: view:account.invoice:0 msgid "Payment Date" -msgstr "" +msgstr "付款日期" #. module: account #: selection:account.automatic.reconcile,power:0 @@ -4900,12 +4900,12 @@ msgstr "辅助核算项目" msgid "" "According value related accounts will be display on respective reports " "(Balance Sheet Profit & Loss Account)" -msgstr "" +msgstr "资产负债表损益表" #. module: account #: field:account.report.general.ledger,sortby:0 msgid "Sort By" -msgstr "" +msgstr "筛选依" #. module: account #: code:addons/account/account.py:1340 @@ -4933,7 +4933,7 @@ msgstr "这个业务类型本期间没有待审核的凭证" #. module: account #: model:ir.actions.act_window,name:account.action_view_move_line msgid "Lines to reconcile" -msgstr "" +msgstr "核销凭证明细" #. module: account #: report:account.analytic.account.balance:0 @@ -4953,12 +4953,12 @@ msgstr "数量" #. module: account #: view:account.move.line:0 msgid "Number (Move)" -msgstr "" +msgstr "编号" #. module: account #: view:account.invoice.refund:0 msgid "Refund Invoice Options" -msgstr "" +msgstr "发票退款选项" #. module: account #: help:account.automatic.reconcile,power:0 @@ -5009,7 +5009,7 @@ msgstr "币别" #. module: account #: view:account.bank.statement:0 msgid "Open CashBox" -msgstr "" +msgstr "开启出纳" #. module: account #: view:account.move.line.reconcile:0 @@ -5025,28 +5025,28 @@ msgstr "固定金额" #. module: account #: view:account.subscription:0 msgid "Valid Up to" -msgstr "" +msgstr "有效期至" #. module: account #: view:board.board:0 msgid "Aged Receivables" -msgstr "" +msgstr "长期应收款" #. module: account #: model:ir.actions.act_window,name:account.action_account_automatic_reconcile msgid "Account Automatic Reconcile" -msgstr "" +msgstr "科目自动核销" #. module: account #: view:account.move:0 #: view:account.move.line:0 msgid "Journal Item" -msgstr "" +msgstr "明细项目" #. module: account #: model:ir.model,name:account.model_account_move_journal msgid "Move journal" -msgstr "" +msgstr "明细移动" #. module: account #: model:ir.actions.act_window,name:account.action_account_fiscalyear_close @@ -5058,7 +5058,7 @@ msgstr "" #: code:addons/account/account_move_line.py:729 #, python-format msgid "Already Reconciled!" -msgstr "" +msgstr "不满意" #. module: account #: help:account.tax,type:0 @@ -5082,7 +5082,7 @@ msgstr "创建日期" #: model:ir.actions.act_window,name:account.action_account_analytic_journal_form #: model:ir.ui.menu,name:account.account_def_analytic_journal msgid "Analytic Journals" -msgstr "" +msgstr "明细分析" #. module: account #: field:account.account,child_id:0 @@ -5122,7 +5122,7 @@ msgstr "供应商" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "March" -msgstr "" +msgstr "3月" #. module: account #: view:account.account.template:0 @@ -5139,12 +5139,12 @@ msgstr "科目编码" msgid "" "Streamlines invoice payment and creates hooks to plug automated payment " "systems in." -msgstr "" +msgstr "简化发票付款,并创建挂钩插件的自动付款系统。" #. module: account #: field:account.payment.term.line,value:0 msgid "Valuation" -msgstr "" +msgstr "估价" #. module: account #: selection:account.aged.trial.balance,result_selection:0 @@ -5159,13 +5159,13 @@ msgstr "应收款与应付款科目" #. module: account #: field:account.fiscal.position.account.template,position_id:0 msgid "Fiscal Mapping" -msgstr "" +msgstr "财政反映" #. module: account #: model:ir.actions.act_window,name:account.action_account_state_open #: model:ir.model,name:account.model_account_state_open msgid "Account State Open" -msgstr "" +msgstr "打开科目状态" #. module: account #: report:account.analytic.account.quantity_cost_ledger:0 @@ -5225,13 +5225,13 @@ msgstr "强制会计期间" #: view:account.invoice.report:0 #: field:account.invoice.report,nbr:0 msgid "# of Lines" -msgstr "" +msgstr "# 明细" #. module: account #: code:addons/account/wizard/account_change_currency.py:59 #, python-format msgid "New currency is not confirured properly !" -msgstr "" +msgstr "新币种配置不正确" #. module: account #: field:account.aged.trial.balance,filter:0 @@ -5250,7 +5250,7 @@ msgstr "" #: field:account.report.general.ledger,filter:0 #: field:account.vat.declaration,filter:0 msgid "Filter by" -msgstr "" +msgstr "过滤条件" #. module: account #: code:addons/account/account_move_line.py:1137 @@ -5275,7 +5275,7 @@ msgstr "发票税科目" #: model:ir.actions.act_window,name:account.action_account_general_journal #: model:ir.model,name:account.model_account_general_journal msgid "Account General Journal" -msgstr "" +msgstr "科目一般明细" #. module: account #: code:addons/account/report/common_report_header.py:100 @@ -5309,7 +5309,7 @@ msgstr "" #. module: account #: model:ir.model,name:account.model_account_fiscal_position_tax_template msgid "Template Tax Fiscal Position" -msgstr "" +msgstr "默认税的会计期间状况" #. module: account #: help:account.tax,name:0 @@ -5332,7 +5332,7 @@ msgstr "无" #. module: account #: view:analytic.entries.report:0 msgid " 365 Days " -msgstr "" +msgstr " 365 日 " #. module: account #: model:ir.actions.act_window,name:account.action_invoice_tree3 @@ -5343,7 +5343,7 @@ msgstr "客户红字发票" #. module: account #: view:account.payment.term.line:0 msgid "Amount Computation" -msgstr "" +msgstr "计算额度" #. module: account #: field:account.journal.period,name:0 @@ -5359,12 +5359,12 @@ msgstr "" #: code:addons/account/wizard/account_report_common.py:126 #, python-format msgid "not implemented" -msgstr "" +msgstr "尚未实现" #. module: account #: help:account.journal,company_id:0 msgid "Company related to this journal" -msgstr "" +msgstr "公司有关本明细" #. module: account #: code:addons/account/wizard/account_invoice_state.py:44 @@ -5384,7 +5384,7 @@ msgstr "财务状况备注:" #: model:ir.actions.act_window,name:account.action_analytic_entries_report #: model:ir.ui.menu,name:account.menu_action_analytic_entries_report msgid "Analytic Entries Analysis" -msgstr "" +msgstr "分析项目的分析" #. module: account #: selection:account.aged.trial.balance,direction_selection:0 @@ -5414,7 +5414,7 @@ msgstr "" #. module: account #: field:account.entries.report,date_created:0 msgid "Date Created" -msgstr "" +msgstr "创建时间" #. module: account #: field:account.payment.term.line,value_amount:0 @@ -5426,7 +5426,7 @@ msgstr "金额" msgid "" "The code will be used to generate the numbers of the journal entries of this " "journal." -msgstr "" +msgstr "该代码将被用于产生本日记帐的明细条目的数量。" #. module: account #: view:account.invoice:0 @@ -5444,7 +5444,7 @@ msgstr "" #: code:addons/account/invoice.py:997 #, python-format msgid "is validated." -msgstr "" +msgstr "验证" #. module: account #: view:account.chart.template:0 @@ -5455,12 +5455,12 @@ msgstr "根科目" #. module: account #: field:res.partner,last_reconciliation_date:0 msgid "Latest Reconciliation Date" -msgstr "" +msgstr "最新的核销日期" #. module: account #: model:ir.model,name:account.model_account_analytic_line msgid "Analytic Line" -msgstr "" +msgstr "分析项" #. module: account #: field:product.template,taxes_id:0 @@ -5470,18 +5470,18 @@ msgstr "客户税" #. module: account #: view:account.addtmpl.wizard:0 msgid "Create an Account based on this template" -msgstr "" +msgstr "基于此模板的创建一个会计科目总表" #. module: account #: view:account.account.type:0 #: view:account.tax.code:0 msgid "Reporting Configuration" -msgstr "" +msgstr "配置报告" #. module: account #: constraint:account.move.line:0 msgid "Company must be same for its related account and period." -msgstr "" +msgstr "公司相关的帐户和会计期限必须相同。" #. module: account #: field:account.tax,type:0 @@ -5498,12 +5498,12 @@ msgstr "科目模板" #. module: account #: report:account.vat.declaration:0 msgid "Tax Statement" -msgstr "" +msgstr "纳税申请表" #. module: account #: model:ir.model,name:account.model_res_company msgid "Companies" -msgstr "" +msgstr "公司" #. module: account #: code:addons/account/account.py:546 @@ -5511,12 +5511,12 @@ msgstr "" msgid "" "You cannot modify Company of account as its related record exist in Entry " "Lines" -msgstr "" +msgstr "您不能修改此科目,因为其存在相关的记录" #. module: account #: help:account.fiscalyear.close.state,fy_id:0 msgid "Select a fiscal year to close" -msgstr "" +msgstr "关闭一个会计期间" #. module: account #: help:account.chart.template,tax_template_ids:0 @@ -5626,7 +5626,7 @@ msgstr "默认贷方科目" #. module: account #: view:account.installer:0 msgid "Configure Your Accounting Chart" -msgstr "" +msgstr "配置您的会计图表" #. module: account #: view:account.payment.term.line:0 @@ -5636,17 +5636,17 @@ msgstr "" #. module: account #: help:account.analytic.line,currency_id:0 msgid "The related account currency if not equal to the company one." -msgstr "" +msgstr "如果不是同一公司, 这相关项的货币" #. module: account #: view:account.analytic.account:0 msgid "Current" -msgstr "" +msgstr "当前的" #. module: account #: view:account.bank.statement:0 msgid "CashBox" -msgstr "" +msgstr "现金" #. module: account #: selection:account.tax,type:0 @@ -5656,7 +5656,7 @@ msgstr "百分比" #. module: account #: selection:account.report.general.ledger,sortby:0 msgid "Journal & Partner" -msgstr "" +msgstr "合伙人明细" #. module: account #: field:account.automatic.reconcile,power:0 @@ -5666,7 +5666,7 @@ msgstr "强制" #. module: account #: field:account.invoice.refund,filter_refund:0 msgid "Refund Type" -msgstr "" +msgstr "退款类型" #. module: account #: report:account.invoice:0 @@ -5681,7 +5681,7 @@ msgstr "辅助核算明细视图" #. module: account #: selection:account.account.type,report_type:0 msgid "Balance Sheet (Liability Accounts)" -msgstr "" +msgstr "资产负债表(负债账户)" #. module: account #: field:account.invoice,internal_number:0 @@ -5699,7 +5699,7 @@ msgstr "" #. module: account #: model:ir.actions.act_window,name:account.action_account_partner_reconcile msgid "Reconciliation: Go to Next Partner" -msgstr "" +msgstr "对账:转到下一个合作伙伴" #. module: account #: model:ir.actions.act_window,name:account.action_account_analytic_invert_balance @@ -5731,13 +5731,13 @@ msgstr "序列字段用于税从低到高排序, 如果税中有子税这排序 #: selection:account.account.template,type:0 #: view:account.journal:0 msgid "Liquidity" -msgstr "" +msgstr "流动资金" #. module: account #: model:ir.actions.act_window,name:account.action_account_analytic_journal_open_form #: model:ir.ui.menu,name:account.account_analytic_journal_entries msgid "Analytic Journal Items" -msgstr "" +msgstr "分析明细项目" #. module: account #: view:account.fiscalyear.close:0 @@ -5750,7 +5750,7 @@ msgstr "" #. module: account #: model:ir.ui.menu,name:account.menu_finance_bank_and_cash msgid "Bank and Cash" -msgstr "" +msgstr "银行和现金" #. module: account #: model:ir.actions.act_window,help:account.action_analytic_entries_report @@ -5764,12 +5764,12 @@ msgstr "" #. module: account #: sql_constraint:account.journal:0 msgid "The name of the journal must be unique per company !" -msgstr "" +msgstr "每个公司的日记账名称必须唯一!" #. module: account #: field:account.account.template,nocreate:0 msgid "Optional create" -msgstr "" +msgstr "可选的创建" #. module: account #: code:addons/account/invoice.py:409 @@ -5783,7 +5783,7 @@ msgstr "" #: code:addons/account/wizard/account_report_aged_partner_balance.py:57 #, python-format msgid "Enter a Start date !" -msgstr "" +msgstr "输入开始日期" #. module: account #: report:account.invoice:0 @@ -5796,7 +5796,7 @@ msgstr "供应商红字发票" #. module: account #: model:ir.ui.menu,name:account.menu_dashboard_acc msgid "Dashboard" -msgstr "" +msgstr "控制台" #. module: account #: field:account.bank.statement,move_line_ids:0 @@ -5843,7 +5843,7 @@ msgstr "只读" #. module: account #: model:ir.model,name:account.model_account_pl_report msgid "Account Profit And Loss Report" -msgstr "" +msgstr "会计盈亏报告" #. module: account #: field:account.invoice.line,uos_id:0 @@ -5876,7 +5876,7 @@ msgstr "辅助核算类型" #. module: account #: view:account.entries.report:0 msgid "Reconciled" -msgstr "" +msgstr "已对账" #. module: account #: report:account.invoice:0 @@ -5897,7 +5897,7 @@ msgstr "费用类科目" #. module: account #: view:account.bank.statement:0 msgid "Cash Transactions" -msgstr "" +msgstr "现金交易" #. module: account #: code:addons/account/wizard/account_state_open.py:37 @@ -5920,7 +5920,7 @@ msgstr "备注" #. module: account #: model:ir.model,name:account.model_analytic_entries_report msgid "Analytic Entries Statistics" -msgstr "" +msgstr "分析条目统计" #. module: account #: code:addons/account/account_analytic_line.py:141 @@ -5932,7 +5932,7 @@ msgstr "凭证: " #. module: account #: view:account.use.model:0 msgid "Create manual recurring entries in a chosen journal." -msgstr "" +msgstr "手动创建选定的明细在经常性项。" #. module: account #: code:addons/account/account.py:1407 @@ -5963,7 +5963,7 @@ msgstr "" #. module: account #: model:process.node,note:account.process_node_draftstatement0 msgid "State is draft" -msgstr "" +msgstr "草稿状态" #. module: account #: view:account.move.line:0 @@ -5987,7 +5987,7 @@ msgstr "传真:" #: report:account.vat.declaration:0 #: field:account.vat.declaration,based_on:0 msgid "Based On" -msgstr "" +msgstr "基于" #. module: account #: help:res.partner,property_account_receivable:0 @@ -6012,7 +6012,7 @@ msgstr "Python代码" #, python-format msgid "" "Please define the Reserve and Profit/Loss account for current user company !" -msgstr "" +msgstr "请定义当前用户的公司损益类科目" #. module: account #: help:account.journal,update_posted:0 @@ -6103,7 +6103,7 @@ msgstr "" #: view:account.move:0 #: field:account.move,to_check:0 msgid "To Review" -msgstr "" +msgstr "审查" #. module: account #: view:account.bank.statement:0 @@ -6112,7 +6112,7 @@ msgstr "" #: model:ir.ui.menu,name:account.menu_action_move_journal_line_form #: model:ir.ui.menu,name:account.menu_finance_entries msgid "Journal Entries" -msgstr "" +msgstr "明细分录" #. module: account #: help:account.partner.ledger,page_split:0 @@ -6173,13 +6173,13 @@ msgstr "" #. module: account #: view:account.journal.select:0 msgid "Journal Select" -msgstr "" +msgstr "选择明细" #. module: account #: code:addons/account/wizard/account_change_currency.py:64 #, python-format msgid "Currnt currency is not confirured properly !" -msgstr "" +msgstr "当前的货币配置不正确!" #. module: account #: model:ir.model,name:account.model_account_move_reconcile @@ -6189,7 +6189,7 @@ msgstr "科目核销" #. module: account #: model:ir.model,name:account.model_account_fiscal_position_tax msgid "Taxes Fiscal Position" -msgstr "" +msgstr "税负" #. module: account #: report:account.general.ledger:0 @@ -6205,7 +6205,7 @@ msgstr "按全部业务类型打印全部凭证" #. module: account #: model:process.transition,note:account.process_transition_paymentorderbank0 msgid "The payment order is sent to the bank." -msgstr "" +msgstr "去银行交付款单据" #. module: account #: view:account.balance.report:0 @@ -6238,7 +6238,7 @@ msgstr "属性" #. module: account #: model:ir.model,name:account.model_account_tax_chart msgid "Account tax chart" -msgstr "" +msgstr "税科目图表" #. module: account #: report:account.analytic.account.cost_ledger:0 @@ -6272,7 +6272,7 @@ msgstr "收入科目" #. module: account #: help:report.invoice.created,origin:0 msgid "Reference of the document that generated this invoice report." -msgstr "" +msgstr "参考文档生成此发票的报告" #. module: account #: field:account.tax.code,child_ids:0 @@ -6301,7 +6301,7 @@ msgstr "补差额金额" #. module: account #: view:account.analytic.line:0 msgid "Sales" -msgstr "" +msgstr "销售" #. module: account #: view:account.journal.column:0 @@ -6337,7 +6337,7 @@ msgstr "" #: field:account.invoice,origin:0 #: field:report.invoice.created,origin:0 msgid "Source Document" -msgstr "" +msgstr "源单据" #. module: account #: help:account.account.type,sign:0 @@ -6350,12 +6350,12 @@ msgstr "允许你修改报表显示的余额的符号,所以你能看见正数 #. module: account #: model:ir.actions.act_window,name:account.act_account_acount_move_line_open_unreconciled msgid "Unreconciled Entries" -msgstr "" +msgstr "非核销项目" #. module: account #: model:ir.ui.menu,name:account.menu_menu_Bank_process msgid "Statements Reconciliation" -msgstr "" +msgstr "报表调节" #. module: account #: report:account.invoice:0 @@ -6381,7 +6381,7 @@ msgstr "" #: view:analytic.entries.report:0 #: field:analytic.entries.report,product_uom_id:0 msgid "Product UOM" -msgstr "" +msgstr "产品计量单位" #. module: account #: model:ir.actions.act_window,help:account.action_view_bank_statement_tree @@ -6412,7 +6412,7 @@ msgstr "会计期间长度(天数)" #. module: account #: model:ir.actions.act_window,name:account.act_account_invoice_partner_relation msgid "Monthly Turnover" -msgstr "" +msgstr "月营业额" #. module: account #: view:account.move:0 @@ -6443,7 +6443,7 @@ msgstr "明细" msgid "" "Can not find account chart for this company in invoice line account, Please " "Create account." -msgstr "" +msgstr "无法找到本公司发票的科目表,请创建科目。" #. module: account #: view:account.tax.template:0 @@ -6453,7 +6453,7 @@ msgstr "税模板" #. module: account #: view:account.journal.select:0 msgid "Are you sure you want to open Journal Entries?" -msgstr "" +msgstr "你确定你要打开明细条目吗?" #. module: account #: view:account.state.open:0 @@ -6482,7 +6482,7 @@ msgstr "银行单据" #. module: account #: help:account.journal,default_debit_account_id:0 msgid "It acts as a default account for debit amount" -msgstr "" +msgstr "它将作为一个默认的借方科目" #. module: account #: model:ir.module.module,description:account.module_meta_information @@ -6550,12 +6550,12 @@ msgstr "确定" #: code:addons/account/report/account_partner_balance.py:115 #, python-format msgid "Unknown Partner" -msgstr "" +msgstr "未确定的合作伙伴" #. module: account #: view:account.bank.statement:0 msgid "Opening Balance" -msgstr "" +msgstr "期初余额" #. module: account #: help:account.journal,centralisation:0 @@ -6568,7 +6568,7 @@ msgstr "在会计年度关闭时, 确定每个业务类型的凭证不会产生 #. module: account #: field:account.bank.statement,closing_date:0 msgid "Closed On" -msgstr "" +msgstr "休息日" #. module: account #: model:ir.model,name:account.model_account_bank_statement_line @@ -6578,12 +6578,12 @@ msgstr "银行对账单明细" #. module: account #: field:account.automatic.reconcile,date2:0 msgid "Ending Date" -msgstr "" +msgstr "结束日期" #. module: account #: field:wizard.multi.charts.accounts,purchase_tax:0 msgid "Default Purchase Tax" -msgstr "" +msgstr "默认进项税" #. module: account #: view:account.bank.statement:0 @@ -6595,7 +6595,7 @@ msgstr "确认" msgid "" "Bank Account Number, Company bank account if Invoice is customer or supplier " "refund, otherwise Partner bank account number." -msgstr "" +msgstr "银行户口号码,公司银行账户,发票,如果是客户或供应商退款,否则合作伙伴银行账户号码。" #. module: account #: help:account.tax,domain:0 @@ -6609,7 +6609,7 @@ msgstr "这字段只用于如果你开发自己的模块允许开发者在自定 #: code:addons/account/account.py:952 #, python-format msgid "You should have chosen periods that belongs to the same company" -msgstr "" +msgstr "同一家公司你应该选择一个会计期间" #. module: account #: field:account.fiscalyear.close,report_name:0 @@ -6629,12 +6629,12 @@ msgstr "内部报表" #. module: account #: sql_constraint:account.journal:0 msgid "The code of the journal must be unique per company !" -msgstr "" +msgstr "每个公司的日记账代码必须唯一!" #. module: account #: field:account.bank.statement,ending_details_ids:0 msgid "Closing Cashbox" -msgstr "" +msgstr "出纳关帐" #. module: account #: view:account.journal:0 @@ -6669,7 +6669,7 @@ msgstr "隶属" #. module: account #: model:ir.model,name:account.model_account_use_model msgid "Use model" -msgstr "" +msgstr "使用模型" #. module: account #: model:ir.actions.act_window,help:account.action_account_moves_purchase @@ -6686,7 +6686,7 @@ msgid "" "This Account is used for transferring Profit/Loss(If It is Profit: Amount " "will be added, Loss : Amount will be deducted.), Which is calculated from " "Profit & Loss Report" -msgstr "" +msgstr "此科目是为损益类科目(如果盈利它增加,损失则减少),是从损益表计算而来" #. module: account #: view:account.invoice.line:0 @@ -6713,7 +6713,7 @@ msgstr "报表上的符号" #: code:addons/account/account_cash_statement.py:250 #, python-format msgid "You can not have two open register for the same journal" -msgstr "" +msgstr "同一凭证不能进入二个会计期间" #. module: account #: view:account.payment.term.line:0 @@ -6723,7 +6723,7 @@ msgstr "" #. module: account #: constraint:res.partner:0 msgid "Error ! You can not create recursive associated members." -msgstr "" +msgstr "出错!不能创建循环关联的成员。" #. module: account #: help:account.journal,type:0 @@ -6747,7 +6747,7 @@ msgstr "形式发票" msgid "" "Helps you generate reminder letters for unpaid invoices, including multiple " "levels of reminding and customized per-partner policies." -msgstr "" +msgstr "帮助您生成未付发票,包括制定多次的提醒信件和制定每个合作伙伴的政策" #. module: account #: view:account.payment.term.line:0 @@ -6808,7 +6808,7 @@ msgstr "销售业务类型" #: code:addons/account/wizard/account_move_journal.py:104 #, python-format msgid "Open Journal Items !" -msgstr "" +msgstr "打开明细项目!" #. module: account #: model:ir.model,name:account.model_account_invoice_tax @@ -6830,7 +6830,7 @@ msgstr "销售属性" #. module: account #: model:ir.ui.menu,name:account.menu_manual_reconcile msgid "Manual Reconciliation" -msgstr "" +msgstr "手动调节" #. module: account #: report:account.overdue:0 @@ -6853,7 +6853,7 @@ msgstr "关闭会计年度" #: view:account.invoice.cancel:0 #: model:ir.actions.act_window,name:account.action_account_invoice_cancel msgid "Cancel Selected Invoices" -msgstr "" +msgstr "取消选择的发票" #. module: account #: selection:account.entries.report,month:0 @@ -6862,7 +6862,7 @@ msgstr "" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "May" -msgstr "" +msgstr "5月" #. module: account #: view:account.account:0 @@ -6890,7 +6890,7 @@ msgstr "事务代码" #. module: account #: view:validate.account.move:0 msgid "Post Journal Entries of a Journal" -msgstr "" +msgstr "发布明细分录的日记" #. module: account #: view:product.product:0 @@ -6914,7 +6914,7 @@ msgstr "目标科目" #. module: account #: model:process.node,note:account.process_node_supplierpaymentorder0 msgid "Payment of invoices" -msgstr "" +msgstr "发票付款" #. module: account #: field:account.bank.statement.line,sequence:0 @@ -6932,7 +6932,7 @@ msgstr "序列" #. module: account #: model:ir.model,name:account.model_account_bs_report msgid "Account Balance Sheet Report" -msgstr "" +msgstr "资产负债表科目的报告" #. module: account #: help:account.tax,price_include:0 @@ -6950,17 +6950,17 @@ msgstr "是" #. module: account #: view:report.account_type.sales:0 msgid "Sales by Account type" -msgstr "" +msgstr "销售帐户类型" #. module: account #: help:account.invoice,move_id:0 msgid "Link to the automatically generated Journal Items." -msgstr "" +msgstr "链接到自动生成的明细项。" #. module: account #: selection:account.installer,period:0 msgid "Monthly" -msgstr "" +msgstr "每月" #. module: account #: model:ir.actions.act_window,help:account.action_account_journal_view @@ -6975,17 +6975,17 @@ msgstr "" #. module: account #: view:account.payment.term.line:0 msgid " number of days: 14" -msgstr "" +msgstr " 天数:14" #. module: account #: view:analytic.entries.report:0 msgid " 7 Days " -msgstr "" +msgstr " 7 天 " #. module: account #: field:account.partner.reconcile.process,progress:0 msgid "Progress" -msgstr "" +msgstr "进度" #. module: account #: field:account.account,parent_id:0 @@ -6996,7 +6996,7 @@ msgstr "上级科目" #. module: account #: field:account.installer.modules,account_analytic_plans:0 msgid "Multiple Analytic Plans" -msgstr "" +msgstr "多个辅助核算方案" #. module: account #: help:account.payment.term.line,days2:0 @@ -7009,7 +7009,7 @@ msgstr "月天数设为-1到当月最后一天.如果为+数为下月的天数. #. module: account #: model:ir.ui.menu,name:account.menu_finance_legal_statement msgid "Legal Reports" -msgstr "" +msgstr "法律报告" #. module: account #: field:account.tax.code,sum_period:0 @@ -7027,7 +7027,7 @@ msgstr "序列字段用于税从低到高排序. 如果税中有子税这排序 #. module: account #: model:ir.model,name:account.model_account_cashbox_line msgid "CashBox Line" -msgstr "" +msgstr "出纳明细" #. module: account #: view:account.partner.ledger:0 @@ -7068,13 +7068,13 @@ msgstr "警告 !" #. module: account #: field:account.entries.report,move_line_state:0 msgid "State of Move Line" -msgstr "" +msgstr "草案移动项" #. module: account #: model:ir.model,name:account.model_account_move_line_reconcile #: model:ir.model,name:account.model_account_move_line_reconcile_writeoff msgid "Account move line reconcile" -msgstr "" +msgstr "核销科目移动项" #. module: account #: view:account.subscription.generate:0 @@ -7109,7 +7109,7 @@ msgstr "业务伙伴" #. module: account #: help:account.change.currency,currency_id:0 msgid "Select a currency to apply on the invoice" -msgstr "" +msgstr "在发票上选择合适的货币" #. module: account #: code:addons/account/wizard/account_invoice_refund.py:100 @@ -7121,7 +7121,7 @@ msgstr "不能注销 %s 草稿/形式/取消的发票" #: code:addons/account/invoice.py:795 #, python-format msgid "No Invoice Lines !" -msgstr "" +msgstr "没有发票项" #. module: account #: view:account.bank.statement:0 @@ -7175,12 +7175,12 @@ msgstr "" #. module: account #: model:process.node,note:account.process_node_electronicfile0 msgid "Automatic entry" -msgstr "" +msgstr "自动录入" #. module: account #: constraint:account.tax.code.template:0 msgid "Error ! You can not create recursive Tax Codes." -msgstr "" +msgstr "错误!您不能创建循环税码。" #. module: account #: view:account.invoice.line:0 @@ -7199,7 +7199,7 @@ msgstr "如果勾选此项, 系统将试图在从发票生成凭证时分组" msgid "" "When monthly periods are created. The state is 'Draft'. At the end of " "monthly period it is in 'Done' state." -msgstr "" +msgstr "当每月创建的时候状态是“草案”。在每月结束的时候,它是在“完成”状态。" #. module: account #: report:account.analytic.account.inverted.balance:0 @@ -7242,19 +7242,19 @@ msgstr "附加信息" #. module: account #: view:account.installer:0 msgid "Bank and Cash Accounts" -msgstr "" +msgstr "银行和现金科目" #. module: account #: view:account.invoice.report:0 #: field:account.invoice.report,residual:0 msgid "Total Residual" -msgstr "" +msgstr "总余额" #. module: account #: model:process.node,note:account.process_node_invoiceinvoice0 #: model:process.node,note:account.process_node_supplierinvoiceinvoice0 msgid "Invoice's state is Open" -msgstr "" +msgstr "发票的状态是打开的" #. module: account #: model:ir.actions.act_window,help:account.action_tax_code_tree @@ -7267,7 +7267,7 @@ msgstr "" #. module: account #: view:account.installer.modules:0 msgid "Add extra Accounting functionalities to the ones already installed." -msgstr "" +msgstr "添加额外的会计功能已安装的。" #. module: account #: report:account.analytic.account.cost_ledger:0 @@ -7280,7 +7280,7 @@ msgstr "核算项目分类账" #. module: account #: view:account.invoice:0 msgid "Proforma" -msgstr "" +msgstr "预编" #. module: account #: report:account.analytic.account.cost_ledger:0 @@ -7297,7 +7297,7 @@ msgstr "选择会计年度" #: code:addons/account/installer.py:495 #, python-format msgid "Purchase Refund Journal" -msgstr "" +msgstr "采购退款明细" #. module: account #: help:account.tax.template,amount:0 @@ -7319,7 +7319,7 @@ msgstr "" #. module: account #: model:ir.module.module,shortdesc:account.module_meta_information msgid "Accounting and Financial Management" -msgstr "" +msgstr "会计与财务管理" #. module: account #: field:account.automatic.reconcile,period_id:0 @@ -7353,7 +7353,7 @@ msgstr "不含税合计:" #. module: account #: model:ir.ui.menu,name:account.menu_finance_generic_reporting msgid "Generic Reporting" -msgstr "" +msgstr "通用报告" #. module: account #: field:account.move.line.reconcile.writeoff,journal_id:0 @@ -7429,13 +7429,13 @@ msgstr "公司本位币" #: report:account.third_party_ledger:0 #: report:account.third_party_ledger_other:0 msgid "Chart of Account" -msgstr "" +msgstr "会计科目表" #. module: account #: model:process.node,name:account.process_node_paymententries0 #: model:process.transition,name:account.process_transition_reconcilepaid0 msgid "Payment" -msgstr "" +msgstr "付款" #. module: account #: help:account.bs.report,reserve_account_id:0 @@ -7443,14 +7443,14 @@ msgid "" "This Account is used for transfering Profit/Loss (Profit: Amount will be " "added, Loss: Amount will be duducted), which is calculated from Profilt & " "Loss Report" -msgstr "" +msgstr "此帐户是损益类科目(盈利为增加,亏损为减少),这是从损益表计算而来" #. module: account #: help:account.move.line,blocked:0 msgid "" "You can check this box to mark this journal item as a litigation with the " "associated partner" -msgstr "" +msgstr "您可以选中此复选框,标记为一个与相关合作伙伴的诉讼中明细项" #. module: account #: field:account.move.line,reconcile_partial_id:0 @@ -7461,28 +7461,28 @@ msgstr "部分核销单号" #. module: account #: model:ir.model,name:account.model_account_analytic_inverted_balance msgid "Account Analytic Inverted Balance" -msgstr "" +msgstr "分析科目是否平衡" #. module: account #: model:ir.model,name:account.model_account_common_report msgid "Account Common Report" -msgstr "" +msgstr "总帐报表" #. module: account #: model:process.transition,name:account.process_transition_filestatement0 msgid "Automatic import of the bank sta" -msgstr "" +msgstr "银行自动记帐入口" #. module: account #: model:ir.actions.act_window,name:account.action_account_journal_view #: model:ir.ui.menu,name:account.menu_action_account_journal_view msgid "Journal Views" -msgstr "" +msgstr "点击明细" #. module: account #: model:ir.model,name:account.model_account_move_bank_reconcile msgid "Move bank reconcile" -msgstr "" +msgstr "核销移动银行" #. module: account #: model:ir.actions.act_window,name:account.action_account_type_form @@ -7524,12 +7524,12 @@ msgstr "应收款科目" #. module: account #: view:account.bank.statement:0 msgid "CashBox Balance" -msgstr "" +msgstr "出纳平衡" #. module: account #: model:ir.model,name:account.model_account_fiscalyear_close_state msgid "Fiscalyear Close state" -msgstr "" +msgstr "关闭一个会计年度" #. module: account #: field:account.invoice.refund,journal_id:0 @@ -7544,7 +7544,7 @@ msgstr "退款(开红字发票)业务类型" #: report:account.general.ledger_landscape:0 #: report:account.partner.balance:0 msgid "Filter By" -msgstr "" +msgstr "过滤" #. module: account #: model:ir.actions.act_window,help:account.action_invoice_tree1 @@ -7560,7 +7560,7 @@ msgstr "" #: view:board.board:0 #: model:ir.actions.act_window,name:account.action_company_analysis_tree msgid "Company Analysis" -msgstr "" +msgstr "公司分析" #. module: account #: help:account.invoice,account_id:0 @@ -7594,12 +7594,12 @@ msgstr "" #. module: account #: field:account.invoice.line,price_subtotal:0 msgid "Subtotal" -msgstr "" +msgstr "小计" #. module: account #: view:account.vat.declaration:0 msgid "Print Tax Statement" -msgstr "" +msgstr "打印税单" #. module: account #: view:account.model.line:0 @@ -7619,7 +7619,7 @@ msgstr "到期日期" #: model:ir.ui.menu,name:account.menu_account_supplier #: model:ir.ui.menu,name:account.menu_finance_payables msgid "Suppliers" -msgstr "" +msgstr "供应商列表" #. module: account #: constraint:account.move:0 @@ -7647,12 +7647,12 @@ msgstr "" #. module: account #: view:account.payment.term.line:0 msgid " valuation: balance" -msgstr "" +msgstr " 估价平衡" #. module: account #: view:account.tax.code:0 msgid "Statistics" -msgstr "" +msgstr "统计" #. module: account #: field:account.analytic.chart,from_date:0 @@ -7663,17 +7663,17 @@ msgstr "从" #. module: account #: model:ir.model,name:account.model_account_fiscalyear_close msgid "Fiscalyear Close" -msgstr "" +msgstr "结束一个会计年度" #. module: account #: sql_constraint:account.account:0 msgid "The code of the account must be unique per company !" -msgstr "" +msgstr "该帐户的代码,每家公司必须是唯一的!" #. module: account #: model:ir.actions.act_window,name:account.act_account_journal_2_account_invoice_opened msgid "Unpaid Invoices" -msgstr "" +msgstr "未支付的发票" #. module: account #: field:account.move.line.reconcile,debit:0 @@ -7684,7 +7684,7 @@ msgstr "借方金额" #: view:board.board:0 #: model:ir.actions.act_window,name:account.action_treasory_graph msgid "Treasury" -msgstr "" +msgstr "资金" #. module: account #: view:account.aged.trial.balance:0 @@ -7707,12 +7707,12 @@ msgstr "允许科目(留空为不限制)" #: model:ir.actions.act_window,name:account.action_account_analytic_chart #: model:ir.ui.menu,name:account.menu_action_analytic_account_tree2 msgid "Chart of Analytic Accounts" -msgstr "" +msgstr "图表分析科目" #. module: account #: model:ir.ui.menu,name:account.menu_configuration_misc msgid "Miscellaneous" -msgstr "" +msgstr "杂项" #. module: account #: help:res.partner,debit:0 @@ -7723,7 +7723,7 @@ msgstr "欠供应商金额合计" #: model:process.node,name:account.process_node_analytic0 #: model:process.node,name:account.process_node_analyticcost0 msgid "Analytic Costs" -msgstr "" +msgstr "成本分析" #. module: account #: field:account.analytic.journal,name:0 @@ -7744,7 +7744,7 @@ msgstr "发票创建时自动计算出唯一的发票编号" msgid "" "The amount of the voucher must be the same amount as the one on the " "statement line" -msgstr "" +msgstr "凭证金额必须和对账单明细上的金额一致" #. module: account #: code:addons/account/account_move_line.py:1137 @@ -7756,7 +7756,7 @@ msgstr "无效科目!" #. module: account #: help:account.chart,fiscalyear:0 msgid "Keep empty for all open fiscal years" -msgstr "" +msgstr "保留空为打开所有的会计年度" #. module: account #: code:addons/account/account_move_line.py:1062 @@ -7803,12 +7803,12 @@ msgstr "外币" #: help:account.bank.statement.line,sequence:0 msgid "" "Gives the sequence order when displaying a list of bank statement lines." -msgstr "" +msgstr "按银行对帐单顺序显示项。" #. module: account #: model:process.transition,note:account.process_transition_validentries0 msgid "Accountant validates the accounting entries coming from the invoice." -msgstr "" +msgstr "从发票会计师核对会计分录。" #. module: account #: model:ir.actions.act_window,help:account.action_account_fiscalyear_form @@ -7853,19 +7853,19 @@ msgstr "强制会计期间" #. module: account #: model:ir.model,name:account.model_account_partner_balance msgid "Print Account Partner Balance" -msgstr "" +msgstr "打印合作伙伴科目平衡表" #. module: account #: field:res.partner,contract_ids:0 msgid "Contracts" -msgstr "" +msgstr "合同列表" #. module: account #: field:account.cashbox.line,ending_id:0 #: field:account.cashbox.line,starting_id:0 #: field:account.entries.report,reconcile_id:0 msgid "unknown" -msgstr "" +msgstr "未知的" #. module: account #: field:account.fiscalyear.close,journal_id:0 @@ -7883,7 +7883,7 @@ msgid "" "This Account is used for transferring Profit/Loss(If It is Profit: Amount " "will be added, Loss: Amount will be deducted.), Which is calculated from " "Profilt & Loss Report" -msgstr "" +msgstr "发票草案的检查,验证和打印。" #. module: account #: field:account.invoice,reference_type:0 @@ -7893,7 +7893,7 @@ msgstr "关联类型" #. module: account #: view:account.analytic.cost.ledger.journal.report:0 msgid "Cost Ledger for period" -msgstr "" +msgstr "用于此期间的成本分类帐" #. module: account #: help:account.tax,child_depend:0 @@ -7906,7 +7906,7 @@ msgstr "如果税计算是基于子税而不是总金额, 设置它" #. module: account #: selection:account.tax,applicable_type:0 msgid "Given by Python Code" -msgstr "" +msgstr "基于PYTHON代码" #. module: account #: field:account.analytic.journal,code:0 @@ -7926,7 +7926,7 @@ msgstr "" #: field:account.move.line,amount_residual:0 #: field:account.move.line,amount_residual_currency:0 msgid "Residual Amount" -msgstr "" +msgstr "剩余数量" #. module: account #: field:account.invoice,move_lines:0 @@ -7957,7 +7957,7 @@ msgstr "会计期间从" #: code:addons/account/installer.py:476 #, python-format msgid "Sales Refund Journal" -msgstr "" +msgstr "销售退款明细" #. module: account #: code:addons/account/account.py:941 @@ -7977,17 +7977,17 @@ msgstr "信息" #. module: account #: model:process.node,note:account.process_node_bankstatement0 msgid "Registered payment" -msgstr "" +msgstr "注册支付" #. module: account #: view:account.fiscalyear.close.state:0 msgid "Close states of Fiscal year and periods" -msgstr "" +msgstr "会计期间为关闭状态" #. module: account #: view:account.analytic.line:0 msgid "Product Information" -msgstr "" +msgstr "产品信息" #. module: account #: report:account.analytic.account.journal:0 @@ -8006,13 +8006,13 @@ msgstr "创建发票" #. module: account #: field:account.installer,purchase_tax:0 msgid "Purchase Tax(%)" -msgstr "" +msgstr "进项税(%)" #. module: account #: code:addons/account/invoice.py:795 #, python-format msgid "Please create some invoice lines." -msgstr "" +msgstr "请创建一些发票行。" #. module: account #: report:account.overdue:0 @@ -8022,7 +8022,7 @@ msgstr "尊敬的先生/女士" #. module: account #: view:account.installer.modules:0 msgid "Configure Your Accounting Application" -msgstr "" +msgstr "配置您的会计设置" #. module: account #: code:addons/account/account.py:2864 @@ -8070,13 +8070,13 @@ msgstr "" #: report:account.third_party_ledger_other:0 #: report:account.vat.declaration:0 msgid "Start Period" -msgstr "" +msgstr "开始期间" #. module: account #: code:addons/account/account.py:2357 #, python-format msgid "Cannot locate parent code for template account!" -msgstr "" +msgstr "无法找到上一级科目" #. module: account #: field:account.aged.trial.balance,direction_selection:0 @@ -8125,7 +8125,7 @@ msgstr "最好的祝愿" #. module: account #: view:account.invoice:0 msgid "Unpaid" -msgstr "" +msgstr "未付" #. module: account #: report:account.overdue:0 @@ -8135,13 +8135,13 @@ msgstr "文档:客户科目报表" #. module: account #: constraint:account.move.line:0 msgid "You can not create move line on view account." -msgstr "" +msgstr "您不能查看帐户上移动路线" #. module: account #: code:addons/account/wizard/account_change_currency.py:70 #, python-format msgid "Current currency is not confirured properly !" -msgstr "" +msgstr "当前的货币配置不正确" #. module: account #: code:addons/account/account.py:952 @@ -8171,12 +8171,12 @@ msgstr "错误" #. module: account #: view:account.account.template:0 msgid "Receivale Accounts" -msgstr "" +msgstr "应收账款" #. module: account #: selection:account.account.type,report_type:0 msgid "Profit & Loss (Income Accounts)" -msgstr "" +msgstr "损益表(利润科目)" #. module: account #: view:account.tax:0 @@ -8213,13 +8213,13 @@ msgstr "余额" #. module: account #: model:process.node,note:account.process_node_supplierbankstatement0 msgid "Manually or automatically entered in the system" -msgstr "" +msgstr "手动或自动输入系统" #. module: account #: report:account.account.balance:0 #: report:account.general.ledger_landscape:0 msgid "Display Account" -msgstr "" +msgstr "显示科目" #. module: account #: report:account.tax.code.entries:0 @@ -8229,12 +8229,12 @@ msgstr "(" #. module: account #: selection:account.invoice.refund,filter_refund:0 msgid "Modify" -msgstr "" +msgstr "修改" #. module: account #: view:account.account.type:0 msgid "Closing Method" -msgstr "" +msgstr "关闭方法" #. module: account #: model:ir.actions.act_window,help:account.action_account_partner_balance @@ -8255,7 +8255,7 @@ msgstr "应付的" #: view:report.account_type.sales:0 #: view:report.hr.timesheet.invoice.journal:0 msgid "This Year" -msgstr "" +msgstr "本年" #. module: account #: view:board.board:0 @@ -8282,7 +8282,7 @@ msgstr "" #: code:addons/account/account_bank_statement.py:391 #, python-format msgid "Cannot delete bank statement(s) which are already confirmed !" -msgstr "" +msgstr "无法删除已经向银行提交的报表" #. module: account #: code:addons/account/wizard/account_automatic_reconcile.py:152 @@ -8317,13 +8317,13 @@ msgstr "" #: report:account.third_party_ledger:0 #: report:account.third_party_ledger_other:0 msgid "Filters By" -msgstr "" +msgstr "通过过滤器" #. module: account #: model:process.node,note:account.process_node_manually0 #: model:process.transition,name:account.process_transition_invoicemanually0 msgid "Manual entry" -msgstr "" +msgstr "手工录入" #. module: account #: report:account.general.ledger:0 @@ -8354,7 +8354,7 @@ msgstr "银行对账单" #: help:account.addtmpl.wizard,cparent_id:0 msgid "" "Creates an account with the selected template under this existing parent." -msgstr "" +msgstr "根据现在选定的模板创建一个科目表." #. module: account #: selection:account.model.line,date_maturity:0 @@ -8377,7 +8377,7 @@ msgstr "核销交易" #. module: account #: model:ir.actions.act_window,name:account.action_account_common_menu msgid "Common Report" -msgstr "" +msgstr "合并报告" #. module: account #: view:account.account:0 @@ -8398,7 +8398,7 @@ msgstr "" #: model:process.transition,name:account.process_transition_paymentorderbank0 #: model:process.transition,name:account.process_transition_paymentreconcile0 msgid "Payment entries" -msgstr "" +msgstr "付款项" #. module: account #: selection:account.entries.report,month:0 @@ -8407,7 +8407,7 @@ msgstr "" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "July" -msgstr "" +msgstr "7月" #. module: account #: view:account.account:0 @@ -8422,7 +8422,7 @@ msgstr "周期性凭证" #. module: account #: model:ir.model,name:account.model_account_analytic_balance msgid "Account Analytic Balance" -msgstr "" +msgstr "分析科目平衡" #. module: account #: report:account.account.balance:0 @@ -8436,7 +8436,7 @@ msgstr "" #: report:account.third_party_ledger_other:0 #: report:account.vat.declaration:0 msgid "End Period" -msgstr "" +msgstr "结束期间" #. module: account #: field:account.aged.trial.balance,chart_account_id:0 @@ -8455,12 +8455,12 @@ msgstr "" #: field:account.report.general.ledger,chart_account_id:0 #: field:account.vat.declaration,chart_account_id:0 msgid "Chart of account" -msgstr "" +msgstr "会计科目表" #. module: account #: field:account.move.line,date_maturity:0 msgid "Due date" -msgstr "" +msgstr "到期日期" #. module: account #: view:account.move.journal:0 @@ -8562,12 +8562,12 @@ msgstr "未决" #: model:process.transition,name:account.process_transition_analyticinvoice0 #: model:process.transition,name:account.process_transition_supplieranalyticcost0 msgid "From analytic accounts" -msgstr "" +msgstr "从科目分析" #. module: account #: field:account.installer.modules,account_payment:0 msgid "Suppliers Payment Management" -msgstr "" +msgstr "供应商付款管理" #. module: account #: field:account.period,name:0 @@ -8592,7 +8592,7 @@ msgstr "启用" #: code:addons/account/invoice.py:353 #, python-format msgid "Unknown Error" -msgstr "" +msgstr "未知的错误" #. module: account #: code:addons/account/account.py:1181 @@ -8625,7 +8625,7 @@ msgstr "外币" #. module: account #: model:ir.model,name:account.model_validate_account_move msgid "Validate Account Move" -msgstr "" +msgstr "使科目移动生效" #. module: account #: field:account.account,credit:0 @@ -8663,12 +8663,12 @@ msgstr "" #: view:account.general.journal:0 #: model:ir.ui.menu,name:account.menu_account_general_journal msgid "General Journals" -msgstr "" +msgstr "一般明细" #. module: account #: view:account.model:0 msgid "Journal Entry Model" -msgstr "" +msgstr "基础明细" #. module: account #: code:addons/account/wizard/account_use_model.py:44 @@ -8728,7 +8728,7 @@ msgstr "会计期间" #. module: account #: field:account.invoice.report,currency_rate:0 msgid "Currency Rate" -msgstr "" +msgstr "汇率" #. module: account #: help:account.payment.term.line,value_amount:0 @@ -8742,12 +8742,12 @@ msgstr "输入的值是百分比,范围在0和1之间。" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "April" -msgstr "" +msgstr "4月" #. module: account #: view:account.move.line.reconcile.select:0 msgid "Open for Reconciliation" -msgstr "" +msgstr "打开核销" #. module: account #: field:account.account,parent_left:0 @@ -8926,7 +8926,7 @@ msgstr "税源自" #: code:addons/account/report/account_profit_loss.py:127 #, python-format msgid "Net Profit" -msgstr "" +msgstr "净利润" #. module: account #: view:ir.sequence:0 @@ -8942,7 +8942,7 @@ msgstr "这是一个循环凭证模型" #: code:addons/account/account_analytic_line.py:99 #, python-format msgid "There is no income account defined for this product: \"%s\" (id:%d)" -msgstr "" +msgstr "没有为此产品定义收入类科目: \\\"%s\\\" (id:%d)" #. module: account #: report:account.general.ledger:0 @@ -9022,12 +9022,12 @@ msgstr "" #. module: account #: field:account.entries.report,date_maturity:0 msgid "Date Maturity" -msgstr "" +msgstr "到期日" #. module: account #: help:account.bank.statement,total_entry_encoding:0 msgid "Total cash transactions" -msgstr "" +msgstr "现金交易总额" #. module: account #: help:account.partner.reconcile.process,today_reconciled:0 @@ -9045,12 +9045,12 @@ msgstr "创建月度会计期间" #. module: account #: field:account.tax.code.template,sign:0 msgid "Sign For Parent" -msgstr "" +msgstr "登记上级" #. module: account #: model:ir.model,name:account.model_account_balance_report msgid "Trial Balance Report" -msgstr "" +msgstr "试算平衡表表" #. module: account #: model:ir.actions.act_window,name:account.action_bank_statement_draft_tree @@ -9086,7 +9086,7 @@ msgstr "发票行" #: field:account.report.general.ledger,period_to:0 #: field:account.vat.declaration,period_to:0 msgid "End period" -msgstr "" +msgstr "期末" #. module: account #: code:addons/account/account_move_line.py:729 @@ -9123,17 +9123,17 @@ msgstr "已关闭" #. module: account #: model:process.node,note:account.process_node_paidinvoice0 msgid "Invoice's state is Done" -msgstr "" +msgstr "发票的状态已完成" #. module: account #: model:ir.model,name:account.model_report_account_sales msgid "Report of the Sales by Account" -msgstr "" +msgstr "销售科目的报表" #. module: account #: model:ir.model,name:account.model_account_fiscal_position_account msgid "Accounts Fiscal Position" -msgstr "" +msgstr "帐户会计状态" #. module: account #: report:account.invoice:0 @@ -9177,12 +9177,12 @@ msgstr "发票行" #. module: account #: constraint:account.account.template:0 msgid "Error ! You can not create recursive account templates." -msgstr "" +msgstr "错误!您不能创建循环科目模板。" #. module: account #: view:account.subscription:0 msgid "Recurring" -msgstr "" +msgstr "经常性单据" #. module: account #: code:addons/account/account_move_line.py:796 @@ -9246,7 +9246,7 @@ msgstr "手动" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "December" -msgstr "" +msgstr "12月" #. module: account #: model:ir.actions.act_window,name:account.action_account_analytic_journal_tree @@ -9268,7 +9268,7 @@ msgstr "旧的应收款" #. module: account #: field:account.tax,applicable_type:0 msgid "Applicability" -msgstr "" +msgstr "有效性" #. module: account #: code:addons/account/wizard/account_move_journal.py:165 @@ -9348,7 +9348,7 @@ msgstr "" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "November" -msgstr "" +msgstr "11月" #. module: account #: model:ir.model,name:account.model_account_installer_modules @@ -9364,7 +9364,7 @@ msgstr "和选择的产品相关的收入或费用科目" #: code:addons/account/account_move_line.py:1123 #, python-format msgid "The date of your Journal Entry is not in the defined period!" -msgstr "" +msgstr "你的凭证日期不是在指定的会计期间!" #. module: account #: field:account.subscription,period_total:0 @@ -9380,7 +9380,7 @@ msgstr "一般业务类型" #. module: account #: view:account.invoice:0 msgid "Search Invoice" -msgstr "" +msgstr "搜索发票" #. module: account #: report:account.invoice:0 @@ -9414,12 +9414,12 @@ msgstr "普通信息" #: view:account.move:0 #: view:account.move.line:0 msgid "Accounting Documents" -msgstr "" +msgstr "会计凭证" #. module: account #: model:ir.model,name:account.model_validate_account_move_lines msgid "Validate Account Move Lines" -msgstr "" +msgstr "确认科目移动项" #. module: account #: model:ir.actions.act_window,name:account.action_account_analytic_cost_ledger_journal @@ -9430,17 +9430,17 @@ msgstr "成本分类账(只有数量)" #. module: account #: model:process.node,note:account.process_node_supplierpaidinvoice0 msgid "Invoice's state is Done." -msgstr "" +msgstr "已开票" #. module: account #: model:process.transition,note:account.process_transition_reconcilepaid0 msgid "As soon as the reconciliation is done, the invoice can be paid." -msgstr "" +msgstr "一旦发票完成核对可以支付。" #. module: account #: view:account.account.template:0 msgid "Search Account Templates" -msgstr "" +msgstr "搜索科目模板" #. module: account #: view:account.invoice.tax:0 @@ -9455,7 +9455,7 @@ msgstr "上级右" #. module: account #: model:ir.model,name:account.model_account_addtmpl_wizard msgid "account.addtmpl.wizard" -msgstr "" +msgstr "增加其他会计核算向导" #. module: account #: field:account.aged.trial.balance,result_selection:0 @@ -9466,7 +9466,7 @@ msgstr "" #: report:account.third_party_ledger:0 #: report:account.third_party_ledger_other:0 msgid "Partner's" -msgstr "" +msgstr "合作伙伴列表" #. module: account #: model:ir.actions.act_window,name:account.action_account_fiscalyear_form @@ -9500,7 +9500,7 @@ msgstr "科目模型" #: selection:report.account.sales,month:0 #: selection:report.account_type.sales,month:0 msgid "February" -msgstr "" +msgstr "2月" #. module: account #: field:account.bank.accounts.wizard,bank_account_id:0 @@ -9515,7 +9515,7 @@ msgstr "银行账号" #: model:ir.actions.act_window,name:account.action_account_central_journal #: model:ir.model,name:account.model_account_central_journal msgid "Account Central Journal" -msgstr "" +msgstr "总帐科目明细" #. module: account #: report:account.overdue:0 diff --git a/addons/base_iban/i18n/zh_CN.po b/addons/base_iban/i18n/zh_CN.po index 1d0a3dce15f..8c857d24c71 100644 --- a/addons/base_iban/i18n/zh_CN.po +++ b/addons/base_iban/i18n/zh_CN.po @@ -7,19 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: Black Jack \n" +"PO-Revision-Date: 2011-07-07 17:43+0000\n" +"Last-Translator: Joshua Jan \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-01-25 06:30+0000\n" -"X-Generator: Launchpad (build 12177)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: base_iban #: model:ir.module.module,shortdesc:base_iban.module_meta_information msgid "Create IBAN bank accounts" -msgstr "" +msgstr "Create IBAN bank accounts" #. module: base_iban #: code:addons/base_iban/base_iban.py:120 @@ -27,7 +27,7 @@ msgstr "" msgid "" "The IBAN does not seems to be correct. You should have entered something " "like this %s" -msgstr "" +msgstr "这个IBAN似乎是错误的。你应该输入类似这样的%s" #. module: base_iban #: model:res.partner.bank.type.field,name:base_iban.bank_zip_field @@ -37,12 +37,12 @@ msgstr "邮政编码" #. module: base_iban #: help:res.partner.bank,iban:0 msgid "International Bank Account Number" -msgstr "银行帐号" +msgstr "国际银行帐户号码" #. module: base_iban #: model:ir.model,name:base_iban.model_res_partner_bank msgid "Bank Accounts" -msgstr "" +msgstr "银行账户" #. module: base_iban #: model:res.partner.bank.type.field,name:base_iban.bank_country_field @@ -52,7 +52,7 @@ msgstr "country_id" #. module: base_iban #: model:res.partner.bank.type.field,name:base_iban.bank_swift_field msgid "bic" -msgstr "银行识别码(BIC)" +msgstr "bic" #. module: base_iban #: model:res.partner.bank.type.field,name:base_iban.bank_iban_field @@ -63,12 +63,12 @@ msgstr "国际银行帐号(IBAN)" #: code:addons/base_iban/base_iban.py:121 #, python-format msgid "The IBAN is invalid, It should begin with the country code" -msgstr "" +msgstr "这个IBAN是无效的,应该以国家代码作为开头" #. module: base_iban #: field:res.partner.bank,iban:0 msgid "IBAN" -msgstr "国际银行帐号(IBAN)" +msgstr "IBAN" #. module: base_iban #: model:res.partner.bank.type,name:base_iban.bank_iban @@ -84,6 +84,10 @@ msgid "" "\n" " " msgstr "" +"\n" +"这个是安装是IBAN(国际银行帐户号码)并检查其有效性的基础模块\n" +"\n" +" " #. module: base_iban #: model:res.partner.bank.type.field,name:base_iban.bank_acc_number_field diff --git a/addons/base_module_quality/i18n/fi.po b/addons/base_module_quality/i18n/fi.po index 9a938e4170e..e2b630e14ee 100644 --- a/addons/base_module_quality/i18n/fi.po +++ b/addons/base_module_quality/i18n/fi.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2011-06-14 05:58+0000\n" +"PO-Revision-Date: 2011-07-06 05:57+0000\n" "Last-Translator: Juha Kotamäki \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-06-15 05:49+0000\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: base_module_quality @@ -35,7 +35,7 @@ msgstr "Ohjelmointivirhe" #: code:addons/base_module_quality/method_test/method_test.py:31 #, python-format msgid "Method Test" -msgstr "" +msgstr "Metodi testi" #. module: base_module_quality #: model:ir.module.module,shortdesc:base_module_quality.module_meta_information @@ -56,7 +56,7 @@ msgstr "" #: code:addons/base_module_quality/speed_test/speed_test.py:127 #, python-format msgid "O(n) or worst" -msgstr "" +msgstr "0(n) tai huonoin" #. module: base_module_quality #: selection:module.quality.detail,state:0 @@ -100,7 +100,7 @@ msgstr "Objektin nimi" #: code:addons/base_module_quality/method_test/method_test.py:68 #, python-format msgid "Ok" -msgstr "" +msgstr "OK" #. module: base_module_quality #: code:addons/base_module_quality/terp_test/terp_test.py:34 @@ -143,7 +143,7 @@ msgstr "Tulos (/10)" #: code:addons/base_module_quality/terp_test/terp_test.py:33 #, python-format msgid "Terp Test" -msgstr "" +msgstr "Terp testi" #. module: base_module_quality #: code:addons/base_module_quality/object_test/object_test.py:33 @@ -191,7 +191,7 @@ msgstr "Lukemisen monimutkaisuus" #: code:addons/base_module_quality/pep8_test/pep8_test.py:267 #, python-format msgid "Result of pep8_test in %" -msgstr "" +msgstr "pep8_test tulos %" #. module: base_module_quality #: field:module.quality.detail,state:0 @@ -240,7 +240,7 @@ msgstr "Tulos (/1)" #: code:addons/base_module_quality/speed_test/speed_test.py:151 #, python-format msgid "N (Number of Records)" -msgstr "" +msgstr "N (tietueiden määrä)" #. module: base_module_quality #: code:addons/base_module_quality/speed_test/speed_test.py:133 @@ -265,6 +265,9 @@ msgid "" "This test checks where object has workflow or not on it if there is a state " "field and several buttons on it and also checks validity of workflow xml file" msgstr "" +"Tämä testi tarkistaa onko objektilla työnkulkua vai ei jos objektilla on " +"tilakenttä ja useita nappeja sekä tarkistaa myös työnkulun xml tiedoston " +"kelpoisuuden." #. module: base_module_quality #: code:addons/base_module_quality/structure_test/structure_test.py:151 @@ -362,6 +365,8 @@ msgid "" "\n" "This test checks if the module satisfy tiny structure\n" msgstr "" +"\n" +"Testi tarkistaa täyttääkö moduuli tiny -rakenteen vaatimukset\n" #. module: base_module_quality #: code:addons/base_module_quality/structure_test/structure_test.py:151 @@ -407,7 +412,7 @@ msgstr "Poikkeus" #: code:addons/base_module_quality/base_module_quality.py:100 #, python-format msgid "Test Is Not Implemented" -msgstr "" +msgstr "Testiä ei ole toteutettu" #. module: base_module_quality #: code:addons/base_module_quality/speed_test/speed_test.py:151 @@ -433,6 +438,8 @@ msgid "" "Given module has no objects.Speed test can work only when new objects are " "created in the module along with demo data" msgstr "" +"Annetulla moduulilla ei ole objekteja. Nopeustesti voi toimia vain jos uusia " +"objekteja on luotu moduuliin demo tietojen kanssa." #. module: base_module_quality #: code:addons/base_module_quality/pylint_test/pylint_test.py:32 @@ -442,6 +449,9 @@ msgid "" "of Python. See http://www.logilab.org/project/name/pylint for further info.\n" " " msgstr "" +"Tämä testi käyttää Pylint:iä ja tarkistaa täyttääkö moduuli Python koodaus " +"standardit.\n" +" " #. module: base_module_quality #: code:addons/base_module_quality/workflow_test/workflow_test.py:143 @@ -520,6 +530,9 @@ msgid "" "This test checks if the module classes are raising exception when calling " "basic methods or not.\n" msgstr "" +"\n" +"Testi tarkistaa suorittavatko moduulien luokat keskeytyksen kun kutsutaan " +"peru metodeita vai ei.\n" #. module: base_module_quality #: field:module.quality.detail,detail:0 diff --git a/addons/base_report_creator/i18n/zh_CN.po b/addons/base_report_creator/i18n/zh_CN.po index a7ec9907d51..9841bd4344e 100644 --- a/addons/base_report_creator/i18n/zh_CN.po +++ b/addons/base_report_creator/i18n/zh_CN.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: ZhangCheng \n" +"PO-Revision-Date: 2011-07-07 18:05+0000\n" +"Last-Translator: Joshua Jan \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:23+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: base_report_creator #: help:base_report_creator.report.filter,expression:0 @@ -300,7 +300,7 @@ msgstr "一般设置" #. module: base_report_creator #: help:base_report_creator.report.fields,sequence:0 msgid "Gives the sequence order when displaying a list of fields." -msgstr "" +msgstr "给出了顺序来显示字段列表" #. module: base_report_creator #: wizard_view:base_report_creator.report_filter.fields,init:0 @@ -379,7 +379,7 @@ msgstr "取消" #. module: base_report_creator #: constraint:base_report_creator.report:0 msgid "You can apply aggregate function to the non calculated field." -msgstr "" +msgstr "你只能添加聚合函数到没有计算的字段上" #. module: base_report_creator #: field:base_report_creator.report,menu_id:0 @@ -446,7 +446,7 @@ msgstr "平均" #. module: base_report_creator #: view:base_report_creator.report:0 msgid "Use %(uid)s to filter by the connected user" -msgstr "" +msgstr "使用%(uid)s去过滤连接的用户" #. module: base_report_creator #: selection:base_report_creator.report.fields,group_method:0 @@ -515,3 +515,8 @@ msgid "" "After installing the module, it adds a menu to define custom report in\n" "the \"Dashboard\" menu.\n" msgstr "" +"这个模块允许你创建基于几个对象的统计报表.\n" +"是一个SQL查询生成器和用户的浏览器。\n" +"\n" +"当安装这个模块后,它会增加一个用于定义客户报表的菜单到\n" +"“控制台”的菜单上\n" diff --git a/addons/base_setup/i18n/fr.po b/addons/base_setup/i18n/fr.po index 60f693a636e..42a64a621f0 100644 --- a/addons/base_setup/i18n/fr.po +++ b/addons/base_setup/i18n/fr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: Quentin THEURET \n" +"PO-Revision-Date: 2011-07-07 19:57+0000\n" +"Last-Translator: Quentin THEURET \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:23+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: base_setup #: field:base.setup.company,city:0 @@ -291,6 +291,9 @@ msgid "" "\t\tLogin : %s \n" "\t\tPassword : %s" msgstr "" +" - %s :\n" +"\t\tNom d'utilisateur : %s \n" +"\t\tMot de passe : %s" #. module: base_setup #: help:base.setup.installer,purchase:0 @@ -543,6 +546,8 @@ msgid "" " - %s :\n" "\t\tLogin : %s" msgstr "" +" - %s :\n" +"\t\tNom d'utilisateur : %s" #. module: base_setup #: help:base.setup.installer,stock:0 diff --git a/addons/base_setup/i18n/zh_CN.po b/addons/base_setup/i18n/zh_CN.po index 570e1da3480..3f84d5eb6b3 100644 --- a/addons/base_setup/i18n/zh_CN.po +++ b/addons/base_setup/i18n/zh_CN.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-07-03 09:26+0000\n" +"PO-Revision-Date: 2011-07-06 18:18+0000\n" "Last-Translator: Joshua Jan \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-07-04 05:07+0000\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: base_setup @@ -336,13 +336,13 @@ msgstr "让您安装附加的模块使您可以与您的雇员分享知识。" msgid "" "Select the Applications you want your system to cover. If you are not sure " "about your exact needs at this stage, you can easily install them later." -msgstr "" +msgstr "选择你的系统所包含的应用程序,如果你当前还不确定。以后你可以很容易地再安装它们" #. module: base_setup #: view:base.setup.company:0 #: model:ir.actions.act_window,name:base_setup.action_base_setup_company msgid "Company Configuration" -msgstr "单位配置" +msgstr "公司配置" #. module: base_setup #: field:base.setup.company,logo:0 @@ -402,7 +402,7 @@ msgstr "客户关系管理" msgid "" "Installs a preselected set of OpenERP applications selected to help you " "manage your auctions as well as the business processes around them." -msgstr "" +msgstr "安装这个OpenERP的预选模块帮助你管理拍卖以及相关的业务流程" #. module: base_setup #: help:base.setup.company,rml_header1:0 @@ -497,6 +497,8 @@ msgid "" " - %s :\n" "\t\tLogin : %s" msgstr "" +" - %s :\n" +"\t\t登陆: %s" #. module: base_setup #: help:base.setup.installer,stock:0 @@ -515,7 +517,7 @@ msgstr "基础安装" msgid "" "Installs a preselected set of OpenERP applications which will help you " "manage your association more efficiently." -msgstr "" +msgstr "安装这个OpenERP的预选模块帮助你更有效率地管理协会" #. module: base_setup #: model:ir.model,name:base_setup.model_base_setup_config diff --git a/addons/base_synchro/i18n/vi.po b/addons/base_synchro/i18n/vi.po index b27a4889640..cc3eb90e0c9 100644 --- a/addons/base_synchro/i18n/vi.po +++ b/addons/base_synchro/i18n/vi.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-07-06 05:17+0000\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: base_synchro diff --git a/addons/caldav/i18n/fr.po b/addons/caldav/i18n/fr.po index eefa5bef136..2ed051ccc38 100644 --- a/addons/caldav/i18n/fr.po +++ b/addons/caldav/i18n/fr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: Quentin THEURET \n" +"PO-Revision-Date: 2011-07-07 20:05+0000\n" +"Last-Translator: Quentin THEURET \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:24+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: caldav #: view:basic.calendar:0 @@ -965,7 +965,7 @@ msgstr "Commande" #. module: caldav #: selection:basic.calendar.fields,fn:0 msgid "Datetime In UTC" -msgstr "" +msgstr "Heure et Date au format UTC" #. module: caldav #: field:basic.calendar,calendar_color:0 diff --git a/addons/crm/i18n/it.po b/addons/crm/i18n/it.po index 789d1740f39..e6e077b56a3 100644 --- a/addons/crm/i18n/it.po +++ b/addons/crm/i18n/it.po @@ -7,26 +7,27 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-03-18 13:18+0000\n" -"Last-Translator: Mario Riva - Domsense \n" +"PO-Revision-Date: 2011-07-06 12:20+0000\n" +"Last-Translator: Leonardo Pistone - Agile BG - Domsense " +"\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:25+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: crm #: view:crm.lead.report:0 msgid "# Leads" -msgstr "# Iniziative" +msgstr "# Lead" #. module: crm #: view:crm.lead:0 #: selection:crm.lead,type:0 #: selection:crm.lead.report,type:0 msgid "Lead" -msgstr "Iniziativa" +msgstr "Lead" #. module: crm #: model:crm.case.categ,name:crm.categ_oppor3 @@ -127,13 +128,13 @@ msgstr "Il codice del team di vendita deve essere unico!" #: code:addons/crm/wizard/crm_lead_to_opportunity.py:95 #, python-format msgid "Lead '%s' has been converted to an opportunity." -msgstr "Lead '%s' è stato convertito in una opportunità." +msgstr "Il lead '%s' è stato convertito in una opportunità." #. module: crm #: code:addons/crm/crm_lead.py:228 #, python-format msgid "The lead '%s' has been closed." -msgstr "L'iniziativa \"%s\" è stata chiusa." +msgstr "Il lead '%s' è stato chiuso." #. module: crm #: selection:crm.meeting,freq:0 @@ -272,10 +273,10 @@ msgid "" "sort out your leads analysis by different groups to get accurate grained " "analysis." msgstr "" -"L'analisi delle iniziative permette di verificare differenti informazioni " -"relative al CRM. Controllo per trattamento ritardi, numero di risposte " -"fornite e mail inviate. E' possibile ordinare l'analisi iniziative con " -"differenti raggruppamenti per avere una accurata e granulare analisi" +"L'analisi dei lead permette di verificare varie informazioni relative al " +"CRM, come i ritardi di gestione, il numero di risposte e di mail inviate. È " +"possibile disporre i dati in raggruppamenti diversi per un'analisi accurata " +"e granulare." #. module: crm #: view:crm.lead:0 @@ -307,7 +308,7 @@ msgstr "_Unisci" #: model:ir.actions.act_window,name:crm.action_report_crm_lead #: model:ir.ui.menu,name:crm.menu_report_crm_leads_tree msgid "Leads Analysis" -msgstr "Analisi iniziative" +msgstr "Analisi dei lead" #. module: crm #: view:crm.lead2opportunity.action:0 @@ -396,7 +397,7 @@ msgstr "Espressione regolare nello storico del caso" #: code:addons/crm/crm_lead.py:209 #, python-format msgid "The lead '%s' has been opened." -msgstr "L'iniziativa \"%s\" è stata aperta." +msgstr "Il lead '%s' è stato aperto." #. module: crm #: model:process.transition,name:crm.process_transition_opportunitymeeting0 @@ -423,7 +424,7 @@ msgstr "Raccola fondi" #: view:res.partner:0 #: field:res.partner,opportunity_ids:0 msgid "Leads and Opportunities" -msgstr "Iniziative e opportunità" +msgstr "Lead e opportunità" #. module: crm #: view:crm.send.mail:0 @@ -787,7 +788,7 @@ msgstr "" #. module: crm #: view:crm.lead:0 msgid "Leads Form" -msgstr "Modulo Iniziativa" +msgstr "Modulo lead" #. module: crm #: view:crm.segmentation:0 @@ -824,7 +825,7 @@ msgstr "Probabilità (%)" #. module: crm #: view:crm.lead:0 msgid "Leads Generation" -msgstr "Generazione iniziative" +msgstr "Creazione dei lead" #. module: crm #: view:board.board:0 @@ -1850,8 +1851,7 @@ msgstr "Raggruppa per..." #: help:crm.lead,partner_id:0 msgid "Optional linked partner, usually after conversion of the lead" msgstr "" -"Partner opzionalmente collegato, di solito dopo la conversione " -"dell'iniziativa." +"Partner associato, tipicamente dopo la conversione del lead (opzionale)." #. module: crm #: view:crm.meeting:0 @@ -2181,7 +2181,7 @@ msgstr "Adwords di Google (2)" #: help:crm.lead,type:0 #: help:crm.lead.report,type:0 msgid "Type is used to separate Leads and Opportunities" -msgstr "Il tipo è utilizzato per separare Iniziative e Opportunità" +msgstr "Il tipo è utilizzato per distinguere i Lead dalle Opportunità" #. module: crm #: view:crm.phonecall2partner:0 @@ -2225,7 +2225,7 @@ msgstr "Team di vendita" #. module: crm #: model:ir.model,name:crm.model_crm_lead2partner msgid "Lead to Partner" -msgstr "Iniziativa a partner" +msgstr "Da Lead a Partner" #. module: crm #: view:crm.segmentation:0 @@ -2271,7 +2271,7 @@ msgstr "Mese" #: model:ir.ui.menu,name:crm.menu_crm_case_categ0_act_leads #: model:process.node,name:crm.process_node_leads0 msgid "Leads" -msgstr "Iniziative" +msgstr "Lead" #. module: crm #: model:ir.actions.act_window,help:crm.crm_case_category_act_leads_all @@ -2643,8 +2643,7 @@ msgstr "Massimo Storico Contatti" #: view:crm.lead2opportunity.partner:0 #: view:crm.lead2partner:0 msgid "Are you sure you want to create a partner based on this lead ?" -msgstr "" -"Si è sicuri di voler creare un partner da questo contatto privilegiato?" +msgstr "Si è sicuri di voler creare un partner da questo lead ?" #. module: crm #: view:crm.meeting:0 @@ -2716,7 +2715,7 @@ msgstr "# di email" #. module: crm #: view:crm.lead:0 msgid "Search Leads" -msgstr "Ricerca iniziative" +msgstr "Ricerca Lead" #. module: crm #: view:crm.lead.report:0 @@ -2743,7 +2742,7 @@ msgstr "" #. module: crm #: model:ir.model,name:crm.model_crm_lead2opportunity msgid "Lead To Opportunity" -msgstr "Iniziativa a Opportunità" +msgstr "Da Lead a Opportunità" #. module: crm #: model:ir.model,name:crm.model_calendar_attendee @@ -2821,7 +2820,7 @@ msgstr "Dashboard vendite" #: code:addons/crm/wizard/crm_lead_to_partner.py:56 #, python-format msgid "A partner is already defined on this lead." -msgstr "Un partner è già definito in questo contatto privilegiato" +msgstr "Un Un partner è già definito per questo lead." #. module: crm #: field:crm.lead.report,nbr:0 @@ -2940,7 +2939,7 @@ msgstr "Aggiungi nota interna" #: code:addons/crm/crm_lead.py:304 #, python-format msgid "The stage of lead '%s' has been changed to '%s'." -msgstr "Lo stadio dell'iniziativa \"%s\" è cambiato in \"%s\"" +msgstr "Lo stadio del lead \"%s\" è cambiato in \"%s\"" #. module: crm #: selection:crm.meeting,byday:0 @@ -3021,6 +3020,10 @@ msgid "" "instance reflect your product structure or the different types of sales you " "do." msgstr "" +"Crea categorie specifiche adatte alle attività della tua azienda per meglio " +"classificare e analizzare i tuoi lead e le tue opportunità. Queste categorie " +"possono riflettere ad esempio la tua struttura di prodotti o i diversi tipi " +"di vendite." #. module: crm #: help:crm.segmentation,som_interval_decrease:0 @@ -3226,7 +3229,7 @@ msgstr "Stato fed." #. module: crm #: model:process.transition,note:crm.process_transition_leadopportunity0 msgid "Creating business opportunities from Leads" -msgstr "Crea opportunità di business dall'iniziativa" +msgstr "Crea una opportunità a partire dal Lead" #. module: crm #: help:crm.send.mail,html:0 @@ -3519,7 +3522,7 @@ msgstr "" #. module: crm #: model:ir.model,name:crm.model_crm_lead_report msgid "CRM Lead Report" -msgstr "Report iniziative CRM" +msgstr "CRM Lead Report" #. module: crm #: field:crm.installer,progress:0 diff --git a/addons/crm_helpdesk/i18n/sr.po b/addons/crm_helpdesk/i18n/sr.po index df027e3912b..db02d9de034 100644 --- a/addons/crm_helpdesk/i18n/sr.po +++ b/addons/crm_helpdesk/i18n/sr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-07-06 08:44+0000\n" +"Last-Translator: Olivier Dony (OpenERP) \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:27+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: crm_helpdesk #: field:crm.helpdesk.report,delay_close:0 @@ -36,12 +36,12 @@ msgstr "Grupirano po" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Today" -msgstr "Danas" +msgstr "Данас" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "March" -msgstr "Mart" +msgstr "Март" #. module: crm_helpdesk #: field:crm.helpdesk,company_id:0 @@ -59,13 +59,13 @@ msgstr "Praceni Emailovi" #: selection:crm.helpdesk,priority:0 #: selection:crm.helpdesk.report,priority:0 msgid "Highest" -msgstr "Najvise" +msgstr "Највиши" #. module: crm_helpdesk #: view:crm.helpdesk.report:0 #: field:crm.helpdesk.report,day:0 msgid "Day" -msgstr "Dan" +msgstr "Дан" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -75,18 +75,18 @@ msgstr "Dodaj Internu Napomenu" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Notes" -msgstr "Napomene" +msgstr "Белешке" #. module: crm_helpdesk #: field:crm.helpdesk,message_ids:0 msgid "Messages" -msgstr "Poruke" +msgstr "Поруке" #. module: crm_helpdesk #: selection:crm.helpdesk,state:0 #: selection:crm.helpdesk.report,state:0 msgid "Cancelled" -msgstr "Otkazano" +msgstr "Отказано" #. module: crm_helpdesk #: field:crm.helpdesk,partner_address_id:0 @@ -128,7 +128,7 @@ msgstr "HelpDesk Podrska" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Extra Info" -msgstr "Dodatne Informacije" +msgstr "Дадатне Информације" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -136,7 +136,7 @@ msgstr "Dodatne Informacije" #: view:crm.helpdesk.report:0 #: field:crm.helpdesk.report,partner_id:0 msgid "Partner" -msgstr "Partner" +msgstr "Партнер" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -146,7 +146,7 @@ msgstr "Ocekivano" #. module: crm_helpdesk #: field:crm.helpdesk.report,section_id:0 msgid "Section" -msgstr "Sekcija" +msgstr "Секција" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -154,7 +154,7 @@ msgstr "Sekcija" #: view:crm.helpdesk.report:0 #: field:crm.helpdesk.report,priority:0 msgid "Priority" -msgstr "Prioritet" +msgstr "Приоритет" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -186,13 +186,13 @@ msgstr "Email" #: view:crm.helpdesk.report:0 #: field:crm.helpdesk.report,canal_id:0 msgid "Channel" -msgstr "Kanal" +msgstr "Канал" #. module: crm_helpdesk #: selection:crm.helpdesk,priority:0 #: selection:crm.helpdesk.report,priority:0 msgid "Lowest" -msgstr "Najnizi" +msgstr "Најнижи" #. module: crm_helpdesk #: view:crm.helpdesk.report:0 @@ -215,7 +215,7 @@ msgstr "Posalji 'U Pripremu'" #: selection:crm.helpdesk,state:0 #: selection:crm.helpdesk.report,state:0 msgid "Pending" -msgstr "NA Cekanju" +msgstr "На чекању" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -227,7 +227,7 @@ msgstr "Krajnji rok" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "July" -msgstr "Juli" +msgstr "Јул" #. module: crm_helpdesk #: model:ir.actions.act_window,name:crm_helpdesk.crm_helpdesk_categ_action @@ -237,7 +237,7 @@ msgstr "Kategorije HelpDeska" #. module: crm_helpdesk #: model:ir.ui.menu,name:crm_helpdesk.menu_crm_case_helpdesk-act msgid "Categories" -msgstr "Kategorije" +msgstr "Категорије" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -247,7 +247,7 @@ msgstr "Informacije Istorije" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Dates" -msgstr "Datumi" +msgstr "Датуми" #. module: crm_helpdesk #: view:crm.helpdesk.report:0 @@ -273,23 +273,23 @@ msgstr "" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "References" -msgstr "Reference" +msgstr "Референце" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "September" -msgstr "Septembar" +msgstr "Септембар" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Communication" -msgstr "Komunikacija" +msgstr "Комуникација" #. module: crm_helpdesk #: view:crm.helpdesk.report:0 #: field:crm.helpdesk.report,month:0 msgid "Month" -msgstr "Mesec" +msgstr "Месец" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -320,7 +320,7 @@ msgstr "Referenca 2" #: field:crm.helpdesk,categ_id:0 #: field:crm.helpdesk.report,categ_id:0 msgid "Category" -msgstr "Kategorija" +msgstr "Категорија" #. module: crm_helpdesk #: view:crm.helpdesk.report:0 @@ -358,14 +358,14 @@ msgstr "Priprema" #: selection:crm.helpdesk,priority:0 #: selection:crm.helpdesk.report,priority:0 msgid "Low" -msgstr "Nizak" +msgstr "Низак" #. module: crm_helpdesk #: field:crm.helpdesk,date_closed:0 #: selection:crm.helpdesk,state:0 #: selection:crm.helpdesk.report,state:0 msgid "Closed" -msgstr "Zatvoreno" +msgstr "Затворено" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -380,13 +380,13 @@ msgstr "" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "August" -msgstr "Avgust" +msgstr "Август" #. module: crm_helpdesk #: selection:crm.helpdesk,priority:0 #: selection:crm.helpdesk.report,priority:0 msgid "Normal" -msgstr "Normalno" +msgstr "Нормално" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -396,7 +396,7 @@ msgstr "Globalno CC" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "June" -msgstr "Juni" +msgstr "Јун" #. module: crm_helpdesk #: field:crm.helpdesk,planned_revenue:0 @@ -406,12 +406,12 @@ msgstr "Planirani Prihodi" #. module: crm_helpdesk #: field:crm.helpdesk.report,user_id:0 msgid "User" -msgstr "Korisnik" +msgstr "Корисник" #. module: crm_helpdesk #: field:crm.helpdesk,active:0 msgid "Active" -msgstr "Aktivan" +msgstr "Активан" #. module: crm_helpdesk #: model:ir.module.module,shortdesc:crm_helpdesk.module_meta_information @@ -431,17 +431,17 @@ msgstr "HelpDesk Zahtevi" #. module: crm_helpdesk #: view:crm.helpdesk.report:0 msgid "Search" -msgstr "Trazi" +msgstr "Тражи" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "October" -msgstr "Oktobar" +msgstr "Октобар" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "January" -msgstr "Januar" +msgstr "Јануар" #. module: crm_helpdesk #: help:crm.helpdesk,email_from:0 @@ -452,17 +452,17 @@ msgstr "Ovi ce ljudi Primiti Email" #: view:crm.helpdesk:0 #: field:crm.helpdesk,date:0 msgid "Date" -msgstr "Datum" +msgstr "датум" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "November" -msgstr "Novembar" +msgstr "Новембар" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "History" -msgstr "Istorija" +msgstr "Историја" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -472,7 +472,7 @@ msgstr "Dodaci" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Misc" -msgstr "Ostalo" +msgstr "Остало" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -480,7 +480,7 @@ msgstr "Ostalo" #: view:crm.helpdesk.report:0 #: field:crm.helpdesk.report,state:0 msgid "State" -msgstr "Stanje" +msgstr "стање" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -504,29 +504,29 @@ msgstr "" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Done" -msgstr "Zavrseno" +msgstr "Завршено" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "December" -msgstr "Decembar" +msgstr "Децембар" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Cancel" -msgstr "Otkazi" +msgstr "Откажи" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Close" -msgstr "Zatvori" +msgstr "Затвори" #. module: crm_helpdesk #: view:crm.helpdesk:0 #: selection:crm.helpdesk,state:0 #: selection:crm.helpdesk.report,state:0 msgid "Open" -msgstr "Otvori" +msgstr "Отвори" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -549,7 +549,7 @@ msgstr "HelpDesk" #: view:crm.helpdesk:0 #: field:crm.helpdesk,user_id:0 msgid "Responsible" -msgstr "Odgovorni" +msgstr "Одговоран" #. module: crm_helpdesk #: view:crm.helpdesk.report:0 @@ -559,7 +559,7 @@ msgstr "Trenutni" #. module: crm_helpdesk #: view:crm.helpdesk:0 msgid "Details" -msgstr "Detalji" +msgstr "Детаљи" #. module: crm_helpdesk #: view:crm.helpdesk:0 @@ -569,7 +569,7 @@ msgstr "Odgovor" #. module: crm_helpdesk #: field:crm.helpdesk,description:0 msgid "Description" -msgstr "Opis" +msgstr "Опис" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 @@ -624,17 +624,17 @@ msgstr "" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "February" -msgstr "Februar" +msgstr "Фебруар" #. module: crm_helpdesk #: field:crm.helpdesk,name:0 msgid "Name" -msgstr "Ime" +msgstr "Име" #. module: crm_helpdesk #: view:crm.helpdesk.report:0 msgid "Lost" -msgstr "Izgubljen" +msgstr "Изгубљен" #. module: crm_helpdesk #: model:ir.ui.menu,name:crm_helpdesk.menu_help_support_main @@ -644,7 +644,7 @@ msgstr "HelpDesk i Podrska" #. module: crm_helpdesk #: selection:crm.helpdesk.report,month:0 msgid "April" -msgstr "April" +msgstr "Април" #. module: crm_helpdesk #: view:crm.helpdesk.report:0 @@ -654,7 +654,7 @@ msgstr "Moj/i Slucaj(evi)" #. module: crm_helpdesk #: field:crm.helpdesk,id:0 msgid "ID" -msgstr "ID" +msgstr "ИД" #. module: crm_helpdesk #: model:ir.actions.act_window,help:crm_helpdesk.crm_helpdesk_categ_action @@ -696,7 +696,7 @@ msgstr "" #: view:crm.helpdesk.report:0 #: field:crm.helpdesk.report,name:0 msgid "Year" -msgstr "Godina" +msgstr "Година" #. module: crm_helpdesk #: field:crm.helpdesk,duration:0 diff --git a/addons/hr/i18n/fr.po b/addons/hr/i18n/fr.po index 92d3fa6b27d..5c1e623b247 100644 --- a/addons/hr/i18n/fr.po +++ b/addons/hr/i18n/fr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: Numérigraphe \n" +"PO-Revision-Date: 2011-07-06 21:02+0000\n" +"Last-Translator: Quentin THEURET \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:29+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: hr #: model:process.node,name:hr.process_node_openerpuser0 @@ -566,7 +566,7 @@ msgstr "" #. module: hr #: field:hr.employee,bank_account_id:0 msgid "Bank Account Number" -msgstr "" +msgstr "Numéro de Compte Bancaire" #. module: hr #: view:hr.department:0 diff --git a/addons/hr_expense/i18n/fr.po b/addons/hr_expense/i18n/fr.po index fec87c1fb42..0596c67d7d8 100644 --- a/addons/hr_expense/i18n/fr.po +++ b/addons/hr_expense/i18n/fr.po @@ -7,15 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " -"\n" +"PO-Revision-Date: 2011-07-06 21:06+0000\n" +"Last-Translator: Quentin THEURET \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:30+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: hr_expense #: model:process.node,name:hr_expense.process_node_confirmedexpenses0 @@ -549,7 +548,7 @@ msgstr "Filtres étendus..." #: code:addons/hr_expense/hr_expense.py:157 #, python-format msgid "The employee must have a Home address." -msgstr "" +msgstr "L'employé doit avoir une adresse personnelle." #. module: hr_expense #: selection:hr.expense.report,month:0 diff --git a/addons/hr_payroll_account/i18n/fr.po b/addons/hr_payroll_account/i18n/fr.po index 1ebbfd769d8..1175026311c 100644 --- a/addons/hr_payroll_account/i18n/fr.po +++ b/addons/hr_payroll_account/i18n/fr.po @@ -7,19 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:18+0000\n" -"PO-Revision-Date: 2011-06-15 15:12+0000\n" +"PO-Revision-Date: 2011-07-06 21:17+0000\n" "Last-Translator: Quentin THEURET \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-06-16 05:28+0000\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: hr_payroll_account #: view:hr.employee:0 msgid "Employee Bank Account" -msgstr "" +msgstr "Compte bancaire de l'employé(e)" #. module: hr_payroll_account #: field:hr.payroll.register,bank_journal_id:0 @@ -126,7 +126,7 @@ msgstr "Compte de dépenses où seront enregistrés les salaires" #: code:addons/hr_payroll_account/hr_payroll_account.py:433 #, python-format msgid "Please define partner in bank account for %s !" -msgstr "" +msgstr "Veuillez définir un partenaire dans le compte bancaire pour %s !" #. module: hr_payroll_account #: model:ir.module.module,shortdesc:hr_payroll_account.module_meta_information @@ -233,7 +233,7 @@ msgstr "" #: code:addons/hr_payroll_account/hr_payroll_account.py:469 #, python-format msgid "Please define Salary Account for %s." -msgstr "" +msgstr "Veuillez définir un compte de salaire pour %s." #. module: hr_payroll_account #: model:ir.model,name:hr_payroll_account.model_hr_payroll_advice @@ -366,7 +366,7 @@ msgstr "Veuillez configurer le compte à payer des partenaires !" #: code:addons/hr_payroll_account/hr_payroll_account.py:430 #, python-format msgid "Please define bank account for %s !" -msgstr "" +msgstr "Veuillez définir un compte bancaire pour %s !" #, python-format #~ msgid "Integrity Error !" diff --git a/addons/lunch/i18n/zh_CN.po b/addons/lunch/i18n/zh_CN.po index 9b8b946a446..5f4f43bfcd0 100644 --- a/addons/lunch/i18n/zh_CN.po +++ b/addons/lunch/i18n/zh_CN.po @@ -8,19 +8,19 @@ 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-19 12:00+0000\n" -"Last-Translator: Wei \"oldrev\" Li \n" +"PO-Revision-Date: 2011-07-07 14:43+0000\n" +"Last-Translator: openerp-china.Black Jack \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-01-25 06:48+0000\n" -"X-Generator: Launchpad (build 12177)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: lunch -#: view:lunch.cashbox.clean:0 +#: wizard_view:lunch.cashbox.clean,init:0 msgid "Reset cashbox" -msgstr "复位现金箱" +msgstr "重设外卖现金" #. module: lunch #: model:ir.actions.act_window,name:lunch.action_lunch_order_form @@ -30,15 +30,14 @@ msgid "Lunch Orders" msgstr "午餐订单" #. module: lunch -#: view:lunch.order.cancel:0 +#: wizard_view:lunch.order.cancel,init:0 msgid "Are you sure you want to cancel this order ?" msgstr "您确定要取消此订单?" #. module: lunch -#: model:ir.actions.act_window,name:lunch.action_lunch_cashmove_form #: model:ir.ui.menu,name:lunch.menu_lunch_cashmove_form msgid "Cash Moves" -msgstr "" +msgstr "现金划拨" #. module: lunch #: view:lunch.cashmove:0 @@ -46,7 +45,7 @@ msgstr "" #: view:report.lunch.amount:0 #: view:report.lunch.order:0 msgid "Group By..." -msgstr "分组于" +msgstr "分组..." #. module: lunch #: model:ir.model,name:lunch.model_lunch_order_confirm @@ -68,6 +67,11 @@ msgid "" " Apply Different Category for the product.\n" " " msgstr "" +"\n" +" 这是一个管理午餐的模块\n" +"保存对午餐订单,现金划拨,外卖现金,外卖品种等的跟踪信息。\n" +"加入不同类型的外卖品种。\n" +" " #. module: lunch #: view:lunch.cashmove:0 @@ -79,7 +83,7 @@ msgstr "今日" #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "March" -msgstr "三月" +msgstr "3月" #. module: lunch #: report:lunch.order:0 @@ -94,11 +98,8 @@ msgid "Day" msgstr "日" #. module: lunch -#: model:ir.actions.act_window,name:lunch.action_lunch_order_cancel -#: model:ir.actions.act_window,name:lunch.action_lunch_order_cancel_values -#: model:ir.model,name:lunch.model_lunch_order_cancel -#: view:lunch.order:0 -#: view:lunch.order.cancel:0 +#: model:ir.actions.wizard,name:lunch.wizard_id_cancel +#: wizard_view:lunch.order.cancel,init:0 msgid "Cancel Order" msgstr "取消订单" @@ -109,16 +110,15 @@ msgid "Amount" msgstr "金额" #. module: lunch -#: model:ir.actions.act_window,name:lunch.action_lunch_product_form #: model:ir.ui.menu,name:lunch.menu_lunch_product_form #: view:lunch.product:0 msgid "Products" -msgstr "产品列表" +msgstr "品种列表" #. module: lunch #: model:ir.model,name:lunch.model_report_lunch_amount msgid "Amount available by user and box" -msgstr "" +msgstr "用户和外卖现金的可用金额" #. module: lunch #: view:report.lunch.amount:0 @@ -128,16 +128,16 @@ msgstr " 月 " #. module: lunch #: model:ir.model,name:lunch.model_report_lunch_order msgid "Lunch Orders Statistics" -msgstr "午餐单统计" +msgstr "午餐订单统计" #. module: lunch +#: model:ir.actions.act_window,name:lunch.action_lunch_cashmove_form #: view:lunch.cashmove:0 #: field:lunch.order,cashmove:0 msgid "CashMove" -msgstr "" +msgstr "现金划拨" #. module: lunch -#: view:lunch.order:0 #: selection:lunch.order,state:0 msgid "Confirmed" msgstr "已确认" @@ -165,12 +165,13 @@ msgstr "状态" #. module: lunch #: field:report.lunch.order,price_total:0 msgid "Total Price" -msgstr "总价" +msgstr "总价格" #. module: lunch +#: model:ir.ui.menu,name:lunch.menu_lunch_report_amount_tree #: view:report.lunch.amount:0 msgid "Box Amount by User" -msgstr "" +msgstr "用户的外卖现金金额" #. module: lunch #: field:lunch.cashmove,create_date:0 @@ -185,13 +186,11 @@ msgstr "单号/日期" #. module: lunch #: field:lunch.order,descript:0 msgid "Description Order" -msgstr "说明" +msgstr "订单说明" #. module: lunch -#: model:ir.actions.act_window,name:lunch.action_lunch_order_confirm -#: model:ir.actions.act_window,name:lunch.action_lunch_order_confirm_values -#: view:lunch.order:0 -#: view:lunch.order.confirm:0 +#: model:ir.actions.wizard,name:lunch.lunch_order_confirm +#: wizard_button:lunch.order.confirm,init,go:0 msgid "Confirm Order" msgstr "确认订单" @@ -199,14 +198,14 @@ msgstr "确认订单" #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "July" -msgstr "七月" +msgstr "7月" #. module: lunch #: view:lunch.cashmove:0 #: view:report.lunch.amount:0 #: view:report.lunch.order:0 msgid "Box" -msgstr "" +msgstr "外卖现金" #. module: lunch #: view:report.lunch.order:0 @@ -226,35 +225,35 @@ msgstr "创建日期" #. module: lunch #: model:ir.actions.act_window,name:lunch.action_lunch_category_form msgid " Product Categories " -msgstr " 商品分类 " +msgstr " 品种分类 " #. module: lunch -#: view:lunch.cashbox.clean:0 +#: wizard_button:lunch.cashbox.clean,init,zero:0 msgid "Set to Zero" msgstr "设为0" #. module: lunch #: model:ir.model,name:lunch.model_lunch_cashmove msgid "Cash Move" -msgstr "" +msgstr "现金划拨" #. module: lunch #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "April" -msgstr "四月" +msgstr "4月" #. module: lunch #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "September" -msgstr "九月" +msgstr "9月" #. module: lunch #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "December" -msgstr "十二月" +msgstr "12月" #. module: lunch #: field:report.lunch.amount,month:0 @@ -264,20 +263,18 @@ msgid "Month" msgstr "月" #. module: lunch -#: field:lunch.order.confirm,confirm_cashbox:0 +#: wizard_field:lunch.order.confirm,init,confirm_cashbox:0 msgid "Name of box" -msgstr "" +msgstr "外卖现金名称" #. module: lunch -#: view:lunch.order.cancel:0 +#: wizard_button:lunch.order.cancel,init,cancel:0 msgid "Yes" msgstr "是" #. module: lunch #: model:ir.model,name:lunch.model_lunch_category #: view:lunch.category:0 -#: view:lunch.order:0 -#: field:lunch.order,category:0 #: field:lunch.product,category_id:0 msgid "Category" msgstr "分类" @@ -285,28 +282,27 @@ msgstr "分类" #. module: lunch #: view:report.lunch.amount:0 msgid " Year " -msgstr "" +msgstr " 年 " #. module: lunch #: model:ir.ui.menu,name:lunch.menu_lunch_category_form msgid "Product Categories" -msgstr "产品分类" +msgstr "品种分类" #. module: lunch -#: view:lunch.cashbox.clean:0 -#: view:lunch.order.cancel:0 +#: wizard_button:lunch.order.cancel,init,end:0 msgid "No" msgstr "否" #. module: lunch -#: view:lunch.order.confirm:0 +#: wizard_view:lunch.order.confirm,init:0 msgid "Orders Confirmation" msgstr "订单确认" #. module: lunch -#: view:lunch.cashbox.clean:0 +#: wizard_view:lunch.cashbox.clean,init:0 msgid "Are you sure you want to reset this cashbox ?" -msgstr "" +msgstr "你确定要重置这外卖现金?" #. module: lunch #: selection:lunch.order,state:0 @@ -317,35 +313,34 @@ msgstr "草稿" #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "August" -msgstr "八月" +msgstr "8月" #. module: lunch #: model:ir.actions.act_window,name:lunch.action_report_lunch_order_all #: view:report.lunch.order:0 msgid "Lunch Order Analysis" -msgstr "" +msgstr "午餐订单分析" #. module: lunch #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "June" -msgstr "六月" +msgstr "6月" #. module: lunch #: field:lunch.cashmove,user_cashmove:0 #: field:lunch.order,user_id:0 #: field:report.lunch.amount,user_id:0 -#: field:report.lunch.order,user_id:0 msgid "User Name" msgstr "用户名" #. module: lunch #: view:report.lunch.order:0 msgid "Sales Analysis" -msgstr "" +msgstr "销售分析" #. module: lunch -#: model:ir.ui.menu,name:lunch.menu_lunch_category_root_configuration +#: model:ir.ui.menu,name:lunch.menu_lunch msgid "Lunch" msgstr "午餐管理" @@ -356,7 +351,6 @@ msgid "User" msgstr "用户" #. module: lunch -#: view:lunch.cashmove:0 #: field:lunch.order,date:0 msgid "Date" msgstr "日期" @@ -365,30 +359,30 @@ msgstr "日期" #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "November" -msgstr "十一月" +msgstr "11月" #. module: lunch #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "October" -msgstr "十月" +msgstr "10月" #. module: lunch #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "January" -msgstr "一月" +msgstr "1月" #. module: lunch #: model:ir.model,name:lunch.model_lunch_cashbox_clean msgid "clean cashbox" -msgstr "" +msgstr "外卖现金清零" #. module: lunch #: field:lunch.cashmove,active:0 #: field:lunch.product,active:0 msgid "Active" -msgstr "激活" +msgstr "生效" #. module: lunch #: field:report.lunch.order,date:0 @@ -398,43 +392,43 @@ msgstr "订单日期" #. module: lunch #: model:ir.model,name:lunch.model_lunch_cashbox msgid "Cashbox for Lunch " -msgstr "" +msgstr "午餐的外卖现金 " #. module: lunch -#: model:ir.actions.act_window,name:lunch.action_lunch_cashbox_clean -#: model:ir.actions.act_window,name:lunch.action_lunch_cashbox_clean_values +#: model:ir.actions.wizard,name:lunch.wizard_clean_cashbox msgid "Set CashBox to Zero" -msgstr "" +msgstr "设置外卖现金为0" #. module: lunch #: field:lunch.cashmove,box:0 #: field:report.lunch.amount,box:0 msgid "Box Name" -msgstr "" +msgstr "外卖现金的名称" #. module: lunch -#: view:lunch.order.confirm:0 +#: wizard_button:lunch.cashbox.clean,init,end:0 +#: wizard_button:lunch.order.confirm,init,end:0 msgid "Cancel" msgstr "取消" #. module: lunch #: model:ir.actions.act_window,name:lunch.action_lunch_cashbox_form msgid " Cashboxes " -msgstr "" +msgstr " 外卖现金列表 " #. module: lunch -#: report:lunch.order:0 +#: rml:lunch.order:0 msgid "Unit Price" msgstr "单价" #. module: lunch +#: model:ir.actions.act_window,name:lunch.action_lunch_product_form #: field:lunch.order,product:0 msgid "Product" -msgstr "货品" +msgstr "品种" #. module: lunch -#: field:lunch.cashmove,name:0 -#: report:lunch.order:0 +#: rml:lunch.order:0 #: field:lunch.product,description:0 msgid "Description" msgstr "说明" @@ -443,7 +437,7 @@ msgstr "说明" #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "May" -msgstr "五月" +msgstr "5月" #. module: lunch #: field:lunch.order,price:0 @@ -454,22 +448,22 @@ msgstr "价格" #. module: lunch #: view:lunch.cashmove:0 msgid "Search CashMove" -msgstr "" +msgstr "搜索外卖现金" #. module: lunch #: view:report.lunch.amount:0 msgid "Total box" -msgstr "" +msgstr "总外卖现金" #. module: lunch #: model:ir.model,name:lunch.model_lunch_product msgid "Lunch Product" -msgstr "" +msgstr "午餐品种" #. module: lunch #: field:lunch.cashbox,sum_remain:0 msgid "Total Remaining" -msgstr "" +msgstr "总剩余" #. module: lunch #: view:lunch.order:0 @@ -480,15 +474,16 @@ msgstr "总价" #: selection:report.lunch.amount,month:0 #: selection:report.lunch.order,month:0 msgid "February" -msgstr "二月" +msgstr "2月" #. module: lunch #: field:lunch.cashbox,name:0 +#: field:lunch.cashmove,name:0 #: field:lunch.category,name:0 +#: rml:lunch.order:0 #: field:lunch.product,name:0 -#: field:report.lunch.order,box_name:0 msgid "Name" -msgstr "品名" +msgstr "名称" #. module: lunch #: view:lunch.cashmove:0 @@ -498,17 +493,17 @@ msgstr "总金额" #. module: lunch #: view:lunch.category:0 msgid "Category related to Products" -msgstr "" +msgstr "该分类的品种" #. module: lunch #: model:ir.ui.menu,name:lunch.menu_lunch_cashbox_form #: view:lunch.cashbox:0 msgid "Cashboxes" -msgstr "" +msgstr "外卖现金列表" #. module: lunch #: view:lunch.category:0 -#: report:lunch.order:0 +#: rml:lunch.order:0 #: view:lunch.order:0 msgid "Order" msgstr "订单" @@ -519,13 +514,13 @@ msgstr "订单" #: model:ir.ui.menu,name:lunch.menu_lunch #: report:lunch.order:0 msgid "Lunch Order" -msgstr "" +msgstr "午餐订单" #. module: lunch #: model:ir.actions.act_window,name:lunch.action_report_lunch_amount_tree #: model:ir.ui.menu,name:lunch.menu_lunch_report_amount_tree msgid "Cash Position by User" -msgstr "" +msgstr "用户现金状况" #. module: lunch #: field:lunch.cashbox,manager:0 diff --git a/addons/mail_gateway/i18n/zh_CN.po b/addons/mail_gateway/i18n/zh_CN.po index a2e4c92f1dd..13e60c29896 100644 --- a/addons/mail_gateway/i18n/zh_CN.po +++ b/addons/mail_gateway/i18n/zh_CN.po @@ -8,19 +8,19 @@ 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-19 12:00+0000\n" -"Last-Translator: Wei \"oldrev\" Li \n" +"PO-Revision-Date: 2011-07-07 15:18+0000\n" +"Last-Translator: openerp-china.Black Jack \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-01-25 06:48+0000\n" -"X-Generator: Launchpad (build 12177)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: mail_gateway #: field:mailgate.message,res_id:0 msgid "Resource ID" -msgstr "资源标识符" +msgstr "资源ID" #. module: mail_gateway #: code:addons/mail_gateway/mail_gateway.py:68 @@ -44,22 +44,22 @@ msgstr "打开附件" #. module: mail_gateway #: view:mailgate.message:0 msgid "Message Details" -msgstr "邮件详情" +msgstr "消息详情" #. module: mail_gateway #: field:mailgate.message,message_id:0 msgid "Message Id" -msgstr "信件 ID" +msgstr "消息ID" #. module: mail_gateway #: field:mailgate.message,ref_id:0 msgid "Reference Id" -msgstr "" +msgstr "相关ID" #. module: mail_gateway #: view:mailgate.thread:0 msgid "Mailgateway History" -msgstr "邮件网关历史记录" +msgstr "邮件网关日志" #. module: mail_gateway #: code:addons/mail_gateway/mail_gateway.py:249 @@ -70,7 +70,7 @@ msgstr "备注" #. module: mail_gateway #: view:mailgate.message:0 msgid "Group By..." -msgstr "分组于" +msgstr "分组..." #. module: mail_gateway #: constraint:res.partner:0 @@ -80,12 +80,12 @@ msgstr "错误!您不能创建递归的相关成员。" #. module: mail_gateway #: help:mailgate.message,message_id:0 msgid "Message Id on Email." -msgstr "Email的邮件标识" +msgstr "电子邮件的消息ID" #. module: mail_gateway #: help:mailgate.message,email_to:0 msgid "Email Recipients" -msgstr "" +msgstr "邮件收件人" #. module: mail_gateway #: view:mailgate.message:0 @@ -95,7 +95,7 @@ msgstr "详细信息" #. module: mail_gateway #: view:mailgate.thread:0 msgid "Mailgate History" -msgstr "邮件网关历史记录" +msgstr "邮件网关日志" #. module: mail_gateway #: model:ir.model,name:mail_gateway.model_email_server_tools @@ -105,7 +105,7 @@ msgstr "邮件服务器工具" #. module: mail_gateway #: view:mailgate.message:0 msgid "Email Followers" -msgstr "" +msgstr "电子邮件追随者" #. module: mail_gateway #: model:ir.model,name:mail_gateway.model_res_partner @@ -118,7 +118,7 @@ msgstr "业务伙伴" #: code:addons/mail_gateway/mail_gateway.py:242 #, python-format msgid " wrote on " -msgstr "" +msgstr " 写在 " #. module: mail_gateway #: view:mailgate.message:0 @@ -135,12 +135,12 @@ msgstr "收件人" #. module: mail_gateway #: help:mailgate.message,references:0 msgid "References emails." -msgstr "" +msgstr "相关的邮件列表" #. module: mail_gateway #: help:mailgate.message,email_cc:0 msgid "Carbon Copy Email Recipients" -msgstr "" +msgstr "抄送邮件的收件人" #. module: mail_gateway #: model:ir.module.module,shortdesc:mail_gateway.module_meta_information @@ -165,7 +165,7 @@ msgstr "业务伙伴名称" #. module: mail_gateway #: model:ir.actions.act_window,name:mail_gateway.action_view_mailgate_thread msgid "Mailgateway Threads" -msgstr "" +msgstr "电子邮件网关线程" #. module: mail_gateway #: code:addons/mail_gateway/mail_gateway.py:247 @@ -191,28 +191,28 @@ msgstr "阶段" #: code:addons/mail_gateway/mail_gateway.py:250 #, python-format msgid " added note on " -msgstr "" +msgstr " 增加备注在 " #. module: mail_gateway #: help:mailgate.message,email_from:0 msgid "Email From" -msgstr "发件人" +msgstr "邮件发件人" #. module: mail_gateway #: view:mailgate.message:0 msgid "Thread" -msgstr "" +msgstr "线程" #. module: mail_gateway #: model:ir.model,name:mail_gateway.model_mailgate_message msgid "Mailgateway Message" -msgstr "邮件网关信件" +msgstr "邮件网关消息" #. module: mail_gateway #: model:ir.actions.act_window,name:mail_gateway.action_view_mail_message #: field:mailgate.thread,message_ids:0 msgid "Messages" -msgstr "信件" +msgstr "消息" #. module: mail_gateway #: field:mailgate.message,user_id:0 @@ -233,17 +233,17 @@ msgstr "密件抄送" #. module: mail_gateway #: field:mailgate.message,history:0 msgid "Is History?" -msgstr "" +msgstr "是日志" #. module: mail_gateway #: help:mailgate.message,email_bcc:0 msgid "Blind Carbon Copy Email Recipients" -msgstr "" +msgstr "密件抄送的收件人" #. module: mail_gateway #: view:mailgate.message:0 msgid "mailgate message" -msgstr "" +msgstr "邮件网关消息" #. module: mail_gateway #: code:addons/mail_gateway/mail_gateway.py:148 @@ -251,12 +251,12 @@ msgstr "" #: view:res.partner:0 #, python-format msgid "History" -msgstr "历史记录" +msgstr "日志" #. module: mail_gateway #: field:mailgate.message,references:0 msgid "References" -msgstr "参照" +msgstr "引用" #. module: mail_gateway #: model:ir.model,name:mail_gateway.model_mailgate_thread @@ -275,7 +275,7 @@ msgstr "附件" #. module: mail_gateway #: view:mailgate.message:0 msgid "Open Document" -msgstr "打开单据" +msgstr "打开文档" #. module: mail_gateway #: view:mailgate.thread:0 @@ -291,7 +291,7 @@ msgstr "抄送" #: code:addons/mail_gateway/mail_gateway.py:246 #, python-format msgid " on " -msgstr "" +msgstr " 在 " #. module: mail_gateway #: view:mailgate.message:0 @@ -315,7 +315,7 @@ msgid "" "The generic email gateway system allows to send and receive emails\n" " * History for Emails\n" " * Easy Integration with any Module" -msgstr "" +msgstr "通过电子邮件网关系统允许你发送和接受邮件" #. module: mail_gateway #: code:addons/mail_gateway/mail_gateway.py:255 @@ -331,7 +331,7 @@ msgstr "显示文本" #. module: mail_gateway #: view:mailgate.message:0 msgid "Owner" -msgstr "属主" +msgstr "所有者" #. module: mail_gateway #: code:addons/mail_gateway/mail_gateway.py:253 @@ -342,7 +342,7 @@ msgstr "状态阶段为: " #. module: mail_gateway #: view:mailgate.message:0 msgid "Message" -msgstr "信件" +msgstr "消息" #. module: mail_gateway #: view:mailgate.message:0 @@ -353,4 +353,4 @@ msgstr "主题" #. module: mail_gateway #: help:mailgate.message,ref_id:0 msgid "Message Id in Email Server." -msgstr "" +msgstr "电子邮件消息ID" diff --git a/addons/marketing_campaign/i18n/zh_CN.po b/addons/marketing_campaign/i18n/zh_CN.po index fcadec0d0dd..67c0c1c5d49 100644 --- a/addons/marketing_campaign/i18n/zh_CN.po +++ b/addons/marketing_campaign/i18n/zh_CN.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-07-04 17:39+0000\n" +"PO-Revision-Date: 2011-07-07 07:13+0000\n" "Last-Translator: shjerryzhou \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-07-05 05:08+0000\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: marketing_campaign @@ -78,7 +78,7 @@ msgid "" "Set an expected revenue if you consider that every campaign item that has " "reached this point has generated a certain revenue. You can get revenue " "statistics in the Reporting section" -msgstr "" +msgstr "设置一个期望的收入,即如果你认为每个达到这个点的活动项会产生一定的收入。你可以在报表里面查看到收入统计。" #. module: marketing_campaign #: field:marketing.campaign.transition,trigger:0 @@ -111,7 +111,7 @@ msgstr "3月" msgid "" "Determines an additional criterion to add to the filter when selecting new " "records to inject in the campaign." -msgstr "" +msgstr "当选择新的纪录添加的营销活动中的时候,确定一个额外的标准添加到过滤器中。" #. module: marketing_campaign #: field:marketing.campaign.activity,object_id:0 @@ -395,33 +395,33 @@ msgstr "错误消息" #: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_form #: view:marketing.campaign:0 msgid "Campaigns" -msgstr "" +msgstr "营销活动" #. module: marketing_campaign #: field:marketing.campaign.transition,interval_type:0 msgid "Interval Unit" -msgstr "" +msgstr "间隔单位" #. module: marketing_campaign #: field:campaign.analysis,country_id:0 msgid "Country" -msgstr "" +msgstr "国家/地区" #. module: marketing_campaign #: field:marketing.campaign.activity,report_id:0 #: selection:marketing.campaign.activity,type:0 msgid "Report" -msgstr "" +msgstr "报表" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "July" -msgstr "" +msgstr "7月" #. module: marketing_campaign #: model:ir.ui.menu,name:marketing_campaign.menu_marketing_configuration msgid "Configuration" -msgstr "" +msgstr "配置" #. module: marketing_campaign #: help:marketing.campaign.activity,variable_cost:0 @@ -429,128 +429,128 @@ msgid "" "Set a variable cost if you consider that every campaign item that has " "reached this point has entailed a certain cost. You can get cost statistics " "in the Reporting section" -msgstr "" +msgstr "设置一个可变成本,如果你认为每项到达这个点的营销活动项就会需要一定的成本。你可以在报表栏查看成本统计分析结果。" #. module: marketing_campaign #: selection:marketing.campaign.transition,interval_type:0 msgid "Hour(s)" -msgstr "" +msgstr "小时数" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_marketing_campaign_segment msgid "Campaign Segment" -msgstr "" +msgstr "营销活动段" #. module: marketing_campaign #: view:marketing.campaign:0 #: view:marketing.campaign.segment:0 #: view:marketing.campaign.workitem:0 msgid "Cancel" -msgstr "" +msgstr "取消" #. module: marketing_campaign #: help:marketing.campaign.activity,keep_if_condition_not_met:0 msgid "" "By activating this option, workitems that aren't executed because the " "condition is not met are marked as cancelled instead of being deleted." -msgstr "" +msgstr "激活此选项,由于条件没有满足而未执行的工作项会被标记为已取消,而不是被删除。" #. module: marketing_campaign #: view:campaign.analysis:0 msgid "Exceptions" -msgstr "" +msgstr "异常" #. module: marketing_campaign #: field:res.partner,workitem_ids:0 msgid "Workitems" -msgstr "" +msgstr "工作项" #. module: marketing_campaign #: field:marketing.campaign,fixed_cost:0 msgid "Fixed Cost" -msgstr "" +msgstr "固定成本" #. module: marketing_campaign #: view:marketing.campaign.segment:0 msgid "Newly Modified" -msgstr "" +msgstr "新修改" #. module: marketing_campaign #: field:marketing.campaign.transition,interval_nbr:0 msgid "Interval Value" -msgstr "" +msgstr "间隔值" #. module: marketing_campaign #: field:campaign.analysis,revenue:0 #: field:marketing.campaign.activity,revenue:0 msgid "Revenue" -msgstr "" +msgstr "收入" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "September" -msgstr "" +msgstr "9月" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "December" -msgstr "" +msgstr "12月" #. module: marketing_campaign #: view:campaign.analysis:0 #: field:campaign.analysis,month:0 msgid "Month" -msgstr "" +msgstr "月份" #. module: marketing_campaign #: field:marketing.campaign.transition,activity_to_id:0 msgid "Next Activity" -msgstr "" +msgstr "下一个活动" #. module: marketing_campaign #: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_followup msgid "Campaign Follow-up" -msgstr "" +msgstr "营销活动追踪" #. module: marketing_campaign #: help:marketing.campaign.activity,email_template_id:0 msgid "The e-mail to send when this activity is activated" -msgstr "" +msgstr "活动激活时发送的邮件" #. module: marketing_campaign #: view:campaign.analysis:0 msgid "This Month" -msgstr "" +msgstr "本月" #. module: marketing_campaign #: view:marketing.campaign:0 msgid "Test Mode" -msgstr "" +msgstr "测试模式" #. module: marketing_campaign #: selection:marketing.campaign.segment,sync_mode:0 msgid "Only records modified after last sync (no duplicates)" -msgstr "" +msgstr "从最近一次同步到现在被修改的记录(不重复)" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_ir_actions_report_xml msgid "ir.actions.report.xml" -msgstr "" +msgstr "ir.actions.report.xml" #. module: marketing_campaign #: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_stat msgid "Campaign Statistics" -msgstr "" +msgstr "营销活动统计" #. module: marketing_campaign #: help:marketing.campaign.activity,server_action_id:0 msgid "The action to perform when this activity is activated" -msgstr "" +msgstr "活动激活时执行的操作" #. module: marketing_campaign #: field:marketing.campaign,partner_field_id:0 msgid "Partner Field" -msgstr "" +msgstr "业务伙伴字段" #. module: marketing_campaign #: view:campaign.analysis:0 @@ -558,37 +558,37 @@ msgstr "" #: model:ir.model,name:marketing_campaign.model_campaign_analysis #: model:ir.ui.menu,name:marketing_campaign.menu_action_campaign_analysis_all msgid "Campaign Analysis" -msgstr "" +msgstr "营销活动分析" #. module: marketing_campaign #: sql_constraint:marketing.campaign.transition:0 msgid "The interval must be positive or zero" -msgstr "" +msgstr "时间间隔必须为正数或零" #. module: marketing_campaign #: selection:marketing.campaign,mode:0 msgid "Test in Realtime" -msgstr "" +msgstr "实时检验" #. module: marketing_campaign #: sql_constraint:email.template:0 msgid "The template name must be unique !" -msgstr "" +msgstr "模板名称必须唯一!" #. module: marketing_campaign #: selection:marketing.campaign,mode:0 msgid "Test Directly" -msgstr "" +msgstr "直接检验" #. module: marketing_campaign #: field:marketing.campaign.activity,report_directory_id:0 msgid "Directory" -msgstr "" +msgstr "目录" #. module: marketing_campaign #: constraint:res.partner:0 msgid "Error ! You can not create recursive associated members." -msgstr "" +msgstr "出错!不能创建循环关联的成员。" #. module: marketing_campaign #: view:marketing.campaign:0 @@ -596,12 +596,12 @@ msgstr "" #: view:marketing.campaign.segment:0 #: selection:marketing.campaign.segment,state:0 msgid "Draft" -msgstr "" +msgstr "草稿" #. module: marketing_campaign #: view:marketing.campaign.workitem:0 msgid "Preview" -msgstr "" +msgstr "预览" #. module: marketing_campaign #: model:ir.module.module,description:marketing_campaign.module_meta_information @@ -633,73 +633,73 @@ msgstr "" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "August" -msgstr "" +msgstr "8月" #. module: marketing_campaign #: selection:marketing.campaign,mode:0 msgid "Normal" -msgstr "" +msgstr "正常" #. module: marketing_campaign #: help:marketing.campaign.activity,start:0 msgid "This activity is launched when the campaign starts." -msgstr "" +msgstr "此活动在营销活动开始时启动。" #. module: marketing_campaign #: help:marketing.campaign.activity,signal:0 msgid "" "An activity with a signal can be called programmatically. Be careful, the " "workitem is always created when a signal is sent" -msgstr "" +msgstr "带信号的活动可以通过编程方式访问。请小心,当信号发出去的时候工作项会自动创建好。" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "June" -msgstr "" +msgstr "6月" #. module: marketing_campaign #: selection:marketing.campaign.segment,sync_mode:0 msgid "All records (no duplicates)" -msgstr "" +msgstr "所有记录(不重复)" #. module: marketing_campaign #: view:marketing.campaign.segment:0 msgid "Newly Created" -msgstr "" +msgstr "新创建的" #. module: marketing_campaign #: field:campaign.analysis,date:0 #: view:marketing.campaign.workitem:0 msgid "Date" -msgstr "" +msgstr "日期" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "November" -msgstr "" +msgstr "11月" #. module: marketing_campaign #: view:marketing.campaign.activity:0 #: field:marketing.campaign.activity,condition:0 msgid "Condition" -msgstr "" +msgstr "条件" #. module: marketing_campaign #: help:marketing.campaign.activity,report_id:0 msgid "The report to generate when this activity is activated" -msgstr "" +msgstr "活动被激活时生成的报表" #. module: marketing_campaign #: selection:campaign.analysis,state:0 #: view:marketing.campaign.workitem:0 #: selection:marketing.campaign.workitem,state:0 msgid "Exception" -msgstr "" +msgstr "异常" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "October" -msgstr "" +msgstr "10月" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:141 @@ -707,38 +707,38 @@ msgstr "" msgid "" "The campaign cannot be started: the email account is not approved in email " "activity '%s'" -msgstr "" +msgstr "营销活动无法开始:邮件活动'%s'的邮箱帐号还没有通过审批。" #. module: marketing_campaign #: field:marketing.campaign.activity,email_template_id:0 msgid "Email Template" -msgstr "" +msgstr "邮件模板" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "January" -msgstr "" +msgstr "1月" #. module: marketing_campaign #: view:marketing.campaign.workitem:0 #: field:marketing.campaign.workitem,date:0 msgid "Execution Date" -msgstr "" +msgstr "执行日期" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_marketing_campaign_workitem msgid "Campaign Workitem" -msgstr "" +msgstr "营销活动工作项" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_marketing_campaign_activity msgid "Campaign Activity" -msgstr "" +msgstr "营销活动活动项" #. module: marketing_campaign #: help:marketing.campaign.activity,report_directory_id:0 msgid "This folder is used to store the generated reports" -msgstr "" +msgstr "此文件夹用于存储生成的报表" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:125 @@ -748,35 +748,35 @@ msgstr "" #: code:addons/marketing_campaign/marketing_campaign.py:154 #, python-format msgid "Error" -msgstr "" +msgstr "出错" #. module: marketing_campaign #: view:marketing.campaign.activity:0 #: field:marketing.campaign.activity,server_action_id:0 msgid "Action" -msgstr "" +msgstr "操作" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:488 #, python-format msgid "Automatic transition" -msgstr "" +msgstr "自动迁移" #. module: marketing_campaign #: view:marketing.campaign.segment:0 #: view:res.partner:0 msgid "History" -msgstr "" +msgstr "历史记录" #. module: marketing_campaign #: model:ir.module.module,shortdesc:marketing_campaign.module_meta_information msgid "marketing_campaign" -msgstr "" +msgstr "marketing_campaign" #. module: marketing_campaign #: view:marketing.campaign.workitem:0 msgid "Process" -msgstr "" +msgstr "流程" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:490 @@ -788,7 +788,7 @@ msgstr "" #. module: marketing_campaign #: help:marketing.campaign.transition,trigger:0 msgid "How is the destination workitem triggered" -msgstr "" +msgstr "如何触发目标工作项" #. module: marketing_campaign #: model:ir.actions.act_window,help:marketing_campaign.action_marketing_campaign_form @@ -807,51 +807,51 @@ msgstr "" #: selection:marketing.campaign.segment,state:0 #: selection:marketing.campaign.workitem,state:0 msgid "Done" -msgstr "" +msgstr "已完成" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:209 #, python-format msgid "Operation not supported" -msgstr "" +msgstr "操作不支持" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_email_template msgid "Email Templates for Models" -msgstr "" +msgstr "模型的邮件模板" #. module: marketing_campaign #: view:marketing.campaign:0 #: view:marketing.campaign.segment:0 msgid "Close" -msgstr "" +msgstr "结束" #. module: marketing_campaign #: constraint:marketing.campaign.segment:0 msgid "Model of filter must be same as resource model of Campaign " -msgstr "" +msgstr "模型的过滤器必须和营销活动的资源模型一致 " #. module: marketing_campaign #: view:marketing.campaign.segment:0 msgid "Synchronize Manually" -msgstr "" +msgstr "手工同步" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:154 #, python-format msgid "The campaign cannot be marked as done before all segments are done" -msgstr "" +msgstr "只有所有的活动片段完成之后才能把营销活动设置为已完成" #. module: marketing_campaign #: view:marketing.campaign.workitem:0 #: field:marketing.campaign.workitem,res_id:0 msgid "Resource ID" -msgstr "" +msgstr "资源ID" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_marketing_campaign_transition msgid "Campaign Transition" -msgstr "" +msgstr "营销互动迁移" #. module: marketing_campaign #: view:campaign.analysis:0 @@ -859,50 +859,50 @@ msgstr "" #: view:marketing.campaign.workitem:0 #: selection:marketing.campaign.workitem,state:0 msgid "To Do" -msgstr "" +msgstr "待办" #. module: marketing_campaign #: view:marketing.campaign.workitem:0 msgid "Campaign Step" -msgstr "" +msgstr "营销活动步骤" #. module: marketing_campaign #: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_segment_form #: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_segment_form #: view:marketing.campaign.segment:0 msgid "Segments" -msgstr "" +msgstr "片段" #. module: marketing_campaign #: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_segment_opened msgid "All Segments" -msgstr "" +msgstr "所有片段" #. module: marketing_campaign #: view:marketing.campaign.activity:0 msgid "Incoming Transitions" -msgstr "" +msgstr "转入迁移" #. module: marketing_campaign #: selection:marketing.campaign.activity,type:0 msgid "E-mail" -msgstr "" +msgstr "电子邮件" #. module: marketing_campaign #: selection:marketing.campaign.transition,interval_type:0 msgid "Day(s)" -msgstr "" +msgstr "天" #. module: marketing_campaign #: field:marketing.campaign,activity_ids:0 #: view:marketing.campaign.activity:0 msgid "Activities" -msgstr "" +msgstr "活动" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "May" -msgstr "" +msgstr "5月" #. module: marketing_campaign #: view:marketing.campaign:0 @@ -910,28 +910,28 @@ msgstr "" #: view:marketing.campaign.segment:0 #: selection:marketing.campaign.segment,state:0 msgid "Running" -msgstr "" +msgstr "正在运行" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:489 #, python-format msgid "After %(interval_nbr)d %(interval_type)s" -msgstr "" +msgstr "在%(interval_nbr)d %(interval_type)s之后" #. module: marketing_campaign #: model:ir.model,name:marketing_campaign.model_marketing_campaign msgid "Marketing Campaign" -msgstr "" +msgstr "市场营销活动" #. module: marketing_campaign #: field:marketing.campaign.segment,date_done:0 msgid "End Date" -msgstr "" +msgstr "截止日期" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "February" -msgstr "" +msgstr "2月" #. module: marketing_campaign #: view:campaign.analysis:0 @@ -942,7 +942,7 @@ msgstr "" #: view:marketing.campaign.workitem:0 #: field:marketing.campaign.workitem,object_id:0 msgid "Resource" -msgstr "" +msgstr "资源" #. module: marketing_campaign #: help:marketing.campaign,fixed_cost:0 @@ -950,40 +950,40 @@ msgid "" "Fixed cost for running this campaign. You may also specify variable cost and " "revenue on each campaign activity. Cost and Revenue statistics are included " "in Campaign Reporting." -msgstr "" +msgstr "开展此营销活动的固定成本。你也可以为每个营销活动指定可变成本和收入。成本和收入统计包含在营销活动报表中。" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:746 #, python-format msgid "Email Preview" -msgstr "" +msgstr "邮件预览" #. module: marketing_campaign #: field:marketing.campaign.activity,signal:0 msgid "Signal" -msgstr "" +msgstr "信号" #. module: marketing_campaign #: code:addons/marketing_campaign/marketing_campaign.py:125 #, python-format msgid "The campaign cannot be started: there are no activities in it" -msgstr "" +msgstr "营销活动无法启动:没有任何活动项" #. module: marketing_campaign #: help:marketing.campaign.workitem,date:0 msgid "If date is not set, this workitem has to be run manually" -msgstr "" +msgstr "如果没有设置日期,此工作项必须由手工启动" #. module: marketing_campaign #: selection:campaign.analysis,month:0 msgid "April" -msgstr "" +msgstr "4月" #. module: marketing_campaign #: view:marketing.campaign:0 #: field:marketing.campaign,mode:0 msgid "Mode" -msgstr "" +msgstr "模式" #. module: marketing_campaign #: view:campaign.analysis:0 @@ -992,7 +992,7 @@ msgstr "" #: view:marketing.campaign.workitem:0 #: field:marketing.campaign.workitem,activity_id:0 msgid "Activity" -msgstr "" +msgstr "活动" #. module: marketing_campaign #: help:marketing.campaign.segment,ir_filter_id:0 @@ -1007,48 +1007,48 @@ msgstr "" #: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_workitem #: model:ir.ui.menu,name:marketing_campaign.menu_action_marketing_campaign_workitem msgid "Campaign Followup" -msgstr "" +msgstr "营销活动追踪" #. module: marketing_campaign #: field:marketing.campaign.segment,date_next_sync:0 msgid "Next Synchronization" -msgstr "" +msgstr "下一个同步" #. module: marketing_campaign #: view:marketing.campaign.segment:0 #: field:marketing.campaign.segment,ir_filter_id:0 msgid "Filter" -msgstr "" +msgstr "过滤器" #. module: marketing_campaign #: view:marketing.campaign.segment:0 msgid "All" -msgstr "" +msgstr "全选" #. module: marketing_campaign #: selection:marketing.campaign.segment,sync_mode:0 msgid "Only records created after last sync" -msgstr "" +msgstr "最近一次同步后创建的新记录" #. module: marketing_campaign #: field:marketing.campaign.activity,variable_cost:0 msgid "Variable Cost" -msgstr "" +msgstr "可变成本" #. module: marketing_campaign #: selection:marketing.campaign,mode:0 msgid "With Manual Confirmation" -msgstr "" +msgstr "通过手工确认" #. module: marketing_campaign #: view:campaign.analysis:0 #: field:campaign.analysis,total_cost:0 #: view:marketing.campaign:0 msgid "Cost" -msgstr "" +msgstr "成本" #. module: marketing_campaign #: view:campaign.analysis:0 #: field:campaign.analysis,year:0 msgid "Year" -msgstr "" +msgstr "年" diff --git a/addons/mrp/i18n/fr.po b/addons/mrp/i18n/fr.po index f45acb3b2a6..d8f3290c415 100644 --- a/addons/mrp/i18n/fr.po +++ b/addons/mrp/i18n/fr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:19+0000\n" -"PO-Revision-Date: 2011-01-20 12:23+0000\n" -"Last-Translator: Numérigraphe \n" +"PO-Revision-Date: 2011-07-07 20:15+0000\n" +"Last-Translator: Quentin THEURET \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:34+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: mrp #: field:mrp.production,move_created_ids:0 @@ -1461,7 +1461,7 @@ msgstr "Jours de sécurité pour chaque opération de production." #. module: mrp #: view:mrp.bom:0 msgid "Component Name" -msgstr "" +msgstr "Nom du composant" #. module: mrp #: model:process.node,name:mrp.process_node_mts0 diff --git a/addons/outlook/i18n/zh_CN.po b/addons/outlook/i18n/zh_CN.po index 27d9e46c110..fb3d963e634 100644 --- a/addons/outlook/i18n/zh_CN.po +++ b/addons/outlook/i18n/zh_CN.po @@ -8,35 +8,35 @@ 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-19 12:00+0000\n" -"Last-Translator: ivantree \n" +"PO-Revision-Date: 2011-07-07 16:01+0000\n" +"Last-Translator: openerp-china.Black Jack \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-01-25 06:52+0000\n" -"X-Generator: Launchpad (build 12177)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: outlook #: field:outlook.installer,doc_file:0 msgid "Installation Manual" -msgstr "" +msgstr "安装手册" #. module: outlook #: field:outlook.installer,plugin_file:0 msgid "Outlook Plug-in" -msgstr "" +msgstr "Outlook插件" #. module: outlook #: field:outlook.installer,description:0 msgid "Description" -msgstr "" +msgstr "说明" #. module: outlook #: model:ir.ui.menu,name:outlook.menu_base_config_plugins_outlook #: view:outlook.installer:0 msgid "Outlook Plug-In" -msgstr "" +msgstr "Outlook插件" #. module: outlook #: view:outlook.installer:0 @@ -46,18 +46,18 @@ msgstr "忽略" #. module: outlook #: model:ir.module.module,shortdesc:outlook.module_meta_information msgid "Outlook Interface" -msgstr "" +msgstr "Outlook 接口" #. module: outlook #: field:outlook.installer,doc_name:0 #: field:outlook.installer,name:0 msgid "File name" -msgstr "" +msgstr "文件名" #. module: outlook #: field:outlook.installer,outlook:0 msgid "Outlook Plug-in " -msgstr "" +msgstr "Outlook 插件 " #. module: outlook #: model:ir.module.module,description:outlook.module_meta_information @@ -74,11 +74,18 @@ msgid "" "\n" " " msgstr "" +"\n" +" 这模块提供Outlook插件\n" +" Outlook插件允许你从微软的Outlook和它的附件选择添加的对象。\n" +" 你能选择在邮件网关中的一个业务伙伴,一个任务,一个计划,一个帐户分析,或任何对象和附件里选择邮件。\n" +" 附件带消息。\n" +"\n" +" " #. module: outlook #: help:outlook.installer,doc_file:0 msgid "The documentation file :- how to install Outlook Plug-in." -msgstr "" +msgstr "文件里的文档: 如何安装Outlook插件" #. module: outlook #: model:ir.model,name:outlook.model_outlook_installer @@ -90,54 +97,54 @@ msgstr "" #: model:ir.actions.act_window,name:outlook.action_outlook_wizard #: view:outlook.installer:0 msgid "Outlook Plug-In Configuration" -msgstr "" +msgstr "Outlook插件设置" #. module: outlook #: field:outlook.installer,progress:0 msgid "Configuration Progress" -msgstr "" +msgstr "设置进度" #. module: outlook #: view:outlook.installer:0 msgid "" "This plug-in allows you to link your e-mail to OpenERP's documents. You can " "attach it to any existing one in OpenERP or create a new one." -msgstr "" +msgstr "这插件允许你把你的电子邮件链接到系统的文档到中,你能附属在系统中任何现有的文档或创建一个新的文档。" #. module: outlook #: help:outlook.installer,outlook:0 msgid "" "Allows you to select an object that you would like to add to your email and " "its attachments." -msgstr "" +msgstr "允许你选择一个你想链接到你电子邮件和它的附件的对象" #. module: outlook #: view:outlook.installer:0 msgid "title" -msgstr "" +msgstr "标题" #. module: outlook #: view:outlook.installer:0 msgid "_Close" -msgstr "" +msgstr "关闭(_C):" #. module: outlook #: view:outlook.installer:0 msgid "Installation and Configuration Steps" -msgstr "" +msgstr "安装和设置步骤" #. module: outlook #: field:outlook.installer,config_logo:0 msgid "Image" -msgstr "" +msgstr "图像" #. module: outlook #: help:outlook.installer,plugin_file:0 msgid "" "outlook plug-in file. Save as this file and install this plug-in in outlook." -msgstr "" +msgstr "Outlook插件文件。保存这文件并安装这插件到Outlook" #. module: outlook #: view:outlook.installer:0 msgid "Configure" -msgstr "" +msgstr "设置" diff --git a/addons/pad/i18n/zh_CN.po b/addons/pad/i18n/zh_CN.po new file mode 100644 index 00000000000..36527aef6f2 --- /dev/null +++ b/addons/pad/i18n/zh_CN.po @@ -0,0 +1,80 @@ +# Chinese (Simplified) translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-07-07 16:37+0000\n" +"Last-Translator: openerp-china.Black Jack \n" +"Language-Team: Chinese (Simplified) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" + +#. module: pad +#: code:addons/pad/web/editors.py:32 +#, python-format +msgid "Ok" +msgstr "确定" + +#. module: pad +#: code:addons/pad/web/editors.py:29 +#, python-format +msgid "Name" +msgstr "名称" + +#. module: pad +#: help:res.company,pad_index:0 +msgid "The root URL of the company's pad instance" +msgstr "公司PAD实例的根网址" + +#. module: pad +#: model:ir.model,name:pad.model_res_company +msgid "Companies" +msgstr "公司" + +#. module: pad +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "错误!您不能创建递归公司." + +#. module: pad +#: code:addons/pad/web/editors.py:17 +#, python-format +msgid "Write" +msgstr "写" + +#. module: pad +#: model:ir.module.module,description:pad.module_meta_information +msgid "" +"\n" +"Adds enhanced support for (Ether)Pad attachments in the web client, lets " +"the\n" +"company customize which Pad installation should be used to link to new pads\n" +"(by default, pad.openerp.com)\n" +" " +msgstr "" +"\n" +"在Web客户端加入增强的PAD附件支持,让公司自定义PAD的安装可以链接到新的PAD\n" +" " + +#. module: pad +#: field:res.company,pad_index:0 +msgid "Pad root URL" +msgstr "PAD根网址" + +#. module: pad +#: view:res.company:0 +msgid "Pad" +msgstr "" + +#. module: pad +#: model:ir.module.module,shortdesc:pad.module_meta_information +msgid "Enhanced support for (Ether)Pad attachments" +msgstr "增强支持PAD附件" diff --git a/addons/resource/i18n/zh_CN.po b/addons/resource/i18n/zh_CN.po index c0b27d21eef..156d24f4f2c 100644 --- a/addons/resource/i18n/zh_CN.po +++ b/addons/resource/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-05-09 10:19+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: Wei \"oldrev\" Li \n" +"PO-Revision-Date: 2011-07-07 17:24+0000\n" +"Last-Translator: openerp-china.Black Jack \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:45+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: resource #: model:ir.module.module,description:resource.module_meta_information @@ -29,6 +29,13 @@ msgid "" "\n" " " msgstr "" +"\n" +" 资源管理模块\n" +"一个资源表示某些可以做调度的东西(一个人或生产工序的工作中心)\n" +"这模块管理一个资源的日程表使其配合其它的资源。\n" +"它还能管理该资源的下级。\n" +"\n" +" " #. module: resource #: selection:resource.calendar.attendance,dayofweek:0 @@ -40,18 +47,18 @@ msgstr "周五" msgid "" "If empty, this is a generic holiday for the company. If a resource is set, " "the holiday/leave is only for this resource" -msgstr "" +msgstr "如果为空,表示公司的一个通用假期,如果设置了一个资源,假期/准假只适用于该资源。" #. module: resource #: model:ir.model,name:resource.model_resource_calendar_leaves #: view:resource.calendar.leaves:0 msgid "Leave Detail" -msgstr "" +msgstr "准假详情" #. module: resource #: model:ir.actions.act_window,name:resource.resource_calendar_resources_leaves msgid "Resources Leaves" -msgstr "" +msgstr "资源准假" #. module: resource #: model:ir.actions.act_window,name:resource.action_resource_calendar_form @@ -106,12 +113,12 @@ msgstr "工作时间开始于" #. module: resource #: constraint:resource.calendar.leaves:0 msgid "Error! leave start-date must be lower then leave end-date." -msgstr "" +msgstr "错误!准假的开始日期必须小于结束日期。" #. module: resource #: model:ir.model,name:resource.model_resource_calendar msgid "Resource Calendar" -msgstr "资源日历" +msgstr "资源日程表" #. module: resource #: view:resource.calendar.leaves:0 @@ -173,7 +180,7 @@ msgstr "日期" #. module: resource #: view:resource.calendar.leaves:0 msgid "Search Working Period Leaves" -msgstr "" +msgstr "搜索准假工作周期" #. module: resource #: field:resource.calendar.leaves,date_to:0 @@ -183,7 +190,7 @@ msgstr "结束日期" #. module: resource #: model:ir.actions.act_window,name:resource.resource_calendar_closing_days msgid "Closing Days" -msgstr "" +msgstr "休息日" #. module: resource #: model:ir.module.module,shortdesc:resource.module_meta_information @@ -201,7 +208,7 @@ msgstr "资源" #: field:resource.calendar.leaves,name:0 #: field:resource.resource,name:0 msgid "Name" -msgstr "姓名" +msgstr "名称" #. module: resource #: selection:resource.calendar.attendance,dayofweek:0 @@ -228,7 +235,7 @@ msgstr "有效" msgid "" "If the active field is set to False, it will allow you to hide the resource " "record without removing it." -msgstr "如果此字段未被选中,那么可以隐藏此记录且并不删除它。" +msgstr "如果这有效字段设为否,那么可以隐藏此记录且并不删除它。" #. module: resource #: field:resource.calendar.attendance,calendar_id:0 @@ -273,6 +280,8 @@ msgid "" "show a load of 100% for this phase by default, but if we put a efficency of " "200%, then his load will only be 50%." msgstr "" +"这字段描述该资源完成任务的效率。例如一个资源在一个任务的阶段单独放5天分配5给它,默认情况下这阶段它将是100%负荷,但如果设为效率是200%那它将只用到" +"50%的负荷。" #. module: resource #: selection:resource.calendar.attendance,dayofweek:0 @@ -288,7 +297,7 @@ msgstr "工作时间" #: model:ir.actions.act_window,name:resource.action_resource_calendar_leave_tree #: model:ir.ui.menu,name:resource.menu_view_resource_calendar_leaves_search msgid "Resource Leaves" -msgstr "" +msgstr "资源准假" #. module: resource #: view:resource.resource:0 @@ -301,7 +310,7 @@ msgid "" "Resources allow you to create and manage resources that should be involved " "in a specific project phase. You can also set their efficiency level and " "workload based on their weekly working hours." -msgstr "" +msgstr "资源允许你创建和管理资源参与的特定的计划阶段。你还能在其每周工作时间基础上设置其效率和工作量。" #. module: resource #: view:resource.resource:0 @@ -312,12 +321,12 @@ msgstr "不活跃的" #: code:addons/resource/faces/resource.py:340 #, python-format msgid "(vacation)" -msgstr "" +msgstr "(假期)" #. module: resource #: field:resource.resource,time_efficiency:0 msgid "Efficiency factor" -msgstr "" +msgstr "效率因子" #. module: resource #: selection:resource.resource,resource_type:0 @@ -327,7 +336,7 @@ msgstr "人" #. module: resource #: model:ir.model,name:resource.model_resource_calendar_attendance msgid "Work Detail" -msgstr "" +msgstr "工作细节" #. module: resource #: field:resource.calendar.leaves,date_from:0 @@ -338,7 +347,7 @@ msgstr "开始日期" #: code:addons/resource/resource.py:246 #, python-format msgid " (copy)" -msgstr "" +msgstr " (复件)" #. module: resource #: selection:resource.calendar.attendance,dayofweek:0 diff --git a/addons/share/i18n/fr.po b/addons/share/i18n/fr.po index 8609c9f5136..8ae24a48a3e 100644 --- a/addons/share/i18n/fr.po +++ b/addons/share/i18n/fr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-05-09 10:19+0000\n" -"PO-Revision-Date: 2011-01-19 12:00+0000\n" -"Last-Translator: Aline (OpenERP) \n" +"PO-Revision-Date: 2011-07-07 20:27+0000\n" +"Last-Translator: Quentin THEURET \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-10 07:45+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" #. module: share #: code:addons/share/web/editors.py:15 @@ -281,12 +281,12 @@ msgstr "L'utilisateur existe déjà" #. module: share #: field:share.wizard,user_ids:0 msgid "Existing users" -msgstr "" +msgstr "Utilisateurs existants" #. module: share #: model:ir.model,name:share.model_res_groups msgid "Access Groups" -msgstr "" +msgstr "Groupes d'accès" #. module: share #: view:share.wizard:0 diff --git a/addons/share/i18n/zh_CN.po b/addons/share/i18n/zh_CN.po new file mode 100644 index 00000000000..dcdc0c039f8 --- /dev/null +++ b/addons/share/i18n/zh_CN.po @@ -0,0 +1,478 @@ +# Chinese (Simplified) translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-05-09 10:19+0000\n" +"PO-Revision-Date: 2011-07-08 05:24+0000\n" +"Last-Translator: openerp-china.Black Jack \n" +"Language-Team: Chinese (Simplified) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" +"X-Generator: Launchpad (build 13168)\n" + +#. module: share +#: code:addons/share/web/editors.py:15 +#, python-format +msgid "Sharing" +msgstr "共享" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:462 +#, python-format +msgid "" +"This additional data has been automatically added to your current access.\n" +msgstr "这数据已自动添加到当前帐户\n" + +#. module: share +#: view:share.wizard:0 +msgid "Existing External Users" +msgstr "现有的外部用户" + +#. module: share +#: help:res.groups,share:0 +msgid "Group created to set access rights for sharing data with some users." +msgstr "群组创建为设置一些用户的共享数据访问权限" + +#. module: share +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "选择的群组不在这用允许的群组" + +#. module: share +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "你不能同时登录两个用户!" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:76 +#, python-format +msgid "Sharing Wizard - Step 1" +msgstr "共享向导 - 步骤1" + +#. module: share +#: view:share.wizard:0 +msgid "Who would you want to share this data with?" +msgstr "你想和谁共享这数据?" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:453 +#, python-format +msgid "" +"Dear,\n" +"\n" +msgstr "" +"尊敬的\n" +"\n" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:463 +#, python-format +msgid "" +"You may use your existing login and password to view it. As a reminder, your " +"login is %s.\n" +msgstr "作为提醒,你现在使用的登录名是 %s\n" + +#. module: share +#: model:ir.model,name:share.model_res_users +msgid "res.users" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Next" +msgstr "下一个" + +#. module: share +#: help:share.wizard,action_id:0 +msgid "" +"The action that opens the screen containing the data you wish to share." +msgstr "这操作是打开包含要共享数据的视图。" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:68 +#, python-format +msgid "Please specify \"share_root_url\" in context" +msgstr "请在上下文注明“share_root_url”" + +#. module: share +#: view:share.wizard:0 +msgid "Congratulations, you have successfully setup a new shared access!" +msgstr "恭喜,你已设设置好新的共享权限!" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:275 +#, python-format +msgid "(Copy for sharing)" +msgstr "(共享复制)" + +#. module: share +#: field:share.wizard.result.line,newly_created:0 +msgid "Newly created" +msgstr "创建新的" + +#. module: share +#: field:share.wizard,share_root_url:0 +msgid "Generic Share Access URL" +msgstr "一般共享访问URL" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:457 +#, python-format +msgid "" +"You may use the following login and password to get access to this protected " +"area:" +msgstr "你可以用这个用户名和密码访问到这个受保护的区域:" + +#. module: share +#: view:res.groups:0 +msgid "Regular groups only (no share groups" +msgstr "只是普通组(不是共享组)" + +#. module: share +#: selection:share.wizard,access_mode:0 +msgid "Read & Write" +msgstr "读/写" + +#. module: share +#: view:share.wizard:0 +msgid "Share wizard: step 2" +msgstr "共享向导 - 步骤2" + +#. module: share +#: view:share.wizard:0 +msgid "Share wizard: step 0" +msgstr "共享向导 - 步骤0" + +#. module: share +#: view:share.wizard:0 +msgid "Share wizard: step 1" +msgstr "共享向导 - 步骤·" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:458 +#: field:share.wizard.result.line,login:0 +#, python-format +msgid "Username" +msgstr "用户名" + +#. module: share +#: field:res.users,share:0 +msgid "Share User" +msgstr "共享用户" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:452 +#, python-format +msgid "%s has shared OpenERP %s information with you" +msgstr "%s 与你已共享系统的 %s" + +#. module: share +#: view:share.wizard:0 +msgid "Finish" +msgstr "完成" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:103 +#, python-format +msgid "" +"This username (%s) already exists, perhaps data has already been shared with " +"this person.\n" +"You may want to try selecting existing shared users instead." +msgstr "" +"这用户名(%s )已存在。也许数据已和他共享。\n" +"你需要再选择现有的用户与其共享。" + +#. module: share +#: field:share.wizard,new_users:0 +msgid "New users" +msgstr "新用户" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:149 +#, python-format +msgid "%s (Shared)" +msgstr "" + +#. module: share +#: selection:share.wizard,user_type:0 +msgid "New users (emails required)" +msgstr "" + +#. module: share +#: sql_constraint:res.groups:0 +msgid "The name of the group must be unique !" +msgstr "" + +#. module: share +#: model:ir.module.module,shortdesc:share.module_meta_information +msgid "Sharing Tools" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:460 +#, python-format +msgid "Database" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Send Email Notification(s)" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:418 +#, python-format +msgid "Sharing filter created by user %s (%s) for group %s" +msgstr "" + +#. module: share +#: view:res.groups:0 +msgid "Groups" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Select the desired shared access mode:" +msgstr "" + +#. module: share +#: field:res.groups,share:0 +msgid "Share Group" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:459 +#: field:share.wizard.result.line,password:0 +#, python-format +msgid "Password" +msgstr "" + +#. module: share +#: field:share.wizard,user_type:0 +msgid "Users to share with" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:102 +#, python-format +msgid "User already exists" +msgstr "" + +#. module: share +#: field:share.wizard,user_ids:0 +msgid "Existing users" +msgstr "" + +#. module: share +#: model:ir.model,name:share.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "" +"Please select the action that opens the screen containing the data you want " +"to share." +msgstr "" + +#. module: share +#: selection:share.wizard,user_type:0 +msgid "Existing external users" +msgstr "" + +#. module: share +#: view:share.wizard:0 +#: field:share.wizard,result_line_ids:0 +msgid "Summary" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:304 +#, python-format +msgid "Indirect sharing filter created by user %s (%s) for group %s" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:448 +#, python-format +msgid "Email required" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:240 +#, python-format +msgid "Copied access for sharing" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "" +"Optionally, you may specify an additional domain restriction that will be " +"applied to the shared data." +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "New Users (please provide one e-mail address per line below)" +msgstr "" + +#. module: share +#: model:ir.module.module,description:share.module_meta_information +msgid "" +"\n" +"\n" +" This module adds generic sharing tools to your current OpenERP " +"database,\n" +" and specifically a 'share' button that is available in the Web client " +"to\n" +" share any kind of OpenERP data with colleagues, customers, friends, " +"etc.\n" +"\n" +" The system will work by creating new users and groups on the fly, and " +"by\n" +" combining the appropriate access rights and ir.rules to ensure that the\n" +" shared users only have access to the data that has been shared with " +"them.\n" +"\n" +" This is extremely useful for collaborative work, knowledge sharing, \n" +" synchronization with other companies, etc.\n" +"\n" +" " +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:448 +#, python-format +msgid "" +"The current user must have an email address configured in User Preferences " +"to be able to send outgoing emails." +msgstr "" + +#. module: share +#: view:res.users:0 +msgid "Regular users only (no share user)" +msgstr "" + +#. module: share +#: field:share.wizard.result.line,share_url:0 +msgid "Share URL" +msgstr "" + +#. module: share +#: field:share.wizard,domain:0 +msgid "Domain" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:314 +#, python-format +msgid "" +"Sorry, the current screen and filter you are trying to share are not " +"supported at the moment.\n" +"You may want to try a simpler filter." +msgstr "" + +#. module: share +#: field:share.wizard,access_mode:0 +msgid "Access Mode" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Access info" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:454 +#, python-format +msgid "" +"To access it, you can go to the following URL:\n" +" %s" +msgstr "" + +#. module: share +#: field:share.wizard,action_id:0 +msgid "Action to share" +msgstr "" + +#. module: share +#: code:addons/share/web/editors.py:18 +#, python-format +msgid "Share" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:434 +#, python-format +msgid "Sharing Wizard - Step 2" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Here is a summary of the access points you have just created:" +msgstr "" + +#. module: share +#: model:ir.model,name:share.model_share_wizard_result_line +msgid "share.wizard.result.line" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:313 +#, python-format +msgid "Sharing access could not be setup" +msgstr "" + +#. module: share +#: model:ir.actions.act_window,name:share.action_share_wizard +#: model:ir.actions.act_window,name:share.action_share_wizard_step1 +#: model:ir.model,name:share.model_share_wizard +#: model:ir.ui.menu,name:share.menu_action_share_wizard +#: field:share.wizard.result.line,share_wizard_id:0 +msgid "Share Wizard" +msgstr "" + +#. module: share +#: help:share.wizard,user_type:0 +msgid "Select the type of user(s) you would like to share data with." +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Cancel" +msgstr "" + +#. module: share +#: view:share.wizard:0 +msgid "Close" +msgstr "" + +#. module: share +#: help:res.users,share:0 +msgid "" +"External user with limited access, created only for the purpose of sharing " +"data." +msgstr "" + +#. module: share +#: help:share.wizard,domain:0 +msgid "Optional domain for further data filtering" +msgstr "" + +#. module: share +#: selection:share.wizard,access_mode:0 +msgid "Read-only" +msgstr "" + +#. module: share +#: code:addons/share/wizard/share_wizard.py:323 +#, python-format +msgid "*usual password*" +msgstr "" diff --git a/addons/survey/i18n/ca.po b/addons/survey/i18n/ca.po index fd1019f7ea5..57d1b78beae 100644 --- a/addons/survey/i18n/ca.po +++ b/addons/survey/i18n/ca.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-05-09 10:19+0000\n" -"PO-Revision-Date: 2011-06-10 19:23+0000\n" +"PO-Revision-Date: 2011-07-07 14:53+0000\n" "Last-Translator: mgaja (GrupoIsep.com) \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-06-11 06:14+0000\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: survey @@ -31,11 +31,13 @@ msgid "" "greater than the number of answer. " "Please use a number that is smaller than %d." msgstr "" +"El nombre de respostes necessàries mínim que heu introduït és major que el " +"nombre de respostes. Utilitzeu un nombre menor que %d." #. module: survey #: view:survey.question.wiz:0 msgid "Your Messages" -msgstr "" +msgstr "Els vostres missatges" #. module: survey #: field:survey.question,comment_valid_type:0 @@ -51,6 +53,8 @@ msgid "" "your maximum is greater than the number of answer. " " Please use a number that is smaller than %d." msgstr "" +"El nombre de respostes necessàries màxim que heu introduït per al màxim és " +"major que el nombre de respostes. Utilitzeu un nombre menor que %d." #. module: survey #: view:survey:0 @@ -127,6 +131,8 @@ msgid "" "You must enter one or more menu choices in " "column heading (white spaces not allowed)" msgstr "" +"Heu d'introduir una o més opcions de menú en la capçalera de columna (no es " +"permeten espais en blanc)" #. module: survey #: field:survey.question.column.heading,in_visible_menu_choice:0 @@ -193,6 +199,8 @@ msgid "" "than the number of answer. Please use a " "number that is smaller than %d." msgstr "" +"El nombre de respostes necessàries que heu introduït és major que el nombre " +"de respostes. Utilitzeu un número menor que %d." #. module: survey #: field:survey.question,tot_resp:0 @@ -207,7 +215,7 @@ msgstr "Número de fila" #. module: survey #: model:ir.model,name:survey.model_survey_name_wiz msgid "survey.name.wiz" -msgstr "" +msgstr "enquesta.nom.assist" #. module: survey #: model:ir.actions.act_window,name:survey.action_survey_question_form @@ -245,7 +253,7 @@ msgstr "Utilitzeu si la pregunta és de tipus qualificació_escala" #: field:survey.print,page_number:0 #: field:survey.print.answer,page_number:0 msgid "Include Page Number" -msgstr "" +msgstr "Inclou número de pàgina" #. module: survey #: view:survey.page:0 @@ -312,6 +320,7 @@ msgstr "Total d'enquestes completades" #: view:survey.response.answer:0 msgid "(Use Only Question Type is matrix_of_drop_down_menus)" msgstr "" +"(utilitzeu només quan el tipus de pregunta sigui matrix_of_drop_down_menus)" #. module: survey #: model:ir.actions.report.xml,name:survey.survey_analysis @@ -323,7 +332,7 @@ msgstr "Estadístiques enquestes" #: view:survey.request:0 #: selection:survey.request,state:0 msgid "Cancelled" -msgstr "" +msgstr "Cancel·lada" #. module: survey #: selection:survey.question,type:0 @@ -483,7 +492,7 @@ msgstr "No podeu tenir dos usuaris amb el mateix identificador!" #. module: survey #: field:survey.send.invitation,mail_from:0 msgid "From" -msgstr "" +msgstr "Des de" #. module: survey #: selection:survey.question,comment_valid_type:0 @@ -590,12 +599,12 @@ msgstr "Correu electrònic" #. module: survey #: model:ir.ui.menu,name:survey.menu_answer_surveys msgid "Answer Surveys" -msgstr "" +msgstr "Respon enquestes" #. module: survey #: selection:survey.response,state:0 msgid "Not Finished" -msgstr "" +msgstr "No acabat" #. module: survey #: view:survey.print:0 @@ -716,7 +725,7 @@ msgstr "Data límit" #: selection:survey.question,comment_valid_type:0 #: selection:survey.question,validation_type:0 msgid "Must Be A Date" -msgstr "" +msgstr "Ha de ser una data" #. module: survey #: model:ir.model,name:survey.model_survey_print @@ -732,7 +741,7 @@ msgstr "Capçalera de la columna" #. module: survey #: field:survey.question,is_require_answer:0 msgid "Require Answer to Question" -msgstr "" +msgstr "Resposta obligatòria per a la pregunta" #. module: survey #: model:ir.actions.act_window,name:survey.action_survey_request_tree @@ -874,6 +883,8 @@ msgid "" "You can not give more response. Please contact the author of this survey for " "further assistance." msgstr "" +"No podeu donar més respostes. Poseu-vos en contacte amb l'autor d'aquesta " +"enquesta per obtenir més ajuda." #. module: survey #: model:ir.actions.act_window,name:survey.act_survey_page_question @@ -884,7 +895,7 @@ msgstr "Preguntes" #. module: survey #: help:survey,response_user:0 msgid "Set to one if you require only one Answer per user" -msgstr "" +msgstr "Estableix a un si només requereix una resposta per usuari." #. module: survey #: field:survey,users:0 @@ -916,7 +927,7 @@ msgstr "Número de pàgina" #: code:addons/survey/wizard/survey_answer.py:92 #, python-format msgid "Cannot locate survey for the question wizard!" -msgstr "" +msgstr "No es pot localitzar l'enquesta per a l'assistent de preguntes!" #. module: survey #: view:survey:0 @@ -942,6 +953,7 @@ msgstr "Registre" #: view:survey.question:0 msgid "When the choices do not add up correctly, display this error message" msgstr "" +"Mostra aquest missatge d'error quan les seleccions no totalitzin correctament" #. module: survey #: field:survey,date_close:0 @@ -1025,7 +1037,7 @@ msgstr "Resposta" #. module: survey #: field:survey,max_response_limit:0 msgid "Maximum Answer Limit" -msgstr "" +msgstr "Límit màxim de resposta" #. module: survey #: model:ir.actions.act_window,name:survey.action_act_view_survey_send_invitation @@ -1085,7 +1097,7 @@ msgstr "Diversos camps de text" #: selection:survey.print,orientation:0 #: selection:survey.print.answer,orientation:0 msgid "Landscape(Horizontal)" -msgstr "" +msgstr "Horitzontal" #. module: survey #: field:survey.question,no_of_rows:0 @@ -1101,7 +1113,7 @@ msgstr "Detalls de l'enquesta" #. module: survey #: selection:survey.question,type:0 msgid "Multiple Textboxes With Different Type" -msgstr "" +msgstr "Camps de text múltiples amb tipus diferent" #. module: survey #: view:survey.question.column.heading:0 @@ -1151,7 +1163,7 @@ msgstr "Número enter" #. module: survey #: model:ir.model,name:survey.model_survey_send_invitation msgid "survey.send.invitation" -msgstr "" +msgstr "enquesta.envia.invitació" #. module: survey #: field:survey.history,user_id:0 @@ -1164,7 +1176,7 @@ msgstr "Usuari/a" #. module: survey #: field:survey.name.wiz,transfer:0 msgid "Page Transfer" -msgstr "" +msgstr "Pàgina de transferència" #. module: survey #: selection:survey.response.line,state:0 diff --git a/addons/survey/i18n/zh_CN.po b/addons/survey/i18n/zh_CN.po index d83eb6a44bb..c406839e0b4 100644 --- a/addons/survey/i18n/zh_CN.po +++ b/addons/survey/i18n/zh_CN.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-05-09 10:19+0000\n" -"PO-Revision-Date: 2011-07-04 17:47+0000\n" +"PO-Revision-Date: 2011-07-07 09:42+0000\n" "Last-Translator: shjerryzhou \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-07-05 05:08+0000\n" +"X-Launchpad-Export-Date: 2011-07-08 05:53+0000\n" "X-Generator: Launchpad (build 13168)\n" #. module: survey @@ -631,6 +631,12 @@ msgid "" "invitation of the survey\n" " " msgstr "" +"\n" +" 此模块用于问卷调查。它依赖不同用户问题的答复或者回顾。\n" +" 一个问卷可以有多个页面。每个页面可以有多个问题,每个问题会有多个答案。\n" +" 针对完成的问卷,不同的用户可能给出不同的问题答案。\n" +" 对于问卷邀请,会发送带有用户名和密码的邮件给业务合作伙伴。\n" +" " #. module: survey #: code:addons/survey/wizard/survey_answer.py:124 @@ -830,7 +836,7 @@ msgstr "在矩阵列表中添加备注字段" #. module: survey #: field:survey.answer,response:0 msgid "#Answer" -msgstr "" +msgstr "答案#" #. module: survey #: field:survey.print,without_pagebreak:0 @@ -862,69 +868,69 @@ msgstr "问题" #. module: survey #: help:survey,response_user:0 msgid "Set to one if you require only one Answer per user" -msgstr "" +msgstr "如果你需要每个用户只提供一份答案,把它设为1" #. module: survey #: field:survey,users:0 msgid "Users" -msgstr "" +msgstr "用户" #. module: survey #: view:survey.send.invitation:0 msgid "Message" -msgstr "" +msgstr "消息" #. module: survey #: view:survey:0 #: view:survey.request:0 msgid "MY" -msgstr "" +msgstr "MY" #. module: survey #: field:survey.question,maximum_req_ans:0 msgid "Maximum Required Answer" -msgstr "" +msgstr "需要的最大答案数" #. module: survey #: field:survey.name.wiz,page_no:0 msgid "Page Number" -msgstr "" +msgstr "页码" #. module: survey #: code:addons/survey/wizard/survey_answer.py:92 #, python-format msgid "Cannot locate survey for the question wizard!" -msgstr "" +msgstr "无法为问题向导定位问卷!" #. module: survey #: view:survey:0 #: view:survey.page:0 #: view:survey.question:0 msgid "and" -msgstr "" +msgstr "和" #. module: survey #: model:ir.actions.act_window,name:survey.action_view_survey_print_statistics #: view:survey.print.statistics:0 msgid "Survey Print Statistics" -msgstr "" +msgstr "问卷打印统计" #. module: survey #: field:survey.send.invitation.log,note:0 msgid "Log" -msgstr "" +msgstr "日志" #. module: survey #: view:survey:0 #: view:survey.page:0 #: view:survey.question:0 msgid "When the choices do not add up correctly, display this error message" -msgstr "" +msgstr "当选项合计不正确时,显示此错误消息" #. module: survey #: field:survey,date_close:0 msgid "Survey Close Date" -msgstr "" +msgstr "问卷截止日期" #. module: survey #: field:survey,date_open:0 @@ -934,47 +940,47 @@ msgstr "调查开展日期" #. module: survey #: field:survey.question.column.heading,in_visible_rating_weight:0 msgid "Is Rating Scale Invisible ??" -msgstr "" +msgstr "评定量表是否隐藏?" #. module: survey #: view:survey.browse.answer:0 #: view:survey.name.wiz:0 msgid "Start" -msgstr "" +msgstr "开始" #. module: survey #: code:addons/survey/survey.py:477 #, python-format msgid "Maximum Required Answer is greater than Minimum Required Answer" -msgstr "" +msgstr "需要的最多答案数大于需要的最小的答案数" #. module: survey #: field:survey.question,comment_maximum_no:0 #: field:survey.question,validation_maximum_no:0 msgid "Maximum number" -msgstr "" +msgstr "最大数" #. module: survey #: selection:survey,state:0 #: selection:survey.request,state:0 #: selection:survey.response.line,state:0 msgid "Draft" -msgstr "" +msgstr "草稿" #. module: survey #: model:ir.model,name:survey.model_survey_print_statistics msgid "survey.print.statistics" -msgstr "" +msgstr "survey.print.statistics" #. module: survey #: selection:survey,state:0 msgid "Closed" -msgstr "" +msgstr "已结束" #. module: survey #: selection:survey.question,type:0 msgid "Matrix of Drop-down Menus" -msgstr "" +msgstr "下拉菜单矩阵" #. module: survey #: view:survey:0 @@ -996,138 +1002,138 @@ msgstr "" #: field:survey.send.invitation,partner_ids:0 #: field:survey.tbl.column.heading,response_table_id:0 msgid "Answer" -msgstr "" +msgstr "回复" #. module: survey #: field:survey,max_response_limit:0 msgid "Maximum Answer Limit" -msgstr "" +msgstr "最大回复限制" #. module: survey #: model:ir.actions.act_window,name:survey.action_act_view_survey_send_invitation msgid "Send Invitations" -msgstr "" +msgstr "发送邀请" #. module: survey #: field:survey.name.wiz,store_ans:0 msgid "Store Answer" -msgstr "" +msgstr "保存回复" #. module: survey #: selection:survey.question,type:0 msgid "Date and Time" -msgstr "" +msgstr "日期和时间" #. module: survey #: field:survey,state:0 #: field:survey.response,state:0 #: field:survey.response.line,state:0 msgid "Status" -msgstr "" +msgstr "状态" #. module: survey #: model:ir.actions.act_window,name:survey.action_view_survey_print msgid "Print Survey" -msgstr "" +msgstr "打印问卷" #. module: survey #: field:survey,send_response:0 msgid "E-mail Notification on Answer" -msgstr "" +msgstr "回复的邮件通知" #. module: survey #: field:survey.response.answer,value_choice:0 msgid "Value Choice" -msgstr "" +msgstr "选项值" #. module: survey #: view:survey:0 msgid "Started" -msgstr "" +msgstr "已开始" #. module: survey #: model:ir.actions.act_window,name:survey.action_view_survey_print_answer #: view:survey:0 #: view:survey.print.answer:0 msgid "Print Answer" -msgstr "" +msgstr "打印回复" #. module: survey #: selection:survey.question,type:0 msgid "Multiple Textboxes" -msgstr "" +msgstr "多个文本框" #. module: survey #: selection:survey.print,orientation:0 #: selection:survey.print.answer,orientation:0 msgid "Landscape(Horizontal)" -msgstr "" +msgstr "横向打印格式(横向的)" #. module: survey #: field:survey.question,no_of_rows:0 msgid "No of Rows" -msgstr "" +msgstr "行号" #. module: survey #: view:survey:0 #: view:survey.name.wiz:0 msgid "Survey Details" -msgstr "" +msgstr "问卷详情" #. module: survey #: selection:survey.question,type:0 msgid "Multiple Textboxes With Different Type" -msgstr "" +msgstr "不同类型的多个文本框" #. module: survey #: view:survey.question.column.heading:0 msgid "Menu Choices (each choice on separate lines)" -msgstr "" +msgstr "菜单选项(每个选项用单独的一行)" #. module: survey #: field:survey.response,response_type:0 msgid "Answer Type" -msgstr "" +msgstr "回复类型" #. module: survey #: view:survey:0 #: view:survey.page:0 #: view:survey.question:0 msgid "Validation" -msgstr "" +msgstr "验证" #. module: survey #: view:survey.request:0 #: selection:survey.request,state:0 msgid "Waiting Answer" -msgstr "" +msgstr "等待回复" #. module: survey #: selection:survey.question,comment_valid_type:0 #: selection:survey.question,validation_type:0 msgid "Must Be A Decimal Number" -msgstr "" +msgstr "必须为十进制小数" #. module: survey #: field:res.users,survey_id:0 msgid "Groups" -msgstr "" +msgstr "组" #. module: survey #: selection:survey.answer,type:0 #: selection:survey.question,type:0 msgid "Date" -msgstr "" +msgstr "日期" #. module: survey #: selection:survey.answer,type:0 msgid "Integer" -msgstr "" +msgstr "整数" #. module: survey #: model:ir.model,name:survey.model_survey_send_invitation msgid "survey.send.invitation" -msgstr "" +msgstr "survey.send.invitation" #. module: survey #: field:survey.history,user_id:0 @@ -1135,40 +1141,40 @@ msgstr "" #: field:survey.request,user_id:0 #: field:survey.response,user_id:0 msgid "User" -msgstr "" +msgstr "用户" #. module: survey #: field:survey.name.wiz,transfer:0 msgid "Page Transfer" -msgstr "" +msgstr "转页" #. module: survey #: selection:survey.response.line,state:0 msgid "Skiped" -msgstr "" +msgstr "忽略" #. module: survey #: field:survey.print,paper_size:0 #: field:survey.print.answer,paper_size:0 msgid "Paper Size" -msgstr "" +msgstr "纸张尺寸" #. module: survey #: field:survey.response.answer,column_id:0 #: field:survey.tbl.column.heading,column_id:0 msgid "Column" -msgstr "" +msgstr "栏位" #. module: survey #: model:ir.model,name:survey.model_survey_response_line msgid "Survey Response Line" -msgstr "" +msgstr "问卷回复明细" #. module: survey #: code:addons/survey/wizard/survey_selection.py:134 #, python-format msgid "You can not give response for this survey more than %s times" -msgstr "" +msgstr "不能回复此问卷超过%s次" #. module: survey #: model:ir.actions.report.xml,name:survey.report_survey_form @@ -1189,49 +1195,49 @@ msgstr "" #: field:survey.request,survey_id:0 #: field:survey.response,survey_id:0 msgid "Survey" -msgstr "" +msgstr "问卷" #. module: survey #: field:survey.question,in_visible_rating_weight:0 msgid "Is Rating Scale Invisible?" -msgstr "" +msgstr "评定量表是否隐藏?" #. module: survey #: selection:survey.question,type:0 msgid "Numerical Textboxes" -msgstr "" +msgstr "数字文本框" #. module: survey #: model:ir.model,name:survey.model_survey_question_wiz msgid "survey.question.wiz" -msgstr "" +msgstr "survey.question.wiz" #. module: survey #: view:survey:0 msgid "History" -msgstr "" +msgstr "历史记录" #. module: survey #: help:survey.browse.answer,response_id:0 msgid "" "If this field is empty, all answers of the selected survey will be print." -msgstr "" +msgstr "如果此字段为空,将打印选中问卷的所有答复。" #. module: survey #: field:survey.type,code:0 msgid "Code" -msgstr "" +msgstr "代码" #. module: survey #: model:ir.ui.menu,name:survey.menu_print_survey_statistics msgid "Surveys Statistics" -msgstr "" +msgstr "问卷统计" #. module: survey #: field:survey.print,orientation:0 #: field:survey.print.answer,orientation:0 msgid "Orientation" -msgstr "" +msgstr "定位" #. module: survey #: view:survey:0 @@ -1239,55 +1245,55 @@ msgstr "" #: view:survey.page:0 #: view:survey.question:0 msgid "Seq" -msgstr "" +msgstr "序号" #. module: survey #: field:survey.request,email:0 msgid "E-mail" -msgstr "" +msgstr "电子邮件" #. module: survey #: field:survey.question,comment_minimum_no:0 #: field:survey.question,validation_minimum_no:0 msgid "Minimum number" -msgstr "" +msgstr "最小数" #. module: survey #: field:survey.question,req_ans:0 msgid "#Required Answer" -msgstr "" +msgstr "回复#" #. module: survey #: field:survey.answer,sequence:0 #: field:survey.question,sequence:0 msgid "Sequence" -msgstr "" +msgstr "序号" #. module: survey #: field:survey.question,comment_label:0 msgid "Field Label" -msgstr "" +msgstr "字段标签" #. module: survey #: view:survey:0 msgid "Other" -msgstr "" +msgstr "其它" #. module: survey #: view:survey.request:0 #: selection:survey.request,state:0 msgid "Done" -msgstr "" +msgstr "已完成" #. module: survey #: view:survey:0 msgid "Test Survey" -msgstr "" +msgstr "测试问卷" #. module: survey #: field:survey.question,rating_allow_one_column_require:0 msgid "Allow Only One Answer per Column (Forced Ranking)" -msgstr "" +msgstr "每个栏位只允许一个答复(强制性排名)" #. module: survey #: view:survey:0 @@ -1298,29 +1304,29 @@ msgstr "" #: view:survey.print.statistics:0 #: view:survey.send.invitation:0 msgid "Cancel" -msgstr "" +msgstr "取消" #. module: survey #: view:survey:0 msgid "Close" -msgstr "" +msgstr "结束" #. module: survey #: field:survey.question,comment_minimum_float:0 #: field:survey.question,validation_minimum_float:0 msgid "Minimum decimal number" -msgstr "" +msgstr "最小的十进制数" #. module: survey #: view:survey:0 #: selection:survey,state:0 msgid "Open" -msgstr "" +msgstr "开始" #. module: survey #: field:survey,tot_start_survey:0 msgid "Total Started Survey" -msgstr "" +msgstr "已开始的文件总数" #. module: survey #: code:addons/survey/survey.py:467 @@ -1328,100 +1334,100 @@ msgstr "" msgid "" "#Required Answer you entered is greater than the number of answer. Please " "use a number that is smaller than %d." -msgstr "" +msgstr "你输入的回复#大于回复的总数。请使用小于%d的数。" #. module: survey #: help:survey,max_response_limit:0 msgid "Set to one if survey is answerable only once" -msgstr "" +msgstr "设为1,如果问卷只可以回复一次" #. module: survey #: selection:survey.response,state:0 msgid "Finished " -msgstr "" +msgstr "已结束 " #. module: survey #: model:ir.model,name:survey.model_survey_question_column_heading msgid "Survey Question Column Heading" -msgstr "" +msgstr "问卷问题标题栏" #. module: survey #: field:survey.answer,average:0 msgid "#Avg" -msgstr "" +msgstr "平均#" #. module: survey #: selection:survey.question,type:0 msgid "Matrix of Choices (Multiple Answers Per Row)" -msgstr "" +msgstr "选项矩阵(每行含有多个答案)" #. module: survey #: model:ir.actions.act_window,name:survey.action_view_survey_name msgid "Give Survey Answer" -msgstr "" +msgstr "回复问卷" #. module: survey #: model:ir.model,name:survey.model_res_users msgid "res.users" -msgstr "" +msgstr "res.users" #. module: survey #: view:survey:0 msgid "Current" -msgstr "" +msgstr "当前" #. module: survey #: selection:survey.response.line,state:0 msgid "Answered" -msgstr "" +msgstr "已答复" #. module: survey #: code:addons/survey/wizard/survey_answer.py:433 #, python-format msgid "Complete Survey Answer" -msgstr "" +msgstr "完成问卷回复" #. module: survey #: selection:survey.question,type:0 msgid "Comment/Essay Box" -msgstr "" +msgstr "备注/随笔框" #. module: survey #: field:survey.answer,type:0 msgid "Type of Answer" -msgstr "" +msgstr "回复类型" #. module: survey #: field:survey.question,required_type:0 msgid "Respondent must answer" -msgstr "" +msgstr "调查人必须答复" #. module: survey #: model:ir.actions.act_window,name:survey.action_view_survey_send_invitation #: view:survey.send.invitation:0 msgid "Send Invitation" -msgstr "" +msgstr "发送邀请" #. module: survey #: code:addons/survey/wizard/survey_answer.py:793 #, python-format msgid "You cannot select the same answer more than one time" -msgstr "" +msgstr "不能选择多次选择同样的答案" #. module: survey #: view:survey.question:0 msgid "Search Question" -msgstr "" +msgstr "查询问题" #. module: survey #: field:survey,title:0 msgid "Survey Title" -msgstr "" +msgstr "问卷标题" #. module: survey #: selection:survey.question,type:0 msgid "Single Textbox" -msgstr "" +msgstr "单行文本框" #. module: survey #: field:survey,note:0 @@ -1430,49 +1436,49 @@ msgstr "" #: field:survey.page,note:0 #: view:survey.response.line:0 msgid "Description" -msgstr "" +msgstr "描述" #. module: survey #: view:survey.name.wiz:0 msgid "Select Survey" -msgstr "" +msgstr "选择问卷" #. module: survey #: selection:survey.question,required_type:0 msgid "At Least" -msgstr "" +msgstr "至少" #. module: survey #: model:ir.actions.act_window,name:survey.action_view_survey_send_invitation_log #: model:ir.model,name:survey.model_survey_send_invitation_log msgid "survey.send.invitation.log" -msgstr "" +msgstr "survey.send.invitation.log" #. module: survey #: selection:survey.print,orientation:0 #: selection:survey.print.answer,orientation:0 msgid "Portrait(Vertical)" -msgstr "" +msgstr "纵向打印(纵向)" #. module: survey #: selection:survey.question,comment_valid_type:0 #: selection:survey.question,validation_type:0 msgid "Must Be Specific Length" -msgstr "" +msgstr "必须为指定的长度" #. module: survey #: view:survey:0 #: view:survey.page:0 #: field:survey.question,page_id:0 msgid "Survey Page" -msgstr "" +msgstr "问卷页面" #. module: survey #: view:survey:0 #: view:survey.page:0 #: view:survey.question:0 msgid "Required Answer" -msgstr "" +msgstr "需要的答复" #. module: survey #: code:addons/survey/survey.py:473 @@ -1480,34 +1486,34 @@ msgstr "" msgid "" "Minimum Required Answer you entered is greater than the number of answer. " "Please use a number that is smaller than %d." -msgstr "" +msgstr "你输入的最少需要的答复大于答复总数。请用小于%d的数。" #. module: survey #: code:addons/survey/survey.py:458 #, python-format msgid "You must enter one or more answer." -msgstr "" +msgstr "必须输入一个或多个答复。" #. module: survey #: model:ir.actions.report.xml,name:survey.survey_browse_response #: field:survey.browse.answer,response_id:0 msgid "Survey Answers" -msgstr "" +msgstr "问卷答复" #. module: survey #: view:survey.browse.answer:0 msgid "Select Survey and related answer" -msgstr "" +msgstr "选择问卷和对应的答复" #. module: survey #: model:ir.ui.menu,name:survey.menu_print_survey_answer msgid "Surveys Answers" -msgstr "" +msgstr "问卷答复" #. module: survey #: model:ir.actions.act_window,name:survey.act_survey_pages msgid "Pages" -msgstr "" +msgstr "页面" #. module: survey #: code:addons/survey/survey.py:406 @@ -1516,34 +1522,34 @@ msgid "" "#Required Answer you entered is greater " "than the number of answer. Please use a " "number that is smaller than %d." -msgstr "" +msgstr "你输入的需要的答复#大于答复数量。请用小于%d的数。" #. module: survey #: code:addons/survey/wizard/survey_answer.py:985 #, python-format msgid "You cannot select same answer more than one time'" -msgstr "" +msgstr "不能多次选择同样的答复" #. module: survey #: selection:survey.print,paper_size:0 #: selection:survey.print.answer,paper_size:0 msgid "Legal (8.5\" x 14\")" -msgstr "" +msgstr "Legal (8.5\" x 14\")" #. module: survey #: field:survey.type,name:0 msgid "Name" -msgstr "" +msgstr "名称" #. module: survey #: view:survey.page:0 msgid "#Questions" -msgstr "" +msgstr "问题#" #. module: survey #: model:ir.model,name:survey.model_survey_response msgid "survey.response" -msgstr "" +msgstr "survey.response" #. module: survey #: field:survey.question,comment_valid_err_msg:0 @@ -1551,24 +1557,24 @@ msgstr "" #: field:survey.question,numeric_required_sum_err_msg:0 #: field:survey.question,validation_valid_err_msg:0 msgid "Error message" -msgstr "" +msgstr "错误消息" #. module: survey #: model:ir.module.module,shortdesc:survey.module_meta_information msgid "Survey Module" -msgstr "" +msgstr "问卷模块" #. module: survey #: view:survey.send.invitation:0 #: field:survey.send.invitation,send_mail:0 msgid "Send mail for new user" -msgstr "" +msgstr "发送邮件给新用户" #. module: survey #: code:addons/survey/survey.py:387 #, python-format msgid "You must enter one or more Answer." -msgstr "" +msgstr "你必须输入一个或多个答复。" #. module: survey #: code:addons/survey/survey.py:416 @@ -1577,19 +1583,19 @@ msgid "" "Minimum Required Answer you entered is " "greater than the number of answer. Please " "use a number that is smaller than %d." -msgstr "" +msgstr "你输入的最少需要的答复数大于答复总数。请用小于%d的数。" #. module: survey #: field:survey.answer,menu_choice:0 msgid "Menu Choices" -msgstr "" +msgstr "菜单选项" #. module: survey #: field:survey,page_ids:0 #: view:survey.question:0 #: field:survey.response.line,page_id:0 msgid "Page" -msgstr "" +msgstr "页面" #. module: survey #: code:addons/survey/survey.py:438 @@ -1597,80 +1603,80 @@ msgstr "" msgid "" "Maximum Required Answer is greater than " "Minimum Required Answer" -msgstr "" +msgstr "最多需要的答复数大于最少需要的答复数" #. module: survey #: view:survey.send.invitation.log:0 msgid "User creation" -msgstr "" +msgstr "创建用户" #. module: survey #: selection:survey.question,required_type:0 msgid "All" -msgstr "" +msgstr "全选" #. module: survey #: selection:survey.question,comment_valid_type:0 #: selection:survey.question,validation_type:0 msgid "Must Be An Email Address" -msgstr "" +msgstr "必须为邮件地址" #. module: survey #: selection:survey.question,type:0 msgid "Multiple Choice (Only One Answer)" -msgstr "" +msgstr "多选(只有一个答复)" #. module: survey #: field:survey.answer,in_visible_answer_type:0 msgid "Is Answer Type Invisible??" -msgstr "" +msgstr "是否隐藏答复类型?" #. module: survey #: model:ir.model,name:survey.model_survey_print_answer msgid "survey.print.answer" -msgstr "" +msgstr "survey.print.answer" #. module: survey #: view:survey.answer:0 msgid "Menu Choices (each choice on separate by lines)" -msgstr "" +msgstr "菜单选项(每个选项放在单行)" #. module: survey #: selection:survey.answer,type:0 msgid "Float" -msgstr "" +msgstr "浮点数" #. module: survey #: view:survey.response.line:0 msgid "Single Textboxes" -msgstr "" +msgstr "单行文本框" #. module: survey #: code:addons/survey/wizard/survey_send_invitation.py:74 #, python-format msgid "%sSurvey is not in open state" -msgstr "" +msgstr "%s问卷不是启用状态" #. module: survey #: field:survey.question.column.heading,rating_weight:0 msgid "Weight" -msgstr "" +msgstr "重要性" #. module: survey #: selection:survey.answer,type:0 msgid "Date & Time" -msgstr "" +msgstr "日期和时间" #. module: survey #: field:survey.response,date_create:0 #: field:survey.response.line,date_create:0 msgid "Create Date" -msgstr "" +msgstr "创建日期" #. module: survey #: field:survey.question,column_name:0 msgid "Column Name" -msgstr "" +msgstr "列名" #. module: survey #: model:ir.actions.act_window,name:survey.action_survey_page_form @@ -1678,37 +1684,37 @@ msgstr "" #: model:ir.ui.menu,name:survey.menu_survey_page_form1 #: view:survey.page:0 msgid "Survey Pages" -msgstr "" +msgstr "问卷页面" #. module: survey #: field:survey.question,numeric_required_sum:0 msgid "Sum of all choices" -msgstr "" +msgstr "所有选择总数" #. module: survey #: selection:survey.question,type:0 #: view:survey.response.line:0 msgid "Table" -msgstr "" +msgstr "表格(Table)" #. module: survey #: code:addons/survey/survey.py:642 #, python-format msgid "You cannot duplicate the resource!" -msgstr "" +msgstr "无法复制资源!" #. module: survey #: field:survey.question,comment_minimum_date:0 #: field:survey.question,validation_minimum_date:0 msgid "Minimum date" -msgstr "" +msgstr "最小日期" #. module: survey #: field:survey,response_user:0 msgid "Maximum Answer per User" -msgstr "" +msgstr "没用户最多答复数" #. module: survey #: field:survey.name.wiz,page:0 msgid "Page Position" -msgstr "" +msgstr "页面位置" From 0046b4558ed232920028c7d55931cdea60fc2b0f Mon Sep 17 00:00:00 2001 From: "RavishchanraMurari (Open ERP)" Date: Fri, 8 Jul 2011 16:00:47 +0530 Subject: [PATCH 243/831] added tools tips bzr revid: rmu@tinyerp.com-20110708103047-eck3ijxd1mouvppy --- addons/account/account_invoice_view.xml | 4 ++-- addons/crm/crm_lead.py | 4 ++-- addons/mrp/mrp_view.xml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index ed45c705674..6ec9d736fd0 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -203,7 +203,7 @@ - + + + + + + + + + + + + diff --git a/addons/base_export/__init__.py b/addons/base_export/__init__.py deleted file mode 100644 index 4a64491e6bb..00000000000 --- a/addons/base_export/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/python -import controllers diff --git a/addons/base_export/__openerp__.py b/addons/base_export/__openerp__.py deleted file mode 100644 index 53347c57d04..00000000000 --- a/addons/base_export/__openerp__.py +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "Base Export", - "version": "2.0", - "depends": ['base'], - "js": [ - 'static/src/js/base_export.js' - ], - "css": ["static/src/css/base_export.css"], - 'active': True -} diff --git a/addons/base_export/controllers/__init__.py b/addons/base_export/controllers/__init__.py deleted file mode 100644 index 039d9715fab..00000000000 --- a/addons/base_export/controllers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -import main \ No newline at end of file diff --git a/addons/base_export/controllers/main.py b/addons/base_export/controllers/main.py deleted file mode 100644 index 3aa73147ebb..00000000000 --- a/addons/base_export/controllers/main.py +++ /dev/null @@ -1,260 +0,0 @@ -from base.controllers.main import View -import openerpweb -import StringIO -import csv -import xml.dom.minidom -import re - -def export_csv(fields, result): - fp = StringIO.StringIO() - writer = csv.writer(fp, quoting=csv.QUOTE_ALL) - - writer.writerow(fields) - - for data in result: - row = [] - for d in data: - if isinstance(d, basestring): - d = d.replace('\n',' ').replace('\t',' ') - try: - d = d.encode('utf-8') - except: - pass - if d is False: d = None - row.append(d) - writer.writerow(row) - - fp.seek(0) - data = fp.read() - fp.close() - return data - -def export_xls(fieldnames, table): - try: - import xlwt - except ImportError: - common.error(_('Import Error.'), _('Please install xlwt library to export to MS Excel.')) - - workbook = xlwt.Workbook() - worksheet = workbook.add_sheet('Sheet 1') - - for i, fieldname in enumerate(fieldnames): - worksheet.write(0, i, str(fieldname)) - worksheet.col(i).width = 8000 # around 220 pixels - - style = xlwt.easyxf('align: wrap yes') - - for row_index, row in enumerate(table): - for cell_index, cell_value in enumerate(row): - cell_value = str(cell_value) - cell_value = re.sub("\r", " ", cell_value) - worksheet.write(row_index + 1, cell_index, cell_value, style) - - - fp = StringIO.StringIO() - workbook.save(fp) - fp.seek(0) - data = fp.read() - fp.close() - #return data.decode('ISO-8859-1') - return unicode(data, 'utf-8', 'replace') - -def node_attributes(node): - attrs = node.attributes - - if not attrs: - return {} - # localName can be a unicode string, we're using attribute names as - # **kwargs keys and python-level kwargs don't take unicode keys kindly - # (they blow up) so we need to ensure all keys are ``str`` - return dict([(str(attrs.item(i).localName), attrs.item(i).nodeValue) - for i in range(attrs.length)]) - -def _fields_get_all(req, model, views, context=None): - - if context is None: - context = {} - - def parse(root, fields): - for node in root.childNodes: - if node.nodeName in ('form', 'notebook', 'page', 'group', 'tree', 'hpaned', 'vpaned'): - parse(node, fields) - elif node.nodeName=='field': - attrs = node_attributes(node) - name = attrs['name'] - fields[name].update(attrs) - return fields - - def get_view_fields(view): - return parse( - xml.dom.minidom.parseString(view['arch'].encode('utf-8')).documentElement, - view['fields']) - - model_obj = req.session.model(model) - tree_view = model_obj.fields_view_get(views.get('tree', False), 'tree', context) - form_view = model_obj.fields_view_get(views.get('form', False), 'form', context) - fields = {} - fields.update(get_view_fields(tree_view)) - fields.update(get_view_fields(form_view)) - return fields - - -class Export(View): - _cp_path = "/base_export/export" - - def fields_get(self, req, model): - Model = req.session.model(model) - fields = Model.fields_get(False, req.session.eval_context(req.context)) - return fields - - @openerpweb.jsonrequest - def get_fields(self, req, model, prefix='', name= '', field_parent=None, params={}): - import_compat = params.get("import_compat", False) - views_id = params.get("views_id", {}) - - fields = _fields_get_all(req, model, views=views_id, context=req.session.eval_context(req.context)) - field_parent_type = params.get("parent_field_type",False) - - if import_compat and field_parent_type and field_parent_type == "many2one": - fields = {} - - fields.update({'id': {'string': 'ID'}, '.id': {'string': 'Database ID'}}) - records = [] - fields_order = fields.keys() - fields_order.sort(lambda x,y: -cmp(fields[x].get('string', ''), fields[y].get('string', ''))) - - for index, field in enumerate(fields_order): - value = fields[field] - record = {} - if import_compat and value.get('readonly', False): - ok = False - for sl in value.get('states', {}).values(): - for s in sl: - ok = ok or (s==['readonly',False]) - if not ok: continue - - id = prefix + (prefix and '/'or '') + field - nm = name + (name and '/' or '') + value['string'] - record.update(id=id, string= nm, action='javascript: void(0)', - target=None, icon=None, children=[], field_type=value.get('type',False), required=value.get('required', False)) - records.append(record) - - if len(nm.split('/')) < 3 and value.get('relation', False): - if import_compat: - ref = value.pop('relation') - cfields = self.fields_get(req, ref) - if (value['type'] == 'many2many'): - record['children'] = [] - record['params'] = {'model': ref, 'prefix': id, 'name': nm} - - elif value['type'] == 'many2one': - record['children'] = [id + '/id', id + '/.id'] - record['params'] = {'model': ref, 'prefix': id, 'name': nm} - - else: - cfields_order = cfields.keys() - cfields_order.sort(lambda x,y: -cmp(cfields[x].get('string', ''), cfields[y].get('string', ''))) - children = [] - for j, fld in enumerate(cfields_order): - cid = id + '/' + fld - cid = cid.replace(' ', '_') - children.append(cid) - record['children'] = children or [] - record['params'] = {'model': ref, 'prefix': id, 'name': nm} - else: - ref = value.pop('relation') - cfields = self.fields_get(req, ref) - cfields_order = cfields.keys() - cfields_order.sort(lambda x,y: -cmp(cfields[x].get('string', ''), cfields[y].get('string', ''))) - children = [] - for j, fld in enumerate(cfields_order): - cid = id + '/' + fld - cid = cid.replace(' ', '_') - children.append(cid) - record['children'] = children or [] - record['params'] = {'model': ref, 'prefix': id, 'name': nm} - - records.reverse() - return records - - @openerpweb.jsonrequest - def save_export_lists(self, req, name, model, field_list): - result = {'resource':model, 'name':name, 'export_fields': []} - for field in field_list: - result['export_fields'].append((0, 0, {'name': field})) - return req.session.model("ir.exports").create(result, req.session.eval_context(req.context)) - - @openerpweb.jsonrequest - def exist_export_lists(self, req, model): - export_model = req.session.model("ir.exports") - return export_model.read(export_model.search([('resource', '=', model)]), ['name']) - - @openerpweb.jsonrequest - def delete_export(self, req, export_id): - req.session.model("ir.exports").unlink(export_id, req.session.eval_context(req.context)) - return True - - @openerpweb.jsonrequest - def namelist(self,req, model, export_id): - - result = self.get_data(req, model, req.session.eval_context(req.context)) - ir_export_obj = req.session.model("ir.exports") - ir_export_line_obj = req.session.model("ir.exports.line") - - field = ir_export_obj.read(export_id) - fields = ir_export_line_obj.read(field['export_fields']) - - name_list = {} - [name_list.update({field['name']: result.get(field['name'])}) for field in fields] - return name_list - - def get_data(self, req, model, context=None): - ids = [] - context = context or {} - fields_data = {} - proxy = req.session.model(model) - fields = self.fields_get(req, model) - if not ids: - f1 = proxy.fields_view_get(False, 'tree', context)['fields'] - f2 = proxy.fields_view_get(False, 'form', context)['fields'] - - fields = dict(f1) - fields.update(f2) - fields.update({'id': {'string': 'ID'}, '.id': {'string': 'Database ID'}}) - - def rec(fields): - _fields = {'id': 'ID' , '.id': 'Database ID' } - def model_populate(fields, prefix_node='', prefix=None, prefix_value='', level=2): - fields_order = fields.keys() - fields_order.sort(lambda x,y: -cmp(fields[x].get('string', ''), fields[y].get('string', ''))) - - for field in fields_order: - fields_data[prefix_node+field] = fields[field] - if prefix_node: - fields_data[prefix_node + field]['string'] = '%s%s' % (prefix_value, fields_data[prefix_node + field]['string']) - st_name = fields[field]['string'] or field - _fields[prefix_node+field] = st_name - if fields[field].get('relation', False) and level>0: - fields2 = self.fields_get(req, fields[field]['relation']) - fields2.update({'id': {'string': 'ID'}, '.id': {'string': 'Database ID'}}) - model_populate(fields2, prefix_node+field+'/', None, st_name+'/', level-1) - model_populate(fields) - return _fields - return rec(fields) - - @openerpweb.jsonrequest - def export_data(self, req, model, fields, ids, domain, import_compat=False, export_format="csv", context=None): - context = req.session.eval_context(req.context) - modle_obj = req.session.model(model) - ids = ids or modle_obj.search(domain, context=context) - - field = fields.keys() - result = modle_obj.export_data(ids, field , context).get('datas',[]) - - if not import_compat: - field = [val.strip() for val in fields.values()] - - if export_format == 'xls': - return export_xls(field, result) - else: - return export_csv(field, result) diff --git a/addons/base_export/static/src/img/collapse.gif b/addons/base_export/static/src/img/collapse.gif deleted file mode 100644 index 759e72ebcfe18bc1bc714b6451c301b12a1f27d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 zcmZ?wbhEHb6krfwSjfZx1Zin$|G_} - - - Export - - - - - - - - - - - - - - -
      - This wizard will export all data that matches the current search criteria to a CSV file. - You can export all data or only the fields that can be reimported after modification. -
      - - - - - - - - -
      - - - -
      -
      - - - - - - - - - - - -
      Available fieldsFields to export - Save fields list -
      -
      -
      -
      -
      -
      - - - - - - - - - - -
      - -
      - -
      - -
      -
      - -
      -
      -
      - - - - - -
      Name
      -
      - - - - - - - - - - - - - - -
      &nbsp; - - - - - - - - - -
      - - -
      -
      - - - - - - - - - - - - - - - - - - - \ No newline at end of file From a0a95f2a6ea94f56e678602ae09eebbc8bd04cba Mon Sep 17 00:00:00 2001 From: "Kunal Chavda (OpenERP)" Date: Fri, 22 Jul 2011 18:31:57 +0530 Subject: [PATCH 440/831] [IMP]Remove style from selection box. bzr revid: kch@tinyerp.com-20110722130157-ijq40kghbk16io4m --- addons/base/static/src/xml/base.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index fee6a07281b..ad55f2f90a5 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -951,7 +951,7 @@ - From 66a054ab7d8df6ee6dc7cbd3b7e549766e064afa Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Fri, 22 Jul 2011 16:28:24 +0200 Subject: [PATCH 441/831] [IMP] get rid of base.html bzr revid: al@openerp.com-20110722142824-u7j7gu3o00skliwi --- addons/base/__openerp__.py | 33 +++++++ addons/base/controllers/main.py | 146 ++++++++++++++++++---------- addons/base/static/src/base.html | 56 ----------- addons/base/static/src/js/chrome.js | 10 +- openerpweb/openerpweb.py | 4 +- 5 files changed, 133 insertions(+), 116 deletions(-) delete mode 100644 addons/base/static/src/base.html diff --git a/addons/base/__openerp__.py b/addons/base/__openerp__.py index da2b345d217..c2484c9ed4c 100644 --- a/addons/base/__openerp__.py +++ b/addons/base/__openerp__.py @@ -3,4 +3,37 @@ "version" : "2.0", "depends" : [], 'active': True, + 'js' : [ + "static/lib/LABjs/LAB.js", + "static/lib/datejs/date-en-US.js", + "static/lib/jquery/jquery-1.5.2.js", + "static/lib/jquery.ba-bbq/jquery.ba-bbq.js", + "static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js", + "static/lib/jquery.superfish/js/hoverIntent.js", + "static/lib/jquery.superfish/js/superfish.js", + "static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js", + "static/lib/jquery.ui/js/jquery-ui-timepicker-addon.js", + "static/lib/jquery.ui.notify/js/jquery.notify.js", + "static/lib/json/json2.js", + "static/lib/qweb/qweb2.js", + "static/lib/underscore/underscore.js", + "static/lib/underscore/underscore.string.js", + "static/src/js/base.js", + "static/src/js/chrome.js", + "static/src/js/controller.js", + "static/src/js/views.js", + "static/src/js/data.js", + "static/src/js/dates.js", + "static/src/js/form.js", + "static/src/js/list.js", + "static/src/js/list-editable.js", + "static/src/js/search.js", + "static/src/js/view_tree.js", + ], + 'css' : [ + "static/lib/jquery.superfish/css/superfish.css", + "static/lib/jquery.ui/css/smoothness/jquery-ui-1.8.9.custom.css", + "static/lib/jquery.ui.notify/css/ui.notify.css", + "static/src/css/base.css", + ], } diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index da471499087..9f470e250ec 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -54,6 +54,99 @@ class Xml2Json: # OpenERP Web base Controllers #---------------------------------------------------------- +def manifest_glob(addons, key): + files = [] + for addon in addons: + globlist = openerpweb.addons_manifest.get(addon, {}).get(key, []) + print globlist + for pattern in globlist: + for path in glob.glob(os.path.join(openerpweb.path_addons, addon, pattern)): + files.append(path[len(openerpweb.path_addons):]) + return files + +def concat_files(file_list): + """ Concatenate file content + return (concat,timestamp) + concat: concatenation of file content + timestamp: max(os.path.getmtime of file_list) + """ + root = openerpweb.path_root + files_content = [] + files_timestamp = 0 + for i in file_list: + fname = os.path.join(root, i) + ftime = os.path.getmtime(fname) + if ftime > files_timestamp: + files_timestamp = ftime + files_content = open(fname).read() + files_concat = "".join(files_content) + return files_concat + +class WebClient(openerpweb.Controller): + _cp_path = "/base/webclient" + + @openerpweb.jsonrequest + def csslist(self, req, mods='base'): + return manifest_glob(mods.split(','), 'css') + + @openerpweb.jsonrequest + def jslist(self, req, mods='base'): + return manifest_glob(mods.split(','), 'js') + + @openerpweb.httprequest + def css(self, req, mods='base'): + cherrypy.response.headers['Content-Type'] = 'text/css' + files = manifest_glob(mods.split(','), 'css') + concat = concat_files(files)[0] + # TODO request set the Date of last modif and Etag + return concat + + @openerpweb.httprequest + def js(self, req, mods='base'): + cherrypy.response.headers['Content-Type'] = 'application/javascript' + files = manifest_glob(mods.split(','), 'js') + concat = concat_files(files)[0] + # TODO request set the Date of last modif and Etag + return concat + + @openerpweb.httprequest + def home(self, req): + template =""" + + + + OpenERP + %s + + + %s + + + + + """.replace('\n'+' '*8,'\n') + + # script tags + jslist = ['/base/webclient/js'] + if 1: # debug == 1 + jslist = manifest_glob(['base'], 'js') + js = "\n ".join([''%i for i in jslist]) + + # css tags + csslist = ['/base/webclient/css'] + if 1: # debug == 1 + csslist = manifest_glob(['base'], 'css') + css = "\n ".join([''%i for i in csslist]) + r = template % (js, css) + return r + class Database(openerpweb.Controller): _cp_path = "/base/database" @@ -71,37 +164,6 @@ class Database(openerpweb.Controller): class Session(openerpweb.Controller): _cp_path = "/base/session" - def manifest_glob(self, addons, key): - files = [] - for addon in addons: - globlist = openerpweb.addons_manifest.get(addon, {}).get(key, []) - - files.extend([ - resource_path[len(openerpweb.path_addons):] - for pattern in globlist - for resource_path in glob.glob(os.path.join( - openerpweb.path_addons, addon, pattern)) - ]) - return files - - def concat_files(self, file_list): - """ Concatenate file content - return (concat,timestamp) - concat: concatenation of file content - timestamp: max(os.path.getmtime of file_list) - """ - root = openerpweb.path_root - files_content = [] - files_timestamp = 0 - for i in file_list: - fname = os.path.join(root, i) - ftime = os.path.getmtime(fname) - if ftime > files_timestamp: - files_timestamp = ftime - files_content = open(fname).read() - files_concat = "".join(files_content) - return files_concat - @openerpweb.jsonrequest def login(self, req, db, login, password): req.session.login(db, login, password) @@ -122,28 +184,6 @@ class Session(openerpweb.Controller): for name, manifest in openerpweb.addons_manifest.iteritems() if manifest.get('active', True)]} - @openerpweb.jsonrequest - def csslist(self, req, mods='base'): - return {'files': self.manifest_glob(mods.split(','), 'css')} - - @openerpweb.jsonrequest - def jslist(self, req, mods='base'): - return {'files': self.manifest_glob(mods.split(','), 'js')} - - def css(self, req, mods='base'): - files = self.manifest_glob(mods.split(','), 'css') - concat = self.concat_files(files)[0] - # TODO request set the Date of last modif and Etag - return concat - css.exposed = True - - def js(self, req, mods='base'): - files = self.manifest_glob(mods.split(','), 'js') - concat = self.concat_files(files)[0] - # TODO request set the Date of last modif and Etag - return concat - js.exposed = True - @openerpweb.jsonrequest def eval_domain_and_context(self, req, contexts, domains, group_by_seq=None): diff --git a/addons/base/static/src/base.html b/addons/base/static/src/base.html deleted file mode 100644 index 0c615ed8903..00000000000 --- a/addons/base/static/src/base.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - OpenERP - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 72782625d67..590955fffab 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -453,13 +453,13 @@ openerp.base.Session = openerp.base.Controller.extend( /** @lends openerp.base.S this.rpc('/base/session/modules', {}, function(result) { self.module_list = result['modules']; var modules = self.module_list.join(','); - self.rpc('/base/session/csslist', {mods: modules}, self.do_load_css); - self.rpc('/base/session/jslist', {"mods": modules}, self.debug ? self.do_load_modules_debug : self.do_load_modules_prod); + self.rpc('/base/webclient/csslist', {mods: modules}, self.do_load_css); + self.rpc('/base/webclient/jslist', {"mods": modules}, self.debug ? self.do_load_modules_debug : self.do_load_modules_prod); openerp._modules_loaded = true; }); }, do_load_css: function (result) { - _.each(result.files, function (file) { + _.each(result, function (file) { $('head').append($('', { 'href': file, 'rel': 'stylesheet', @@ -469,7 +469,7 @@ openerp.base.Session = openerp.base.Controller.extend( /** @lends openerp.base.S }, do_load_modules_debug: function(result) { $LAB.setOptions({AlwaysPreserveOrder: true}) - .script(result.files) + .script(result) .wait(this.on_modules_loaded); }, do_load_modules_prod: function() { @@ -845,7 +845,7 @@ openerp.base.WebClient = openerp.base.Controller.extend({ init: function(element_id) { this._super(null, element_id); - QWeb.add_template("xml/base.xml"); + QWeb.add_template("/base/static/src/xml/base.xml"); var params = {}; if(jQuery.param != undefined && jQuery.deparam(jQuery.param.querystring()).kitten != undefined) { this.$element.addClass("kitten-mode-activated"); diff --git a/openerpweb/openerpweb.py b/openerpweb/openerpweb.py index eee0a4eec20..1e5c3cf8b92 100644 --- a/openerpweb/openerpweb.py +++ b/openerpweb/openerpweb.py @@ -407,7 +407,7 @@ class Root(object): if path_addons not in sys.path: sys.path.insert(0, path_addons) for i in os.listdir(path_addons): - if i not in sys.modules: + if i not in addons_module: manifest_path = os.path.join(path_addons, i, '__openerp__.py') if os.path.isfile(manifest_path): manifest = eval(open(manifest_path).read()) @@ -445,7 +445,7 @@ class Root(object): #for the mobile web client we are supposed to use a different url to just add '/mobile' raise cherrypy.HTTPRedirect('/web_mobile/static/src/web_mobile.html', 301) else: - raise cherrypy.HTTPRedirect('/base/static/src/base.html', 301) + raise cherrypy.HTTPRedirect('/base/webclient/home', 301) default.exposed = True def main(argv): From e92ea8a7accf6632f30ba03004b4bd6b239ff700 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 22 Jul 2011 17:01:14 +0200 Subject: [PATCH 442/831] [ADD] resequencing of list rows bzr revid: xmo@openerp.com-20110722150114-paufrw3vjt9n3uec --- addons/base/static/src/js/list.js | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 6bed26ce692..1c3b1cfdc4c 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -1086,6 +1086,45 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas }); return d.promise(); }, + setup_resequence_rows: function (list, dataset) { + // drag and drop enabled if list is not sorted and there is a + // "sequence" column in the view. + if ((dataset.sort && dataset.sort()) + || !_(this.columns).any(function (column) { + return column.name === 'sequence'; })) { + return; + } + // ondrop, move relevant record & fix sequences + list.$current.sortable({ + stop: function (event, ui) { + var from = ui.item.data('index'), + to = ui.item.prev().data('index') || 0; + if (from === to) { return; } + list.rows.splice(to, 0, list.rows.splice(from, 1)[0]); + + ui.item.parent().children().each(function (i, e) { + // reset record-index accelerators on rows and even/odd + var even = i%2 === 0; + $(e).data('index', i) + .toggleClass('even', even) + .toggleClass('odd', !even); + }); + + // resequencing time! + var data, index = to, + // if drag to 1st row (to = 0), start sequencing from 0 + // (exclusive lower bound) + seq = to ? list.rows[to - 1].data.sequence.value : 0; + while (++seq, data = list.rows[index++].data) { + data.sequence.value = seq; + // write are independent from one another, so we can just + // launch them all at the same time and we don't really + // give a fig about when they're done + dataset.write(data.id.value, {sequence: seq}); + } + } + }); + }, render: function (post_render) { var self = this; var $element = $(''); @@ -1104,6 +1143,7 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas self.children[null] = list; self.elements = [list.$current.replaceAll($element)[0]]; + self.setup_resequence_rows(list, dataset); if (post_render) { post_render(); } }); }); From b15b501b8a8fd199d63a2cf2715944d2cca55c1a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 22 Jul 2011 17:05:37 +0200 Subject: [PATCH 443/831] [imp] managed filters startup bzr revid: nicolas.vanhoren@openerp.com-20110722150537-i01yezky8fcar90h --- addons/base/static/src/js/search.js | 8 +++++++- addons/base/static/src/xml/base.xml | 16 +++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index e6df3767f4a..444a3a8d545 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -141,7 +141,13 @@ openerp.base.SearchView = openerp.base.Controller.extend({ }).value(); // filters management - this.$element.find(".oe_search-view-filters-management").change(this.on_filters_management); + var self = this; + var filters_set = new openerp.base.DataSetStatic(this, "ir.filters"); + filters_set.call("get_filters", [this.dataset.model]).then(function(result) { + var filters = self.$element.find(".oe_search-view-filters-management"); + filters.html(QWeb.render("SearchView.managed-filters", {filters: result})); + filters.change(self.on_filters_management); + }); var self = this; $.when.apply(null, widget_starts).then(function () { diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 04841a2e297..b95d9da5aea 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -62,7 +62,7 @@ - +
      + + + + + + + + + From 30fcc6872fc2545b0843113a3ae396bf2b501ae2 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 22 Jul 2011 17:17:52 +0200 Subject: [PATCH 444/831] [fix] problem with attachments loading in o2m bzr revid: nicolas.vanhoren@openerp.com-20110722151752-l89h16x7j9loh2qi --- addons/base/static/src/js/form.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index e28e42385ec..790a442f810 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -407,20 +407,19 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.notification.notify("Cancelling form"); }, do_update_sidebar: function() { - if (this.flags.sidebar === false) { + if (this.flags.sidebar === false || this.view_manager.sidebar === undefined) { return; } if (!this.datarecord.id) { this.on_attachments_loaded([]); } else { - // TODO fme: modify this so it doesn't try to load attachments when there is not sidebar - /*(new openerp.base.DataSetSearch( + (new openerp.base.DataSetSearch( this, 'ir.attachment', this.dataset.get_context(), [['res_model', '=', this.dataset.model], ['res_id', '=', this.datarecord.id], ['type', 'in', ['binary', 'url']]])).read_slice( ['name', 'url', 'type'], false, false, - this.on_attachments_loaded);*/ + this.on_attachments_loaded); } }, on_attachments_loaded: function(attachments) { From 95ccd74114399b6a668e66f8d1fb81cb484051d5 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 22 Jul 2011 17:35:05 +0200 Subject: [PATCH 445/831] [imp] made usage of a managed filter possible bzr revid: nicolas.vanhoren@openerp.com-20110722153505-g5mukqwfmd6eup2t --- addons/base/controllers/main.py | 9 +++++++++ addons/base/static/src/js/search.js | 10 +++++++--- addons/base/static/src/xml/base.xml | 5 +++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index da471499087..6bc323901e0 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -721,6 +721,15 @@ class SearchView(View): if field.get('context'): field["context"] = self.parse_domain(field["context"], req.session) return {'fields': fields} + + @openerpweb.jsonrequest + def get_filters(self, req, model): + Model = req.session.model("ir.filters") + filters = Model.get_filters(model) + for filter in filters: + filter["context"] = req.session.eval_context(self.parse_context(filter["context"], req.session)) + filter["domain"] = req.session.eval_domain(self.parse_domain(filter["domain"], req.session)) + return filters class Binary(openerpweb.Controller): _cp_path = "/base/binary" diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index 444a3a8d545..f226b537cdc 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -142,8 +142,10 @@ openerp.base.SearchView = openerp.base.Controller.extend({ // filters management var self = this; - var filters_set = new openerp.base.DataSetStatic(this, "ir.filters"); - filters_set.call("get_filters", [this.dataset.model]).then(function(result) { + return this.rpc('/base/searchview/get_filters', { + model: this.dataset.model + }).then(function(result) { + self.managed_filters = result; var filters = self.$element.find(".oe_search-view-filters-management"); filters.html(QWeb.render("SearchView.managed-filters", {filters: result})); filters.change(self.on_filters_management); @@ -166,7 +168,9 @@ openerp.base.SearchView = openerp.base.Controller.extend({ return; if (val.slice(0, "get:".length) == "get:") { val = val.slice("get:".length); - //TODO niv + val = parseInt(val); + var filter = this.managed_filters[val]; + this.on_search([filter.domain], [filter.context], []); } else if (val == "save_filter") { //TODO niv } else { // manage_filters diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index b95d9da5aea..414dd0ed183 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -664,15 +664,16 @@ + - + + From 70ae6c03261e5df42ea766faae66d61e9bb4a666 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 22 Jul 2011 17:44:19 +0200 Subject: [PATCH 446/831] [fix] some bugs related to combo box for filters management bzr revid: nicolas.vanhoren@openerp.com-20110722154419-9g31mwfsuv67rjz3 --- addons/base/static/src/js/search.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index f226b537cdc..6607faa6a79 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -140,6 +140,10 @@ openerp.base.SearchView = openerp.base.Controller.extend({ return widget.start(); }).value(); + $.when.apply(null, widget_starts).then(function () { + self.ready.resolve(); + }); + // filters management var self = this; return this.rpc('/base/searchview/get_filters', { @@ -150,30 +154,28 @@ openerp.base.SearchView = openerp.base.Controller.extend({ filters.html(QWeb.render("SearchView.managed-filters", {filters: result})); filters.change(self.on_filters_management); }); - - var self = this; - $.when.apply(null, widget_starts).then(function () { - self.ready.resolve(); - }); }, /** * Handle event when the user make a selection in the filters management select box. */ on_filters_management: function(e) { - var select = this.$element.find(".oe_search-view-filters-management"), - val = select.val(); - select.val("_filters"); + var select = this.$element.find(".oe_search-view-filters-management"); + var val = select.val(); - if (val.slice(0,1) == "_") // useless action + if (val.slice(0,1) == "_") { // useless action + select.val("_filters"); return; + } if (val.slice(0, "get:".length) == "get:") { val = val.slice("get:".length); val = parseInt(val); var filter = this.managed_filters[val]; this.on_search([filter.domain], [filter.context], []); } else if (val == "save_filter") { + select.val("_filters"); //TODO niv } else { // manage_filters + select.val("_filters"); //TODO niv } }, @@ -189,6 +191,10 @@ openerp.base.SearchView = openerp.base.Controller.extend({ * @param e jQuery event object coming from the "Search" button */ do_search: function (e) { + // reset filters management + var select = this.$element.find(".oe_search-view-filters-management"); + select.val("_filters"); + if (e && e.preventDefault) { e.preventDefault(); } var domains = [], From 6f1fd6c29a7c4b33d04cbea272ddedd846ae0435 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Fri, 22 Jul 2011 17:51:10 +0200 Subject: [PATCH 447/831] [FIX] hr_evaluation: include missing file in descriptor - quickfix for previous commit breaking the tests bzr revid: odo@openerp.com-20110722155110-vw2zsqxtw2a11wmb --- addons/hr_evaluation/__openerp__.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/hr_evaluation/__openerp__.py b/addons/hr_evaluation/__openerp__.py index 67c75854a25..d2e0702f067 100644 --- a/addons/hr_evaluation/__openerp__.py +++ b/addons/hr_evaluation/__openerp__.py @@ -39,18 +39,17 @@ level of employee hierarchy fills what and final review and evaluation is done by the manager.Every evaluation filled by the employees can be viewed in the form of pdf file. Implements a dashboard for My Current Evaluations """, - "init_xml": [], - "demo_xml": ["hr_evaluation_demo.xml", - ], - "update_xml": [ + "demo": ["hr_evaluation_demo.xml", ], + "data": [ "security/ir.model.access.csv", "security/hr_evaluation_security.xml", "wizard/hr_evaluation_mail_view.xml", "hr_evaluation_view.xml", "report/hr_evaluation_report_view.xml", "board_hr_evaluation_view.xml", - 'hr_evaluation_installer_view.xml' - ], + 'hr_evaluation_installer_view.xml', + 'hr_evaluation_data.xml', + ], "test": ["test/test_hr_evaluation.yml"], "active": False, "installable": True, From 899f79d9441d284136cae579498b7abaaad4136e Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Fri, 22 Jul 2011 17:57:07 +0200 Subject: [PATCH 448/831] [FIX] hr_evaluation: isample data must be noupdate=True bzr revid: odo@openerp.com-20110722155707-wlyeg9ywc5prj4mx --- addons/hr_evaluation/hr_evaluation_data.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/hr_evaluation/hr_evaluation_data.xml b/addons/hr_evaluation/hr_evaluation_data.xml index 769522e876b..a83caa71173 100644 --- a/addons/hr_evaluation/hr_evaluation_data.xml +++ b/addons/hr_evaluation/hr_evaluation_data.xml @@ -1,6 +1,6 @@ - + Employee Evaluation 20 From 09a3f7b86cd66704ca9afccf737459b92a6685bd Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 22 Jul 2011 17:59:48 +0200 Subject: [PATCH 449/831] [fix] corrected al's apparent inability to copy paste without adding bugs bzr revid: nicolas.vanhoren@openerp.com-20110722155948-1vgw3g03jqr0ni6b --- addons/base/static/src/js/chrome.js | 1 + addons/base/static/src/js/controller.js | 7 +++++-- addons/base/static/src/js/views.js | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 33aa311e9a2..75f8a015fa8 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -534,6 +534,7 @@ openerp.base.BaseWidget = openerp.base.Controller.extend({ if(this.$element != null) { this.$element.remove(); } + this._super(); }, /** * Render the widget. This.template must be defined. diff --git a/addons/base/static/src/js/controller.js b/addons/base/static/src/js/controller.js index a5c7bca4b53..10355a267a3 100644 --- a/addons/base/static/src/js/controller.js +++ b/addons/base/static/src/js/controller.js @@ -137,8 +137,7 @@ instance.base.BasicController = instance.base.Class.extend( /** @lends instance. instance.screen[element_id] = this; } // save the parent children relationship - this.controller_parent = null; - this.controller_children = []; + this.children = []; this.parent = parent; if(this.parent && this.parent.children) { this.parent.children.push(this); @@ -174,6 +173,10 @@ instance.base.BasicController = instance.base.Class.extend( /** @lends instance. return $.Deferred().done().promise(); }, stop: function() { + if (this.parent && this.parent.children) { + this.parent.children = _.without(this.parent.children, this); + } + this.parent = null; }, log: function() { var args = Array.prototype.slice.call(arguments); diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index d14fdcbc12f..1ee17bdab4b 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -11,7 +11,7 @@ openerp.base.ActionManager = openerp.base.Controller.extend({ this.viewmanager = null; this.current_dialog = null; // Temporary linking view_manager to session. - // Will use controller_parent to find it when implementation will be done. + // Will use parent to find it when implementation will be done. this.session.action_manager = this; }, /** From a6d404cc47519ec424e8532bfd687de66cce112b Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 22 Jul 2011 18:03:34 +0200 Subject: [PATCH 450/831] [imp] changed DataSet behavior to be more logical bzr revid: nicolas.vanhoren@openerp.com-20110722160334-03ok2myefe804wn1 --- addons/base/static/src/js/data.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index c9892ff4706..2e89dacceb8 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -240,11 +240,12 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base. * @constructs * @extends openerp.base.Controller * - * @param {openerp.base.Session} session current OpenERP session * @param {String} model the OpenERP model this dataset will manage */ - init: function(parent, model, context) { - this._super(parent); + init: function(source_controller, model, context) { + // we don't want the dataset to be a child of anything! + this._super(null); + this.session = source_controller ? source_controller.session : undefined; this.model = model; this.context = context || {}; this.index = null; From 7d0a18e84c933ba7febe1b51f92b62f8dbc22c08 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 22 Jul 2011 18:27:01 +0200 Subject: [PATCH 451/831] [fix] lot of bugs with contollers due to merge bzr revid: nicolas.vanhoren@openerp.com-20110722162701-me9jag18dp5m05wz --- addons/base/static/src/js/chrome.js | 1 + addons/base/static/src/js/controller.js | 2 ++ addons/base/static/src/js/search.js | 4 +++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 590955fffab..85f92c7b572 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -234,6 +234,7 @@ openerp.base.BaseWidget = openerp.base.Controller.extend({ if(this.$element != null) { this.$element.remove(); } + this._super(); } }); diff --git a/addons/base/static/src/js/controller.js b/addons/base/static/src/js/controller.js index 54e876295f7..c9ca3193e70 100644 --- a/addons/base/static/src/js/controller.js +++ b/addons/base/static/src/js/controller.js @@ -202,8 +202,10 @@ instance.base.Controller = instance.base.Class.extend( /** @lends instance.base. stop: function() { if (this.parent && this.parent.children) { this.parent.children = _.without(this.parent.children, this); + this.parent.controller_children = this.parent.children; } this.parent = null; + this.controller_parent = null; }, log: function() { var args = Array.prototype.slice.call(arguments); diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index 6607faa6a79..026f19db5b1 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -863,7 +863,9 @@ openerp.base.search.ExtendedSearch = openerp.base.BaseWidget.extend({ }, check_last_element: function() { _.each(this.children, function(x) {x.set_last_group(false);}); - this.children[this.children.length - 1].set_last_group(true); + if (this.children.length >= 1) { + this.children[this.children.length - 1].set_last_group(true); + } } }); From 1866e1c953430231be5bbdcb413da714e1ee1cff Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Fri, 22 Jul 2011 18:50:56 +0200 Subject: [PATCH 452/831] [FIX] temporarly disable date, datetime bzr revid: al@openerp.com-20110722165056-1u6d2zqfuqmhq042 --- addons/base/static/src/js/chrome.js | 19 +++++++++++++++++++ addons/base/static/src/js/form.js | 6 ++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 85f92c7b572..8305552e640 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -469,6 +469,25 @@ openerp.base.Session = openerp.base.Controller.extend( /** @lends openerp.base.S }); }, do_load_modules_debug: function(result) { +// function create_script_load_listener(elem,registry_item,flag,onload) { +// elem.onload = elem.onreadystatechange = function() { +// if ((elem.readyState && elem.readyState != "complete" && elem.readyState != "loaded") || registry_item[flag]) return; +// elem.onload = elem.onreadystatechange = null; +// onload(); +// }; + +// domscript.onload = function() { +// if ( ! domscript.onloadDone ) { +// domscript.onloadDone = true; +// init(); +// } +// }; +// domscript.onreadystatechange = function() { +// if ( ( "loaded" === domscript.readyState || "complete" === domscript.readyState ) && ! domscript.onloadDone ) { +// domscript.onloadDone = true; +// init(); +// } +// } $LAB.setOptions({AlwaysPreserveOrder: true}) .script(result) .wait(this.on_modules_loaded); diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 790a442f810..25dcca611bd 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -2218,8 +2218,10 @@ openerp.base.form.widgets = new openerp.base.Registry({ 'url' : 'openerp.base.form.FieldUrl', 'text' : 'openerp.base.form.FieldText', 'text_wiki' : 'openerp.base.form.FieldText', - 'date' : 'openerp.base.form.FieldDate', - 'datetime' : 'openerp.base.form.FieldDatetime', +// 'date' : 'openerp.base.form.FieldDate', +// 'datetime' : 'openerp.base.form.FieldDatetime', + 'date' : 'openerp.base.form.FieldChar', + 'datetime' : 'openerp.base.form.FieldChar', 'selection' : 'openerp.base.form.FieldSelection', 'many2one' : 'openerp.base.form.FieldMany2One', 'many2many' : 'openerp.base.form.FieldMany2Many', From 64fb0b4b99d0015ecd75313b21ffb5408f859e31 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Fri, 22 Jul 2011 20:02:12 +0200 Subject: [PATCH 453/831] [FIX] stock: buttons are not supported in hierarchical tree views - removed bzr revid: odo@openerp.com-20110722180212-yq5exmi5gl237akd --- addons/stock/stock_view.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index 3957494955c..1a212582368 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -437,7 +437,6 @@ - From 4110cb0828ff29337cfb568ebc17b06305594f7e Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 25 Jul 2011 12:46:30 +0200 Subject: [PATCH 470/831] [IMP] re-enable min and max aggregation functions because why not bzr revid: xmo@openerp.com-20110725104630-vs4wi5740340dtyj --- addons/base/static/src/js/list.js | 47 ++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 8c017596a57..4b0142ab365 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -25,8 +25,11 @@ openerp.base.list = { } var record = row_data[column.id]; - if (record.value === false) { - return value_if_empty === undefined ? '' : value_if_empty; + switch (record.value) { + case false: + case Infinity: + case -Infinity: + return value_if_empty === undefined ? '' : value_if_empty; } switch (column.widget || column.type) { case 'integer': @@ -353,10 +356,6 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi } var aggregation_func = column['group_operator'] || 'sum'; - if (!column[aggregation_func]) { - return {}; - } - return _.extend({}, column, { 'function': aggregation_func, label: column[aggregation_func] @@ -566,7 +565,6 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi compute_aggregates: function (records) { var columns = _(this.aggregate_columns).filter(function (column) { return column['function']; }); - if (_.isEmpty(columns)) { return; } if (_.isEmpty(records)) { @@ -574,17 +572,39 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi } var count = 0, sums = {}; - _(columns).each(function (column) { sums[column.id] = 0; }); + _(columns).each(function (column) { + switch (column['function']) { + case 'max': + sums[column.id] = -Infinity; + break; + case 'min': + sums[column.id] = Infinity; + break; + default: + sums[column.id] = 0; + } + }); _(records).each(function (record) { count += record.count || 1; _(columns).each(function (column) { - var field = column.id; + var field = column.id, + value = record.values[field]; switch (column['function']) { case 'sum': - sums[field] += record.values[field]; + sums[field] += value; break; case 'avg': - sums[field] += record.count * record.values[field]; + sums[field] += record.count * value; + break; + case 'min': + if (sums[field] > value) { + sums[field] = value; + } + break; + case 'max': + if (sums[field] < value) { + sums[field] = value; + } break; } }); @@ -594,12 +614,11 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi _(columns).each(function (column) { var field = column.id; switch (column['function']) { - case 'sum': - aggregates[field] = {value: sums[field]}; - break; case 'avg': aggregates[field] = {value: sums[field] / count}; break; + default: + aggregates[field] = {value: sums[field]}; } }); From fb0c16e24e502e168ea7ee9373fc0f1933ac4bc9 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 25 Jul 2011 13:37:40 +0200 Subject: [PATCH 471/831] [imp] added possibility to save filters bzr revid: nicolas.vanhoren@openerp.com-20110725113740-8q9vo1rlvexertc1 --- addons/base/controllers/main.py | 19 ++++++++++ addons/base/static/src/js/search.js | 57 ++++++++++++++++++++++++----- addons/base/static/src/xml/base.xml | 7 ++++ 3 files changed, 74 insertions(+), 9 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 79de302f069..628a086e3d6 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -773,6 +773,25 @@ class SearchView(View): filter["context"] = req.session.eval_context(self.parse_context(filter["context"], req.session)) filter["domain"] = req.session.eval_domain(self.parse_domain(filter["domain"], req.session)) return filters + + @openerpweb.jsonrequest + def save_filter(self, req, model, name, context_to_save, domain): + Model = req.session.model("ir.filters") + ctx = openerpweb.nonliterals.CompoundContext(context_to_save) + ctx.session = req.session + ctx = ctx.evaluate() + domain = openerpweb.nonliterals.CompoundDomain(domain) + domain.session = req.session + domain = domain.evaluate() + uid = req.session._uid + context = req.session.eval_context(req.context) + to_return = Model.create_or_replace({"context": ctx, + "domain": domain, + "model_id": model, + "name": name, + "user_id": uid + }, context) + return to_return class Binary(openerpweb.Controller): _cp_path = "/base/binary" diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index 779cd74c999..36f0aef1b90 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -145,7 +145,10 @@ openerp.base.SearchView = openerp.base.Controller.extend({ self.ready.resolve(); }); - // filters management + this.reload_managed_filters(); + }, + reload_managed_filters: function() { + var self = this; return this.rpc('/base/searchview/get_filters', { model: this.dataset.model }).then(function(result) { @@ -159,6 +162,7 @@ openerp.base.SearchView = openerp.base.Controller.extend({ * Handle event when the user make a selection in the filters management select box. */ on_filters_management: function(e) { + var self = this; var select = this.$element.find(".oe_search-view-filters-management"); var val = select.val(); @@ -173,7 +177,38 @@ openerp.base.SearchView = openerp.base.Controller.extend({ this.on_search([filter.domain], [filter.context], []); } else if (val == "save_filter") { select.val("_filters"); - //TODO niv + var data = this.build_search_data(); + var context = new openerp.base.CompoundContext(); + _.each(data.contexts, function(x) { + context.add(x); + }); + var domain = new openerp.base.CompoundDomain(); + _.each(data.domains, function(x) { + domain.add(x); + }); + var dial_html = QWeb.render("SearchView.managed-filters.add"); + var $dial = $(dial_html); + $dial.dialog({ + modal: true, + title: "Filter Entry", + buttons: { + Cancel: function() { + $(this).dialog("close"); + }, + OK: function() { + $(this).dialog("close"); + var name = $(this).find("input").val(); + self.rpc('/base/searchview/save_filter', { + model: self.dataset.model, + context_to_save: context, + domain: domain, + name: name + }).then(function(result) { + self.reload_managed_filters(); + }); + }, + } + }); } else { // manage_filters select.val("_filters"); //TODO niv @@ -197,6 +232,16 @@ openerp.base.SearchView = openerp.base.Controller.extend({ if (e && e.preventDefault) { e.preventDefault(); } + var data = this.build_search_data(); + + if (data.errors.length) { + this.on_invalid(data.errors); + return; + } + + this.on_search(data.domains, data.contexts, data.groupbys); + }, + build_search_data: function() { var domains = [], contexts = [], errors = []; @@ -221,19 +266,13 @@ openerp.base.SearchView = openerp.base.Controller.extend({ } }); - if (errors.length) { - this.on_invalid(errors); - return; - } - // TODO: do we need to handle *fields* with group_by in their context? var groupbys = _(this.enabled_filters) .chain() .map(function (filter) { return filter.get_context();}) .compact() .value(); - - this.on_search(domains, contexts, groupbys); + return {domains: domains, contexts: contexts, errors: errors, groupbys: groupbys}; }, /** * Triggered after the SearchView has collected all relevant domains and diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index faab1eb3d6d..5570415fdde 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -679,6 +679,13 @@ + +
      +

      Filter Name:

      + +

      (Any existing filter with the same name will be replaced)

      +
      +
      - +
      From 6a22efdef027c4c10937bda52b344efc6aaaca16 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 25 Jul 2011 14:09:40 +0200 Subject: [PATCH 472/831] [fix] wrong storage of session cookie bzr revid: nicolas.vanhoren@openerp.com-20110725120940-f6vfi6wu6xy9js8x --- addons/base/static/src/js/chrome.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 67738d7a348..492e7c62b5d 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -425,7 +425,7 @@ openerp.base.Session = openerp.base.Controller.extend( /** @lends openerp.base.S for(var i=0; i Date: Mon, 25 Jul 2011 14:10:01 +0200 Subject: [PATCH 473/831] [imp] added manage filters link bzr revid: nicolas.vanhoren@openerp.com-20110725121001-95af30c1incqg4kl --- addons/base/static/src/js/search.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index 36f0aef1b90..b6d9e797ec0 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -211,7 +211,14 @@ openerp.base.SearchView = openerp.base.Controller.extend({ }); } else { // manage_filters select.val("_filters"); - //TODO niv + this.do_action({ + res_model: 'ir.filters', + views: [[false, 'list'], [false, 'form']], + type: 'ir.actions.act_window', + context: {"search_default_user_id": this.session.uid, + "search_default_model_id": this.dataset.model}, + target: "current" + }); } }, /** From a30bef7be660dc2665ae6497c07988252cf9a5d4 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 25 Jul 2011 14:18:23 +0200 Subject: [PATCH 474/831] [fix] made the managed filters auto_search bzr revid: nicolas.vanhoren@openerp.com-20110725121823-gekerf0s3pn78kqo --- addons/base/static/src/js/search.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index b6d9e797ec0..8a51abe1335 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -217,7 +217,9 @@ openerp.base.SearchView = openerp.base.Controller.extend({ type: 'ir.actions.act_window', context: {"search_default_user_id": this.session.uid, "search_default_model_id": this.dataset.model}, - target: "current" + target: "current", + limit : 80, + auto_search : true }); } }, From e29a5204f761a099d6a4929829c01d88177b8994 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 25 Jul 2011 15:35:53 +0200 Subject: [PATCH 475/831] [FIX] NaN values being displayed in list footers (aggregated values) bzr revid: xmo@openerp.com-20110725133553-bs4x2f747vdj1a02 --- addons/base/static/src/js/list.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 4b0142ab365..7b12da67697 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -25,6 +25,9 @@ openerp.base.list = { } var record = row_data[column.id]; + + // If NaN value, display as with a `false` (empty cell) + if (isNaN(record.value)) { record.value = false; } switch (record.value) { case false: case Infinity: From f8b552e5b5d3ea96e49e3493479c318c4d715411 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 25 Jul 2011 16:06:56 +0200 Subject: [PATCH 476/831] [FIX] session initialization bzr revid: xmo@openerp.com-20110725140656-ow3mr78psuianqyc --- addons/base/static/src/js/chrome.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 492e7c62b5d..34333abf1be 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -246,7 +246,7 @@ openerp.base.Session = openerp.base.Controller.extend( /** @lends openerp.base.S * @param port */ init: function(parent, element_id, server, port) { - this._super(element_id); + this._super(parent, element_id); this.server = (server == undefined) ? location.hostname : server; this.port = (port == undefined) ? location.port : port; this.rpc_mode = (server == location.hostname) ? "ajax" : "jsonp"; From 9c8a2c33abd0dcd93eb4fff9c40d5104cf68d351 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 25 Jul 2011 16:11:03 +0200 Subject: [PATCH 477/831] [FIX] check that a value is a number before checking for isNaN: strings are NaN and so are objects also alias 'record.value', so we don't have to go through the indirection 11 times bzr revid: xmo@openerp.com-20110725141103-2ix5mhec6lk47en6 --- addons/base/static/src/js/list.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 7b12da67697..a2fca3aa89e 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -24,11 +24,13 @@ openerp.base.list = { ].join('') } - var record = row_data[column.id]; + var value = row_data[column.id].value; // If NaN value, display as with a `false` (empty cell) - if (isNaN(record.value)) { record.value = false; } - switch (record.value) { + if (typeof value === 'number' && isNaN(value)) { + value = false; + } + switch (value) { case false: case Infinity: case -Infinity: @@ -36,23 +38,23 @@ openerp.base.list = { } switch (column.widget || column.type) { case 'integer': - return _.sprintf('%d', record.value); + return _.sprintf('%d', value); case 'float': var precision = column.digits ? column.digits[1] : 2; - return _.sprintf('%.' + precision + 'f', record.value); + return _.sprintf('%.' + precision + 'f', value); case 'float_time': return _.sprintf("%02d:%02d", - Math.floor(record.value), - Math.round((record.value % 1) * 60)); + Math.floor(value), + Math.round((value % 1) * 60)); case 'progressbar': return _.sprintf( '%.2f%%', - record.value, record.value); + value, value); case 'many2one': // name_get value format - return record.value[1]; + return value[1]; default: - return record.value; + return value; } } }; From 8784297248e8f0a7cb0bd048bf1757fdf2613ddd Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 25 Jul 2011 16:28:05 +0200 Subject: [PATCH 478/831] [FIX] in do_action(), on_closed() callback not honored for new tabs bzr revid: fme@openerp.com-20110725142805-bsvio3q4tsgkc77b --- addons/base/static/src/js/views.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index d01d847843e..1b5452bb5a3 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -61,6 +61,9 @@ openerp.base.ActionManager = openerp.base.Controller.extend({ var url = window.location.protocol + "//" + window.location.host + window.location.pathname + "?" + jQuery.param({ s_action : "" + key }); window.open(url); + if (on_closed) { + on_closed(); + } }); } else { if (this.viewmanager) { From 3b9b028c1ecf0ec66a4d9f230d0078e3c8e82fd6 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Mon, 25 Jul 2011 16:28:31 +0200 Subject: [PATCH 479/831] [FIX] remove customer flag from company 1 bzr revid: al@openerp.com-20110725142831-gttjdyeh9trtna0w --- openerp/addons/base/base_data.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml index 6c073a769a7..75de4a5fee5 100644 --- a/openerp/addons/base/base_data.xml +++ b/openerp/addons/base/base_data.xml @@ -1006,6 +1006,7 @@ + From 212826dbf2c556b0f9cb41763354e2dbd310848b Mon Sep 17 00:00:00 2001 From: "Amit Parmar (OpenERP)" Date: Tue, 26 Jul 2011 11:51:33 +0530 Subject: [PATCH 480/831] [IMP] remerge add_relate_button bzr revid: aar@tinyerp.com-20110726062133-a1fbqo0ywivh0cra --- addons/mrp/mrp_view.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index 3c374932f68..93703cb6ee6 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -146,7 +146,6 @@ - @@ -737,7 +736,6 @@ - @@ -1025,7 +1023,6 @@ - From de8fa767097fb8ea1393ac2ed6657e60897187dd Mon Sep 17 00:00:00 2001 From: "Amit Parmar (OpenERP)" Date: Tue, 26 Jul 2011 12:21:24 +0530 Subject: [PATCH 481/831] [IMP] remerege onchange_partner_set_invoice_task_work bzr revid: aar@tinyerp.com-20110726065124-a069g9op9gw6u0jl --- addons/project/project.py | 8 ++------ addons/project_timesheet/project_timesheet.py | 7 +++++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/addons/project/project.py b/addons/project/project.py index 782767d78f8..830d40a4634 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -78,12 +78,8 @@ class project(osv.osv): addr = partner_obj.address_get(cr, uid, [part], ['contact']) pricelist = partner_obj.read(cr, uid, part, ['property_product_pricelist'], context=context) pricelist_id = pricelist.get('property_product_pricelist', False) and pricelist.get('property_product_pricelist')[0] or False - if not res: - return {'value':{'contact_id': addr['contact'], 'pricelist_id': pricelist_id}} - else: - return {'value':{'contact_id': addr['contact'], 'pricelist_id': pricelist_id, 'to_invoice': res}} - - + return {'value':{'contact_id': addr['contact'], 'pricelist_id': pricelist_id}} + def _progress_rate(self, cr, uid, ids, names, arg, context=None): res = {}.fromkeys(ids, 0.0) if not ids: diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py index 36768b07793..0d6843497c8 100644 --- a/addons/project_timesheet/project_timesheet.py +++ b/addons/project_timesheet/project_timesheet.py @@ -30,8 +30,11 @@ class project_project(osv.osv): _inherit = 'project.project' def onchange_partner_id(self, cr, uid, ids, part=False, context=None): obj = self.pool.get('hr_timesheet_invoice.factor') - factor_ids = obj.search(cr, uid, [('customer_name','=','100%')]) - return super(project_project, self).onchange_partner_id(cr, uid, ids, part, factor_ids, context=context) + res = super(project_project, self).onchange_partner_id(cr, uid, ids, part, context) + if res and ('value' in res): + factor_ids = obj.search(cr, uid, [('customer_name','=','100%')]) + res['value'].update({'to_invoice': factor_ids}) + return res project_project() class project_work(osv.osv): From 8aea108678acc65c11f673e671673af64606c720 Mon Sep 17 00:00:00 2001 From: "Amit Parmar (OpenERP)" Date: Tue, 26 Jul 2011 12:35:20 +0530 Subject: [PATCH 482/831] [IMP] remerge onchange_partner_set_invoice_task_work bzr revid: aar@tinyerp.com-20110726070520-k20bvj8anrq9z6ot --- addons/project/project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/project/project.py b/addons/project/project.py index 830d40a4634..1aa200144cb 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -71,7 +71,7 @@ class project(osv.osv): res[m.id] = (m.parent_id and (m.parent_id.name + '/') or '') + m.name return res - def onchange_partner_id(self, cr, uid, ids, part=False, res=False, context=None): + def onchange_partner_id(self, cr, uid, ids, part=False, context=None): partner_obj = self.pool.get('res.partner') if not part: return {'value':{'contact_id': False, 'pricelist_id': False}} From 749cf7443d991d50551b52ed368fe8c181649b45 Mon Sep 17 00:00:00 2001 From: "noz (OpenERP)" Date: Tue, 26 Jul 2011 12:41:07 +0530 Subject: [PATCH 483/831] [FIX] Updated with lated branch changes. bzr revid: noz@tinyerp.com-20110726071107-r6zwvyiolb7emlq7 --- addons/base/static/src/js/chrome.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 10e398b26bf..8c03dbb55e6 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -693,6 +693,9 @@ openerp.base.Database = openerp.base.Controller.extend({ this.option_id = option_id; this.$option_id = $('#' + option_id); this.$option_id.html(''); + if(this.parent && this.parent.session) { + this.session = this.parent.session; + } }, start: function() { this.$element.html(QWeb.render("Database", this)); @@ -717,7 +720,7 @@ openerp.base.Database = openerp.base.Controller.extend({ this.$element.find('#db-restore').click(this.do_db_restore); this.$element.find('#db-change-password').click(this.do_change_password); this.$element.find('#back-to-login').click(function() { - self.header = new openerp.base.Header(self.session, "oe_header"); + self.header = new openerp.base.Header(self, "oe_header"); self.header.on_logout(); }); }, @@ -959,6 +962,9 @@ openerp.base.Login = openerp.base.Controller.extend({ this.selected_login = this.selected_login || "admin"; this.selected_password = this.selected_password || "a"; } + if(this.parent && this.parent.session) { + this.session = this.parent.session; + } }, start: function() { var self = this; @@ -978,7 +984,7 @@ openerp.base.Login = openerp.base.Controller.extend({ this.$element.closest(".openerp").addClass("login-mode"); this.$element.find('#oe-db-config').click(function() { - self.database = new openerp.base.Database(self.session, "oe_database", "oe_db_options"); + self.database = new openerp.base.Database(self, "oe_database", "oe_db_options"); self.database.start(); }); @@ -1035,6 +1041,8 @@ openerp.base.Login = openerp.base.Controller.extend({ openerp.base.Header = openerp.base.Controller.extend({ init: function(parent, element_id) { this._super(parent, element_id); + if(parent) + this.session = parent.session; }, start: function() { this.do_update(); @@ -1043,10 +1051,7 @@ openerp.base.Header = openerp.base.Controller.extend({ this.$element.html(QWeb.render("Header", this)); this.$element.find(".logout").click(this.on_logout); }, - on_logout: function() { - this.login = new openerp.base.Login(this.session, "oe_login"); - this.login.start(); - } + on_logout: function() {} }); openerp.base.Menu = openerp.base.Controller.extend({ From c2bbedd32be6d888a537150e658c9a4f6fb496bc Mon Sep 17 00:00:00 2001 From: "noz (OpenERP)" Date: Tue, 26 Jul 2011 12:50:10 +0530 Subject: [PATCH 484/831] [FIX] Removed tabs instead of spaces from css. bzr revid: noz@tinyerp.com-20110726072010-9cfabvfpkvt2cg39 --- addons/base/static/src/css/base.css | 177 ++++++++++++++-------------- 1 file changed, 88 insertions(+), 89 deletions(-) diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index a08e6bf02e4..6228e0c1e17 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -143,8 +143,8 @@ body.openerp { /* Database */ .openerp.database_block .db_options_row { - height: 100%; - display: table-row; + height: 100%; + display: table-row; } .openerp.database_block .menu, @@ -155,63 +155,63 @@ body.openerp { } .db_container { - width: 15%; - background: #666666; + width: 15%; + background: #666666; } ul.db_options li { - padding: 5px 0 10px 5px; - background: #949292; /* Old browsers */ - background: -moz-linear-gradient(top, #949292 30%, #6d6b6b 95%, #282828 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(30%,#949292), color-stop(95%,#6d6b6b), color-stop(100%,#282828)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* Opera11.10+ */ - background: -ms-linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* IE10+ */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#282828',GradientType=0 ); /* IE6-9 */ - background: linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* W3C */ - /* for ie9 */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#5B5A5A',GradientType=0 ); /* IE6-9 */ - border: none; - /* overriding jquery ui */ - -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; - display: block; - font-weight: bold; - text-transform: uppercase; - margin: 1px; - color: #EEEEEE; - cursor: pointer; - width: 196px; - font-size: 12px; + padding: 5px 0 10px 5px; + background: #949292; /* Old browsers */ + background: -moz-linear-gradient(top, #949292 30%, #6d6b6b 95%, #282828 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(30%,#949292), color-stop(95%,#6d6b6b), color-stop(100%,#282828)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* IE10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#282828',GradientType=0 ); /* IE6-9 */ + background: linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* W3C */ + /* for ie9 */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#5B5A5A',GradientType=0 ); /* IE6-9 */ + border: none; + /* overriding jquery ui */ + -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; + display: block; + font-weight: bold; + text-transform: uppercase; + margin: 1px; + color: #EEEEEE; + cursor: pointer; + width: 196px; + font-size: 12px; } .db_option_table { - border: 1px solid #5A5858; - padding: 5px; - -moz-border-radius: 10px; + border: 1px solid #5A5858; + padding: 5px; + -moz-border-radius: 10px; } table.db_option_table input.required { - background-color: #D2D2FF; + background-color: #D2D2FF; } .db_option_table input[type="text"], input[type="password"], select { - width: 300px; + width: 300px; } .option_string { - font-weight: bold; - color: #555; - width: 100%; - text-align: center; - padding: 10px 0; - font-size: large; + font-weight: bold; + color: #555; + width: 100%; + text-align: center; + padding: 10px 0; + font-size: large; } label.error { - float: none; - color: red; - padding-left: .5em; - vertical-align: top; + float: none; + color: red; + padding-left: .5em; + vertical-align: top; } /* Main*/ @@ -233,14 +233,14 @@ label.error { .openerp .menu { height: 34px; -background: #cc4e45; /* Old browsers */ -background: -moz-linear-gradient(top, #cc4e45 0%, #b52d20 8%, #7a211a 100%); /* FF3.6+ */ -background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#cc4e45), color-stop(8%,#b52d20), color-stop(100%,#7a211a)); /* Chrome,Safari4+ */ -background: -webkit-linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* Chrome10+,Safari5.1+ */ -background: -o-linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* Opera11.10+ */ -background: -ms-linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* IE10+ */ -filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#CC4E45', endColorstr='#7A211A',GradientType=0 ); /* IE6-9 */ -background: linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* W3C */ + background: #cc4e45; /* Old browsers */ + background: -moz-linear-gradient(top, #cc4e45 0%, #b52d20 8%, #7a211a 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#cc4e45), color-stop(8%,#b52d20), color-stop(100%,#7a211a)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* IE10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#CC4E45', endColorstr='#7A211A',GradientType=0 ); /* IE6-9 */ + background: linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* W3C */ } .openerp .menu td { text-align: center; @@ -253,14 +253,14 @@ background: linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* W3C */ margin: 3px 2px; padding: 0 8px; - background: #bd5e54; /* Old browsers */ - background: -moz-linear-gradient(top, #bd5e54 0%, #90322a 60%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bd5e54), color-stop(60%,#90322a)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #bd5e54 0%,#90322a 60%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #bd5e54 0%,#90322a 60%); /* Opera11.10+ */ - background: -ms-linear-gradient(top, #bd5e54 0%,#90322a 60%); /* IE10+ */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#BD5E54', endColorstr='#90322A',GradientType=0 ); /* IE6-9 */ - background: linear-gradient(top, #bd5e54 0%,#90322a 60%); /* W3C */ + background: #bd5e54; /* Old browsers */ + background: -moz-linear-gradient(top, #bd5e54 0%, #90322a 60%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bd5e54), color-stop(60%,#90322a)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #bd5e54 0%,#90322a 60%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #bd5e54 0%,#90322a 60%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, #bd5e54 0%,#90322a 60%); /* IE10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#BD5E54', endColorstr='#90322A',GradientType=0 ); /* IE6-9 */ + background: linear-gradient(top, #bd5e54 0%,#90322a 60%); /* W3C */ border: 1px solid #6E2A24; border-radius: 4px; @@ -280,16 +280,16 @@ background: linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* W3C */ .openerp .menu a:hover, .openerp .menu a:focus, .openerp .menu a.active { - background: #c6c6c6; /* Old browsers */ - background: -moz-linear-gradient(top, #c6c6c6 0%, #5c5c5c 7%, #969595 86%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#c6c6c6), color-stop(7%,#5c5c5c), color-stop(86%,#969595)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #c6c6c6 0%,#5c5c5c 7%,#969595 86%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #c6c6c6 0%,#5c5c5c 7%,#969595 86%); /* Opera11.10+ */ - background: -ms-linear-gradient(top, #c6c6c6 0%,#5c5c5c 7%,#969595 86%); /* IE10+ */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#C6C6C6', endColorstr='#969595',GradientType=0 ); /* IE6-9 */ - background: linear-gradient(top, #c6c6c6 0%,#5c5c5c 7%,#969595 86%); /* W3C */ - /* for ie */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#5c5c5c', endColorstr='#969595',GradientType=0 ); /* IE6-9 */ + background: #c6c6c6; /* Old browsers */ + background: -moz-linear-gradient(top, #c6c6c6 0%, #5c5c5c 7%, #969595 86%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#c6c6c6), color-stop(7%,#5c5c5c), color-stop(86%,#969595)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #c6c6c6 0%,#5c5c5c 7%,#969595 86%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #c6c6c6 0%,#5c5c5c 7%,#969595 86%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, #c6c6c6 0%,#5c5c5c 7%,#969595 86%); /* IE10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#C6C6C6', endColorstr='#969595',GradientType=0 ); /* IE6-9 */ + background: linear-gradient(top, #c6c6c6 0%,#5c5c5c 7%,#969595 86%); /* W3C */ + /* for ie */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#5c5c5c', endColorstr='#969595',GradientType=0 ); /* IE6-9 */ color: #fff; } @@ -311,19 +311,19 @@ background: linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* W3C */ } .openerp .secondary_menu h3 { padding: 0 0 2px; - background: #949292; /* Old browsers */ - background: -moz-linear-gradient(top, #949292 0%, #6d6b6b 87%, #282828 99%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#949292), color-stop(87%,#6d6b6b), color-stop(99%,#282828)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #949292 0%,#6d6b6b 87%,#282828 99%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #949292 0%,#6d6b6b 87%,#282828 99%); /* Opera11.10+ */ - background: -ms-linear-gradient(top, #949292 0%,#6d6b6b 87%,#282828 99%); /* IE10+ */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#282828',GradientType=0 ); /* IE6-9 */ - background: linear-gradient(top, #949292 0%,#6d6b6b 87%,#282828 99%); /* W3C */ - /* for ie9 */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#5B5A5A',GradientType=0 ); /* IE6-9 */ + background: #949292; /* Old browsers */ + background: -moz-linear-gradient(top, #949292 0%, #6d6b6b 87%, #282828 99%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#949292), color-stop(87%,#6d6b6b), color-stop(99%,#282828)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #949292 0%,#6d6b6b 87%,#282828 99%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #949292 0%,#6d6b6b 87%,#282828 99%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, #949292 0%,#6d6b6b 87%,#282828 99%); /* IE10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#282828',GradientType=0 ); /* IE6-9 */ + background: linear-gradient(top, #949292 0%,#6d6b6b 87%,#282828 99%); /* W3C */ + /* for ie9 */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#5B5A5A',GradientType=0 ); /* IE6-9 */ border: none; /* overriding jquery ui */ - -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; + -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; } .openerp .secondary_menu h4 { padding: 0 0 2px 10px; @@ -349,17 +349,16 @@ background: linear-gradient(top, #cc4e45 0%,#b52d20 8%,#7a211a 100%); /* W3C */ .openerp .secondary_menu h4:hover, .openerp .secondary_menu h4:active, .openerp .secondary_menu h4.active { - background: #ffffff; /* Old browsers */ - background: -moz-linear-gradient(top, #ffffff 0%, #d8d8d8 11%, #afafaf 86%, #333333 91%, #5a5858 96%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(11%,#d8d8d8), color-stop(86%,#afafaf), color-stop(91%,#333333), color-stop(96%,#5a5858)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* Opera11.10+ */ - background: -ms-linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* IE10+ */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#5A5858',GradientType=0 ); /* IE6-9 */ - background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* W3C */ - /* overriding jquery ui */ - -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; border-top-right-radius: 0; - + background: #ffffff; /* Old browsers */ + background: -moz-linear-gradient(top, #ffffff 0%, #d8d8d8 11%, #afafaf 86%, #333333 91%, #5a5858 96%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(11%,#d8d8d8), color-stop(86%,#afafaf), color-stop(91%,#333333), color-stop(96%,#5a5858)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* IE10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#5A5858',GradientType=0 ); /* IE6-9 */ + background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* W3C */ + /* overriding jquery ui */ + -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; border-top-right-radius: 0; color: #3f3d3d; text-shadow: #fff 0 1px 0; border: none !important; From 5a1021b830f385eb3244ef2b05bb1f4a9e1c5b9c Mon Sep 17 00:00:00 2001 From: "Amit Parmar (OpenERP)" Date: Tue, 26 Jul 2011 12:50:53 +0530 Subject: [PATCH 485/831] [IMP] remerge add_relate_button bzr revid: aar@tinyerp.com-20110726072053-oznk99qpj41e5bq2 --- addons/mrp/mrp_view.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index 93703cb6ee6..e481ee6382d 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -145,7 +145,7 @@ - + @@ -269,7 +269,7 @@ tree - + @@ -735,7 +735,7 @@ - + @@ -972,6 +972,7 @@ + + Date: Tue, 26 Jul 2011 13:33:18 +0530 Subject: [PATCH 486/831] [FIX] Fixed spaces instead of tabs. bzr revid: noz@tinyerp.com-20110726080318-gu5xvwlepj8o7nmi --- addons/base/controllers/main.py | 144 +++++------ addons/base/static/src/js/chrome.js | 380 ++++++++++++++-------------- 2 files changed, 262 insertions(+), 262 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 82f23d82a43..4e4c5b47d39 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -73,23 +73,21 @@ class Database(openerpweb.Controller): return {"db_list": dbs} @openerpweb.jsonrequest - def db_operation(self, req, flag, **kw): + def create_db(self, req, **kw): - if flag == 'create': - - super_admin_pwd = kw.get('super_admin_pwd') - dbname = kw.get('db') - demo_data = kw.get('demo_data') - db_lang = kw.get('db_lang') - admin_pwd = kw.get('admin_pwd') - confirm_pwd = kw.get('confirm_pwd') - - if not re.match('^[a-zA-Z][a-zA-Z0-9_]+$', dbname): - return {'error': "You must avoid all accents, space or special characters.", 'title': 'Bad database name'} - - ok = False - try: - return req.session.proxy("db").create(super_admin_pwd, dbname, demo_data, db_lang, admin_pwd) + super_admin_pwd = kw.get('super_admin_pwd') + dbname = kw.get('db') + demo_data = kw.get('demo_data') + db_lang = kw.get('db_lang') + admin_pwd = kw.get('admin_pwd') + confirm_pwd = kw.get('confirm_pwd') + + if not re.match('^[a-zA-Z][a-zA-Z0-9_]+$', dbname): + return {'error': "You must avoid all accents, space or special characters.", 'title': 'Bad database name'} + + ok = False + try: + return req.session.proxy("db").create(super_admin_pwd, dbname, demo_data, db_lang, admin_pwd) # while True: # try: # progress, users = req.session.proxy('db').get_progress(super_admin_pwd, res) @@ -106,65 +104,69 @@ class Database(openerpweb.Controller): # except DatabaseCreationCrash: # return {'error': "The server crashed during installation.\nWe suggest you to drop this database.", # 'title': 'Error during database creation'} - except Exception, e: - if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Create Database'} - else: - return {'error': 'Could not create database !', 'title': 'Create Database'} + except Exception, e: + if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': + return {'error': 'Bad super admin password !', 'title': 'Create Database'} + else: + return {'error': 'Could not create database !', 'title': 'Create Database'} + + @openerpweb.jsonrequest + def drop_db(self, req, **kw): + db = kw.get('db') + password = kw.get('password') - elif flag == 'drop': - db = kw.get('db') - password = kw.get('password') + try: + return req.session.proxy("db").drop(password, db) + except Exception, e: + if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': + return {'error': 'Bad super admin password !', 'title': 'Drop Database'} + else: + return {'error': 'Could not drop database !', 'title': 'Drop Database'} + + @openerpweb.jsonrequest + def backup_db(self, req, **kw): + db = kw.get('db') + password = kw.get('password') + try: + res = req.session.proxy("db").dump(password, db) + if res: + cherrypy.response.headers['Content-Type'] = "application/data" + cherrypy.response.headers['Content-Disposition'] = 'filename="' + db + '.dump"' + return base64.decodestring(res) + except Exception, e: + if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': + return {'error': 'Bad super admin password !', 'title': 'Backup Database'} + else: + return {'error': 'Could not drop database !', 'title': 'Backup Database'} - try: - return req.session.proxy("db").drop(password, db) - except Exception, e: - if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Drop Database'} - else: - return {'error': 'Could not drop database !', 'title': 'Drop Database'} + @openerpweb.jsonrequest + def restore_db(self, req, **kw): + filename = kw.get('filename') + db = kw.get('db') + password = kw.get('password') - elif flag == 'backup': - db = kw.get('db') - password = kw.get('password') - try: - res = req.session.proxy("db").dump(password, db) - if res: - cherrypy.response.headers['Content-Type'] = "application/data" - cherrypy.response.headers['Content-Disposition'] = 'filename="' + db + '.dump"' - return base64.decodestring(res) - except Exception, e: - if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Backup Database'} - else: - return {'error': 'Could not drop database !', 'title': 'Backup Database'} - - elif flag == 'restore': - filename = kw.get('filename') - db = kw.get('db') - password = kw.get('password') - - try: - data = base64.encodestring(filename.file.read()) - return req.session.proxy("db").restore(password, db, data) - except Exception, e: - if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Restore Database'} - else: - return {'error': 'Could not restore database !', 'title': 'Restore Database'} + try: + data = base64.encodestring(filename.file.read()) + return req.session.proxy("db").restore(password, db, data) + except Exception, e: + if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': + return {'error': 'Bad super admin password !', 'title': 'Restore Database'} + else: + return {'error': 'Could not restore database !', 'title': 'Restore Database'} - elif flag == 'change_password': - old_password = kw.get('old_password') - new_password = kw.get('new_password') - confirm_password = kw.get('confirm_password') - - try: - return req.session.proxy("db").change_admin_password(old_password, new_password) - except Exception, e: - if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Change Password'} - else: - return {'error': 'Error, password not changed !', 'title': 'Change Password'} + @openerpweb.jsonrequest + def change_password_db(self, req, **kw): + old_password = kw.get('old_password') + new_password = kw.get('new_password') + confirm_password = kw.get('confirm_password') + + try: + return req.session.proxy("db").change_admin_password(old_password, new_password) + except Exception, e: + if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': + return {'error': 'Bad super admin password !', 'title': 'Change Password'} + else: + return {'error': 'Error, password not changed !', 'title': 'Change Password'} class Session(openerpweb.Controller): _cp_path = "/base/session" diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 8c03dbb55e6..f9dffcfc66a 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -688,19 +688,18 @@ openerp.base.Loading = openerp.base.Controller.extend({ }); openerp.base.Database = openerp.base.Controller.extend({ - init: function(parent, element_id, option_id) { - this._super(parent, element_id); - this.option_id = option_id; - this.$option_id = $('#' + option_id); - this.$option_id.html(''); - if(this.parent && this.parent.session) { + init: function(parent, element_id, option_id) { + this._super(parent, element_id); + this.option_id = option_id; + this.$option_id = $('#' + option_id); + this.$option_id.html(''); + if(this.parent && this.parent.session) { this.session = this.parent.session; } - }, - start: function() { - this.$element.html(QWeb.render("Database", this)); - - this.$element.closest(".openerp").removeClass("login-mode"); + }, + start: function() { + this.$element.html(QWeb.render("Database", this)); + this.$element.closest(".openerp").removeClass("login-mode"); this.$element.closest(".openerp").addClass("database_block"); var self = this; @@ -710,8 +709,8 @@ openerp.base.Database = openerp.base.Controller.extend({ }); this.rpc("/base/session/get_lang_list", {}, function(result) { - self.lang_list = result.lang_list; - self.do_db_create(); + self.lang_list = result.lang_list; + self.do_db_create(); }); this.$element.find('#db-create').click(this.do_db_create); @@ -720,228 +719,227 @@ openerp.base.Database = openerp.base.Controller.extend({ this.$element.find('#db-restore').click(this.do_db_restore); this.$element.find('#db-change-password').click(this.do_change_password); this.$element.find('#back-to-login').click(function() { - self.header = new openerp.base.Header(self, "oe_header"); - self.header.on_logout(); - }); - }, - - do_db_create: function() { - var self = this; + self.header = new openerp.base.Header(self, "oe_header"); + self.header.on_logout(); + }); + }, + + do_db_create: function() { + var self = this; self.db_string = "CREATE DATABASE"; self.$option_id.html(QWeb.render("CreateDB", self)); $("form[name=create_db_form]").validate(); $("input[name=create_confirm_pwd]").rules("add", { - equalTo: 'input[name=create_admin_pwd]', - messages: { - required: "Password did not match !" - } - }); - + equalTo: 'input[name=create_admin_pwd]', + messages: { + required: "Password did not match !" + } + }); + $("input[name=super_admin_pwd]").focus(); self.$option_id.find('form[name=create_db_form]').submit(function(ev) { - ev.preventDefault(); - - var super_admin_pwd = self.$option_id.find("input[name=super_admin_pwd]").val(); - var db = self.$option_id.find("input[name=db_name]").val(); - var demo_data = self.$option_id.find("input[name=demo_data]:checked"); - var db_lang = self.$option_id.find("select[name=db_lang]").val(); - var admin_pwd = self.$option_id.find("input[name=create_admin_pwd]").val(); - var confirm_pwd = self.$option_id.find("input[name=create_confirm_pwd]").val(); + ev.preventDefault(); + + var super_admin_pwd = self.$option_id.find("input[name=super_admin_pwd]").val(); + var db = self.$option_id.find("input[name=db_name]").val(); + var demo_data = self.$option_id.find("input[name=demo_data]:checked"); + var db_lang = self.$option_id.find("select[name=db_lang]").val(); + var admin_pwd = self.$option_id.find("input[name=create_admin_pwd]").val(); + var confirm_pwd = self.$option_id.find("input[name=create_confirm_pwd]").val(); - if (demo_data.length) - demo_data = 'True'; - else - demo_data = 'False'; - - self.rpc("/base/database/db_operation", { - 'flag': 'create', - 'super_admin_pwd': super_admin_pwd, - 'db': db, - 'demo_data': demo_data, - 'db_lang': db_lang, - 'admin_pwd': admin_pwd, - 'confirm_pwd': confirm_pwd - }, - function(result) { - if (result && !result.error) { - - } else if(result.error) { - var db_error_dialog = _.uniqueId("db_error_dialog"); - $('
      ', {id: db_error_dialog}).dialog({ - modal: true, - title: result.title, - buttons: { - Ok: function() { - $(this).dialog("close"); - } - } - }).html("
      " + result.error + "
      "); - } - }); - }); + if (demo_data.length) + demo_data = 'True'; + else + demo_data = 'False'; + + self.rpc("/base/database/create_db", { + 'super_admin_pwd': super_admin_pwd, + 'db': db, + 'demo_data': demo_data, + 'db_lang': db_lang, + 'admin_pwd': admin_pwd, + 'confirm_pwd': confirm_pwd + }, + function(result) { + if (result && !result.error) { + + } else if(result.error) { + var db_error_dialog = _.uniqueId("db_error_dialog"); + $('
      ', {id: db_error_dialog}).dialog({ + modal: true, + title: result.title, + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }).html("
      " + result.error + "
      "); + } + }); + }); }, - do_db_drop: function() { - var self = this; + do_db_drop: function() { + var self = this; self.db_string = "DROP DATABASE"; self.$option_id.html(QWeb.render("DropDB", self)); $("form[name=drop_db_form]").validate(); self.$option_id.find('form[name=drop_db_form]').submit(function(ev) { - ev.preventDefault(); - - var db = self.$option_id.find("select[name=drop_db]").val(); - var password = self.$option_id.find("input[name=drop_pwd]").val(); - - if (confirm("Do you really want to delete the database: " + db + " ?")) { - self.rpc("/base/database/db_operation", {'flag': 'drop', 'db': db, 'password': password}, - function(result) { - if (result && ! result.error) { - self.$option_id.find("select[name=drop_db] :selected").remove(); - self.notification.notify("Dropping database", "The database '" + db + "' has been dropped"); - } else if(result.error) { - var db_error_dialog = _.uniqueId("db_error_dialog"); - $('
      ', {id: db_error_dialog}).dialog({ - modal: true, - title: result.title, - buttons: { - Ok: function() { - $(this).dialog("close"); - } - } - }).html("
      " + result.error + "
      "); - } - }); - } + ev.preventDefault(); + + var db = self.$option_id.find("select[name=drop_db]").val(); + var password = self.$option_id.find("input[name=drop_pwd]").val(); + + if (confirm("Do you really want to delete the database: " + db + " ?")) { + self.rpc("/base/database/drop_db", {'db': db, 'password': password}, + function(result) { + if (result && ! result.error) { + self.$option_id.find("select[name=drop_db] :selected").remove(); + self.notification.notify("Dropping database", "The database '" + db + "' has been dropped"); + } else if(result.error) { + var db_error_dialog = _.uniqueId("db_error_dialog"); + $('
      ', {id: db_error_dialog}).dialog({ + modal: true, + title: result.title, + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }).html("
      " + result.error + "
      "); + } + }); + } }); }, do_db_backup: function() { - var self = this; - self.db_string = "BACKUP DATABASE"; + var self = this; + self.db_string = "BACKUP DATABASE"; self.$option_id.html(QWeb.render("BackupDB", self)); $("form[name=backup_db_form]").validate(); self.$option_id.find('form[name=backup_db_form]').submit(function(ev) { - ev.preventDefault(); - - var db = self.$option_id.find("select[name=backup_db]").val(); - var password = self.$option_id.find("input[name=backup_pwd]").val(); - - self.rpc("/base/database/db_operation", {'flag': 'backup', 'db': db, 'password': password}, - function(result) { - if (result && !result.error) { - self.notification.notify("Backup Database", "Backup has been created for the database: '" + db + "'"); - } else if(result.error) { - var db_error_dialog = _.uniqueId("db_error_dialog"); - $('
      ', {id: db_error_dialog}).dialog({ - modal: true, - title: result.title, - buttons: { - Ok: function() { - $(this).dialog("close"); - } - } - }).html("
      " + result.error + "
      "); - } - }); + ev.preventDefault(); + + var db = self.$option_id.find("select[name=backup_db]").val(); + var password = self.$option_id.find("input[name=backup_pwd]").val(); + + self.rpc("/base/database/backup_db", {'db': db, 'password': password}, + function(result) { + if (result && !result.error) { + self.notification.notify("Backup Database", "Backup has been created for the database: '" + db + "'"); + } else if(result.error) { + var db_error_dialog = _.uniqueId("db_error_dialog"); + $('
      ', {id: db_error_dialog}).dialog({ + modal: true, + title: result.title, + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }).html("
      " + result.error + "
      "); + } + }); }); }, do_db_restore: function() { - var self = this; - self.db_string = "RESTORE DATABASE"; + var self = this; + self.db_string = "RESTORE DATABASE"; self.$option_id.html(QWeb.render("RestoreDB", self)); $("form[name=restore_db_form]").validate(); self.$option_id.find('form[name=restore_db_form]').submit(function(ev) { - ev.preventDefault(); - - var db = self.$option_id.find("input[name=restore_db]").val(); - var password = self.$option_id.find("input[name=restore_pwd]").val(); - var new_db = self.$option_id.find("input[name=new_db]").val(); + ev.preventDefault(); - self.rpc("/base/database/db_operation", {'flag': 'restore', 'db': db, 'password': password, 'new_db': new_db}, - function(result) { - if (result && !result.error) { - self.notification.notify("Restore Database", "You restored your database as: '" + new_db + "'"); - } else if(result.error) { - var db_error_dialog = _.uniqueId("db_error_dialog"); - $('
      ', {id: db_error_dialog}).dialog({ - modal: true, - title: result.title, - buttons: { - Ok: function() { - $(this).dialog("close"); - } - } - }).html("
      " + result.error + "
      "); - } - }); + var db = self.$option_id.find("input[name=restore_db]").val(); + var password = self.$option_id.find("input[name=restore_pwd]").val(); + var new_db = self.$option_id.find("input[name=new_db]").val(); + + self.rpc("/base/database/restore_db", {'db': db, 'password': password, 'new_db': new_db}, + function(result) { + if (result && !result.error) { + self.notification.notify("Restore Database", "You restored your database as: '" + new_db + "'"); + } else if(result.error) { + var db_error_dialog = _.uniqueId("db_error_dialog"); + $('
      ', {id: db_error_dialog}).dialog({ + modal: true, + title: result.title, + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }).html("
      " + result.error + "
      "); + } + }); }); - }, - - do_change_password: function() { - var self = this; + }, + + do_change_password: function() { + var self = this; self.db_string = "CHANGE DATABASE PASSWORD"; self.$option_id.html(QWeb.render("Change_DB_Pwd", self)); $("form[name=change_pwd_form]").validate(); $("input[name=old_pwd]").rules("add", { - minlength: 1, - messages: { - required: "Please enter password !" - } - }); - $("input[name=new_pwd]").rules("add", { - minlength: 1, - messages: { - required: "Please enter password !" - } - }); - $("input[name=confirm_pwd]").rules("add", { - equalTo: 'input[name=new_pwd]', - messages: { - required: "Password did not match !" - } - }); - - $("input[name=old_pwd]").focus(); + minlength: 1, + messages: { + required: "Please enter password !" + } + }); + $("input[name=new_pwd]").rules("add", { + minlength: 1, + messages: { + required: "Please enter password !" + } + }); + $("input[name=confirm_pwd]").rules("add", { + equalTo: 'input[name=new_pwd]', + messages: { + required: "Password did not match !" + } + }); + + $("input[name=old_pwd]").focus(); self.$option_id.find('form[name=change_pwd_form]').submit(function(ev) { - ev.preventDefault(); - - var old_pwd = self.$option_id.find("input[name=old_pwd]").val(); - var new_pwd = self.$option_id.find("input[name=new_pwd]").val(); - var confirm_pwd = self.$option_id.find("input[name=confirm_pwd]").val(); - - self.rpc("/base/database/db_operation", {'flag': 'change_password', 'old_password': old_pwd, 'new_password': new_pwd, 'confirm_password': confirm_pwd}, - function(result) { - if (result && !result.error) { - self.notification.notify("Changed Password", "Password has been changed successfully"); - } else if(result.error) { - var db_error_dialog = _.uniqueId("db_error_dialog"); - $('
      ', {id: db_error_dialog}).dialog({ - modal: true, - title: result.title, - buttons: { - Ok: function() { - $(this).dialog("close"); - } - } - }).html("
      " + result.error + "
      "); - } - }); - }); - } - + ev.preventDefault(); + + var old_pwd = self.$option_id.find("input[name=old_pwd]").val(); + var new_pwd = self.$option_id.find("input[name=new_pwd]").val(); + var confirm_pwd = self.$option_id.find("input[name=confirm_pwd]").val(); + + self.rpc("/base/database/change_password_db", {'old_password': old_pwd, 'new_password': new_pwd, 'confirm_password': confirm_pwd}, + function(result) { + if (result && !result.error) { + self.notification.notify("Changed Password", "Password has been changed successfully"); + } else if(result.error) { + var db_error_dialog = _.uniqueId("db_error_dialog"); + $('
      ', {id: db_error_dialog}).dialog({ + modal: true, + title: result.title, + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }).html("
      " + result.error + "
      "); + } + }); + }); + } + }); openerp.base.Login = openerp.base.Controller.extend({ @@ -984,8 +982,8 @@ openerp.base.Login = openerp.base.Controller.extend({ this.$element.closest(".openerp").addClass("login-mode"); this.$element.find('#oe-db-config').click(function() { - self.database = new openerp.base.Database(self, "oe_database", "oe_db_options"); - self.database.start(); + self.database = new openerp.base.Database(self, "oe_database", "oe_db_options"); + self.database.start(); }); this.$element.find("form").submit(this.on_submit); From a5476e974924f9c0094c6952d41d37393f4af334 Mon Sep 17 00:00:00 2001 From: "noz (OpenERP)" Date: Tue, 26 Jul 2011 13:50:02 +0530 Subject: [PATCH 487/831] [FIX] Update code for exception handling. bzr revid: noz@tinyerp.com-20110726082002-r5j6cbzzz4lyitzj --- addons/base/controllers/main.py | 33 ++++++----------------------- addons/base/static/src/js/chrome.js | 19 ++++++++++++++--- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 4e4c5b47d39..97b266cecca 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -56,9 +56,6 @@ class Xml2Json: # OpenERP Web base Controllers #---------------------------------------------------------- -class DatabaseCreationError(Exception): pass -class DatabaseCreationCrash(DatabaseCreationError): pass - class Database(openerpweb.Controller): _cp_path = "/base/database" @@ -88,25 +85,9 @@ class Database(openerpweb.Controller): ok = False try: return req.session.proxy("db").create(super_admin_pwd, dbname, demo_data, db_lang, admin_pwd) -# while True: -# try: -# progress, users = req.session.proxy('db').get_progress(super_admin_pwd, res) -# if progress == 1.0: -# for x in users: -# if x['login'] == 'admin': -# req.session.login(dbname, 'admin', x['password']) -# ok = True -# break -# else: -# time.sleep(1) -# except: -# raise DatabaseCreationCrash() -# except DatabaseCreationCrash: -# return {'error': "The server crashed during installation.\nWe suggest you to drop this database.", -# 'title': 'Error during database creation'} except Exception, e: if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Create Database'} + return {'error': e.faultCode, 'title': 'Create Database'} else: return {'error': 'Could not create database !', 'title': 'Create Database'} @@ -119,7 +100,7 @@ class Database(openerpweb.Controller): return req.session.proxy("db").drop(password, db) except Exception, e: if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Drop Database'} + return {'error': e.faultCode, 'title': 'Drop Database'} else: return {'error': 'Could not drop database !', 'title': 'Drop Database'} @@ -135,7 +116,7 @@ class Database(openerpweb.Controller): return base64.decodestring(res) except Exception, e: if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Backup Database'} + return {'error': e.faultCode, 'title': 'Backup Database'} else: return {'error': 'Could not drop database !', 'title': 'Backup Database'} @@ -150,7 +131,7 @@ class Database(openerpweb.Controller): return req.session.proxy("db").restore(password, db, data) except Exception, e: if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Restore Database'} + return {'error': e.faultCode, 'title': 'Restore Database'} else: return {'error': 'Could not restore database !', 'title': 'Restore Database'} @@ -164,7 +145,7 @@ class Database(openerpweb.Controller): return req.session.proxy("db").change_admin_password(old_password, new_password) except Exception, e: if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied': - return {'error': 'Bad super admin password !', 'title': 'Change Password'} + return {'error': e.faultCode, 'title': 'Change Password'} else: return {'error': 'Error, password not changed !', 'title': 'Change Password'} @@ -222,8 +203,8 @@ class Session(openerpweb.Controller): try: lang_list = lang_list + (req.session.proxy("db").list_lang() or []) except Exception, e: - pass - return {"lang_list": lang_list} + return {"error": e, "title": "Languages"} + return {"lang_list": lang_list, "error": ""} @openerpweb.jsonrequest def modules(self, req): diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index f9dffcfc66a..5d424c0bccc 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -709,8 +709,21 @@ openerp.base.Database = openerp.base.Controller.extend({ }); this.rpc("/base/session/get_lang_list", {}, function(result) { - self.lang_list = result.lang_list; - self.do_db_create(); + if (!result.error) { + self.lang_list = result.lang_list; + self.do_db_create(); + } else { + var db_error_dialog = _.uniqueId("db_error_dialog"); + $('
      ', {id: db_error_dialog}).dialog({ + modal: true, + title: result.title, + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }).html("
      " + result.error + "
      "); + } }); this.$element.find('#db-create').click(this.do_db_create); @@ -766,7 +779,7 @@ openerp.base.Database = openerp.base.Controller.extend({ function(result) { if (result && !result.error) { - } else if(result.error) { + } else if(result.error) { var db_error_dialog = _.uniqueId("db_error_dialog"); $('
      ', {id: db_error_dialog}).dialog({ modal: true, From 9f31d81739e8a7e4db864a5ae3fb78829921df6e Mon Sep 17 00:00:00 2001 From: "noz (OpenERP)" Date: Tue, 26 Jul 2011 14:17:14 +0530 Subject: [PATCH 488/831] [FIX] Removed tabs and added spaces and header string for operation. bzr revid: noz@tinyerp.com-20110726084714-p4u13eevuf5nw4oc --- addons/base/static/src/js/chrome.js | 5 - addons/base/static/src/xml/base.xml | 328 ++++++++++++++-------------- 2 files changed, 164 insertions(+), 169 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 5d424c0bccc..72844f30f04 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -739,7 +739,6 @@ openerp.base.Database = openerp.base.Controller.extend({ do_db_create: function() { var self = this; - self.db_string = "CREATE DATABASE"; self.$option_id.html(QWeb.render("CreateDB", self)); $("form[name=create_db_form]").validate(); @@ -797,7 +796,6 @@ openerp.base.Database = openerp.base.Controller.extend({ do_db_drop: function() { var self = this; - self.db_string = "DROP DATABASE"; self.$option_id.html(QWeb.render("DropDB", self)); $("form[name=drop_db_form]").validate(); @@ -833,7 +831,6 @@ openerp.base.Database = openerp.base.Controller.extend({ do_db_backup: function() { var self = this; - self.db_string = "BACKUP DATABASE"; self.$option_id.html(QWeb.render("BackupDB", self)); $("form[name=backup_db_form]").validate(); @@ -866,7 +863,6 @@ openerp.base.Database = openerp.base.Controller.extend({ do_db_restore: function() { var self = this; - self.db_string = "RESTORE DATABASE"; self.$option_id.html(QWeb.render("RestoreDB", self)); $("form[name=restore_db_form]").validate(); @@ -900,7 +896,6 @@ openerp.base.Database = openerp.base.Controller.extend({ do_change_password: function() { var self = this; - self.db_string = "CHANGE DATABASE PASSWORD"; self.$option_id.html(QWeb.render("Change_DB_Pwd", self)); $("form[name=change_pwd_form]").validate(); diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 3baaa01ad4b..de2c9eb029e 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -59,180 +59,180 @@ Loading... -
        -
      • Create
      • -
      • Drop
      • -
      • Backup
      • -
      • Restore
      • -
      • Password
      • -
      • Back to Login
      • -
      +
        +
      • Create
      • +
      • Drop
      • +
      • Backup
      • +
      • Restore
      • +
      • Password
      • +
      • Back to Login
      • +
      -
      -
      - - - -
      - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      - - - -
      - +
      + + + + +
      + CREATE DATABASE +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + +
      +
      -
      - - - - -
      - -
      - - - - - - - - - - - - - - -
      -
      +
      + + + + +
      + DROP DATABASE +
      + + + + + + + + + + + + + + +
      +
      -
      - - - - -
      - -
      - - - - - - - - - - - - -
      - - - -
      -
      +
      + + + + +
      + BACKUP DATABASE +
      + + + + + + + + + + + + +
      + + + +
      +
      -
      - - - - -
      - -
      - - - - - - - - - - - - - - - - -
      -
      +
      + + + + +
      + RESTORE DATABASE +
      + + + + + + + + + + + + + + + + +
      +
      -
      - - - - -
      - -
      - - - - - - - - - - - - - - - - -
      -
      +
      + + + + +
      + CHANGE DATABASE PASSWORD +
      + + + + + + + + + + + + + + + + +
      +
      From 2e004d0741960e52fe790b50e91c4a631d0b4fb9 Mon Sep 17 00:00:00 2001 From: "RavishchanraMurari (Open ERP)" Date: Tue, 26 Jul 2011 14:22:18 +0530 Subject: [PATCH 489/831] filter management bzr revid: rmu@tinyerp.com-20110726085218-w3om75wrt0eusxw1 --- openerp/addons/base/ir/ir.xml | 18 ++++++++++++------ openerp/addons/base/ir/ir_filters.py | 19 ++++++++++++------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/openerp/addons/base/ir/ir.xml b/openerp/addons/base/ir/ir.xml index 1280ad5f5e7..a4ab078e589 100644 --- a/openerp/addons/base/ir/ir.xml +++ b/openerp/addons/base/ir/ir.xml @@ -393,14 +393,20 @@ - + + + - - - - - + + + + + + + diff --git a/openerp/addons/base/ir/ir_filters.py b/openerp/addons/base/ir/ir_filters.py index 0146b8dd85b..c0a4977f5a0 100644 --- a/openerp/addons/base/ir/ir_filters.py +++ b/openerp/addons/base/ir/ir_filters.py @@ -29,10 +29,11 @@ class ir_filters(osv.osv): _name = 'ir.filters' _description = 'Filters' - def _list_all_models(self, cr, uid, context=None): - cr.execute("SELECT model, name from ir_model") - return cr.fetchall() - + def copy(self, cr, uid, id, default={}, context={}): + name = self.read(cr, uid, [id], ['name'])[0]['name'] + default.update({'name': name+ _(' (copy)'), 'events':[]}) + return super(ir_filters, self).copy(cr, uid, id, default, context) + def get_filters(self, cr, uid, model): act_ids = self.search(cr,uid,[('model_id','=',model),('user_id','=',uid)]) my_acts = self.read(cr, uid, act_ids, ['name', 'domain','context']) @@ -56,11 +57,15 @@ class ir_filters(osv.osv): cr.execute('CREATE UNIQUE INDEX "ir_filters_name_model_uid_unique_index" ON ir_filters (lower(name), model_id, user_id)') _columns = { - 'name': fields.char('Action Name', size=64, translate=True, required=True), - 'user_id':fields.many2one('res.users', 'User', help='False means for every user'), + 'name': fields.char('Filter Name', size=64, translate=True, required=True), + 'user_id':fields.many2one('res.users', 'User', help='Keep empty if you want this filter to be applied to every user.If you assign a user in this field, only this user will have this filter available.'), 'domain': fields.text('Domain Value', required=True), 'context': fields.text('Context Value', required=True), - 'model_id': fields.selection(_list_all_models, 'Object', size=64, required=True), + 'model_id': fields.many2one('ir.model', 'Object', size=64, required=True), + } + _defaults = { + 'domain': '"[]"', + 'context':'"{}"', } ir_filters() From 3c2ca3d71c0c972beefd808fd5ad1d7dd4194fec Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Tue, 26 Jul 2011 14:54:46 +0530 Subject: [PATCH 490/831] [IMP]base:Remove a configure interface Wizard bzr revid: mma@tinyerp.com-20110726092446-0yrf3cjeqqv7uem2 --- openerp/addons/base/base_update.xml | 54 ----------------------------- 1 file changed, 54 deletions(-) diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml index 1820c8df9f3..dc39e14f1cf 100644 --- a/openerp/addons/base/base_update.xml +++ b/openerp/addons/base/base_update.xml @@ -257,59 +257,5 @@ - - Configure Your Interface - res.config.view - form - - - - - Configure Your Interface - - - If you use OpenERP for the first time we strongly advise you to select the simplified interface, which has less features but is easier. You can always switch later from the user preferences. - - - Configure Your Interface - - - - 12 - - - - - - - - - - - - - Configure Your Interface - ir.actions.act_window - res.config.view - form - - form - new - - - - Administration - 1 - - - - - - special - 1 - skip - - From 93b4c48098ef00495e0cc072b84130955f82b35b Mon Sep 17 00:00:00 2001 From: "Tejas (OpenERP)" Date: Tue, 26 Jul 2011 15:07:22 +0530 Subject: [PATCH 491/831] [usability] issues analysis, applyed filter on both field user_id and assigned_to bzr revid: tta@openerp.com-20110726093722-cyv0rdpy09c5t4lv --- addons/project_issue/report/project_issue_report_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml index 7bf5cc687f1..207e174e480 100644 --- a/addons/project_issue/report/project_issue_report_view.xml +++ b/addons/project_issue/report/project_issue_report_view.xml @@ -89,7 +89,7 @@ - + From 5070784ba2b04d7ffb8935c9cf01dacfd7f03b26 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 26 Jul 2011 12:01:36 +0200 Subject: [PATCH 492/831] [FIX] correctly call on_close callback when clicking on a dialog's close button bzr revid: xmo@openerp.com-20110726100136-1i858bxyipiboz0o --- addons/base/static/src/js/chrome.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 34333abf1be..cc28aea4157 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -532,6 +532,7 @@ openerp.base.Dialog = openerp.base.BaseWidget.extend({ dialog_title: "", identifier_prefix: 'dialog', init: function (parent, options) { + var self = this; this._super(parent); this.options = { modal: true, @@ -542,7 +543,10 @@ openerp.base.Dialog = openerp.base.BaseWidget.extend({ min_height: 0, max_height: '100%', autoOpen: false, - buttons: {} + buttons: {}, + close: function () { + self.stop(); + } }; for (var f in this) { if (f.substr(0, 10) == 'on_button_') { @@ -605,11 +609,7 @@ openerp.base.Dialog = openerp.base.BaseWidget.extend({ this.set_options(options); this.$dialog.dialog(this.options).dialog('open'); }, - close: function(options) { - this.$dialog.dialog('close'); - }, stop: function () { - this.close(); this.$dialog.dialog('destroy'); } }); From 8c615cd17e17bd3eace089272a674ae3b8d98f78 Mon Sep 17 00:00:00 2001 From: "noz (OpenERP)" Date: Tue, 26 Jul 2011 15:59:04 +0530 Subject: [PATCH 493/831] [FIX] Removed clearing the operation area part. bzr revid: noz@tinyerp.com-20110726102904-pd4aq5olbpf9ivs3 --- addons/base/static/src/js/chrome.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 72844f30f04..8e9fb8d3a6a 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -692,7 +692,7 @@ openerp.base.Database = openerp.base.Controller.extend({ this._super(parent, element_id); this.option_id = option_id; this.$option_id = $('#' + option_id); - this.$option_id.html(''); + if(this.parent && this.parent.session) { this.session = this.parent.session; } From e0f401bae4f5b2dadfcc279575ca0f2f6d4a60e1 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Tue, 26 Jul 2011 12:31:00 +0200 Subject: [PATCH 494/831] [IMP] merged the python classes defining res.groups bzr revid: rco@openerp.com-20110726103100-6ibtqsfnim3unpg3 --- openerp/addons/base/res/res_user.py | 40 ++++++++++++----------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/openerp/addons/base/res/res_user.py b/openerp/addons/base/res/res_user.py index f3c0f635d14..58793bc638d 100644 --- a/openerp/addons/base/res/res_user.py +++ b/openerp/addons/base/res/res_user.py @@ -36,6 +36,7 @@ class groups(osv.osv): _description = "Access Groups" _columns = { 'name': fields.char('Group Name', size=64, required=True), + 'users': fields.many2many('res.users', 'res_groups_users_rel', 'gid', 'uid', 'Users'), 'model_access': fields.one2many('ir.model.access', 'group_id', 'Access Controls'), 'rule_groups': fields.many2many('ir.rule', 'rule_group_rel', 'group_id', 'rule_group_id', 'Rules', domain=[('global', '=', False)]), @@ -76,6 +77,21 @@ class groups(osv.osv): aid.write({'groups_id': [(4, gid)]}) return gid + def unlink(self, cr, uid, ids, context=None): + group_users = [] + for record in self.read(cr, uid, ids, ['users'], context=context): + if record['users']: + group_users.extend(record['users']) + if group_users: + user_names = [user.name for user in self.pool.get('res.users').browse(cr, uid, group_users, context=context)] + user_names = list(set(user_names)) + if len(user_names) >= 5: + user_names = user_names[:5] + ['...'] + raise osv.except_osv(_('Warning !'), + _('Group(s) cannot be deleted, because some user(s) still belong to them: %s !') % \ + ', '.join(user_names)) + return super(groups, self).unlink(cr, uid, ids, context=context) + def get_extended_interface_group(self, cr, uid, context=None): data_obj = self.pool.get('ir.model.data') extended_group_data_id = data_obj._get_id(cr, uid, 'base', 'group_extended') @@ -510,30 +526,6 @@ class users(osv.osv): users() -class groups2(osv.osv): ##FIXME: Is there a reason to inherit this object ? - _inherit = 'res.groups' - _columns = { - 'users': fields.many2many('res.users', 'res_groups_users_rel', 'gid', 'uid', 'Users'), - } - - def unlink(self, cr, uid, ids, context=None): - group_users = [] - for record in self.read(cr, uid, ids, ['users'], context=context): - if record['users']: - group_users.extend(record['users']) - - if group_users: - user_names = [user.name for user in self.pool.get('res.users').browse(cr, uid, group_users, context=context)] - user_names = list(set(user_names)) - if len(user_names) >= 5: - user_names = user_names[:5] + ['...'] - raise osv.except_osv(_('Warning !'), - _('Group(s) cannot be deleted, because some user(s) still belong to them: %s !') % \ - ', '.join(user_names)) - return super(groups2, self).unlink(cr, uid, ids, context=context) - -groups2() - class res_config_view(osv.osv_memory): _name = 'res.config.view' _inherit = 'res.config' From 117eb83d911ca45dc3858447414d2124c0dc3e25 Mon Sep 17 00:00:00 2001 From: "Amit (OpenERP)" Date: Tue, 26 Jul 2011 16:16:13 +0530 Subject: [PATCH 495/831] [FIX]:Remove the menu and object Admisnitration > Customization > Reporting > Publish a Note and everything related to this: object, views, etc. bzr revid: apa@tinyerp.com-20110726104613-z8jr2odn54c875vo --- addons/account/board_account_view.xml | 5 -- addons/auction/board_auction_manager_view.xml | 5 -- addons/auction/board_auction_view.xml | 4 -- addons/board/board.py | 45 ------------- addons/board/board_view.xml | 65 +------------------ addons/board/security/ir.model.access.csv | 2 - addons/crm/board_crm_view.xml | 4 -- addons/document/board_document_view.xml | 4 -- addons/event/board_association_view.xml | 4 -- addons/mrp/board_manufacturing_view.xml | 4 -- addons/project/board_project_demo.xml | 11 ---- addons/project/board_project_manager_view.xml | 4 -- addons/project/board_project_view.xml | 11 ---- addons/sale/board_sale_view.xml | 4 -- addons/stock/board_warehouse_view.xml | 5 -- 15 files changed, 2 insertions(+), 175 deletions(-) diff --git a/addons/account/board_account_view.xml b/addons/account/board_account_view.xml index dd424e17ceb..e5b262c07f9 100644 --- a/addons/account/board_account_view.xml +++ b/addons/account/board_account_view.xml @@ -1,11 +1,6 @@ - - - Accountants - - Receivable Accounts report.account.receivable diff --git a/addons/auction/board_auction_manager_view.xml b/addons/auction/board_auction_manager_view.xml index edc799588e3..67ad8334967 100644 --- a/addons/auction/board_auction_manager_view.xml +++ b/addons/auction/board_auction_manager_view.xml @@ -1,11 +1,6 @@ - - Auction manager - - - board.auction.manager.form board.board diff --git a/addons/auction/board_auction_view.xml b/addons/auction/board_auction_view.xml index ed979184a07..cc784c93be2 100644 --- a/addons/auction/board_auction_view.xml +++ b/addons/auction/board_auction_view.xml @@ -1,10 +1,6 @@ - - Auction DashBoard - - Latest objects auction.lots diff --git a/addons/board/board.py b/addons/board/board.py index 85f2cce7ef7..d215981953a 100644 --- a/addons/board/board.py +++ b/addons/board/board.py @@ -195,51 +195,6 @@ class board_line(osv.osv): board_line() - -class board_note_type(osv.osv): - """ - Board note Type - """ - _name = 'board.note.type' - _description = "Note Type" - - _columns = { - 'name': fields.char('Note Type', size=64, required=True), - } - -board_note_type() - -def _type_get(self, cr, uid, context=None): - """ - Get by default Note type. - """ - obj = self.pool.get('board.note.type') - ids = obj.search(cr, uid, []) - res = obj.read(cr, uid, ids, ['name'], context=context) - res = [(r['name'], r['name']) for r in res] - return res - - -class board_note(osv.osv): - """ - Board Note - """ - _name = 'board.note' - _description = "Note" - _columns = { - 'name': fields.char('Subject', size=128, required=True), - 'note': fields.text('Note'), - 'user_id': fields.many2one('res.users', 'Author', size=64), - 'date': fields.date('Date', size=64, required=True), - 'type': fields.selection(_type_get, 'Note type', size=64), - } - _defaults = { - 'user_id': lambda object, cr, uid, context: uid, - 'date': lambda object, cr, uid, context: time.strftime('%Y-%m-%d'), - } - -board_note() - class res_log_report(osv.osv): """ Log Report """ _name = "res.log.report" diff --git a/addons/board/board_view.xml b/addons/board/board_view.xml index d48ddd6a025..76b5aa3f650 100644 --- a/addons/board/board_view.xml +++ b/addons/board/board_view.xml @@ -1,67 +1,6 @@ - - - board.note.search - board.note - search - - - - - - - - - - - - - - - - - - - board.note.tree - board.note - tree - - - - - - - - - - - - board.note.form - board.note - form - -
      - - - - - - - - -
      - - - - - Publish a note - board.note - form - form,tree - - @@ -137,10 +76,10 @@ action="action_view_board_list_form" id="menu_view_board_form" parent="base.reporting_menu" sequence="1"/> - + sequence="3" groups="base.group_system" /--> - - CRM Configuration - - crm.opportunity.user.graph1 crm.lead.report diff --git a/addons/document/board_document_view.xml b/addons/document/board_document_view.xml index 8f102f5936d..8d80b4a1497 100644 --- a/addons/document/board_document_view.xml +++ b/addons/document/board_document_view.xml @@ -1,10 +1,6 @@ - - Document - - board.document.manager.form board.board diff --git a/addons/event/board_association_view.xml b/addons/event/board_association_view.xml index d62e4336202..8b6a4dcd0d4 100644 --- a/addons/event/board_association_view.xml +++ b/addons/event/board_association_view.xml @@ -34,10 +34,6 @@ tree,form - - associations - - board.associations.manager.form board.board diff --git a/addons/mrp/board_manufacturing_view.xml b/addons/mrp/board_manufacturing_view.xml index 9c7a66d3057..03d6947d215 100644 --- a/addons/mrp/board_manufacturing_view.xml +++ b/addons/mrp/board_manufacturing_view.xml @@ -1,10 +1,6 @@ - - Production - - board.mrp.manager.form board.board diff --git a/addons/project/board_project_demo.xml b/addons/project/board_project_demo.xml index 85bf3140d26..39f923a895b 100644 --- a/addons/project/board_project_demo.xml +++ b/addons/project/board_project_demo.xml @@ -2,16 +2,5 @@ - - - - Don't forget the new development policies. - - Project - - diff --git a/addons/project/board_project_manager_view.xml b/addons/project/board_project_manager_view.xml index c34b367a900..b9ff6331db0 100644 --- a/addons/project/board_project_manager_view.xml +++ b/addons/project/board_project_manager_view.xml @@ -2,10 +2,6 @@ - - Project managers - - diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml index 822781ccb38..6470dd3e49d 100644 --- a/addons/project/board_project_view.xml +++ b/addons/project/board_project_view.xml @@ -2,10 +2,6 @@ - - Project - - project.task.tree @@ -79,13 +75,6 @@ - - Public Notes - board.note - form - tree,form - [('type','=','Project')] - board.project.form board.board diff --git a/addons/sale/board_sale_view.xml b/addons/sale/board_sale_view.xml index 533aa56cefe..66b3c8805e4 100644 --- a/addons/sale/board_sale_view.xml +++ b/addons/sale/board_sale_view.xml @@ -1,10 +1,6 @@ - - Sales - - board.sales.manager.form board.board diff --git a/addons/stock/board_warehouse_view.xml b/addons/stock/board_warehouse_view.xml index df2ea7ce438..91245381e2f 100644 --- a/addons/stock/board_warehouse_view.xml +++ b/addons/stock/board_warehouse_view.xml @@ -1,11 +1,6 @@ - - Warehouse - - - Incoming Product stock.move From 2a97be835cc7666fa733b13aff14f432179510d9 Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Tue, 26 Jul 2011 16:23:30 +0530 Subject: [PATCH 496/831] [IMP]base:Remove a config view in py bzr revid: mma@tinyerp.com-20110726105330-qm2ao4s2x4n5l66z --- openerp/addons/base/res/res_user.py | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/openerp/addons/base/res/res_user.py b/openerp/addons/base/res/res_user.py index f3c0f635d14..ae301efa4d9 100644 --- a/openerp/addons/base/res/res_user.py +++ b/openerp/addons/base/res/res_user.py @@ -534,24 +534,4 @@ class groups2(osv.osv): ##FIXME: Is there a reason to inherit this object ? groups2() -class res_config_view(osv.osv_memory): - _name = 'res.config.view' - _inherit = 'res.config' - _columns = { - 'name':fields.char('Name', size=64), - 'view': fields.selection([('simple','Simplified'), - ('extended','Extended')], - 'Interface', required=True ), - } - _defaults={ - 'view':lambda self,cr,uid,*args: self.pool.get('res.users').browse(cr, uid, uid).view or 'simple', - } - - def execute(self, cr, uid, ids, context=None): - res = self.read(cr, uid, ids)[0] - self.pool.get('res.users').write(cr, uid, [uid], - {'view':res['view']}, context=context) - -res_config_view() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 7e9965eec16c52e84a7770d15e55102ba7eda64a Mon Sep 17 00:00:00 2001 From: "Amit (OpenERP)" Date: Tue, 26 Jul 2011 16:24:50 +0530 Subject: [PATCH 497/831] improved bzr revid: apa@tinyerp.com-20110726105450-tlf553tm93fuswm5 --- addons/board/board_view.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/addons/board/board_view.xml b/addons/board/board_view.xml index 76b5aa3f650..9cc8787cbb5 100644 --- a/addons/board/board_view.xml +++ b/addons/board/board_view.xml @@ -76,11 +76,6 @@ action="action_view_board_list_form" id="menu_view_board_form" parent="base.reporting_menu" sequence="1"/> - - From bca6ad53a3518416e6e10f78296cc8bab71b449a Mon Sep 17 00:00:00 2001 From: "Hardik Ansodariy (OpenERP)" Date: Tue, 26 Jul 2011 16:29:01 +0530 Subject: [PATCH 498/831] [IMP]: point of sale modify domain bzr revid: han@tinyerp.com-20110726105901-n0ht0v53n1uxmome --- addons/point_of_sale/point_of_sale_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 2d0b0167b69..b0434718a8c 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -105,7 +105,7 @@ pos.order form - [['date_order','>=',time.strftime('%Y-%m-%d')]] + [] Sales @@ -269,7 +269,7 @@ form tree - [] + [('create_date', '>=', time.strftime('%Y-%m-%d 00:00:00')),('create_date', '<=', time.strftime('%Y-%m-%d 23:59:59'))] From 8b5eab09814d16944a579a8f0317cc58515ec9c6 Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Tue, 26 Jul 2011 16:48:24 +0530 Subject: [PATCH 499/831] [IMP]base:add a demo data in some partner bzr revid: mma@tinyerp.com-20110726111824-icen9nmgln92ep21 --- .../addons/base/res/partner/partner_demo.xml | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/openerp/addons/base/res/partner/partner_demo.xml b/openerp/addons/base/res/partner/partner_demo.xml index c98ae837088..22db92e0c43 100644 --- a/openerp/addons/base/res/partner/partner_demo.xml +++ b/openerp/addons/base/res/partner/partner_demo.xml @@ -104,6 +104,7 @@ Camptocamp 1 + http://www.syleam.fr @@ -166,6 +167,7 @@ 1 + http://mediapole.net @@ -430,17 +432,29 @@ default + Paris + 75016 + + 1 rue Rockfeller Centrale d'achats 1 default Shop 1 + Liege + 6985 + + 2 Impasse de la Soif default Shop 2 + Shanghai + 4785552 + + 52 Chop Suey street @@ -455,6 +469,48 @@ Université de Liège + + Liege + Karine Lesbrouffe + 6985 + +33 (0) 2 33 31 22 10 + + 2 Impasse de la Soif + default + + + + Shanghai + seagate + 4785552 + +33 (0) 2 33 31 22 10 + + 52 Chop Suey street + default + + + + Alencon + Sebastien Thymbra + 61000 + contact@syleam.fr + 1 place de l'Église + +33 (0) 2 33 31 22 10 + + default + + + + Liege + Karine Lesbrouffe + 6985 + contact@tiny.bl + +33 (0) 2 33 31 22 10 + + 2 Impasse de la Soif + default + + - - - product.product.tree - product.product - tree - - - - - - - - - - - - - Configure Your Services - ir.actions.act_window - product.product - form - tree,form - [('type','=','service')] - - - - - - - - 3 - normal - skip - - - - \ No newline at end of file From b91c8272bfcdffb922eba8641f6500670029d83a Mon Sep 17 00:00:00 2001 From: "Tejas (OpenERP)" Date: Tue, 26 Jul 2011 19:03:30 +0530 Subject: [PATCH 511/831] [Usability] Removed the extended filter from the claims analysis view bzr revid: tta@openerp.com-20110726133330-d03av5sb1bsi2bil --- .../crm_claim/report/crm_claim_report_view.xml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/addons/crm_claim/report/crm_claim_report_view.xml b/addons/crm_claim/report/crm_claim_report_view.xml index ff99d81a804..03914378da9 100644 --- a/addons/crm_claim/report/crm_claim_report_view.xml +++ b/addons/crm_claim/report/crm_claim_report_view.xml @@ -101,24 +101,6 @@ - - - - - - - - - - - - - - From 2595248d1653d157895ae1758aefd3ebbe7859a9 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 26 Jul 2011 16:28:19 +0200 Subject: [PATCH 512/831] [FIX] view_mode on homepage dashboard bzr revid: xmo@openerp.com-20110726142819-hp92t261f0h8kvw8 --- addons/board/board_view.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/board/board_view.xml b/addons/board/board_view.xml index 2c5cd432539..b3166726fb0 100644 --- a/addons/board/board_view.xml +++ b/addons/board/board_view.xml @@ -11,7 +11,7 @@ board.home.widgets - board.homepage + Homepage Board board.board form @@ -31,6 +31,7 @@ Home Page board.board form + form From 59d1f3dc4e3e574d14663db4f9a5f893f3b6c423 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 26 Jul 2011 17:04:03 +0200 Subject: [PATCH 513/831] [FIX] fetching of the user's home action when not logge in bzr revid: xmo@openerp.com-20110726150403-cwmw2a14g8gzjwbk --- addons/base/static/src/js/chrome.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 0068d58cee7..aa8fd111549 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -920,18 +920,20 @@ openerp.base.WebClient = openerp.base.Controller.extend({ load_url_state: function () { var self = this; // TODO: add actual loading if there is url state to unpack, test on window.location.hash + + // not logged in + if (!this.session.uid) { return; } var ds = new openerp.base.DataSetSearch(this, 'res.users'); - ds.read_ids([parseInt(this.session.uid, 10)], ['action_id'], function (users) { + ds.read_ids([this.session.uid], ['action_id'], function (users) { var home_action = users[0].action_id; if (!home_action) { self.default_home(); return; } - // oh dear self.execute_home_action(home_action[0], ds); }) }, - default_home: function () { console.log('base default home') }, + default_home: function () { }, /** * Bundles the execution of the home action * From 8184aa0154a451d096f37f81ec0db014f8c3479a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 26 Jul 2011 17:37:47 +0200 Subject: [PATCH 514/831] [imp] improved o2m, added auto-save bzr revid: nicolas.vanhoren@openerp.com-20110726153747-2zj63korpu6xct6e --- addons/base/static/src/js/data.js | 15 ++++++++-- addons/base/static/src/js/form.js | 46 +++++++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index 2e89dacceb8..385bd93d360 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -492,24 +492,33 @@ openerp.base.BufferedDataSet = openerp.base.DataSetStatic.extend({ this.to_create.push(cached); this.cache.push(cached); var to_return = $.Deferred().then(callback); - setTimeout(function() {to_return.resolve({result: cached.id});}, 0); + to_return.resolve({result: cached.id}); return to_return.promise(); }, write: function (id, data, callback) { var self = this; var record = _.detect(this.to_create, function(x) {return x.id === id;}); record = record || _.detect(this.to_write, function(x) {return x.id === id;}); + var dirty = false; if (record) { + for (k in data) { + if (record.values[k] === undefined || record.values[k] !== data[k]) { + dirty = true; + break; + } + } $.extend(record.values, data); } else { + dirty = true; record = {id: id, values: data}; self.to_write.push(record); } var cached = _.detect(this.cache, function(x) {return x.id === id;}); $.extend(cached.values, record.values); - this.on_change(); + if (dirty) + this.on_change(); var to_return = $.Deferred().then(callback); - setTimeout(function () {to_return.resolve({result: true});}, 0); + to_return.resolve({result: true}); return to_return.promise(); }, unlink: function(ids, callback, error_callback) { diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 25dcca611bd..598cdd12c20 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -301,6 +301,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV if (!this.ready) { return false; } + var dirty = false; var invalid = false, values = {}, first_invalid_field = null; @@ -313,6 +314,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV first_invalid_field = f; } } else if (f.touched) { + dirty = true; values[f.name] = f.get_value(); } } @@ -320,18 +322,19 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV first_invalid_field.focus(); this.on_invalid(); return false; - } else { + } else if (dirty) { this.log("About to save", values); if (!this.datarecord.id) { - this.dataset.create(values, function(r) { + return this.dataset.create(values, function(r) { self.on_created(r, success, prepend_on_create); }); } else { - this.dataset.write(this.datarecord.id, values, function(r) { + return this.dataset.write(this.datarecord.id, values, function(r) { self.on_saved(r, success); }); } - return true; + } else { + return false; } }, do_save_edit: function() { @@ -1612,6 +1615,9 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ controller.on_record_loaded.add_last(function() { once.resolve(); }); + controller.on_form_changed.add_last(function() { + self.save_form_view(); + }); } self.is_started.resolve(); }); @@ -1692,6 +1698,7 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ var self = this; if (!this.dataset) return []; + this.save_form_view(); var val = this.dataset.delete_all ? [commands.delete_all()] : []; val = val.concat(_.map(this.dataset.ids, function(id) { var alter_order = _.detect(self.dataset.to_create, function(x) {return x.id === id;}); @@ -1708,9 +1715,38 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ this.dataset.to_delete, function(x) { return commands['delete'](x.id);})); }, + save_form_view: function() { + if (this.viewmanager && this.viewmanager.views && this.viewmanager.active_view && + this.viewmanager.views[this.viewmanager.active_view] && + this.viewmanager.views[this.viewmanager.active_view].controller) { + var view = this.viewmanager.views[this.viewmanager.active_view].controller; + if (this.viewmanager.active_view === "form") { + var res = view.do_save(); + if (res === false) { + // ignore + } else if (res.isRejected()) { + throw "Save or create on one2many dataset is not supposed to fail."; + } else if (!res.isResolved()) { + throw "Asynchronous get_value() is not supported in form view."; + } + } + } + }, validate: function() { this.invalid = false; - // TODO niv + var self = this; + var view = self.viewmanager.views[self.viewmanager.active_view].controller; + if(self.viewmanager.active_view === "list") { + return; + } else if (self.viewmanager.active_view === "form") { + for (var f in view.fields) { + f = view.fields[f]; + if (f.invalid) { + this.invalid = true; + return; + } + } + } } }); From d0234fa5dd424e7722443fda7e41f955d857027a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 26 Jul 2011 23:00:05 +0200 Subject: [PATCH 515/831] [IMP] new Sidebar controller Now, the views are responsible of the management of their own sidebar. There is one sidebar per view. The viewmanager creates the divs for each sidebar (as it does for each view). The new Sidebar controller allows custom section with their own controller. bzr revid: fme@openerp.com-20110726210005-xyalvw764y2xhvte --- addons/base/static/src/css/base.css | 4 + addons/base/static/src/js/form.js | 130 +++++++++++++---------- addons/base/static/src/js/list.js | 19 ++-- addons/base/static/src/js/views.js | 157 ++++++++++++++++------------ addons/base/static/src/xml/base.xml | 54 +++++----- 5 files changed, 210 insertions(+), 154 deletions(-) diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index dbb7d101f96..bbf8cba0fe7 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -1020,6 +1020,10 @@ background: linear-gradient(top, #ffffff 0%,#ebe9e9 100%); /* W3C */ .openerp .closed-sidebar .toggle-sidebar { border-left: none; } +.openerp li.oe_sidebar_print { + padding-left: 20px; + background: 1px 3px url(../img/icons/gtk-print.png) no-repeat; +} .openerp.kitten-mode-activated .main_table { background: url(http://placekitten.com/g/1500/800) repeat; diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 25dcca611bd..e66a073643c 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1,7 +1,7 @@ openerp.base.form = function (openerp) { openerp.base.views.add('form', 'openerp.base.FormView'); -openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormView# */{ +openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormView# */{ /** * Indicates that this view is not searchable, and thus that no search * view should be displayed (if there is one active). @@ -19,6 +19,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV */ init: function(parent, element_id, dataset, view_id, options) { this._super(parent, element_id); + this.set_default_options(); this.view_manager = parent || new openerp.base.NullViewManager(); this.dataset = dataset; this.model = dataset.model; @@ -53,10 +54,14 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV context.add(this.view_manager.action.context); } return this.rpc("/base/formview/load", {"model": this.model, "view_id": this.view_id, - toolbar:!!this.flags.sidebar, context: context}, this.on_loaded); + toolbar: this.options.sidebar, context: context}, this.on_loaded); } }, stop: function() { + if (this.sidebar) { + this.sidebar.attachments.stop(); + this.sidebar.stop(); + } _.each(this.widgets, function(w) { w.stop(); }); @@ -85,12 +90,16 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV $('' + openerp.base.json_node_to_xml(self.fields_view.arch, true) + '').dialog({ width: '95%', height: 600}); }); - if(this.view_manager.sidebar) - this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); + if (this.options.sidebar && this.options.sidebar_id) { + this.sidebar = new openerp.base.Sidebar(this, this.options.sidebar_id); + this.sidebar.start(); + this.sidebar.attachments = new openerp.base.form.SidebarAttachments(this.sidebar, this.sidebar.add_section("Attachments"), this); + this.sidebar.add_toolbar(data.fields_view.toolbar); + this.sidebar.do_unfold(); + } this.has_been_loaded.resolve(); }, do_show: function () { - var self = this; var promise; if (this.dataset.index === null) { // null index means we should start a new record @@ -98,13 +107,17 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV } else { promise = this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); } - self.$element.show(); - if(this.view_manager.sidebar) - this.view_manager.sidebar.do_refresh(true); + this.$element.show(); + if (this.sidebar) { + this.sidebar.$element.show(); + } return promise; }, do_hide: function () { this.$element.hide(); + if (this.sidebar) { + this.sidebar.$element.hide(); + } }, on_record_loaded: function(record) { if (!record) { @@ -144,7 +157,9 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.on_form_changed(); this.show_invalid = this.ready = true; this.do_update_pager(record.id == null); - this.do_update_sidebar(); + if (this.sidebar) { + this.sidebar.attachments.do_update(); + } if (this.default_focus_field) { this.default_focus_field.focus(); } @@ -389,7 +404,9 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.dataset.index = 0; } this.do_update_pager(); - this.do_update_sidebar(); + if (this.sidebar) { + this.sidebar.attachments.do_update(); + } this.notification.notify("Record created", "The record has been created with id #" + this.datarecord.id); if (success) { success(_.extend(r, {created: true})); @@ -406,51 +423,6 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV do_cancel: function () { this.notification.notify("Cancelling form"); }, - do_update_sidebar: function() { - if (this.flags.sidebar === false || this.view_manager.sidebar === undefined) { - return; - } - if (!this.datarecord.id) { - this.on_attachments_loaded([]); - } else { - (new openerp.base.DataSetSearch( - this, 'ir.attachment', this.dataset.get_context(), - [['res_model', '=', this.dataset.model], - ['res_id', '=', this.datarecord.id], - ['type', 'in', ['binary', 'url']]])).read_slice( - ['name', 'url', 'type'], false, false, - this.on_attachments_loaded); - } - }, - on_attachments_loaded: function(attachments) { - this.$sidebar = this.view_manager.sidebar.$element.find('.sidebar-attachments'); - this.attachments = attachments; - this.$sidebar.html(QWeb.render('FormView.sidebar.attachments', this)); - this.$sidebar.find('.oe-sidebar-attachment-delete').click(this.on_attachment_delete); - this.$sidebar.find('.oe-binary-file').change(this.on_attachment_changed); - }, - on_attachment_changed: function(e) { - window[this.element_id + '_iframe'] = this.do_update_sidebar; - var $e = $(e.target); - if ($e.val() != '') { - this.$sidebar.find('form.oe-binary-form').submit(); - $e.parent().find('input[type=file]').attr('disabled', 'true'); - $e.parent().find('button').attr('disabled', 'true').find('img, span').toggle(); - } - }, - on_attachment_delete: function(e) { - var self = this, $e = $(e.currentTarget); - var name = _.trim($e.parent().find('a.oe-sidebar-attachments-link').text()); - if (confirm("Do you really want to delete the attachment " + name + " ?")) { - this.rpc('/base/dataset/unlink', { - model: 'ir.attachment', - ids: [parseInt($e.attr('data-id'))] - }, function(r) { - $e.parent().remove(); - self.notification.notify("Delete an attachment", "The attachment '" + name + "' has been deleted"); - }); - } - }, reload: function() { if (this.datarecord.id) { this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); @@ -471,6 +443,54 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV /** @namespace */ openerp.base.form = {}; +openerp.base.form.SidebarAttachments = openerp.base.Controller.extend({ + init: function(parent, element_id, form_view) { + this._super(parent, element_id); + this.view = form_view; + }, + do_update: function() { + if (!this.view.datarecord.id) { + this.on_attachments_loaded([]); + } else { + (new openerp.base.DataSetSearch( + this, 'ir.attachment', this.view.dataset.get_context(), + [['res_model', '=', this.view.dataset.model], + ['res_id', '=', this.view.datarecord.id], + ['type', 'in', ['binary', 'url']]])).read_slice( + ['name', 'url', 'type'], false, false, + this.on_attachments_loaded); + } + }, + on_attachments_loaded: function(attachments) { + this.attachments = attachments; + this.$element.html(QWeb.render('FormView.sidebar.attachments', this)); + this.$element.find('.oe-binary-file').change(this.on_attachment_changed); + this.$element.find('.oe-sidebar-attachment-delete').click(this.on_attachment_delete); + }, + on_attachment_changed: function(e) { + window[this.element_id + '_iframe'] = this.do_update; + var $e = $(e.target); + if ($e.val() != '') { + this.$element.find('form.oe-binary-form').submit(); + $e.parent().find('input[type=file]').attr('disabled', 'true'); + $e.parent().find('button').attr('disabled', 'true').find('img, span').toggle(); + } + }, + on_attachment_delete: function(e) { + var self = this, $e = $(e.currentTarget); + var name = _.trim($e.parent().find('a.oe-sidebar-attachments-link').text()); + if (confirm("Do you really want to delete the attachment " + name + " ?")) { + this.rpc('/base/dataset/unlink', { + model: 'ir.attachment', + ids: [parseInt($e.attr('data-id'))] + }, function(r) { + $e.parent().remove(); + self.notification.notify("Delete an attachment", "The attachment '" + name + "' has been deleted"); + }); + } + } +}); + openerp.base.form.compute_domain = function(expr, fields) { var stack = []; for (var i = expr.length - 1; i >= 0; i--) { diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index a2fca3aa89e..a4e516721ca 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -102,6 +102,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi */ init: function(parent, element_id, dataset, view_id, options) { this._super(parent, element_id); + this.set_default_options(); this.view_manager = parent || new openerp.base.NullViewManager(); this.dataset = dataset; this.model = dataset.model; @@ -267,9 +268,11 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi }) .val(self._limit || 'NaN'); }); - if(this.view_manager.sidebar) - this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); - + if (this.options.sidebar && this.options.sidebar_id) { + this.sidebar = new openerp.base.Sidebar(this, this.options.sidebar_id); + this.sidebar.start(); + this.sidebar.add_toolbar(data.fields_view.toolbar); + } }, /** * Configures the ListView pager based on the provided dataset's information @@ -393,16 +396,20 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi }, do_show: function () { this.$element.show(); + if (this.sidebar) { + this.sidebar.$element.show(); + } if (this.hidden) { this.$element.find('.oe-listview-content').append( this.groups.apoptosis().render()); this.hidden = false; } - if(this.view_manager.sidebar) - this.view_manager.sidebar.do_refresh(true); }, do_hide: function () { this.$element.hide(); + if (this.sidebar) { + this.sidebar.$element.hide(); + } this.hidden = true; }, /** @@ -422,7 +429,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi model: this.model, view_id: this.view_id, context: this.dataset.get_context(), - toolbar: !!this.flags.sidebar + toolbar: this.options.sidebar }, callback); } }, diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index 1b5452bb5a3..b98b0bc637f 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -120,7 +120,6 @@ openerp.base.ViewManager = openerp.base.Controller.extend({ {return x instanceof Array? {view_id: x[0], view_type: x[1]} : x;}); this.views = {}; this.flags = this.flags || {}; - this.sidebar = new openerp.base.NullSidebar(); this.registry = openerp.base.views; }, /** @@ -134,7 +133,12 @@ openerp.base.ViewManager = openerp.base.Controller.extend({ self.on_mode_switch($(this).data('view-type')); }); _.each(this.views_src, function(view) { - self.views[view.view_type] = $.extend({}, view, {controller: null}); + self.views[view.view_type] = $.extend({}, view, { + controller : null, + options : _.extend({ + sidebar_id : self.element_id + '_sidebar_' + view.view_type + }, self.flags) + }); }); if (this.flags.views_switcher === false) { this.$element.find('.oe_vm_switch').hide(); @@ -158,7 +162,7 @@ openerp.base.ViewManager = openerp.base.Controller.extend({ if (!view.controller) { // Lazy loading of views var controllerclass = this.registry.get_object(view_type); - var controller = new controllerclass( this, this.element_id + "_view_" + view_type, + var controller = new controllerclass(this, this.element_id + '_view_' + view_type, this.dataset, view.view_id, view.options); if (view.embedded_view) { controller.set_embedded_view(view.embedded_view); @@ -275,7 +279,6 @@ openerp.base.NullViewManager = openerp.base.generate_null_object_class(openerp.b if(parent) this.session = parent.session; this.action = {flags: {}}; - this.sidebar = new openerp.base.NullSidebar(); } }); @@ -300,19 +303,10 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({ // Not elegant but allows to avoid flickering of SearchView#do_hide this.flags.search_view = this.flags.pager = this.flags.sidebar = this.flags.action_buttons = false; } - if (this.flags.sidebar) { - this.sidebar = new openerp.base.Sidebar(null, this); - } }, start: function() { var inital_view_loaded = this._super(); - // init sidebar - if (this.flags.sidebar) { - this.$element.find('.view-manager-main-sidebar').html(this.sidebar.render()); - this.sidebar.start(); - } - var search_defaults = {}; _.each(this.action.context, function (value, key) { var match = /^search_default_(.*)$/.exec(key); @@ -337,7 +331,6 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({ }, stop: function() { // should be replaced by automatic destruction implemented in BaseWidget - this.sidebar.stop(); this._super(); }, /** @@ -364,62 +357,88 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({ } }); -openerp.base.Sidebar = openerp.base.BaseWidget.extend({ - template: "ViewManager.sidebar", - init: function(parent, view_manager) { - this._super(parent, view_manager.session); - this.view_manager = view_manager; - this.sections = []; - }, - set_toolbar: function(toolbar) { - this.sections = []; - var self = this; - _.each([["print", "Reports"], ["action", "Actions"], ["relate", "Links"]], function(type) { - if (toolbar[type[0]].length == 0) - return; - var section = {elements:toolbar[type[0]], label:type[1]}; - self.sections.push(section); - }); - this.do_refresh(true); - }, - do_refresh: function(new_view) { - var view = this.view_manager.active_view; - var the_condition = this.sections.length > 0 && _.detect(this.sections, - function(x) {return x.elements.length > 0;}) != undefined - && (!new_view || view != 'list'); - - this.$element.toggleClass('open-sidebar', the_condition) - .toggleClass('closed-sidebar', !the_condition); - - this.$element.html(QWeb.render("ViewManager.sidebar.internal", { sidebar: this, view: view })); - - var self = this; - this.$element.find(".toggle-sidebar").click(function(e) { - self.$element.toggleClass('open-sidebar closed-sidebar'); - e.stopPropagation(); - e.preventDefault(); - }); - - this.$element.find("a.oe_sidebar_action_a").click(function(e) { - var $this = jQuery(this); - var index = $this.attr("data-index").split('-'); - var action = self.sections[index[0]].elements[index[1]]; - action.flags = { - new_window : true - }; - self.session.action_manager.do_action(action); - e.stopPropagation(); - e.preventDefault(); - }); +openerp.base.Sidebar = openerp.base.Controller.extend({ + init: function(parent, element_id) { + this._super(parent, element_id); + this.items = {}; }, start: function() { - this._super(); - this.do_refresh(false); + var self = this; + this._super(this, arguments); + this.$element.html(QWeb.render('Sidebar')); + this.$element.find(".toggle-sidebar").click(function(e) { + self.do_toggle(); + }); + }, + add_toolbar: function(toolbar) { + var self = this; + _.each([['print', "Reports"], ['action', "Actions"], ['relate', "Links"]], function(type) { + var items = toolbar[type[0]]; + if (items.length) { + for (var i = 0; i < items.length; i++) { + items[i] = { + label: items[i]['name'], + action: items[i], + classname: 'oe_sidebar_' + type[0] + } + } + self.add_section(type[1], items); + } + }); + }, + add_section: function(name, items) { + // For each section, we pass a name/label and optionally an array of items. + // If no items are passed, then the section will be created as a custom section + // returning back an element_id to be used by a custom controller. + // Else, the section is a standard section with items displayed as links. + // An item is a dictonary : { + // label: label to be displayed for the link, + // action: action to be launch when the link is clicked, + // callback: a function to be executed when the link is clicked, + // classname: optionnal dom class name for the line, + // } + // Note: The item should have one action or/and a callback + var self = this, + section_id = _.uniqueId(this.element_id + '_section_'); + if (items) { + for (var i = 0; i < items.length; i++) { + items[i].element_id = _.uniqueId(section_id + '_item_'); + this.items[items[i].element_id] = items[i]; + } + } + var $section = $(QWeb.render("Sidebar.section", { + section_id: section_id, + name: name, + items: items + })); + if (items) { + $section.find('a.oe_sidebar_action_a').click(function() { + var item = self.items[$(this).attr('id')]; + if (item.callback) { + item.callback(); + } + if (item.action) { + item.action.flags = item.action.flags || {}; + item.action.flags.new_window = true; + self.do_action(item.action); + } + return false; + }); + } + $section.appendTo(this.$element.find('div.sidebar-actions')); + return section_id; + }, + do_fold: function() { + this.$element.addClass('closed-sidebar').removeClass('open-sidebar'); + }, + do_unfold: function() { + this.$element.addClass('open-sidebar').removeClass('closed-sidebar'); + }, + do_toggle: function() { + this.$element.toggleClass('open-sidebar closed-sidebar'); } }); -openerp.base.NullSidebar = openerp.base.generate_null_object_class(openerp.base.Sidebar); - openerp.base.Export = openerp.base.Dialog.extend({ dialog_title: "Export", template: 'ExportDialog', @@ -440,6 +459,14 @@ openerp.base.Export = openerp.base.Dialog.extend({ }); openerp.base.View = openerp.base.Controller.extend({ + set_default_options: function(options) { + this.options = options || {}; + _.defaults(this.options, { + // All possible views options should be defaulted here + sidebar_id: null, + sidebar: true + }); + }, /** * Fetches and executes the action identified by ``action_data``. * diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 0f7c3f3d51f..10d1539cde1 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -232,10 +232,32 @@
      + + ";if(this.second_scale){for(var j=this.second_scale.x_unit,k=[this._trace_x[0]],h=[],o=[this.dx,this.dx],l=0,m=0;m
";var p=a.firstChild;p.style.height=c+"px";var v=a.lastChild;v.style.position="relative";for(var r=0;rd.start_date?1:-1});if(scheduler._tooltip){if(scheduler._tooltip.date== +f)return;scheduler._tooltip.innerHTML=""}else{var i=scheduler._tooltip=document.createElement("DIV");i.className="dhx_tooltip";document.body.appendChild(i);i.onclick=scheduler._click.dhx_cal_data}for(var g="",e=0;e";g+="
"+(d[e]._timed?scheduler.templates.event_date(d[e].start_date): +"")+"
";g+="
 
";g+=scheduler.templates[a.name+"_tooltip"](d[e].start_date,d[e].end_date,d[e])+""}scheduler._tooltip.style.display="";scheduler._tooltip.style.top="0px";scheduler._tooltip.style.left=document.body.offsetWidth-c.left-scheduler._tooltip.offsetWidth<0?c.left-scheduler._tooltip.offsetWidth+"px":c.left+b.src.offsetWidth+"px";scheduler._tooltip.date=f;scheduler._tooltip.innerHTML=g;scheduler._tooltip.style.top=document.body.offsetHeight- +c.top-scheduler._tooltip.offsetHeight<0?c.top-scheduler._tooltip.offsetHeight+b.src.offsetHeight+"px":c.top+"px"}}function t(){dhtmlxEvent(scheduler._els.dhx_cal_data[0],"mouseover",function(a){var b=scheduler.matrix[scheduler._mode];if(b){var c=scheduler._locate_cell_timeline(a),a=a||event,f=a.target||a.srcElement;if(c)return F(b,c,getOffset(c.src))}u()});t=function(){}}function G(a){for(var b=a.parentNode.childNodes,c=0;cb.x)break;for(g=0;jb.y)break;b.fields={};a.y_unit[j]||(j=a.y_unit.length-1);b.fields[a.y_property]=c[a.y_property]=a.y_unit[j].key;b.x=0;this._drag_mode=="new-size"&&c.start_date*1==this._drag_start*1&&e++;var k=e>=a._trace_x.length?scheduler.date.add(a._trace_x[a._trace_x.length-1],a.x_step,a.x_unit):a._trace_x[e];b.y=Math.round((k-this._min_date)/(6E4*this.config.time_step));b.custom=!0;b.shift=f;return b}}};scheduler.render_timeline_event=function(a,b,c){var f=v(a,!1,this._step),d=v(a,!0, +this._step),i=scheduler.xy.bar_height,g=2+b*i,e=i+g-2,j=a[this.y_property];if(!this._events_height[j]||this._events_height[j]'+scheduler.templates.event_bar_text(a.start_date, +a.end_date,a)+"";if(c){var m=document.createElement("DIV");m.innerHTML=l;var n=this.order[j],p=scheduler._els.dhx_cal_data[0].firstChild.rows[n].cells[1].firstChild;scheduler._rendered.push(m.firstChild);p.appendChild(m.firstChild)}else return l};scheduler.renderMatrix=function(a){scheduler._els.dhx_cal_data[0].scrollTop=0;var b=scheduler.date[this.name+"_start"](scheduler._date);scheduler._min_date=scheduler.date.add(b,this.x_start*this.x_step,this.x_unit);scheduler._max_date=scheduler.date.add(scheduler._min_date, +this.x_size*this.x_step,this.x_unit);scheduler._table_view=!0;if(this.second_scale){if(a&&!this._header_resized)this._header_resized=scheduler.xy.scale_height,scheduler.xy.scale_height*=2,scheduler._els.dhx_cal_header[0].className+=" dhx_second_cal_header";if(!a&&this._header_resized){scheduler.xy.scale_height/=2;this._header_resized=!1;var c=scheduler._els.dhx_cal_header[0];c.className=c.className.replace(/ dhx_second_cal_header/gi,"")}}p.call(this,a)};scheduler._locate_cell_timeline=function(a){for(var a= +a||event,b=a.target?a.target:a.srcElement;b&&b.tagName!="TD";)b=b.parentNode;if(b&&b.tagName=="TD"){var c=b.className.split(" ")[0];if(c=="dhx_matrix_cell")if(scheduler._isRender("cell"))return{x:b.cellIndex-1,y:b.parentNode.rowIndex,src:b};else{for(var f=b.parentNode;f&&f.tagName!="TD";)f=f.parentNode;return{x:b.cellIndex,y:f.parentNode.rowIndex,src:b}}else if(c=="dhx_matrix_scell")return{x:-1,y:b.parentNode.rowIndex,src:b,scale:!0}}return!1};var H=scheduler._click.dhx_cal_data;scheduler._click.dhx_cal_data= +function(a){var b=H.apply(this,arguments),c=scheduler.matrix[scheduler._mode];if(c){var f=scheduler._locate_cell_timeline(a);f&&(f.scale?scheduler.callEvent("onYScaleClick",[f.y,c.y_unit[f.y],a||event]):scheduler.callEvent("onCellClick",[f.x,f.y,c._trace_x[f.x],(c._matrix[f.y]||{})[f.x]||[],a||event]))}return b};scheduler.dblclick_dhx_matrix_cell=function(a){var b=scheduler.matrix[scheduler._mode];if(b){var c=scheduler._locate_cell_timeline(a);c&&(c.scale?scheduler.callEvent("onYScaleDblClick",[c.y, +b.y_unit[c.y],a||event]):scheduler.callEvent("onCellDblClick",[c.x,c.y,b._trace_x[c.x],(b._matrix[c.y]||{})[c.x]||[],a||event]))}};scheduler.dblclick_dhx_matrix_scell=function(a){return scheduler.dblclick_dhx_matrix_cell(a)};scheduler._isRender=function(a){return scheduler.matrix[scheduler._mode]&&scheduler.matrix[scheduler._mode].render==a};scheduler.attachEvent("onCellDblClick",function(a,b,c,f,d){if(!(this.config.readonly||d.type=="dblclick"&&!this.config.dblclick_create)){var i=scheduler.matrix[scheduler._mode], +g={};g.start_date=i._trace_x[a];g.end_date=i._trace_x[a+1]?i._trace_x[a+1]:scheduler.date.add(i._trace_x[a],i.x_step,i.x_unit);g[scheduler.matrix[scheduler._mode].y_property]=i.y_unit[b].key;scheduler.addEventNow(g,null,d)}});scheduler.attachEvent("onBeforeDrag",function(){return scheduler._isRender("cell")?!1:!0})})(); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js index e24ad910174..2458d37e841 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js @@ -1 +1,11 @@ -window.dhtmlXTooltip={version:0.1};dhtmlXTooltip.config={className:"dhtmlXTooltip tooltip",timeout_to_display:50,delta_x:15,delta_y:-20};dhtmlXTooltip.tooltip=document.createElement("div");dhtmlXTooltip.tooltip.className=dhtmlXTooltip.config.className;dhtmlXTooltip.show=function(D,G){dhtmlXTooltip.tooltip.className=dhtmlXTooltip.config.className;var H=this.position(D);var E=D.target||D.srcElement;if(this.isTooltip(E)){return }var C=H.x+dhtmlXTooltip.config.delta_x||0;var B=H.y-dhtmlXTooltip.config.delta_y||0;this.tooltip.style.visibility="hidden";if(this.tooltip.style.removeAttribute){this.tooltip.style.removeAttribute("right");this.tooltip.style.removeAttribute("bottom")}else{this.tooltip.style.removeProperty("right");this.tooltip.style.removeProperty("bottom")}this.tooltip.style.left="0px";this.tooltip.style.top="0px";this.tooltip.innerHTML=G;scheduler._obj.appendChild(this.tooltip);var A=this.tooltip.offsetWidth;var F=this.tooltip.offsetHeight;if(document.body.offsetWidth-C-A<0){if(this.tooltip.style.removeAttribute){this.tooltip.style.removeAttribute("left")}else{this.tooltip.style.removeProperty("left")}this.tooltip.style.right=(document.body.offsetWidth-C+2*dhtmlXTooltip.config.delta_x||0)+"px"}else{if(C<0){this.tooltip.style.left=(H.x+Math.abs(dhtmlXTooltip.config.delta_x||0))+"px"}else{this.tooltip.style.left=C+"px"}}if(document.body.offsetHeight-B-F<0){if(this.tooltip.style.removeAttribute){this.tooltip.style.removeAttribute("top")}else{this.tooltip.style.removeProperty("top")}this.tooltip.style.bottom=(document.body.offsetHeight-B-2*dhtmlXTooltip.config.delta_y||0)+"px"}else{if(B<0){this.tooltip.style.top=(H.y+Math.abs(dhtmlXTooltip.config.delta_y||0))+"px"}else{this.tooltip.style.top=B+"px"}}this.tooltip.style.visibility="visible"};dhtmlXTooltip.hide=function(){if(this.tooltip.parentNode){this.tooltip.parentNode.removeChild(this.tooltip)}};dhtmlXTooltip.delay=function(D,B,C,A){if(this.tooltip._timeout_id){window.clearTimeout(this.tooltip._timeout_id)}this.tooltip._timeout_id=setTimeout(function(){var E=D.apply(B,C);D=obj=C=null;return E},A||this.config.timeout_to_display)};dhtmlXTooltip.isTooltip=function(B){var A=false;while(B&&!A){A=(B.className==this.tooltip.className);B=B.parentNode}return A};dhtmlXTooltip.position=function(A){var A=A||window.event;if(A.pageX||A.pageY){return{x:A.pageX,y:A.pageY}}var B=((dhtmlx._isIE)&&(document.compatMode!="BackCompat"))?document.documentElement:document.body;return{x:A.clientX+B.scrollLeft-B.clientLeft,y:A.clientY+B.scrollTop-B.clientTop}};scheduler.attachEvent("onMouseMove",function(D,F){var C=F||window.event;var E=C.target||C.srcElement;if(D||dhtmlXTooltip.isTooltip(E)){var B=scheduler.getEvent(D)||scheduler.getEvent(dhtmlXTooltip.tooltip.event_id);dhtmlXTooltip.tooltip.event_id=B.id;var G=scheduler.templates.tooltip_text(B.start_date,B.end_date,B);if(_isIE){var A=document.createEventObject(C)}dhtmlXTooltip.delay(dhtmlXTooltip.show,dhtmlXTooltip,[A||C,G])}else{dhtmlXTooltip.delay(dhtmlXTooltip.hide,dhtmlXTooltip,[])}});scheduler.templates.tooltip_text=function(C,A,B){return"Event: "+B.text+"
Start date: "+scheduler.templates.tooltip_date_format(C)+"
End date: "+scheduler.templates.tooltip_date_format(A)}; \ No newline at end of file +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +window.dhtmlXTooltip={};dhtmlXTooltip.config={className:"dhtmlXTooltip tooltip",timeout_to_display:50,delta_x:15,delta_y:-20};dhtmlXTooltip.tooltip=document.createElement("div");dhtmlXTooltip.tooltip.className=dhtmlXTooltip.config.className; +dhtmlXTooltip.show=function(b,d){var c=dhtmlXTooltip,f=this.tooltip,a=f.style;c.tooltip.className=c.config.className;var e=this.position(b),k=b.target||b.srcElement;if(!this.isTooltip(k)){var g=0,l=0,h=scheduler._obj;if(h.offsetParent){do g+=h.offsetLeft,l+=h.offsetTop;while(h=h.offsetParent)}var i=e.x+(c.config.delta_x||0)-g,j=e.y-(c.config.delta_y||0)-l;a.visibility="hidden";a.removeAttribute?(a.removeAttribute("right"),a.removeAttribute("bottom")):(a.removeProperty("right"),a.removeProperty("bottom")); +a.left="0";a.top="0";this.tooltip.innerHTML=d;scheduler._obj.appendChild(this.tooltip);var m=this.tooltip.offsetWidth,n=this.tooltip.offsetHeight;scheduler._obj.offsetWidth-i-(scheduler.xy.margin_left||0)-m<0?(a.removeAttribute?a.removeAttribute("left"):a.removeProperty("left"),a.right=scheduler._obj.offsetWidth-i+2*(c.config.delta_x||0)+"px"):a.left=i<0?e.x+Math.abs(c.config.delta_x||0)+"px":i+"px";scheduler._obj.offsetHeight-j-(scheduler.xy.margin_top||0)-n<0?(a.removeAttribute?a.removeAttribute("top"): +a.removeProperty("top"),a.bottom=scheduler._obj.offsetHeight-j-2*(c.config.delta_y||0)+"px"):a.top=j<0?e.y+Math.abs(c.config.delta_y||0)+"px":j+"px";a.visibility="visible"}};dhtmlXTooltip.hide=function(){this.tooltip.parentNode&&this.tooltip.parentNode.removeChild(this.tooltip)};dhtmlXTooltip.delay=function(b,d,c,f){this.tooltip._timeout_id&&window.clearTimeout(this.tooltip._timeout_id);this.tooltip._timeout_id=setTimeout(function(){var a=b.apply(d,c);b=d=c=null;return a},f||this.config.timeout_to_display)}; +dhtmlXTooltip.isTooltip=function(b){for(var d=!1;b&&!d;)d=b.className==this.tooltip.className,b=b.parentNode;return d};dhtmlXTooltip.position=function(b){b=b||window.event;if(b.pageX||b.pageY)return{x:b.pageX,y:b.pageY};var d=dhtmlx._isIE&&document.compatMode!="BackCompat"?document.documentElement:document.body;return{x:b.clientX+d.scrollLeft-d.clientLeft,y:b.clientY+d.scrollTop-d.clientTop}}; +scheduler.attachEvent("onMouseMove",function(b,d){var c=window.event||d,f=c.target||c.srcElement,a=dhtmlXTooltip;if(b||a.isTooltip(f)){var e=scheduler.getEvent(b)||scheduler.getEvent(a.tooltip.event_id);if(e){a.tooltip.event_id=e.id;var k=scheduler.templates.tooltip_text(e.start_date,e.end_date,e),g=void 0;_isIE&&(g=document.createEventObject(c));a.delay(a.show,a,[g||c,k])}}else a.delay(a.hide,a,[])});scheduler.attachEvent("onBeforeDrag",function(){dhtmlXTooltip.hide();return!0}); +scheduler.templates.tooltip_date_format=scheduler.date.date_to_str("%Y-%m-%d %H:%i");scheduler.templates.tooltip_text=function(b,d,c){return"Event: "+c.text+"
Start date: "+scheduler.templates.tooltip_date_format(b)+"
End date: "+scheduler.templates.tooltip_date_format(d)}; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css index e72e38213d0..212423da5d1 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css @@ -1,9 +1,5 @@ -/* -dhtmlxScheduler v.2.3 - +/* This software is allowed to use under GPL or you need to obtain Commercial or Enterise License -to use it in not GPL project. Please contact sales@dhtmlx.com for details - -(c) DHTMLX Ltd. -*/ +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ .dhx_cal_prev_button,.dhx_cal_next_button,.dhx_cal_today_button,.dhx_cal_add_button{top:6px!important;left:10px;border:1px solid #575D65;border-top:1px solid #4E5052;color:#FFF;text-shadow:0 -1px 0 #65696E;background-image:-webkit-gradient(linear,left top,left bottom,from(#B2B6BC),to(#6B737E));background-color:#989B9F;background-position:0 1px;background-repeat:repeat-x;-webkit-border-radius:5px;padding:3px;text-align:center;text-decoration:none;}.dhx_cal_today_button{left:55px;}.dhx_cal_next_button{left:146px;}.dhx_cal_add_button{right:9px;left:auto;width:20px;font-size:20px;padding:1px 2px 2px 2px;}.dhx_cal_navline .dhx_cal_date{top:7px;left:160px;right:350px;padding-top:4px;width:auto;text-align:center;color:#4F5459;}.dhx_cal_navline{background:-webkit-gradient(linear,0% 0,0% 100%,color-stop(0,#F4F5F8),color-stop(0.3,#F1F2F4),color-stop(0.7,#C4C7D0),color-stop(1,#A6AAB7));border-bottom:1px solid #797F90;height:40px!important;font-family:Helvetica;font-weight:bold;font-size:13px;}.dhx_cal_tab{top:6px!important;color:#4F5459;text-align:center;padding:5px 10px;width:80px;background-image:-webkit-gradient(linear,0% 0,0% 100%,from(#F7F7F7),to(#B9BDC7));background-color:#CFD0D1;background-position:0 1px;background-repeat:repeat-x;text-decoration:none;border:1px solid #95989F;border-top:1px solid #686A6A;height:16px;}.dhx_cal_tab.active{background-image:-webkit-gradient(linear,0% 0,0% 100%,from(#B0B2B6),to(#666D74));background-color:#949799;background-position:0 1px;background-repeat:repeat-x;border:1px solid #4C4D4F;border-top:1px solid #52585C;color:#F8F8F8;text-shadow:0 -1px 0 #5E6063;text-decoration:none;height:16px;padding:5px 10px;z-index:100;}.dhx_cal_light{-webkit-transition:-webkit-transform;-webkit-transform-style:preserve-3d;}.dhx_cal_cover{opacity:.5;}.dhx_cal_ltext{padding-top:0;padding-bottom:0;}.dhx_cal_ltext textarea{-webkit-background-size:0;-webkit-border-radius:0;height:94%;}.dhx_mini_calendar .dhx_month_head{height:35px;line-height:35px;text-align:center;padding-right:0;padding-left:0;}.dhx_mini_calendar .dhx_year_month{height:35px;line-height:30px;background:-webkit-gradient(linear,0% 0,0% 100%,from(#F4F5F8),to(#8A8E9A));font-family:Helvetica;font-weight:bold;font-size:13px;}.dhx_mini_calendar .dhx_year_month .dhx_cal_prev_button,.dhx_mini_calendar .dhx_year_month .dhx_cal_next_button{line-height:normal;} \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js index 9004dfcee68..70b4abeda7c 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js @@ -1,9 +1,26 @@ -/* -dhtmlxScheduler v.2.3 - +/* This software is allowed to use under GPL or you need to obtain Commercial or Enterise License -to use it in not GPL project. Please contact sales@dhtmlx.com for details - -(c) DHTMLX Ltd. -*/ -TouchScroll=function(D,E,A,B){this.debug=!!E;this.compat=!!B;this.rough=!!A;this.axisX=this.axisY=true;if(typeof D!="object"){D=document.getElementById(D)}this._init();D.addEventListener("touchstart",this,false);D.addEventListener("webkitTransitionEnd",this,false);if(this.debug){D.addEventListener("mousedown",this,false)}this.node=D;for(var C=0;C50){this.scroll_x=true}if(Math.abs(A)>50){this.scroll_y=true}if(this.scroll_x||this.scroll_y){this.x=G.pageX;this.y=G.pageY;this.scroll=true;var C=this.get_matrix();D=D+(this.target_x-C.e);A=A+(this.target_y-C.f);var F="2000ms";var B="500ms";this.target_x=D+C.e;this.target_y=A+C.f;if(this.target_x>0){this.target_x=0;F=B}if(this.target_y>0){this.target_y=0;F=B}if(this.mx-this.dx+this.target_x<0){this.target_x=-this.mx+this.dx;F=B}if(this.my-this.dy+this.target_y<0){this.target_y=-this.my+this.dy;F=B}this.set_matrix({e:this.target_x,f:this.target_y},F);this._add_scroll(C.e,C.f);this._correct_scroll(this.target_x,this.target_y,F);this.onscroll(this.target_x,this.target_y)}return false},_correct_scroll:function(A,F,B){if(this.scrolls.x){var E=this.get_matrix(this.scrolls.x);var D=this.dx*A/this.mx;this.set_matrix({e:-1*D,f:0},B,this.scrolls.x)}if(this.scrolls.y){var E=this.get_matrix(this.scrolls.y);var C=this.dy*F/this.my;this.set_matrix({e:0,f:-1*C},B,this.scrolls.y)}},_remove_scroll:function(){if(this.scrolls.x){this.scrolls.x.parentNode.removeChild(this.scrolls.x)}if(this.scrolls.y){this.scrolls.y.parentNode.removeChild(this.scrolls.y)}this.scrolls={}},_add_scroll:function(){if(this.scrolls.ready){return }var C;if(this.my>5&&this.axisY){var B=this.dy*this.dy/this.my-1;this.scrolls.y=C=document.createElement("DIV");C.className="dhx_scroll_y";C.style.height=B+"px";this.node.appendChild(C)}if(this.mx>5&&this.axisX){var B=this.dx*this.dx/this.mx;this.scrolls.x=C=document.createElement("DIV");C.className="dhx_scroll_x";C.style.width=B+"px";this.node.appendChild(C)}var A=this.get_matrix();this._correct_scroll(A.e,A.f,0);this.scrolls.ready=true},_init_events:function(){document.addEventListener("touchmove",this,false);document.addEventListener("touchend",this,false);if(this.debug){document.addEventListener("mousemove",this,false);document.addEventListener("mouseup",this,false)}},_deinit_events:function(){document.removeEventListener("touchmove",this,false);document.removeEventListener("touchend",this,false);if(this.debug){document.removeEventListener("mousemove",this,false);document.removeEventListener("mouseup",this,false)}},_init:function(){document.styleSheets[0].insertRule(".dhx_scroll_x { width:50px;height:4px;background:rgba(0, 0, 0, 0.4);position:absolute; left:0px; bottom:3px; border:1px solid transparent; -webkit-border-radius:4px;-webkit-transition: -webkit-transform;}",0);document.styleSheets[0].insertRule(".dhx_scroll_y { width:4px;height:50px;background:rgba(0, 0, 0, 0.4);position:absolute; top:0px; right:3px; border:1px solid transparent; -webkit-border-radius:4px;-webkit-transition: -webkit-transform;}",0);this._init=function(){}}};scheduler._ipad_before_init=function(){scheduler._ipad_before_init=function(){};scheduler.xy.scroll_width=0;var C=scheduler._els.dhx_cal_tab;var B=42;for(var A=C.length-1;A>=0;A--){C[A].style.cssText+="top:4px;";C[A].style.left="auto";C[A].style.right=B+"px";if(A==0){C[A].style.cssText+=";-webkit-border-top-left-radius: 5px; -webkit-border-bottom-left-radius: 5px;"}if(A==C.length-1){C[A].style.cssText+=";-webkit-border-top-right-radius: 5px; -webkit-border-bottom-right-radius: 5px;"}B+=100}scheduler._els.dhx_cal_prev_button[0].innerHTML="<";scheduler._els.dhx_cal_next_button[0].innerHTML=">";var F=document.createElement("div");F.className="dhx_cal_add_button";F.innerHTML="+ ";F.onclick=function(){var G=new Date();if(G>scheduler._min_date&&G50||G>50){D=window.clearTimeout(D)}}if(scheduler.config.touch_actions){scheduler._on_mouse_move(I.touches[0])}};this._obj.ontouchstart=function(G){if(scheduler._lightbox_id){return }D=window.setTimeout(function(){scheduler._on_dbl_click(G.touches[0],(G.target.className?G.target:G.target.parentNode))},400);E=[G.touches[0].pageX,G.touches[0].pageY];if(scheduler.config.touch_actions){scheduler._on_mouse_down(G.touches[0])}};this._obj.ontouchend=function(G){if(D){D=window.clearTimeout(D)}if(scheduler.config.touch_actions){scheduler._on_mouse_up(G.touches[0])}}};scheduler._ipad_init=function(){var C=document.createElement("DIV");var B=scheduler._els.dhx_cal_data[0];C.appendChild(B);C.style.cssText="overflow:hidden; width:100%; overflow:hidden;position:relative;";this._obj.appendChild(C);B.style.overflowY="hidden";var A=new TouchScroll(C);A.axisX=false;scheduler._ipad_init=function(){B.parentNode.style.height=B.style.height;B.parentNode.style.top=B.style.top;B.style.height=B.scrollHeight+"px";B.style.top="0px";if(Math.abs(B.parentNode.offsetHeight-B.offsetHeight)<5){A.axisY=false;A.scrollTo(0,0,0)}else{A.axisY=true}A.refresh()};scheduler.attachEvent("onSchedulerResize",function(){setTimeout(function(){scheduler._ipad_init()});return true});scheduler._ipad_init()};scheduler.attachEvent("onViewChange",function(){scheduler._ipad_init()});scheduler.attachEvent("onBeforeViewChange",function(){scheduler._ipad_before_init();return true});scheduler.showCover=function(B){this.show_cover();if(B){B.style.display="block";var C=getOffset(this._obj);B.style.top=B.offsetHeight*-1+"px";B.style.left=Math.round(C.left+(this._obj.offsetWidth-B.offsetWidth)/2)+"px"}var A=this._get_lightbox();A.style.webkitTransform="translate(0px,"+(B.offsetHeight+41)+"px)";A.style.webkitTransitionDuration="500ms"};scheduler.hideCover=function(A){if(A){A.style.webkitTransform="translate(0px,"+(A.offsetHeight+41)*-1+"px)";A.style.webkitTransitionDuration="500ms"}this.hide_cover()};scheduler.config.lightbox.sections[0].height=100;if(scheduler.form_blocks.calendar_time){scheduler.config.lightbox.sections[1].type="calendar_time";scheduler._mini_cal_arrows=["<",">"]}scheduler.xy.menu_width=0;scheduler.attachEvent("onClick",function(){return false});scheduler.locale.labels.new_event="";scheduler._mouse_coords=function(C){var F;var A=document.body;var E=document.documentElement;if(C.pageX||C.pageY){F={x:C.pageX,y:C.pageY}}else{F={x:C.clientX+(A.scrollLeft||E.scrollLeft||0)-A.clientLeft,y:C.clientY+(A.scrollTop||E.scrollTop||0)-A.clientTop}}F.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width);var D=F.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+this._dy_shift+this.xy.scale_height-(this._els.dhx_cal_data[0]._scrollTop||0);if(!this._table_view){F.x=Math.max(0,Math.ceil(F.x/this._cols[0])-1);F.y=Math.max(0,Math.ceil(F.y*60/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step)}else{var B=0;for(B=1;BF.y){break}}F.y=(Math.max(0,Math.ceil(F.x/this._cols[0])-1)+Math.max(0,B-1)*7)*24*60/this.config.time_step;F.x=0}return F}; \ No newline at end of file +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +TouchScroll=function(a,b,c,e){this.debug=!!b;this.compat=!!e;this.rough=!!c;this.axisX=this.axisY=!0;typeof a!="object"&&(a=document.getElementById(a));this._init();a.addEventListener("touchstart",this,!1);a.addEventListener("webkitTransitionEnd",this,!1);this.debug&&a.addEventListener("mousedown",this,!1);this.node=a;for(var d=0;d50)this.scroll_x=!0;if(Math.abs(e)>50)this.scroll_y=!0;if(this.scroll_x|| +this.scroll_y){this.x=b.pageX;this.y=b.pageY;this.scroll=!0;var d=this.get_matrix();c+=this.target_x-d.e;e+=this.target_y-d.f;var f="2000ms",g="500ms";this.target_x=c+d.e;this.target_y=e+d.f;if(this.target_x>0)this.target_x=0,f=g;if(this.target_y>0)this.target_y=0,f=g;if(this.mx-this.dx+this.target_x<0)this.target_x=-this.mx+this.dx,f=g;if(this.my-this.dy+this.target_y<0)this.target_y=-this.my+this.dy,f=g;this.set_matrix({e:this.target_x,f:this.target_y},f);this._add_scroll(d.e,d.f);this._correct_scroll(this.target_x, +this.target_y,f);this.onscroll(this.target_x,this.target_y)}return!1}}},_correct_scroll:function(a,b,c){if(this.scrolls.x){var e=this.get_matrix(this.scrolls.x),d=this.dx*a/this.mx;this.set_matrix({e:-1*d,f:0},c,this.scrolls.x)}if(this.scrolls.y){var e=this.get_matrix(this.scrolls.y),f=this.dy*b/this.my;this.set_matrix({e:0,f:-1*f},c,this.scrolls.y)}},_remove_scroll:function(){this.scrolls.x&&this.scrolls.x.parentNode.removeChild(this.scrolls.x);this.scrolls.y&&this.scrolls.y.parentNode.removeChild(this.scrolls.y); +this.scrolls={}},_add_scroll:function(){if(!this.scrolls.ready){var a;if(this.my>5&&this.axisY){var b=this.dy*this.dy/this.my-1;this.scrolls.y=a=document.createElement("DIV");a.className="dhx_scroll_y";a.style.height=b+"px";this.node.appendChild(a)}if(this.mx>5&&this.axisX)b=this.dx*this.dx/this.mx,this.scrolls.x=a=document.createElement("DIV"),a.className="dhx_scroll_x",a.style.width=b+"px",this.node.appendChild(a);var c=this.get_matrix();this._correct_scroll(c.e,c.f,0);this.scrolls.ready=!0}},_init_events:function(){document.addEventListener("touchmove", +this,!1);document.addEventListener("touchend",this,!1);this.debug&&(document.addEventListener("mousemove",this,!1),document.addEventListener("mouseup",this,!1))},_deinit_events:function(){document.removeEventListener("touchmove",this,!1);document.removeEventListener("touchend",this,!1);this.debug&&(document.removeEventListener("mousemove",this,!1),document.removeEventListener("mouseup",this,!1))},_init:function(){document.styleSheets[0].insertRule(".dhx_scroll_x { width:50px;height:4px;background:rgba(0, 0, 0, 0.4);position:absolute; left:0px; bottom:3px; border:1px solid transparent; -webkit-border-radius:4px;-webkit-transition: -webkit-transform;}", +0);document.styleSheets[0].insertRule(".dhx_scroll_y { width:4px;height:50px;background:rgba(0, 0, 0, 0.4);position:absolute; top:0px; right:3px; border:1px solid transparent; -webkit-border-radius:4px;-webkit-transition: -webkit-transform;}",0);this._init=function(){}}}; +scheduler._ipad_before_init=function(){scheduler._ipad_before_init=function(){};scheduler.xy.scroll_width=0;for(var a=scheduler._els.dhx_cal_tab,b=42,c=a.length-1;c>=0;c--)a[c].style.cssText+="top:4px;",a[c].style.left="auto",a[c].style.right=b+"px",c==0&&(a[c].style.cssText+=";-webkit-border-top-left-radius: 5px; -webkit-border-bottom-left-radius: 5px;"),c==a.length-1&&(a[c].style.cssText+=";-webkit-border-top-right-radius: 5px; -webkit-border-bottom-right-radius: 5px;"),b+=100;scheduler._els.dhx_cal_prev_button[0].innerHTML= +"<";scheduler._els.dhx_cal_next_button[0].innerHTML=">";var e=document.createElement("div");e.className="dhx_cal_add_button";e.innerHTML="+ ";e.onclick=function(){var a=new Date;a>scheduler._min_date&&a50||c>50)d=window.clearTimeout(d)}scheduler.config.touch_actions&&scheduler._on_mouse_move(a.touches[0])};this._obj.ontouchstart=function(a){scheduler._lightbox_id||(d=window.setTimeout(function(){scheduler._on_dbl_click(a.touches[0],a.target.className?a.target:a.target.parentNode)},400),f=[a.touches[0].pageX,a.touches[0].pageY],scheduler.config.touch_actions&&scheduler._on_mouse_down(a.touches[0]))};this._obj.ontouchend=function(a){d&&(d=window.clearTimeout(d)); +scheduler.config.touch_actions&&scheduler._on_mouse_up(a.touches[0])}}; +scheduler._ipad_init=function(){var a=document.createElement("DIV"),b=scheduler._els.dhx_cal_data[0];a.appendChild(b);a.style.cssText="overflow:hidden; width:100%; overflow:hidden;position:relative;";this._obj.appendChild(a);b.style.overflowY="hidden";var c=new TouchScroll(a);c.axisX=!1;scheduler._ipad_init=function(){b.parentNode.style.height=b.style.height;b.parentNode.style.top=b.style.top;b.style.height=b.scrollHeight+"px";b.style.top="0px";Math.abs(b.parentNode.offsetHeight-b.offsetHeight)<5? +(c.axisY=!1,c.scrollTo(0,0,0)):c.axisY=!0;c.refresh()};scheduler.attachEvent("onSchedulerResize",function(){setTimeout(function(){scheduler._ipad_init()});return!0});scheduler._ipad_init()};scheduler.attachEvent("onViewChange",function(){scheduler._ipad_init()});scheduler.attachEvent("onBeforeViewChange",function(){scheduler._ipad_before_init();return!0}); +scheduler.showCover=function(a){this.show_cover();if(a){a.style.display="block";var b=getOffset(this._obj);a.style.top=a.offsetHeight*-1+"px";a.style.left=Math.round(b.left+(this._obj.offsetWidth-a.offsetWidth)/2)+"px"}var c=this._get_lightbox(),e=c.addEventListener("webkitTransitionEnd",function(){c.style.top="41px";c.style.webkitTransform="";c.style.webkitTransition="";c.removeEventListener(e)},!1);c.style.webkitTransform="translate(0px,"+(a.offsetHeight+41)+"px)";c.style.webkitTransitionDuration= +"500ms"};scheduler.hideCover=function(a){if(a){var b=a.addEventListener("webkitTransitionEnd",function(){a.style.top=(a.offsetHeight+41)*-1+"px";a.style.webkitTransform="";a.style.webkitTransition="";a.removeEventListener(b)},!1);a.style.webkitTransform="translate(0px,"+(a.offsetHeight+41)*-1+"px)";a.style.webkitTransitionDuration="500ms"}this.hide_cover()};scheduler.config.lightbox.sections[0].height=100; +if(scheduler.form_blocks.calendar_time)scheduler.config.lightbox.sections[1].type="calendar_time",scheduler._mini_cal_arrows=["<",">"];scheduler.xy.menu_width=0;scheduler.attachEvent("onClick",function(){return!1});scheduler.locale.labels.new_event=""; +scheduler._mouse_coords=function(a){var b,c=document.body,e=document.documentElement;b=a.pageX||a.pageY?{x:a.pageX,y:a.pageY}:{x:a.clientX+(c.scrollLeft||e.scrollLeft||0)-c.clientLeft,y:a.clientY+(c.scrollTop||e.scrollTop||0)-c.clientTop};b.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width);var d=b.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+this._dy_shift+this.xy.scale_height-(this._els.dhx_cal_data[0]._scrollTop||0);if(this._table_view){for(var f=0,f=1;f +b.y)break;b.y=(Math.max(0,Math.ceil(b.x/this._cols[0])-1)+Math.max(0,f-1)*7)*1440/this.config.time_step;b.x=0}else b.x=Math.max(0,Math.ceil(b.x/this._cols[0])-1),b.y=Math.max(0,Math.ceil(b.y*60/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step);return b}; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js index ecd08cc8cdd..c131cb1eb13 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js @@ -1 +1,19 @@ -scheduler.attachEvent("onTimelineCreated",function(A){if(A.render=="tree"){A.y_unit_original=A.y_unit;A.y_unit=scheduler._getArrayToDisplay(A.y_unit_original);scheduler.form_blocks[A.name]={render:function(C){var B="
";return B},set_value:function(D,I,G,C){var J=scheduler._getArrayForSelect(scheduler.matrix[C.type].y_unit_original,C.type);D.innerHTML="";var F=document.createElement("select");D.appendChild(F);var H=D.getElementsByTagName("select")[0];for(var E=0;E";G=(H.folder_events_available)?"dhx_data_table folder_events":"dhx_data_table folder"}else{I=H.dy;D="dhx_row_item";B="dhx_matrix_scell item";C="";G="dhx_data_table"}td_content="
"+C+"
"+(scheduler.templates[H.name+"_scale_label"](E.key,E.label,H)||E.label)+"
";F={height:I,style_height:A,tr_className:D,td_className:B,td_content:td_content,table_className:G}}return F});var section_id_before;scheduler.attachEvent("onBeforeEventChanged",function(D,A,C){if(scheduler._isRender("tree")){var B=scheduler.getSection(D.section_id);if(typeof B.children!="undefined"&&!scheduler.matrix[scheduler._mode].folder_events_available){if(!C){D[scheduler.matrix[scheduler._mode].y_property]=section_id_before}return false}}return true});scheduler.attachEvent("onBeforeDrag",function(D,E,C){var A=scheduler._locate_cell_timeline(C);if(A){var B=scheduler.matrix[scheduler._mode].y_unit[A.y].key;if(typeof scheduler.matrix[scheduler._mode].y_unit[A.y].children!="undefined"&&!scheduler.matrix[scheduler._mode].folder_events_available){return false}}if(scheduler._isRender("tree")){ev=scheduler.getEvent(D);section_id_before=B||ev[scheduler.matrix[scheduler._mode].y_property]}return true});scheduler._getArrayToDisplay=function(C){var A=[];var B=function(G,D){var F=D||0;for(var E=0;E";return c},set_value:function(b,c,g,e){var d=scheduler._getArrayForSelect(scheduler.matrix[e.type].y_unit_original, +e.type);b.innerHTML="";var a=document.createElement("select");b.appendChild(a);for(var i=b.getElementsByTagName("select")[0],j=0;j",h=c.folder_events_available?"dhx_data_table folder_events":"dhx_data_table folder"):(e=c.dy,d="dhx_row_item",i="dhx_matrix_scell item",j="",h="dhx_data_table");td_content="
"+j+"
"+(scheduler.templates[c.name+"_scale_label"](b.key,b.label,b)||b.label)+"
";g={height:e,style_height:f,tr_className:d,td_className:i,td_content:td_content,table_className:h}}return g});var section_id_before; +scheduler.attachEvent("onBeforeEventChanged",function(a,b,c){if(scheduler._isRender("tree")){var g=scheduler.getSection(a[scheduler.matrix[scheduler._mode].y_property]);if(typeof g.children!="undefined"&&!scheduler.matrix[scheduler._mode].folder_events_available)return c||(a[scheduler.matrix[scheduler._mode].y_property]=section_id_before),!1}return!0}); +scheduler.attachEvent("onBeforeDrag",function(a,b,c){var g=scheduler._locate_cell_timeline(c);if(g){var e=scheduler.matrix[scheduler._mode].y_unit[g.y].key;if(typeof scheduler.matrix[scheduler._mode].y_unit[g.y].children!="undefined"&&!scheduler.matrix[scheduler._mode].folder_events_available)return!1}scheduler._isRender("tree")&&(ev=scheduler.getEvent(a),section_id_before=e||ev[scheduler.matrix[scheduler._mode].y_property]);return!0}); +scheduler._getArrayToDisplay=function(a){var b=[],c=function(a,e){for(var d=e||0,f=0;f"+D[F].label+""}else{return D[F].label}};scheduler.date["add_"+A]=function(F,G){return scheduler.date.add(F,G,"day")};scheduler.date["get_"+A+"_end"]=function(F){return scheduler.date.add(F,B||D.length,"day")};scheduler._props[A]={map_to:E,options:D,size:B,step:C,position:0};scheduler.attachEvent("onOptionsLoad",function(){var F=scheduler._props[A].order={};for(var G=0;G=K.size+K.position){return false}}}return H};scheduler._reset_scale=function(){var M=scheduler._props[this._mode];var H=B.apply(this,arguments);if(M){this._max_date=this.date.add(this._min_date,1,"day");var L=this._els.dhx_cal_data[0].childNodes;for(var I=0;II.order[J[I.map_to]]?1:-1})}else{G.apply(this,arguments)}};scheduler.attachEvent("onEventAdded",function(K,I){if(this._loading){return true}for(var H in scheduler._props){var J=scheduler._props[H];if(typeof I[J.map_to]=="undefined"){I[J.map_to]=J.options[0].key}}return true});scheduler.attachEvent("onEventCreated",function(K,H){var J=scheduler._props[this._mode];if(J){var I=this.getEvent(K);this._mouse_coords(H);D(J,I);this.event_updated(I)}return true})})(); \ No newline at end of file +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler._props={}; +scheduler.createUnitsView=function(a,f,j,g,k,l){if(typeof a=="object")j=a.list,f=a.property,g=a.size||0,k=a.step||1,l=a.skip_incorrect,a=a.name;scheduler._props[a]={map_to:f,options:j,step:k,position:0};if(g>scheduler._props[a].options.length)scheduler._props[a]._original_size=g,g=0;scheduler._props[a].size=g;scheduler._props[a].skip_incorrect=l||!1;scheduler.date[a+"_start"]=scheduler.date.day_start;scheduler.templates[a+"_date"]=function(a){return scheduler.templates.day_date(a)};scheduler.templates[a+ +"_scale_date"]=function(c){var h=scheduler._props[a].options;if(!h.length)return"";var f=(scheduler._props[a].position||0)+Math.floor((scheduler._correct_shift(c.valueOf(),1)-scheduler._min_date.valueOf())/864E5);return h[f].css?""+h[f].label+"":h[f].label};scheduler.date["add_"+a]=function(a,f){return scheduler.date.add(a,f,"day")};scheduler.date["get_"+a+"_end"]=function(c){return scheduler.date.add(c,scheduler._props[a].size||scheduler._props[a].options.length, +"day")};scheduler.attachEvent("onOptionsLoad",function(){for(var c=scheduler._props[a],f=c.order={},g=c.options,i=0;ig.length?(c._original_size=c.size,c.size=0):c.size=c._original_size||c.size;scheduler._date&&scheduler._mode==a&&scheduler.setCurrentView(scheduler._date,scheduler._mode)});scheduler.callEvent("onOptionsLoad",[])}; +scheduler.scrollUnit=function(a){var f=scheduler._props[this._mode];if(f)f.position=Math.min(Math.max(0,f.position+a),f.options.length-f.size),this.update_view()}; +(function(){var a=function(b){var d=scheduler._props[scheduler._mode];if(d&&d.order&&d.skip_incorrect){for(var a=[],e=0;e=a.size+a.position)return!1}}return d};scheduler._reset_scale=function(){var b= +scheduler._props[this._mode],a=k.apply(this,arguments);if(b){this._max_date=this.date.add(this._min_date,1,"day");for(var c=this._els.dhx_cal_data[0].childNodes,e=0;ed.order[b[d.map_to]]?1:-1}):i.apply(this,arguments)};scheduler.attachEvent("onEventAdded",function(a,d){if(this._loading)return!0;for(var c in scheduler._props){var e=scheduler._props[c];if(typeof d[e.map_to]=="undefined")d[e.map_to]=e.options[0].key}return!0});scheduler.attachEvent("onEventCreated",function(a,c){var f=scheduler._props[this._mode]; +if(f){var e=this.getEvent(a);this._mouse_coords(c);g(f,e);this.event_updated(e)}return!0})})(); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js index 8992c37f373..bb342e484e0 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js @@ -1,9 +1,6 @@ -/* -dhtmlxScheduler v.2.3 - +/* This software is allowed to use under GPL or you need to obtain Commercial or Enterise License -to use it in not GPL project. Please contact sales@dhtmlx.com for details - -(c) DHTMLX Ltd. -*/ -scheduler.attachEvent("onTemplatesReady",function(){var C=true;var A=scheduler.date.str_to_date("%Y-%m-%d");var B=scheduler.date.date_to_str("%Y-%m-%d");scheduler.attachEvent("onBeforeViewChange",function(K,D,F,J){if(C){C=false;var E={};var G=(document.location.hash||"").replace("#","").split(",");for(var H=0;H";for(var h=0;h
"}b+=""}scheduler._els.dhx_cal_date[0].innerHTML=scheduler.templates[scheduler._mode+ +"_date"](scheduler._min_date,scheduler._max_date,scheduler._mode);scheduler._els.dhx_cal_data[0].innerHTML=b;for(var i=scheduler._els.dhx_cal_data[0].getElementsByTagName("div"),l=[],a=0;aj&&o.push(r)}o.sort(function(a,b){return a.start_date.valueOf()==b.start_date.valueOf()?a.id>b.id?1:-1:a.start_date>b.start_date?1:-1});for(h=0;h=j.valueOf()&&d.start_date.valueOf()<=n.valueOf()&&(p="start"),d.end_date.valueOf()>=j.valueOf()&&d.end_date.valueOf()<=n.valueOf()&&(p="end"));g.innerHTML=scheduler.templates.week_agenda_event_text(d.start_date,d.end_date,d,j,p);g.setAttribute("event_id",d.id);t.appendChild(g)}j=scheduler.date.add(j,1,"day");n=scheduler.date.add(n,1,"day")}};scheduler.week_agenda_view= +function(b){scheduler._min_date=scheduler.date.week_start(scheduler._date);scheduler._max_date=scheduler.date.add(scheduler._min_date,1,"week");scheduler.set_sizes();if(b)scheduler._table_view=!0,scheduler._wa._prev_data_border=scheduler._els.dhx_cal_data[0].style.borderTop,scheduler._els.dhx_cal_data[0].style.borderTop=0,scheduler._els.dhx_cal_data[0].style.overflowY="hidden",scheduler._els.dhx_cal_date[0].innerHTML="",scheduler._els.dhx_cal_data[0].style.top=parseInt(scheduler._els.dhx_cal_data[0].style.top)- +scheduler.xy.bar_height-1+"px",scheduler._els.dhx_cal_data[0].style.height=parseInt(scheduler._els.dhx_cal_data[0].style.height)+scheduler.xy.bar_height+1+"px",scheduler._els.dhx_cal_header[0].style.display="none",e(),f();else{scheduler._table_view=!1;if(scheduler._wa._prev_data_border)scheduler._els.dhx_cal_data[0].style.borderTop=scheduler._wa._prev_data_border;scheduler._els.dhx_cal_data[0].style.overflowY="auto";scheduler._els.dhx_cal_data[0].style.top=parseInt(scheduler._els.dhx_cal_data[0].style.top)+ +scheduler.xy.bar_height+"px";scheduler._els.dhx_cal_data[0].style.height=parseInt(scheduler._els.dhx_cal_data[0].style.height)-scheduler.xy.bar_height+"px";scheduler._els.dhx_cal_header[0].style.display="block"}};scheduler.mouse_week_agenda=function(b){for(var a=b.ev,c=a.srcElement||a.target;c.parentNode;){if(c._date)var e=c._date;c=c.parentNode}if(!e)return b;b.x=0;var h=e.valueOf()-scheduler._min_date.valueOf();b.y=Math.ceil(h/6E4/this.config.time_step);if(this._drag_mode=="move"){this._drag_event._dhx_changed= +!0;this._select_id=this._drag_id;for(var k=0;k";K+="
"+(H[J]._timed?this.templates.event_date(H[J].start_date):"")+"
";K+="
 
";K+=this.templates.year_tooltip(H[J].start_date,H[J].end_date,H[J])+""}this._tooltip.style.display="";this._tooltip.style.top="0px";if(document.body.offsetWidth-O.left-this._tooltip.offsetWidth<0){this._tooltip.style.left=O.left-this._tooltip.offsetWidth+"px"}else{this._tooltip.style.left=O.left+N.offsetWidth+"px"}this._tooltip.date=I;this._tooltip.innerHTML=K;if(document.body.offsetHeight-O.top-this._tooltip.offsetHeight<0){this._tooltip.style.top=O.top-this._tooltip.offsetHeight+N.offsetHeight+"px"}else{this._tooltip.style.top=O.top+"px"}};scheduler._init_year_tooltip=function(){dhtmlxEvent(scheduler._els.dhx_cal_data[0],"mouseover",function(H){if(!F()){return }var H=H||event;var I=H.target||H.srcElement;if((I.className||"").indexOf("dhx_year_event")!=-1){scheduler.showToolTip(E(I.getAttribute("date")),getOffset(I),H,I)}else{scheduler.hideToolTip()}});this._init_year_tooltip=function(){}};scheduler.attachEvent("onSchedulerResize",function(){if(F()){this.year_view(true);return false}return true});scheduler._get_year_cell=function(J){var H=J.getMonth()+12*(J.getFullYear()-this._min_date.getFullYear())-this.week_starts._month;var I=this._els.dhx_cal_data[0].childNodes[H];var J=this.week_starts[H]+J.getDate()-1;return I.childNodes[2].firstChild.rows[Math.floor(J/7)].cells[J%7].firstChild};var D=[];scheduler._mark_year_date=function(I,H){var J=this._get_year_cell(I);J.className="dhx_month_head dhx_year_event "+this.templates.event_class(H.start_date,H.end_date,H);J.setAttribute("date",G(I));D.push(J)};scheduler._unmark_year_date=function(H){this._get_year_cell(H).className="dhx_month_head"};scheduler._year_render_event=function(H){var I=H.start_date;if(I.valueOf()=this._max_date.valueOf()){return }}};scheduler.year_view=function(I){if(I){var H=scheduler.xy.scale_height;scheduler.xy.scale_height=-1}scheduler._els.dhx_cal_header[0].style.display=I?"none":"";scheduler.set_sizes();if(I){scheduler.xy.scale_height=H}scheduler._table_view=I;if(this._load_mode&&this._load()){return }if(I){scheduler._init_year_tooltip();scheduler._reset_year_scale();scheduler.render_view_data()}else{scheduler.hideToolTip()}};scheduler._reset_year_scale=function(){this._cols=[];this._colsS={};var T=[];var Z=this._els.dhx_cal_data[0];var X=this.config;Z.scrollTop=0;Z.innerHTML="";var M=Math.floor(parseInt(Z.style.width)/X.year_x);var L=Math.floor((parseInt(Z.style.height)-scheduler.xy.year_top)/X.year_y);if(L<190){L=190;M=Math.floor((parseInt(Z.style.width)-scheduler.xy.scroll_width)/X.year_x)}var Q=M-11;var I=0;var K=document.createElement("div");var a=this.date.week_start(new Date());for(var V=0;V<7;V++){this._cols[V]=Math.floor(Q/(7-V));this._render_x_header(V,I,a,K);a=this.date.add(a,1,"day");Q-=this._cols[V];I+=this._cols[V]}K.lastChild.className+=" dhx_scale_bar_last";var H=this.date[this._mode+"_start"](this.date.copy(this._date));var R=H;for(var V=0;V
"+K.innerHTML+"
";W.childNodes[0].innerHTML=this.templates.year_month(H);var Y=this.date.week_start(H);var J=this._reset_month_scale(W.childNodes[2],H,Y);var P=W.childNodes[2].firstChild.rows;for(var S=P.length;S<6;S++){P[0].parentNode.appendChild(P[0].cloneNode(true));for(var O=0;O";l+="
"+(h[f]._timed?this.templates.event_date(h[f].start_date):"")+"
";l+="
 
";l+=this.templates.year_tooltip(h[f].start_date,h[f].end_date,h[f])+""}this._tooltip.style.display= +"";this._tooltip.style.top="0px";this._tooltip.style.left=document.body.offsetWidth-b.left-this._tooltip.offsetWidth<0?b.left-this._tooltip.offsetWidth+"px":b.left+c.offsetWidth+"px";this._tooltip.date=a;this._tooltip.innerHTML=l;this._tooltip.style.top=document.body.offsetHeight-b.top-this._tooltip.offsetHeight<0?b.top-this._tooltip.offsetHeight+c.offsetHeight+"px":b.top+"px"};scheduler._init_year_tooltip=function(){dhtmlxEvent(scheduler._els.dhx_cal_data[0],"mouseover",function(a){if(c()){var a= +a||event,b=a.target||a.srcElement;if(b.tagName.toLowerCase()=="a")b=b.parentNode;(b.className||"").indexOf("dhx_year_event")!=-1?scheduler.showToolTip(w(b.getAttribute("date")),getOffset(b),a,b):scheduler.hideToolTip()}});this._init_year_tooltip=function(){}};scheduler.attachEvent("onSchedulerResize",function(){return c()?(this.year_view(!0),!1):!0});scheduler._get_year_cell=function(a){var b=a.getMonth()+12*(a.getFullYear()-this._min_date.getFullYear())-this.week_starts._month,d=this._els.dhx_cal_data[0].childNodes[b], +a=this.week_starts[b]+a.getDate()-1;return d.childNodes[2].firstChild.rows[Math.floor(a/7)].cells[a%7].firstChild};var j=[];scheduler._mark_year_date=function(a,b){var d=this._get_year_cell(a);d.className="dhx_month_head dhx_year_event "+this.templates.event_class(b.start_date,b.end_date,b);d.setAttribute("date",v(a));j.push(d)};scheduler._unmark_year_date=function(a){this._get_year_cell(a).className="dhx_month_head"};scheduler._year_render_event=function(a){for(var b=a.start_date,b=b.valueOf()=this._max_date.valueOf())break};scheduler.year_view=function(a){if(a){var b=scheduler.xy.scale_height;scheduler.xy.scale_height=-1}scheduler._els.dhx_cal_header[0].style.display=a?"none":"";scheduler.set_sizes();if(a)scheduler.xy.scale_height=b;scheduler._table_view=a;if(!this._load_mode||!this._load())a?(scheduler._init_year_tooltip(),scheduler._reset_year_scale(),scheduler.render_view_data()): +scheduler.hideToolTip()};scheduler._reset_year_scale=function(){this._cols=[];this._colsS={};var a=[],b=this._els.dhx_cal_data[0],d=this.config;b.scrollTop=0;b.innerHTML="";var c=Math.floor(parseInt(b.style.width)/d.year_x),k=Math.floor((parseInt(b.style.height)-scheduler.xy.year_top)/d.year_y);k<190&&(k=190,c=Math.floor((parseInt(b.style.width)-scheduler.xy.scroll_width)/d.year_x));for(var h=c-11,l=0,f=document.createElement("div"),m=this.date.week_start(new Date),e=0;e<7;e++)this._cols[e]=Math.floor(h/ +(7-e)),this._render_x_header(e,l,m,f),m=this.date.add(m,1,"day"),h-=this._cols[e],l+=this._cols[e];f.lastChild.className+=" dhx_scale_bar_last";for(var g=this.date[this._mode+"_start"](this.date.copy(this._date)),j=g,e=0;e
"+f.innerHTML+"
"; +i.childNodes[0].innerHTML=this.templates.year_month(g);for(var p=this.date.week_start(g),t=this._reset_month_scale(i.childNodes[2],g,p),n=i.childNodes[2].firstChild.rows,q=n.length;q<6;q++){n[0].parentNode.appendChild(n[0].cloneNode(!0));for(var s=0;sY#!2~4#WHWmMDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MPZ&Ujv*Ddl59%8@-s`w+}?lZlwr|_$pY7nnC|wTk^jT+ zD9Wv(f?xLlOUb_p#U>ZdE`De$bq^Y#!2~4#WHWmMDb50q$YKTtZeb8+WSBKaf`Nfi z!PCVtq~g}wu!CNQ9RzCggFB`yyW#yZUF4T;o#X$b@t>AytoXugQ~5O|lY5y*&?Z^_ zOFMSo49&1n*-(6HcIE6nGv~5DJnYTd!ND+r;Rd$_!-D=SqdV#1OYPKDc4>yNbY7~Q z_|DF~Q;0QT*3-zSu&9Ym>)14>hArMQr`Mk0!`EEltS{DC7bKW7@A&<#X?i|6+v&mX z<+g^qnG}*Zx6k^ZDzhmz&$aC;YvcS+2aa>yox*+AXLFU=&65>hHNF_zd=_imdtc6p z!zw*`QoZEP#nC;fpXAKmI^DMYqrd6=bc5-;S6crvLV}<2&^>LliG7K>pl(rSzno3KoOa=R6OQ;>i`)H-Zq+|- rem;NCMy?*i15f`I>27?rBbrhEz?;bOtEaj?aro^_LoO#n0oLiZ?RyuPUpS?GqslgVeZo@nfDPL>Z59ly6Z$XQd?Wp%_+|rv zAin+&({_B_Y(4LETD{imw~SIs%Zs#+$MK)Oc_XY_)5OIud&1wMy*F!&Hls+*7R9w&bR`KG0FOwjF-VBE?4X&3fUtYA4 zZOCxh+_YJ5b5rp9hAQ(dF0b>sFK%4)^arb~S3yWRWAq}R%Naaf{an^LB{Ts5d(dK@ literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif new file mode 100644 index 0000000000000000000000000000000000000000..dd6595e5d9ef43bd03c486ff87079f398267e085 GIT binary patch literal 1149 zcmZ?wbhEHblw#0e_|Cu(?klqTfBEyoYklCmVoqenVS|Pe!)>e59cFWsU9>AW zZP8U{yyh;8RlNr303RUE2#_d#_^)>0%x$Xs10t-?UO*$CP9jc$w;rijn>#HZ* ziuOA9HrlOUoN#1EY26vWko7W`kGGuIQyH^LXXo0ihgT<^dANV+jn?#K4u`fCUwwP* z-M5!ZXNH}5yl>s2_-m)ym(2>l`}us|%dq{M3y$q7@2KifR>Y}Mw6)3c8m-~M#w=7-a1 z2lYB02kd$=@8hpG|NsAI7zM*O1QdU=FfuSCFzA512+9-e9RC>(a>#gWSa7hJLs%<@ z!>y62jYpg%f??u==`spD872Y>4UJt1VGkBu+W4e}lTpRt$^pd#JWK}3LKB3T9*Ht> z{5N>MH5zv}sFyVmL)JDz@z9|n~A2ze=aoMTfc#?RCTa!a?fk(jUuvRNSo+m#7 zABgF&Eo)ezv2bzAcA+K}&I`<}M+6xCroGv*gqxjLp!QVD$^#6OloTdwc^t4{g{)f>K6CCawk>Cl{7Cw?#BK3K$BV zSs5kRIOOdXxUhBTvni|)Xl*QJN-QjLPzCavSUfPI0sfDy@jpkeH{?dy!N3 zhQbX7(}VJFMYr8B{IE5rQKCY`;NikW%s2R0UNrDKaC~s&6i8KY$lHF<>b{ktD z&gisyeO}}wWwu=IPQcysynfG5*AoY441ID30dRqYbB2hDj*oeU0SAKw43?OemjIca zmy8XQ2$l?`rlkO-{A0vp~mdytYTbG?msW^U zr#j6lvq09dT+^yuJJf1X0dM0fC;-4L+`9_kQoUzXuU`e6%*y?X_HW+7hz~0^%s6r5 zqF(Vz#(P-uVW*ZU-_3lP;(^MbIg1WWdbDW)xdf)NP2)85Uy zx9{J;VH*OpAUN;?ZyFFc{+kM-;>@E-IQ3E2UV#jV2dz}|K7IbH;;QNrz*VAWT z&%M2R_w3)xkI!-mk0eEOoX77&KNJ1{1{YYw5-_xof)G1|V4wyF7P#Pp5RRZj1OPka Cm_4ij literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif new file mode 100644 index 0000000000000000000000000000000000000000..67257083540f7ea06881718da65d749f7284e165 GIT binary patch literal 622 zcmZ?wbhEHb6k-r!c*ek>prLT)%o*dfGgj$`HW)Az6cjY9_^@!{!iEJG{{Q%I;E^z4 z!G;SD{sW1G2@e`(9Qfam@FBrq!iozH0SOHY9(?%lzo28ogbn{4Djqzr5a{jgov`A= zh65M&@85s>_U->O8UiXVBt#?>EcoD1aG_wvg9k7EH#9UXSaD#%jt2)U1ZK{h8PM>c zVZn$0|NmdSa?Qab;lPOt4J-aPEI9Dt$A5={2S5dnpFCc$;lTAP*C%YaV3lz(dCI*9 z4g$qf)-Kp_;lhmv7j9e#Xtg?cw=gYN-LX^L zkc~}ezmnDRmHU*|uGiL?1^(|-fE8lblbd4od4L*O>-Nnixo_MTBMAhPt^YXsC%yN=J0u$6;9q86(1O;^YnlA`!OMrv9(1`BVyeag@*_CuyPgcJ8^Pz`Z*T|W<~~U06^u> AiU0rr literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.gif b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.gif new file mode 100644 index 0000000000000000000000000000000000000000..61f7dc2e5ac32fc064ffb4e231f344df03d07baf GIT binary patch literal 1321 zcmeH``!m}I0KmVIhu6+xXQh>06V%F?qh)EkZW3)hs&#ZarWvxNoo;QVXEiO_5K$#2 z#3Qb$#AB(~2ueM&NkRnmh*v}-2#b)=1sRIUu7ARQ-{<$wFQ2=Qf1ux~)A*ynQDB=1 z7>!1;SX|9t2@eksi-{YQYbGWpD%+Ooy0mdgS<1zCJfSY5{B?FQxA1qBY<91EWb?-a zY8rbwzjh9PJ6SZWBoGLOt+$f#1qQo*dVaraXydP?75Us=W`#mAuhFjQXBQ7zgwj7H zW17`X{rYA`ei^f}d1T@>wM?E_P*GGfRK%{yd9KW5)d%C^N}J`67;V{XQ8rguRaM1p z=*(bL)_3$%*i-#7jbe7Os&koL+aZu@cm^7wXN@X-Xe8PN?$>z29$mX=EIjrQ&;<*L&i(WN_EhjyG@vvlM zVrG|C$maLSMy7XEnzc#gZu(Qn+TR;gmL!W=PhrdQN*g*QvP4=#R@q>yX!J>8Wo_F) zgFwd@_T@dRlT5CZ)^lYoT|sVFFT;WtZ~AVk=f!jOFMXfDCf7J;?tQP z5%C`}U?5*ByZ}z^p*jFrIHdJ;4H9K?#)Xs)cZ{N1@4aZ2nl#MPhsy56Hr+^JoodF;gB)*blVN`(U9opG zg#^RL$q+kY!O!_tBK$bY7vcjlyJm!XVe*uEfFDFU_%yX* zBpYUP0@)s#hIx?ggB9V?0Qis;U5pAiJBn~N^+G`r2k&g>aq$78=Sj?4a6hoO*D{Cv z^`sPI*MctxtcXOw_a`=p`S@ET5d*XO*gT#5!C_1p3doCqUVxp5`J8S`X!C$rpo6I* zxI0Y+y%=3Z&#dh{Q3Xy-~T6X|NCUj z-+AKAj$^O4oc%v(-P4P=e*FLcf6~g^o6r1jUwo^5;nm*dx0CC)-F@*tt7XTEoe$67 z_;%s`|Hp6s*U!GR{=kbx`@T+Hb}p-J@5KlIx1IZ+(X#u*#rLa^|4XUcG-vJAQ(#*m&j9|EU{aOxyJG*p2@MJ%=AY`_F&_DE?$& zWMD97&;iMV{KUYv@WAW>4;`s~kH?3FUzRA%b1$-r3GorDP~irs!TK&W1KgS zYyNz(**XTyD^~EWWH!*5t)a)Vc?;hbJ&oC#61;5t_V44B(41|qt0=^I>a>ue?olUw ebzx;08D(L0{R_^j3Wi)SnAsUe&p%Yv$JM$_W8+`K+vL zQy1@KV`DF|zZPaRp-Va7Es`fWH{!n_taqfi)L%}l+!NRT_gf~c5vTfPAO=yP@zY`zB-u?Ry@*U>$I(GcT$y28*)fmoQIDhHFx$tYDF7dZ+ zoj;d(|GrD{K0OuZ-`~Uy| literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png new file mode 100644 index 0000000000000000000000000000000000000000..24957208fdcb6ec0fdc02a6468100c686eb9ecf2 GIT binary patch literal 2835 zcmV+u3+(iXP)eI3b~U|9Lw@OaL0=-?F-$J$v?G>(;HhdOLUSWc=Euekkkj zGgZlDI8+qDuC{u3+`a+m3yDN;_(BX$^LuRIm$j6!GEEs)2Cme-LmKTkZ2s~N3k?kw zASsnfkq8{(bdQJt85|rGpb)1-_sYx5@#!1EHg`TPEsZTnOaS}q-w?ETj#;4c^Yd9| zW+oOaSU`ERJTWnm@@D&|x{}SDa=(UhsxzeN(*X~U;RhNG*u#eyZ0kaI+zRx*94|c% zfIcbyMC6af9g_@N5(&Jzy4og7qPi0Ws9Dp3te_wye0m)I@o$-|)7I8z)jKRH?~tF# z9Mk^=#q-ZY^ZoZ|K6w(Yw{MGQZv39-3opQZ)(kkFIReIpSl@!gNdu}>Q_6M}?!eNe zOL6w>S>w|k34Z@O5jMT#%{{p`)oaUrj&0a*7bu*K6Ir`)@7_K5r>C18Jhu!fH8quy zm5f-HNj`ciH0VJ+sA2Z$$Dj-dK>f9A(6sizC3zG4Ut1;WHGTMN=ER8Y~`kY;3Hsa0dqmoyAikWut!e z_V$WoN#CTaxsdD?Xs@kBd)E*=x9x+{*I)F-Ir}T-t>^|45>U8h3+60e4izs;b&#~y zWV>Hfe8IxJ!w}{bW^i0Lnr^U&_ELyi z@R;xb!Q)>J#gc{dME=LGMBpcJQKHV+hOGstun>s*puuXbB%t#0@(>Xbfph21AtWRO zIXO894-W@rPpyfZG#*XjY}oRg*l$UAAZC_`nbjyXC~dIX!#Z$?Q& z2^;&2?$I*>sI|3~8)zR+pFWLUKip*+q<${^o8M`mQUb-5^(d&QLw?zPaecn1Qt*t+ zr8tvUBJ%&vEfjUE0co-TB5N_kZK3``_JD?4UdXIzx@UA9 zJ%5hiu~GAM_Yz{FtO9AW0MgSm#l-jI{al!QzJbcw8O8u||IHsnKSdc{mg*?YwaevF zQ&WTFtk#lzyodJ& zln?Mz3m!5%;88h#9UT#_cWus+yubdKd9R;*fJR%AF^jSUL`7r_+OyN(>Ei|tDT^$thKR4U%zSs6)!>J93i;F{9S(yMw?1^}uC^t732a*mTQXMH-bap2; zseC*S8a0B~)YYT6{(xqZ^XgB+D}SwQ=NNd?H% znxwt9WID9}(d%gG89)zhTDcoe0L}f~BY+$V&ok%ad*M`9CCX4)s$-6#XGBW`LPkc0 zP~_{^uZu)^x<}8bjK#-7S{K}d@3M(cn>M^AQ9dBxktNYJc~8Wn_`ZR-x#{j8{d{nc zYf{vtThOGOkNF2ns^oWB?Y`|$a{)$?S9q%cP9ML?Ml_hF3v_UR>i9-i_3jQ)$C9=Q zgwI!e&eon-D=bQDK}UXZ#4JGLK#G{9#ILp=f~&I%Q(c_k<~p2Qom6mC*$*FN_VSK) z_oB6ve(fQrQix>4avZFV%Jv}`l z9}^Q}(Yc*&jjgI+otY=motJ^WiW|d6Mj>Hvid_Pi#Gk=FFyw!Fx-Q9IW}kkNKl;fa z$s~g$gCvs-l1!HG;hvR&$bl$wAc`D_LL>*G$bl$wAPSKjh+;d*fhckyiX4byj%*1; zIhAxuG6|9#i1K6uQPNkWn~rgi15uuAAj*X`7tF^v$bl$NE)XUE?R?3i&Fqs1MBxHv zBxG$Os~Fh=NY+}?(-??C!jJrCBr_F=Qnay1vgquNBhDroh(c``d(qfHlsT)5$kbUa z_onLjfGN@3+|tq_zNqr{m`Tka_1uy`6jBCL?K!Ray<{j5Mft{WX;Ei}0#T@rB}zmf z7z;!(2auj6k#{lCK$Pa@X83ST9827_WTOL7YSsV1J>EfgiXm`y#gr*ibX<}oOQsOk z(a~YmT14(Gw*aP8DviFthh#8v$|LE4L|Qk|KoqT?KbALit;cB!ljA3T9$ zYLF%z1x6FMcWVKx_tLPUEJnhmttX~;6EE#f2xYJc(B&-4OOG85Ke=FFKwvB>JD z^1TvqE>y|bluY1LAKKg7g`yB(Bu_UtHz5ZCWb|37c1<2F7ad46aP2u9B?3UV8y^8@ z^tIkba0EDdp*0KsM2M7%)-wX0-aod_x)W_aa8d}eA}$o8!XyujKq46sCxGdmaK}g7 zavGynfRsqvN&78PGOdH8wR}U$V)Qgbjuv|QN&Ye`gCx^q1&O|rdS@SEvWT8M8C;Xh zeI>nGrD4q-edFqRx;h{_(8K1kGFfmeqyuP4BHxE-jD960p~pr3U|eIlMYqQ9XL#9H zBgU6KSA0vBzAe+;@K@4A1UAn`R#ukDucSQ#3e0d<>TzSlBnA9DlzLny8!XA%ucW;L zK-mL^+1`@iy(SL9X%|u3%HZoJ2`-ZjmP9Ai)_y`DQ0DqbD8A1GHwBU%e+vOr-#!eK zooqGrPwWzF2 lR=D6Y$tMmnSxNsDU;ytXnYZ<(0)+qo002ovPDHLkV1l_%QG@^h literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ffbdabc108e650383ef3df89eacc043db5d9b8 GIT binary patch literal 89 zcmeAS@N?(olHy`uVBq!ia0vp^j6kf#$P6SsHY~OWQfvV}A+B%Uefj_Yf7JdxSwIm! mPZ!4!j+x0B2?}CDybM!6aWy6%oWKf{VeoYIb6Mw<&;$Uo3K%*7 literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png new file mode 100644 index 0000000000000000000000000000000000000000..9f371b4df716915175019c9422df7c12c27f64ba GIT binary patch literal 89 zcmeAS@N?(olHy`uVBq!ia0vp^j6kf#$P6SsHY~OWQfvV}A+C3xefj_Yf8N#)Y(Nn{ mPZ!4!j+x0B2?}CDybM!6aWy6%oWKf{VeoYIb6Mw<&;$UeBp3Vu literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a3bae3e018613bfa0c160ea6a36723d641e3a415 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^j371(GmxD1Q}Q5?(hcwlasB`Q|B`)I{(pP)|LfiV zpKt#Ebmjkt3;*Ar{{Qy)|2K#JzuNo%<<9@lxBP#$;s2A>$=A-j2WnLEba4#fn3)`q yV31Idz>(mQpplS~Fyp|6hD7GWjBVUJ{0z3Y*cxAN?N9-#X7F_Nb6Mw<&;$TzL__TW literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..31d6626cdd40848c6d900eeb8e8d4057f6dfd553 GIT binary patch literal 230 zcmVsi?L4DSwy6=Gyw9+ zFovGaHzsTy&(`(mA|C-TpGSSX^ClSheK+Y%@EY4KGI}?S^dBdHlI7}ny*~iZxu7XL g^hQK^3Fvj(FC=_u*5-+h;{X5v07*qoM6N<$f}pKl{{R30 literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png new file mode 100644 index 0000000000000000000000000000000000000000..22d630927f32a8d4c66b4cbb851f20002aad0e9c GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^#z4%(!2~3$o)(t^DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MID|ljv*DdZ2WHv9#-I)EPr>QcFBix7yH*t@Vh9Pq$SxT zu<3%V-R-{5>$oF!%xaa|x+_&9hR3^f$)(@tYA>xRzwqPwv(VfP!nqvDPIKS5)_mcq ep0}TYnc VW}y=sH5X_cgQu&X%Q~loCII&SCFTGC literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png new file mode 100644 index 0000000000000000000000000000000000000000..f0314fa609946421251eeafe1bd88b61216e671d GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{S!3-q3+C<%eR8)XZi0hJlSN;RRw?{v|y!`n2 z!>f?N^}pM%{@r@@@5al2*I)d*`uyLO=l?E0`*-o_ zzY9v zum3Ng%&d+z7H&;jaY@O1TaS?83{1OTQT Bb#(v$ literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..f5e71df6aa432e63b71dc708a929027822689ba0 GIT binary patch literal 3951 zcmc(iXH*l|w#Oqe7GM&`C^Co&I;dm2%rFjeMX#u+IM_x-utcd!QIMgFv=BOkE;T^t z1VTwjC8Sq+Cxiq-3rH_g6&}u7_rt7r%Y1q3?N4W&bOz5mxuuAMWm3;;j? za{$1`W{CCHKeepSG1muPZmt1;g!YEYZQ}>`uNd7m{^^V^aLeYV_PWLuS6fRrTN^D; zd$(6wmJXI)PR^D#XYAkDIRms;w(eBkJay{p^{d4ahOC7h>j}W4MdA!TRX4TF37~VV5toY{8&jyL>s7Khd zXWlB|uVA z!Ra58vf^`+(^7I{3o`)esQhd!x*{*LpsI*aQid<5R?={o(i$e4!l~smcy-luVk5ah z$SUq2bvAdmwQyVOSt8khbV$%QGB`Ti-=mO^H%TVPraz+Dbd6=xX&U^RpXar9X~l3JCkRd2i=$ z=N)M8>FWN*B`Q4nTSP#7P)L|Z1Uys&l#vPA1I$4KvvYIu3yN|}(4~ctf^u+WUPUFg z8dr(RB-Ij%85mX>rwV|lQL~+v~d(}VP_k@B}+ac>*^mJ=onY@ z_EB3V#2;tICYKf@i(lqy)+l4|6y>nmpwD2LQkb?x4+16|^)6Ou8;7fb%xpkfTekdL zDy0{WIb^mgt1j>k?h8sYk55iTKjN5T6Qk!X%9lQQ`K+%%W#w#@IjgPa^*4_Ef-p_L zuPohL)`Wo+yBWW|@3J>6-+_H$!KHNMaa8pZ&I`w%?8ngU-MwAmfu24Zettn= z!O|!n9XcHgj3Mf-rCtwCvO;R8g6Nmc1d_evM~jHcDlcBU~y=9 zWEC^fBc5*uX$tPZjC_{*_bw;`It{eg*$E;kmnkj+|U5wL& zZffd(tLBf)*;I|t?XW^+p%%qJ)wGCozc zN>d}VXb`847<5?-$2BhTWGk-ocj@6p4g)jH+GJG|EK;J5RixGhE5I(ChDWB|`ZvUNdi z()1;HfSK=AS3`Fnn=rcwPdF^tImj>8KR)DLly_)o;M3$RRE~p5N_u`uW-c0$U4lIT zs;mM*aaGj>JcLXE1L+JPl*wRoSP;ITme1ofGMgDSBti$SizsZ6G)Y_fxN>^y&|n=v z)J`RfE2n56dKlo}Nc1IIPDZq;?krvJXN`|wl2^mC@iM5!@{cNcaca!Gfj zjf6aDP4_-{=;odsaYHwd%KOa>i>h=)2}k>$1(?L5fBt6Qth~Nx{_^eU^N~9LjbDi` zVyS1lhn0DJRx0|1j%CNt z;E_NYbsYTuO2cnQ9!7Umk*7}96gr{CtseW0uMuc({eE|JJ?QnyIyAyE=zSnEATBss zDbhCCGb%PA-9ID#aEkpqkK8byMBgjUG1+j`VNewg1jXYB#A*nI3Z_AUEH;qIVe$Av z&Ss$!K=>?14TVhX!iz~Qtxa61NM1kKINS_w1-8>WJG!TPW_!nEivCXnD?@7|Uq%7# zl|bE!Y^ul1x?JVe9XT;{srEb58#6DABY+)7Zt9h%k6cGUhqd>3$Jy{gR6pep5nG@C z8lZ9HH_b6eR7k3h<6>L3s{(;K?OoNI`rip+)U=inEcLVjES!~*Cr1NuGVnQ+EaC#C?f=#wC&Ns?Zwmg z7E(`1_bM(ry9EXMyDNF!_xAO%wu=b~Hj1}!Nel>!MB0Yir#ZysIHBK|WEDmfqxAEV z%i!f&ARHb9t;Q2c1PHYTTuUKAfm|Mt!{-V`_54O&GnYxDvZ}kt9c)QAL{!(;-zper z7-<^iwKF=UJ(In&viTW6|1fxY=<`SUYJc~ZT{oJa(JaKfR_i>Sds%*fCSyahyRu90 zeW%Uxy6);(@!g=g7c{?f)!;=h-aTQsJf16vS6zy8TR|TEDe}|L{q>}|%-b>AXT4N? zEQ@~4Y1;i4I4*wBis-o!VwZ{@+-6l?$Hdi}CSC1AiWe_3zdycpHH4V~if5lq{V`u} z)ooYY^+AyaCoQj8!>bUN#2?Yor^=MDJ z-}zZ|Ao8L|#LJNI)X0Q4?=xJpVy-5oeMoljvP?&n#zqDFS;?ECW#InIkxnJEh;7U+ zwz#vl{SS`Ka&W(3K-4Pjp6HqC1&q(hW-5n9M+V25KJ%96l{#~~V*1a+XGb#G{O0Ed z0L50dM6XyYR-np(5jg42ndf@ZYSXWw_T~F7#~-_OVnQ&R%lG@+hW*u|9IcwP?ar_Y zllh=u{Wbh}s;j5|Q-9qj{O82A^ZVkY5rpzFN}&4Z2tB=rznKoI1tU*(9y#u|EAXUj zQjzdO`uT#!ZTTAT8(q7ow{AKbxHxP0#q$U9C%QXekHql?&rbU*me)Rf@c=IS8+qUM z2@bgzY8L47TIcN#?_CjLi4pK5567o*v5|gPKO`rh!&6gU1r(>FbU@g05VWGa3Rejs z5W(bX9Ib+mhX6TTAe6@y2>I;#O{Pq28wJozZEdNQFdBt*{e3(+ue+;9-1|{B!J2B9 zPLGZQ>KnjI!=gd1VqbDZ&T{!>_)K*hH{^LPI$DQ*(T8A|qlj%ih zK|-R=xmwYp4sz`uq{ctJ;Hd%I9c8d<1eE%d1=fjl2T1z&6WiCm`%iX(2`|!m!eJ#9 zapmfI*0x3--$?Wc3S_59+YN*;%sdsoX7J(Cp*?1&c9xwkNbJn;AwMx8=|evVJFHbO zt*E4aPyH$E^47|qhZ#^OT0;D>@p%s=4 z-#NzKBj;XN{v&cj^F+HKcK@@haHvkJ^@rO)q32O)QjJSh{!M`PxP3~>Uy3(^~ z@sfN89m^p#s@hQU{A)#xupr@3M2OzEp4SeX5?k-dyis)J_zq>{uf=5l86CM?25s~;9 z{_-E7>>Lmjos*ZJ3n?lFV+!-j(Uk=yMYwDzkU|BLYbe<23RV>dUq;}OM5O?xfZfam z(-*uuPgg)*6^6g_UGatCWjc-K2{h$!!``~ayT$mNq4V0D+f@Y+nvN9p)TyTC) zR&fR`2uVUjV%o;(hh*3=<@BuAtta?r-ucNi6T_}+? zHTMq6q;-9Yk%o_5qYZNM(AeDg!sLW_co9FdjN9M>te~S)vf7<9z4kLaCpkG}pZbZY pWf!ZHp$(dbz}SD8G>Wgb=uaa1zqEv)*f`MtlO;U=)dv3&{{wX{9B%*s literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png new file mode 100644 index 0000000000000000000000000000000000000000..15681b311e095bcf71a016c10b98215d2f62fdeb GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^j371(GmxD1Q}Q5?(hBeias3Yj{~rDSclZCloB#h^ z`TzIA|G%gI|2_Wy@1g&H_x}I8^Z%bM|Nm_G|7SJho#WC#T}qxVjv*W~lLZn25)2Xw s5;zh(5;PJr5@sCO(2&S{n6ZtU!Ptv+qi^c>nLyPHp00i_>zopr08)lQEdT%j literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..f43a46357b2b8a44c62bb6955413ca6c422397b1 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^j6n2-gBi#={doIQAhj#NC&cyt|NoEQ|GW3*->p~w zu0H>F@#()akD%!6<9|SO4vfw}`3FH4p8UJ;6r>D-E%CiATwRVHQB_&GBsJyf6H$?=Q$jla?0-X33{vuFPP+`eJUrfnOyZZ0n`!f@W=oF literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..8f9a4f6da021cb45908bfe9e8d904e042b2f047a GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^j6kf#!3HFY>I`du6lZ})WHAE+-w_aIoT|+y4HUHT zba4#fxSkxb>HVqtw*L+XN*+8aW?NSO|37nQJx{^4`Zq~BXM7Zz1ZN)Ya^*R*tKh#R ivt*e81LI3EMh3oTj_Eal|F_ZNmx0r(h1H*=|U3OfpzvHi}DR`OfUbAABv-upo?U|K(>>jf7 X&0u(ba8}zzpe_baS3j3^P6`1px&CF4n_O8yr)Fq>iQ?Oe~R- ZJN}%psYOZYWQNhg04>pOR|ysdYXG(YZ0G<0 literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee9285229449c6b3361135be958566c494f600b GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^HbAVx!2~3uq|aRjQfwtbe!)N*2=bP(PXtoeJzX3_ zB3j>G-OY8#K%(uTzJx$wVG#S=qhjd?Up>&>QB}RGinHtkLtax@;ku5}S3yfIH9KFl zY%=}#!9Mud^!^DP4Bp4T{&^th_9K7kqBWtXYBy_6>*GFPB(-bulr??_@=7O=S3O<*T-G@yGywp3=X(MG literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..6e5ffb852f02941eeb6e6b7bf27e6509c93ad44f GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^Q9!K1!3HEb8+12=r~;43Vg?4jBOuH;Rhv&5D0t7) z#W5t~-rMWD`3@$?w0*2!+}Uxor7<$&j8OYQ-H5w#tGzEARNUyPVJLhsMNrZ9#q!Mc z2d+!ZyMO8Mk0)oRUz>2@jwRdm-_G;&!#`N>T%)K=Dy9 z8UiCN1S$f&%o!LM8A^iug8wrB^T7xPYptJY1LL2wz$3Dlfr0M`2s2LA=92~rvX^-J zy0YJ9;TPmqcHKEq1uWzmQQ}xyl96A;uyWlQ51tBm$KdF>F7ur5`BF0TK>REXvEwOJ_JB{j41*#tzY6T9lm1@b!Q5 zYnU?U{M_8syb^|QXQu53im`!|g=CiGq%y2{cS#*6qVMVA7$Pw>IpGMG1P7@BN BaBTnp literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_left.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..651215a15ae456fa3036d74224e7eddb127d51de GIT binary patch literal 1955 zcmaJ?Yfuws6paBQW5HUB2vX`2Dqw}Ykc6Z}3~T}nCcH8V29%I2BuaKeb|DeP2M)m( zTD1jfttbMmyiAe$2m+=ff{Kbr!BTA%N)>D|AjYB-+l>|NkJ6pl{a)vsd+&G8%2JgaK(#h7#tIA2+p<0i~Qv zUKJ#y3Dx0{LK&H>ff8~>Vp;Bb8Cy;cT?T~cIJkfc!lZysl?kI99hdw{mxIr3+f*{} z3WBZYlK)96Q5Xw^BN_+@qR;|lG$svT(kb-7r7RZ9A7IevG%Afjr85HPEKVSUL!$w& zA2J?IBTwhVgM!zw@D-P=z%Vt3O4Vw$6m1{{(PU8RY&P4b!C(a7hyZj0j7fC?FzP*} z079rtqf}!`1O{x1(ljI+KbefvAD-gdkv* z5|$%c^c7ktZBHcxHg-my*Jm=<5Wu{{LiUf1BJzB%_u9D!i(9tHBmy8hadwJUC|a%qp* zV$F_S+?C(xvZK*2i}(hM?Hr`rL)Afr(^W~_6mLpHjJ-CC8vV$t(7k5jn zR_lw&L6@spu7OvNO~h%|0!?l#Ju_QAJ^5^e$;eVBsjjmc4f_< zTsNn9^8TZ3ZT#`vW|vt7Ys`HmM~#bs?KxxZDf-5qo*u_oMyX4_)!lQu2>|0U9fQcn8$`+p`n@OX=LcRhC#m>~&0 zmhy?pm}^K8i^cCb+H=H|ku_gl^Kp@Ea->@5=hI<6*vOQE!bo zI;%77+lPAd@I|NWHO<0;Vo%ICN$@K4UY)$7bKce&#S4lAU!|Yga4W&*z+$82iR}5< zkLbv{{+QFmK)(Cl-) zwy}Lq;lS;dy90s78HyzrI>XD=#(00%pA7osPwKFtOkdBtk6bTY1FO5ZbjdspsiZ!#L6hj4pPCt8_eCF( z8Tqr)M(pS%g4P>$j=#^Zb0`i8J7mf<(S~Smay2tt&+y``2lKm9^6Q>I2SS0Uy%Zk7qpmoM1=zVJxRP Tx#+8xw%=wHUj){NrRM()d4nQp literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_right.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..901b5b7fb79f2623717d8673f12eb26e2ca35e55 GIT binary patch literal 1975 zcmaJ?YfuyC8V=>A2-Q}Of(2cpsYr9(++a;WAkqYr2qZ|FgG$IQ5J|EjSs>g7VPqIA zMFjK+Eyt=EDbOlsEK)!UUXZ4c0#+;tXg!wE3XT*wV7=hkSh4+aIJ>j^UFLb7_kF+j znfZz%r5}2@t#cy~2p%G#AQ~Ti@XvRd3;u73a%bR!H?~88$8i0SQQwM$accZtEZd z8kkRvWlQK1Ll}~*5oQ??S(a3;&Pq`S!o=VpfM0S<%8V6wPeE*Svn3_6Vt(ik9x!G)M0M5hC< zA0i&j2q!|(g7DX|@D-n!j9~_dM$5>^pk^?ss4O#diBXLuv4H@!Y4{J>~tm4U{f((NTJ0wt3F57p`3 zpiNjb@@KyPQ`jWWG$6ES#Du09)p+9)H`zlOpfDq%!ce0eMYW5k7@3S>s3{pW0AVsV z5UbI{Xol$(S|Wi&dK0G7s}YfaPsI6DjRuA|V4#2%4zk(d0Rarg4tgj9WQ5=^$YF%i z!`b1BTmh<1(;<3nkqiIHSlGZ)}g~ajzS3Q$M{~9!VfLQAC0ex%rkQcBfdT@eFDo zRr*sXK&6}V&?%>fr@y=6deHCE6Jg2W2!pzWajo!L;RmbNR)~pzPhwl)(c|KTGm>lK zL`Ja{7Jk+X69)u}-uV8hmw%prCMud# z@w;!?_9u>Y%swYgxZbS&vg1k4x3S9YE*_y}v%}g8V=*x?@~Ef~XJ==)d8F&`p;M7i z&6&Eot<}emf36_UZ3zCh`)Yp9^5*kFiREEUO-%)U71m{Y;^I90OFUdomTz9}QFMg` zf}!{B-OHQlYZvqCiyA9J{>kESZcRLVn5`}VR|EO~O=&^tA8R}f))#>K+R?U0wv<8xQDV53+1VJvJ*Luyw487&3 z=!B!^lMa679?WI2hJH&3+B-hIM$zdsrwrYP%Iaa75@Z>mpHy4F0s_Og;(`001D zNBukYgH?X(K2f^5xGYqD^Tj#l$+J_I0B`?CyIWJA)A?C*1!r>}Zy_y&{DTtENlL9v zZdQ<6rPYyZ51#VxYkov(K$vNF@`Nwl5AVNK;238FtFUTYVyYWO1P(_GkCV3)*&?_b zUWBi$e(%8#b?N?P?h|(0)T*XaACNy<8C!4llRbWi_Tt(5!u#u=3(zYAX}U`eRPRai zfeRLrU-2iF%x+G(*QWE8RVk#A^@ucfpmeGV6~=xawad3=?xsv!d`NnJw>;)=KH$DH zP;f9xrc!Ut8GM0;VZl$OzMEr<3(wps;%aAm^RGrB(!u`8$;ov1$T7=}+4_$8)(h7M zPg5$Ty|T^kS~WdBejk^~mCC0juC+fv;uT%|J-mx2^y`C#sie@~%yB=i@rnC5PsC=k zgMW5nGMUv)mTBx<<3|rhZdcscJ7J0R``rb;kmHe!-xqp=D!Z+JYQw{RvV~ o=Y}NKLi3ZOY1>y!oF+IDTK_c`b0jYRw*4vDX4gA6@@CTake(qgK=SYet7SF@B8MPv5xjV zwW~L-rYNd55tmbB_PC>_n*4k62R@Ri0Y@{q3*~S@u^|=KP!@uOq4dENRJ5TZ&tWS? zRRKMn!I|VjxEI^yAa)vu_dx> zp-^B7%?z^pSY8kWSHtJ?5`@7Ugk>CQg5+U|7qt zrn6KgQZTltSS-(QZc1ffGWma~VJxE^oPvM+{!`dV4_S~+K?mh+m0VnIvm441B^xRj z*=d9hm#f&(k1%rjkp-kKKj_s>4HcY4bTTO>Ob08b3KMdOCVWQMH8JRyq-Z22`D4K# z&quk46pjf&UW)hvd^8dcl({le^9D3=nXCQb$`!e8BN!HmEJIsA3bmMx46vB6s8{w9 zuBf-f)hc_5ROGV64C`L&U)NkdBE91-mz$PsmfIehq}OfI)GxlzKOzs}aY7EKi*K@X zrBYkf{h%N`xH>i(pO~C{&D=(*r;(e}Ok&fGl(OEaZp^Mbt2bQwvVDM?pZj)Y^z=kF zoL@+_3*BdCrb;8vGP6w|I$t%xi#^%7H7yO*8LKJR`*H`o(6PJoTz6HRKYwTcr-QuU zc~-x1Wc*kuackW|-6iGFlk4@-s`zJi)%)vjBddZIJeA|v* zq&i8L@KOh(f}l%S5lGRG6?E`Y5FwG8mr4*tjF6&o`(|~uL)*YN-w)68ywCf7?>E{R zKT%tAw1yyv+Gs>f;Ca6@_EzKnseJDuo{peU3U$E@Do7?E+7*}vWK@%~AOR$0XmA>| z5=0fLCQ~RCJ1NLeb4w1!ZEFT*6GUs9ZAfxIKx7(ZRXsqhKAxgTRS8hto){A|f*_|x zhE32l98b!_{W7mmZO6%0TfhPuKoV(d1G**H0ji`c;I(s1Q)CH(`UBLasZ^|!3_=r- z9yjBX881V6SvT9<;`8~MNRD9{n&D`cbFn_5nG+a>-1;aS%~Uc%LJV)k!n**KL&y+l zx=<*%3(an5W@(n^c}IieTo~c9hIAy^F5PMxL50$4C_%J||k4NfRS2%11b z&`d%&P_ANU4kBpfpg{(^JY=`3E3jad(6N{h)h#6HGKh)+3iI8nstA0jBkT<|cX+~n zKg)&~p7V#q4v`H9InL{C;mTYQ%6SdwsLWM%xWS5Crx7#*M;3vpo&!qQgc?~&SWqi_ z;VbHGah1wm+ADHtY=(BO^{;C#AK~6{mfKB>H`{FwblmGEZfctS`Wioo@u=9Iv_GW3 z7mICG_x(Ko=-TM{$mOxIw|X|)-F|2K%%ysIW8~-hO0h}2I`?^bxwlVM_kDR#msnm} z>gm(8+IsoL?f3KZPv6bV914x^xss;oyNMge*iWf@jq7V`jd{a(u6ufN-}JeMYsJMk z*9X%FUY(vC_)%P$^*uQ}Vb4x##gUC)(YlKV;li`u#npwW(U-)oY9jJ+cQF&cdCPgZ M(NJ8R=s0`f4|MHo@c;k- literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/noevents.png b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/noevents.png new file mode 100644 index 0000000000000000000000000000000000000000..05da890fe1cf4b98f8c955cfedeb53be9cba4462 GIT binary patch literal 1687 zcma)+c~sI_6vuyAxsaliCrivNCoFTxG)4EhJfHhXo8l|ZQjqe%C-O!{(^9W)90K84*Yi?P=kr31XJ%2u;F|Zb{=WM`n zem(LX9l?WcOpr{a1Ep1+9uU$7A%rC{&eAC~kV1_HHffn{hd4~d4^wFgbV@iG1S)hp zT_6hoPU)mjmDCiZM3Df;1zjyDqNR!iP|t&Lp>z^JpslLp8@?x}FwRDXLQ*w z<_!t})`xjw-Ei>*(}QB~fKVfiFGN{!mm||!|2K3~{CM5IJiioJ_GQaPJ#)Tu90B}X z%YJUd_v2;GOrLi`?78ldX~Ey`Jh9QF*3;_fmdb)eMC{yO=_w3Z@mk&91;(C2*;GHZ zJ-1ra(Q+1zMy~^|J;q6Z7PgMoI$y0H^in^$&XU-_RNrYvB9Od(?I%8HZ_gX5EATDF zVJ?2F;q#NE@2qch%r)mAY0 zD=y>WCvjXZxBZ4mwWDc~sJgN;D5tlt&maSPq6k9}gkXw@c)Xtbmb93aB_-M6)v{D7 zySx_H)TbnjNa&L$!D(? zqK*pfYzU1tvw>^mP!pe|(nq_!H4&N5=8e95lS}jRwnm@MAqBm=WffROcyg*d#D%-r zopxH&EESK(KaQIW2lyEt7Nvq~tKBB}%yD=Ioj3=SUO7yjNDhc?5y zaO;RLvnlraAeExjNyH>{{5hGq* zUH$l5e$0qELdz^ZDInl&17qSUnaQj@W3$Px;Y=`r@Dq>h@S&%thPwVqh#fh9yo=+c zyqO)DUt$!Jzk~QnkynziFhhuDkcVIVekdFSL0Xl>>nLt^A&Xu zAGZFAHNPWGq*85($xDhXWWgcxZ%fKYNfzcpJ2>7AmM(0p>L}%8S4bO;{*<~9FXTUW zB?^+KCnxRM1B+-ijg*u3_8KCQn=;y_rlxv&aPqRq*w`E-|8VwVP2@h-L^pTxf=nhG z+=4_tS`Z}2#wUBrv7<8OXrq%6Tm~9sJ{#Q#N?`sG5mt!a{${VHrlx0MSy%0$Bgt+^ zUQV>wIGiiY3WbBmSuFG_U2t)+?%nOQG(2%K*9QzMc?AQ(CTVBP&=I!sHB-cB}uChvDYVsKepkD zdskOidKnF0in{=U{|pP$FC7}1>VGu2)2V>waCACi}TZ1 z^QUMZb3+r8Tp@I`;CQ|H)O9YM)3LgpO@|KwEG z%F0SzU7devTjtAi_Wfe<#mSzXi*^EuX#XDV?RuI^~J@-r=lnt~IW6I)=tan0ou6VSU#UK$c12R?jIbTT3$B3LXA zS{%KQu?cm+*k`#~ZSt_%8eFTV_Ag!@ra$Hapi6;W-`XXmLjNz|dE^AP%01-rzn2#b AcK`qY literal 0 HcmV?d00001 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/readme.txt b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/readme.txt new file mode 100644 index 00000000000..67cb13ff468 --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/readme.txt @@ -0,0 +1,16 @@ +There are a lot of files here, but you need only part of them + +Desctop scheduler, default skin + dhtmlxscheduler.js + dhtmlxscheduler.css + imgs\ + +Desctop scheduler, glossy skin + dhtmlxscheduler.js + dhtmlxscheduler_glossy.css + imgs_glossy\ + +Mobile scheduler + dhtmlxscheduler_mobile.js + dhtmlxscheduler_mobile.css + imgs_mobile\ \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/license.txt b/addons/base_calendar/static/lib/dhtmlxScheduler/license.txt new file mode 100644 index 00000000000..4a7d08c91e4 --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/license.txt @@ -0,0 +1,228 @@ + + GNU GENERAL PUBLIC LICENSE + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. + +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +Everyone is permitted to copy and distribute verbatim copies + +of this license document, but changing it is not allowed. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a +notice placed by the copyright holder saying it may be distributed under +the terms of this General Public License. The "Program", below, refers +to any such program or work, and a "work based on the Program" means +either the Program or any derivative work under copyright law: that is +to say, a work containing the Program or a portion of it, either +verbatim or with modifications and/or translated into another language. +(Hereinafter, translation is included without limitation in the term +"modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of running +the Program is not restricted, and the output from the Program is +covered only if its contents constitute a work based on the Program +(independent of having been made by running the Program). Whether that +is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously +and appropriately publish on each copy an appropriate copyright notice +and disclaimer of warranty; keep intact all the notices that refer to +this License and to the absence of any warranty; and give any other +recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of +it, thus forming a work based on the Program, and copy and distribute +such modifications or work under the terms of Section 1 above, provided +that you also meet all of these conditions: + +a) You must cause the modified files to carry prominent notices stating +that you changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in whole +or in part contains or is derived from the Program or any part thereof, +to be licensed as a whole at no charge to all third parties under the +terms of this License. + +c) If the modified program normally reads commands interactively when +run, you must cause it, when started running for such interactive use in +the most ordinary way, to print or display an announcement including an +appropriate copyright notice and a notice that there is no warranty (or +else, saying that you provide a warranty) and that users may +redistribute the program under these conditions, and telling the user +how to view a copy of this License. (Exception: if the Program itself is +interactive but does not normally print such an announcement, your work +based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, and +can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based on +the Program, the distribution of the whole must be on the terms of this +License, whose permissions for other licensees extend to the entire +whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of a +storage or distribution medium does not bring the other work under the +scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under +Section 2) in object code or executable form under the terms of Sections +1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source +code, which must be distributed under the terms of Sections 1 and 2 +above on a medium customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three years, to +give any third party, for a charge no more than your cost of physically +performing source distribution, a complete machine-readable copy of the +corresponding source code, to be distributed under the terms of Sections +1 and 2 above on a medium customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer to +distribute corresponding source code. (This alternative is allowed only +for noncommercial distribution and only if you received the program in +object code or executable form with such an offer, in accord with +Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source code +means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to control +compilation and installation of the executable. However, as a special +exception, the source code distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies the +executable. + +If distribution of executable or object code is made by offering access +to copy from a designated place, then offering equivalent access to copy +the source code from the same place counts as distribution of the source +code, even though third parties are not compelled to copy the source +along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt otherwise +to copy, modify, sublicense or distribute the Program is void, and will +automatically terminate your rights under this License. However, parties +who have received copies, or rights, from you under this License will +not have their licenses terminated so long as such parties remain in +full compliance. + +5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and all +its terms and conditions for copying, distributing or modifying the +Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further restrictions +on the recipients' exercise of the rights granted herein. You are not +responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot distribute +so as to satisfy simultaneously your obligations under this License and +any other pertinent obligations, then as a consequence you may not +distribute the Program at all. For example, if a patent license would +not permit royalty-free redistribution of the Program by all those who +receive copies directly or indirectly through you, then the only way you +could satisfy both it and this License would be to refrain entirely from +distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is implemented +by public license practices. Many people have made generous +contributions to the wide range of software distributed through that +system in reliance on consistent application of that system; it is up to +the author/donor to decide if he or she is willing to distribute +software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be +a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License may +add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among countries +not thus excluded. In such case, this License incorporates the +limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Program does not specify a version +number of this License, you may choose any version ever published by the +Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the +author to ask for permission. For software which is copyrighted by the +Free Software Foundation, write to the Free Software Foundation; we +sometimes make exceptions for this. Our decision will be guided by the +two goals of preserving the free status of all derivatives of our free +software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH +YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL +NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR +DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL +DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM +(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF +THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR +OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/readme.txt b/addons/base_calendar/static/lib/dhtmlxScheduler/readme.txt index 647f03a9958..ccda9adb09a 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/readme.txt +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/readme.txt @@ -1,7 +1,6 @@ -dhtmlxScheduler v.2.3 +dhtmlxScheduler v.3.0 build 110727 This software is allowed to use under GPL or you need to obtain Commercial or Enterise License -to use it in not GPL project. Please contact sales@dhtmlx.com for details - +to use it in non-GPL project. Please contact sales@dhtmlx.com for details (c) DHTMLX Ltd. \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/base.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/base.js index 350f83198a1..45a6dc0c820 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/base.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/base.js @@ -1,4 +1,19 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.date={ + init:function(){ + var s = scheduler.locale.date.month_short; + var t = scheduler.locale.date.month_short_hash = {}; + for (var i = 0; i < s.length; i++) + t[s[i]]=i; + + var s = scheduler.locale.date.month_full; + var t = scheduler.locale.date.month_full_hash = {}; + for (var i = 0; i < s.length; i++) + t[s[i]]=i; + }, date_part:function(date){ date.setHours(0); date.setMinutes(0); @@ -12,7 +27,7 @@ scheduler.date={ week_start:function(date){ var shift=date.getDay(); if (scheduler.config.start_on_monday){ - if (shift==0) shift=6 + if (shift===0) shift=6; else shift--; } return this.date_part(this.add(date,-1*shift,"day")); @@ -31,7 +46,14 @@ scheduler.date={ add:function(date,inc,mode){ var ndate=new Date(date.valueOf()); switch(mode){ - case "day": ndate.setDate(ndate.getDate()+inc); break; + case "day": + ndate.setDate(ndate.getDate()+inc); + if(date.getDate()==ndate.getDate() && !!inc) { + do { + ndate.setTime(ndate.getTime()+60*60*1000); + } while (date.getDate() == ndate.getDate()) + } + break; case "week": ndate.setDate(ndate.getDate()+7*inc); break; case "month": ndate.setMonth(ndate.getMonth()+inc); break; case "year": ndate.setYear(ndate.getFullYear()+inc); break; @@ -73,7 +95,7 @@ scheduler.date={ case "%W": return "\"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+\""; default: return a; } - }) + }); if (utc) format=format.replace(/date\.get/g,"date.getUTC"); return new Function("date","return \""+format+"\";"); }, @@ -106,6 +128,12 @@ scheduler.date={ break; case "%s": splt+="set[5]=temp["+i+"]||0;"; break; + case "%M": splt+="set[1]=scheduler.locale.date.month_short_hash[temp["+i+"]]||0;"; + break; + case "%F": splt+="set[1]=scheduler.locale.date.month_full_hash[temp["+i+"]]||0;"; + break; + default: + break; } } var code ="set[0],set[1],set[2],set[3],set[4],set[5]"; @@ -116,18 +144,18 @@ scheduler.date={ getISOWeek: function(ndate) { if(!ndate) return false; var nday = ndate.getDay(); - if (nday == 0) { + if (nday === 0) { nday = 7; } var first_thursday = new Date(ndate.valueOf()); first_thursday.setDate(ndate.getDate() + (4 - nday)); var year_number = first_thursday.getFullYear(); // year of the first Thursday - var ordinal_date = Math.floor( (first_thursday.getTime() - new Date(year_number, 0, 1).getTime()) / 86400000); //ordinal date of the first Thursday - 1 (so not really ordinal date) + var ordinal_date = Math.round( (first_thursday.getTime() - new Date(year_number, 0, 1).getTime()) / 86400000); //ordinal date of the first Thursday - 1 (so not really ordinal date) var week_number = 1 + Math.floor( ordinal_date / 7); return week_number; }, getUTCISOWeek: function(ndate){ - return this.getISOWeek(ndate); - } -} + return this.getISOWeek(ndate); + } +}; \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/clear.css b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/clear.css index 728af2d65bd..3a3217e940a 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/clear.css +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/clear.css @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ .dhx_cal_ltext{ text-align:left; } diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/config.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/config.js index d9e5685a132..460b6771c00 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/config.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/config.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ /* %e Day of the month without leading zeros (01..31) %d Day of the month, 2 digits with leading zeros (01..31) @@ -39,27 +43,35 @@ scheduler.config={ edit_on_create:1, details_on_create:0, click_form_details:0, - + cascade_event_display: false, + cascade_event_count:4, + cascade_event_margin: 30, + drag_lightbox:true, + preserve_scroll:true, + server_utc:false, positive_closing:false, icons_edit:["icon_save","icon_cancel"], icons_select:["icon_details","icon_edit","icon_delete"], - + buttons_left:["dhx_save_btn","dhx_cancel_btn"], + buttons_right:["dhx_delete_btn"], lightbox:{ sections:[ {name:"description", height:200, map_to:"text", type:"textarea" , focus:true}, {name:"time", height:72, type:"time", map_to:"auto"} ] - } + }, + + repeat_date_of_end: "01.01.2010" }; -scheduler.templates={} +scheduler.templates={}; scheduler.init_templates=function(){ var d=scheduler.date.date_to_str; var c=scheduler.config; var f = function(a,b){ for (var c in b) if (!a[c]) a[c]=b[c]; - } + }; f(scheduler.templates,{ day_date:d(c.default_date), month_date:d(c.month_date), @@ -99,7 +111,7 @@ scheduler.init_templates=function(){ return ev.text; } }); - this.callEvent("onTemplatesReady",[]) -} + this.callEvent("onTemplatesReady",[]); +}; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/connector.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/connector.js index 45afbf6d089..72462172908 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/connector.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/connector.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ /* dhx_sort[index]=direction dhx_filter[index]=mask @@ -7,10 +11,10 @@ if (window.dhtmlXGridObject){ dhtmlXGridObject.prototype._init_point=function(){ var clear_url=function(url){ url=url.replace(/(\?|\&)connector[^\f]*/g,""); - return url+(url.indexOf("?")!=-1?"&":"?")+"connector=true"+(mygrid.hdr.rows.length > 0 ? "&dhx_no_header=1":""); + return url+(url.indexOf("?")!=-1?"&":"?")+"connector=true"+(this.hdr.rows.length > 0 ? "&dhx_no_header=1":""); }; var combine_urls=function(url){ - return clear_url(url)+(this._connector_sorting||"")+(this._connector_filter||""); + return clear_url.call(this,url)+(this._connector_sorting||"")+(this._connector_filter||""); }; var sorting_url=function(url,ind,dir){ this._connector_sorting="&dhx_sort["+ind+"]="+dir; @@ -112,14 +116,10 @@ if (window.dhtmlXGridObject){ } if (this._con_f_used[f*1]) this._con_f_used[f*1]=v; - }; + } this._colls_loaded=true; } - }; - - - - + }; } if (window.dataProcessor){ @@ -131,7 +131,9 @@ if (window.dataProcessor){ this.setTransactionMode("POST",true); this.serverProcessor+=(this.serverProcessor.indexOf("?")!=-1?"&":"?")+"editing=true"; }; -}; +} dhtmlxError.catchError("LoadXML",function(a,b,c){ - alert(c[0].responseText); + if (c[0].status != 0) { + alert(c[0].responseText); + } }); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js index 1fdfc17bb68..27741b6d147 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler._dp_init=function(dp){ dp._methods=["setEventTextStyle","","changeEventId","deleteEvent"]; @@ -5,7 +9,7 @@ scheduler._dp_init=function(dp){ if (!this._loading && this.validId(id)) dp.setUpdated(id,true,"inserted"); }); - this.attachEvent("onBeforeEventDelete",function(id){ + this.attachEvent("onConfirmedBeforeEventDelete", function(id){ if (!this.validId(id)) return; var z=dp.getState(id); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js new file mode 100644 index 00000000000..4717fe2858b --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js @@ -0,0 +1,200 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +dhx.protoUI({ + name:"dayevents", + defaults:{ + hourFormat:"%H", + hourClock:12, + firstHour:0, + lastHour:24, + timeScaleWidth:45, + timeScaleHeight: 30, + scroll:true, + scaleBorder:1, + eventOffset:5, + width:"auto", + date: new Date() + }, + $init:function(config){ + this.name = "DayEvents"; + + this._dataobj.style.position = "relative"; + this.data.provideApi(this,true); + this.data.attachEvent("onStoreUpdated",dhx.bind(this.render,this)); + + this.attachEvent("onBeforeRender", function(){ + this._renderScale(); + this.type.color = this.config.color; + this.type.textColor = this.config.textColor; + this._renderobj = this._dataobj.firstChild; + this._prepareEvents(); + if(window.scheduler) + this.type.template = scheduler.templates.day_event; + }); + if(window.scheduler){ + config.hourFormat = scheduler.config.scale_hour; + config.timeScaleWidth = scheduler.xy.scale_width; + config.timeScaleHeight = scheduler.xy.scale_height*2; + } + }, + _renderScale:function(){ + var html = "
"; + for(var h = this.config.firstHour; h"; + html += "
"+hour+"
"; + html += "
"; + html += "
"+top+"
"; + html += "
"+bottom+"
"; + html += "
"; + html += "
"; + html += "
"; + html += "
"; + html += "
"; + html += ""; + return html; + }, + type:{ + templateStart:dhx.Template("
"), + template:scheduler.templates.day_event, + templateEnd:dhx.Template("
"), + templateCss:dhx.Template(""), + templateColor:dhx.Template("#color#"), + templateTextColor:dhx.Template("#textColor#"), + padding:2 + }, + _prepareEvents:function(){ + var evs = this.data.getRange(); + var stack = []; + var ev,i,j,k,_is_sorder,_max_sorder,_sorder_set; + for(i=0; i< evs.length;i++){ + ev=evs[i]; + ev.$inner=false; + while (stack.length && stack[stack.length-1].end_date.valueOf()<=ev.start_date.valueOf()){ + stack.splice(stack.length-1,1); + } + _sorder_set = false; + + for(j=0;j< stack.length;j++){ + if(stack[j].end_date.valueOf()<=ev.start_date.valueOf()){ + _sorder_set = true; + ev.$sorder=stack[j].$sorder; + stack.splice(j,1); + ev.$inner=true; + break; + } + } + + if (stack.length) stack[stack.length-1].$inner=true; + + if(!_sorder_set){ + if(stack.length){ + if(stack.length<=stack[stack.length-1].$sorder){ + if(!stack[stack.length-1].$sorder) + ev.$sorder = 0; + else + for(j=0;j_max_sorder) + _max_sorder = stack[j].$sorder; + ev.$sorder = _max_sorder+1; + ev.$inner = false; + } + } + else + ev.$sorder = 0; + } + stack.push(ev); + if (stack.length>(stack.max_count||0)) stack.max_count=stack.length; + } + + for (var i=0; i < evs.length; i++){ + evs[i].$count=stack.max_count; + this._setPosition(evs[i]); + } + }, + _setPosition:function(ev){ + + var date = this.config.date.getValue?this.config.date.getValue():this.config.date; + + var start = dhx.Date.copy(ev.start_date); + var end = dhx.Date.copy(ev.end_date); + var sh = start.getHours(); + var eh = end.getHours(); + if(dhx.Date.datePart(start).valueOf()>dhx.Date.datePart(end).valueOf()){ + end = start; + } + + if(dhx.Date.datePart(start).valueOf()dhx.Date.datePart(date).valueOf()){ + end = dhx.Date.datePart(date); + end.setMinutes(0); + end.setHours(this.config.lastHour); + } + if (sh < this.config.firstHour || eh >= this.config.lastHour){ + if (sh < this.config.firstHour){ + end.setHours(this.config.firstHour); + ev.start_date.setMinutes(0); + } + if (eh >= this.config.lastHour){ + end.setMinutes(0); + end.setHours(this.config.lastHour); + } + } + var temp_width = Math.floor((this._content_width-this.config.timeScaleWidth-this.config.eventOffset-8)/ev.$count); + ev.$left=ev.$sorder*(temp_width)+this.config.timeScaleWidth+this.config.eventOffset; + if (!ev.$inner) temp_width=temp_width*(ev.$count-ev.$sorder); + ev.$width = temp_width-this.config.eventOffset-this.type.padding*2; + + var sm = start.getHours()*60+start.getMinutes(); + var em = (end.getHours()*60+end.getMinutes())||(this.config.lastHour*60); + ev.$top = Math.round((sm-this.config.firstHour/60)*(this.config.timeScaleHeight+1)/60); //42px/hour + ev.$height = Math.max(10,(em-sm)*(this.config.timeScaleHeight+1)/60-2)-this.type.padding*2; + } +}, dhx.MouseEvents, dhx.SelectionModel, dhx.Scrollable, dhx.RenderStack, dhx.DataLoader, dhx.ui.view, dhx.EventSystem, dhx.Settings); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js index 0dcaa7a070c..ce3c3891f0f 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js @@ -1,3 +1,37 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +dhtmlx=function(obj){ + for (var a in obj) dhtmlx[a]=obj[a]; + return dhtmlx; //simple singleton +}; +dhtmlx.extend_api=function(name,map,ext){ + var t = window[name]; + if (!t) return; //component not defined + window[name]=function(obj){ + if (obj && typeof obj == "object" && !obj.tagName && !(obj instanceof Array)){ + var that = t.apply(this,(map._init?map._init(obj):arguments)); + //global settings + for (var a in dhtmlx) + if (map[a]) this[map[a]](dhtmlx[a]); + //local settings + for (var a in obj){ + if (map[a]) this[map[a]](obj[a]); + else if (a.indexOf("on")==0){ + this.attachEvent(a,obj[a]); + } + } + } else + var that = t.apply(this,arguments); + if (map._patch) map._patch(this); + return that||this; + }; + window[name].prototype=t.prototype; + if (ext) + dhtmlXHeir(window[name].prototype,ext); +}; + dhtmlxAjax={ get:function(url,callback){ var t=new dtmlXMLLoaderObject(true); @@ -546,12 +580,15 @@ dhtmlDragAndDropObject.prototype.initFrameRoute=function(win, mode){ } } -var _isFF = false; -var _isIE = false; -var _isOpera = false; -var _isKHTML = false; -var _isMacOS = false; -var _isChrome = false; +_isFF = false; +_isIE = false; +_isOpera = false; +_isKHTML = false; +_isMacOS = false; +_isChrome = false; +_KHTMLrv = false; +_OperaRv = false; +_FFrv = false; if (navigator.userAgent.indexOf('Macintosh') != -1) _isMacOS=true; @@ -868,4 +905,10 @@ dhtmlxEventable=function(obj){ this[list[0]].removeEvent(list[1]); //remove event } } + obj.detachAllEvents = function(){ + for (var name in this){ + if (name.indexOf("ev_")==0) + delete this[name]; + } + } } diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js index 8dfc1cb0dd1..4a4143f947f 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ /** * @desc: constructor, data processor object * @param: serverProcessorURL - url used for update @@ -362,6 +366,8 @@ dataProcessor.prototype={ var soid = sid; switch (action) { + case "update": + case "updated": case "inserted": case "insert": if (tid != sid) { diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js index 2b251515166..e26776e533a 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ dataProcessor.prototype._o_init = dataProcessor.prototype.init; dataProcessor.prototype.init=function(obj){ this._console=this._console||this._createConsole(); @@ -86,7 +90,7 @@ dataProcessor.wrap("sendData",function(rowId){ if (!this.obj._idpull[rowId]) this._log(" Error! item with such ID not exists "+rowId+""); } else { - if (!this.obj.rowsAr[rowId]) + if (this.rowsAr && !this.obj.rowsAr[rowId]) this._log(" Error! row with such ID not exists "+rowId+""); } } @@ -150,7 +154,7 @@ dataProcessor.wrap("afterUpdateCallback",function(sid,tid,action){ if (this.obj.mytype=="tree"){ if (!this.obj._idpull[sid]) this._log("Incorrect SID, item with such ID not exists in grid"); } else { - if (!this.obj.rowsAr[sid]) this._log("Incorrect SID, row with such ID not exists in grid"); + if (this.obj.rowsAr && !this.obj.rowsAr[sid]) this._log("Incorrect SID, row with such ID not exists in grid"); } this._log(" Action: "+action+" SID:"+sid+" TID:"+tid); },function(){ diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js new file mode 100644 index 00000000000..19779666494 --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js @@ -0,0 +1,57 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +if(dataProcessor) { + dataProcessor.prototype.enableJSONP = function(mode) { + if(mode) { + this._jsonp_attach_id = this.attachEvent("onBeforeDataSending", function(rowId,rowIdState,a1){ + if (rowId) + this._in_progress[rowId]=(new Date()).valueOf(); + + var url = this.serverProcessor+(this._user?(getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&")):""); + url += ((url.indexOf("?")!=-1)?"&":"?")+this.serialize(a1,rowId); + + this._jsonp(url, [], function(data){ + var xml = new dtmlXMLLoaderObject(this.afterUpdate,this,true); + xml.loadXMLString(data); + this.afterUpdate(this, null, null, null, xml); + }, this); + + this._waitMode++; + return false; + }); + } + else { + if(this._jsonp_attach_id) + this.detachEvent(this._jsonp_attach_id); + } + }; + dataProcessor.prototype._jsonp = function(url, params, callback, master){ + var global_obj = "dataProcessor"; + var id = "dp_jsonp_"+new Date().valueOf(); + var script = document.createElement('script'); + script.id = id; + script.type = 'text/javascript'; + + var head = document.getElementsByTagName("head")[0]; + + if (!params) + params = {}; + params.jsonp = global_obj+"."+id; // would be called as dataProcessor.dp_jsonp_1938948394 + dataProcessor[id]=function(){ + callback.apply(master||window, arguments); + script.parentNode.removeChild(script); + callback = head = master = script = null; + delete dataProcessor[id]; + }; + + var vals = []; + for (var key in params) vals.push(key+"="+encodeURIComponent(params[key])); + + url += (url.indexOf("?") == -1 ? "?" : "&")+vals.join("&"); + + script.src = url ; + head.appendChild(script); + }; +} diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/event.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/event.js index 202a6e5fcb9..18542ecbe3b 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/event.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/event.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.uid=function(){ if (!this._seed) this._seed=(new Date).valueOf(); return this._seed++; @@ -9,6 +13,8 @@ scheduler.clearAll=function(){ this.clear_view(); }; scheduler.addEvent=function(start_date,end_date,text,id,extra_data){ + if(!arguments.length) + return this.addEventNow(); var ev=start_date; if (arguments.length!=1){ ev=extra_data||{}; @@ -16,12 +22,17 @@ scheduler.addEvent=function(start_date,end_date,text,id,extra_data){ ev.end_date=end_date; ev.text=text; ev.id=id; - }; + } ev.id = ev.id||scheduler.uid(); ev.text = ev.text||""; - + if (typeof ev.start_date == "string") ev.start_date=this.templates.api_date(ev.start_date); if (typeof ev.end_date == "string") ev.end_date=this.templates.api_date(ev.end_date); + + var d = (this.config.event_duration||this.config.time_step)*60000; + if(ev.start_date.valueOf() == ev.end_date.valueOf()) + ev.end_date.setTime(ev.end_date.valueOf()+d); + ev._timed=this.is_one_day_event(ev); var is_new=!this._events[ev.id]; @@ -30,15 +41,17 @@ scheduler.addEvent=function(start_date,end_date,text,id,extra_data){ if (!this._loading) this.callEvent(is_new?"onEventAdded":"onEventChanged",[ev.id,ev]); }; -scheduler.deleteEvent=function(id,silent){ +scheduler.deleteEvent=function(id,silent){ var ev=this._events[id]; - if (!silent && !this.callEvent("onBeforeEventDelete",[id,ev])) return; - + if (!silent && (!this.callEvent("onBeforeEventDelete",[id,ev]) || !this.callEvent("onConfirmedBeforeEventDelete", [id,ev]))) + return; if (ev){ delete this._events[id]; this.unselect(id); this.event_updated(ev); } + + this.callEvent("onEventDeleted", [id]); }; scheduler.getEvent=function(id){ return this._events[id]; @@ -64,6 +77,7 @@ scheduler.changeEventId=function(id,new_id){ }); if (this._select_id==id) this._select_id=new_id; if (this._edit_id==id) this._edit_id=new_id; + //if (this._drag_id==id) this._drag_id=new_id; this.callEvent("onEventIdChange",[id,new_id]); }; @@ -92,8 +106,7 @@ scheduler.event_updated=function(ev,force){ else this.clear_event(ev.id); }; scheduler.is_visible_events=function(ev){ - if (ev.start_dateb.start_date?1:-1; }); + evs.sort(function(a,b){ + if(a.start_date.valueOf()==b.start_date.valueOf()) + return a.id>b.id?1:-1; + return a.start_date>b.start_date?1:-1; + }); var days=[]; //events by weeks var evs_originals = []; for (var i=0; i < evs.length; i++) { @@ -239,12 +268,70 @@ scheduler._pre_render_events_line=function(evs,hold){ if (!hold){ ev._inner=false; + var stack=days[ev._sday]; while (stack.length && stack[stack.length-1].end_date<=ev.start_date) stack.splice(stack.length-1,1); - if (stack.length) stack[stack.length-1]._inner=true; - ev._sorder=stack.length; stack.push(ev); - if (stack.length>(stack.max_count||0)) stack.max_count=stack.length; + + var sorderSet = false; + for(var j=0; j _max_sorder) + _max_sorder = stack[j]._sorder; + ev._sorder = _max_sorder + 1; + ev._inner = false; + } + + } + else + ev._sorder = 0; + } + + stack.push(ev); + + if (stack.length>(stack.max_count||0)) { + stack.max_count=stack.length; + ev._count=stack.length; + } + else { + ev._count=(ev._count)?ev._count:1; + } } if (sh < this.config.first_hour || eh >= this.config.last_hour){ @@ -262,23 +349,23 @@ scheduler._pre_render_events_line=function(evs,hold){ evs.splice(i,1); i--; continue; } } - } if (!hold){ - for (var i=0; i < evs.length; i++) - evs[i]._count=days[evs[i]._sday].max_count; - for (var i=0; i < evs_originals.length; i++) + for (var i=0; i < evs.length; i++) { + evs[i]._count = days[evs[i]._sday].max_count; + } + for (var i=0; i < evs_originals.length; i++) evs_originals[i]._count=days[evs_originals[i]._sday].max_count; } return evs; }; scheduler._time_order=function(evs){ - evs.sort(function(a,b){ + evs.sort(function(a,b){ if (a.start_date.valueOf()==b.start_date.valueOf()){ if (a._timed && !b._timed) return 1; if (!a._timed && b._timed) return -1; - return 0; + return a.id>b.id?1:-1; } return a.start_date>b.start_date?1:-1; }); @@ -317,8 +404,10 @@ scheduler._pre_render_events_table=function(evs,hold){ // max - max height of we for (stack_line=0; stack_line"; - var obj = this._render_v_bar(ev.id,left-menu+1,top,menu,icons.length*20+26,"","
",icons_str,true); + icons_str+="
"; + var obj = this._render_v_bar(ev.id,left-menu+1,top,menu,icons.length*20+26,"","
",icons_str,true); obj.style.left=left-menu+1; this._els["dhx_cal_data"][0].appendChild(obj); this._rendered.push(obj); @@ -445,17 +542,19 @@ scheduler.render_event=function(ev){ }; scheduler._render_v_bar=function(id,x,y,w,h,style,contentA,contentB,bottom){ var d=document.createElement("DIV"); - var ev = this.getEvent(id); var cs = "dhx_cal_event"; var cse = scheduler.templates.event_class(ev.start_date,ev.end_date,ev); if (cse) cs=cs+" "+cse; + + var bg_color = (ev.color?("background-color:"+ev.color+";"):""); + var color = (ev.textColor?("color:"+ev.textColor+";"):""); var html='
'; - html+='
 
'; - html+='
'+contentA+'
'; - html+='
'+contentB+'
'; - html+='
'; + html+='
 
'; + html+='
'+contentA+'
'; + html+='
'+contentB+'
'; + html+=''; d.innerHTML=html; return d.firstChild; @@ -471,22 +570,25 @@ scheduler.locate_holder_day=function(date,past){ return day; }; scheduler.render_event_bar=function(ev){ - var parent=this._els["dhx_cal_data"][0]; + var parent=this._rendered_location; var x=this._colsS[ev._sday]; var x2=this._colsS[ev._eday]; if (x2==x) x2=this._colsS[ev._eday+1]; var hb = this.xy.bar_height; - var y=this._colsS.heights[ev._sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)+ev._sorder*hb; + var y=this._colsS.heights[ev._sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)+(ev._sorder*hb); var d=document.createElement("DIV"); var cs = ev._timed?"dhx_cal_event_clear":"dhx_cal_event_line"; var cse = scheduler.templates.event_class(ev.start_date,ev.end_date,ev); - if (cse) cs=cs+" "+cse; + if (cse) cs=cs+" "+cse; + + var bg_color = (ev.color?("background-color:"+ev.color+";"):""); + var color = (ev.textColor?("color:"+ev.textColor+";"):""); + + var html='
'; - var html='
'; - if (ev._timed) html+=scheduler.templates.event_bar_date(ev.start_date,ev.end_date,ev); html+=scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev)+'
'; @@ -542,4 +644,4 @@ scheduler.getEvents = function(from,to){ result.push(ev); } return result; -}; \ No newline at end of file +}; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext.css b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext.css index 402c5b38271..de19bca63ed 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext.css +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext.css @@ -1,6 +1,15 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +.dhx_scale_bar_header { + position: absolute; + border-bottom: 1px dotted #8894A3; + width: 100%; +} .dhx_expand_icon { position:absolute; top:0px; right:0px; - background-image:url(../codebase/imgs/colapce-expand-icon.gif); + background-image:url(./imgs/colapce-expand-icon.gif); width:18px; height:18px; cursor:pointer; background-position:0px 18px; @@ -10,7 +19,7 @@ width:100%; height:100%; overflow-y:auto; - background-image:url(../codebase/imgs/databg.png); + background-image:url(./imgs/databg.png); } .dhx_agenda_line{ height:21px; @@ -37,7 +46,7 @@ .dhx_agenda_line .dhx_event_icon{ width:20px; border-width:0px; - background:url(../codebase/imgs/icon.png) no-repeat; + background:url(./imgs/icon.png) no-repeat; background-position: 5px 4px; cursor:pointer; } @@ -51,7 +60,6 @@ border-left:1px dotted #586A7E; } .dhx_year_week{ - height:20px; position:relative; } .dhx_scale_bar_last{ @@ -79,7 +87,7 @@ } .dhx_tooltip{ border:1px solid #BBBBBB; - background-image:url(../codebase/imgs/databg.png); + background-image:url(./imgs/databg.png); position:absolute; z-index:9998; width:300px; @@ -101,7 +109,7 @@ float:left; border-width:0px; position:relative; - background:url(../codebase/imgs/icon.png) no-repeat; + background:url(./imgs/icon.png) no-repeat; background-position: 5px 4px; cursor:pointer; } @@ -136,10 +144,12 @@ left:190px; top:1px; cursor:pointer; - background-image:url(../imgs/calendar.gif); + background-image:url(./imgs/calendar.gif); } - +.dhx_matrix_scell { + height: 100%; +} .dhx_matrix_cell, .dhx_matrix_scell{ overflow:hidden; @@ -151,10 +161,12 @@ .dhx_matrix_cell{ background-color:white; } +.dhx_matrix_line{ + overflow: hidden; +} .dhx_matrix_cell div, .dhx_matrix_scell div{ overflow:hidden; text-align:center; - width:100%; height:auto; } @@ -179,12 +191,17 @@ .dhx_matrix_scell .dhx_scell_level2{ padding-left: 35px; } +.dhx_matrix_scell .dhx_scell_level3{ + padding-left: 50px; +} +.dhx_matrix_scell .dhx_scell_level4{ + padding-left: 65px; +} .dhx_matrix_scell.folder{ font-weight: bold; text-align: left; } - .dhx_matrix_scell.folder .dhx_scell_expand{ float: left; width: 10px; @@ -198,13 +215,17 @@ padding-left:15px; text-align: left; } -.dhx_section_timeline, .dhx_section_timeline2{ - overflow: hidden; - padding: 2px 0 2px 10px; +.dhx_data_table.folder .dhx_matrix_cell{ + border-right: 0; } -.dhx_section_timeline select, .dhx_section_timeline2 select{ +.dhx_section_timeline { + overflow: hidden; + padding: 4px 0 2px 10px; +} +.dhx_section_timeline select{ width: 552px; } + /* Tree view end*/ /* Map view */ @@ -213,12 +234,12 @@ height:100%; overflow-y: auto; overflow-x: hidden; - background-image:url(../codebase/imgs/databg.png); + background-image:url(./imgs/databg.png); } .dhx_map_line .dhx_event_icon{ width:20px; border-width:0px; - background:url(../codebase/imgs/icon.png) no-repeat; + background:url(./imgs/icon.png) no-repeat; background-position: 5px 4px; cursor:pointer; } @@ -247,7 +268,7 @@ } .dhx_map_line .dhx_map_description{ float:left; - border-right: 0px dotted #8894A3; + border-right: 0 dotted #8894A3; text-align:center; line-height:21px; overflow:hidden; @@ -271,8 +292,12 @@ /* dhtmlXTooltip start */ .dhtmlXTooltip.tooltip{ -moz-box-shadow:3px 3px 3px #888888; - -khtml-box-shadow:3px 3px 3px #888888; - + -webkit-box-shadow:3px 3px 3px #888888; + -o-box-shadow:3px 3px 3px #888888; + box-shadow:3px 3px 3px #888888; + filter: + progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5) + ; background-color:white; border-left:1px dotted #887A2E; border-top:1px dotted #887A2E; @@ -315,3 +340,47 @@ padding: 4px; } /* Lightbox dhtmlx combo section end */ + +/* Agenda week start */ +.dhx_wa_column { + float: left; +} +.dhx_wa_column_last .dhx_wa_day_cont{ + border-left: 1px dotted #8894A3; +} +.dhx_wa_scale_bar { + font-family: Tahoma; + padding-left: 10px; + font-size: 11px; + border-top: 1px dotted #8894A3; + border-bottom: 1px dotted #8894A3; +} +.dhx_wa_day_data { + background-color: #FCFEFC; + overflow-y: auto; +} +.dhx_wa_ev_body { + border-bottom: 1px dotted #778899; + font-size: 12px; + padding: 5px 0 5px 7px; +} +.dhx_wa_dnd { + font-family: Tahoma; + position: absolute; + padding-right: 7px; + color: #887AE2 !important; + background-color: #FFE763 !important; + border: 1px solid #B7A543; +} +.dhx_cal_event_selected{ + background-color: #9cc1db; + color: white; +} +/* Agenda week end */ + +/* timeline second scale start */ +.dhx_second_scale_bar { + border-bottom: 1px dotted #586A7E; + padding-top: 2px; +} +/* timeline second scale end */ \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js index 79ebce494bb..46bc624c1ea 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.attachEvent("onTemplatesReady",function(){ var s_d = scheduler.date.str_to_date(scheduler.config.api_date); var d_s = scheduler.date.date_to_str(scheduler.config.api_date); @@ -5,17 +9,18 @@ scheduler.attachEvent("onTemplatesReady",function(){ var month_x = scheduler.templates.month_day; scheduler.templates.month_day=function(date){ return ""+month_x(date)+""; - } + }; var week_x = scheduler.templates.week_scale_date; scheduler.templates.week_scale_date=function(date){ return ""+week_x(date)+""; - } - - + }; dhtmlxEvent(this._obj,"click",function(e){ var start = e.target || event.srcElement; var to = start.getAttribute("jump_to"); - if (to) + if (to) { scheduler.setCurrentView(s_d(to),"day"); + if (e && e.preventDefault) e.preventDefault(); + return false; + } }) -}) \ No newline at end of file +}); \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js index 6fcdd5cc106..08d06e0e644 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js @@ -1,20 +1,24 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.date.add_agenda = function(date){ return (new Date(date.valueOf())); -} +}; scheduler.dblclick_dhx_agenda_area=function(){ if (!this.config.readonly && this.config.dblclick_create) this.addEventNow(); -} +}; scheduler.templates.agenda_time = function(start,end,ev){ if (ev._timed) return this.day_date(ev.start_date, ev.end_date, ev)+" "+this.event_date(start); else return scheduler.templates.day_date(start)+" – "+scheduler.templates.day_date(end); -} -scheduler.templates.agenda_text = function(ev){ - return ev.text; -} +}; +scheduler.templates.agenda_text = function(start,end,event){ + return event.text; +}; scheduler.date.agenda_start=function(d){ return d; }; scheduler.attachEvent("onTemplatesReady",function(){ @@ -37,6 +41,19 @@ scheduler.attachEvent("onTemplatesReady",function(){ else return old.apply(this,arguments); } + + var old_render_view_data = scheduler.render_view_data; + scheduler.render_view_data=function(){ + if(this._mode == "agenda") { + scheduler._agendaScrollTop = scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop; + scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = 0; + scheduler._els["dhx_cal_data"][0].style.overflowY = 'hidden'; + } + else { + scheduler._els["dhx_cal_data"][0].style.overflowY = 'auto'; + } + return old_render_view_data.apply(this,arguments); + } function set_full_view(mode){ @@ -59,15 +76,18 @@ scheduler.attachEvent("onTemplatesReady",function(){ //generate html for the view var html="
"; for (var i=0; i
"+scheduler.templates.agenda_time(events[i].start_date, events[i].end_date,events[i])+"
"; + var ev = events[i]; + var bg_color = (ev.color?("background-color:"+ev.color+";"):""); + var color = (ev.textColor?("color:"+ev.textColor+";"):""); + html+="
"+scheduler.templates.agenda_time(ev.start_date, ev.end_date,ev)+"
"; html+="
 
"; - html+=""+scheduler.templates.agenda_text(events[i])+"
"; + html+=""+scheduler.templates.agenda_text(ev.start_date, ev.end_date, ev)+"
"; } html+="
"; //render html - scheduler._els["dhx_cal_data"][0].scrollTop = 0; //fix flickering in FF scheduler._els["dhx_cal_data"][0].innerHTML = html; + scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = scheduler._agendaScrollTop||0; var t=scheduler._els["dhx_cal_data"][0].firstChild.childNodes; scheduler._els["dhx_cal_date"][0].innerHTML=""; @@ -90,4 +110,4 @@ scheduler.attachEvent("onTemplatesReady",function(){ //agenda tab de-activated } } -}) \ No newline at end of file +}) diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js index d2582a05926..e1e5d0fb52f 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js @@ -1,27 +1,35 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ (function(){ -var temp_section,temp_time; +var temp_section; var before; scheduler.config.collision_limit = 1; -scheduler.attachEvent("onBeforeDrag",function(id){ - var pr = scheduler._props?scheduler._props[this._mode]:null; - var matrix = scheduler.matrix?scheduler.matrix[this._mode]:null; - var checked_mode = pr||matrix; + +function _setTempSection(event_id) { // for custom views (matrix, timeline, units) + var pr = scheduler._props?scheduler._props[scheduler._mode]:null; + var matrix = scheduler.matrix?scheduler.matrix[scheduler._mode]:null; + var checked_mode = pr||matrix; // units or matrix mode if(pr) var map_to = checked_mode.map_to; if(matrix) var map_to = checked_mode.y_property; + if ((checked_mode) && event_id){ + temp_section = scheduler.getEvent(event_id)[map_to]; + } +} - if ((checked_mode) && id){ - temp_section = this.getEvent(id)[map_to]; - temp_time = this.getEvent(id).start_date; - } +scheduler.attachEvent("onBeforeDrag",function(id){ + _setTempSection(id); return true; }); scheduler.attachEvent("onBeforeLightbox",function(id){ var ev = scheduler.getEvent(id); before = [ev.start_date, ev.end_date]; + _setTempSection(id); return true; }); scheduler.attachEvent("onEventChanged",function(id){ @@ -39,17 +47,16 @@ scheduler.attachEvent("onBeforeEventChanged",function(ev,e,is_new){ return collision_check(ev); }); scheduler.attachEvent("onEventSave",function(id, edited_ev){ - //var ev = scheduler.getEvent(id); - if(edited_ev.rec_type) + if(edited_ev.rec_type){ scheduler._roll_back_dates(edited_ev); - - return collision_check(edited_ev); + return collision_check(edited_ev); + } + return true; + //return collision_check(edited_ev); }); - function collision_check(ev){ var evs = []; - if (ev.rec_type) { var evs_dates = scheduler.getRecDates(ev); for(var k=0; k scheduler.config.collision_limit) { - scheduler._drag_event.start_date = temp_time; - ev[map_to] = temp_section; + if (count >= scheduler.config.collision_limit) { + ev[map_to] = temp_section; // from _setTempSection for custom views single = false; } } else { - if (evs.length > scheduler.config.collision_limit) + if (evs.length > scheduler.config.collision_limit) single = false; } - if (!single) return !scheduler.callEvent("onEventCollision",[ev,evs]); return single; -}; +} -})(); \ No newline at end of file +})(); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js index 0df4852ccdc..71f1d5e6794 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ (function(){ function setCookie(name,cookie_param,value) { var str = name + "=" + value + (cookie_param?("; "+cookie_param):""); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js index 8c64d13eddc..e76eff631f4 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.form_blocks['combo']={ render:function(sns) { var res = ''; @@ -40,7 +44,7 @@ scheduler.form_blocks['combo']={ scheduler.form_blocks['radio']={ render:function(sns) { var res = ''; - res += "
"; + res += "
"; for (var i=0; i"; @@ -74,20 +78,32 @@ scheduler.form_blocks['radio']={ scheduler.form_blocks['checkbox']={ render:function(sns) { - return ''; + if (scheduler.config.wide_form) + return '
'; + else + return ''; }, set_value:function(node,value,ev,config){ + node=document.getElementById(config.id); var id = scheduler.uid(); var isChecked = false; if (typeof config.checked_value != 'undefined' && ev[config.map_to] == config.checked_value) { isChecked = true; } - node.previousSibling.className += " dhx_cal_checkbox"; - node.previousSibling.innerHTML=""; - + node.className += " dhx_cal_checkbox"; + var check_html = ""; + var label_html = ""; + if (scheduler.config.wide_form){ + node.innerHTML = label_html; + node.nextSibling.innerHTML=check_html; + } else + node.innerHTML=check_html+label_html; }, get_value:function(node,ev,config){ - var checkbox = node.previousSibling.getElementsByTagName('input')[0]; // moved to the header + node=document.getElementById(config.id); + var checkbox = node.getElementsByTagName('input')[0]; // moved to the header + if (!checkbox) + checkbox = node.nextSibling.getElementsByTagName('input')[0]; return (checkbox.checked)?(config.checked_value||true):(config.unchecked_value||false); }, focus:function(node){ diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js index 9224bef1af5..5e916128cf9 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js @@ -1,27 +1,30 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.expand = function(){ - var t = scheduler._obj; - do { - t._position = t.style.position||""; - t.style.position = "static"; - } while ((t = t.parentNode) && t.style ); - t = scheduler._obj; - t.style.position="absolute"; - t._width = t.style.width; - t._height = t.style.height; - t.style.width = t.style.height = "100%"; - t.style.top = t.style.left = "0px"; - - var top =document.body; - top.scrollTop = 0; - - top = top.parentNode; - if (top) - top.scrollTop = 0; - document.body._overflow=document.body.style.overflow||""; - document.body.style.overflow = "hidden"; - scheduler._maximize() -} - + var t = scheduler._obj; + do { + t._position = t.style.position||""; + t.style.position = "static"; + } while ((t = t.parentNode) && t.style ); + t = scheduler._obj; + t.style.position="absolute"; + t._width = t.style.width; + t._height = t.style.height; + t.style.width = t.style.height = "100%"; + t.style.top = t.style.left = "0px"; + + var top = document.body; + top.scrollTop = 0; + + top = top.parentNode; + if (top) + top.scrollTop = 0; + document.body._overflow=document.body.style.overflow||""; + document.body.style.overflow = "hidden"; + scheduler._maximize(); +}; scheduler.collapse = function(){ var t = scheduler._obj; do { @@ -31,9 +34,8 @@ scheduler.collapse = function(){ t.style.width = t._width; t.style.height = t._height; document.body.style.overflow=document.body._overflow; - scheduler._maximize() -} - + scheduler._maximize(); +}; scheduler.attachEvent("onTemplatesReady",function(){ var t = document.createElement("DIV"); t.className="dhx_expand_icon"; @@ -46,9 +48,27 @@ scheduler.attachEvent("onTemplatesReady",function(){ scheduler.collapse(); } }); + scheduler._maximize = function(){ - this.expanded = !this.expanded; - this.toggleIcon.style.backgroundPosition="0px "+(this._expand?"0":"18")+"px"; - if (scheduler.callEvent("onSchedulerResize",[])) - scheduler.update_view(); -} + this.expanded = !this.expanded; + this.toggleIcon.style.backgroundPosition="0px "+(this.expanded?"0":"18")+"px"; + + var directions = ['left', 'top']; + for(var i=0; i= scheduler.config.collision_limit); + }); + + scheduler.addEvent=function(start_date,end_date,text,id,extra_data){ + var ev=start_date; + if (arguments.length!=1){ + ev=extra_data||{}; + ev.start_date=start_date; + ev.end_date=end_date; + ev.text=text; + ev.id=id; + ev.layer = this.defaultLayer; + }; + ev.id = ev.id||scheduler.uid(); + ev.text = ev.text||""; + + + if (typeof ev.start_date == "string") ev.start_date=this.templates.api_date(ev.start_date); + if (typeof ev.end_date == "string") ev.end_date=this.templates.api_date(ev.end_date); + ev._timed=this.is_one_day_event(ev); + + var is_new=!this._events[ev.id]; + this._events[ev.id]=ev; + this.event_updated(ev); + if (!this._loading) + this.callEvent(is_new?"onEventAdded":"onEventChanged",[ev.id,ev]); + }; + + this._evs_layer = {}; + for (var i = 0; i < this.layers.length; i++) { // array in object for each layer + this._evs_layer[this.layers[i].name] = []; + } + + scheduler.addEventNow=function(start,end,e){ + var base = {}; + if (typeof start == "object"){ + base = start; + start = null; + } + + var d = (this.config.event_duration||this.config.time_step)*60000; + if (!start) start = Math.round((new Date()).valueOf()/d)*d; + var start_date = new Date(start); + if (!end){ + var start_hour = this.config.first_hour; + if (start_hour > start_date.getHours()){ + start_date.setHours(start_hour); + start = start_date.valueOf(); + } + end = start+d; + } + + + base.start_date = base.start_date||start_date; + base.end_date = base.end_date||new Date(end); + base.text = base.text||this.locale.labels.new_event; + base.id = this._drag_id = this.uid(); + base.layer = this.defaultLayer; + this._drag_mode="new-size"; + + this._loading=true; + this.addEvent(base); + this.callEvent("onEventCreated",[this._drag_id,e]); + this._loading=false; + + this._drag_event={}; //dummy , to trigger correct event updating logic + this._on_mouse_up(e); + } + + scheduler._t_render_view_data = function(events) { // helper + if (this.config.multi_day && !this._table_view) { + var tvs = []; + var tvd = []; + for (var k = 0; k < events.length; k++) { + if (events[k]._timed) + tvs.push(events[k]); + else + tvd.push(events[k]); + } + this._table_view = true; + this.render_data(tvd); + this._table_view = false; + this.render_data(tvs); + } + else + this.render_data(events); + }; + + scheduler.render_view_data = function(){ + if (this._not_render) { + this._render_wait = true; + return; + } + this._render_wait = false; + + this.clear_view(); + + this._evs_layer = {}; + for (var i = 0; i < this.layers.length; i++) { // array in object for each layer + this._evs_layer[this.layers[i].name] = []; + } + + var evs = this.get_visible_events(); + for (var i = 0; i < evs.length; i++) { // filling layer arrays with events + if(this._evs_layer[evs[i].layer]) + this._evs_layer[evs[i].layer].push(evs[i]); + } + + if(this._mode == 'month') { // old logic is used + var tevs = []; + for (var i = 0; i < this.layers.length; i++) { + if (this.layers[i].visible) + tevs = tevs.concat(this._evs_layer[this.layers[i].name]); + } + this._t_render_view_data(tevs); + } + else { // week, day; should use new logic + for (var i = 0; i < this.layers.length; i++) { + if (this.layers[i].visible) { + var evs_layer = this._evs_layer[this.layers[i].name]; + this._t_render_view_data(evs_layer); + } + } + } + }; + + scheduler._render_v_bar=function(id,x,y,w,h,style,contentA,contentB,bottom){ + var ev = this.getEvent(id); + if(contentA.indexOf('
'; + html+='
 
'; + html+='
'+contentA+'
'; + html+='
'+contentB+'
'; + html+='
'; + + d.innerHTML=html; + d.style.zIndex = 100; + return d.firstChild; + }; + + scheduler.render_event_bar=function(ev){ + var parent=this._els["dhx_cal_data"][0]; + + var x=this._colsS[ev._sday]; + var x2=this._colsS[ev._eday]; + if (x2==x) x2=this._colsS[ev._eday+1]; + var hb = this.xy.bar_height; + + var y=this._colsS.heights[ev._sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)+ev._sorder*hb; + + var d=document.createElement("DIV"); + var cs = ev._timed?"dhx_cal_event_clear":"dhx_cal_event_line"; + var cse = (scheduler.templates['event_class_'+ev.layer])?scheduler.templates['event_class_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_class(ev.start_date,ev.end_date,ev); + if (cse) cs=cs+" "+cse; + + var html='
'; + + if (ev._timed) + html+=(scheduler.templates['event_bar_date_'+ev.layer])?scheduler.templates['event_bar_date_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_bar_date(ev.start_date,ev.end_date,ev); + html+=( (scheduler.templates['event_bar_text_'+ev.layer])?scheduler.templates['event_bar_text_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev) + '
)'); + html+='
'; + + d.innerHTML=html; + + this._rendered.push(d.firstChild); + parent.appendChild(d.firstChild); + }; + + scheduler.render_event=function(ev){ + var menu = scheduler.xy.menu_width; + if(scheduler.getLayer(ev.layer).noMenu) + menu = 0; + + if (ev._sday<0) return; //can occur in case of recurring event during time shift + var parent=scheduler.locate_holder(ev._sday); + if (!parent) return; //attempt to render non-visible event + var sm = ev.start_date.getHours()*60+ev.start_date.getMinutes(); + var em = (ev.end_date.getHours()*60+ev.end_date.getMinutes())||(scheduler.config.last_hour*60); + + var top = (Math.round((sm*60*1000-this.config.first_hour*60*60*1000)*this.config.hour_size_px/(60*60*1000)))%(this.config.hour_size_px*24)+1; //42px/hour + var height = Math.max(scheduler.xy.min_event_height,(em-sm)*this.config.hour_size_px/60)+1; //42px/hour + //var height = Math.max(25,Math.round((ev.end_date.valueOf()-ev.start_date.valueOf())*(this.config.hour_size_px+(this._quirks?1:0))/(60*60*1000))); //42px/hour + var width=Math.floor((parent.clientWidth-menu)/ev._count); + var left=ev._sorder*width+1; + if (!ev._inner) width=width*(ev._count-ev._sorder); + + + + var d=this._render_v_bar(ev.id,menu+left,top,width,height,ev._text_style,scheduler.templates.event_header(ev.start_date,ev.end_date,ev),scheduler.templates.event_text(ev.start_date,ev.end_date,ev)); + + this._rendered.push(d); + parent.appendChild(d); + + left=left+parseInt(parent.style.left,10)+menu; + + top+=this._dy_shift; //corrupt top, to include possible multi-day shift + d.style.zIndex = this._layers_zindex[ev.layer]; + + if (this._edit_id==ev.id){ + d.style.zIndex = parseInt(d.style.zIndex)+1; //fix overlapping issue + var new_zIndex = d.style.zIndex; + width=Math.max(width-4,scheduler.xy.editor_width); + var d=document.createElement("DIV"); + d.setAttribute("event_id",ev.id); + this.set_xy(d,width,height-20,left,top+14); + d.className="dhx_cal_editor"; + d.style.zIndex = new_zIndex; + var d2=document.createElement("DIV"); + this.set_xy(d2,width-6,height-26); + d2.style.cssText+=";margin:2px 2px 2px 2px;overflow:hidden;"; + + + d2.style.zIndex = new_zIndex; + d.appendChild(d2); + this._els["dhx_cal_data"][0].appendChild(d); + this._rendered.push(d); + + d2.innerHTML=""; + if (this._quirks7) d2.firstChild.style.height=height-12+"px"; //IEFIX + this._editor=d2.firstChild; + this._editor.onkeypress=function(e){ + if ((e||event).shiftKey) return true; + var code=(e||event).keyCode; + if (code==scheduler.keys.edit_save) scheduler.editStop(true); + if (code==scheduler.keys.edit_cancel) scheduler.editStop(false); + }; + this._editor.onselectstart=function(e){ return (e||event).cancelBubble=true; }; + d2.firstChild.focus(); + //IE and opera can add x-scroll during focusing + this._els["dhx_cal_data"][0].scrollLeft=0; + d2.firstChild.select(); + } + if (this._select_id==ev.id){ + d.style.zIndex = parseInt(d.style.zIndex)+1; //fix overlapping issue + var icons=this.config["icons_"+((this._edit_id==ev.id)?"edit":"select")]; + var icons_str=""; + for (var i=0; i
"; + var obj = this._render_v_bar(ev.id,left-menu+1,top,menu,icons.length*20+26,"","
",icons_str,true); + obj.style.left=left-menu+1; + obj.style.zIndex = d.style.zIndex; + this._els["dhx_cal_data"][0].appendChild(obj); + this._rendered.push(obj); + } + + }; + + scheduler.filter_agenda = function(id, event) { + var layer = scheduler.getLayer(event.layer); + return (layer && layer.visible); + }; +}); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js index 4a8ad2fed6d..ad790cf3ea9 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.config.limit_start = new Date(-3999,0,0); scheduler.config.limit_end = new Date( 3999,0,0); scheduler.config.limit_view = false; @@ -5,6 +9,48 @@ scheduler.config.limit_view = false; (function(){ var before = null; + var block_days = {}; + var block_weeks = {}; + var time_block_set = false; + scheduler.blockTime = function(day, zones){ + var bottom = this.config.first_hour*60 + var top = this.config.last_hour*60 + if (zones == "fullday") + zones = [bottom,top]; + + if (typeof day == "object") + block_days[this.date.date_part(day).valueOf()] = zones; + else + block_weeks[day] = zones; + + for (var i=0; itop) + zones[i+1] = top; + } + + time_block_set = true; + }; + + scheduler.attachEvent("onScaleAdd", function(area, day){ + var zones = block_days[day.valueOf()] || block_weeks[day.getDay()]; + if (zones){ + for (var i = 0; i < zones.length; i+=2){ + var start = zones[i]; + var end = zones[i+1]; + var block = document.createElement("DIV"); + block.className = "dhx_time_block"; + + var h_px // FIXME + block.style.top = (Math.round((start*60*1000-this.config.first_hour*60*60*1000)*this.config.hour_size_px/(60*60*1000)))%(this.config.hour_size_px*24)+"px"; + block.style.height = (Math.round(((end-start-1)*60*1000)*this.config.hour_size_px/(60*60*1000)))%(this.config.hour_size_px*24)+"px"; + + area.appendChild(block); + } + } + }); + scheduler.attachEvent("onBeforeViewChange",function(om,od,nm,nd){ nd = nd||od; nm = nm||om; if (scheduler.config.limit_view){ @@ -20,6 +66,44 @@ scheduler.config.limit_view = false; var blocker = function(ev){ var c = scheduler.config; var res = (ev.start_date.valueOf() >= c.limit_start.valueOf() && ev.end_date.valueOf() <= c.limit_end.valueOf()); + if (res && time_block_set && ev._timed){ + var day = scheduler.date.date_part(new Date(ev.start_date.valueOf())); + var zones = block_days[day.valueOf()] || block_weeks[day.getDay()]; + var sm = ev.start_date.getHours()*60+ev.start_date.getMinutes(); + var em = ev.end_date.getHours()*60+ev.end_date.getMinutes(); + if (zones){ + for (var i = 0; i < zones.length; i+=2){ + var sz = zones[i]; + var ez = zones[i+1]; + if (szsm) { + if (sm<=ez && sm >=sz){ + if (ez == 24*60 || em=sz && em scheduler.config.limit_end) { - ev.end_date = new Date(scheduler.config.limit_end); - // as end date was changed need to recheck if event occuring during one day - ev._timed = this.is_one_day_event(ev); + if (ev.start_date.valueOf() >= scheduler.config.limit_end.valueOf()) { + ev.start_date = this.date.add(scheduler.config.limit_end, -1, "day"); + } + if (ev.end_date < scheduler.config.limit_start) { + ev.end_date = new Date(scheduler.config.limit_start); + } + if (ev.end_date.valueOf() >= scheduler.config.limit_end.valueOf()) { + ev.end_date = this.date.add(scheduler.config.limit_end, -1, "day"); } - // in case if both start and end date were specified < scheduler.config.limit_star - if (ev.start_date > ev.end_date) { + if (ev.start_date.valueOf() >= ev.end_date.valueOf()) { ev.end_date = this.date.add(ev.start_date, (this.config.event_duration||this.config.time_step), "minute"); } + ev._timed=this.is_one_day_event(ev); } return true; }); @@ -74,5 +163,4 @@ scheduler.config.limit_view = false; return blocker(ev); }); -})(); - +})(); \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js index 05845b9c468..e2e17d14e03 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js @@ -1,5 +1,7 @@ - - +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.xy.map_date_width = 188; // date column width scheduler.xy.map_description_width = 400; // description column width @@ -18,74 +20,90 @@ scheduler.config.map_zoom_after_resolve = 15; scheduler.locale.labels.marker_geo_success = "It seems you are here."; scheduler.locale.labels.marker_geo_fail = "Sorry, could not get your current position using geolocation."; -scheduler.templates.marker_date=scheduler.date.date_to_str("%Y-%m-%d %H:%i"); // date for map's infowindow will be formated following way +scheduler.templates.marker_date = scheduler.date.date_to_str("%Y-%m-%d %H:%i"); // date for map's infowindow will be formated following way -scheduler.templates.marker_text=function(start, end, ev){ - return "
"+ev.text+"

"+(ev.event_location||'')+"

"+scheduler.templates.marker_date(start)+" - "+scheduler.templates.marker_date(end)+"
"; +scheduler.templates.marker_text = function(start, end, ev) { + return "
" + ev.text + "

" + (ev.event_location || '') + "

" + scheduler.templates.marker_date(start) + " - " + scheduler.templates.marker_date(end) + "
"; }; -scheduler.dblclick_dhx_map_area=function(){ +scheduler.dblclick_dhx_map_area = function() { if (!this.config.readonly && this.config.dblclick_create) - this.addEventNow(); + this.addEventNow({ + start_date: scheduler._date, + end_date: scheduler.date.add(scheduler._date, 1, "hour") + }); }; -scheduler.templates.map_time = function(start,end,ev){ - if (ev._timed) - return this.day_date(ev.start_date, ev.end_date, ev)+" "+this.event_date(start); +scheduler.templates.map_time = function(start, end, ev) { + if (ev._timed) + return this.day_date(ev.start_date, ev.end_date, ev) + " " + this.event_date(start); else - return scheduler.templates.day_date(start)+" – "+scheduler.templates.day_date(end); + return scheduler.templates.day_date(start) + " – " + scheduler.templates.day_date(end); }; -scheduler.templates.map_text = function(ev){ +scheduler.templates.map_text = function(start, end, ev) { return ev.text; }; -scheduler.date.map_start=function(d){ return d; }; - -scheduler.attachEvent("onTemplatesReady",function(){ +scheduler.date.map_start = function(d) { + return d; +}; +scheduler.date.add_map = function(date, inc, mode) { + return (new Date(date.valueOf())); +}; + +scheduler.templates.map_date = function(dd, ed, mode) { + return ''; +}; + +scheduler._latLngUpdate = false; // flag for not displaying event second time in case of coordinates update + +scheduler.attachEvent("onSchedulerReady", function() { + + (function() { + scheduler._isMapPositionSet = false; // if user actual (geolocation) position was set on the map - function _append_map() { - _isPositionSet = false; // if user actual (geolocation) position was set on the map - var gmap = document.createElement('div'); - gmap.className='dhx_map'; - gmap.id='dhx_gmap'; + gmap.className = 'dhx_map'; + gmap.id = 'dhx_gmap'; gmap.style.dispay = "none"; - - node = document.getElementById('scheduler_here'); + + var node = scheduler._obj; node.appendChild(gmap); - + scheduler._els.dhx_gmap = []; scheduler._els.dhx_gmap.push(gmap); - + _setMapSize('dhx_gmap'); var mapOptions = { zoom: scheduler.config.map_inital_zoom || 10, center: scheduler.config.map_initial_position, - mapTypeId: scheduler.config.map_type||google.maps.MapTypeId.ROADMAP + mapTypeId: scheduler.config.map_type || google.maps.MapTypeId.ROADMAP }; - map = new google.maps.Map(document.getElementById('dhx_gmap'), mapOptions); + var map = new google.maps.Map(document.getElementById('dhx_gmap'), mapOptions); map.disableDefaultUI = false; - map.disableDoubleClickZoom = true; - + map.disableDoubleClickZoom = !scheduler.config.readonly; + google.maps.event.addListener(map, "dblclick", function(event) { if (!scheduler.config.readonly && scheduler.config.dblclick_create) { - point = event.latLng; + var point = event.latLng; geocoder.geocode( - { 'latLng': point }, - function(results, status) { - if (status == google.maps.GeocoderStatus.OK) { - point = results[0].geometry.location; - scheduler.addEventNow({ - lat: point.lat(), - lng: point.lng(), - event_location: results[0].formatted_address - }); + { 'latLng': point }, + function(results, status) { + if (status == google.maps.GeocoderStatus.OK) { + point = results[0].geometry.location; + scheduler.addEventNow({ + lat: point.lat(), + lng: point.lng(), + event_location: results[0].formatted_address, + start_date: scheduler._date, + end_date: scheduler.date.add(scheduler._date, 1, "hour") + }); + } } - } - ); - } + ); + } }); - + var infoWindowOptions = { content: '' }; @@ -93,304 +111,389 @@ scheduler.attachEvent("onTemplatesReady",function(){ if (scheduler.config.map_infowindow_max_width) { infoWindowOptions.maxWidth = scheduler.config.map_infowindow_max_width; } - + scheduler.map = { _points: [], _markers: [], _infowindow: new google.maps.InfoWindow(infoWindowOptions), _infowindows_content: [], - _initialization_count: -1 + _initialization_count: -1, + _obj: map }; - + geocoder = new google.maps.Geocoder(); - - if(scheduler.config.map_resolve_user_location) { - if(navigator.geolocation) { - if(!_isPositionSet) { + + if (scheduler.config.map_resolve_user_location) { + if (navigator.geolocation) { + if (!scheduler._isMapPositionSet) { navigator.geolocation.getCurrentPosition(function(position) { - var _userLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); + var _userLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); map.setCenter(_userLocation); - map.setZoom(scheduler.config.map_zoom_after_resolve||10); + map.setZoom(scheduler.config.map_zoom_after_resolve || 10); scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_success); scheduler.map._infowindow.position = map.getCenter(); scheduler.map._infowindow.open(map); - _isPositionSet = true; - }, - function() { - scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_fail); - scheduler.map._infowindow.setPosition(map.getCenter()); - scheduler.map._infowindow.open(map); - _isPositionSet = true; - }); + scheduler._isMapPositionSet = true; + }, + function() { + scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_fail); + scheduler.map._infowindow.setPosition(map.getCenter()); + scheduler.map._infowindow.open(map); + scheduler._isMapPositionSet = true; + }); } } } google.maps.event.addListener(map, "resize", function(event) { - gmap.style.zIndex='5'; - map.setZoom( map.getZoom() ); + gmap.style.zIndex = '5'; + map.setZoom(map.getZoom()); + }); google.maps.event.addListener(map, "tilesloaded", function(event) { - gmap.style.zIndex='5'; + gmap.style.zIndex = '5'; }); - } - _append_map(); - scheduler.attachEvent("onSchedulerResize",function(){ - if (this._mode == "map"){ - this.map_view(true); - } - }); - - var old = scheduler.render_data; - scheduler.render_data=function(evs,hold){ + gmap.style.display = 'none'; // property was changed after attaching map + })(); + + scheduler.attachEvent("onSchedulerResize", function() { if (this._mode == "map") { - fill_map_tab(); + this.map_view(true); + return false + } + return true; + }); + + var old = scheduler.render_data; + scheduler.render_data = function(evs, hold) { + if (this._mode == "map") { + fill_map_tab(); var events = scheduler.get_visible_events(); - for(var i=0; i
"+l.date+"
"+l.description+"
"; - scheduler._table_view=true; + scheduler._els["dhx_cal_header"][0].innerHTML = "
" + l.date + "
" + l.description + "
"; + scheduler._table_view = true; scheduler.set_sizes(); } } - function fill_map_tab(){ - //get current date - var date = scheduler._date; + function clear_map_tab() { + scheduler._selected_event_id = null; + scheduler.map._infowindow.close(); + for (var key in scheduler.map._markers) { + scheduler.map._markers[key].setMap(null); + delete scheduler.map._markers[key]; + if (scheduler.map._infowindows_content[key]) + delete scheduler.map._infowindows_content[key]; + } + } + + function fill_map_tab() { //select events for which data need to be printed var events = scheduler.get_visible_events(); - events.sort(function(a,b){ return a.start_date>b.start_date?1:-1; }); - + events.sort(function(a, b) { + if (a.start_date < b.start_date) + return -1; + if (a.start_date.valueOf() == b.start_date.valueOf()) { + if (a.text < b.text) + return -1 + else { + if (a.text == b.text) + return 0; + else + return 1; + } + } + else + return 1; + }); + //generate html for the view - var html="
"; - for (var i=0; i
"+scheduler.templates.map_time(events[i].start_date, events[i].end_date,events[i])+"
"; - html+="
 
"; - html+="
"+scheduler.templates.map_text(events[i])+"
"; // -25 = icon size 20 and padding 5 + var html = "
"; + for (var i = 0; i < events.length; i++) { + var ev = events[i]; + var event_class = (ev.id == scheduler._selected_event_id) ? 'dhx_map_line highlight' : 'dhx_map_line'; + var bg_color = (ev.color ? ("background-color:" + ev.color + ";") : ""); + var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); + html += "
" + scheduler.templates.map_time(ev.start_date, ev.end_date, ev) + "
"; + html += "
 
"; + html += "
" + scheduler.templates.map_text(ev.start_date, ev.end_date, ev) + "
"; // -25 = icon size 20 and padding 5 } - html+="
"; - + html += "
"; + //render html scheduler._els["dhx_cal_data"][0].scrollTop = 0; //fix flickering in FF scheduler._els["dhx_cal_data"][0].innerHTML = html; scheduler._els["dhx_cal_data"][0].style.width = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px'; - - var t=scheduler._els["dhx_cal_data"][0].firstChild.childNodes; - scheduler._els["dhx_cal_date"][0].innerHTML=""; - - scheduler._rendered=[]; - for (var i=0; i < t.length-2; i++) { - scheduler._rendered[i]=t[i]; + + var t = scheduler._els["dhx_cal_data"][0].firstChild.childNodes; + scheduler._els["dhx_cal_date"][0].innerHTML = scheduler.templates[scheduler._mode + "_date"](scheduler._min_date, scheduler._max_date, scheduler._mode); + + scheduler._rendered = []; + for (var i = 0; i < t.length - 2; i++) { + scheduler._rendered[i] = t[i]; } - + } - + function _setMapSize(elem_id) { //input - map's div id var map = document.getElementById(elem_id); - map.style.height = (scheduler._y - scheduler.xy.nav_height) + 'px'; - map.style.width = (scheduler._x - scheduler.xy.map_date_width - scheduler.xy.map_description_width - 1) + 'px'; + var height = scheduler._y - scheduler.xy.nav_height; + if (height < 0) + height = 0; + var width = scheduler._x - scheduler.xy.map_date_width - scheduler.xy.map_description_width - 1; + if (width < 0) + width = 0; + map.style.height = height + 'px'; + map.style.width = width + 'px'; map.style.marginLeft = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px'; map.style.marginTop = (scheduler.xy.nav_height + 2) + 'px'; } - scheduler.map_view=function(mode){ + scheduler.map_view = function(mode) { scheduler.map._initialization_count++; var gmap = scheduler._els.dhx_gmap[0]; - scheduler._els.dhx_cal_data[0].style.width = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px'; - - scheduler._min_date = scheduler.config.map_start||(new Date()); - scheduler._max_date = scheduler.config.map_end||(new Date(9999,1,1)); + + scheduler._min_date = scheduler.config.map_start || (new Date()); + scheduler._max_date = scheduler.config.map_end || (new Date(9999, 1, 1)); + scheduler._table_view = true; set_full_view(mode); - - if (mode){ //map tab activated + + if (mode) { //map tab activated + clear_map_tab(); fill_map_tab(); gmap.style.display = 'block'; - + // need to resize block everytime window is resized _setMapSize('dhx_gmap'); - + var temp_center = scheduler.map._obj.getCenter(); + var events = scheduler.get_visible_events(); - for(var i=0; i scheduler._min_date) || (event.start_date < scheduler._max_date && event.end_date > scheduler._max_date) || (event.start_date.valueOf() >= scheduler._min_date && event.end_date.valueOf() <= scheduler._max_date)) { + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + _displayEventOnMap(event); + } else { // event no longer should be displayed on the map view + scheduler._selected_event_id = null; + scheduler.map._infowindow.close(); + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + } } + else + this._latLngUpdate = false; return true; - }); - - scheduler.attachEvent("onEventIdChange", function(old_event_id,new_event_id){ - if(scheduler.is_visible_events(scheduler.getEvent(new_event_id))) { - if(scheduler.map._markers[old_event_id]) scheduler.map._markers[old_event_id].setMap(null); - var event = scheduler.getEvent(new_event_id); + }); + + + scheduler.attachEvent("onEventIdChange", function(old_event_id, new_event_id) { + var event = scheduler.getEvent(new_event_id); + if ((event.start_date < scheduler._min_date && event.end_date > scheduler._min_date) || (event.start_date < scheduler._max_date && event.end_date > scheduler._max_date) || (event.start_date.valueOf() >= scheduler._min_date && event.end_date.valueOf() <= scheduler._max_date)) { + if (scheduler.map._markers[old_event_id]) { + scheduler.map._markers[old_event_id].setMap(null); + delete scheduler.map._markers[old_event_id]; + } + if (scheduler.map._infowindows_content[old_event_id]) + delete scheduler.map._infowindows_content[old_event_id]; _displayEventOnMap(event); } return true; }); - - /* Test/example - scheduler.attachEvent("onLocationError", function(event_id,event_object){ - return new google.maps.LatLng(8, 8); - }); - */ - - scheduler.attachEvent("onBeforeEventDelete", function(event_id,event_object){ - if (scheduler.map._markers[event_id]) { - scheduler.map._markers[event_id].setMap(null); // if new event is deleted tab != map then it doesn't have marker yet + + scheduler.attachEvent("onEventAdded", function(event_id, event_object) { + if (!scheduler._dataprocessor) { + if ((event_object.start_date < scheduler._min_date && event_object.end_date > scheduler._min_date) || (event_object.start_date < scheduler._max_date && event_object.end_date > scheduler._max_date) || (event_object.start_date.valueOf() >= scheduler._min_date && event_object.end_date.valueOf() <= scheduler._max_date)) { + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + _displayEventOnMap(event_object); } - scheduler.map._infowindow.close(); - return true; - }); - - scheduler._event_resolve_delay = 500; - scheduler.attachEvent("onEventLoading", function(event){ - if(scheduler.config.map_resolve_event_location && event.event_location && !event.lat && !event.lng) { // don't delete !event.lat && !event.lng as location could change - scheduler._event_resolve_delay += 500; - _delay(_updateEventLocation,this,[event], scheduler._event_resolve_delay); } return true; - }); - - scheduler.attachEvent("onEventCancel", function(event_id, is_new){ - if(is_new) { - if(scheduler.map._markers[event_id]) + }); + + /* Test/example + scheduler.attachEvent("onLocationError", function(event_id,event_object){ + return new google.maps.LatLng(8, 8); + }); + */ + + scheduler.attachEvent("onBeforeEventDelete", function(event_id, event_object) { + if (scheduler.map._markers[event_id]) { + scheduler.map._markers[event_id].setMap(null); // if new event is deleted tab != map then it doesn't have marker yet + } + scheduler._selected_event_id = null; + scheduler.map._infowindow.close(); + return true; + }); + + scheduler._event_resolve_delay = 1500; + scheduler.attachEvent("onEventLoading", function(event) { + if (scheduler.config.map_resolve_event_location && event.event_location && !event.lat && !event.lng) { // don't delete !event.lat && !event.lng as location could change + scheduler._event_resolve_delay += 1500; + _delay(_updateEventLocation, this, [event], scheduler._event_resolve_delay); + } + return true; + }); + + scheduler.attachEvent("onEventCancel", function(event_id, is_new) { + if (is_new) { + if (scheduler.map._markers[event_id]) scheduler.map._markers[event_id].setMap(null); scheduler.map._infowindow.close(); } return true; - }); -}); \ No newline at end of file + }); +}); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js index e36c6d68e75..07ea857c13f 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ (function(){ scheduler.matrix = {}; scheduler._merge=function(a,b){ @@ -24,6 +28,8 @@ scheduler.createTimelineView=function(obj){ render:"cell", dx:200, dy:50, + fit_events: true, + second_scale: false, _logic: function(render_name, y_unit, timeline) { var res = {}; if(scheduler.checkEvent("onBeforeViewRender")) { @@ -36,14 +42,10 @@ scheduler.createTimelineView=function(obj){ if (scheduler.checkEvent("onTimelineCreated")) { scheduler.callEvent("onTimelineCreated", [obj]); } - - //init custom wrappers - scheduler[obj.name+"_view"]=function(){ - scheduler.renderMatrix.apply(obj, arguments); - }; var old = scheduler.render_data; scheduler.render_data=function(evs, mode){ + if (this._mode == obj.name){ if (mode) //repaint single event, precision is not necessary for (var i=0; i < evs.length; i++) { @@ -58,20 +60,22 @@ scheduler.createTimelineView=function(obj){ scheduler.matrix[obj.name]=obj; scheduler.templates[obj.name+"_cell_value"] = function(ar){ return ar?ar.length:""; }; - scheduler.templates[obj.name+"_cell_class"] = function(ar){ return ""; }; - scheduler.templates[obj.name+"_scalex_class"] = function(ar){ return ""; }; + scheduler.templates[obj.name+"_cell_class"] = function(arr){ return ""; }; + scheduler.templates[obj.name+"_scalex_class"] = function(date){ return ""; }; + scheduler.templates[obj.name+"_second_scalex_class"] = function(date){ return ""; }; - scheduler.templates[obj.name+"_scaley_class"] = function(section_id, section_label, section_options){ return "class"; }; + scheduler.templates[obj.name+"_scaley_class"] = function(section_id, section_label, section_options){ return ""; }; scheduler.templates[obj.name+"_scale_label"] = function(section_id, section_label, section_options){ return section_label; }; scheduler.templates[obj.name+"_tooltip"] = function(a,b,e){ return e.text; }; scheduler.templates[obj.name+"_date"] = function(datea, dateb){ - if (datea.getDay()==dateb.getDay() && datea-dateb<(24*60*60*1000)) + if (datea.getDay()==dateb.getDay() && dateb-datea<(24*60*60*1000)) return scheduler.templates.day_date(datea); return scheduler.templates.week_date(datea, dateb); }; scheduler.templates[obj.name+"_scale_date"] = scheduler.date.date_to_str(obj.x_date||scheduler.config.hour_date); + scheduler.templates[obj.name+"_second_scale_date"] = scheduler.date.date_to_str((obj.second_scale && obj.second_scale.x_date)?obj.second_scale.x_date:scheduler.config.hour_date); scheduler.date["add_"+obj.name]=function(a,b,c){ return scheduler.date.add(a,(obj.x_length||obj.x_size)*b*obj.x_step,obj.x_unit); @@ -87,22 +91,27 @@ scheduler.createTimelineView=function(obj){ } return true; }); - + scheduler.attachEvent("onOptionsLoad",function(){ - obj.order = {}; - for(var i=0; i'+scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev)+''; + var html='
'+scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev)+'
'; if (!attach) return html; else { var d = document.createElement("DIV"); d.innerHTML = html; - - var ind = this.order[ev[this.y_property]]; + var ind = this.order[section]; var parent = scheduler._els["dhx_cal_data"][0].firstChild.rows[ind].cells[1].firstChild; scheduler._rendered.push(d.firstChild); @@ -181,15 +198,13 @@ scheduler.render_timeline_event = function(ev, stack, attach){ } }; - function trace_events(){ //minimize event set - var evs = scheduler.getEvents(scheduler._min_date, scheduler._max_date); + var evs = scheduler.get_visible_events(); var matrix =[]; for (var i=0; i < this.y_unit.length; i++) matrix[i]=[]; - //next code defines row for undefined key //most possible it is an artifact of incorrect configuration if (!matrix[y]) @@ -233,15 +248,15 @@ function _getX(ev, isEndPoint, step) { } -function y_scale(d){ - +function y_scale(d){ var html = ""; var evs=[]; - if (scheduler._load_mode && scheduler._load()) return; + if(scheduler._load_mode) + scheduler._load(); if (this.render == "cell") evs = trace_events.call(this); else { - var tevs = scheduler.getEvents(scheduler._min_date, scheduler._max_date); + var tevs = scheduler.get_visible_events(); for (var j=0; jb.start_date?1:-1; }); + var stack=[]; + for (var j=0; j ev.start_date) + stack_pointer++; + stack[stack_pointer]=ev; + //render line + + events_html+=scheduler.render_timeline_event.call(this, ev, stack_pointer); + } + } + + if(this.fit_events){ + var rendered_height = this._events_height[this.y_unit[i].key]||0; + stats.height = (rendered_height>stats.height)?rendered_height:stats.height; + stats.style_height = "height:"+stats.height+"px;"; + } // section 1 - html+=""; + html+=""; if (this.render == "cell"){ for (var j=0; j < scheduler._cols.length; j++) { - html+=""; + html+=""; } } else { //section 2 html+=""; } @@ -329,7 +356,7 @@ function y_scale(d){ } html += "
"+stats.td_content+"
"+stats.td_content+"
"+scheduler.templates[this.name+"_cell_value"](evs[i][j])+"
"+scheduler.templates[this.name+"_cell_value"](evs[i][j])+"
"; - if (evs[i]){ - evs[i].sort(function(a,b){ return a.start_date>b.start_date?1:-1; }); - var stack=[]; - for (var j=0; j ev.start_date) - stack_pointer++; - stack[stack_pointer]=ev; - //render line - - html+=scheduler.render_timeline_event.call(this, ev, stack_pointer); - } - } //section 3 html+=""; for (var j=0; j < scheduler._cols.length; j++) - html+=""; + html+=""; html+="
"; html+="
"; this._matrix = evs; - d.scrollTop = 0; //fix flickering in FF + //d.scrollTop = 0; //fix flickering in FF; disabled as it was impossible to create dnd event if scroll was used (window jumped to the top) d.innerHTML = html; scheduler._rendered = []; @@ -343,35 +370,82 @@ function y_scale(d){ } function x_scale(h){ - h.innerHTML = "
"; h=h.firstChild; - - scheduler._cols=[]; //store for data section - scheduler._colsS={height:0}; - this._trace_x =[]; - - scheduler._min_date_timeline = scheduler._min_date; - - var start = scheduler._min_date; - var summ = scheduler._x-this.dx-18; //border delta + var current_sh = scheduler.xy.scale_height; + var original_sh = this._header_resized||scheduler.xy.scale_height; + scheduler._cols=[]; //store for data section, each column width + scheduler._colsS={height:0}; // heights of the y sections + this._trace_x =[]; // list of dates per cells + var summ = scheduler._x-this.dx-18; //border delta, whole width + var left = [this.dx]; // left margins, initial left margin + var header = scheduler._els['dhx_cal_header'][0]; + header.style.width = (left[0]+summ)+'px'; + + scheduler._min_date_timeline = scheduler._min_date; - var left = this.dx; - - for (var i=0; i"; + var bg_color = (evs[i].color?("background-color:"+evs[i].color+";"):""); + var color = (evs[i].textColor?("color:"+evs[i].textColor+";"):""); + html+="
"; html+="
"+(evs[i]._timed?scheduler.templates.event_date(evs[i].start_date):"")+"
"; html+="
 
"; html+=scheduler.templates[obj.name+"_tooltip"](evs[i].start_date, evs[i].end_date,evs[i])+"
"; @@ -467,10 +557,24 @@ function _init_matrix_tooltip(){ } scheduler.renderMatrix = function(mode){ + scheduler._els['dhx_cal_data'][0].scrollTop=0; var start_date = scheduler.date[this.name+"_start"](scheduler._date); scheduler._min_date = scheduler.date.add(start_date, this.x_start*this.x_step, this.x_unit); scheduler._max_date = scheduler.date.add(scheduler._min_date, this.x_size*this.x_step, this.x_unit); scheduler._table_view = true; + if(this.second_scale) { + if(mode && !this._header_resized) { + this._header_resized = scheduler.xy.scale_height; + scheduler.xy.scale_height *= 2; + scheduler._els['dhx_cal_header'][0].className += " dhx_second_cal_header"; + } + if(!mode && this._header_resized) { + scheduler.xy.scale_height /= 2; + this._header_resized = false; + var header = scheduler._els['dhx_cal_header'][0]; + header.className = header.className.replace(/ dhx_second_cal_header/gi,""); + } + } set_full_view.call(this,mode); }; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js index d978ec53bb8..a6a02b96445 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.templates.calendar_month = scheduler.date.date_to_str("%F %Y"); scheduler.templates.calendar_scale_date = scheduler.date.date_to_str("%D"); scheduler.templates.calendar_date = scheduler.date.date_to_str("%d"); @@ -25,7 +29,7 @@ scheduler.renderCalendar=function(obj, _prev){ top:tpos.top + pos.offsetHeight, left:tpos.left }; - }; + } if (!cont) cont = scheduler._get_def_cont(pos); @@ -50,7 +54,7 @@ scheduler.renderCalendar=function(obj, _prev){ cal = this._render_calendar(_prev.parentNode, date, obj, _prev); scheduler.unmarkCalendar(cal); } - + var start = scheduler.date.month_start(date); var end = scheduler.date.add(start,1,"month"); @@ -60,7 +64,8 @@ scheduler.renderCalendar=function(obj, _prev){ var d = ev.start_date; if (d.valueOf()=end.valueOf()) @@ -68,6 +73,8 @@ scheduler.renderCalendar=function(obj, _prev){ } } + + this._markCalendarCurrentDate(cal); cal.conf = obj; @@ -145,7 +152,7 @@ scheduler._render_calendar=function(obj,sd,conf, previous){ if (previous) d = previous; else { - var d = document.createElement("DIV"); + d = document.createElement("DIV"); d.className="dhx_cal_container dhx_mini_calendar"; } d.setAttribute("date",this.templates.xml_format(sd)); @@ -160,6 +167,9 @@ scheduler._render_calendar=function(obj,sd,conf, previous){ d.firstChild.appendChild(arrow); arrow.onclick=function(){ scheduler.updateCalendar(d, scheduler.date.add(d._date, -1, "month")); + if(scheduler._date.getMonth() == d._date.getMonth() && scheduler._date.getFullYear() == d._date.getFullYear()) { + scheduler._markCalendarCurrentDate(d); + } }; arrow = document.createElement("DIV"); @@ -169,10 +179,14 @@ scheduler._render_calendar=function(obj,sd,conf, previous){ d.firstChild.appendChild(arrow); arrow.onclick=function(){ scheduler.updateCalendar(d, scheduler.date.add(d._date, 1, "month")); + if(scheduler._date.getMonth() == d._date.getMonth() && scheduler._date.getFullYear() == d._date.getFullYear()) { + scheduler._markCalendarCurrentDate(d); + } }; - d._date = new Date(sd); + } - + d._date = new Date(sd); + d.week_start = (sd.getDay()-(this.config.start_on_monday?1:0)+7)%7; var dd = this.date.week_start(sd); @@ -180,14 +194,20 @@ scheduler._render_calendar=function(obj,sd,conf, previous){ var r=d.childNodes[2].firstChild.rows; for (var k=r.length; k<6; k++) { - r[0].parentNode.appendChild(r[0].cloneNode(true)); + var last_row = r[r.length-1]; + r[0].parentNode.appendChild(last_row.cloneNode(true)); + var last_day_number = parseInt(last_row.childNodes[last_row.childNodes.length-1].childNodes[0].innerHTML); + last_day_number = (last_day_number<10)?last_day_number:0; // previous week could end on 28-31, so we should start with 0 for (var ri=0; ri < r[k].childNodes.length; ri++) { r[k].childNodes[ri].className = "dhx_after"; - }; + r[k].childNodes[ri].childNodes[0].innerHTML = scheduler.date.to_fixed(++last_day_number); + } } if (!previous) obj.appendChild(d); + + d.childNodes[1].style.height = (d.childNodes[1].childNodes[0].offsetHeight-1)+"px"; // dhx_year_week should have height property so that day dates would get correct position. dhx_year_week height = height of it's child (with the day name) /*restore*/ this._cols=temp; this._mode = temp2; this._colsS = temp3; this._min_date=temp4; this._max_date=temp5; scheduler._date = temp6; ts.month_day=temp7; return d; @@ -235,7 +255,7 @@ scheduler.form_blocks.calendar_time={ var full_day = scheduler.config.full_day; - return "
"+html+"  –  "+html+"
"; + return "
"+html+"  –  "+html+"
"; }, set_value:function(node,value,ev){ @@ -253,7 +273,7 @@ scheduler.form_blocks.calendar_time={ inp.value = scheduler.templates.calendar_time(new_date); inp._date = new Date(new_date); scheduler.destroyCalendar(); - if(scheduler.config.event_duration && number == 0) { //first element = start date + if(scheduler.config.event_duration && scheduler.config.auto_end_date && number == 0) { //first element = start date _update_minical_select(); } } @@ -263,7 +283,10 @@ scheduler.form_blocks.calendar_time={ if(scheduler.config.full_day) { if (!node._full_day){ - node.previousSibling.innerHTML+="
"; + var html = ""; + if (!scheduler.config.wide_form) + html = node.previousSibling.innerHTML+html; + node.previousSibling.innerHTML=html; node._full_day=true; } var input=node.previousSibling.getElementsByTagName("input")[0]; @@ -272,7 +295,7 @@ scheduler.form_blocks.calendar_time={ input.checked = isFulldayEvent; for(var i in selects) selects[i].disabled=input.checked; - for(var i=0; i0) - continue; - scheduler.markCalendar(calendar, dateNew, "dhx_calendar_click"); - dateNew = scheduler.date.add(dateNew,1,"day"); - } - } - } return true; }; @@ -375,4 +380,23 @@ scheduler.linkCalendar=function(calendar, datediff){ scheduler.attachEvent("onEventChanged", action); scheduler.attachEvent("onAfterEventDelete", action); action(); -}; \ No newline at end of file +}; + +scheduler._markCalendarCurrentDate = function(calendar) { + var date = scheduler._date; + var mode = scheduler._mode; + + if(calendar._date.getMonth() == date.getMonth() && calendar._date.getFullYear() == date.getFullYear()) { + if (mode == 'day' || (this._props && !!this._props[mode])) { + scheduler.markCalendar(calendar,date, "dhx_calendar_click"); + } else if (mode == 'week') { + var dateNew = scheduler.date.week_start(new Date(date.valueOf())); + for (var i = 0; i < 7; i++) { + var diff = dateNew.getMonth() + dateNew.getYear()*12 - date.getMonth() - date.getYear()*12; + if (!diff) + scheduler.markCalendar(calendar, dateNew, "dhx_calendar_click"); + dateNew = scheduler.date.add(dateNew,1,"day"); + } + } + } +}; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js index 52060ffdde4..6b86b7524d2 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.attachEvent("onTemplatesReady",function(){ scheduler.xy.scroll_width = 0; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js index 98b14168996..2890d0180a6 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.form_blocks["multiselect"]={ render:function(sns) { var _result = "
"; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js index 0773d264e2c..2205f0553a0 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ (function(){ function backup(obj){ diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js new file mode 100644 index 00000000000..f9e5f946476 --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js @@ -0,0 +1,102 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler._extra_xle = false; // flag if we are calling xle once again (we don't want to get into loop with scheduler.parse) +scheduler.attachEvent("onXLE", function(){ + if(!scheduler._extra_xle){ + var isEventsLoaded = false; + for(var key in scheduler._events){ + if(scheduler._events[key].text) { + isEventsLoaded = true; + break; + } + } + if((localStorage._updated_events || !isEventsLoaded) && localStorage._events) { + scheduler._extra_xle = true; + scheduler.parse(localStorage._events, "json"); + scheduler._extra_xle = false; + var dp = scheduler._dataprocessor; + var updatedEvents = JSON.parse(localStorage._updated_events); + dp.setUpdateMode("off"); + for(var id in updatedEvents) + dp.setUpdated(id,true,updatedEvents[id]); + dp.sendData(); + dp.setUpdateMode("cell"); + } + } +}); +scheduler.attachEvent("onBeforeEventDelete", function(id, object){ + var status = scheduler._dataprocessor.getState(id); + if(status == 'inserted' && localStorage._updated_events) { + var updated_events = JSON.parse(localStorage._updated_events); + delete updated_events[id]; + for(var id in updated_events){ + localStorage._updated_events = JSON.stringify(updated_events); + break; + } + } + return true; +}); + +var old_delete_event = scheduler.deleteEvent; +scheduler.deleteEvent = function(id, silent){ + old_delete_event.apply(this, arguments); + localStorage._events = scheduler.toJSON(); +}; + +scheduler._offline = {}; +scheduler._offline._after_update_events = []; + +var old_dp_init = scheduler._dp_init; +scheduler._dp_init = function(dp){ + old_dp_init.apply(this, arguments); + + dp.attachEvent("onAfterUpdate",function(sid,action,tid,xml_node){ + scheduler._offline._after_update_events.push(sid); + return true; + }); + dp.attachEvent("onAfterUpdateFinish",function(sid,action,tid,xml_node){ + localStorage._events = scheduler.toJSON(); + var updated_events = JSON.parse(localStorage._updated_events); + for(var i=0; i]*>","g"); + function clean_html(val){ + return val.replace(html_regexp,""); + } function x_norm(x) { x = parseFloat(x); if (isNaN(x)) return "auto"; - return 100 * x / dx; + return 100 * x / (dx + 1); } function y_norm(y) { y = parseFloat(y); @@ -21,8 +28,10 @@ scheduler.toPDF=function(url,mode,header,footer){ } function xml_month_scale(xh){ var xml=""; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) + xh = xh[0].childNodes; for (var i = 0; i < xh.length; i++) - xml += "\n"; + xml += "\n"; dx = xh[0].offsetWidth; return xml; } @@ -56,7 +65,7 @@ scheduler.toPDF=function(url,mode,header,footer){ days.push(r[i].cells[j].firstChild.innerHTML); } - xml += "\n"; + xml += "\n"; dy = yh.firstChild.rows[0].cells[0].offsetHeight; } return xml; @@ -73,11 +82,11 @@ scheduler.toPDF=function(url,mode,header,footer){ if (scheduler._mode == "agenda"){ var xh = scheduler._els.dhx_cal_header[0].childNodes[0].childNodes; - xml+=""+xh[0].innerHTML+""+xh[1].innerHTML+"" + xml+=""+clean_html(xh[0].innerHTML)+""+clean_html(xh[1].innerHTML)+"" } else if (scheduler._mode == "year"){ var xh = scheduler._els.dhx_cal_data[0].childNodes; for (var i=0; i < xh.length; i++) { - xml+=""; + xml+=""; xml+=xml_month_scale(xh[i].childNodes[1].childNodes); xml+=xml_month(xh[i].childNodes[2]); xml+=""; @@ -89,7 +98,14 @@ scheduler.toPDF=function(url,mode,header,footer){ xml += ""; var yh = scheduler._els.dhx_cal_data[0]; - if (yh.firstChild.tagName == "TABLE") { + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + xml += "" + for (var i=0; i < yh.firstChild.rows.length; i++) { + xml+=""; + }; + xml+=""; + dy = yh.firstChild.rows[0].cells[0].offsetHeight; + } else if (yh.firstChild.tagName == "TABLE") { xml += xml_month(yh); } else { yh = yh.childNodes[yh.childNodes.length - 1]; @@ -99,7 +115,7 @@ scheduler.toPDF=function(url,mode,header,footer){ xml += ""; for (var i = 0; i < yh.length; i++) - xml += "\n"; + xml += "\n"; xml += ""; dy = yh[0].offsetHeight; } @@ -117,7 +133,7 @@ scheduler.toPDF=function(url,mode,header,footer){ if (scheduler._mode == "agenda"){ for (var i=0; i < evs.length; i++) - xml+=""+evs[i].childNodes[0].innerHTML+""+evs[i].childNodes[2].innerHTML+""; + xml+=""+clean_html(evs[i].childNodes[0].innerHTML)+""+clean_html(evs[i].childNodes[2].innerHTML)+""; } else if (scheduler._mode == "year"){ var evs = scheduler.get_visible_events(); for (var i=0; i < evs.length; i++) { @@ -129,7 +145,6 @@ scheduler.toPDF=function(url,mode,header,footer){ var day = scheduler.week_starts[m]+d.getDate()-1; xml+=""; - scheduler._mark_year_date(d); d = scheduler.date.add(d,1,"day"); if (d.valueOf()>=scheduler._max_date.valueOf()) break; @@ -138,21 +153,32 @@ scheduler.toPDF=function(url,mode,header,footer){ } else { for (var i = 0; i < evs.length; i++) { var zx = x_norm(evs[i].style.left); - var zy = y_norm(evs[i].style.top); var zdx = x_norm(evs[i].style.width); + var zy = y_norm(evs[i].style.top); var zdy = y_norm(evs[i].style.height); var e_type = evs[i].className.split(" ")[0].replace("dhx_cal_", ""); var dets = scheduler.getEvent(evs[i].getAttribute("event_id")) var day = dets._sday; var week = dets._sweek; if (scheduler._mode != "month") { - if (parseInt(evs[i].style.left) <= 26) { - zx = 2; - zdx += x_norm(evs[i].style.left)-1; - } - if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue; - zx += x_norm(evs[i].parentNode.style.left); - zx -= x_norm(51); + if (scheduler.matrix && scheduler.matrix[scheduler._mode]){ + day = 0; + week = evs[i].parentNode.parentNode.parentNode.rowIndex; + zdx += x_norm(10); + } else { + zdx+=x_norm(zdx*20/100); + zx-=x_norm(20-zx*20/100); + + if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue; + zx += x_norm(evs[i].parentNode.style.left); + zx -= x_norm(51); + } + if (scheduler._mode == "timeline") { + var dy_copy = dy; + dy = 180; + zy = y_norm(evs[i].style.top); + dy = dy_copy; + } } else { zdy = parseInt(evs[i].offsetHeight); zy = parseInt(evs[i].style.top) - 22; @@ -165,14 +191,14 @@ scheduler.toPDF=function(url,mode,header,footer){ if (e_type == "event") { - xml += "
"; + xml += "
"; var text_color = colors?get_style(evs[i].childNodes[2],"color"):""; var bg_color = colors?get_style(evs[i].childNodes[2],"backgroundColor"):""; - xml += ""; + xml += ""; } else { var text_color = colors?get_style(evs[i],"color"):""; var bg_color = colors?get_style(evs[i],"backgroundColor"):""; - xml += ""; + xml += ""; } xml += ""; } @@ -189,7 +215,7 @@ scheduler.toPDF=function(url,mode,header,footer){ d.style.display="none"; document.body.appendChild(d); - d.innerHTML = '
'; + d.innerHTML = '
'; document.getElementById(uid).firstChild.value = xml_top(mode).replace("\u2013", "-") + xml_body() + xml_end(); document.getElementById(uid).submit(); d.parentNode.removeChild(d);grid = null; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js index b11c4fe8048..9bd1df9d859 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js @@ -1,100 +1,111 @@ -scheduler.attachEvent("onTemplatesReady",function(){ - scheduler.attachEvent("onBeforeLightbox",function(id){ - if (this.config.readonly_form || this.getEvent(id).readonly) - this.config.readonly_active = true; - else { - this.config.readonly_active = false; - return true; - } - - for (var i=0; i < this.config.lightbox.sections.length; i++) { - this.config.lightbox.sections[i].focus = false; - }; - - return true; - }); - - function txt_replace(tag,d,n,text){ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.attachEvent("onTemplatesReady", function() { + scheduler.attachEvent("onBeforeLightbox", function(id) { + if (this.config.readonly_form || this.getEvent(id).readonly) + this.config.readonly_active = true; + else { + this.config.readonly_active = false; + return true; + } + + for (var i = 0; i < this.config.lightbox.sections.length; i++) { + this.config.lightbox.sections[i].focus = false; + } + + return true; + }); + + function txt_replace(tag, d, n, text) { var txts = d.getElementsByTagName(tag); var txtt = n.getElementsByTagName(tag); - for (var i=txtt.length-1; i>=0; i--){ + for (var i = txtt.length - 1; i >= 0; i--) { var n = txtt[i]; if (!text) n.disabled = true; else { var t = document.createElement("SPAN"); t.className = "dhx_text_disabled"; - t.innerHTML=text(txts[i]); - n.parentNode.insertBefore(t,n); - n.parentNode.removeChild(n); + t.innerHTML = text(txts[i]); + n.parentNode.insertBefore(t, n); + n.parentNode.removeChild(n); } } } - - var old = scheduler._fill_lightbox; - scheduler._fill_lightbox=function(){ - var sns = this.config.lightbox.sections; - if (this.config.readonly_active){ - for (var i=0; i < sns.length; i++) { - if (sns[i].type == 'recurring') { - var s = document.getElementById(sns[i].id); - s.style.display=s.nextSibling.style.display='none'; - sns.splice(i,1); - i--; - } - }; - } - - var res = old.apply(this,arguments); - if (this.config.readonly_active){ - - var d = this._get_lightbox(); - var n = this._lightbox_r = d.cloneNode(true); - - txt_replace("textarea",d,n,function(a){ return a.value; }); - txt_replace("input",d,n,false); - txt_replace("select",d,n,function(a){ return a.options[Math.max((a.selectedIndex||0),0)].text; }); - - n.removeChild(n.childNodes[2]); - n.removeChild(n.childNodes[3]); - - d.parentNode.insertBefore(n,d); - - olds.call(this,n); - this._lightbox = n; - this.setLightboxSize(); - this._lightbox = null; - n.onclick=function(e){ - var src=e?e.target:event.srcElement; - if (!src.className) src=src.previousSibling; - if (src && src.className) - switch(src.className){ - case "dhx_cancel_btn": - scheduler.callEvent("onEventCancel",[scheduler._lightbox_id]); - scheduler._edit_stop_event(scheduler.getEvent(scheduler._lightbox_id),false); - scheduler.hide_lightbox(); - break; - } - }; - } - return res; - }; - - var olds = scheduler.showCover; - scheduler.showCover=function(){ - if (!this.config.readonly_active) - olds.apply(this,arguments); + + var old = scheduler._fill_lightbox; + scheduler._fill_lightbox = function() { + var sns = this.config.lightbox.sections; + if (this.config.readonly_active) { + for (var i = 0; i < sns.length; i++) { + if (sns[i].type == 'recurring') { + var s = document.getElementById(sns[i].id); + s.style.display = s.nextSibling.style.display = 'none'; + sns.splice(i, 1); + i--; + } + } + } + + var res = old.apply(this, arguments); + + if (this.config.readonly_active) { + + var d = this._get_lightbox(); + var n = this._lightbox_r = d.cloneNode(true); + n.id = scheduler.uid(); + n.style.color = "red"; + + txt_replace("textarea", d, n, function(a) { + return a.value; + }); + txt_replace("input", d, n, false); + txt_replace("select", d, n, function(a) { + return a.options[Math.max((a.selectedIndex || 0), 0)].text; + }); + + n.removeChild(n.childNodes[2]); + n.removeChild(n.childNodes[3]); + + d.parentNode.insertBefore(n, d); + + olds.call(this, n); + if (scheduler._lightbox) + scheduler._lightbox.parentNode.removeChild(scheduler._lightbox); + this._lightbox = n; + this.setLightboxSize(); + this._lightbox = null; + n.onclick = function(e) { + var src = e ? e.target : event.srcElement; + if (!src.className) src = src.previousSibling; + if (src && src.className) + switch (src.className) { + case "dhx_cancel_btn": + scheduler.callEvent("onEventCancel", [scheduler._lightbox_id]); + scheduler._edit_stop_event(scheduler.getEvent(scheduler._lightbox_id), false); + scheduler.hide_lightbox(); + break; + } + }; + } + return res; }; - - var hold = scheduler.hide_lightbox; - scheduler.hide_lightbox=function(){ - if (this._lightbox_r){ - this._lightbox_r.parentNode.removeChild(this._lightbox_r); - this._lightbox_r = null; - } - - return hold.apply(this,arguments); - }; - - -}); \ No newline at end of file + + var olds = scheduler.showCover; + scheduler.showCover = function() { + if (!this.config.readonly_active) + olds.apply(this, arguments); + }; + + var hold = scheduler.hide_lightbox; + scheduler.hide_lightbox = function() { + if (this._lightbox_r) { + this._lightbox_r.parentNode.removeChild(this._lightbox_r); + this._lightbox_r = null; + } + + return hold.apply(this, arguments); + }; +}); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js index 879ab661c62..9d19f520861 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ //redefine this method, if you want to provide a custom set of attributes for serialization scheduler.data_attributes=function(){ var attrs = []; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js index 2146c8f9414..512cafebd5f 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js @@ -1,4 +1,8 @@ -window.dhtmlXTooltip={version:0.1}; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +window.dhtmlXTooltip={}; dhtmlXTooltip.config = { className: 'dhtmlXTooltip tooltip', @@ -11,64 +15,77 @@ dhtmlXTooltip.tooltip = document.createElement('div'); dhtmlXTooltip.tooltip.className = dhtmlXTooltip.config.className; dhtmlXTooltip.show = function(event, text) { //browser event, text to display - dhtmlXTooltip.tooltip.className = dhtmlXTooltip.config.className; + var dhxTooltip = dhtmlXTooltip; + var tooltip_div = this.tooltip; + var tooltip_div_style = tooltip_div.style; + dhxTooltip.tooltip.className = dhxTooltip.config.className; var pos=this.position(event); - + var target = event.target||event.srcElement; if (this.isTooltip(target)) {return;} // if we are over tooltip -- do nothing, just return (so tooltip won't move) - var actual_x = pos.x+dhtmlXTooltip.config.delta_x||0; - var actual_y = pos.y-dhtmlXTooltip.config.delta_y||0; + var offsetleft = 0; + var offsettop = 0; + var pobj = scheduler._obj; + if(pobj.offsetParent) { + do { + offsetleft += pobj.offsetLeft; + offsettop += pobj.offsetTop; + } while (pobj = pobj.offsetParent); + } - this.tooltip.style.visibility = "hidden"; + var actual_x = pos.x + (dhxTooltip.config.delta_x||0) - offsetleft; + var actual_y = pos.y - (dhxTooltip.config.delta_y||0) - offsettop; - if(this.tooltip.style.removeAttribute) { - this.tooltip.style.removeAttribute("right"); - this.tooltip.style.removeAttribute("bottom"); + tooltip_div_style.visibility = "hidden"; + + if(tooltip_div_style.removeAttribute) { + tooltip_div_style.removeAttribute("right"); + tooltip_div_style.removeAttribute("bottom"); } else { - this.tooltip.style.removeProperty("right"); - this.tooltip.style.removeProperty("bottom"); + tooltip_div_style.removeProperty("right"); + tooltip_div_style.removeProperty("bottom"); } - this.tooltip.style.left = "0px"; - this.tooltip.style.top = "0px"; + tooltip_div_style.left = "0"; + tooltip_div_style.top = "0"; this.tooltip.innerHTML = text; scheduler._obj.appendChild(this.tooltip); var tooltip_width = this.tooltip.offsetWidth; var tooltip_height = this.tooltip.offsetHeight; - - if (document.body.offsetWidth - actual_x - tooltip_width < 0) { // tooltip is out of the right page bound - if(this.tooltip.style.removeAttribute) - this.tooltip.style.removeAttribute("left"); + + if ((scheduler._obj.offsetWidth - actual_x - (scheduler.xy.margin_left||0) - tooltip_width) < 0) { // tooltip is out of the right page bound + if(tooltip_div_style.removeAttribute) + tooltip_div_style.removeAttribute("left"); else - this.tooltip.style.removeProperty("left"); - this.tooltip.style.right = (document.body.offsetWidth - actual_x + 2 * dhtmlXTooltip.config.delta_x||0) + "px"; + tooltip_div_style.removeProperty("left"); + tooltip_div_style.right = (scheduler._obj.offsetWidth - actual_x + 2 * (dhxTooltip.config.delta_x||0)) + "px"; } else { if (actual_x < 0) { // tooltips is out of the left page bound - this.tooltip.style.left = (pos.x + Math.abs(dhtmlXTooltip.config.delta_x||0)) + "px"; + tooltip_div_style.left = (pos.x + Math.abs(dhxTooltip.config.delta_x||0)) + "px"; } else { // normal situation - this.tooltip.style.left = actual_x + "px"; + tooltip_div_style.left = actual_x + "px"; } } - - if (document.body.offsetHeight - actual_y - tooltip_height < 0) { // tooltip is below bottom of the page - if(this.tooltip.style.removeAttribute) - this.tooltip.style.removeAttribute("top"); + + if ((scheduler._obj.offsetHeight - actual_y - (scheduler.xy.margin_top||0) - tooltip_height) < 0) { // tooltip is below bottom of the page + if(tooltip_div_style.removeAttribute) + tooltip_div_style.removeAttribute("top"); else - this.tooltip.style.removeProperty("top"); - this.tooltip.style.bottom = (document.body.offsetHeight - actual_y - 2 * dhtmlXTooltip.config.delta_y||0) + "px"; + tooltip_div_style.removeProperty("top"); + tooltip_div_style.bottom = (scheduler._obj.offsetHeight - actual_y - 2 * (dhxTooltip.config.delta_y||0)) + "px"; } else { if (actual_y < 0) { // tooltip is higher then top of the page - this.tooltip.style.top = (pos.y + Math.abs(dhtmlXTooltip.config.delta_y||0)) + "px"; + tooltip_div_style.top = (pos.y + Math.abs(dhxTooltip.config.delta_y||0)) + "px"; } else { // normal situation - this.tooltip.style.top = actual_y + "px"; + tooltip_div_style.top = actual_y + "px"; } } - this.tooltip.style.visibility = "visible"; + tooltip_div_style.visibility = "visible"; }; dhtmlXTooltip.hide = function() { @@ -82,7 +99,7 @@ dhtmlXTooltip.delay = function(method, object, params, delay) { } this.tooltip._timeout_id = setTimeout(function(){ var ret = method.apply(object,params); - method = obj = params = null; + method = object = params = null; return ret; },delay||this.config.timeout_to_display); }; @@ -97,7 +114,7 @@ dhtmlXTooltip.isTooltip = function(node){ }; dhtmlXTooltip.position = function(ev) { - var ev = ev || window.event; + ev = ev || window.event; if(ev.pageX || ev.pageY) //FF, KHTML return {x:ev.pageX, y:ev.pageY}; //IE @@ -109,25 +126,35 @@ dhtmlXTooltip.position = function(ev) { }; scheduler.attachEvent("onMouseMove", function(event_id, e){ // (scheduler event_id, browser event) - var ev = e||window.event; + var ev = window.event||e; var target = ev.target||ev.srcElement; + var dhxTooltip = dhtmlXTooltip; - if (event_id || dhtmlXTooltip.isTooltip(target)) { // if we are over event or tooltip - var event = scheduler.getEvent(event_id) || scheduler.getEvent(dhtmlXTooltip.tooltip.event_id); - dhtmlXTooltip.tooltip.event_id = event.id; + if (event_id || dhxTooltip.isTooltip(target)) { // if we are over event or tooltip + var event = scheduler.getEvent(event_id) || scheduler.getEvent(dhxTooltip.tooltip.event_id); + if(!event) + return; + dhxTooltip.tooltip.event_id = event.id; var text = scheduler.templates.tooltip_text(event.start_date, event.end_date, event); - if (_isIE) { //make a copy of event, will be used in timed call - var evt = document.createEventObject(ev); + var evt = undefined; + if (_isIE) { //make a copy of event, will be used in timed call + evt = document.createEventObject(ev); } - - dhtmlXTooltip.delay(dhtmlXTooltip.show, dhtmlXTooltip, [ evt||ev , text]); // showing tooltip + + dhxTooltip.delay(dhxTooltip.show, dhxTooltip, [(evt||ev), text]); // showing tooltip } else { - dhtmlXTooltip.delay(dhtmlXTooltip.hide, dhtmlXTooltip, []); + dhxTooltip.delay(dhxTooltip.hide, dhxTooltip, []); } }); +scheduler.attachEvent("onBeforeDrag", function(){ + dhtmlXTooltip.hide(); + return true; +}); /* Could be redifined */ +scheduler.templates.tooltip_date_format=scheduler.date.date_to_str("%Y-%m-%d %H:%i"); + scheduler.templates.tooltip_text = function(start,end,event) { return "Event: "+event.text+"
Start date: "+scheduler.templates.tooltip_date_format(start)+"
End date: "+scheduler.templates.tooltip_date_format(end); -}; \ No newline at end of file +}; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_touch.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_touch.js deleted file mode 100644 index 9dde6fd89b4..00000000000 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_touch.js +++ /dev/null @@ -1,411 +0,0 @@ -TouchScroll=function(node, nontouch, scroll, compat){ - this.debug = !!nontouch; - this.compat = !!compat; - this.rough = !!scroll; - - - this.axisX = this.axisY = true; - - if (typeof node!= "object") - node = document.getElementById(node); - - this._init(); - node.addEventListener("touchstart",this,false); - node.addEventListener("webkitTransitionEnd",this,false); - if (this.debug) - node.addEventListener("mousedown",this,false); - - - this.node = node; - for (var i=0; i < node.childNodes.length; i++) - if (node.childNodes[i].nodeType == 1){ - this.area = node.childNodes[i]; - break; - } - - if (window.getComputedStyle(this.node).position == "static") - this.node.style.position = "relative" - this.area.style.cssText += "-webkit-transition: -webkit-transform; -webkit-user-select:none; -webkit-transform-style:preserve-3d;"; - this.scrolls={}; -}; - -TouchScroll.prototype = { - refresh:function(){ - this.node.style.webkitTransformStyle="flat"; - this.node.style.webkitTransformStyle="preserve-3d"; - }, - scrollTo:function(x,y,speed){ - this.set_matrix({e:x,f:y}, (speed||0)); - }, - onscroll:function(x,y){}, - handleEvent:function(ev){ - return this["ev_"+ev.type](ev); - }, - get_matrix:function(node){ - return new WebKitCSSMatrix(window.getComputedStyle(node||this.area).webkitTransform); - }, - set_matrix:function(value,speed,node){ - (node||this.area).style.webkitTransform = "translate("+Math.round(value.e)+"px,"+Math.round(value.f)+"px)"; - (node||this.area).style.webkitTransitionDuration= speed; - }, - ev_touchstart:function(ev){ - this.ev_mousedown(ev.touches[0]); - ev.preventDefault(); - return false; - }, - ev_mousedown:function(ev){ - var touch = ev; - - this.x = touch.pageX; - this.y = touch.pageY; - this.dx = this.node.offsetWidth; - this.dy = this.node.offsetHeight; - this.mx = this.area.scrollWidth; - this.my = this.area.scrollHeight; - this.target = touch.target; - - if (!this.rough){ - var temp = this.get_matrix(); - this.target_x = temp.e; - this.target_y = temp.f; - if (!this.scroll && this.compat){ - temp.e = this.node.scrollLeft*-1; - temp.f = this.node.scrollTop*-1; - this.node.scrollTop = this.node.scrollLeft = 0; - } - - this.set_matrix(temp,0); - this._correct_scroll(this.target_x, this.target_y); - } - this.scroll_x = this.scroll_y = this.scroll = false; - - - this._init_events(); - }, - ev_touchend:function(){ - return this.ev_mouseup(); - }, - ev_mouseup:function(){ - this._deinit_events(); - if (!this.scroll){ - this._remove_scroll(); - var ev = document.createEvent("MouseEvent"); - ev.initMouseEvent("click",true, true); - this.target.dispatchEvent(ev); - } - this.target = null; - }, - ev_webkitTransitionEnd:function(){ - if (this.target || !this.scroll) return; - - this._remove_scroll(); - var temp = this.get_matrix(); - this.node.firstChild._scrollTop = -1*temp.f; - - if (this.compat && (temp.e||temp.f)){ - var y = temp.f; var x = temp.e; - temp.e = temp.f = 0; - this.set_matrix(temp,0); - - this.node.scrollTop = -1*y; - this.node.scrollLeft = -1*x; - } - - this.scroll = false; - }, - ev_touchmove:function(ev){ - return this.ev_mousemove(ev.touches[0]); - }, - ev_mousemove:function(ev){ - if (!this.target) return; - var touch = ev; - - var dx = (touch.pageX - this.x)*(this.axisX?5:0);//Math.min(3,this.mx/this.dx); - var dy = (touch.pageY - this.y)*(this.axisY?5:0);//Math.min(3,this.my/this.dy); - - if (Math.abs(dx)<10 && Math.abs(dy)<10) return; - - if (Math.abs(dx)>50) - this.scroll_x=true; - if (Math.abs(dy)>50) - this.scroll_y=true; - - - if (this.scroll_x || this.scroll_y){ - this.x = touch.pageX; this.y = touch.pageY; - this.scroll = true; - var temp = this.get_matrix(); - dx = dx + (this.target_x - temp.e); - dy = dy + (this.target_y - temp.f); - - var speed = "2000ms"; - var fast = "500ms"; - this.target_x = dx+temp.e; - this.target_y = dy+temp.f; - - if (this.target_x > 0) { - this.target_x = 0; - speed = fast; - } - if (this.target_y > 0) { - this.target_y = 0; - speed = fast; - } - if (this.mx - this.dx + this.target_x < 0){ - this.target_x = - this.mx + this.dx; - speed = fast; - } - if (this.my - this.dy + this.target_y < 0){ - this.target_y = - this.my + this.dy; - speed = fast; - } - - - this.set_matrix({e:this.target_x,f:this.target_y},speed); - this._add_scroll(temp.e, temp.f); - this._correct_scroll(this.target_x, this.target_y, speed); - this.onscroll(this.target_x, this.target_y); - } - return false; - }, - _correct_scroll:function(x,y,speed){ - if (this.scrolls.x){ - var stemp = this.get_matrix(this.scrolls.x); - var sx = this.dx*x/this.mx; - this.set_matrix({e:-1*sx,f:0}, speed, this.scrolls.x); - } - if (this.scrolls.y){ - var stemp = this.get_matrix(this.scrolls.y); - var sy = this.dy*y/this.my; - this.set_matrix({e:0,f:-1*sy}, speed, this.scrolls.y); - } - }, - _remove_scroll:function(){ - if (this.scrolls.x) - this.scrolls.x.parentNode.removeChild(this.scrolls.x); - if (this.scrolls.y) - this.scrolls.y.parentNode.removeChild(this.scrolls.y); - this.scrolls = {}; - }, - _add_scroll:function(){ - if (this.scrolls.ready) return; - - var d; - if (this.my>5 && this.axisY){ - var h = this.dy*this.dy/this.my-1; - this.scrolls.y = d = document.createElement("DIV"); - d.className="dhx_scroll_y"; - d.style.height = h +"px"; - this.node.appendChild(d); - } - if (this.mx>5 && this.axisX){ - var h = this.dx*this.dx/this.mx; - this.scrolls.x = d = document.createElement("DIV"); - d.className="dhx_scroll_x"; - d.style.width = h +"px"; - this.node.appendChild(d); - } - - var temp = this.get_matrix(); - this._correct_scroll(temp.e, temp.f, 0); - this.scrolls.ready = true; - }, - _init_events:function(){ - document.addEventListener("touchmove",this,false); - document.addEventListener("touchend",this,false); - if (this.debug){ - document.addEventListener("mousemove",this,false); - document.addEventListener("mouseup",this,false); - } - }, - _deinit_events:function(){ - document.removeEventListener("touchmove",this,false); - document.removeEventListener("touchend",this,false); - if (this.debug){ - document.removeEventListener("mousemove",this,false); - document.removeEventListener("mouseup",this,false); - } - }, - _init:function(){ - document.styleSheets[0].insertRule(".dhx_scroll_x { width:50px;height:4px;background:rgba(0, 0, 0, 0.4);position:absolute; left:0px; bottom:3px; border:1px solid transparent; -webkit-border-radius:4px;-webkit-transition: -webkit-transform;}",0); - document.styleSheets[0].insertRule(".dhx_scroll_y { width:4px;height:50px;background:rgba(0, 0, 0, 0.4);position:absolute; top:0px; right:3px; border:1px solid transparent; -webkit-border-radius:4px;-webkit-transition: -webkit-transform;}",0); - this._init = function(){}; - } -}; - - - - - -scheduler._ipad_before_init=function(){ - scheduler._ipad_before_init=function(){}; - scheduler.xy.scroll_width = 0; - - var tabs = scheduler._els["dhx_cal_tab"]; - var right = 42; - for (var i=tabs.length-1; i >=0; i--) { - tabs[i].style.cssText+="top:4px;"; - tabs[i].style.left="auto"; - tabs[i].style.right = right+"px"; - if (i==0) - tabs[i].style.cssText+=";-webkit-border-top-left-radius: 5px; -webkit-border-bottom-left-radius: 5px;"; - if (i==tabs.length-1) - tabs[i].style.cssText+=";-webkit-border-top-right-radius: 5px; -webkit-border-bottom-right-radius: 5px;"; - - right+=100; - }; - - scheduler._els["dhx_cal_prev_button"][0].innerHTML = "<"; - scheduler._els["dhx_cal_next_button"][0].innerHTML = ">"; - var d = document.createElement("div"); - d.className = "dhx_cal_add_button"; - d.innerHTML = "+ "; - d.onclick = function(){ - var now = new Date(); - if (now > scheduler._min_date && now < scheduler._max_date) - scheduler.addEventNow(); - else - scheduler.addEventNow(scheduler._min_date.valueOf()); - } - scheduler._els["dhx_cal_navline"][0].appendChild(d); - - - this._obj.onmousedown = this._obj.onmouseup = this._obj.onmousemove = function(){}; - - var long_tap = null; - var long_tap_pos = []; - this._obj.ontouchmove=function(e){ - if (long_tap){ - var dx = Math.abs(e.touches[0].pageX - long_tap_pos[0]); - var dy = Math.abs(e.touches[0].pageY - long_tap_pos[1]); - if (dx>50 || dy>50) - long_tap = window.clearTimeout(long_tap); - } - if (scheduler.config.touch_actions) - scheduler._on_mouse_move(e.touches[0]); - } - this._obj.ontouchstart = function(e){ - if (scheduler._lightbox_id) return; - - long_tap = window.setTimeout(function(){ - scheduler._on_dbl_click(e.touches[0],(e.target.className?e.target:e.target.parentNode)); - },400); - long_tap_pos = [e.touches[0].pageX, e.touches[0].pageY]; - if (scheduler.config.touch_actions) - scheduler._on_mouse_down(e.touches[0]); - } - this._obj.ontouchend = function(e){ - if (long_tap) - long_tap = window.clearTimeout(long_tap); - if (scheduler.config.touch_actions) - scheduler._on_mouse_up(e.touches[0]); - } -} -scheduler._ipad_init=function(){ - var d = document.createElement("DIV"); - var data = scheduler._els["dhx_cal_data"][0]; - d.appendChild(data); - d.style.cssText = "overflow:hidden; width:100%; overflow:hidden;position:relative;"; - this._obj.appendChild(d); - - data.style.overflowY = "hidden"; - - var scroll = new TouchScroll(d); - scroll.axisX = false; - scheduler._ipad_init = function(){ - data.parentNode.style.height = data.style.height; - data.parentNode.style.top = data.style.top; - data.style.height = data.scrollHeight+"px"; - data.style.top = "0px"; - - if (Math.abs(data.parentNode.offsetHeight - data.offsetHeight)<5){ - scroll.axisY=false; - scroll.scrollTo(0,0,0); - } else - scroll.axisY=true; - - scroll.refresh(); - }; - - scheduler.attachEvent("onSchedulerResize", function(){ - setTimeout(function(){ - scheduler._ipad_init(); - }); - return true; - }) - - scheduler._ipad_init(); -}; - -scheduler.attachEvent("onViewChange",function(){ - scheduler._ipad_init(); -}); -scheduler.attachEvent("onBeforeViewChange",function(){ - scheduler._ipad_before_init(); - return true; -}); - -scheduler.showCover=function(box){ - this.show_cover(); - if (box){ - box.style.display="block"; - var pos = getOffset(this._obj); - box.style.top = box.offsetHeight*-1+"px"; - box.style.left = Math.round(pos.left+(this._obj.offsetWidth-box.offsetWidth)/2)+"px"; - } - - var node =this._get_lightbox(); - node.style.webkitTransform = "translate(0px,"+(box.offsetHeight+41)+"px)"; - node.style.webkitTransitionDuration = "500ms"; -}; - -scheduler.hideCover=function(box){ - if (box){ - box.style.webkitTransform = "translate(0px,"+(box.offsetHeight+41)*-1+"px)"; - box.style.webkitTransitionDuration = "500ms"; - } - this.hide_cover(); -} - -scheduler.config.lightbox.sections[0].height = 100; -if (scheduler.form_blocks.calendar_time){ - scheduler.config.lightbox.sections[1].type = "calendar_time"; - scheduler._mini_cal_arrows = ["<", ">"]; -} - -scheduler.xy.menu_width = 0; -scheduler.attachEvent("onClick", function(){ - return false; -}); - -scheduler.locale.labels.new_event=""; - -scheduler._mouse_coords=function(ev){ - var pos; - var b=document.body; - var d = document.documentElement; - if(ev.pageX || ev.pageY) - pos={x:ev.pageX, y:ev.pageY}; - else pos={ - x:ev.clientX + (b.scrollLeft||d.scrollLeft||0) - b.clientLeft, - y:ev.clientY + (b.scrollTop||d.scrollTop||0) - b.clientTop - } - - //apply layout - pos.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width); - var top = - pos.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+this._dy_shift+this.xy.scale_height-(this._els["dhx_cal_data"][0]._scrollTop||0); - //transform to date - if (!this._table_view){ - pos.x=Math.max(0,Math.ceil(pos.x/this._cols[0])-1); - pos.y=Math.max(0,Math.ceil(pos.y*60/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step); - } else { - var dy=0; - for (dy=1; dy < this._colsS.heights.length; dy++) - if (this._colsS.heights[dy]>pos.y) break; - - pos.y=(Math.max(0,Math.ceil(pos.x/this._cols[0])-1)+Math.max(0,dy-1)*7)*24*60/this.config.time_step; - pos.x=0; - } - return pos; -} diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js index 9fb08261470..d92a4be8428 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js @@ -1,8 +1,16 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.attachEvent("onTimelineCreated", function (obj){ if(obj.render == "tree") { obj.y_unit_original = obj.y_unit; obj.y_unit = scheduler._getArrayToDisplay(obj.y_unit_original); + + scheduler.attachEvent('onOptionsLoadStart', function(){ + obj.y_unit = scheduler._getArrayToDisplay(obj.y_unit_original); + }); scheduler.form_blocks[obj.name]={ render:function(sns) { @@ -33,7 +41,7 @@ scheduler.attachEvent("onTimelineCreated", function (obj){ focus:function(node){ } }; - }; + } }); scheduler.attachEvent("onBeforeViewRender", function (render_name, y_unit, timeline){ @@ -61,7 +69,7 @@ scheduler.attachEvent("onBeforeViewRender", function (render_name, y_unit, timel div_expand = ''; table_className = "dhx_data_table"; } - td_content = "
"+div_expand+"
"+(scheduler.templates[timeline.name+'_scale_label'](y_unit.key, y_unit.label, timeline)||y_unit.label)+"
"; + td_content = "
"+div_expand+"
"+(scheduler.templates[timeline.name+'_scale_label'](y_unit.key, y_unit.label, y_unit)||y_unit.label)+"
"; res = { height: height, @@ -81,7 +89,7 @@ var section_id_before; // section id of the event before dragging (to bring it b scheduler.attachEvent("onBeforeEventChanged", function(event_object, native_event, is_new) { if (scheduler._isRender("tree")) { // if mode's render == tree - var section = scheduler.getSection(event_object.section_id); + var section = scheduler.getSection(event_object[scheduler.matrix[scheduler._mode].y_property]); if (typeof section.children != 'undefined' && !scheduler.matrix[scheduler._mode].folder_events_available) { if (!is_new) { //if old - move back event_object[scheduler.matrix[scheduler._mode].y_property] = section_id_before; @@ -140,7 +148,7 @@ scheduler._getArrayForSelect = function(array, mode){ // function to flatten out } if(array[i].children) fillResultArray(array[i].children, mode); - }; + } }; fillResultArray(array); return result; @@ -228,6 +236,14 @@ scheduler.deleteSection = function(id){ } }; +scheduler.deleteAllSections = function(){ + if(scheduler._isRender("tree")) { + scheduler.matrix[scheduler._mode].y_unit_original = []; + scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.callEvent("onOptionsLoad",[]); + } +}; + scheduler.addSection = function(obj, parent_id){ if(scheduler._isRender("tree")) { var result = false; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js index 744fe2c27ae..01d030ec83b 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.attachEvent("onTemplatesReady",function(){ var first = true; var s2d = scheduler.date.str_to_date("%Y-%m-%d"); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_week_agenda.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_week_agenda.js new file mode 100644 index 00000000000..9aa8b46d4cc --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_week_agenda.js @@ -0,0 +1,255 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler._wa = {}; +scheduler.xy.week_agenda_scale_height = 20; +scheduler.templates.week_agenda_event_text = function(start_date, end_date, event, date) { + return scheduler.templates.event_date(start_date) + " " + event.text; +}; +scheduler.date.week_agenda_start = scheduler.date.week_start; +scheduler.date.week_agenda_end = function(date){ + return scheduler.date.add(date, 7, "day"); +}; +scheduler.date.add_week_agenda = function(date, inc){ + return scheduler.date.add(date, inc*7, "day"); +}; + +scheduler.attachEvent("onSchedulerReady", function(){ + var t = scheduler.templates; + if(!t.week_agenda_date) + t.week_agenda_date = t.week_date; +}); + +(function(){ + var scale_date_format = scheduler.date.date_to_str("%l, %F %d"); + scheduler.templates.week_agenda_scale_date = function(date) { + return scale_date_format(date); + }; +})(); + +scheduler.attachEvent("onTemplatesReady", function() { + + scheduler.attachEvent("onSchedulerResize", function() { + if (this._mode == "week_agenda") { + this.week_agenda_view(true); + return false; + } + return true; + }); + + var old = scheduler.render_data; + scheduler.render_data = function(evs) { + if (this._mode == "week_agenda") { + fillWeekAgendaTab(); + } + else + return old.apply(this, arguments); + }; + + var getColumnSizes = function() { + // widths + scheduler._cols = []; + var twidth = parseInt(scheduler._els['dhx_cal_data'][0].style.width); + scheduler._cols.push(Math.floor(twidth / 2)); + scheduler._cols.push(twidth - scheduler._cols[0] - 1); // To add border between columns + + // heights + scheduler._colsS = { + 0: [], + 1: [] + }; + var theight = parseInt(scheduler._els['dhx_cal_data'][0].style.height); + for (var i = 0; i < 3; i++) { + scheduler._colsS[0].push(Math.floor(theight / (3 - scheduler._colsS[0].length))); + theight -= scheduler._colsS[0][i]; + } + scheduler._colsS[1].push(scheduler._colsS[0][0]); + scheduler._colsS[1].push(scheduler._colsS[0][1]); + // last two days + theight = scheduler._colsS[0][scheduler._colsS[0].length - 1]; + scheduler._colsS[1].push(Math.floor(theight / 2)); + scheduler._colsS[1].push(theight - scheduler._colsS[1][scheduler._colsS[1].length - 1]); + }; + var fillWeekAgendaTab = function() { + scheduler._els["dhx_cal_data"][0].innerHTML = ''; + var html = ''; + for (var i = 0; i < 2; i++) { + var width = scheduler._cols[i]; + var column_css = 'dhx_wa_column'; + if (i == 1) + column_css += ' dhx_wa_column_last'; + html += "
"; + for (var k = 0; k < scheduler._colsS[i].length; k++) { + var scale_height = scheduler.xy.week_agenda_scale_height - 2; + var height = scheduler._colsS[i][k] - scale_height - 2; + html += "
"; + } + html += "
"; + } + scheduler._els["dhx_cal_date"][0].innerHTML = scheduler.templates[scheduler._mode+"_date"](scheduler._min_date, scheduler._max_date, scheduler._mode); + scheduler._els["dhx_cal_data"][0].innerHTML = html; + var all_divs = scheduler._els["dhx_cal_data"][0].getElementsByTagName('div'); + var day_divs = []; + for (var i = 0; i < all_divs.length; i++) { + if (all_divs[i].className == 'dhx_wa_day_cont') + day_divs.push(all_divs[i]); + } + scheduler._wa._selected_divs = []; + var events = scheduler.get_visible_events(); // list of events to be displayed in current week + var tstart = scheduler.date.week_start(scheduler._date); + var tend = scheduler.date.add(tstart, 1, "day"); + for (var i = 0; i < 7; i++) { + day_divs[i]._date = tstart; + var scale_bar = day_divs[i].childNodes[0]; + var events_div = day_divs[i].childNodes[1]; + scale_bar.innerHTML = scheduler.templates.week_agenda_scale_date(tstart); + var evs = []; // events which will be displayed in the current day + for (var j = 0; j < events.length; j++) { + var tev = events[j]; + if(tev.start_datetstart) + evs.push(tev); + } + evs.sort(function(a,b){ + if(a.start_date.valueOf()==b.start_date.valueOf()) + return a.id>b.id?1:-1; + return a.start_date>b.start_date?1:-1; + }); + for (var k = 0; k < evs.length; k++) { + var ev = evs[k]; + var ev_div = document.createElement('div'); + scheduler._rendered.push(ev_div); + ev_div.className = 'dhx_wa_ev_body'; + if(ev._text_style) + ev_div.style.cssText = ev._text_style; + if(ev.color) + ev_div.style.backgroundColor = ev.color; + if(ev.textColor) + ev_div.style.color = ev.textColor; + if(scheduler._select_id && ev.id == scheduler._select_id) { + ev_div.className += " dhx_cal_event_selected"; + scheduler._wa._selected_divs.push(ev_div); + } + var position = ""; + if(!ev._timed){ + position = "middle"; + if(ev.start_date.valueOf() >= tstart.valueOf() && ev.start_date.valueOf() <= tend.valueOf()) + position = "start"; + if(ev.end_date.valueOf() >= tstart.valueOf() && ev.end_date.valueOf() <= tend.valueOf()) + position = "end"; + } + ev_div.innerHTML = scheduler.templates.week_agenda_event_text(ev.start_date, ev.end_date, ev, tstart, position); + ev_div.setAttribute('event_id', ev.id); + events_div.appendChild(ev_div); + } + tstart = scheduler.date.add(tstart, 1, "day"); + tend = scheduler.date.add(tend, 1, "day"); + } + }; + scheduler.week_agenda_view = function(mode) { + scheduler._min_date = scheduler.date.week_start(scheduler._date); + scheduler._max_date = scheduler.date.add(scheduler._min_date, 1, "week"); + scheduler.set_sizes(); + if (mode) { // mode enabled + scheduler._table_view=true; + + // hiding default top border from dhx_cal_data + scheduler._wa._prev_data_border = scheduler._els['dhx_cal_data'][0].style.borderTop; + scheduler._els['dhx_cal_data'][0].style.borderTop = 0; + scheduler._els['dhx_cal_data'][0].style.overflowY = 'hidden'; + + // cleaning dhx_cal_date from the previous date + scheduler._els['dhx_cal_date'][0].innerHTML = ""; + + // 1 to make navline to be over data + scheduler._els['dhx_cal_data'][0].style.top = (parseInt(scheduler._els['dhx_cal_data'][0].style.top)-scheduler.xy.bar_height-1) + 'px'; + scheduler._els['dhx_cal_data'][0].style.height = (parseInt(scheduler._els['dhx_cal_data'][0].style.height)+scheduler.xy.bar_height+1) + 'px'; + + scheduler._els['dhx_cal_header'][0].style.display = 'none'; + getColumnSizes(); + fillWeekAgendaTab(); + } + else { // leaving week_agenda mode + scheduler._table_view=false; + + // restoring default top border to dhx_cal_data + if (scheduler._wa._prev_data_border) + scheduler._els['dhx_cal_data'][0].style.borderTop = scheduler._wa._prev_data_border; + + scheduler._els['dhx_cal_data'][0].style.overflowY = 'auto'; + scheduler._els['dhx_cal_data'][0].style.top = (parseInt(scheduler._els['dhx_cal_data'][0].style.top)+scheduler.xy.bar_height) + 'px'; + scheduler._els['dhx_cal_data'][0].style.height = (parseInt(scheduler._els['dhx_cal_data'][0].style.height)-scheduler.xy.bar_height) + 'px'; + scheduler._els['dhx_cal_header'][0].style.display = 'block'; + } + }; + scheduler.mouse_week_agenda = function(pos) { + var native_event = pos.ev; + var src = native_event.srcElement || native_event.target; + while (src.parentNode) { + if (src._date) + var date = src._date; + src = src.parentNode; + } + if(!date) + return pos; + pos.x = 0; + var diff = date.valueOf() - scheduler._min_date.valueOf(); + pos.y = Math.ceil(( diff / (1000 * 60) ) / this.config.time_step); + if (this._drag_mode == 'move') { + this._drag_event._dhx_changed = true; + this._select_id = this._drag_id; + for (var i = 0; i < scheduler._rendered.length; i++) { + if (scheduler._drag_id == this._rendered[i].getAttribute('event_id')) + var event_div = this._rendered[i]; + } + if (!scheduler._wa._dnd) { + var div = event_div.cloneNode(true); + this._wa._dnd = div; + div.className = event_div.className; + div.id = 'dhx_wa_dnd'; + div.className += ' dhx_wa_dnd'; + document.body.appendChild(div); + } + var dnd_div = document.getElementById('dhx_wa_dnd'); + dnd_div.style.top = ((native_event.pageY || native_event.clientY) + 20) + "px"; + dnd_div.style.left = ((native_event.pageX || native_event.clientX) + 20) + "px"; + } + return pos; + }; + scheduler.attachEvent('onBeforeEventChanged', function(event_object, native_event, is_new) { + if (this._mode == 'week_agenda') { + if (this._drag_mode == 'move') { + var dnd = document.getElementById('dhx_wa_dnd'); + dnd.parentNode.removeChild(dnd); + scheduler._wa._dnd = false; + } + } + return true; + }); + + scheduler.attachEvent("onEventSave",function(id,data,is_new_event){ + if(is_new_event) + this._select_id = id; + return true; + }); + + scheduler._wa._selected_divs = []; + + scheduler.attachEvent("onClick",function(event_id, native_event_object){ + if(this._mode == 'week_agenda'){ + if(scheduler._wa._selected_divs) { + for(var i=0; i"; + html += "
" + (evs[i]._timed ? this.templates.event_date(evs[i].start_date) : "") + "
"; + html += "
 
"; + html += this.templates.year_tooltip(evs[i].start_date, evs[i].end_date, evs[i]) + "
"; + } + + this._tooltip.style.display = ""; + this._tooltip.style.top = "0px"; -scheduler.hideToolTip=function(){ - if (this._tooltip){ - this._tooltip.style.display = "none"; - this._tooltip.date = new Date(9999,1,1); - } - -} -scheduler.showToolTip=function(date,pos,e,src){ - if (this._tooltip){ - if (this._tooltip.date.valueOf() == date.valueOf()) return; - this._tooltip.innerHTML=""; - } else { - var t = this._tooltip = document.createElement("DIV"); - t.className = "dhx_tooltip"; - document.body.appendChild(t); - t.onclick = scheduler._click.dhx_cal_data; - - } - var evs = this.getEvents(date,this.date.add(date,1,"day")); - var html = ""; - - for (var i=0; i" - html+="
"+(evs[i]._timed?this.templates.event_date(evs[i].start_date):"")+"
"; - html+="
 
"; - html+=this.templates.year_tooltip(evs[i].start_date, evs[i].end_date,evs[i])+""; - } - - this._tooltip.style.display=""; - this._tooltip.style.top = "0px"; - - - if (document.body.offsetWidth-pos.left-this._tooltip.offsetWidth < 0) - this._tooltip.style.left = pos.left-this._tooltip.offsetWidth+"px"; - else - this._tooltip.style.left = pos.left+src.offsetWidth+"px"; - - this._tooltip.date = date; - this._tooltip.innerHTML = html; - - if (document.body.offsetHeight-pos.top-this._tooltip.offsetHeight < 0) - this._tooltip.style.top= pos.top-this._tooltip.offsetHeight+src.offsetHeight+"px"; - else - this._tooltip.style.top= pos.top+"px"; -} + if (document.body.offsetWidth - pos.left - this._tooltip.offsetWidth < 0) + this._tooltip.style.left = pos.left - this._tooltip.offsetWidth + "px"; + else + this._tooltip.style.left = pos.left + src.offsetWidth + "px"; -scheduler._init_year_tooltip=function(){ - dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", function(e){ - if (!is_year_mode()) return; - - var e = e || event; - var src = e.target||e.srcElement; - if ((src.className||"").indexOf("dhx_year_event")!=-1) - scheduler.showToolTip(from_attr(src.getAttribute("date")),getOffset(src),e,src); - else - scheduler.hideToolTip(); - }) - this._init_year_tooltip=function(){}; -} + this._tooltip.date = date; + this._tooltip.innerHTML = html; -scheduler.attachEvent("onSchedulerResize",function(){ - if (is_year_mode()){ - this.year_view(true); - return false; - } - return true; -}); -scheduler._get_year_cell=function(d){ - //there can be more than 1 year in view - //year can start not from January - var m = d.getMonth()+12*(d.getFullYear()-this._min_date.getFullYear())-this.week_starts._month; - var t = this._els["dhx_cal_data"][0].childNodes[m]; - var d = this.week_starts[m]+d.getDate()-1; - - - return t.childNodes[2].firstChild.rows[Math.floor(d/7)].cells[d%7].firstChild; -} + if (document.body.offsetHeight - pos.top - this._tooltip.offsetHeight < 0) + this._tooltip.style.top = pos.top - this._tooltip.offsetHeight + src.offsetHeight + "px"; + else + this._tooltip.style.top = pos.top + "px"; + }; + + scheduler._init_year_tooltip = function() { + dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", function(e) { + if (!is_year_mode()) return; + + var e = e || event; + var src = e.target || e.srcElement; + if (src.tagName.toLowerCase() == 'a') // fix for active links extension (it adds links to the date in the cell) + src = src.parentNode; + if ((src.className || "").indexOf("dhx_year_event") != -1) + scheduler.showToolTip(from_attr(src.getAttribute("date")), getOffset(src), e, src); + else + scheduler.hideToolTip(); + }); + this._init_year_tooltip = function() { + }; + }; + + scheduler.attachEvent("onSchedulerResize", function() { + if (is_year_mode()) { + this.year_view(true); + return false; + } + return true; + }); + scheduler._get_year_cell = function(d) { + //there can be more than 1 year in view + //year can start not from January + var m = d.getMonth() + 12 * (d.getFullYear() - this._min_date.getFullYear()) - this.week_starts._month; + var t = this._els["dhx_cal_data"][0].childNodes[m]; + var d = this.week_starts[m] + d.getDate() - 1; -var marked = []; -scheduler._mark_year_date=function(d,ev){ - var c = this._get_year_cell(d); - c.className = "dhx_month_head dhx_year_event "+this.templates.event_class(ev.start_date,ev.end_date,ev); - c.setAttribute("date",to_attr(d)) - marked.push(c); -} -scheduler._unmark_year_date=function(d){ - this._get_year_cell(d).className = "dhx_month_head"; -} -scheduler._year_render_event=function(ev){ - var d = ev.start_date; - if (d.valueOf()=this._max_date.valueOf()) - return; - } -} -scheduler.year_view=function(mode){ - if (mode){ - var temp = scheduler.xy.scale_height; - scheduler.xy.scale_height = -1; - } - - scheduler._els["dhx_cal_header"][0].style.display=mode?"none":""; - scheduler.set_sizes(); - - if (mode) - scheduler.xy.scale_height = temp; - - - scheduler._table_view = mode; - if (this._load_mode && this._load()) return; - - if (mode){ - scheduler._init_year_tooltip(); - scheduler._reset_year_scale(); - scheduler.render_view_data(); - } else { - scheduler.hideToolTip(); - } -} -scheduler._reset_year_scale = function(){ - this._cols=[]; this._colsS={}; - var week_starts = []; //start day of first week in each month - var b=this._els["dhx_cal_data"][0]; - - var c = this.config; - b.scrollTop=0; //fix flickering in FF - b.innerHTML=""; - - var dx = Math.floor(parseInt(b.style.width)/c.year_x); - var dy = Math.floor((parseInt(b.style.height)-scheduler.xy.year_top)/c.year_y); - if (dy<190) { - dy = 190; - dx = Math.floor((parseInt(b.style.width)-scheduler.xy.scroll_width)/c.year_x); - } - - var summ = dx-11; - var left = 0; - var week_template = document.createElement("div"); - var dummy_date = this.date.week_start(new Date()); - for (var i=0; i<7; i++){ - this._cols[i]=Math.floor(summ/(7-i)); - this._render_x_header(i,left,dummy_date,week_template); - dummy_date = this.date.add(dummy_date,1,"day"); - summ-=this._cols[i]; - left+=this._cols[i]; - } - week_template.lastChild.className+=" dhx_scale_bar_last"; - - var sd = this.date[this._mode+"_start"](this.date.copy(this._date)); - var ssd=sd; - - for (var i=0; i
"; - d.childNodes[0].innerHTML=this.templates.year_month(sd); - - var dd = this.date.week_start(sd); - var ed = this._reset_month_scale(d.childNodes[2],sd,dd); - - var r=d.childNodes[2].firstChild.rows; - for (var k=r.length; k<6; k++) { - r[0].parentNode.appendChild(r[0].cloneNode(true)); - for (var ri=0; ri < r[k].childNodes.length; ri++) { - r[k].childNodes[ri].className = "dhx_after"; - r[k].childNodes[ri].firstChild.innerHTML = scheduler.templates.month_day(ed); - ed = scheduler.date.add(ed,1,"day"); - }; - } - - - b.appendChild(d); - - var dt = Math.round((dy-190)/2); - d.style.marginTop=dt+"px"; - this.set_xy(d,dx-10,dy-dt-10,dx*j+5,dy*i+5+scheduler.xy.year_top); - - week_starts[i*c.year_x+j] = (sd.getDay()-(this.config.start_on_monday?1:0)+7)%7; - sd = this.date.add(sd,1,"month"); - - } - this._els["dhx_cal_date"][0].innerHTML=this.templates[this._mode+"_date"](ssd,sd,this._mode); - this.week_starts = week_starts; - week_starts._month = ssd.getMonth(); - this._min_date = ssd; - this._max_date = sd; -} + return t.childNodes[2].firstChild.rows[Math.floor(d / 7)].cells[d % 7].firstChild; + }; + + var marked = []; + scheduler._mark_year_date = function(d, ev) { + var c = this._get_year_cell(d); + c.className = "dhx_month_head dhx_year_event " + this.templates.event_class(ev.start_date, ev.end_date, ev); + c.setAttribute("date", to_attr(d)) + marked.push(c); + }; + scheduler._unmark_year_date = function(d) { + this._get_year_cell(d).className = "dhx_month_head"; + }; + scheduler._year_render_event = function(ev) { + var d = ev.start_date; + if (d.valueOf() < this._min_date.valueOf()) + d = this._min_date; + else d = this.date.date_part(new Date(d)); + + while (d < ev.end_date) { + this._mark_year_date(d, ev); + d = this.date.add(d, 1, "day"); + if (d.valueOf() >= this._max_date.valueOf()) + return; + } + }; + + scheduler.year_view = function(mode) { + if (mode) { + var temp = scheduler.xy.scale_height; + scheduler.xy.scale_height = -1; + } + + scheduler._els["dhx_cal_header"][0].style.display = mode ? "none" : ""; + scheduler.set_sizes(); + + if (mode) + scheduler.xy.scale_height = temp; + + + scheduler._table_view = mode; + if (this._load_mode && this._load()) return; + + if (mode) { + scheduler._init_year_tooltip(); + scheduler._reset_year_scale(); + scheduler.render_view_data(); + } else { + scheduler.hideToolTip(); + } + }; + scheduler._reset_year_scale = function() { + this._cols = []; + this._colsS = {}; + var week_starts = []; //start day of first week in each month + var b = this._els["dhx_cal_data"][0]; + + var c = this.config; + b.scrollTop = 0; //fix flickering in FF + b.innerHTML = ""; + + var dx = Math.floor(parseInt(b.style.width) / c.year_x); + var dy = Math.floor((parseInt(b.style.height) - scheduler.xy.year_top) / c.year_y); + if (dy < 190) { + dy = 190; + dx = Math.floor((parseInt(b.style.width) - scheduler.xy.scroll_width) / c.year_x); + } + + var summ = dx - 11; + var left = 0; + var week_template = document.createElement("div"); + var dummy_date = this.date.week_start(new Date()); + for (var i = 0; i < 7; i++) { + this._cols[i] = Math.floor(summ / (7 - i)); + this._render_x_header(i, left, dummy_date, week_template); + dummy_date = this.date.add(dummy_date, 1, "day"); + summ -= this._cols[i]; + left += this._cols[i]; + } + week_template.lastChild.className += " dhx_scale_bar_last"; + + var sd = this.date[this._mode + "_start"](this.date.copy(this._date)); + var ssd = sd; + + for (var i = 0; i < c.year_y; i++) + for (var j = 0; j < c.year_x; j++) { + var d = document.createElement("DIV"); + d.style.cssText = "position:absolute;"; + d.setAttribute("date", this.templates.xml_format(sd)); + d.innerHTML = "
" + week_template.innerHTML + "
"; + d.childNodes[0].innerHTML = this.templates.year_month(sd); + + var dd = this.date.week_start(sd); + var ed = this._reset_month_scale(d.childNodes[2], sd, dd); + + var r = d.childNodes[2].firstChild.rows; + for (var k=r.length; k<6; k++) { + r[0].parentNode.appendChild(r[0].cloneNode(true)); + for (var ri=0; ri < r[k].childNodes.length; ri++) { + r[k].childNodes[ri].className = "dhx_after"; + r[k].childNodes[ri].firstChild.innerHTML = scheduler.templates.month_day(ed); + ed = scheduler.date.add(ed,1,"day"); + } + } + b.appendChild(d); + + d.childNodes[1].style.height = d.childNodes[1].childNodes[0].offsetHeight + "px"; // dhx_year_week should have height property so that day dates would get correct position. dhx_year_week height = height of it's child (with the day name) + var dt = Math.round((dy - 190) / 2); + d.style.marginTop = dt + "px"; + this.set_xy(d, dx - 10, dy - dt - 10, dx * j + 5, dy * i + 5 + scheduler.xy.year_top); + + week_starts[i * c.year_x + j] = (sd.getDay() - (this.config.start_on_monday ? 1 : 0) + 7) % 7; + sd = this.date.add(sd, 1, "month"); + + } + this._els["dhx_cal_date"][0].innerHTML = this.templates[this._mode + "_date"](ssd, sd, this._mode); + this.week_starts = week_starts; + week_starts._month = ssd.getMonth(); + this._min_date = ssd; + this._max_date = sd; + } })(); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/glossy.css b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/glossy.css new file mode 100644 index 00000000000..51c4e99d668 --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/glossy.css @@ -0,0 +1,294 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +.dhx_cal_tab.active{ + border:none; +} +.dhx_multi_day{ + border:none; + border-top:1px solid #A4BED4; +} +.dhx_multi_day_icon, .dhx_multi_day_icon_small{ + border-right:none; +} +.dhx_cal_container { + background-image:url(imgs_glossy/top-days-bg.png); + background-position:0 24px; + background-repeat:repeat-x; + background-color:#EBEBEB; +} +.dhx_cal_navline{ + background-color:#EBEBEB; + height:23px !important; +} +.dhx_cal_prev_button{ + background-image:url(imgs_glossy/buttons.gif); + width:30px; + height:20px; +} +.dhx_cal_next_button{ + background-image:url(imgs_glossy/buttons.gif); + width:30px; + height:20px; +} +.dhx_cal_today_button{ + padding-top:3px; + background-image:url(imgs_glossy/buttons.gif); + width:67px; + left:110px; + text-decoration:none; +} +.dhx_cal_navline .dhx_cal_date{ + padding-top:4px; + left:230px; +} +.dhx_cal_tab{ + background-image:url(imgs_glossy/white_tab.png); + width:60px; + height:15px; + text-decoration:none; + padding-top:4px; + margin-top: 4px; +} +.dhx_cal_tab.active{ + background-image:url(imgs_glossy/blue_tab.png); + height:18px; + width:60px; + padding-top:4px; + margin-top: 2px; +} +.dhx_cal_data{ + border-top: 1px solid #A4BED4; +} +.dhx_cal_header{ + background-image:url(imgs_glossy/top-days-bg.png); + background-repeat:repeat-x; + border-top: 0px; + border-right: 0px; +} +.dhx_scale_bar{ + background-image:url(imgs_glossy/top-separator.gif); + background-position: 0px 0px; + background-repeat:no-repeat; + background-color: transparent; + padding-top:3px; + border-left:0px; +} + +.dhx_scale_holder { + border-right:1px solid #A4BED4; +} +.dhx_scale_holder_now{ + border-right:1px solid #A4BED4; +} +.dhx_scale_hour{ + background-image:url(imgs_glossy/left-time-bg.png); + border-bottom:1px solid #A4BED4; + color:#2F3A48; +} +.dhx_multi_day{ + background-image:url(imgs_glossy/multi-days-bg.png); + background-repeat:repeat; + border-bottom:1px solid #A4BED4; + border-left:0px; +} +.dhx_multi_day_icon,.dhx_multi_day_icon_small{ + background-image:url(imgs_glossy/multi-days-bg.png); + border-bottom:1px solid #A4BED4; + border-left:1px solid #ffffff; + background-position:0 0; + background-repeat:repeat; +} +.dhx_month_head{ + background-color:#FFFFFF; +} +.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{ + background-color:#EFEDE2; +} +.dhx_now .dhx_month_head{ + background-color:#E4EFFF; +} +.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{ + background-color:#EFEDE2; +} +.dhx_cal_event div{ + border:1px solid #FFBD51; + background-color:#FFE4AB; + color:#000000; +} +.dhx_cal_event_clear{ + color:#000000; +} +.dhx_cal_event_line{ + background-image:url(imgs_glossy/event-bg.png); + border:1px solid #FFBD51; + color:#000000; +} +.dhx_in_move{ + background-image:url(imgs_glossy/move.png); +} +.dhx_cal_event .dhx_body{ + background-color:#FFE4AB; +} +.dhx_cal_event .dhx_title{ + background-color:#FFE4AB; +} +.dhx_cal_light{ + -moz-box-shadow:5px 5px 5px #888888; + -khtml-box-shadow: 5px 5px 5px #888; + background-color:#EBEBEB; + border:2px solid #A4BED4; + color:#000000; +} +.dhx_cal_larea{ + border:1px solid #A4BED4; + border-width:0 1px 1px; + background-color:#FFFFFF; +} + +.dhx_cal_lsection{ + background-image:url(imgs_glossy/lightbox.png); + font-size:14px; + padding:5px 0 5px 10px; + color:#000000; +} +.dhx_cal_light_wide .dhx_cal_lsection{ + background-image:url(imgs_glossy/multi-days-bg.png); +} + + +.dhx_cal_ltext textarea{ + background-color:#ffffff; + color:#000000; +} + +.dhx_cal_light select, .dhx_cal_light input{ + color:#000000; +} +.dhx_save_btn{ + background-image:url(imgs_glossy/controlls5.png); +} +.dhx_cancel_btn{ + background-image:url(imgs_glossy/controlls5.png); +} +.dhx_delete_btn{ + background-image:url(imgs_glossy/controlls5.png); +} +div.dhx_menu_head{ + background-image:url(imgs_glossy/controlls5.png); + border:1px solid #FFE4AB; +} +div.dhx_menu_icon{ + background-image:url(imgs_glossy/controlls5.png); + border:medium none; +} +.dhx_section_time{ + height:20px !important; + padding:7px 0 !important; + text-align:center; + background:white; +} + +div.dhx_cal_editor{ + background-color:#FFE4AB; +} +.dhx_year_month{ + background-image:url(imgs_glossy/top-days-bg.png); + border: 0px; +} +.dhx_year_week{ + background-image:url(imgs_glossy/top-days-bg.png); +} +.dhx_month_head{ + border-right:1px solid #A4BED4; +} +.dhx_month_body{ + border-right:1px solid #A4BED4; + border-bottom:1px solid #A4BED4; +} +.dhx_year_body{ + border-left:1px solid #A4BED4; +} +.dhx_scale_bar_last{ + border-right: none; +} +.dhx_month_head.dhx_year_event{ + background-color:#FFE4AB; +} +.dhx_year_body .dhx_before .dhx_month_head, .dhx_year_body .dhx_after .dhx_month_head, .dhx_year_body .dhx_before .dhx_month_head a, .dhx_year_body .dhx_after .dhx_month_head a{ + color:#EFEDE2 !important; +} +.dhx_cal_lsection .dhx_readonly{ + color:#000000; +} +.dhx_tooltip{ + -moz-box-shadow:2px 2px 2px #888; /*Doesn't work in IE*/ + -khtml-box-shadow: 2px 2px 2px #888; +} +.dhx_custom_button { + margin-top: -2px; +} +/*2.3*/ +.dhx_cal_lsection .dhx_fullday{ + color:#000000; +} + +.dhx_cal_lsection.dhx_cal_checkbox{ + height:16px; + line-height:18px; +} +.dhx_cal_light_wide .dhx_cal_lsection.dhx_cal_checkbox{ + height:20px; +} +.dhx_cal_checkbox label{ + vertical-align:top; +} + +.dhx_cal_light_wide .dhx_cal_lsection{ + color:black; +} + +.dhx_cal_light_wide .dhx_wrap_section{ + border-top:1px solid #A4BED4; + background-image:url(imgs_glossy/multi-days-bg.png); +} +.dhx_cal_light_wide .dhx_cal_ltext{ + border-left:1px solid #A4BED4; +} +.dhx_cal_light_wide .dhx_cal_ltext { + background-color:white; +} +.dhx_custom_button{ + background:white; + color:black; +} +.dhx_form_repeat{ + background:white; +} +.dhx_repeat_divider{ + border-left:1px solid #A4BED4; +} + +/* timeline second scale start */ +.dhx_cal_header.dhx_second_cal_header { + background-image: url("imgs_glossy/second-top-days-bg.png"); + padding-right: 20px; +} +.dhx_scale_bar { + padding-top: 4px; +} +.dhx_second_scale_bar { + border-bottom: 0; + padding-top: 4px; +} + +/* timeline second scale end */ +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday, .dhx_cal_lsection .dhx_fullday{ + color:#000000; + font-size: 14px; +} +.dhx_cal_light_wide .dhx_cal_lsection { + font-size: 14px; + padding-right:10px; +} \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ical.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ical.js index ab6fdb0101c..60dbfef8626 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ical.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ical.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.ical={ parse:function(str){ var data = str.match(RegExp(this.c_start+"[^\f]*"+this.c_end,"")); diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/layout.css b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/layout.css index 4818d92db21..a888f4d0c79 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/layout.css +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/layout.css @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ .dhx_cal_container{ background-color:#C2D5FC; font-family:Tahoma; @@ -52,18 +56,28 @@ text-decoration:underline; } .dhx_cal_tab{ - background-image:url(imgs/white_tab.png); - width:61px; height:19px; + width:59px; height:19px; text-align:center; text-decoration:underline; - padding-top:3px; cursor:pointer; + padding-top:2px; + cursor:pointer; + background-color: #D8E1EA; + + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; } .dhx_cal_tab.active{ - background-image:url(imgs/blue_tab.png); text-decoration:none; - height:20px; - padding-top:2px; cursor:default; + + cursor:default; font-weight:bold; + border: 1px dotted #586A7E; + border-bottom: 0; + background-color: #C2D5FC; } .dhx_cal_header{ position:absolute; @@ -154,11 +168,13 @@ z-index:9999; } .dhx_multi_day_icon, .dhx_multi_day{ - position:absolute; background-color:#E1E6FF; background-repeat:no-repeat; - border-bottom:1px dotted #8894A3; - border-left:1px dotted #8894A3; + border-right:1px dotted #8894A3; +} +.dhx_multi_day{ + position: absolute; + border-top:1px dotted #8894A3; } .dhx_multi_day_icon{ background-image:url(imgs/clock_big.gif); @@ -168,11 +184,10 @@ } .dhx_multi_day_icon, .dhx_multi_day_icon_small{ background-position: center center; - position:absolute; background-color:#E1E6FF; background-repeat:no-repeat; border-bottom:1px dotted #8894A3; - border-left:1px dotted #8894A3; + border-right:1px dotted #8894A3; } .dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container { background-color: #d0e5ff; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css index 5781bc3d3b5..afb83295be3 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css @@ -1,151 +1,239 @@ - .dhx_cal_light{ - height:400px; - light:300px; - background-color:#FFE763; - - font-family:Tahoma; - font-size:8pt; - border:1px solid #B7A64B; - color:#887A2E; - - position:absolute; - z-index:10001; - - width:580px; - height:300px; - } - .dhx_mark{ - position:relative; top:3px; - background-image:url('./imgs/controls.gif'); - background-position: 0px -43px; - padding-left:10px; - } - .dhx_ie6 .dhx_mark{ - background-position: 6px -41px; - } - - .dhx_cal_light select{ - font-family:Tahoma; - font-size:8pt; - color:#887A2E; - padding:2px; - margin:0px; - } - .dhx_cal_ltitle{ - padding:2px 0px 2px 5px; - overflow:hidden; - white-space:nowrap; - } - .dhx_cal_ltitle span{ - white-space:nowrap; - } - .dhx_cal_lsection{ - background-color:#DBCF8C; - color:#FFF4B5; - font-size:18pt; - font-weight:bold; - padding:5px 0px 3px 10px; - } - .dhx_cal_ltext{ - padding:2px 0px 2px 10px; - height:130px; - height=140px; - overflow:hidden; - } - .dhx_cal_ltext textarea{ - background-color:transparent; - overflow:auto; - border:none; - color:#887A2E; - height:100%; - width:100%; - outline:none !important; - } - .dhx_time{ - font-weight:bold; - } - .dhx_cal_light .dhx_title{ - padding-left:10px; - } - .dhx_cal_larea{ - border:1px solid #DCC43E; - background-color:#FFF4B5; - overflow:hidden; - - margin-left:3px; - - width:572px; - height:1px; - } - .dhx_btn_set{ - padding:5px 10px 0px 10px; - float:left; - } - .dhx_btn_set div{ - float:left; - height:21px; - line-height:21px; - vertical-align:middle; - cursor:pointer; - } - .dhx_save_btn{ - background-image:url('./imgs/controls.gif'); - background-position:-84px 0px; - width:21px; - - } - .dhx_cancel_btn{ - background-image:url('./imgs/controls.gif'); - background-position:-63px 0px; - width:20px; - } - .dhx_delete_btn{ - background-image:url('./imgs/controls.gif'); - background-position:-42px 0px; - width:20px; - } - .dhx_cal_cover{ - width:100%; - height:100%; - position:absolute; - z-index:10000; - top:0px; - left:0px; - background-color:black; - - opacity:0.1; - filter:alpha(opacity=10); - } - .dhx_custom_button{ - padding:0px 3px 0px 3px; - color:#887A2E; - font-family:Tahoma; - font-size:8pt; - background-color:#FFE763; - font-weight:normal; - margin-right:5px; - margin-top:5px; - cursor:pointer; - } - .dhx_custom_button div{ - cursor:pointer; - float:left; - height:21px; - line-height:21px; - vertical-align:middle; - } - - .dhx_fullday_checkbox { - padding-top: 5px; - float:right; - } - - .dhx_fullday_checkbox input{ - vertical-align: middle; - } - - .dhx_fullday_checkbox label{ - font-size: 12pt; - font-weight: bold; - vertical-align: middle; - } \ No newline at end of file +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +.dhx_unselectable, .dhx_unselectable div{ + -webkit-user-select:none; + -moz-user-select:none; + -moz-user-select:-moz-none; +} +.dhx_cal_light{ + background-color:#FFE763; + border-radius:5px; + font-family:Tahoma; + font-size:8pt; + border:1px solid #B7A64B; + color:#887A2E; + + position:absolute; + z-index:10001; + + width:580px; + height:300px; + + box-shadow:5px 5px 5px #888; +} +.dhx_cal_light_wide{ + width:650px; +} +.dhx_mark{ + position:relative; top:3px; + background-image:url('./imgs/controls.gif'); + background-position: 0px -43px; + padding-left:10px; +} +.dhx_ie6 .dhx_mark{ + background-position: 6px -41px; +} + +.dhx_cal_light select{ + font-family:Tahoma; + font-size:8pt; + color:#887A2E; + padding:2px; + margin:0px; +} +.dhx_cal_ltitle{ + padding:2px 0px 2px 5px; + overflow:hidden; + white-space:nowrap; +} +.dhx_cal_ltitle span{ + white-space:nowrap; +} +.dhx_cal_lsection{ + background-color:#DBCF8C; + color:#FFF4B5; + font-weight:bold; + padding:5px 0px 3px 10px; +} +.dhx_section_time{ + background-color:#DBCF8C; +} +.dhx_cal_lsection .dhx_fullday{ + float:right; + margin-right:5px; + color:#887A2E; + font-size:12px; + font-weight:normal; + line-height:20px; + vertical-align:top; + cursor:pointer; +} +.dhx_cal_lsection{ + font-size:18px; + font-family:Arial; +} +.dhx_cal_ltext{ + padding:2px 0px 2px 10px; + overflow:hidden; +} +.dhx_cal_ltext textarea{ + background-color: #FFF4B5; /* #FFF4B5; should be the same for dhx_cal_larea, was transperent */ + overflow:auto; + border:none; + color:#887A2E; + height:100%; + width:100%; + outline:none !important; +} +.dhx_time{ + font-weight:bold; +} +.dhx_cal_light .dhx_title{ + padding-left:10px; +} +.dhx_cal_larea{ + border:1px solid #DCC43E; + background-color:#FFF4B5; + overflow:hidden; + + margin-left:3px; + + width:572px; + height:1px; +} +.dhx_btn_set{ + padding:5px 10px 0px 10px; + float:left; +} +.dhx_btn_set div{ + float:left; + height:21px; + line-height:21px; + vertical-align:middle; + cursor:pointer; +} +.dhx_save_btn{ + background-image:url('./imgs/controls.gif'); + background-position:-84px 0px; + width:21px; + +} +.dhx_cancel_btn{ + background-image:url('./imgs/controls.gif'); + background-position:-63px 0px; + width:20px; +} +.dhx_delete_btn{ + background-image:url('./imgs/controls.gif'); + background-position:-42px 0px; + width:20px; +} +.dhx_cal_cover{ + width:100%; + height:100%; + position:absolute; + z-index:10000; + top:0px; + left:0px; + background-color:black; + + opacity:0.1; + filter:alpha(opacity=10); +} +.dhx_custom_button{ + padding:0px 3px 0px 3px; + color:#887A2E; + font-family:Tahoma; + font-size:8pt; + background-color:#FFE763; + font-weight:normal; + margin-right:5px; + margin-top:0px; + cursor:pointer; +} +.dhx_custom_button div{ + cursor:pointer; + float:left; + height:21px; + line-height:21px; + vertical-align:middle; +} + + +.dhx_cal_light_wide .dhx_cal_larea{ + border-top-width:0px; +} +.dhx_cal_light_wide .dhx_cal_lsection{ + border:0px; + float:left; + text-align:right; + width:100px; + height:20px; + font-size:16px; + padding: 5px 0px 0px 10px; +} +.dhx_cal_light_wide .dhx_wrap_section{ + border-top:1px solid #DBCF8C; + position:relative; + background-color:#DBCF8C; + overflow:hidden; +} +.dhx_cal_light_wide .dhx_section_time{ + padding-top:2px !important; + height:20px !important; +} +.dhx_section_time{ + text-align: center; +} +.dhx_cal_light_wide .dhx_cal_larea{ + width:730px; +} +.dhx_cal_light_wide{ + width:738px; +} + +.dhx_cal_light_wide .dhx_section_time{ + background:transparent; +} +.dhx_cal_light_wide .dhx_cal_checkbox label{ + padding-left:0px; +} +.dhx_cal_wide_checkbox input{ + margin-top:8px; + margin-left:14px; +} +.dhx_cal_light input{ + font-family:Tahoma; + font-size:8pt; + color:#887A2E; +} +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{ + float:none; + margin-right:0px; + color:#FFF4B5; + font-weight:bold; + font-size:16px; + font-family:Arial; + cursor:pointer; +} +.dhx_custom_button{ + float: right; + height: 21px; + width:90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_cal_light_wide .dhx_custom_button { + position:absolute; + top:0; + right:0; + margin-top: 2px; +} +.dhx_cal_light_wide .dhx_repeat_right { + margin-right: 55px; +} \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js index 2a928a34831..7749ff6708c 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js @@ -1,4 +1,40 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.formSection = function(name){ + var config = this.config.lightbox.sections; + var i =0; + for (i; i < config.length; i++) + if (config[i].name == name) + break; + var section = config[i]; + var node = document.getElementById(section.id).nextSibling; + + return { + getValue:function(ev){ + return scheduler.form_blocks[section.type].get_value(node, (ev||{}), section); + }, + setValue:function(value, ev){ + return scheduler.form_blocks[section.type].set_value(node, value, (ev||{}), section); + } + }; +}; scheduler.form_blocks={ + template:{ + render: function(sns){ + var height=(sns.height||"30")+"px"; + return "
"; + }, + set_value:function(node,value,ev,config){ + node.innerHTML = value||""; + }, + get_value:function(node,ev,config){ + return node.innerHTML||""; + }, + focus: function(node){ + } + }, textarea:{ render:function(sns){ var height=(sns.height||"130")+"px"; @@ -17,7 +53,7 @@ scheduler.form_blocks={ select:{ render:function(sns){ var height=(sns.height||"23")+"px"; - var html="
"; for (var i=0; i < sns.options.length; i++) html+=""; html+="
"; @@ -48,10 +84,16 @@ scheduler.form_blocks={ } var html=" "; - return "
"+html+"  –  "+html+"
"; + return "
"+html+"  –  "+html+"
"; }, set_value:function(node,value,ev){ + var s=node.getElementsByTagName("select"); if(scheduler.config.full_day) { if (!node._full_day){ - node.previousSibling.innerHTML+="
"; + var html = ""; + if (!scheduler.config.wide_form) + html = node.previousSibling.innerHTML+html; + node.previousSibling.innerHTML=html; node._full_day=true; } var input=node.previousSibling.getElementsByTagName("input")[0]; - var isFulldayEvent = (scheduler.date.time_part(ev.start_date)==0 && scheduler.date.time_part(ev.end_date)==0 && ev.end_date.valueOf()-ev.start_date.valueOf() < 2*24*60*60*1000); + var isFulldayEvent = (scheduler.date.time_part(ev.start_date)===0 && scheduler.date.time_part(ev.end_date)===0 && ev.end_date.valueOf()-ev.start_date.valueOf() < 2*24*60*60*1000); input.checked = isFulldayEvent; for(var k in s) @@ -96,14 +142,14 @@ scheduler.form_blocks={ var end_date = new Date(ev.end_date); scheduler.date.date_part(start_date); - end_date = scheduler.date.add(start_date, 1, "day") + end_date = scheduler.date.add(start_date, 1, "day"); } for(var i in s) s[i].disabled=input.checked; _fill_lightbox_select(s,0,start_date||ev.start_date); _fill_lightbox_select(s,4,end_date||ev.end_date); - } + }; } if(scheduler.config.auto_end_date && scheduler.config.event_duration) { @@ -138,16 +184,29 @@ scheduler.form_blocks={ node.getElementsByTagName("select")[0].focus(); } } -} +}; scheduler.showCover=function(box){ - this.show_cover(); if (box){ box.style.display="block"; - var pos = getOffset(this._obj); - box.style.top=Math.round(pos.top+(this._obj.offsetHeight-box.offsetHeight)/2)+"px"; - box.style.left=Math.round(pos.left+(this._obj.offsetWidth-box.offsetWidth)/2)+"px"; + + var scroll_top = window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop; + var scroll_left = window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft; + + var view_height = window.innerHeight||document.documentElement.clientHeight; + + if(scroll_top) // if vertical scroll on window + box.style.top=Math.round(scroll_top+Math.max((view_height-box.offsetHeight)/2, 0))+"px"; + else // vertical scroll on body + box.style.top=Math.round(Math.max(((view_height-box.offsetHeight)/2), 0) + 9)+"px"; // +9 for compatibility with auto tests + + // not quite accurate but used for compatibility reasons + if(document.documentElement.scrollWidth > document.body.offsetWidth) // if horizontal scroll on the window + box.style.left=Math.round(scroll_left+(document.body.offsetWidth-box.offsetWidth)/2)+"px"; + else // horizontal scroll on the body + box.style.left=Math.round((document.body.offsetWidth-box.offsetWidth)/2)+"px"; } -} + this.show_cover(); +}; scheduler.showLightbox=function(id){ if (!id) return; if (!this.callEvent("onBeforeLightbox",[id])) return; @@ -155,7 +214,7 @@ scheduler.showLightbox=function(id){ this.showCover(box); this._fill_lightbox(id,box); this.callEvent("onLightbox",[id]); -} +}; scheduler._fill_lightbox=function(id,box){ var ev=this.getEvent(id); var s=box.getElementsByTagName("span"); @@ -172,24 +231,25 @@ scheduler._fill_lightbox=function(id,box){ for (var i=0; i < sns.length; i++) { var node=document.getElementById(sns[i].id).nextSibling; var block=this.form_blocks[sns[i].type]; - block.set_value.call(this,node,ev[sns[i].map_to],ev, sns[i]) + block.set_value.call(this,node,ev[sns[i].map_to],ev, sns[i]); if (sns[i].focus) block.focus.call(this,node); - }; + } scheduler._lightbox_id=id; -} +}; scheduler._lightbox_out=function(ev){ var sns = this.config.lightbox.sections; for (var i=0; i < sns.length; i++) { - var node=document.getElementById(sns[i].id).nextSibling; + var node = document.getElementById(sns[i].id); + node=(node?node.nextSibling:node); var block=this.form_blocks[sns[i].type]; var res=block.get_value.call(this,node,ev, sns[i]); if (sns[i].map_to!="auto") ev[sns[i].map_to]=res; } return ev; -} +}; scheduler._empty_lightbox=function(){ var id=scheduler._lightbox_id; var ev=this.getEvent(id); @@ -199,38 +259,41 @@ scheduler._empty_lightbox=function(){ ev._timed=this.is_one_day_event(ev); this.setEvent(ev.id,ev); - this._edit_stop_event(ev,true) + this._edit_stop_event(ev,true); this.render_view_data(); -} +}; scheduler.hide_lightbox=function(id){ this.hideCover(this._get_lightbox()); this._lightbox_id=null; this.callEvent("onAfterLightbox",[]); -} +}; scheduler.hideCover=function(box){ if (box) box.style.display="none"; this.hide_cover(); -} +}; scheduler.hide_cover=function(){ if (this._cover) this._cover.parentNode.removeChild(this._cover); this._cover=null; -} +}; scheduler.show_cover=function(){ this._cover=document.createElement("DIV"); this._cover.className="dhx_cal_cover"; + var _document_height = ((document.height !== undefined) ? document.height : document.body.offsetHeight); + var _scroll_height = ((document.documentElement) ? document.documentElement.scrollHeight : 0); + this._cover.style.height = Math.max(_document_height, _scroll_height) + 'px'; document.body.appendChild(this._cover); -} +}; scheduler.save_lightbox=function(){ - if (this.checkEvent("onEventSave") && !this.callEvent("onEventSave",[this._lightbox_id,this._lightbox_out({ id: this._lightbox_id}), this._new_event])) + if (this.checkEvent("onEventSave") && !this.callEvent("onEventSave",[this._lightbox_id,this._lightbox_out({ id: this._lightbox_id}), this._new_event])) return; - this._empty_lightbox() + this._empty_lightbox(); this.hide_lightbox(); }; scheduler.startLightbox = function(id, box){ this._lightbox_id=id; this.showCover(box); -} +}; scheduler.endLightbox = function(mode, box){ this._edit_stop_event(scheduler.getEvent(this._lightbox_id),mode); if (mode) @@ -238,6 +301,8 @@ scheduler.endLightbox = function(mode, box){ this.hideCover(box); }; scheduler.resetLightbox = function(){ + if (scheduler._lightbox) + scheduler._lightbox.parentNode.removeChild(scheduler._lightbox); scheduler._lightbox = null; }; scheduler.cancel_lightbox=function(){ @@ -267,15 +332,18 @@ scheduler._init_lightbox_events=function(){ break; default: - if (src.className.indexOf("dhx_custom_button_")!=-1){ + if (src.getAttribute("dhx_button")){ + scheduler.callEvent("onLightboxButton", [src.className, src, e]); + } else if (src.className.indexOf("dhx_custom_button_")!=-1){ var index = src.parentNode.getAttribute("index"); var block=scheduler.form_blocks[scheduler.config.lightbox.sections[index].type]; var sec = src.parentNode.parentNode; block.button_click(index,src,sec,sec.nextSibling); } + break; } }; - this._get_lightbox().onkeypress=function(e){ + this._get_lightbox().onkeydown=function(e){ switch((e||event).keyCode){ case scheduler.keys.edit_save: if ((e||event).shiftKey) return; @@ -284,9 +352,11 @@ scheduler._init_lightbox_events=function(){ case scheduler.keys.edit_cancel: scheduler.cancel_lightbox(); break; + default: + break; } - } -} + }; +}; scheduler.setLightboxSize=function(){ var d = this._lightbox; if (!d) return; @@ -296,36 +366,92 @@ scheduler.setLightboxSize=function(){ con.style.height=con.scrollHeight+"px"; d.style.height=con.scrollHeight+50+"px"; con.style.height=con.scrollHeight+"px"; //it is incredible , how ugly IE can be -} +}; -scheduler._get_lightbox=function(){ +scheduler._init_dnd_events = function(){ + dhtmlxEvent(document.body, "mousemove", scheduler._move_while_dnd); + dhtmlxEvent(document.body, "mouseup", scheduler._finish_dnd); + scheduler._init_dnd_events = function(){}; +}; +scheduler._move_while_dnd = function(e){ + if (scheduler._dnd_start_lb){ + if (!document.dhx_unselectable){ + document.body.className += " dhx_unselectable"; + document.dhx_unselectable = true; + } + var lb = scheduler._get_lightbox(); + var now = (e&&e.target)?[e.pageX, e.pageY]:[event.clientX, event.clientY]; + lb.style.top = scheduler._lb_start[1]+now[1]-scheduler._dnd_start_lb[1]+"px"; + lb.style.left = scheduler._lb_start[0]+now[0]-scheduler._dnd_start_lb[0]+"px"; + } +}; +scheduler._ready_to_dnd = function(e){ + var lb = scheduler._get_lightbox(); + scheduler._lb_start = [parseInt(lb.style.left,10), parseInt(lb.style.top,10)]; + scheduler._dnd_start_lb = (e&&e.target)?[e.pageX, e.pageY]:[event.clientX, event.clientY]; +}; +scheduler._finish_dnd = function(){ + if (scheduler._lb_start){ + scheduler._lb_start = scheduler._dnd_start_lb = false; + document.body.className = document.body.className.replace(" dhx_unselectable",""); + document.dhx_unselectable = false; + } +}; +scheduler._get_lightbox=function(){ //scheduler.config.wide_form=true; if (!this._lightbox){ var d=document.createElement("DIV"); d.className="dhx_cal_light"; + if (scheduler.config.wide_form) + d.className+=" dhx_cal_light_wide"; + if (scheduler.form_blocks.recurring) + d.className+=" dhx_cal_light_rec"; + if (/msie|MSIE 6/.test(navigator.userAgent)) d.className+=" dhx_ie6"; d.style.visibility="hidden"; - d.innerHTML=this._lightbox_template; + var html = this._lightbox_template + var buttons = this.config.buttons_left; + scheduler.locale.labels["dhx_save_btn"] = scheduler.locale.labels.icon_save; + scheduler.locale.labels["dhx_cancel_btn"] = scheduler.locale.labels.icon_cancel; + scheduler.locale.labels["dhx_delete_btn"] = scheduler.locale.labels.icon_delete; + for (var i = 0; i < buttons.length; i++) + html+="
"+scheduler.locale.labels[buttons[i]]+"
"; + buttons = this.config.buttons_right; + for (var i = 0; i < buttons.length; i++) + html+="
"+scheduler.locale.labels[buttons[i]]+"
"; + + html+=""; + d.innerHTML=html; + if (scheduler.config.drag_lightbox){ + d.firstChild.onmousedown = scheduler._ready_to_dnd; + d.firstChild.onselectstart = function(){ return false; }; + d.firstChild.style.cursor = "pointer"; + scheduler._init_dnd_events(); + + } document.body.insertBefore(d,document.body.firstChild); this._lightbox=d; var sns=this.config.lightbox.sections; - var html=""; + html=""; for (var i=0; i < sns.length; i++) { var block=this.form_blocks[sns[i].type]; if (!block) continue; //ignore incorrect blocks sns[i].id="area_"+this.uid(); var button = ""; - if (sns[i].button) button = "
"+this.locale.labels["button_"+sns[i].button]+"
"; + if (sns[i].button){ + button = "
"+this.locale.labels["button_"+sns[i].button]+"
"; + } + + if (this.config.wide_form){ + html+="
"; + } html+="
"+button+this.locale.labels["section_"+sns[i].name]+"
"+block.render.call(this,sns[i]); - }; + html+="
" + } - //localization var ds=d.getElementsByTagName("div"); - ds[4].innerHTML=scheduler.locale.labels.icon_save; - ds[7].innerHTML=scheduler.locale.labels.icon_cancel; - ds[10].innerHTML=scheduler.locale.labels.icon_delete; //sections ds[1].innerHTML=html; //sizes @@ -336,5 +462,5 @@ scheduler._get_lightbox=function(){ d.style.visibility="visible"; } return this._lightbox; -} -scheduler._lightbox_template="
 
 
 
 
"; \ No newline at end of file +}; +scheduler._lightbox_template="
 
"; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/load.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/load.js index cb81b4ee2ee..6d1579862ff 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/load.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/load.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler._loaded={}; scheduler._load=function(url,from){ url=url||this._load_url; @@ -38,13 +42,14 @@ scheduler._load=function(url,from){ dhtmlxAjax.get(url,function(l){scheduler.on_load(l);}); this.callEvent("onXLS",[]); return true; -} +}; scheduler.on_load=function(loader){ this._loading=true; + var evs; if (this._process) - var evs=this[this._process].parse(loader.xmlDoc.responseText); + evs=this[this._process].parse(loader.xmlDoc.responseText); else - var evs=this._magic_parser(loader); + evs=this._magic_parser(loader); this._not_render=true; for (var i=0; i
'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js index 69fd9d50454..310f5c508fb 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.__recurring_template='
@@ -145,7 +149,7 @@ scheduler.__recurring_template=' -
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js new file mode 100644 index 00000000000..1d3e272a936 --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js @@ -0,0 +1,6 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



i hvermåned
hvermåned

gentagelse

'; + diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js index f74afa55dc1..71929e988ea 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js @@ -1,2 +1,6 @@ -scheduler.__recurring_template='



Tag eines jedenMonats
jedenMonats

Ereignissen

'; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



Tag eines jedenMonats
jedenMonats

Ereignissen

'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js new file mode 100644 index 00000000000..d3d18ab4358 --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js @@ -0,0 +1,6 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



ημέρα κάθεμήνα
κάθεμήνα

επαναλήψεις

'; + diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js index 77b3539d21a..99bb3fdbfa5 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js @@ -1,2 +1,6 @@ -scheduler.__recurring_template='



dia cada mes
cadames

occurencias

'; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



dia cada mes
cadames

occurencias

'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js index 93d4675df3b..02184e9b601 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js @@ -1,2 +1,6 @@ -scheduler.__recurring_template='



päivänä jokakuukausi
jokakuukausi

Toiston jälkeen

'; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



päivänä jokakuukausi
jokakuukausi

Toiston jälkeen

'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js index 66601553fdb..d11418acba3 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js @@ -1,2 +1,6 @@ -scheduler.__recurring_template='



jour chaquemois
chaquemois

occurrences

'; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



jour chaquemois
chaquemois

occurrences

'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js index 8c0e82b7c12..a40b63939d3 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js @@ -1,2 +1,6 @@ -scheduler.__recurring_template='



giorno ognimese
ognimese

occorenze

'; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



giorno ognimese
ognimese

occorenze

'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js new file mode 100644 index 00000000000..65078dbc0b7 --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js @@ -0,0 +1,5 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



dag hvermåned
hvermåned

forekomst

'; \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js index 4ccfb09e526..314e1b083ad 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js @@ -1,2 +1,6 @@ -scheduler.__recurring_template='



dag iederemaanden
iederemaanden

keren

'; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



dag iederemaanden
iederemaanden

keren

'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js index b11a117a507..f3f27bf4eb1 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js @@ -1,2 +1,6 @@ -scheduler.__recurring_template='



dnia ka�degomiesi�ca
ka�degomiesi�ca

wyst�pieniu/ach

'; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



dnia ka�degomiesi�ca
ka�degomiesi�ca

wyst�pieniu/ach

'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js index 665e26d7a43..c15c10cbea4 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js @@ -1 +1,5 @@ -scheduler.__recurring_template='



todo diamês
todomês

ocorrências

'; \ No newline at end of file +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



todo diamês
todomês

ocorrências

'; \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js index 1919fe21b28..0bff7bde13a 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js @@ -1,2 +1,6 @@ -scheduler.__recurring_template='



числа каждый месяц
каждый месяц

повторений

'; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



числа каждый месяц
каждый месяц

повторений

'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js index 3087f904bcb..bb16adafb12 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js @@ -1 +1,5 @@ -scheduler.__recurring_template='



dagen varmånad
varmånad

upprepningar

'; \ No newline at end of file +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



dagen varmånad
varmånad

upprepningar

'; \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js index 5b723675b69..fbe032f3e32 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js @@ -1,2 +1,6 @@ -scheduler.__recurring_template='



числа кожний місяць
кожен місяць

повторень

'; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.__recurring_template='



числа кожний місяць
кожен місяць

повторень

'; diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js index 485cd795488..f199ae683e4 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.locale={ date:{ month_full:["Январь", "Февраль", "Март", "Апрель", "Maй", "Июнь", "Июль", "Август", "Сентябрь", "Oктябрь", "Ноябрь", "Декабрь"], @@ -33,6 +37,9 @@ scheduler.locale={ description:"Описание", /*year view extension*/ - year_tab:"Год" + year_tab:"Год", + + /*week agenda view extension*/ + week_agenda_tab: "Список" } } diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js index 29da1a35bc0..1225b6ece32 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.locale={ date:{ month_full:["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], @@ -34,7 +38,10 @@ scheduler.locale={ description:"Opis", /*year view extension*/ - year_tab:"Leto" + year_tab:"Leto", + + /*week agenda view extension*/ + week_agenda_tab: "Agenda" } } diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js index 76bf908acec..bcb120831e9 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ /* Copyright DHTMLX LTD. http://www.dhtmlx.com You allowed to use this component or parts of it under GPL terms @@ -40,6 +44,9 @@ scheduler.locale={ description:"Beskrivning", /*year view extension*/ - year_tab:"År" + year_tab:"År", + + /*week agenda view extension*/ + week_agenda_tab: "Dagordning" } } \ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js new file mode 100644 index 00000000000..5548a6f0dfc --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js @@ -0,0 +1,47 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.locale={ + date:{ + month_full:["Ocak", "ubat", "Mart", "Nisan", "Mays", "Haziran", "Temmuz", "Austos", "Eyll", "Ekim", "Kasm", "Aralk"], + month_short:["Oca", "ub", "Mar", "Nis", "May", "Haz", "Tem", "Au", "Eyl", "Eki", "Kas", "Ara"], + day_full:["Pazar", "Pazartes,", "Sal", "aramba", "Perembe", "Cuma", "Cumartesi"], + day_short:["Paz", "Pts", "Sal", "ar", "Per", "Cum", "Cts"] + }, + labels:{ + dhx_cal_today_button:"Bugn", + day_tab:"Gn", + week_tab:"Hafta", + month_tab:"Ay", + new_event:"Uygun", + icon_save:"Kaydet", + icon_cancel:"ptal", + icon_details:"Detaylar", + icon_edit:"Dzenle", + icon_delete:"Sil", + confirm_closing:"",//Your changes will be lost, are your sure ? + confirm_deleting:"Etkinlik silinecek, devam?", + section_description:"Aklama", + section_time:"Zaman aral", + full_day:"Tam gn", + + /*recurring events*/ + confirm_recurring:"Tm tekrar eden etkinlikler silinecek, devam?", + section_recurring:"Etkinlii tekrarla", + button_recurring:"Pasif", + button_recurring_open:"Aktif", + + /*agenda view extension*/ + agenda_tab:"Ajanda", + date:"Tarih", + description:"Aklama", + + /*year view extension*/ + year_tab:"Yl", + + /*week agenda view extension*/ + week_agenda_tab: "Ajanda" + } +} + diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js index a7c946159e1..4009969d298 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js @@ -1,3 +1,7 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ scheduler.locale={ date:{ month_full:["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], @@ -34,7 +38,10 @@ scheduler.locale={ description:"Опис", /*year view extension*/ - year_tab:"Рік" + year_tab:"Рік", + + /*week agenda view extension*/ + week_agenda_tab: "Перелік" } } diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.css b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.css new file mode 100644 index 00000000000..8f543f20fee --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.css @@ -0,0 +1,380 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +/**Toolbar**/ + +.dhx_schedulerbar{ + background: -webkit-gradient(linear, left top, left bottom,from(#d7d7d7), to(#b7b7b7)); + background: -moz-linear-gradient(top, #d7d7d7, #b7b7b7); +} +.dhx_el_button input { + border-radius:4px; + -moz-border-radius:4px; + -webkit-border-radius:4px; + background: -webkit-gradient(linear, left top, left bottom, from(#9dbcc7),color-stop(0.4,#80a9b8),color-stop(0.6,#6799aa),to(#4f899d)); + background: -moz-linear-gradient(top, #9dbcc7, #518a9e); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.6); + font-size: 14px; + color: #ffffff; + padding: 0px 10px; + border:1px solid #636363; + -moz-box-shadow: 0px 1px #ffffff; + -webkit-box-shadow:0px 1px #ffffff; + box-shadow: 0px 1px #ffffff; +} +.add .dhx_el_button input{ + background-image: url(./imgs_mobile/add.png),-webkit-gradient(linear, left top, left bottom, from(#9dbcc7),color-stop(0.4,#80a9b8),color-stop(0.6,#6799aa),to(#4f899d)); + background-image: url(./imgs_mobile/add.png),-moz-linear-gradient(top, #9dbcc7, #518a9e); + background-position: center center; + background-repeat:no-repeat; + width:34px; +} +.dhx_schedulerbar .dhx_el_segmented{ + border-radius:4px; + -moz-border-radius:4px; + -webkit-border-radius:4px; + float:none !important; + border:1px solid #636363; + -moz-box-shadow: 0px 1px #ffffff; + -webkit-box-shadow:0px 1px #ffffff; + height:32px; +} + + +.dhx_schedulerbar .dhx_el_segmented .segment_0,.dhx_schedulerbar .dhx_el_segmented .segment_1, .dhx_schedulerbar .dhx_el_segmented .segment_N { + background: -webkit-gradient(linear, left top, left bottom, from(#f8f8f8),color-stop(0.3,#eeeeee),color-stop(0.6,#dcdcdc),to(#d5d5d5)); + background: -moz-linear-gradient(top, #f8f8f8, #d5d5d5); + +} +.dhx_schedulerbar .dhx_el_segmented .selected.segment_0 ,.dhx_schedulerbar .dhx_el_segmented .selected.segment_1, .dhx_schedulerbar .dhx_el_segmented .selected.segment_N { + background: -webkit-gradient(linear, left top, left bottom, from(#9dbcc7),color-stop(0.4,#80a9b8),color-stop(0.6,#6799aa),to(#4f899d)); + background: -moz-linear-gradient(top, #9dbcc7, #518a9e); +} +.dhx_el_segmented .segment_N, .dhx_el_segmented .selected.segment_N { + border-left: 0; +} +.dhx_schedulerbar .dhx_el_segmented div { + text-shadow: 0 1px 0 #ffffff; + font-size: 14px; + color: #757575; + border:0px; + height:30px; +} +.dhx_schedulerbar .dhx_el_segmented div.selected { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.6); + color: #ffffff; + height:30px; +} + + +.dhx_schedulerbar .dhx_el_segmented .segment_0{ + -webkit-border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-topleft: 4px; + -moz-border-radius-bottomleft: 4px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + padding:0 11px 0 14px; +} +.dhx_schedulerbar .dhx_el_segmented .segment_1{ + border-left:1px solid #ababab; + border-right:1px solid #ababab; + padding:0 11px; +} +.dhx_schedulerbar .dhx_el_segmented .segment_N{ + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + padding:0 14px 0 11px; +} + + +/**Day Events**/ + +/*scale:*/ +/*scale item container*/ +.dhx_dayevents_scale_item { + -moz-user-select:-moz-none; + border-bottom:1px solid #D4D4D4; + color:#303030; + font-family:"Helvetica World","HelveticaNeue","Helvetica Neue","HelveticaNeueRoman","Helvetica","Tahoma","Geneva","Arial",sans-serif; + white-space:nowrap; +} +/*hour container*/ +.dhx_dayevents_scale_hour{ + float: left; + text-align: center; + font-size: 16px; + vertical-align:middle; + font-weight: bold; + /*background-color:#E1E6FF;*/ + /*background-color: #EEE;*/ +} +/*scale items*/ +.dhx_dayevents_scale_top, .dhx_dayevents_scale_bottom { + font-size: 10px; + float: left; + text-align:center; +} +.dhx_dayevents_scale_top{ + border-bottom:1px dotted #D4D4D4; +} +/*minutes container*/ +.dhx_dayevents_scale_minute{ + /*background-color:#E1E6FF;*/ + background-color: #EEE; + border-right:1px dotted #D4D4D4; + float:left; +} +/*event container*/ +.dhx_dayevents_scale_event { + float:left; +} +/*event:*/ +.dhx_dayevents_event_item{ + position:absolute; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius:4px; + font-size: 12px; + background-color: #e6f8ff; + border:1px solid #78a5b4; + font-family:"Helvetica World","HelveticaNeue","Helvetica Neue","HelveticaNeueRoman","Helvetica","Tahoma","Geneva","Arial",sans-serif; + /*-moz-box-shadow: 1px 1px 1px #888; + -webkit-box-shadow: 1px 1px 1px #888; + box-shadow: 1px 1px 1px #888;*/ +} +/*toolbar*/ +.dhx_topbar{ + font-size:18px; + background: -webkit-gradient(linear, left top, left bottom, from(#fdfdfd),color-stop(0.5, #ededed), to(#c8c8c8)) !important; + background: -moz-linear-gradient(top, #fdfdfd, #c8c8c8) !important; +} + + +/**List view**/ +.dhx_list_events_item{ + position:relative; + background-color:#ffffff; +} +.dhx_list_events_item .dhx_day_title{ + height:16px; + line-height:16px; + width:75px; + position:absolute; + left:1px; + top:0px; + /*background-color: #d23530;*/ + background: #518A9E; + border-radius: 2px; + text-align:center; + -moz-border-radius: 2px; + -moz-box-shadow: 1px 1px 1px #1c2329; + -webkit-box-shadow: 1px 1px 1px #1c2329; + box-shadow: 1px 1px 1px #1c2329; + -webkit-border-radius:2px; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.6); + font-size: 14px; + color: #ffffff; +} +.dhx_list_events_item .dhx_event_marker{ + display:inline-block; + margin-left:5px; + margin-top:5px; + height:10px; + /*line-height:22px;*/ + width:10px; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius:6px; + background-color: #e6f8ff; + border:1px solid #78a5b4; + vertical-align:top; +} + +.dhx_list_events_item .dhx_event_time{ + display:inline-block; + width:70px; + font-size:16px; + padding-top:8px; +} + +.dhx_list_events_item .dhx_event_text{ + display:inline-block; + padding-left:4px; + overflow:hidden; + height:22px; + vertical-align:top; + /*width:208px;*/ + white-space:nowrap; +} + + +/**Month events**/ + +/*calendar*/ +.dhx_cal_day_num.dhx_cal_selected_day, .dhx_cal_day_num.dhx_cal_current_day.dhx_cal_selected_day{ + background: -webkit-gradient(linear, left top, left bottom, from(#a0bfc9), to(#4f899d)) !important; + background: -moz-linear-gradient(top, #a0bfc9, #4f899d); + text-shadow:0 1px 0 rgba(0, 0, 0, 0.6); +} +.dhx_cal_day_num.dhx_cal_current_day { + background: -webkit-gradient(linear, left top, left bottom, from(#bababa), to(#eeeeee)) !important; + background: -moz-linear-gradient(top, #bababa, #eeeeee); + border-color:#636363; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6); +} +.dhx_cal_day_num.dhx_cal_selected_day span{ + color:#ffffff; +} +.dhx_cal_day_num{ + position:relative; +} +.dhx_cal_day_num .day_with_events{ + position:absolute; + bottom:0px; + right:0px; + background-image:url(./imgs_mobile/event.png); + background-repeat:no-repeat; + width:12px; + height:12px; +} +.dhx_cal_day_num.dhx_cal_selected_day .day_with_events{ + background-image:url(./imgs_mobile/event_focus.png); +} +.dhx_cal_prev_button div { + background-image:url("./imgs_mobile/arrow_left.png"); + background-position:0; + width:28px; + height:29px; + top:6px; +} +.dhx_cal_next_button div { + background-image:url("./imgs_mobile/arrow_right.png"); + background-position:0; + width:28px; + height:29px; + top:6px; +} +/*events list*/ +.dhx_list_day_events_item{ + background-color:#ffffff; +} +.dhx_list_day_events_item .dhx_event_marker{ + display:inline-block; + margin-top:16px; + margin-left:5px; + height:10px; + width:10px; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius:6px; + background-color: #e6f8ff; + border:1px solid #78a5b4; +} +.dhx_list_day_events_item .dhx_event_time{ + display:inline-block; + width:auto; + height:42px; + line-height:42px; + padding-left:5px; +} + +.dhx_list_day_events_item .dhx_event_text{ + display:inline-block; + padding-left:10px; + line-height:42px; +} + +/*No events BG*/ +.no_events{ + background-image:url(./imgs_mobile/noevents.png); + background-repeat:no-repeat; +} + + +/**Selected event view**/ +.selected_event{ + width: 290px; + margin:5px; + background-color: #e6f8ff; + border:1px solid #78a5b4; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius:5px; + padding:3px 6px; +} +.selected_event .event_title{ + font-weight:bold +} +.selected_event .event_text{ + font-size:12px; +} +/*toolbar*/ +/* +.dhx_topbar.single_event{ + background: -webkit-gradient(linear, left top, left bottom,from(#d6d6d6), to(#b8b8b8)) !important; + background: -moz-linear-gradient(top, #d6d6d6, #b8b8b8) !important; +} +*/ + + +/**Editing form**/ +.dhx_el_formbutton.delete .dhx_inp_form_button{ + background: -webkit-gradient(linear, left top, left bottom, from(#f8f8f8), to(#d4d4d4)); + background: -moz-linear-gradient(top, #f8f8f8, #d4d4d4); + border-top:1px solid #888; + font-size:18px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border:1px solid #8f8f8f; + color:#606060; + text-shadow: 0 1px 0 #ffffff; + height:40px; + +} +.dhx_el_button.cancel input{ + background: -webkit-gradient(linear, left top, left bottom, from(#f8f8f8),color-stop(0.3,#eeeeee),color-stop(0.6,#dcdcdc),to(#d5d5d5)); + background: -moz-linear-gradient(top, #f8f8f8, #d5d5d5); + color:#6E6E6E; + text-shadow:0 1px 0 #FFFFFF +} +.invalid .dhx_inp_text_border{ + border-color:#cc0000; +} +.invalid .dhx_inp_list { + color:#cc0000; +} + +/*confirm*/ + + + + +.dhx_win_body{ + font-weight:bold; + color:#3f2317; + text-shadow: 0px 1px #e2d3b6; + background:url(../images/confirm_main_bgr.png); +} +.dhx_win_body .dhx_view{ + background:transparent; +} +.dhx_el_bigbutton input, .dhx_el_bigroundbutton input{ + height:40px; + line-height:40px; +} +.dhx_el_bigroundbutton input, .alert .dhx_el_bigbutton input{ + background: #83a41f; + background: -webkit-gradient(linear, left top, left bottom, from(#9dbcc7),color-stop(0.4,#80a9b8),color-stop(0.6,#6799aa),to(#4f899d)); + background: -moz-linear-gradient(top, #9dbcc7, #518a9e); +} +.dhx_el_bigroundbutton{ + padding-top:0px; +} + diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.js new file mode 100644 index 00000000000..4455ef939be --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.js @@ -0,0 +1,626 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +if (!window.scheduler){ + window.scheduler = { + config:{ + }, + templates:{ + }, + xy:{ + }, + locale:{ + } + }; +} +/*Locale*/ +if(!scheduler.locale) + scheduler.locale = {}; +scheduler.locale.labels = { + list_tab : "List", + day_tab : "Day", + month_tab : "Month", + icon_today : "Today", + icon_save : "Save", + icon_delete : "Delete event", + icon_cancel : "Cancel", + icon_edit : "Edit", + icon_back : "Back", + icon_close : "Close form", + icon_yes : "Yes", + icon_no : "No", + confirm_closing : "Your changes will be lost, are your sure ?", + confirm_deleting : "Event will be deleted permanently, are you sure?", + label_event:"Event", + label_start:"Start", + label_end:"End", + label_details:"Notes", + label_from: "from", + label_to: "to" +}; + +/*Config*/ + +/*date*/ + +scheduler.config = { + init_date : new Date(), + form_date : "%d-%m-%Y %H:%i", + xml_date : "%Y-%m-%d %H:%i", + item_date : "%d.%m.%Y", + header_date : "%d.%m.%Y", + hour_date : "%H:%i", + scale_hour : "%H", + calendar_date : "%F %Y" +}; + +scheduler.config.form_rules = { + end_date:function(value,obj){ + return (obj.start_date.valueOf() < value.valueOf()); + } +}; + +/*Dimentions*/ +scheduler.xy = { + confirm_height : 231, + confirm_width : 250, + scale_width : 45, + scale_height : 15, + list_tab:54, + day_tab:54, + month_tab:68, + icon_today : 72, + icon_save : 100, + icon_cancel : 100, + icon_edit : 100, + icon_back : 100, + list_height: 42, + month_list_height: 42 +} + +/*Templates*/ +scheduler.templates = { + selected_event : function(obj){ + var html = ""; + if(!obj.start_date) return html; + html += "
"; + html += "
"+obj.text+"
"; + if(dhx.Date.datePart(obj.start_date).valueOf()==dhx.Date.datePart(obj.end_date).valueOf()){ + var fd = dhx.i18n.dateFormatStr(obj.start_date); + var fts = dhx.i18n.timeFormatStr(obj.start_date); + var fte = dhx.i18n.timeFormatStr(obj.end_date); + html += "
"+fd+"
"; + html += "
"+scheduler.locale.labels.label_from+" "+fts+" "+scheduler.locale.labels.label_to+" "+fte+"
"; + } + else{ + var fds = dhx.i18n.longDateFormatStr(obj.start_date); + var fde = dhx.i18n.longDateFormatStr(obj.end_date); + var fts = dhx.i18n.timeFormatStr(obj.start_date); + var fte = dhx.i18n.timeFormatStr(obj.end_date); + html += "
"+scheduler.locale.labels.label_from+" "+fts+" "+fds+"
"; + html += "
"+scheduler.locale.labels.label_to+" "+fte+" "+fde+"
"; + } + if(obj.details&&obj.details!==""){ + html += "
"+scheduler.locale.labels.label_details+"
"; + html += "
"+obj.details+"
"; + } + html += "
"; + return html; + }, + calendar_event : function(date){ + return date+"
"; + }, + event_date: function(date){ + return dhx.i18n.dateFormatStr(date); + }, + event_long_date: function(date){ + return dhx.i18n.longDateFormatStr(date); + }, + event_time : function(date){ + return dhx.i18n.timeFormatStr(date); + }, + event_color : function(obj,type){ + return (obj.color?"background-color:"+obj.color:""); + }, + event_marker : function(obj,type){ + return "
"; + }, + event_title: function(obj,type){ + return "
"+type.dateStart(obj.start_date)+"
"+type.timeStart(obj.start_date)+"
"+type.marker(obj,type)+"
"+obj.text+"
"; + }, + month_event_title : function(obj,type){ + return type.marker(obj,type)+"
"+type.timeStart(obj.start_date)+"
"+obj.text+"
" + }, + day_event: function(obj,type){ + return obj.text + } +}; + +/*Views of scheduler multiview*/ +scheduler.config.views = []; + + +dhx.ready(function(){ + if (scheduler.locale&&scheduler.locale.date) + dhx.Date.Locale = scheduler.locale.date; + + if(!scheduler.config.form){ + scheduler.config.form = [ + {view:"text", label:scheduler.locale.labels.label_event, name:'text'}, + {view:"datepicker", label:scheduler.locale.labels.label_start, name:'start_date', timeSelect:1, dateFormat:scheduler.config.form_date}, + {view:"datepicker", label:scheduler.locale.labels.label_end, name:'end_date', timeSelect:1, dateFormat:scheduler.config.form_date}, + {view:"textarea", label:scheduler.locale.labels.label_details, name:'details', width:300, height:150}, + {view:"button", label:scheduler.locale.labels.icon_delete, id:'delete',type:"form" ,css:"delete"} + ]; + } + if(!scheduler.config.bottom_toolbar){ + scheduler.config.bottom_toolbar = [ + { view:"button",id:"today",label:scheduler.locale.labels.icon_today,inputWidth:scheduler.xy.icon_today, align:"left",width:scheduler.xy.icon_today+6}, + { view:"segmented", id:"buttons",selected:"list",align:"center",multiview:true, options:[ + {value:"list", label:scheduler.locale.labels.list_tab,width:scheduler.xy.list_tab}, + {value:"day", label:scheduler.locale.labels.day_tab,width:scheduler.xy.day_tab}, + {value:"month", label:scheduler.locale.labels.month_tab,width:scheduler.xy.month_tab} + ]}, + { view:"button",css:"add",id:"add", align:"right",label:"",inputWidth:42,width:50}, + { view:"label", label:"",inputWidth:42,width:50, batch:"readonly"} + ]; + } + if(!scheduler.config.day_toolbar){ + scheduler.config.day_toolbar = [ + {view:'label',id:"prev",align:"left",label:"
"}, + {view:'label',id:"date",align:"center",width:200}, + {view:'label',id:"next",align:"right",label:"
"} + ]; + } + if(!scheduler.config.selected_toolbar){ + scheduler.config.selected_toolbar = [ + {view:'button', inputWidth:scheduler.xy.icon_back, type:"prev", id:"back",align:"left",label:scheduler.locale.labels.icon_back}, + {view:'button', inputWidth:scheduler.xy.icon_edit, id:"edit",align:"right",label:scheduler.locale.labels.icon_edit} + ]; + } + if(!scheduler.config.form_toolbar){ + scheduler.config.form_toolbar = [ + {view:'button', inputWidth:scheduler.xy.icon_cancel, id:"cancel",css:"cancel",align:"left",label:scheduler.locale.labels.icon_cancel}, + {view:'button', inputWidth:scheduler.xy.icon_save, id:"save",align:"right",label:scheduler.locale.labels.icon_save} + ]; + } + + /*List types*/ + scheduler.types = { + event_list:{ + name:"EventsList", + css:"events", + cssNoEvents:"no_events", + padding:0, + height:scheduler.xy.list_height, + width:"auto", + dateStart:scheduler.templates.event_date, + timeStart:scheduler.templates.event_time, + color:scheduler.templates.event_color, + marker:scheduler.templates.event_marker, + template:scheduler.templates.event_title + }, + day_event_list:{ + name:"DayEventsList", + css:"day_events", + cssNoEvents:"no_events", + padding:0, + height:scheduler.xy.month_list_height, + width:"auto", + timeStart:scheduler.templates.event_time, + color:scheduler.templates.event_color, + marker:scheduler.templates.event_marker, + template:scheduler.templates.month_event_title + } + }; + + dhx.Type(dhx.ui.list, scheduler.types.event_list); + dhx.Type(dhx.ui.list, scheduler.types.day_event_list); + + dhx.DataDriver.scheduler = { + records:"/*/event" + }; + dhx.extend(dhx.DataDriver.scheduler,dhx.DataDriver.xml); + + /*the views of scheduler multiview*/ + var views = [ + { + id:"list", + view:"list", + type:"EventsList", + startDate:new Date() + }, + { + id:"day", + rows:[ + { + id:"dayBar", + view:"toolbar", + css:"dhx_topbar", + elements: scheduler.config.day_toolbar + }, + { + id:"dayList", + view:"dayevents" + } + ] + }, + { + id:"month", + rows:[ + { + id:"calendar", + view:"calendar", + dayWithEvents: scheduler.templates.calendar_event, + calendarHeader:scheduler.config.calendar_date + }, + { + id:"calendarDayEvents", + view:"list", + type:"DayEventsList" + } + ] + + }, + { + id:"event", + animate:{ + type:"slide", + subtype:"in", + direction:"top" + }, + rows:[ + { + id:"eventBar", + view:"toolbar", + type:"TopBar", + css:"single_event", + elements: scheduler.config.selected_toolbar + }, + { + id:"eventTemplate", + view:"template", + template:scheduler.templates.selected_event + } + + ] + }, + { + id:"form", + rows:[ + { + id:"editBar", + view:"toolbar", + type:"TopBar", + elements:scheduler.config.form_toolbar + }, + { + id:"editForm", + view:"form", + elements: scheduler.config.form, + rules: scheduler.config.form_rules + } + ] + } + ].concat(scheduler.config.views); + + dhx.protoUI({ + name:"scheduler", + defaults:{ + rows:[ + { + view:"multiview", + id:"views", + cells: views + }, + { + view:"toolbar", + id:"bottomBar", + type:"SchedulerBar", + visibleBatch:"default", + elements: scheduler.config.bottom_toolbar + } + ], + color:"#color#", + textColor:"#textColor#" + }, + $init: function() { + this.name = "Scheduler"; + this._viewobj.className += " dhx_scheduler"; + /*date format functions*/ + dhx.i18n.dateFormat = scheduler.config.item_date; + dhx.i18n.timeFormat = scheduler.config.hour_date; + dhx.i18n.fullDateFormat = scheduler.config.xml_date; + dhx.i18n.headerFormatStr = dhx.Date.dateToStr( scheduler.config.header_date); + dhx.i18n.setLocale(); + this.data.provideApi(this); + this.data.extraParser = dhx.bind(function(data){ + data.start_date = dhx.i18n.fullDateFormatDate(data.start_date); + data.end_date = dhx.i18n.fullDateFormatDate(data.end_date); + },this); + this.$ready.push(this._initStructure); + this.data.attachEvent("onStoreUpdated", dhx.bind(this._sortDates,this)); + }, + _initStructure:function(){ + this._initToolbars(); + this._initmonth(); + + //store current date + this.coreData = new dhx.DataValue(); + this.coreData.setValue(scheduler.config.init_date); + + this.$$("dayList").define("date",this.coreData); + + this.selectedEvent = new dhx.DataRecord(); + + if(this.config.readonly){ + this.define("readonly",this.config.readonly); + } + else if(scheduler.config.readonly) + this.define("readonly",true); + /*saving data*/ + if(this.config.save){ + var dp = new dhx.DataProcessor({ + master:this, + url:this.config.save + }); + dp.attachEvent("onBeforeDataSend",this._onSchedulerUpdate); + } + + if(this.$$("date")) + this.$$("date").bind(this.coreData, null, dhx.i18n.headerFormatStr); + + + this.$$("list").sync(this); + this.$$("list").bind(this.coreData, function(target, source){ + return source < target.end_date; + }); + + this.$$("dayList").sync(this, true); + this.$$("dayList").bind(this.coreData, function(target, source){ + var d = dhx.Date.datePart(source); + return d < target.end_date && dhx.Date.add(d,1,"day") > target.start_date; + }); + + this.$$("calendar").bind(this.coreData); + + this.$$("calendarDayEvents").sync(this, true); + this.$$("calendarDayEvents").bind(this.coreData, function(target, source){ + var d = dhx.Date.datePart(source); + return d < target.end_date && dhx.Date.add(d,1,"day") > target.start_date; + }); + + this.$$("eventTemplate").bind(this); + this.$$("editForm").bind(this); + + this.$$("list").attachEvent("onItemClick", dhx.bind(this._on_event_clicked, this)); + this.$$("dayList").attachEvent("onItemClick", dhx.bind(this._on_event_clicked, this)); + this.$$("calendarDayEvents").attachEvent("onItemClick", dhx.bind(this._on_event_clicked, this)); + }, + _on_event_clicked:function(id){ + this.setCursor(id); + this.$$('event').show(); + }, + /*Sorts dates asc, gets hash of dates with event*/ + _sortDates:function(){ + this.data.blockEvent(); + this.data.sort(function(a,b){ + return a.start_date < b.start_date?1:-1; + }); + this.data.unblockEvent(); + this._eventsByDate = {}; + var evs = this.data.getRange(); + for(var i = 0; i < evs.length;i++) + this._setDateEvents(evs[i]); + }, + /*Month Events view: gets dates of a certain event*/ + _setDateEvents:function(ev){ + var start = dhx.Date.datePart(ev.start_date); + var end = dhx.Date.datePart(ev.end_date); + if(ev.end_date.valueOf()!=end.valueOf()) + end = dhx.Date.add(end,1,"day"); + while(startscheduler._props[name].options.length){ + scheduler._props[name]._original_size = size; + size = 0; + } + scheduler._props[name].size = size; + scheduler._props[name].skip_incorrect = skip_incorrect||false; + scheduler.date[name+"_start"]= scheduler.date.day_start; scheduler.templates[name+"_date"] = function(date){ return scheduler.templates.day_date(date); - } + }; + scheduler.templates[name+"_scale_date"] = function(date){ + var list = scheduler._props[name].options; if (!list.length) return ""; var index = (scheduler._props[name].position||0)+Math.floor((scheduler._correct_shift(date.valueOf(),1)-scheduler._min_date.valueOf())/(60*60*24*1000)); if (list[index].css) return ""+list[index].label+""; else return list[index].label; - } - scheduler.date["add_"+name]=function(date,inc){ return scheduler.date.add(date,inc,"day"); } - scheduler.date["get_"+name+"_end"]=function(date){ return scheduler.date.add(date,size||list.length,"day"); } - - scheduler._props[name]={map_to:property, options:list, size:size, step:step, position:0 }; + }; + + scheduler.date["add_"+name]=function(date,inc){ return scheduler.date.add(date,inc,"day"); }; + scheduler.date["get_"+name+"_end"]=function(date){ + return scheduler.date.add(date,scheduler._props[name].size||scheduler._props[name].options.length,"day"); + }; scheduler.attachEvent("onOptionsLoad",function(){ - var order = scheduler._props[name].order = {}; + var pr = scheduler._props[name]; + var order = pr.order = {}; + var list = pr.options; for(var i=0; i list.length) { + pr._original_size = pr.size; + pr.size = 0; + } + else + pr.size = pr._original_size||pr.size; + if (scheduler._date && scheduler._mode == name) scheduler.setCurrentView(scheduler._date, scheduler._mode); }); scheduler.callEvent("onOptionsLoad",[]); @@ -40,8 +69,31 @@ scheduler.scrollUnit=function(step){ this.update_view(); } }; - (function(){ + var _removeIncorrectEvents = function(evs) { + var pr = scheduler._props[scheduler._mode]; + if(pr && pr.order && pr.skip_incorrect) { + var correct_events = []; + for(var i=0; i= pr.size+pr.position ) - return false; + var val = pr.order[e[pr.map_to]]; + if (val < pr.position || val >= pr.size+pr.position ) + return false; } } return res; - } - + }; scheduler._reset_scale = function(){ var pr = scheduler._props[this._mode]; var ret = t.apply(this,arguments); @@ -106,7 +157,7 @@ scheduler.scrollUnit=function(step){ } return ret; - } + }; var r = scheduler._get_event_sday; scheduler._get_event_sday=function(ev){ var pr = scheduler._props[this._mode]; @@ -115,7 +166,7 @@ scheduler.scrollUnit=function(step){ return pr.order[ev[pr.map_to]]-pr.position; } return r.call(this,ev); - } + }; var l = scheduler.locate_holder_day; scheduler.locate_holder_day=function(a,b,ev){ var pr = scheduler._props[this._mode]; @@ -124,23 +175,25 @@ scheduler.scrollUnit=function(step){ return pr.order[ev[pr.map_to]]*1+(b?1:0)-pr.position; } return l.apply(this,arguments); - } + }; var p = scheduler._mouse_coords; scheduler._mouse_coords=function(){ var pr = scheduler._props[this._mode]; var pos=p.apply(this,arguments); if (pr){ + if(!this._drag_event) this._drag_event = {}; var ev = this._drag_event; - if (this._drag_id){ + if (this._drag_id && this._drag_mode){ ev = this.getEvent(this._drag_id); this._drag_event._dhx_changed = true; } var unit_ind = Math.min(pos.x+pr.position,pr.options.length-1); ev[pr.map_to]=pr.options[unit_ind].key; - pos.x = unit_ind/10000000; + pos.x = 0; + pos.custom = true; } return pos; - } + }; var o = scheduler._time_order; scheduler._time_order = function(evs){ var pr = scheduler._props[this._mode]; @@ -150,8 +203,7 @@ scheduler.scrollUnit=function(step){ }); } else o.apply(this,arguments); - } - + }; scheduler.attachEvent("onEventAdded",function(id,ev){ if (this._loading) return true; for (var a in scheduler._props){ @@ -160,7 +212,7 @@ scheduler.scrollUnit=function(step){ ev[pr.map_to] = pr.options[0].key; } return true; - }) + }); scheduler.attachEvent("onEventCreated",function(id,n_ev){ var pr = scheduler._props[this._mode]; if (pr){ @@ -170,6 +222,20 @@ scheduler.scrollUnit=function(step){ this.event_updated(ev); } return true; - }) - -})(); \ No newline at end of file + }) +})(); + + +/* just in case, there shouldn't be any need for this + + scheduler.getUnitSection = function(event_id) { + var ev = scheduler.getEvent(event_id); + var options = scheduler._props['unit'].options; + var section; + for(var i=0; ifrom) - result.push(sev[i]); - } else if (!ev.event_pid || ev.event_pid==0){ + for (var i=0; i < sev.length; i++) { + // if event is in rec_markers then it will be checked by himself, here need to skip it + if (!sev[i].rec_pattern && sev[i].start_datefrom && !this._rec_markers[sev[i].id]) { + result.push(sev[i]); + } + } + } else if (ev.id.toString().indexOf("#")==-1){ // if it's virtual event we can skip it result.push(ev); } } @@ -585,7 +628,7 @@ scheduler.getEvents = function(from,to){ scheduler.config.repeat_date="%m.%d.%Y"; scheduler.config.lightbox.sections=[ {name:"description", height:130, map_to:"text", type:"textarea" , focus:true}, - {name:"recurring", height:115, type:"recurring", map_to:"rec_type", button:"recurring"}, + {name:"recurring", type:"recurring", map_to:"rec_type", button:"recurring"}, {name:"time", height:72, type:"time", map_to:"auto"} ]; //drop secondary attributes diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html index 3d351383fc9..078f4415777 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html @@ -49,7 +49,7 @@

occurrences
-
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html index 222bb5f6e6c..c47f485b80f 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html @@ -49,7 +49,7 @@

次结束
-
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html index ae9dbb3cabf..bb70c5aac79 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html @@ -52,7 +52,7 @@

Ereignissen
-
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html new file mode 100644 index 00000000000..eddddee99aa --- /dev/null +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html @@ -0,0 +1,57 @@ +
+
+
+
+
+
+ +
+
+
+ + +
+ ημέρα κάθεμήνα
+ κάθεμήνα
+
+ +
+
+
+
+ επαναλήψεις
+
+
+
+
+
+
\ No newline at end of file diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html index bcfcf2e81ea..94549432bc8 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html @@ -49,7 +49,7 @@

occurencias
-
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html index 65313e6314b..281dbe7afc4 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html @@ -49,7 +49,7 @@

occurrences
-
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html index e55c7ebc2bc..1d92cb4d420 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html @@ -49,7 +49,7 @@

occorenze
-
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html index 14f32c7f2ef..d9e563191f6 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html @@ -57,7 +57,7 @@

keren
-
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html index 6b521212eb0..becab2809c7 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html @@ -49,7 +49,7 @@

повторений
-
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js index b14592a050b..80018266f24 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js @@ -1,8 +1,14 @@ -window.dhtmlXScheduler=window.scheduler={version:2.2}; +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +window.dhtmlXScheduler=window.scheduler={version:3.0}; dhtmlxEventable(scheduler); scheduler.init=function(id,date,mode){ date=date||(new Date()); mode=mode||"week"; + + scheduler.date.init(); this._obj=(typeof id == "string")?document.getElementById(id):id; this._els=[]; @@ -19,9 +25,9 @@ scheduler.init=function(id,date,mode){ if (scheduler.callEvent("onSchedulerResize",[])) scheduler.update_view(); }, 100); - }) - + }); this.set_sizes(); + scheduler.callEvent('onSchedulerReady', []); this.setCurrentView(date,mode); }; scheduler.xy={ @@ -57,7 +63,7 @@ scheduler.set_sizes=function(){ var data_y=this.xy.scale_height+this.xy.nav_height+(this._quirks?-2:0); this.set_xy(this._els["dhx_cal_data"][0],w,h-(data_y+2),0,data_y+2); -} +}; scheduler.set_xy=function(node,w,h,x,y){ node.style.width=Math.max(0,w)+"px"; node.style.height=Math.max(0,h)+"px"; @@ -65,7 +71,7 @@ scheduler.set_xy=function(node,w,h,x,y){ node.style.left=x+"px"; node.style.top=y+"px"; } -} +}; scheduler.get_elements=function(){ //get all child elements as named hash var els=this._obj.getElementsByTagName("DIV"); @@ -78,26 +84,26 @@ scheduler.get_elements=function(){ var t=scheduler.locale.labels[els[i].getAttribute("name")||name]; if (t) els[i].innerHTML=t; } -} +}; scheduler.set_actions=function(){ for (var a in this._els) if (this._click[a]) for (var i=0; i < this._els[a].length; i++) this._els[a][i].onclick=scheduler._click[a]; - this._obj.onselectstart=function(e){ return false; } + this._obj.onselectstart=function(e){ return false; }; this._obj.onmousemove=function(e){ scheduler._on_mouse_move(e||event); - } + }; this._obj.onmousedown=function(e){ scheduler._on_mouse_down(e||event); - } + }; this._obj.onmouseup=function(e){ scheduler._on_mouse_up(e||event); - } + }; this._obj.ondblclick=function(e){ scheduler._on_dbl_click(e||event); } -} +}; scheduler.select=function(id){ if (this._table_view || !this.getEvent(id)._timed) return; //temporary block if (this._select_id==id) return; @@ -105,13 +111,13 @@ scheduler.select=function(id){ this.unselect(); this._select_id = id; this.updateEvent(id); -} +}; scheduler.unselect=function(id){ if (id && id!=this._select_id) return; var t=this._select_id; this._select_id = null; if (t) this.updateEvent(t); -} +}; scheduler.getState=function(){ return { mode: this._mode, @@ -119,11 +125,13 @@ scheduler.getState=function(){ min_date: this._min_date, max_date: this._max_date, editor_id: this._edit_id, - lightbox_id: this._lightbox_id + lightbox_id: this._lightbox_id, + new_event: this._new_event }; -} +}; scheduler._click={ dhx_cal_data:function(e){ + //debugger; var trg = e?e.target:event.srcElement; var id = scheduler._locate_event(trg); @@ -149,7 +157,8 @@ scheduler._click={ scheduler.setCurrentView(new Date()); }, dhx_cal_tab:function(){ - var mode = this.getAttribute("name").split("_")[0]; + var name = this.getAttribute("name"); + var mode = name.substring(0, name.search("_tab")); scheduler.setCurrentView(scheduler._date,mode); }, buttons:{ @@ -159,11 +168,10 @@ scheduler._click={ details:function(id){ scheduler.showLightbox(id); }, cancel:function(id){ scheduler.editStop(false); } } -} - +}; scheduler.addEventNow=function(start,end,e){ var base = {}; - if (typeof start == "object"){ + if (start && start.constructor.toString().match(/object/i) !== null){ base = start; start = null; } @@ -179,14 +187,18 @@ scheduler.addEventNow=function(start,end,e){ } end = start+d; } - - + var end_date = new Date(end); + + // scheduler.addEventNow(new Date(), new Date()) + collision though get_visible events defect (such event was not retrieved) + if(start_date.valueOf() == end_date.valueOf()) + end_date.setTime(end_date.valueOf()+d); + base.start_date = base.start_date||start_date; - base.end_date = base.end_date||new Date(end); + base.end_date = base.end_date||end_date; base.text = base.text||this.locale.labels.new_event; base.id = this._drag_id = this.uid(); this._drag_mode="new-size"; - + this._loading=true; this.addEvent(base); this.callEvent("onEventCreated",[this._drag_id,e]); @@ -194,7 +206,7 @@ scheduler.addEventNow=function(start,end,e){ this._drag_event={}; //dummy , to trigger correct event updating logic this._on_mouse_up(e); -} +}; scheduler._on_dbl_click=function(e,src){ src = src||(e.target||e.srcElement); if (this.config.readonly) return; @@ -203,6 +215,7 @@ scheduler._on_dbl_click=function(e,src){ case "dhx_scale_holder": case "dhx_scale_holder_now": case "dhx_month_body": + case "dhx_wa_day_data": if (!scheduler.config.dblclick_create) break; var pos=this._mouse_coords(e); var start=this._min_date.valueOf()+(pos.y*this.config.time_step+(this._table_view?0:pos.x)*24*60)*60000; @@ -210,6 +223,7 @@ scheduler._on_dbl_click=function(e,src){ this.addEventNow(start,null,e); break; case "dhx_body": + case "dhx_wa_ev_body": case "dhx_cal_event_line": case "dhx_cal_event_clear": var id = this._locate_event(src); @@ -227,7 +241,7 @@ scheduler._on_dbl_click=function(e,src){ if (t) t.call(this,e); break; } -} +}; scheduler._mouse_coords=function(ev){ var pos; @@ -238,17 +252,17 @@ scheduler._mouse_coords=function(ev){ else pos={ x:ev.clientX + (b.scrollLeft||d.scrollLeft||0) - b.clientLeft, y:ev.clientY + (b.scrollTop||d.scrollTop||0) - b.clientTop - } + }; //apply layout pos.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width); pos.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els["dhx_cal_data"][0].scrollTop; pos.ev = ev; - + var handler = this["mouse_"+this._mode]; if (handler) return handler.call(this,pos); - + //transform to date if (!this._table_view){ pos.x=Math.max(0,Math.ceil(pos.x/this._cols[0])-1); @@ -258,7 +272,7 @@ scheduler._mouse_coords=function(ev){ for (dy=1; dy < this._colsS.heights.length; dy++) if (this._colsS.heights[dy]>pos.y) break; - pos.y=(Math.max(0,Math.ceil(pos.x/this._cols[0])-1)+Math.max(0,dy-1)*7)*24*60/this.config.time_step; + pos.y=(Math.max(0,Math.ceil(pos.x/this._cols[0])-1)+Math.max(0,dy-1)*7)*24*60/this.config.time_step; pos.x=0; } @@ -270,14 +284,14 @@ scheduler._close_not_saved=function(){ if (!c || confirm(c)) scheduler.editStop(scheduler.config.positive_closing); } -} +}; scheduler._correct_shift=function(start, back){ return start-=((new Date(scheduler._min_date)).getTimezoneOffset()-(new Date(start)).getTimezoneOffset())*60000*(back?-1:1); -} +}; scheduler._on_mouse_move=function(e){ if (this._drag_mode){ var pos=this._mouse_coords(e); - if (!this._drag_pos || this._drag_pos.x!=pos.x || this._drag_pos.y!=pos.y){ + if (!this._drag_pos || pos.custom || this._drag_pos.x!=pos.x || this._drag_pos.y!=pos.y){ if (this._edit_id!=this._drag_id) this._close_not_saved(); @@ -316,8 +330,11 @@ scheduler._on_mouse_move=function(e){ end = ev.end_date.valueOf()-(ev.start_date.valueOf()-start); } else { start = ev.start_date.valueOf(); - if (this._table_view) + if (this._table_view) { end = this._min_date.valueOf()+pos.y*this.config.time_step*60000 + (pos.custom?0:24*60*60000); + if (this._mode == "month") + end = this._correct_shift(end, false); + } else{ end = this.date.date_part(new Date(ev.end_date)).valueOf()+pos.y*this.config.time_step*60000; this._els["dhx_cal_data"][0].style.cursor="s-resize"; @@ -327,7 +344,7 @@ scheduler._on_mouse_move=function(e){ if (this._drag_mode == "new-size"){ if (end <= this._drag_start){ var shift = pos.shift||((this._table_view && !pos.custom)?24*60*60000:0); - start = end-shift; + start = end-(pos.shift?0:shift); end = this._drag_start+(shift||(this.config.time_step*60000)); } else { start = this._drag_start; @@ -339,7 +356,7 @@ scheduler._on_mouse_move=function(e){ var new_end = new Date(end-1); var new_start = new Date(start); //prevent out-of-borders situation for day|week view - if (this._table_view || (new_end.getDate()==new_start.getDate() && new_end.getHours() this._min_date && now.getHours() >= this.config.first_hour && now.getHours()
" + html+=">
"+this.templates.month_day(sd)+"
"; sd=this.date.add(sd,1,"day"); } html+=""; @@ -625,7 +683,7 @@ scheduler._reset_month_scale=function(b,dd,sd){ b.innerHTML=html; return sd; -} +}; scheduler.getLabel = function(property, key) { var sections = this.config.lightbox.sections; for (var i=0; i Date: Wed, 3 Aug 2011 16:42:44 +0200 Subject: [PATCH 695/831] [REN] client action member 'kwargs' to 'params' bzr revid: xmo@openerp.com-20110803144244-86s098uqcamwatde --- addons/base/static/src/js/views.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index 94ae1325b83..e10add1c8c0 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -96,7 +96,7 @@ openerp.base.ActionManager = openerp.base.Controller.extend({ }, 'ir.actions.client': function (action) { var Handler = openerp.base.client_actions.get_object(action.tag); - new Handler(this, this.element_id, action['kwargs']).start(); + new Handler(this, this.element_id, action.params).start(); }, close_dialog: function () { if (this.current_dialog) { From be1a6596582c18f879fca9a5adcc0a86774b8363 Mon Sep 17 00:00:00 2001 From: Launchpad Translations on behalf of openerp <> Date: Thu, 4 Aug 2011 04:34:56 +0000 Subject: [PATCH 696/831] Launchpad automatic translations update. bzr revid: launchpad_translations_on_behalf_of_openerp-20110803043726-ofn4l3px2ooldl00 bzr revid: launchpad_translations_on_behalf_of_openerp-20110804043456-fnef8uwgur5od0en --- addons/account_cancel/i18n/sv.po | 13 +- addons/association/i18n/sv.po | 12 +- addons/base_action_rule/i18n/sv.po | 12 +- addons/base_calendar/i18n/sv.po | 38 ++-- addons/base_module_record/i18n/sv.po | 10 +- addons/base_synchro/i18n/sv.po | 10 +- addons/board/i18n/sv.po | 10 +- addons/caldav/i18n/sv.po | 24 +-- addons/crm/i18n/sv.po | 14 +- addons/email_template/i18n/sv.po | 10 +- addons/event/i18n/ru.po | 236 +++++++++++++------------ addons/mrp/i18n/sv.po | 24 +-- addons/mrp_operations/i18n/sv.po | 52 +++--- addons/mrp_repair/i18n/sv.po | 10 +- addons/multi_company/i18n/sv.po | 23 ++- addons/point_of_sale/i18n/sv.po | 10 +- addons/procurement/i18n/sv.po | 20 +-- addons/project_scrum/i18n/sv.po | 10 +- addons/purchase/i18n/sv.po | 10 +- addons/report_webkit_sample/i18n/fi.po | 143 +++++++++++++++ 20 files changed, 433 insertions(+), 258 deletions(-) create mode 100644 addons/report_webkit_sample/i18n/fi.po diff --git a/addons/account_cancel/i18n/sv.po b/addons/account_cancel/i18n/sv.po index 1352a70a600..bfcb0a95084 100644 --- a/addons/account_cancel/i18n/sv.po +++ b/addons/account_cancel/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-11-24 09:29+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-01 23:18+0000\n" +"Last-Translator: Magnus Brandt (mba), Aspirix AB \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:46+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-03 04:37+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: account_cancel #: model:ir.module.module,description:account_cancel.module_meta_information @@ -25,6 +25,11 @@ msgid "" "journal. If set to true it allows user to cancel entries & invoices.\n" " " msgstr "" +"\n" +" Modulen lägger till 'Tillåt ändrande poster' fält på fomulärvyn av " +"kontojournalen. Om satt till sant tillåter den att användaren\n" +" avbryter verifikat och fakturor.\n" +" " #. module: account_cancel #: model:ir.module.module,shortdesc:account_cancel.module_meta_information diff --git a/addons/association/i18n/sv.po b/addons/association/i18n/sv.po index fc7da345b3e..3077049bcaf 100644 --- a/addons/association/i18n/sv.po +++ b/addons/association/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2011-01-24 22:40+0000\n" -"Last-Translator: Magnus Brandt (mba), Aspirix AB \n" +"PO-Revision-Date: 2011-08-01 23:35+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:51+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-03 04:37+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: association #: field:profile.association.config.install_modules_wizard,wiki:0 @@ -24,7 +24,7 @@ msgstr "Wiki" #. module: association #: view:profile.association.config.install_modules_wizard:0 msgid "Event Management" -msgstr "" +msgstr "Evenemangsledning" #. module: association #: field:profile.association.config.install_modules_wizard,project_gtd:0 @@ -93,7 +93,7 @@ msgstr "" #. module: association #: field:profile.association.config.install_modules_wizard,hr_expense:0 msgid "Expenses Tracking" -msgstr "" +msgstr "Kostnadsuppföljning" #. module: association #: model:ir.actions.act_window,name:association.action_config_install_module diff --git a/addons/base_action_rule/i18n/sv.po b/addons/base_action_rule/i18n/sv.po index 1470baadd91..cf6d5af0b2d 100644 --- a/addons/base_action_rule/i18n/sv.po +++ b/addons/base_action_rule/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-12-20 04:26+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 23:30+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:51+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: base_action_rule #: help:base.action.rule,act_mail_to_user:0 @@ -135,7 +135,7 @@ msgstr "%(object_subject) = Objekt ämnen" #. module: base_action_rule #: view:base.action.rule:0 msgid "Email Reminders" -msgstr "" +msgstr "Epost påminnelser" #. module: base_action_rule #: view:base.action.rule:0 @@ -258,7 +258,7 @@ msgstr "" #. module: base_action_rule #: field:base.action.rule,act_email_to:0 msgid "Email To" -msgstr "" +msgstr "Skicka mail till" #. module: base_action_rule #: help:base.action.rule,act_mail_to_watchers:0 diff --git a/addons/base_calendar/i18n/sv.po b/addons/base_calendar/i18n/sv.po index 08b19ffb938..3ac4e57751f 100644 --- a/addons/base_calendar/i18n/sv.po +++ b/addons/base_calendar/i18n/sv.po @@ -8,25 +8,25 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-12-11 12:17+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 23:11+0000\n" +"Last-Translator: Magnus Brandt (mba), Aspirix AB \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:50+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: base_calendar #: selection:calendar.alarm,trigger_related:0 #: selection:res.alarm,trigger_related:0 msgid "The event starts" -msgstr "" +msgstr "Evenemanget börjar" #. module: base_calendar #: selection:base.calendar.set.exrule,freq:0 msgid "Hourly" -msgstr "" +msgstr "Varje timme" #. module: base_calendar #: view:calendar.attendee:0 @@ -120,7 +120,7 @@ msgstr "Visa som" #: field:calendar.todo,day:0 #: selection:calendar.todo,select1:0 msgid "Date of month" -msgstr "" +msgstr "Månadens datum" #. module: base_calendar #: selection:calendar.event,class:0 @@ -141,6 +141,7 @@ msgid "March" msgstr "Mars" #. module: base_calendar +#: code:addons/base_calendar/base_calendar.py:414 #: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:90 #, python-format msgid "Warning !" @@ -172,7 +173,7 @@ msgstr "Alternativ" #: selection:calendar.todo,show_as:0 #: selection:res.users,availability:0 msgid "Free" -msgstr "" +msgstr "Fri" #. module: base_calendar #: help:calendar.attendee,rsvp:0 @@ -258,7 +259,7 @@ msgid "Invitation Detail" msgstr "" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1356 +#: code:addons/base_calendar/base_calendar.py:1355 #: code:addons/base_calendar/wizard/base_calendar_invite_attendee.py:96 #: code:addons/base_calendar/wizard/base_calendar_invite_attendee.py:143 #: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:128 @@ -281,7 +282,7 @@ msgstr "" #: selection:calendar.event,state:0 #: selection:calendar.todo,state:0 msgid "Cancelled" -msgstr "" +msgstr "Avbruten" #. module: base_calendar #: selection:calendar.alarm,trigger_interval:0 @@ -307,7 +308,7 @@ msgstr "" #. module: base_calendar #: selection:base.calendar.set.exrule,freq:0 msgid "Secondly" -msgstr "" +msgstr "För det andra" #. module: base_calendar #: field:calendar.alarm,event_date:0 @@ -352,7 +353,7 @@ msgstr "År" #: field:calendar.alarm,event_end_date:0 #: field:calendar.attendee,event_end_date:0 msgid "Event End Date" -msgstr "" +msgstr "Evenemangets slutdatum" #. module: base_calendar #: selection:calendar.attendee,role:0 @@ -367,8 +368,8 @@ msgstr "" #. module: base_calendar #: code:addons/base_calendar/base_calendar.py:385 +#: code:addons/base_calendar/base_calendar.py:1088 #: code:addons/base_calendar/base_calendar.py:1090 -#: code:addons/base_calendar/base_calendar.py:1092 #, python-format msgid "Warning!" msgstr "Varning!" @@ -418,7 +419,7 @@ msgstr "" #: selection:calendar.alarm,trigger_occurs:0 #: selection:res.alarm,trigger_occurs:0 msgid "Before" -msgstr "" +msgstr "Före" #. module: base_calendar #: view:calendar.event:0 @@ -481,7 +482,7 @@ msgstr "" #: selection:calendar.event,select1:0 #: selection:calendar.todo,select1:0 msgid "Day of month" -msgstr "" +msgstr "Dag i månaden" #. module: base_calendar #: view:calendar.event:0 @@ -589,7 +590,7 @@ msgstr "Tor" #. module: base_calendar #: field:calendar.attendee,child_ids:0 msgid "Delegrated To" -msgstr "" +msgstr "Delegerad till" #. module: base_calendar #: view:calendar.attendee:0 @@ -828,7 +829,7 @@ msgid "Hours" msgstr "Timmar" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1092 +#: code:addons/base_calendar/base_calendar.py:1090 #, python-format msgid "Count can not be Negative" msgstr "" @@ -878,7 +879,6 @@ msgstr "Påminnelse" #. module: base_calendar #: view:base.calendar.set.exrule:0 -#: model:ir.actions.act_window,name:base_calendar.action_base_calendar_set_exrule #: model:ir.model,name:base_calendar.model_base_calendar_set_exrule msgid "Set Exrule" msgstr "" @@ -1060,7 +1060,7 @@ msgid "Wednesday" msgstr "Onsdag" #. module: base_calendar -#: code:addons/base_calendar/base_calendar.py:1090 +#: code:addons/base_calendar/base_calendar.py:1088 #, python-format msgid "Interval can not be Negative" msgstr "" diff --git a/addons/base_module_record/i18n/sv.po b/addons/base_module_record/i18n/sv.po index 70c3ed4c513..82061d81f2d 100644 --- a/addons/base_module_record/i18n/sv.po +++ b/addons/base_module_record/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-12-02 09:02+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 23:19+0000\n" +"Last-Translator: Magnus Brandt (mba), Aspirix AB \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:01+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,info,category:0 @@ -73,7 +73,7 @@ msgstr "ir.module.record" #. module: base_module_record #: selection:base_module_record.module_record_objects,info,data_kind:0 msgid "Demo Data" -msgstr "" +msgstr "Testdata" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,save,module_filename:0 diff --git a/addons/base_synchro/i18n/sv.po b/addons/base_synchro/i18n/sv.po index 4918f90c413..9619c34e6cf 100644 --- a/addons/base_synchro/i18n/sv.po +++ b/addons/base_synchro/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-12-01 09:43+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 23:26+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:52+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: base_synchro #: model:ir.actions.act_window,name:base_synchro.action_view_base_synchro @@ -244,7 +244,7 @@ msgstr "Sekvens" msgid "" "The synchronisation has been started.You will receive a request when it's " "done." -msgstr "" +msgstr "Synkroniseringen har startat. Du kommer få ett svar när den är klar." #. module: base_synchro #: field:base.synchro.server,server_port:0 diff --git a/addons/board/i18n/sv.po b/addons/board/i18n/sv.po index c80366f6096..de7d5cbc422 100644 --- a/addons/board/i18n/sv.po +++ b/addons/board/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-12-15 01:56+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 23:18+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:29+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: board #: view:res.log.report:0 @@ -47,7 +47,7 @@ msgstr "Instrumentpanel huvudmodul" #. module: board #: view:res.users:0 msgid "Latest Connections" -msgstr "" +msgstr "Senaste anslutningarna" #. module: board #: code:addons/board/wizard/board_menu_create.py:45 diff --git a/addons/caldav/i18n/sv.po b/addons/caldav/i18n/sv.po index 2331013b642..29ae3796eb5 100644 --- a/addons/caldav/i18n/sv.po +++ b/addons/caldav/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2010-12-03 07:37+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 22:58+0000\n" +"Last-Translator: Magnus Brandt (mba), Aspirix AB \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:52+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: caldav #: view:basic.calendar:0 @@ -64,8 +64,8 @@ msgid "Can not map a field more than once" msgstr "" #. module: caldav -#: code:addons/caldav/calendar.py:772 -#: code:addons/caldav/calendar.py:861 +#: code:addons/caldav/calendar.py:787 +#: code:addons/caldav/calendar.py:877 #: code:addons/caldav/wizard/calendar_event_import.py:63 #, python-format msgid "Warning !" @@ -108,7 +108,7 @@ msgid "Ok" msgstr "Ok" #. module: caldav -#: code:addons/caldav/calendar.py:861 +#: code:addons/caldav/calendar.py:877 #, python-format msgid "Please provide proper configuration of \"%s\" in Calendar Lines" msgstr "" @@ -218,7 +218,7 @@ msgid "Use the field" msgstr "Använd fältet" #. module: caldav -#: code:addons/caldav/calendar.py:772 +#: code:addons/caldav/calendar.py:787 #, python-format msgid "Can not create line \"%s\" more than once" msgstr "Kan inte skapa raden \"%s\" mer än en gång" @@ -290,7 +290,7 @@ msgid "Save in .ics format" msgstr "Spara i .ics format" #. module: caldav -#: code:addons/caldav/calendar.py:1275 +#: code:addons/caldav/calendar.py:1291 #, python-format msgid "Error !" msgstr "Fel !" @@ -456,7 +456,7 @@ msgstr "" #: view:basic.calendar:0 #: field:basic.calendar,has_webcal:0 msgid "WebCal" -msgstr "" +msgstr "WebCal" #. module: caldav #: view:document.directory:0 @@ -466,7 +466,7 @@ msgid "Calendar Collections" msgstr "" #. module: caldav -#: code:addons/caldav/calendar.py:798 +#: code:addons/caldav/calendar.py:813 #: sql_constraint:basic.calendar.alias:0 #, python-format msgid "The same filename cannot apply to two records!" @@ -740,7 +740,7 @@ msgid "basic.calendar.alarm" msgstr "" #. module: caldav -#: code:addons/caldav/calendar.py:1275 +#: code:addons/caldav/calendar.py:1291 #, python-format msgid "Attendee must have an Email Id" msgstr "" diff --git a/addons/crm/i18n/sv.po b/addons/crm/i18n/sv.po index 887c6ea83a8..dc928ea707b 100644 --- a/addons/crm/i18n/sv.po +++ b/addons/crm/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-06-03 13:57+0000\n" -"Last-Translator: Jan-Eric Lindh \n" +"PO-Revision-Date: 2011-08-03 22:39+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-06-04 04:53+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: crm #: view:crm.lead.report:0 @@ -92,7 +92,7 @@ msgstr " " #: view:crm.lead.report:0 #: field:crm.phonecall.report,delay_close:0 msgid "Delay to close" -msgstr "" +msgstr "Vänta med att stänga" #. module: crm #: view:crm.lead:0 @@ -127,7 +127,7 @@ msgstr "Koden för säljteamet måste vara unikt!" #: code:addons/crm/wizard/crm_lead_to_opportunity.py:95 #, python-format msgid "Lead '%s' has been converted to an opportunity." -msgstr "" +msgstr "Lead '%s' har konverterats till en affärsmöjlighet." #. module: crm #: code:addons/crm/crm_lead.py:228 @@ -1182,7 +1182,7 @@ msgstr "" #: model:crm.case.stage,name:crm.stage_opportunity5 #: view:crm.lead:0 msgid "Won" -msgstr "" +msgstr "Vunnit" #. module: crm #: field:crm.lead.report,delay_expected:0 diff --git a/addons/email_template/i18n/sv.po b/addons/email_template/i18n/sv.po index 2d628f0c74e..513bc37d603 100644 --- a/addons/email_template/i18n/sv.po +++ b/addons/email_template/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-06-03 14:08+0000\n" -"Last-Translator: Jan-Eric Lindh \n" +"PO-Revision-Date: 2011-08-01 23:20+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-06-04 04:53+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-08-03 04:37+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: email_template #: help:email_template.account,auto_delete:0 @@ -1070,7 +1070,7 @@ msgstr "" #. module: email_template #: field:email.template,null_value:0 msgid "Null Value" -msgstr "" +msgstr "Nollvärde" #. module: email_template #: field:email.template,template_language:0 diff --git a/addons/event/i18n/ru.po b/addons/event/i18n/ru.po index 092a0c3864c..1b16fc71207 100644 --- a/addons/event/i18n/ru.po +++ b/addons/event/i18n/ru.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-05-21 19:59+0000\n" +"PO-Revision-Date: 2011-08-02 10:44+0000\n" "Last-Translator: Stanislav Hanzhin \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-05-22 04:47+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-08-03 04:37+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: event #: view:event.event:0 @@ -77,12 +77,12 @@ msgstr "Дата регистрации" #. module: event #: help:event.event,main_speaker_id:0 msgid "Speaker who are giving speech on event." -msgstr "" +msgstr "Выступающие на мероприятии." #. module: event #: view:partner.event.registration:0 msgid "_Close" -msgstr "" +msgstr "_Закрыть" #. module: event #: model:event.event,name:event.event_0 @@ -96,11 +96,14 @@ msgid "" "event. Note that you can specify for each registration a specific amount if " "you want to" msgstr "" +"Укажите здесь стоимость регистрации по-умолчанию, которая будет " +"использоваться для выставления счетов за мероприятие. Для каждой регистрации " +"может быть указана своя стоимость." #. module: event #: selection:report.event.registration,month:0 msgid "March" -msgstr "" +msgstr "Март" #. module: event #: field:event.event,mail_confirm:0 @@ -111,7 +114,7 @@ msgstr "Подтверждение ел. почты" #: code:addons/event/wizard/event_make_invoice.py:63 #, python-format msgid "Registration doesn't have any partner to invoice." -msgstr "" +msgstr "Для выставления счёта регистрация должна быть связана с партнёром." #. module: event #: field:event.event,company_id:0 @@ -119,7 +122,7 @@ msgstr "" #: view:report.event.registration:0 #: field:report.event.registration,company_id:0 msgid "Company" -msgstr "" +msgstr "Организация" #. module: event #: field:event.make.invoice,invoice_date:0 @@ -139,7 +142,7 @@ msgstr "Регистрация события" #. module: event #: view:report.event.registration:0 msgid "Last 7 Days" -msgstr "" +msgstr "Последние 7 дней" #. module: event #: field:event.event,parent_id:0 @@ -154,7 +157,7 @@ msgstr "Сформировать счёт" #. module: event #: field:event.registration,price_subtotal:0 msgid "Subtotal" -msgstr "" +msgstr "Подитог" #. module: event #: view:report.event.registration:0 @@ -169,7 +172,7 @@ msgstr "Текущие мероприятия" #. module: event #: view:event.registration:0 msgid "Add Internal Note" -msgstr "" +msgstr "Добавить внутреннюю заметку" #. module: event #: model:ir.actions.act_window,name:event.action_report_event_registration @@ -182,7 +185,7 @@ msgstr "Анализ мероприятий" #. module: event #: field:event.registration,message_ids:0 msgid "Messages" -msgstr "" +msgstr "Сообщения" #. module: event #: field:event.event,mail_auto_confirm:0 @@ -206,12 +209,12 @@ msgstr "Подтвердить событие" #: selection:event.registration,state:0 #: selection:report.event.registration,state:0 msgid "Cancelled" -msgstr "" +msgstr "Отменено" #. module: event #: field:event.event,reply_to:0 msgid "Reply-To" -msgstr "" +msgstr "Ответить" #. module: event #: model:ir.actions.act_window,name:event.open_board_associations_manager @@ -221,12 +224,12 @@ msgstr "Инфо-панель мероприятий" #. module: event #: model:event.event,name:event.event_1 msgid "Opera of Verdi" -msgstr "" +msgstr "Опера Верди" #. module: event #: field:event.event,pricelist_id:0 msgid "Pricelist" -msgstr "" +msgstr "Прайс-лист" #. module: event #: field:event.registration,contact_id:0 @@ -241,7 +244,7 @@ msgstr "event.registration.badge" #. module: event #: field:event.registration,ref:0 msgid "Reference" -msgstr "" +msgstr "Ссылка" #. module: event #: help:event.event,date_end:0 @@ -252,7 +255,7 @@ msgstr "Дата завершения мероприятия" #. module: event #: view:event.registration:0 msgid "Emails" -msgstr "" +msgstr "Адреса эл.почты" #. module: event #: view:event.registration:0 @@ -263,7 +266,7 @@ msgstr "Доп. информация" #: code:addons/event/wizard/event_make_invoice.py:83 #, python-format msgid "Customer Invoices" -msgstr "" +msgstr "Счета заказчику" #. module: event #: selection:event.event,state:0 @@ -279,7 +282,7 @@ msgstr "Тип события" #. module: event #: model:ir.model,name:event.model_event_type msgid " Event Type " -msgstr "" +msgstr " Тип мероприятия " #. module: event #: view:event.event:0 @@ -330,13 +333,13 @@ msgstr "" #. module: event #: view:event.registration:0 msgid "Misc" -msgstr "" +msgstr "Разное" #. module: event #: view:event.event:0 #: field:event.event,speaker_ids:0 msgid "Other Speakers" -msgstr "" +msgstr "Другие выступающие" #. module: event #: model:ir.model,name:event.model_event_make_invoice @@ -355,22 +358,22 @@ msgstr "Число регистраций или билетов" #: code:addons/event/wizard/event_make_invoice.py:62 #, python-format msgid "Warning !" -msgstr "" +msgstr "Внимание !" #. module: event #: view:event.registration:0 msgid "Send New Email" -msgstr "" +msgstr "Отправить новое эл. письмо" #. module: event #: view:event.event:0 msgid "Location" -msgstr "" +msgstr "Местоположение" #. module: event #: view:event.registration:0 msgid "Reply" -msgstr "" +msgstr "Ответ" #. module: event #: field:event.event,register_current:0 @@ -392,7 +395,7 @@ msgstr "Тип" #. module: event #: field:event.registration,email_from:0 msgid "Email" -msgstr "" +msgstr "Эл. почта" #. module: event #: field:event.registration,tobe_invoiced:0 @@ -403,12 +406,12 @@ msgstr "Счета к выставлению" #: code:addons/event/event.py:394 #, python-format msgid "Error !" -msgstr "" +msgstr "Ошибка !" #. module: event #: field:event.registration,create_date:0 msgid "Creation Date" -msgstr "" +msgstr "Дата создания" #. module: event #: view:event.event:0 @@ -426,7 +429,7 @@ msgstr "Зарегистрированный контрагент не имее #. module: event #: field:event.registration,nb_register:0 msgid "Quantity" -msgstr "" +msgstr "Количество" #. module: event #: help:event.event,type:0 @@ -440,6 +443,9 @@ msgid "" "subscribes to a confirmed event. This is also the email sent to remind " "someone about the event." msgstr "" +"Это сообщение будет отправлено, когда мероприятие будет утверждено или кто-" +"то подпишется на утвержденное мероприятие. Оно так же отправляется для " +"напоминания о мероприятии." #. module: event #: help:event.event,register_prospect:0 @@ -449,7 +455,7 @@ msgstr "" #. module: event #: selection:report.event.registration,month:0 msgid "July" -msgstr "" +msgstr "Июль" #. module: event #: view:event.event:0 @@ -459,7 +465,7 @@ msgstr "Организация события" #. module: event #: view:event.registration:0 msgid "History Information" -msgstr "" +msgstr "История" #. module: event #: view:event.registration:0 @@ -508,12 +514,12 @@ msgstr "Отменить событие" #: view:event.event:0 #: view:event.registration:0 msgid "Contact" -msgstr "" +msgstr "Контакт" #. module: event #: view:report.event.registration:0 msgid "Last 30 Days" -msgstr "" +msgstr "Последние 30 дней" #. module: event #: view:event.event:0 @@ -521,7 +527,7 @@ msgstr "" #: field:event.registration,partner_id:0 #: model:ir.model,name:event.model_res_partner msgid "Partner" -msgstr "" +msgstr "Контрагент" #. module: event #: view:board.board:0 @@ -559,7 +565,7 @@ msgstr "Счёт выставлен контрагенту" #. module: event #: field:event.registration,log_ids:0 msgid "Logs" -msgstr "" +msgstr "Журналы" #. module: event #: view:event.event:0 @@ -569,33 +575,33 @@ msgstr "" #: view:report.event.registration:0 #: field:report.event.registration,state:0 msgid "State" -msgstr "" +msgstr "Состояние" #. module: event #: selection:report.event.registration,month:0 msgid "September" -msgstr "" +msgstr "Сентябрь" #. module: event #: selection:report.event.registration,month:0 msgid "December" -msgstr "" +msgstr "Декабрь" #. module: event #: field:event.registration,event_product:0 msgid "Invoice Name" -msgstr "" +msgstr "Название счёта" #. module: event #: field:report.event.registration,draft_state:0 msgid " # No of Draft Registrations" -msgstr "" +msgstr " Кол-во неподтверждённых регистраций" #. module: event #: view:report.event.registration:0 #: field:report.event.registration,month:0 msgid "Month" -msgstr "" +msgstr "Месяц" #. module: event #: view:event.event:0 @@ -641,7 +647,7 @@ msgstr "" #. module: event #: field:event.confirm.registration,msg:0 msgid "Message" -msgstr "" +msgstr "Сообщение" #. module: event #: constraint:event.event:0 @@ -651,30 +657,30 @@ msgstr "Ошибка! Невозможно создать рекурсивное #. module: event #: field:event.registration,ref2:0 msgid "Reference 2" -msgstr "" +msgstr "Ссылка 2" #. module: event #: code:addons/event/event.py:357 #: view:report.event.registration:0 #, python-format msgid "Invoiced" -msgstr "" +msgstr "Выставлен счет" #. module: event #: view:event.event:0 #: view:report.event.registration:0 msgid "My Events" -msgstr "" +msgstr "Мои события" #. module: event #: view:event.event:0 msgid "Speakers" -msgstr "" +msgstr "Выступающие" #. module: event #: view:event.make.invoice:0 msgid "Create invoices" -msgstr "" +msgstr "Создать счета" #. module: event #: help:event.registration,email_cc:0 @@ -683,26 +689,28 @@ msgid "" "outbound emails for this record before being sent. Separate multiple email " "addresses with a comma" msgstr "" +"Эти эл. адреса будут добавлены в поле \"Копия\" всей входящей и исходящей " +"почты для этой записи. Разделяйте эл. адреса запятыми." #. module: event #: constraint:res.partner:0 msgid "Error ! You can not create recursive associated members." -msgstr "" +msgstr "Ошибка! Вы не можете создать рекурсивно связанных участников." #. module: event #: view:event.make.invoice:0 msgid "Do you really want to create the invoice(s) ?" -msgstr "" +msgstr "Вы уверены, что хотите создать счет(а) ?" #. module: event #: view:event.event:0 msgid "Beginning Date" -msgstr "" +msgstr "Дата начала" #. module: event #: field:event.registration,date_closed:0 msgid "Closed" -msgstr "" +msgstr "Закрыто" #. module: event #: view:event.event:0 @@ -722,39 +730,40 @@ msgstr "Кол-во регистраций" #. module: event #: field:event.event,child_ids:0 msgid "Child Events" -msgstr "" +msgstr "Дочерние мероприятия" #. module: event #: selection:report.event.registration,month:0 msgid "August" -msgstr "" +msgstr "Август" #. module: event #: field:res.partner,event_ids:0 #: field:res.partner,event_registration_ids:0 msgid "unknown" -msgstr "" +msgstr "unknown" #. module: event #: selection:report.event.registration,month:0 msgid "June" -msgstr "" +msgstr "Июнь" #. module: event #: help:event.event,mail_auto_registr:0 msgid "" "Check this box if you want to use the automatic mailing for new registration" msgstr "" +"Отметьте, если хотите получать автоматические сообщения о новой регистрации." #. module: event #: field:event.registration,write_date:0 msgid "Write Date" -msgstr "" +msgstr "Дата записи" #. module: event #: view:event.registration:0 msgid "My Registrations" -msgstr "" +msgstr "Мои регистрации" #. module: event #: view:event.confirm:0 @@ -762,57 +771,60 @@ msgid "" "Warning: This Event has not reached its Minimum Registration Limit. Are you " "sure you want to confirm it?" msgstr "" +"Предупреждение: Данное мероприятие не получило минимального количества " +"необходимых регистраций. Вы действительно хотите утвердить его?" #. module: event #: field:event.registration,active:0 msgid "Active" -msgstr "" +msgstr "Активно" #. module: event #: selection:report.event.registration,month:0 msgid "November" -msgstr "" +msgstr "Ноябрь" #. module: event #: view:report.event.registration:0 msgid "Extended Filters..." -msgstr "" +msgstr "Расширенные фильтры..." #. module: event #: help:event.event,reply_to:0 msgid "The email address put in the 'Reply-To' of all emails sent by OpenERP" msgstr "" +"Данный адрес будет указан в поле 'От кого' в письмах, отправленных OpenERP" #. module: event #: selection:report.event.registration,month:0 msgid "October" -msgstr "" +msgstr "Октябрь" #. module: event #: help:event.event,register_current:0 msgid "Total of Open and Done Registrations" -msgstr "" +msgstr "Сумма открытых и закрытых регистраций" #. module: event #: field:event.event,language:0 msgid "Language" -msgstr "" +msgstr "Язык" #. module: event #: view:event.registration:0 #: field:event.registration,email_cc:0 msgid "CC" -msgstr "" +msgstr "Копия" #. module: event #: selection:report.event.registration,month:0 msgid "January" -msgstr "" +msgstr "Январь" #. module: event #: help:event.registration,email_from:0 msgid "These people will receive email." -msgstr "" +msgstr "Эти люди получат эл. письма." #. module: event #: view:event.event:0 @@ -833,17 +845,17 @@ msgstr "Подтвердить регистрацию" #: view:report.event.registration:0 #: view:res.partner:0 msgid "Date" -msgstr "" +msgstr "Дата" #. module: event #: model:ir.ui.menu,name:event.board_associations msgid "Dashboard" -msgstr "" +msgstr "Инфо-панель" #. module: event #: view:event.event:0 msgid "Confirmation Email Body" -msgstr "" +msgstr "Тело подтверждающего письма" #. module: event #: view:event.registration:0 @@ -854,7 +866,7 @@ msgstr "Журнал" #. module: event #: field:event.event,address_id:0 msgid "Location Address" -msgstr "" +msgstr "Адрес местоположения" #. module: event #: model:ir.ui.menu,name:event.menu_event_type @@ -865,7 +877,7 @@ msgstr "Типы событий" #. module: event #: view:event.registration:0 msgid "Attachments" -msgstr "" +msgstr "Прикрепленные файлы" #. module: event #: code:addons/event/wizard/event_make_invoice.py:59 @@ -876,17 +888,17 @@ msgstr "" #. module: event #: view:event.event:0 msgid "Auto Confirmation Email" -msgstr "" +msgstr "Письмо автоподтверждения" #. module: event #: view:report.event.registration:0 msgid "Last 365 Days" -msgstr "" +msgstr "Последние 365 дней" #. module: event #: constraint:event.event:0 msgid "Error ! Closing Date cannot be set before Beginning Date." -msgstr "" +msgstr "Ошибка! Дата завершения не может быть установлена до даты начала." #. module: event #: code:addons/event/event.py:442 @@ -913,7 +925,7 @@ msgstr "Счет" #: view:report.event.registration:0 #: field:report.event.registration,year:0 msgid "Year" -msgstr "" +msgstr "Год" #. module: event #: code:addons/event/event.py:517 @@ -926,12 +938,12 @@ msgstr "Отмена" #: view:event.confirm.registration:0 #: view:event.make.invoice:0 msgid "Close" -msgstr "" +msgstr "Закрыть" #. module: event #: view:event.event:0 msgid "Event by Registration" -msgstr "" +msgstr "Мероприятия по регистрации" #. module: event #: code:addons/event/event.py:432 @@ -942,14 +954,14 @@ msgstr "Открыть" #. module: event #: field:event.event,user_id:0 msgid "Responsible User" -msgstr "" +msgstr "Ответственный пользователь" #. module: event #: code:addons/event/event.py:538 #: code:addons/event/event.py:545 #, python-format msgid "Auto Confirmation: [%s] %s" -msgstr "" +msgstr "Автоподтверждение: [%s] %s" #. module: event #: view:event.event:0 @@ -958,20 +970,20 @@ msgstr "" #: view:report.event.registration:0 #: field:report.event.registration,user_id:0 msgid "Responsible" -msgstr "" +msgstr "Ответственный" #. module: event #: field:event.event,unit_price:0 #: view:event.registration:0 #: field:partner.event.registration,unit_price:0 msgid "Registration Cost" -msgstr "" +msgstr "Стоимость регистрации" #. module: event #: view:event.event:0 #: view:event.registration:0 msgid "Current" -msgstr "" +msgstr "Текущие" #. module: event #: field:event.registration,unit_price:0 @@ -983,17 +995,17 @@ msgstr "Цена за ед." #: field:report.event.registration,speaker_id:0 #: field:res.partner,speaker:0 msgid "Speaker" -msgstr "" +msgstr "Выступающий" #. module: event #: view:event.registration:0 msgid "Details" -msgstr "" +msgstr "Подробности" #. module: event #: model:event.event,name:event.event_2 msgid "Conference on ERP Buisness" -msgstr "" +msgstr "Конференция по ERP-бизнесу" #. module: event #: field:event.event,section_id:0 @@ -1001,18 +1013,18 @@ msgstr "" #: view:report.event.registration:0 #: field:report.event.registration,section_id:0 msgid "Sale Team" -msgstr "" +msgstr "Отдел продаж" #. module: event #: field:partner.event.registration,start_date:0 msgid "Start date" -msgstr "" +msgstr "Дата начала" #. module: event #: field:event.event,date_end:0 #: field:partner.event.registration,end_date:0 msgid "Closing date" -msgstr "" +msgstr "Дата закрытия" #. module: event #: field:event.event,product_id:0 @@ -1027,32 +1039,32 @@ msgstr "Продукция" #: view:event.registration:0 #: field:event.registration,description:0 msgid "Description" -msgstr "" +msgstr "Описание" #. module: event #: field:report.event.registration,confirm_state:0 msgid " # No of Confirmed Registrations" -msgstr "" +msgstr " Кол-во подтверждённых регистраций" #. module: event #: model:ir.actions.act_window,name:event.act_register_event_partner msgid "Subscribe" -msgstr "" +msgstr "Подписаться" #. module: event #: selection:report.event.registration,month:0 msgid "May" -msgstr "" +msgstr "Май" #. module: event #: view:res.partner:0 msgid "Events Registration" -msgstr "" +msgstr "Регистрация мероприятий" #. module: event #: help:event.event,mail_registr:0 msgid "This email will be sent when someone subscribes to the event." -msgstr "" +msgstr "Это письмо будет отправлено при подписке на мероприятие." #. module: event #: model:product.template,name:event.event_product_2_product_template @@ -1062,55 +1074,55 @@ msgstr "Билет на конференцию" #. module: event #: field:event.registration.badge,address_id:0 msgid "Address" -msgstr "" +msgstr "Адрес" #. module: event #: view:board.board:0 #: model:ir.actions.act_window,name:event.act_event_view msgid "Next Events" -msgstr "" +msgstr "Следующие события" #. module: event #: view:partner.event.registration:0 msgid "_Subcribe" -msgstr "" +msgstr "_Подписаться" #. module: event #: model:ir.model,name:event.model_partner_event_registration msgid " event Registration " -msgstr "" +msgstr " Регистрация на мероприятие " #. module: event #: help:event.event,date_begin:0 #: help:partner.event.registration,start_date:0 msgid "Beginning Date of Event" -msgstr "" +msgstr "Дата начала мероприятия" #. module: event #: selection:event.registration,state:0 msgid "Unconfirmed" -msgstr "" +msgstr "Неподтверждённый" #. module: event #: code:addons/event/event.py:542 #, python-format msgid "Auto Registration: [%s] %s" -msgstr "" +msgstr "Авто-регистрация: [%s] %s" #. module: event #: field:event.registration,date_deadline:0 msgid "End Date" -msgstr "" +msgstr "Дата окончания" #. module: event #: selection:report.event.registration,month:0 msgid "February" -msgstr "" +msgstr "Февраль" #. module: event #: view:board.board:0 msgid "Association Dashboard" -msgstr "" +msgstr "Панель ассоциаций" #. module: event #: view:event.event:0 @@ -1128,7 +1140,7 @@ msgstr "" #. module: event #: field:event.event,country_id:0 msgid "Country" -msgstr "" +msgstr "Страна" #. module: event #: code:addons/event/wizard/event_make_invoice.py:55 @@ -1143,18 +1155,18 @@ msgstr "" #: view:res.partner:0 #, python-format msgid "Close Registration" -msgstr "" +msgstr "Закрыть регистрацию" #. module: event #: selection:report.event.registration,month:0 msgid "April" -msgstr "" +msgstr "Апрель" #. module: event #: field:event.event,name:0 #: field:event.registration,name:0 msgid "Summary" -msgstr "" +msgstr "Описание" #. module: event #: view:event.event:0 @@ -1176,7 +1188,7 @@ msgstr "Регистрации" #. module: event #: field:event.registration,date:0 msgid "Start Date" -msgstr "" +msgstr "Дата начала" #. module: event #: field:event.event,register_max:0 @@ -1222,7 +1234,7 @@ msgstr "" #: view:report.event.registration:0 #: field:report.event.registration,total:0 msgid "Total" -msgstr "" +msgstr "Всего" #. module: event #: help:event.event,register_min:0 @@ -1232,7 +1244,7 @@ msgstr "" #. module: event #: field:event.event,speaker_confirmed:0 msgid "Speaker Confirmed" -msgstr "" +msgstr "Выступающий утвержден" #. module: event #: model:ir.actions.act_window,help:event.action_event_view diff --git a/addons/mrp/i18n/sv.po b/addons/mrp/i18n/sv.po index 99c9ee97a22..30687c7a183 100644 --- a/addons/mrp/i18n/sv.po +++ b/addons/mrp/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-01-27 22:20+0000\n" -"Last-Translator: Magnus Brandt (mba), Aspirix AB \n" +"PO-Revision-Date: 2011-08-03 23:21+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 04:50+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: mrp #: field:mrp.production,move_created_ids:0 @@ -122,7 +122,7 @@ msgstr "" #. module: mrp #: model:process.transition,name:mrp.process_transition_stockproduction0 msgid "To Produce" -msgstr "" +msgstr "Att tillverka" #. module: mrp #: help:mrp.routing.workcenter,cycle_nbr:0 @@ -720,7 +720,7 @@ msgid "Per month" msgstr "Per månad" #. module: mrp -#: code:addons/mrp/mrp.py:591 +#: code:addons/mrp/mrp.py:595 #: code:addons/mrp/wizard/change_production_qty.py:77 #: code:addons/mrp/wizard/change_production_qty.py:82 #, python-format @@ -733,7 +733,7 @@ msgid "Product Name" msgstr "Produktnamn" #. module: mrp -#: code:addons/mrp/mrp.py:491 +#: code:addons/mrp/mrp.py:495 #, python-format msgid "Invalid action !" msgstr "Invalid action !" @@ -1299,7 +1299,7 @@ msgid "Month -1" msgstr "" #. module: mrp -#: code:addons/mrp/mrp.py:914 +#: code:addons/mrp/mrp.py:924 #, python-format msgid "Manufacturing order '%s' is scheduled for the %s." msgstr "" @@ -1310,7 +1310,7 @@ msgid "Production Order N° :" msgstr "Production Order N° :" #. module: mrp -#: code:addons/mrp/mrp.py:630 +#: code:addons/mrp/mrp.py:640 #, python-format msgid "Manufacturing order '%s' is ready to produce." msgstr "" @@ -1539,7 +1539,7 @@ msgid "Manufacturing Orders To Start" msgstr "" #. module: mrp -#: code:addons/mrp/mrp.py:491 +#: code:addons/mrp/mrp.py:495 #, python-format msgid "Cannot delete Production Order(s) which are in %s State!" msgstr "" @@ -1629,7 +1629,7 @@ msgid "Production Analysis" msgstr "" #. module: mrp -#: code:addons/mrp/mrp.py:345 +#: code:addons/mrp/mrp.py:349 #, python-format msgid "Copy" msgstr "" @@ -2118,7 +2118,7 @@ msgid "Product type is Stockable or Consumable." msgstr "" #. module: mrp -#: code:addons/mrp/mrp.py:591 +#: code:addons/mrp/mrp.py:595 #: code:addons/mrp/wizard/change_production_qty.py:77 #: code:addons/mrp/wizard/change_production_qty.py:82 #, python-format diff --git a/addons/mrp_operations/i18n/sv.po b/addons/mrp_operations/i18n/sv.po index 6b9c9cb274b..77319bb130d 100644 --- a/addons/mrp_operations/i18n/sv.po +++ b/addons/mrp_operations/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-03 16:58+0000\n" -"PO-Revision-Date: 2010-11-23 09:29+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 23:14+0000\n" +"Last-Translator: Treecko \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:31+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: mrp_operations #: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action_form @@ -78,7 +78,7 @@ msgstr "(" #. module: mrp_operations #: view:mrp.production.workcenter.line:0 msgid "Product to Produce" -msgstr "" +msgstr "Produkt att producera" #. module: mrp_operations #: view:mrp_operations.operation:0 @@ -117,7 +117,7 @@ msgid "Creation of the work order" msgstr "" #. module: mrp_operations -#: code:addons/mrp_operations/mrp_operations.py:461 +#: code:addons/mrp_operations/mrp_operations.py:463 #, python-format msgid "You cannot Pause the Operation other then Start/Resume state !" msgstr "" @@ -136,10 +136,10 @@ msgstr "" #. module: mrp_operations #: code:addons/mrp_operations/mrp_operations.py:133 -#: code:addons/mrp_operations/mrp_operations.py:461 -#: code:addons/mrp_operations/mrp_operations.py:465 -#: code:addons/mrp_operations/mrp_operations.py:477 -#: code:addons/mrp_operations/mrp_operations.py:480 +#: code:addons/mrp_operations/mrp_operations.py:463 +#: code:addons/mrp_operations/mrp_operations.py:467 +#: code:addons/mrp_operations/mrp_operations.py:479 +#: code:addons/mrp_operations/mrp_operations.py:482 #, python-format msgid "Error!" msgstr "" @@ -224,7 +224,7 @@ msgid "" msgstr "" #. module: mrp_operations -#: code:addons/mrp_operations/mrp_operations.py:470 +#: code:addons/mrp_operations/mrp_operations.py:472 #, python-format msgid "You cannot finish the operation without Starting/Resuming it !" msgstr "" @@ -235,7 +235,7 @@ msgid "Planned Date" msgstr "" #. module: mrp_operations -#: code:addons/mrp_operations/mrp_operations.py:477 +#: code:addons/mrp_operations/mrp_operations.py:479 #, python-format msgid "There is no Operation to be cancelled !" msgstr "" @@ -274,7 +274,7 @@ msgstr "" #. module: mrp_operations #: field:mrp_operations.operation,order_date:0 msgid "Order Date" -msgstr "" +msgstr "Orderdatum" #. module: mrp_operations #: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_draft_action @@ -282,7 +282,7 @@ msgid "Future Work Orders" msgstr "" #. module: mrp_operations -#: code:addons/mrp_operations/mrp_operations.py:457 +#: code:addons/mrp_operations/mrp_operations.py:459 #, python-format msgid "" "Operation has already started !You can either Pause /Finish/Cancel the " @@ -363,7 +363,7 @@ msgstr "" #: view:mrp.production.workcenter.line:0 #: selection:mrp_operations.operation.code,start_stop:0 msgid "Start" -msgstr "" +msgstr "Start" #. module: mrp_operations #: view:mrp_operations.operation:0 @@ -400,7 +400,7 @@ msgid "Production Operation Code" msgstr "" #. module: mrp_operations -#: code:addons/mrp_operations/mrp_operations.py:465 +#: code:addons/mrp_operations/mrp_operations.py:467 #, python-format msgid " You cannot Resume the operation other then Pause state !" msgstr "" @@ -454,7 +454,7 @@ msgid "June" msgstr "" #. module: mrp_operations -#: code:addons/mrp_operations/mrp_operations.py:480 +#: code:addons/mrp_operations/mrp_operations.py:482 #, python-format msgid "Operation is already finished !" msgstr "" @@ -511,7 +511,7 @@ msgid "Finish the operation." msgstr "" #. module: mrp_operations -#: code:addons/mrp_operations/mrp_operations.py:450 +#: code:addons/mrp_operations/mrp_operations.py:452 #, python-format msgid "Operation is not started yet !" msgstr "" @@ -522,10 +522,10 @@ msgid "Information from the production order." msgstr "" #. module: mrp_operations -#: code:addons/mrp_operations/mrp_operations.py:450 -#: code:addons/mrp_operations/mrp_operations.py:457 -#: code:addons/mrp_operations/mrp_operations.py:470 -#: code:addons/mrp_operations/mrp_operations.py:473 +#: code:addons/mrp_operations/mrp_operations.py:452 +#: code:addons/mrp_operations/mrp_operations.py:459 +#: code:addons/mrp_operations/mrp_operations.py:472 +#: code:addons/mrp_operations/mrp_operations.py:475 #, python-format msgid "Sorry!" msgstr "" @@ -542,7 +542,7 @@ msgid "Code" msgstr "Kod" #. module: mrp_operations -#: code:addons/mrp_operations/mrp_operations.py:473 +#: code:addons/mrp_operations/mrp_operations.py:475 #, python-format msgid "Operation is Already Cancelled !" msgstr "" @@ -560,7 +560,7 @@ msgstr "" #. module: mrp_operations #: field:mrp.production.workcenter.line,qty:0 msgid "Qty" -msgstr "" +msgstr "Kvantitet" #. module: mrp_operations #: model:process.node,name:mrp_operations.process_node_doneoperation0 @@ -647,7 +647,7 @@ msgstr "" #. module: mrp_operations #: view:mrp.production.workcenter.line:0 msgid "Real" -msgstr "" +msgstr "Faktisk" #. module: mrp_operations #: field:mrp.production.workcenter.line,date_planned:0 @@ -775,7 +775,7 @@ msgstr "" #. module: mrp_operations #: view:mrp.production.workcenter.line:0 msgid "Duration" -msgstr "" +msgstr "Varaktighet" #. module: mrp_operations #: constraint:mrp.production:0 diff --git a/addons/mrp_repair/i18n/sv.po b/addons/mrp_repair/i18n/sv.po index 6f58b0cad9d..bac9167e5bd 100644 --- a/addons/mrp_repair/i18n/sv.po +++ b/addons/mrp_repair/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-06-03 14:18+0000\n" -"Last-Translator: Jan-Eric Lindh \n" +"PO-Revision-Date: 2011-08-01 23:11+0000\n" +"Last-Translator: Treecko \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-06-04 04:53+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-08-03 04:37+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: mrp_repair #: view:mrp.repair:0 @@ -760,7 +760,7 @@ msgstr "Totalt" #. module: mrp_repair #: selection:mrp.repair,state:0 msgid "Ready to Repair" -msgstr "" +msgstr "Redo att reparera" #. module: mrp_repair #: code:addons/mrp_repair/mrp_repair.py:365 diff --git a/addons/multi_company/i18n/sv.po b/addons/multi_company/i18n/sv.po index d438b0b13de..c79c85cbdc7 100644 --- a/addons/multi_company/i18n/sv.po +++ b/addons/multi_company/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2010-11-23 09:51+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-01 23:24+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:41+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-03 04:37+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: multi_company #: model:res.company,overdue_msg:multi_company.res_company_odoo @@ -39,6 +39,21 @@ msgid "" "%(company_name)s\n" " " msgstr "" +"\n" +"Datum: %(date)s\n" +"\n" +"Hej %(partner_name)s,\n" +"\n" +"Här kommer en påminnelse, bifogad, på era obetalda fakturor, med en total " +"förfallen summa på:\n" +"\n" +"%(followup_amount).2f %(company_currency)s\n" +"\n" +"Vänligen\n" +"--\n" +"%(user_signature)s\n" +"%(company_name)s\n" +" " #. module: multi_company #: model:product.category,name:multi_company.Odoo1 diff --git a/addons/point_of_sale/i18n/sv.po b/addons/point_of_sale/i18n/sv.po index c989a0a141b..83076eac862 100644 --- a/addons/point_of_sale/i18n/sv.po +++ b/addons/point_of_sale/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-03 16:58+0000\n" -"PO-Revision-Date: 2010-12-15 15:07+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 22:56+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-07-23 04:57+0000\n" -"X-Generator: Launchpad (build 13405)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: point_of_sale #: field:pos.discount,discount_notes:0 @@ -1962,7 +1962,7 @@ msgstr "Meddelande" #: model:ir.model,name:point_of_sale.model_pos_order #: model:ir.ui.menu,name:point_of_sale.menu_point_root msgid "Point of Sale" -msgstr "" +msgstr "Försäljningsställe" #. module: point_of_sale #: view:pos.order:0 diff --git a/addons/procurement/i18n/sv.po b/addons/procurement/i18n/sv.po index 9597e40a678..b958aebebdc 100644 --- a/addons/procurement/i18n/sv.po +++ b/addons/procurement/i18n/sv.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2010-12-15 05:17+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 22:59+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-29 05:48+0000\n" -"X-Generator: Launchpad (build 12758)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: procurement #: view:make.procurement:0 @@ -67,7 +67,7 @@ msgid "Procurement Method" msgstr "" #. module: procurement -#: code:addons/procurement/procurement.py:298 +#: code:addons/procurement/procurement.py:304 #, python-format msgid "No address defined for the supplier" msgstr "" @@ -172,7 +172,7 @@ msgstr "" #. module: procurement #: selection:procurement.order,state:0 msgid "Ready" -msgstr "" +msgstr "Klar" #. module: procurement #: field:procurement.order.compute.all,automatic:0 @@ -306,7 +306,7 @@ msgid "Quantity" msgstr "" #. module: procurement -#: code:addons/procurement/procurement.py:370 +#: code:addons/procurement/procurement.py:377 #, python-format msgid "Not enough stock and no minimum orderpoint rule defined." msgstr "" @@ -437,7 +437,7 @@ msgid "plus" msgstr "" #. module: procurement -#: code:addons/procurement/procurement.py:319 +#: code:addons/procurement/procurement.py:325 #, python-format msgid "" "Please check the Quantity in Procurement Order(s), it should not be less " @@ -599,7 +599,7 @@ msgid "Cannot delete Procurement Order(s) which are in %s State!" msgstr "" #. module: procurement -#: code:addons/procurement/procurement.py:318 +#: code:addons/procurement/procurement.py:324 #, python-format msgid "Data Insufficient !" msgstr "" @@ -823,7 +823,7 @@ msgid "Product UoS" msgstr "" #. module: procurement -#: code:addons/procurement/procurement.py:347 +#: code:addons/procurement/procurement.py:353 #, python-format msgid "from stock: products assigned." msgstr "" diff --git a/addons/project_scrum/i18n/sv.po b/addons/project_scrum/i18n/sv.po index cba4c5bd8d9..1e5b3c31010 100644 --- a/addons/project_scrum/i18n/sv.po +++ b/addons/project_scrum/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-06-03 14:17+0000\n" -"Last-Translator: Jan-Eric Lindh \n" +"PO-Revision-Date: 2011-08-01 23:16+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-06-04 04:53+0000\n" -"X-Generator: Launchpad (build 12959)\n" +"X-Launchpad-Export-Date: 2011-08-03 04:37+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: project_scrum #: help:project.scrum.email,scrum_master_email:0 @@ -111,7 +111,7 @@ msgstr "Förlopp" #: view:project.scrum.sprint:0 #: field:project.scrum.sprint,scrum_master_id:0 msgid "Scrum Master" -msgstr "" +msgstr "Scrum Master" #. module: project_scrum #: code:addons/project_scrum/project_scrum.py:83 diff --git a/addons/purchase/i18n/sv.po b/addons/purchase/i18n/sv.po index c2bf121f9b1..4ec8019c55c 100644 --- a/addons/purchase/i18n/sv.po +++ b/addons/purchase/i18n/sv.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 5.0.14\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-01-12 17:11+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-08-03 23:22+0000\n" +"Last-Translator: Stefan Lind \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-07-23 04:56+0000\n" -"X-Generator: Launchpad (build 13405)\n" +"X-Launchpad-Export-Date: 2011-08-04 04:34+0000\n" +"X-Generator: Launchpad (build 13573)\n" #. module: purchase #: model:process.transition,note:purchase.process_transition_confirmingpurchaseorder0 @@ -27,7 +27,7 @@ msgstr "" #: code:addons/purchase/purchase.py:282 #, python-format msgid "You can not confirm purchase order without Purchase Order Lines." -msgstr "" +msgstr "Du kan inte bekräfta beställningen utan inköpsorder" #. module: purchase #: field:purchase.order,invoiced:0 diff --git a/addons/report_webkit_sample/i18n/fi.po b/addons/report_webkit_sample/i18n/fi.po new file mode 100644 index 00000000000..1d2690dd578 --- /dev/null +++ b/addons/report_webkit_sample/i18n/fi.po @@ -0,0 +1,143 @@ +# Finnish translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:16+0000\n" +"PO-Revision-Date: 2011-08-01 06:15+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-08-03 04:37+0000\n" +"X-Generator: Launchpad (build 13573)\n" + +#. module: report_webkit_sample +#: model:ir.actions.report.xml,name:report_webkit_sample.report_webkit_html +msgid "WebKit invoice" +msgstr "Webkit lasku" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:35 +msgid "Supplier Invoice" +msgstr "Toimittajan lasku" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:49 +msgid "Unit Price" +msgstr "Yksikköhinta" + +#. module: report_webkit_sample +#: model:ir.module.module,description:report_webkit_sample.module_meta_information +msgid "" +"Samples for Webkit Report Engine (report_webkit module).\n" +"\n" +" A sample invoice report is included in this module, as well as a wizard " +"to\n" +" add Webkit Report entries on any Document in the system.\n" +" \n" +" You have to create the print buttons by calling the wizard. For more " +"details see:\n" +" http://files.me.com/nbessi/06n92k.mov \n" +" " +msgstr "" + +#. module: report_webkit_sample +#: model:ir.module.module,shortdesc:report_webkit_sample.module_meta_information +msgid "Webkit Report Samples" +msgstr "Webkit esimerkkiraportit" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:49 +msgid "Disc.(%)" +msgstr "Alennus (%)" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:22 +msgid "Fax" +msgstr "Faksi" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:44 +msgid "Document" +msgstr "Dokumentti" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:49 +msgid "Description" +msgstr "Kuvaus" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:49 +msgid "Price" +msgstr "Hinta" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:44 +msgid "Invoice Date" +msgstr "Laskun päivämäärä" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:49 +msgid "QTY" +msgstr "Määrä" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:64 +msgid "Base" +msgstr "Pohja" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:44 +msgid "Partner Ref." +msgstr "Kumppanin viite" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:49 +msgid "Taxes" +msgstr "Verot" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:64 +msgid "Amount" +msgstr "Määrä" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:28 +msgid "VAT" +msgstr "ALV" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:37 +msgid "Refund" +msgstr "Palautus" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:19 +msgid "Tel" +msgstr "Puh" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:25 +msgid "E-mail" +msgstr "Sähköposti" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:33 +msgid "Invoice" +msgstr "Lasku" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:39 +msgid "Supplier Refund" +msgstr "Toimittajan hyvitys" + +#. module: report_webkit_sample +#: report:report.webkitaccount.invoice:76 +msgid "Total" +msgstr "Kokonaismäärä" From 33b80481c4429719ec30026b75da45e08786690c Mon Sep 17 00:00:00 2001 From: "RavishchanraMurari (Open ERP)" Date: Thu, 4 Aug 2011 11:53:45 +0530 Subject: [PATCH 697/831] account_chart bzr revid: rmu@tinyerp.com-20110804062345-0qa6y8r1e1agbygj --- addons/account/account_view.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 0c4ade61439..187cf6e6632 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -1266,8 +1266,7 @@ tree,form - [('account_id', 'child_of', active_id)] - {'account_id':active_id} + {'search_default_account_id':[active_id], 'default_account_id': active_id} From ca29f41826668521f61b6b8933234347c3da5ece Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 4 Aug 2011 08:59:21 +0200 Subject: [PATCH 698/831] [FIX] data: remove address_id from users bzr revid: rco@openerp.com-20110804065921-vjgj5nh4kkc6d72v --- openerp/addons/base/base_data.xml | 1 - openerp/addons/base/base_demo.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/openerp/addons/base/base_data.xml b/openerp/addons/base/base_data.xml index 75de4a5fee5..00fb83a0796 100644 --- a/openerp/addons/base/base_data.xml +++ b/openerp/addons/base/base_data.xml @@ -1053,7 +1053,6 @@ Administrator - diff --git a/openerp/addons/base/base_demo.xml b/openerp/addons/base/base_demo.xml index 73f6fa400a5..3d1eae3c4bc 100644 --- a/openerp/addons/base/base_demo.xml +++ b/openerp/addons/base/base_demo.xml @@ -19,7 +19,6 @@ demo Demo User Mr Demo - From 283c26c8c7ce99f0fca4a0298db694434b347426 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 4 Aug 2011 10:29:15 +0200 Subject: [PATCH 699/831] [FIX] name_get of res.partner.bank, use IBAN and BIC bzr revid: rco@openerp.com-20110804082915-rm5gfrhppn1urvgv --- addons/base_iban/base_iban.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/base_iban/base_iban.py b/addons/base_iban/base_iban.py index e3748fa7851..37b5b841e23 100644 --- a/addons/base_iban/base_iban.py +++ b/addons/base_iban/base_iban.py @@ -133,7 +133,9 @@ class res_partner_bank(osv.osv): to_check_ids = [] for val in self.browse(cr, uid, ids, context=context): if val.state=='iban': - res.append((val.id, _pretty_iban(val.iban or ''))) + iban = _pretty_iban(val.iban or '') + bic = val.bank.bic or '' + res.append((val.id, _('IBAN: %s / BIC: %s') % (iban, bic))) else: to_check_ids.append(val.id) res += super(res_partner_bank, self).name_get(cr, uid, to_check_ids, context=context) From 01f32f9f3f6b59ad1d35037fb1c3b23beb8c12f5 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 4 Aug 2011 10:54:55 +0200 Subject: [PATCH 700/831] [REN] client action member 'kwargs' to 'params' bzr revid: xmo@openerp.com-20110804085455-647wwp0g4454kj1g --- openerp/addons/base/ir/ir_actions.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index d987e883732..de361d2c44b 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -918,15 +918,15 @@ class act_client(osv.osv): _sequence = 'ir_actions_id_seq' _order = 'name' - def _get_kwargs(self, cr, uid, ids, field_name, arg, context): + def _get_params(self, cr, uid, ids, field_name, arg, context): return dict([ - ((record.id, ast.literal_eval(record.kwargs_store)) - if record.kwargs_store else (record.id, False)) + ((record.id, ast.literal_eval(record.params_store)) + if record.params_store else (record.id, False)) for record in self.browse(cr, uid, ids, context=context) ]) - def _set_kwargs(self, cr, uid, ids, field_name, field_value, arg, context): - assert isinstance(field_value, dict), "kwargs can only be dictionaries" + def _set_params(self, cr, uid, ids, field_name, field_value, arg, context): + assert isinstance(field_value, dict), "params can only be dictionaries" for record in self.browse(cr, uid, ids, context=context): record.write({field_name: repr(field_value)}) @@ -935,12 +935,12 @@ class act_client(osv.osv): help="An arbitrary string, interpreted by the client" " according to its own needs and wishes. There " "is no central tag repository across clients."), - 'kwargs': fields.function(_get_kwargs, fnct_inv=_set_kwargs, + 'params': fields.function(_get_params, fnct_inv=_set_params, type='binary', method=True, string="Supplementary arguments", help="Arguments sent to the client along with" "the view tag"), - 'kwargs_store': fields.binary("Kwargs storage", readonly=True) + 'params_store': fields.binary("Params storage", readonly=True) } _defaults = { 'type': 'ir.actions.client', From e816c34b0a08c71bc46b518c6d2dbf1a22f5ce39 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 4 Aug 2011 11:01:24 +0200 Subject: [PATCH 701/831] [IMP] use blockUI in static home installation, since we got it bzr revid: xmo@openerp.com-20110804090124-rteblcid3mx59599 --- addons/base_default_home/static/src/js/home.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/addons/base_default_home/static/src/js/home.js b/addons/base_default_home/static/src/js/home.js index 8cdec179999..e95b9681ceb 100644 --- a/addons/base_default_home/static/src/js/home.js +++ b/addons/base_default_home/static/src/js/home.js @@ -77,20 +77,16 @@ openerp.base_default_home = function (openerp) { [['name', '=', module_name], ['state', '=', 'uninstalled']]), Upgrade = new openerp.base.DataSet(this, 'base.module.upgrade'); - var $overlay = $('
') - .appendTo(document.body) - .css('z-index', 10001), - $wait = $overlay.add( - $('') - .appendTo(document.body) - .css({position: 'absolute', top: '50%', left: '50%'})); + $.blockUI({ + message: '' + }); Modules.read_slice(['id'], null, null, function (records) { if (!(records.length === 1)) { return; } Modules.call('state_update', [_.pluck(records, 'id'), 'to install', ['uninstalled']], function () { Upgrade.call('upgrade_module', [[]], function () { - $wait.remove(); + $.unblockUI(); // TODO: less brutal reloading window.location.reload(true); }); From 9bc6c66a2cfd8c4fa071a13aa8fbf5c301b77613 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 4 Aug 2011 11:20:43 +0200 Subject: [PATCH 702/831] [IMP] don't recreate the home template from scratch every single time bzr revid: xmo@openerp.com-20110804092043-rkc4zhj35za0wskz --- addons/base/controllers/main.py | 68 ++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 6f63e5c7e24..178a804d0da 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -1,19 +1,23 @@ # -*- coding: utf-8 -*- -import base64, glob, os, re +import base64 +import csv +import glob +import operator +import os +import re +import simplejson +import textwrap +import xmlrpclib from xml.etree import ElementTree from cStringIO import StringIO -import operator -import simplejson +import cherrypy import openerpweb import openerpweb.ast import openerpweb.nonliterals -import cherrypy -import xmlrpclib -import csv # Should move to openerpweb.Xml2Json class Xml2Json: @@ -86,6 +90,27 @@ def concat_files(file_list): files_concat = "".join(files_content) return files_concat +home_template = textwrap.dedent(""" + + + + OpenERP + %(javascript)s + + + %(css)s + + + + +""") class WebClient(openerpweb.Controller): _cp_path = "/base/webclient" @@ -115,40 +140,21 @@ class WebClient(openerpweb.Controller): @openerpweb.httprequest def home(self, req, s_action=None): - template =""" - - - - OpenERP - %s - - - %s - - - - - """.replace('\n'+' '*8,'\n') - # script tags jslist = ['/base/webclient/js'] if 1: # debug == 1 jslist = manifest_glob(['base'], 'js') - js = "\n ".join([''%i for i in jslist]) + js = "\n ".join([''%i for i in jslist]) # css tags csslist = ['/base/webclient/css'] if 1: # debug == 1 csslist = manifest_glob(['base'], 'css') - css = "\n ".join([''%i for i in csslist]) - r = template % (js, css) + css = "\n ".join([''%i for i in csslist]) + r = home_template % { + 'javascript': js, + 'css': css + } return r class Database(openerpweb.Controller): From 3ce3ce9cb6ded7a2d434c2e39730570337ec17e7 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 4 Aug 2011 12:02:55 +0200 Subject: [PATCH 703/831] [FIX] handle error on XML-RPC method part of yet-to-merge server code bzr revid: xmo@openerp.com-20110804100255-y5n6troopyhf41wv --- addons/base_default_home/static/src/js/home.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/base_default_home/static/src/js/home.js b/addons/base_default_home/static/src/js/home.js index e95b9681ceb..eef664a4700 100644 --- a/addons/base_default_home/static/src/js/home.js +++ b/addons/base_default_home/static/src/js/home.js @@ -69,6 +69,9 @@ openerp.base_default_home = function (openerp) { self.install_module($(this).val()); }) + }, function (err, event) { + event.preventDefault(); + return old_home.call(self); }); }, install_module: function (module_name) { From fd573bc0d965555245293adf78989fc431c2366c Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 4 Aug 2011 12:07:31 +0200 Subject: [PATCH 704/831] [FIX] Some fixes in calendar since dhtmlxSheduler upgrade bzr revid: fme@openerp.com-20110804100731-v032rcnxthqe0y7u --- .../base_calendar/static/src/js/calendar.js | 25 ++++++++----------- .../static/src/xml/base_calendar.xml | 14 +++++------ 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index ed16ea998e3..2e5d0c6a2b2 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -70,35 +70,28 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ } this.init_scheduler(); - this.load_scheduler(); this.has_been_loaded.resolve(); }, init_scheduler: function() { var self = this; scheduler.clearAll(); - scheduler.config.api_date = "%Y-%m-%d %H:%M:%S"; - //scheduler.config.details_on_dblclick = true; - //scheduler.config.details_on_create = true; - scheduler.keys.edit_cancel = 27; - if (this.fields[this.date_start]['type'] == 'time') { scheduler.config.xml_date = "%H:%M:%S"; } else { - scheduler.config.xml_date = "%Y-%m-%d %H:%M:%S"; + scheduler.config.xml_date = "%Y-%m-%d %H:%i"; } - - this.mode = this.mode || 'month'; - + scheduler.config.api_date = "%Y-%m-%d %H:%i"; scheduler.config.multi_day = true; //Multi day events are not rendered in daily and weekly views // Initialize Sceduler + this.mode = this.mode || 'month'; scheduler.init('openerp_scheduler', null, this.mode); scheduler.attachEvent('onEventAdded', this.do_create_event); scheduler.attachEvent('onEventDeleted', this.do_delete_event); scheduler.attachEvent('onEventChanged', this.do_save_event); - scheduler.renderCalendar({ + this.mini_calendar = scheduler.renderCalendar({ container: this.sidebar.navigator.element_id, navigation: true, date: scheduler._date, @@ -109,6 +102,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ }, resize_scheduler: function() { scheduler.setCurrentView(scheduler._date); + scheduler.updateCalendar(this.mini_calendar); }, load_scheduler: function() { var self = this; @@ -163,7 +157,6 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ } res_events.push(this.convert_event(evt)); } - scheduler.parse(res_events, 'json'); this.resize_scheduler(); this.sidebar.responsible.on_events_loaded(sidebar_items); @@ -266,9 +259,11 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.dataset.write(event_id, data); }, do_delete_event: function(event_id, event_obj) { - var self = this; - this.dataset.unlink(event_id, function(r) { - }); + // dhtmlx sends this event even when it does not exist in openerp. + // Eg: use cancel in dhtmlx new event dialog + if (_.indexOf(this.dataset.ids, event_id) > -1) { + this.dataset.unlink(parseInt(event_id, 10)); + } }, get_event_data: function(event_obj) { var data = { diff --git a/addons/base_calendar/static/src/xml/base_calendar.xml b/addons/base_calendar/static/src/xml/base_calendar.xml index 757c4925cd1..f14fc6af450 100644 --- a/addons/base_calendar/static/src/xml/base_calendar.xml +++ b/addons/base_calendar/static/src/xml/base_calendar.xml @@ -3,13 +3,13 @@

-
-
-
-
-
-
-
+
&nbsp;
+
&nbsp;
+
+
+
+
+
From 916f440f4a541d9c692b1717c37bb17fa6460539 Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Thu, 4 Aug 2011 15:57:23 +0530 Subject: [PATCH 705/831] [IMP]hr_expense,hr_recruitment:added data in hr_expenses bzr revid: mma@tinyerp.com-20110804102723-4l6gtnv8ux2sy235 --- addons/hr_expense/hr_expense_data.xml | 12 ++++++++++++ addons/hr_expense/hr_expense_demo.xml | 12 ------------ addons/hr_recruitment/hr_recruitment_view.xml | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/addons/hr_expense/hr_expense_data.xml b/addons/hr_expense/hr_expense_data.xml index 33a7ec7604c..9660dbb2543 100644 --- a/addons/hr_expense/hr_expense_data.xml +++ b/addons/hr_expense/hr_expense_data.xml @@ -8,6 +8,18 @@ Expenses + + + 0.32 + 0.32 + + + consu + Travel Expenses + TRA + + + \ No newline at end of file diff --git a/addons/hr_expense/hr_expense_demo.xml b/addons/hr_expense/hr_expense_demo.xml index ea19a396b3e..80c9cd66694 100644 --- a/addons/hr_expense/hr_expense_demo.xml +++ b/addons/hr_expense/hr_expense_demo.xml @@ -26,18 +26,6 @@ - - 0.32 - 0.32 - - - consu - Travel Expenses - TRA - - - - diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 0e98ea03030..125d61979e9 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -314,7 +314,7 @@ - + From 0094e828b9ce2505f4e4bd4ed4833597276050b8 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 4 Aug 2011 12:37:25 +0200 Subject: [PATCH 706/831] [FIX] creation of db with no demo data lp bug: https://launchpad.net/bugs/820812 fixed bzr revid: xmo@openerp.com-20110804103725-9o6uuvg5zb15rp6h --- addons/base/controllers/main.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 178a804d0da..aaf89853cad 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -178,9 +178,13 @@ class Database(openerpweb.Controller): def create(self, req, fields): params = dict(map(operator.itemgetter('name', 'value'), fields)) - create_attrs = operator.itemgetter( - 'super_admin_pwd', 'db_name', 'demo_data', 'db_lang', 'create_admin_pwd')( - params) + create_attrs = ( + params['super_admin_pwd'], + params['db_name'], + bool(params.get('demo_data')), + params['db_lang'], + params['create_admin_pwd'] + ) try: return req.session.proxy("db").create(*create_attrs) From e3b56ecec4ca2787468dd970591dab309c97f465 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 4 Aug 2011 14:23:00 +0200 Subject: [PATCH 707/831] [IMP] create new databases without demo data by default bzr revid: xmo@openerp.com-20110804122300-zr1aq3bl5oq7rpxt --- addons/base/static/src/xml/base.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index db0fdad44fa..0854ab8712a 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -89,7 +89,7 @@ - + From da9f43e2781d7dfe6bab88e29a0386c504c0cfc6 Mon Sep 17 00:00:00 2001 From: "RavishchanraMurari (Open ERP)" Date: Thu, 4 Aug 2011 18:35:08 +0530 Subject: [PATCH 708/831] filter_management_resummit bzr revid: rmu@tinyerp.com-20110804130508-efncl6hfr99gyetz --- openerp/addons/base/ir/ir.xml | 14 ++++---------- openerp/addons/base/ir/ir_filters.py | 6 +++--- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/openerp/addons/base/ir/ir.xml b/openerp/addons/base/ir/ir.xml index a4ab078e589..e463569a951 100644 --- a/openerp/addons/base/ir/ir.xml +++ b/openerp/addons/base/ir/ir.xml @@ -356,7 +356,7 @@ - + @@ -377,8 +377,8 @@ - - + + @@ -395,17 +395,11 @@ - - - - - - diff --git a/openerp/addons/base/ir/ir_filters.py b/openerp/addons/base/ir/ir_filters.py index 3cffad737d8..43ad379e9d4 100644 --- a/openerp/addons/base/ir/ir_filters.py +++ b/openerp/addons/base/ir/ir_filters.py @@ -31,7 +31,7 @@ class ir_filters(osv.osv): def copy(self, cr, uid, id, default=None, context=None): name = self.read(cr, uid, [id], ['name'])[0]['name'] - default.update({'name': name+ _(' (copy)')}) + default.update({'name':_('%s (copy)') % name}) return super(ir_filters, self).copy(cr, uid, id, default, context) def get_filters(self, cr, uid, model): @@ -58,10 +58,10 @@ class ir_filters(osv.osv): _columns = { 'name': fields.char('Filter Name', size=64, translate=True, required=True), - 'user_id':fields.many2one('res.users', 'User', help='Keep empty if you want this filter to be applied to every user.If you assign a user in this field, only this user will have this filter available.'), + 'user_id':fields.many2one('res.users', 'User', help="The user this filter is available to. Keep empty to make it available to all users."), 'domain': fields.text('Domain Value', required=True), 'context': fields.text('Context Value', required=True), - 'model_id': fields.many2one('ir.model', 'Object', size=64, required=True), + 'model_id': fields.many2one('ir.model', 'Object',required=True), } _defaults = { 'domain': '[]', From d57f379dbccde94f9a5e045f61b1142e5fa6f06c Mon Sep 17 00:00:00 2001 From: "Amit Parmar (OpenERP)" Date: Thu, 4 Aug 2011 18:51:33 +0530 Subject: [PATCH 709/831] [IMP] remerge add relate button on product form bzr revid: aar@tinyerp.com-20110804132133-y10n60u932mr0eso --- addons/mrp/mrp_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index e481ee6382d..5d23608769b 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -974,7 +974,7 @@ Date: Thu, 4 Aug 2011 16:53:42 +0200 Subject: [PATCH 710/831] [ADD] Added error_callback to Dataset#write bzr revid: fme@openerp.com-20110804145342-81mvfc4x4ydt0hnu --- addons/base/static/src/js/data.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index 3b2c88acee1..fb926a2a592 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -318,13 +318,13 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data context: this.get_context() }, callback, error_callback); }, - write: function (id, data, callback) { + write: function (id, data, callback, error_callback) { return this.rpc('/base/dataset/save', { model: this.model, id: id, data: data, context: this.get_context() - }, callback); + }, callback, error_callback); }, unlink: function(ids, callback, error_callback) { var self = this; From 4b9a2bcf7b4b1b7b859ef9f8077d3d2e78c5a5fc Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 4 Aug 2011 16:54:53 +0200 Subject: [PATCH 711/831] [FIX] Many fixes for calendar view bzr revid: fme@openerp.com-20110804145453-imbj970742zqe8zs --- .../base_calendar/static/src/js/calendar.js | 43 +++++++++++++------ .../static/src/xml/base_calendar.xml | 2 +- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 2e5d0c6a2b2..2d86009db7b 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -21,6 +21,9 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ start: function() { this.rpc("/base_calendar/calendarview/load", {"model": this.model, "view_id": this.view_id, 'toolbar': true}, this.on_loaded); }, + stop: function() { + scheduler.clearAll(); + }, on_loaded: function(data) { this.calendar_fields = {}; this.ids = this.dataset.ids; @@ -64,13 +67,16 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.sidebar.add_toolbar(data.fields_view.toolbar); this.set_common_sidebar_sections(this.sidebar); this.sidebar.do_unfold(); - this.sidebar.do_fold.add_last(this.resize_scheduler); - this.sidebar.do_unfold.add_last(this.resize_scheduler); - this.sidebar.do_toggle.add_last(this.resize_scheduler); + this.sidebar.do_fold.add_last(this.refresh_scheduler); + this.sidebar.do_unfold.add_last(this.refresh_scheduler); + this.sidebar.do_toggle.add_last(this.refresh_scheduler); } this.init_scheduler(); this.has_been_loaded.resolve(); + if (this.dataset.ids.length) { + this.dataset.read_ids(this.dataset.ids, _.keys(this.fields), this.on_events_loaded); + } }, init_scheduler: function() { var self = this; @@ -82,11 +88,15 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ } scheduler.config.api_date = "%Y-%m-%d %H:%i"; scheduler.config.multi_day = true; //Multi day events are not rendered in daily and weekly views + scheduler.config.start_on_monday = true; + scheduler.config.scroll_hour = 8; + scheduler.config.drag_resize = scheduler.config.drag_create = !!this.date_stop; // Initialize Sceduler this.mode = this.mode || 'month'; scheduler.init('openerp_scheduler', null, this.mode); + scheduler.detachAllEvents(); scheduler.attachEvent('onEventAdded', this.do_create_event); scheduler.attachEvent('onEventDeleted', this.do_delete_event); scheduler.attachEvent('onEventChanged', this.do_save_event); @@ -100,8 +110,10 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ } }); }, - resize_scheduler: function() { + refresh_scheduler: function() { scheduler.setCurrentView(scheduler._date); + }, + refresh_minical: function() { scheduler.updateCalendar(this.mini_calendar); }, load_scheduler: function() { @@ -113,14 +125,14 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ '/base_calendar/static/lib/dhtmlxScheduler/sources/locale_' + self.session.locale_code + '.js', '/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_' + self.session.locale_code + '.js' ]).wait(function() { - self.schedule_events(events); + self.on_events_loaded(events); }); } else { - self.schedule_events(events); + self.on_events_loaded(events); } }); }, - schedule_events: function(events) { + on_events_loaded: function(events) { var self = this; scheduler.clearAll(); @@ -158,7 +170,8 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ res_events.push(this.convert_event(evt)); } scheduler.parse(res_events, 'json'); - this.resize_scheduler(); + this.refresh_scheduler(); + this.refresh_minical(); this.sidebar.responsible.on_events_loaded(sidebar_items); }, convert_event: function(event) { @@ -247,22 +260,26 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ var id = parseInt(r.result, 10); self.dataset.ids.push(id); scheduler.changeEventId(event_id, id); + self.refresh_minical(); }, function(r, event) { // TODO: open form view self.notification.warn(self.name, "Could not create event"); - event.preventDefault(); }); }, do_save_event: function(event_id, event_obj) { var self = this, data = this.get_event_data(event_obj); - this.dataset.write(event_id, data); + this.dataset.write(parseInt(event_id, 10), data, function() { + self.refresh_minical(); + }); }, do_delete_event: function(event_id, event_obj) { // dhtmlx sends this event even when it does not exist in openerp. // Eg: use cancel in dhtmlx new event dialog if (_.indexOf(this.dataset.ids, event_id) > -1) { - this.dataset.unlink(parseInt(event_id, 10)); + this.dataset.unlink(parseInt(event_id, 10, function() { + self.refresh_minical(); + })); } }, get_event_data: function(event_obj) { @@ -297,9 +314,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ // TODO: handle non-empty results.group_by with read_group self.dataset.context = self.context = results.context; self.dataset.domain = self.domain = results.domain; - self.dataset.read_slice(_.keys(self.fields), 0, self.limit, function(events) { - self.schedule_events(events); - }); + self.dataset.read_slice(_.keys(self.fields), 0, self.limit, self.on_events_loaded); }); }, do_show: function () { diff --git a/addons/base_calendar/static/src/xml/base_calendar.xml b/addons/base_calendar/static/src/xml/base_calendar.xml index f14fc6af450..d5350ec9046 100644 --- a/addons/base_calendar/static/src/xml/base_calendar.xml +++ b/addons/base_calendar/static/src/xml/base_calendar.xml @@ -1,7 +1,7 @@ From c1401ef8f04fbabbf23089c9e222c000528979cb Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:19:27 +0200 Subject: [PATCH 823/831] [FIX] Fixed css problem with reauired fields bzr revid: fme@openerp.com-20110811161927-ot5p552djlb1iigw --- addons/base/static/src/css/base.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index a629e559d4c..13294819f6b 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -923,7 +923,7 @@ label.error { height: 15px; } .openerp td.required input, .openerp td.required select { - background-color: #D2D2FF; + background-color: #D2D2FF !important; } .openerp td.invalid input, .openerp td.invalid select, .openerp td.invalid textarea { background-color: #F66 !important; From 9df84d52ed480d2e3ae8312e16c75197d612a473 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:21:04 +0200 Subject: [PATCH 824/831] [IMP] CalendarView: bind openerp form view to 'open details' icon bzr revid: fme@openerp.com-20110811162104-2pueyflxtpf7oqpf --- addons/base_calendar/static/src/js/calendar.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 9204695b663..9640f600b55 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -112,6 +112,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ scheduler.attachEvent('onEventDeleted', this.do_delete_event); scheduler.attachEvent('onEventChanged', this.do_save_event); scheduler.attachEvent('onDblClick', this.do_edit_event); + scheduler.attachEvent('onBeforeLightbox', this.do_edit_event); this.mini_calendar = scheduler.renderCalendar({ container: this.sidebar.navigator.element_id, @@ -259,9 +260,9 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.dataset.index = index; this.form_dialog.form.do_show(); this.form_dialog.open(); - } else { - this.notification.warn("Edit event", "Could not find event #" + event_id); + return false; } + return true; }, get_event_data: function(event_obj) { var data = { From 4df61cba6930f14e6a54fccfea52949b875f3a7d Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:22:10 +0200 Subject: [PATCH 825/831] [FIX] CalendarView: extra argument type check bzr revid: fme@openerp.com-20110811162210-suf52n8k1abgu2az --- addons/base_calendar/static/src/js/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 9640f600b55..c3331ca6c06 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -155,7 +155,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ label: (typeof filter === 'object') ? filter[1] : filter, color: evt.color } - if (fn_filter && !fn_filter(filter_item.value)) { + if (typeof(fn_filter) === 'function') { continue; } if (_.indexOf(sidebar_ids, filter_item.value) === -1) { From 1ce53f9425af367f3af6182af4a0d6814afb3ff0 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 18:26:09 +0200 Subject: [PATCH 826/831] [FIX] Bug in previous revision bzr revid: fme@openerp.com-20110811162609-k112p5t0bewnaj42 --- addons/base_calendar/static/src/js/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index c3331ca6c06..8cefd40193a 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -155,7 +155,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ label: (typeof filter === 'object') ? filter[1] : filter, color: evt.color } - if (typeof(fn_filter) === 'function') { + if (typeof(fn_filter) === 'function' && !fn_filter(filter_item.value)) { continue; } if (_.indexOf(sidebar_ids, filter_item.value) === -1) { From a94ac45ed761c632f4f8ecd4c6b8fdbf7549efcf Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 11 Aug 2011 19:13:37 +0200 Subject: [PATCH 827/831] [IMP] CalendarView: Added colors to events bzr revid: fme@openerp.com-20110811171337-ebal9w5qwsjfbq2c --- .../base_calendar/static/src/js/calendar.js | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/base_calendar/static/src/js/calendar.js index 8cefd40193a..22088493e16 100644 --- a/addons/base_calendar/static/src/js/calendar.js +++ b/addons/base_calendar/static/src/js/calendar.js @@ -22,6 +22,10 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ this.form_dialog = new openerp.base_calendar.CalendarFormDialog(this, {}, this.options.action_views_ids.form, dataset); this.form_dialog.start(); } + this.COLOR_PALETTE = ['#f57900', '#cc0000', '#d400a8', '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400', + '#fcaf3e', '#ef2929', '#ff00c9', '#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f', + '#ff8e00', '#ff0000', '#b0008c', '#9000ff', '#0078ff', '#00ff00', '#e6ff00', '#ffff00', + '#905000', '#9b0000', '#840067', '#510090', '#0000c9', '#009b00', '#9abe00', '#ffc900' ]; }, start: function() { this.rpc("/base_calendar/calendarview/load", {"model": this.model, "view_id": this.view_id, 'toolbar': true}, this.on_loaded); @@ -132,6 +136,10 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ reload_event: function(id) { this.dataset.read_ids([id], _.keys(this.fields), this.on_events_loaded); }, + get_color: function(index) { + index = index % this.COLOR_PALETTE.length; + return this.COLOR_PALETTE[index]; + }, on_events_loaded: function(events, fn_filter, no_filter_reload) { var self = this; @@ -149,30 +157,31 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({ if (this.color_field) { var filter = evt[this.color_field]; if (filter) { - //evt.color = '#dddddd'; var filter_item = { value: (typeof filter === 'object') ? filter[0] : filter, - label: (typeof filter === 'object') ? filter[1] : filter, - color: evt.color + label: (typeof filter === 'object') ? filter[1] : filter } if (typeof(fn_filter) === 'function' && !fn_filter(filter_item.value)) { continue; } - if (_.indexOf(sidebar_ids, filter_item.value) === -1) { + var filter_index = _.indexOf(sidebar_ids, filter_item.value); + if (filter_index === -1) { + evt.color = filter_item.color = this.get_color(sidebar_ids.length); sidebar_items.push(filter_item); sidebar_ids.push(filter_item.value); + } else { + evt.color = this.get_color(filter_index); } + evt.textColor = '#ffffff'; } } - /* - * TODO: check dates of type date - * if (this.fields[this.date_start]['type'] == 'date') { + if (this.fields[this.date_start]['type'] == 'date') { evt[this.date_start] = openerp.base.parse_date(evt[this.date_start]).set({hour: 9}).toString('yyyy-MM-dd HH:mm:ss'); } if (this.date_stop && evt[this.date_stop] && this.fields[this.date_stop]['type'] == 'date') { evt[this.date_stop] = openerp.base.parse_date(evt[this.date_stop]).set({hour: 17}).toString('yyyy-MM-dd HH:mm:ss'); - }*/ + } res_events.push(this.convert_event(evt)); } scheduler.parse(res_events, 'json'); From 2f9f557e185af4d0f72da7d194f12e48b2b1ed44 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 11 Aug 2011 20:12:17 +0200 Subject: [PATCH 828/831] [FIX] get rid of unsued menus and submenu bzr revid: al@openerp.com-20110811181217-y2yxdz34uswijwza --- openerp/addons/base/ir/ir.xml | 1 - openerp/addons/base/ir/ir_actions.py | 1 - openerp/osv/orm.py | 10 +--------- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/openerp/addons/base/ir/ir.xml b/openerp/addons/base/ir/ir.xml index 868e405e93c..c537d265dd2 100644 --- a/openerp/addons/base/ir/ir.xml +++ b/openerp/addons/base/ir/ir.xml @@ -535,7 +535,6 @@ - diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index ea3b21807fe..7b1cb937c3d 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -284,7 +284,6 @@ class act_window(osv.osv): 'filter': fields.boolean('Filter'), 'auto_search':fields.boolean('Auto Search'), 'search_view' : fields.function(_search_view, type='text', method=True, string='Search View'), - 'menus': fields.char('Menus', size=4096), 'help': fields.text('Action description', help='Optional help text for the users with a description of the target view, such as its usage and purpose.', translate=True), diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index c93467c6052..d4a5d808990 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1767,7 +1767,7 @@ class orm_template(object): :param view_type: type of the view to return if view_id is None ('form', tree', ...) :param context: context arguments, like lang, time zone :param toolbar: true to include contextual actions - :param submenu: example (portal_project module) + :param submenu: deprecated :return: dictionary describing the composition of the requested view (including inherited views and extensions) :raise AttributeError: * if the inherited view has unknown position to work with other than 'before', 'after', 'inside', 'replace' @@ -1999,14 +1999,6 @@ class orm_template(object): result['arch'] = xarch result['fields'] = xfields - if submenu: - if context and context.get('active_id', False): - data_menu = self.pool.get('ir.ui.menu').browse(cr, user, context['active_id'], context).action - if data_menu: - act_id = data_menu.id - if act_id: - data_action = self.pool.get('ir.actions.act_window').browse(cr, user, [act_id], context)[0] - result['submenu'] = getattr(data_action, 'menus', False) if toolbar: def clean(x): x = x[2] From 3278222800fc084b5cafea8cd1fe2d4de79eafcd Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 12 Aug 2011 10:00:51 +0200 Subject: [PATCH 829/831] [FIX] project_scrum: filters in field in override to project search view bzr revid: xmo@openerp.com-20110812080051-ozhrap5afiqunt1f --- addons/project_scrum/project_scrum_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml index 99b74157466..aa16a62c0b9 100644 --- a/addons/project_scrum/project_scrum_view.xml +++ b/addons/project_scrum/project_scrum_view.xml @@ -573,8 +573,8 @@ - - + + From 61e9552f6dcf29003dfbb842336c752d5f94a4dd Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 12 Aug 2011 10:36:10 +0200 Subject: [PATCH 830/831] [FIX] reintroduce o2m search field, aliases to CharField. Also make m2m search field an actual alias to CharField bzr revid: xmo@openerp.com-20110812083610-utduagt0np0h7rib --- addons/base/static/src/js/search.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index e88e31ebba0..4b746832a65 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -362,7 +362,8 @@ openerp.base.search.fields = new openerp.base.Registry({ 'datetime': 'openerp.base.search.DateTimeField', 'date': 'openerp.base.search.DateField', 'many2one': 'openerp.base.search.ManyToOneField', - 'many2many': 'openerp.base.search.ManyToManyField' + 'many2many': 'openerp.base.search.CharField', + 'one2many': 'openerp.base.search.CharField' }); openerp.base.search.Invalid = openerp.base.Class.extend( /** @lends openerp.base.search.Invalid# */{ /** @@ -723,11 +724,8 @@ openerp.base.search.DateField = openerp.base.search.Field.extend( /** @lends ope } }); openerp.base.search.DateTimeField = openerp.base.search.DateField.extend({ - // TODO: time? }); openerp.base.search.ManyToOneField = openerp.base.search.CharField.extend({ - // TODO: @widget - // TODO: .selection, .context, .domain init: function (view_section, field, view) { this._super(view_section, field, view); var self = this; @@ -795,12 +793,6 @@ openerp.base.search.ManyToOneField = openerp.base.search.CharField.extend({ return this._super(); } }); -/** - * m2m search field behaves pretty much exactly like a char field - * - * @class - */ -openerp.base.search.ManyToManyField = openerp.base.search.CharField.extend({}); openerp.base.search.ExtendedSearch = openerp.base.OldWidget.extend({ template: 'SearchView.extended_search', From 86a5de431bc6c59569cef680fc41ed712caa0f31 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 12 Aug 2011 10:38:20 +0200 Subject: [PATCH 831/831] [FIX] don't use @string on filters inside fields in search view, use @help bzr revid: xmo@openerp.com-20110812083820-tnk2yv7kkuylg9aw --- openerp/addons/base/res/partner/partner_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/partner/partner_view.xml b/openerp/addons/base/res/partner/partner_view.xml index 763147fb47e..7dc4a595adf 100644 --- a/openerp/addons/base/res/partner/partner_view.xml +++ b/openerp/addons/base/res/partner/partner_view.xml @@ -344,7 +344,7 @@ - +