From 82f492bc2c5bbca8b02168075b5d5356f1b35951 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 9 Mar 2012 16:29:38 +0100 Subject: [PATCH 001/102] [FIX] related fields: fix and simplify search (was wrong with a single indirection) bzr revid: rco@openerp.com-20120309152938-n467ap8hnw406rau --- openerp/osv/fields.py | 18 +++-------- openerp/tests/__init__.py | 2 ++ openerp/tests/test_fields.py | 59 ++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 openerp/tests/test_fields.py diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 7c1761a4aec..fdbd6a6f7cc 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -1153,20 +1153,10 @@ class related(function): """ def _fnct_search(self, tobj, cr, uid, obj=None, name=None, domain=None, context=None): - self._field_get2(cr, uid, obj, context) - i = len(self._arg)-1 - sarg = name - while i>0: - if type(sarg) in [type([]), type( (1,) )]: - where = [(self._arg[i], 'in', sarg)] - else: - where = [(self._arg[i], '=', sarg)] - if domain: - where = map(lambda x: (self._arg[i],x[1], x[2]), domain) - domain = [] - sarg = obj.pool.get(self._relations[i]['object']).search(cr, uid, where, context=context) - i -= 1 - return [(self._arg[0], 'in', sarg)] + # assume self._arg = ('foo', 'bar', 'baz') + # domain = [(name, op, val)] => search [('foo.bar.baz', op, val)] + field = '.'.join(self._arg) + return map(lambda x: (field, x[1], x[2]), domain) def _fnct_write(self,obj,cr, uid, ids, field_name, values, args, context=None): self._field_get2(cr, uid, obj, context=context) diff --git a/openerp/tests/__init__.py b/openerp/tests/__init__.py index 5fccb07a082..e02a7d7042c 100644 --- a/openerp/tests/__init__.py +++ b/openerp/tests/__init__.py @@ -11,6 +11,7 @@ See the :ref:`test-framework` section in the :ref:`features` list. import test_expression import test_ir_sequence import test_orm +import test_fields fast_suite = [ test_ir_sequence, @@ -19,6 +20,7 @@ fast_suite = [ checks = [ test_expression, test_orm, + test_fields, ] # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tests/test_fields.py b/openerp/tests/test_fields.py new file mode 100644 index 00000000000..c049a43fc97 --- /dev/null +++ b/openerp/tests/test_fields.py @@ -0,0 +1,59 @@ +# +# test cases for fields access, etc. +# + +import unittest2 +import common + +import openerp +from openerp.osv import fields + +class TestRelatedField(common.TransactionCase): + + def setUp(self): + super(TestRelatedField, self).setUp() + self.partner = self.registry('res.partner') + + def do_test_company_field(self, field): + # get a partner with a non-null company_id + ids = self.partner.search(self.cr, self.uid, [('company_id', '!=', False)], limit=1) + partner = self.partner.browse(self.cr, self.uid, ids[0]) + + # check reading related field + self.assertEqual(partner[field], partner.company_id) + + # check that search on related field is equivalent to original field + ids1 = self.partner.search(self.cr, self.uid, [('company_id', '=', partner.company_id.id)]) + ids2 = self.partner.search(self.cr, self.uid, [(field, '=', partner.company_id.id)]) + self.assertEqual(ids1, ids2) + + def test_1_single_related(self): + """ test a related field with a single indirection like fields.related('foo') """ + # add a related field test_related_company_id on res.partner + old_columns = self.partner._columns + self.partner._columns = dict(old_columns) + self.partner._columns.update({ + 'single_related_company_id': fields.related('company_id', type='many2one', obj='res.company'), + }) + + self.do_test_company_field('single_related_company_id') + + # restore res.partner fields + self.partner._columns = old_columns + + def test_2_related_related(self): + """ test a related field referring to a related field """ + # add a related field on a related field on res.partner + old_columns = self.partner._columns + self.partner._columns = dict(old_columns) + self.partner._columns.update({ + 'single_related_company_id': fields.related('company_id', type='many2one', obj='res.company'), + 'related_related_company_id': fields.related('single_related_company_id', type='many2one', obj='res.company'), + }) + + self.do_test_company_field('related_related_company_id') + + # restore res.partner fields + self.partner._columns = old_columns + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 8f8b5497d124fd553e6a44a21fca1eccca42d0f8 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 9 Mar 2012 17:15:47 +0100 Subject: [PATCH 002/102] [IMP] tests: add test on related fields bzr revid: rco@openerp.com-20120309161547-um53k5rqqts9flz6 --- openerp/tests/test_fields.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/openerp/tests/test_fields.py b/openerp/tests/test_fields.py index c049a43fc97..73f57ac8bbe 100644 --- a/openerp/tests/test_fields.py +++ b/openerp/tests/test_fields.py @@ -13,6 +13,29 @@ class TestRelatedField(common.TransactionCase): def setUp(self): super(TestRelatedField, self).setUp() self.partner = self.registry('res.partner') + self.company = self.registry('res.company') + + def test_0_related(self): + """ test an usual related field """ + # add a related field test_related_company_id on res.partner + old_columns = self.partner._columns + self.partner._columns = dict(old_columns) + self.partner._columns.update({ + 'related_company_partner_id': fields.related('company_id', 'partner_id', type='many2one', obj='res.partner'), + }) + + # find a company with a non-null partner_id + ids = self.company.search(self.cr, self.uid, [('partner_id', '!=', False)], limit=1) + id = ids[0] + + # find partners that satisfy [('partner_id.company_id', '=', id)] + company_ids = self.company.search(self.cr, self.uid, [('partner_id', '=', id)]) + partner_ids1 = self.partner.search(self.cr, self.uid, [('company_id', 'in', company_ids)]) + partner_ids2 = self.partner.search(self.cr, self.uid, [('related_company_partner_id', '=', id)]) + self.assertEqual(partner_ids1, partner_ids2) + + # restore res.partner fields + self.partner._columns = old_columns def do_test_company_field(self, field): # get a partner with a non-null company_id From 98e4bac0826b8fa1cc9b08db2b3d38fa26b3e576 Mon Sep 17 00:00:00 2001 From: "RGA(OpenERP)" <> Date: Wed, 3 Oct 2012 16:30:01 +0530 Subject: [PATCH 003/102] [FIX] field 'content_type' does not exist in model bzr revid: rgaopenerp-20121003110001-xdqt5035ddy5964f --- addons/mail/tests/test_mail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/tests/test_mail.py b/addons/mail/tests/test_mail.py index 7ec37d952bc..10506388da8 100644 --- a/addons/mail/tests/test_mail.py +++ b/addons/mail/tests/test_mail.py @@ -505,7 +505,7 @@ class test_mail(TestMailMockups): # 1. mass_mail on pigs and bird compose_id = mail_compose.create(cr, uid, - {'subject': _subject, 'body': '${object.description}', 'content_type': 'html'}, + {'subject': _subject, 'body': '${object.description}'}, {'default_composition_mode': 'mass_mail', 'default_model': 'mail.group', 'default_res_id': False, 'active_ids': [self.group_pigs_id, group_bird_id]}) compose = mail_compose.browse(cr, uid, compose_id) From 8e2e69976a47ed0f19d7afda0a99551ac35ec5af Mon Sep 17 00:00:00 2001 From: "RGA(OpenERP)" <> Date: Wed, 3 Oct 2012 19:03:20 +0530 Subject: [PATCH 004/102] [FIX] crm: Field 'categ_id' does not exist on browse bzr revid: rgaopenerp-20121003133320-pmkxe7i9iq4q71z8 --- addons/base_action_rule/base_action_rule.py | 5 ++--- addons/crm/crm_action_rule.py | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 7e9bbacab13..ac3c2cc483f 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -397,9 +397,8 @@ the rule to mark CC(mail to any other person defined in actions)."), obj.state = action.act_state write['state'] = action.act_state - if hasattr(obj, 'categ_id') and action.act_categ_id: - obj.categ_id = action.act_categ_id - write['categ_id'] = action.act_categ_id.id + if hasattr(obj, 'categ_ids') and action.act_categ_id: + write['categ_ids'] = [4, 0, action.act_categ_id.id] model_obj.write(cr, uid, [obj.id], write, context) diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py index 8b1ba655afc..b56c4d39126 100644 --- a/addons/crm/crm_action_rule.py +++ b/addons/crm/crm_action_rule.py @@ -57,8 +57,8 @@ class base_action_rule(osv.osv): if hasattr(obj, 'section_id'): ok = ok and (not action.trg_section_id or action.trg_section_id.id == obj.section_id.id) - if hasattr(obj, 'categ_id'): - ok = ok and (not action.trg_categ_id or action.trg_categ_id.id == obj.categ_id.id) + if hasattr(obj, 'categ_ids'): + ok = ok and (not action.trg_categ_id or action.trg_categ_id.id in obj.categ_ids) #Cheking for history regex = action.regex_history From 2ee00a9527c958b7501f81e8005e92a6626f976c Mon Sep 17 00:00:00 2001 From: "RGA(OpenERP)" <> Date: Thu, 4 Oct 2012 13:13:34 +0530 Subject: [PATCH 005/102] [fix] add hook in purchase to fix warrning of field 'purchase_id' does not exist on browse bzr revid: rgaopenerp-20121004074334-ardk1mi41e5hmabc --- addons/procurement/schedulers.py | 19 ++++++++++--------- addons/purchase/purchase.py | 6 ++++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 1c8ac5934fc..0c96bf1e689 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -197,6 +197,12 @@ class procurement_order(osv.osv): 'location_id': orderpoint.location_id.id, 'procure_method': 'make_to_order', 'origin': orderpoint.name} + + def _product_virtual_get(self, cr, uid, order_point): + location_obj = self.pool.get('stock.location') + return location_obj._product_virtual_get(cr, uid, + order_point.location_id.id, [order_point.product_id.id], + {'uom': order_point.product_uom.id})[order_point.product_id.id] def _procure_orderpoint_confirm(self, cr, uid, automatic=False,\ use_new_cursor=False, context=None, user_id=False): @@ -217,7 +223,7 @@ class procurement_order(osv.osv): if use_new_cursor: cr = pooler.get_db(use_new_cursor).cursor() orderpoint_obj = self.pool.get('stock.warehouse.orderpoint') - location_obj = self.pool.get('stock.location') + procurement_obj = self.pool.get('procurement.order') wf_service = netsvc.LocalService("workflow") offset = 0 @@ -227,14 +233,9 @@ class procurement_order(osv.osv): while ids: ids = orderpoint_obj.search(cr, uid, [], offset=offset, limit=100) for op in orderpoint_obj.browse(cr, uid, ids, context=context): - if op.procurement_id.state != 'exception': - if op.procurement_id and hasattr(op.procurement_id, 'purchase_id'): - if op.procurement_id.purchase_id.state in ('draft', 'confirmed'): - continue - prods = location_obj._product_virtual_get(cr, uid, - op.location_id.id, [op.product_id.id], - {'uom': op.product_uom.id})[op.product_id.id] - + prods = self._product_virtual_get(cr, uid, op) + if prods is None: + continue if prods < op.product_min_qty: qty = max(op.product_min_qty, op.product_max_qty)-prods diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index d654078a055..5cb88fb60f7 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -1080,6 +1080,12 @@ class procurement_order(osv.osv): self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]}) self.running_send_note(cr, uid, [procurement.id], context=context) return res + + def _product_virtual_get(self, cr, uid, order_point): + procurement = order_point.procurement_id + if procurement and procurement.state != 'exception' and procurement.purchase_id and procurement.purchase_id.state in ('draft', 'confirmed'): + return None + return super(procurement_order, self)._product_virtual_get(cr, uid, order_point) procurement_order() From 8766dd36473f6c608982c79ca9654ae364a325fb Mon Sep 17 00:00:00 2001 From: "Hiral Patel (OpenERP)" Date: Fri, 5 Oct 2012 11:38:02 +0530 Subject: [PATCH 006/102] [FIX] Remove duplicate key value violates unique constraint sale_order_name_uniq bzr revid: hip@tinyerp.com-20121005060802-wrawkel4j7evhkpa --- addons/sale/test/sale_order_demo.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/sale/test/sale_order_demo.yml b/addons/sale/test/sale_order_demo.yml index 05109efbea2..41a711d064c 100644 --- a/addons/sale/test/sale_order_demo.yml +++ b/addons/sale/test/sale_order_demo.yml @@ -2,6 +2,7 @@ In order to test process of the Sale Order, I create sale order - !record {model: sale.order, id: sale_order_test1}: + name: self.pool.get('ir.sequence').get(cr, uid, 'sale.order') partner_id: base.res_partner_2 note: Invoice after delivery payment_term: account.account_payment_term From 852811f0ca1346a5fe87c0a9069e5ec7928a4792 Mon Sep 17 00:00:00 2001 From: "Hiral Patel (OpenERP)" Date: Fri, 5 Oct 2012 11:56:36 +0530 Subject: [PATCH 007/102] [FIX] Remove error method is not defined in sale bzr revid: hip@tinyerp.com-20121005062636-ef4bbsi126a9ty6t --- addons/sale/sale.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index c47bf1357c8..4ab3dc996f3 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -87,6 +87,13 @@ class sale_order(osv.osv): return res + def test_state(self, cr, uid, ids, mode, *args): + return True + def action_ship_create(self, cr, uid, ids, context=None): + return True + def action_ship_end(self, cr, uid, ids, context=None): + return True + def _invoiced_rate(self, cursor, user, ids, name, arg, context=None): res = {} for sale in self.browse(cursor, user, ids, context=context): From a763ece07225ccb2e0c4ee9e37d7e6ee8f4f1a77 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Fri, 5 Oct 2012 12:55:41 +0530 Subject: [PATCH 008/102] [FIX]ir.ui.view type field depricated bzr revid: tch@tinyerp.com-20121005072541-v86g7zpo8yj93o4n --- addons/delivery/delivery_view.xml | 1 - addons/mail/mail_followers_view.xml | 1 - addons/sale_stock/report/sale_report_view.xml | 3 +-- addons/sale_stock/res_config_view.xml | 3 +-- addons/sale_stock/sale_stock_view.xml | 2 -- 5 files changed, 2 insertions(+), 8 deletions(-) diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml index 4ac1ab12573..9b67d6b01b9 100644 --- a/addons/delivery/delivery_view.xml +++ b/addons/delivery/delivery_view.xml @@ -322,7 +322,6 @@ delivery.stock.picking_withcarrier.in.form.view - form stock.picking.in diff --git a/addons/mail/mail_followers_view.xml b/addons/mail/mail_followers_view.xml index 9fc8a545a20..a9d1d80240b 100644 --- a/addons/mail/mail_followers_view.xml +++ b/addons/mail/mail_followers_view.xml @@ -19,7 +19,6 @@ mail.followers.form mail.followers - form
diff --git a/addons/sale_stock/report/sale_report_view.xml b/addons/sale_stock/report/sale_report_view.xml index 99aefa7e66f..3f5b30ffedb 100644 --- a/addons/sale_stock/report/sale_report_view.xml +++ b/addons/sale_stock/report/sale_report_view.xml @@ -5,7 +5,6 @@ sale.report.tree.sale.stock sale.report - tree @@ -13,4 +12,4 @@ - \ No newline at end of file + diff --git a/addons/sale_stock/res_config_view.xml b/addons/sale_stock/res_config_view.xml index 1f5380b0f58..850595bad06 100644 --- a/addons/sale_stock/res_config_view.xml +++ b/addons/sale_stock/res_config_view.xml @@ -5,7 +5,6 @@ sale settings sale.config.settings - form @@ -72,4 +71,4 @@ - \ No newline at end of file + diff --git a/addons/sale_stock/sale_stock_view.xml b/addons/sale_stock/sale_stock_view.xml index 7efb2849a52..650b6d3c36d 100644 --- a/addons/sale_stock/sale_stock_view.xml +++ b/addons/sale_stock/sale_stock_view.xml @@ -18,7 +18,6 @@ sale.shop.sale.stock sale.shop - tree @@ -32,7 +31,6 @@ sale.order.form.sale.stock sale.order - form From 9e1bd7dbe5accaa512e06be98ab58d0655a155c3 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Fri, 5 Oct 2012 16:52:23 +0530 Subject: [PATCH 009/102] [FIX]fix account warning bzr revid: tch@tinyerp.com-20121005112223-3jz7lk4abr8pv5f2 --- addons/account/report/account_print_overdue.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/account/report/account_print_overdue.py b/addons/account/report/account_print_overdue.py index 1b617e9afa4..8ef542fe768 100644 --- a/addons/account/report/account_print_overdue.py +++ b/addons/account/report/account_print_overdue.py @@ -50,7 +50,8 @@ class Overdue(report_sxw.rml_parse): 'country_id': False, } if adr_id: - result = res_partner.read(self.cr, self.uid, [adr_id], context=self.context.copy()) + fields = result.keys() + result = res_partner.read(self.cr, self.uid, [adr_id],fields, context=self.context.copy()) result[0]['country_id'] = result[0]['country_id'] and result[0]['country_id'][1] or False result[0]['state_id'] = result[0]['state_id'] and result[0]['state_id'][1] or False return result From 6036dbe84bd209d15c6171461ee219b3e836f893 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Fri, 5 Oct 2012 17:06:39 +0530 Subject: [PATCH 010/102] [FIX]fix account warning bzr revid: tch@tinyerp.com-20121005113639-vmixe8corot0x4xd --- addons/account/report/account_print_overdue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/report/account_print_overdue.py b/addons/account/report/account_print_overdue.py index 8ef542fe768..826f00a4be7 100644 --- a/addons/account/report/account_print_overdue.py +++ b/addons/account/report/account_print_overdue.py @@ -51,7 +51,7 @@ class Overdue(report_sxw.rml_parse): } if adr_id: fields = result.keys() - result = res_partner.read(self.cr, self.uid, [adr_id],fields, context=self.context.copy()) + result = res_partner.read(self.cr, self.uid, [adr_id], fields, context=self.context.copy()) result[0]['country_id'] = result[0]['country_id'] and result[0]['country_id'][1] or False result[0]['state_id'] = result[0]['state_id'] and result[0]['state_id'][1] or False return result From 6b350e63125d20bda6d80e4eecdfbc6596a2968a Mon Sep 17 00:00:00 2001 From: "Hiral Patel (OpenERP)" Date: Mon, 8 Oct 2012 12:42:59 +0530 Subject: [PATCH 011/102] [FIX] Remove error field Sale Name (sale_name) can not be searched bzr revid: hip@tinyerp.com-20121008071259-1yhdnnw9w88np11t --- addons/sale_mrp/sale_mrp.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/sale_mrp/sale_mrp.py b/addons/sale_mrp/sale_mrp.py index 7397edbec2b..d441196b37f 100644 --- a/addons/sale_mrp/sale_mrp.py +++ b/addons/sale_mrp/sale_mrp.py @@ -69,8 +69,13 @@ class mrp_production(osv.osv): res[production.id] = move.sale_line_id and move.sale_line_id.order_id.client_order_ref or False return res + def _sale_name_search(self, cursor, user, obj, name, args, domain=None, context=None): + if context is None: + context = {} + return [] + _columns = { - 'sale_name': fields.function(_ref_calc, multi='sale_name', type='char', string='Sale Name', help='Indicate the name of sales order.'), + 'sale_name': fields.function(_ref_calc, multi='sale_name', fnct_search=_sale_name_search, type='char', string='Sale Name', help='Indicate the name of sales order.'), 'sale_ref': fields.function(_ref_calc, multi='sale_name', type='char', string='Sale Reference', help='Indicate the Customer Reference from sales order.'), } From 5e106949c006fab4178a810476f653ac51468252 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Mon, 8 Oct 2012 12:43:40 +0530 Subject: [PATCH 012/102] [FIX]remove account coda bzr revid: tch@tinyerp.com-20121008071340-h4d83c0shw6l15zm --- addons/account_coda/i18n/en_AU.po | 3739 ----------------------------- 1 file changed, 3739 deletions(-) delete mode 100644 addons/account_coda/i18n/en_AU.po diff --git a/addons/account_coda/i18n/en_AU.po b/addons/account_coda/i18n/en_AU.po deleted file mode 100644 index 319220741c5..00000000000 --- a/addons/account_coda/i18n/en_AU.po +++ /dev/null @@ -1,3739 +0,0 @@ -# English (Australia) translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-02-08 00:35+0000\n" -"PO-Revision-Date: 2012-09-27 03:22+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: English (Australia) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-09-28 04:39+0000\n" -"X-Generator: Launchpad (build 16043)\n" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_21 -msgid "Cash withdrawal on card (PROTON)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_412 -msgid "Advice of expiry charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_11 -msgid "Your purchase of luncheon vouchers" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_05 -msgid "Partial payment subscription" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_54 -msgid "Unexecutable transfer order" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_02 -msgid "Individual transfer order initiated by the bank" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_21 -msgid "Charges for preparing pay packets" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.type,description:account_coda.actt_9 -msgid "Detail of 7. The records in a separate application keep type 9." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_426 -msgid "Belgian broker's commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_031 -msgid "Charges foreign cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_002 -msgid "Interest paid" -msgstr "" - -#. module: account_coda -#: field:account.coda.trans.type,parent_id:0 -msgid "Parent" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_03_62 -msgid "" -"cheques debited on account, but debit cancelled afterwards for lack of cover " -"(double debit/contra-entry of transaction 01 or 05)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_05 -msgid "Bill claimed back" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_016 -msgid "BLIW/IBLC dues" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:911 -#, python-format -msgid "CODA File is Imported :" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_066 -msgid "Fixed loan advance - reimbursement" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_05 -msgid "Purchase of foreign bank notes" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:277 -#: code:addons/account_coda/wizard/account_coda_import.py:469 -#, python-format -msgid "" -"\n" -"The File contains an invalid CODA Transaction Family : %s!" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_030 -msgid "Account insurance" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_042 -msgid "Payment card costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_212 -msgid "Warehousing fee" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/account_coda.py:300 -#, python-format -msgid "" -"Cannot delete CODA Bank Statement '%s' of Journal '%s'.\n" -"The associated Bank Statement has already been confirmed !\n" -"Please undo this action first!" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_66 -msgid "Financial centralization" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_420 -msgid "Retention charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_50 -msgid "Transfer in your favour" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_87 -#: model:account.coda.trans.code,description:account_coda.actcc_04_87 -#: model:account.coda.trans.code,description:account_coda.actcc_05_87 -#: model:account.coda.trans.code,description:account_coda.actcc_07_87 -#: model:account.coda.trans.code,description:account_coda.actcc_09_87 -#: model:account.coda.trans.code,description:account_coda.actcc_11_87 -#: model:account.coda.trans.code,description:account_coda.actcc_13_87 -#: model:account.coda.trans.code,description:account_coda.actcc_30_87 -#: model:account.coda.trans.code,description:account_coda.actcc_35_87 -#: model:account.coda.trans.code,description:account_coda.actcc_41_87 -#: model:account.coda.trans.code,description:account_coda.actcc_43_87 -#: model:account.coda.trans.code,description:account_coda.actcc_47_87 -msgid "Reimbursement of costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_56 -msgid "Remittance of supplier's bill with guarantee" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_002 -msgid "Communication of the bank" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,amount:0 -msgid "Amount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_70 -msgid "Only with stockbrokers when they deliver the securities to the bank" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_413 -msgid "Acceptance charges" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,counterparty_bic:0 -msgid "Counterparty BIC" -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,def_receivable:0 -msgid "" -"Set here the receivable account that will be used, by default, if the " -"partner is not found." -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,def_payable:0 -msgid "" -"Set here the payable account that will be used, by default, if the partner " -"is not found." -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:144 -#, python-format -msgid "Warning !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_39 -msgid "Return of an irregular bill of exchange" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_011 -msgid "VAT" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_09 -msgid "Debit of the agios to the account of the drawee" -msgstr "" - -#. module: account_coda -#: view:account.coda.comm.type:0 -#: model:ir.actions.act_window,name:account_coda.action_account_coda_comm_type_form -#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_comm_type_form -msgid "CODA Structured Communication Types" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_30_50 -msgid "Spot sale of foreign exchange" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,ref:0 -msgid "Reference" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_58 -msgid "Remittance of supplier's bill without guarantee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_03 -msgid "Payment receipt card" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_207 -msgid "Non-conformity fee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_022 -msgid "Priority costs" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:268 -#: code:addons/account_coda/wizard/account_coda_import.py:460 -#, python-format -msgid "" -"\n" -"The File contains an invalid CODA Transaction Type : %s!" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_045 -msgid "Handling costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_47_13 -msgid "Debit customer, payment of agios, interest, exchange commission, etc." -msgstr "" - -#. module: account_coda -#: field:account.coda,date:0 -msgid "Import Date" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_039 -msgid "Telecommunications" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,globalisation_id:0 -msgid "Globalisation ID" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/account_coda.py:399 -#, python-format -msgid "Delete operation not allowed !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_000 -msgid "Net amount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_11 -msgid "Department store cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_206 -msgid "Surety fee/payment under reserve" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_53 -msgid "Cash deposit at an ATM" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_30_52 -msgid "Forward sale of foreign exchange" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_05 -msgid "" -"Debit of the subscriber for the complementary payment of partly-paid shares" -msgstr "" - -#. module: account_coda -#: model:ir.model,name:account_coda.model_account_bank_statement_line_global -msgid "Batch Payment Info" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_00_33 -#: model:account.coda.trans.code,description:account_coda.actcc_00_83 -msgid "Value correction" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_27 -msgid "For publications of the financial institution" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_01 -msgid "Payment of foreign bill" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_024 -msgid "Growth premium" -msgstr "" - -#. module: account_coda -#: selection:account.coda.trans.code,type:0 -msgid "Transaction Code" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_13 -msgid "Discount foreign supplier's bills" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_05 -msgid "Direct debit" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_47_11 -msgid "Bills of lading" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_00 -msgid "Undefined transactions" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_62 -msgid "When reimbursed separately to the subscriber" -msgstr "" - -#. module: account_coda -#: view:account.coda.trans.category:0 -msgid "CODA Transaction Category" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_067 -msgid "Fixed loan advance - extension" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_07 -msgid "Your repayment instalment credits" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_09_13 -msgid "On the account of the head office" -msgstr "" - -#. module: account_coda -#: constraint:account.bank.statement:0 -msgid "The journal and period chosen have to belong to the same company." -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_115 -msgid "Terminal cash deposit" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:301 -#: code:addons/account_coda/wizard/account_coda_import.py:493 -#, python-format -msgid "" -"\n" -"The File contains an invalid Structured Communication Type : %s!" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_43_01 -msgid "" -"Debit of a cheque in foreign currency or in EUR in favour of a foreigner" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_54 -msgid "Discount abroad" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_62 -msgid "Remittance of documents abroad - credit after collection" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,name:0 -msgid "Communication" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_00_35 -#: model:account.coda.trans.code,description:account_coda.actcc_00_85 -msgid "Correction" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:404 -#, python-format -msgid "" -"\n" -" Bank Statement '%s' line '%s':\n" -" No partner record assigned: There are multiple partners with the " -"same Bank Account Number '%s'!\n" -" Please correct the configuration and perform the import again or " -"otherwise change the corresponding entry manually in the generated Bank " -"Statement." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_30_33 -#: model:account.coda.trans.code,description:account_coda.actcc_30_83 -msgid "Value (date) correction" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_063 -msgid "Rounding differences" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:295 -#: code:addons/account_coda/wizard/account_coda_import.py:487 -#, python-format -msgid "Transaction Category unknown, please consult your bank." -msgstr "" - -#. module: account_coda -#: view:account.coda.trans.code:0 -msgid "CODA Transaction Code" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_052 -msgid "Residence state tax" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_03_17 -msgid "Amount of the cheque; if any, charges receive code 37" -msgstr "" - -#. module: account_coda -#: view:account.coda:0 -msgid "Additional Information" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_120 -msgid "Correction of a transaction" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_64 -#: model:account.coda.trans.code,description:account_coda.actcc_41_64 -msgid "Transfer to your account" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_124 -msgid "Number of the credit card" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_13 -msgid "Renting of safes" -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,find_bbacom:0 -msgid "" -"Partner lookup via the 'BBA' Structured Communication field of the Invoice." -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_104 -msgid "Equivalent in EUR" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_50 -msgid "Remittance of foreign bill credit after collection" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_03 -msgid "Your purchase by payment card" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.type,description:account_coda.actt_1 -msgid "" -"Amount as totalised by the customer; e.g. a file regrouping payments of " -"wages or payments made to suppliers or a file regrouping collections for " -"which the customer is debited or credited with one single amount. As a " -"matter of principle, this type is also used when no detailed data is " -"following (type 5)." -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:519 -#, python-format -msgid "" -"\n" -"CODA parsing error on information data record 3.3, seq nr %s!\n" -"Please report this issue via your OpenERP support channel." -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "Credit Transactions." -msgstr "" - -#. module: account_coda -#: field:account.coda.trans.type,type:0 -msgid "Transaction Type" -msgstr "" - -#. module: account_coda -#: model:ir.model,name:account_coda.model_account_coda -msgid "Object to store CODA Data Files" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_029 -msgid "Protest charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_053 -#: model:account.coda.trans.code,description:account_coda.actcc_80_43 -msgid "Printing of forms" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_003 -msgid "Credit commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_43_58 -msgid "Remittance of foreign cheque credit after collection" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.type,description:account_coda.actt_8 -msgid "Detail of 3." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_05_58 -msgid "" -"(cancellation of an undue debit of the debtor at the initiative of the " -"financial institution or the debtor for lack of cover)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_11 -msgid "Payable coupons/repayable securities" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_50 -msgid "Sale of securities" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_51 -msgid "Transfer in your favour – initiated by the bank" -msgstr "" - -#. module: account_coda -#: view:account.coda:0 -#: field:account.coda,coda_data:0 -#: field:account.coda.import,coda_data:0 -msgid "CODA File" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_38 -msgid "Provisionally unpaid" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_003 -msgid "RBP data" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_06 -msgid "Share option plan – exercising an option" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_051 -msgid "Withholding tax" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_006 -msgid "Information concerning the detail amount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_43_37 -msgid "Costs relating to payment of foreign cheques" -msgstr "" - -#. module: account_coda -#: field:account.coda.trans.code,parent_id:0 -msgid "Family" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_66 -msgid "Retrocession of issue commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_68 -msgid "Credit after Proton payments" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -#: field:coda.bank.statement,period_id:0 -msgid "Period" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:588 -#: code:addons/account_coda/wizard/account_coda_import.py:926 -#, python-format -msgid "CODA Import failed !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_09_01 -msgid "" -"Withdrawal by counter cheque or receipt; cash remitted by the bank clerk" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_01 -msgid "Short-term loan" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_01 -msgid "Domestic or local SEPA credit transfers" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_03 -msgid "Settlement credit cards" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_402 -msgid "Certification costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_015 -msgid "Correspondent charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_415 -#: model:account.coda.trans.code,description:account_coda.actcc_80_39 -msgid "Surety fee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_017 -#: model:account.coda.trans.code,description:account_coda.actcc_80_23 -#: model:account.coda.trans.code,description:account_coda.actcc_80_41 -msgid "Research costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_07 -msgid "Collective transfer" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:912 -#, python-format -msgid "" -"\n" -"\n" -"Number of statements : " -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_05 -#: model:account.coda.trans.code,comment:account_coda.actcc_01_07 -msgid "" -"The principal will be debited for the total amount of the file entered." -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:332 -#: code:addons/account_coda/wizard/account_coda_import.py:357 -#, python-format -msgid "" -"\n" -"CODA parsing error on movement data record 2.3, seq nr %s!\n" -"Please report this issue via your OpenERP support channel." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_52 -msgid "Payment in your favour" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_08 -msgid "Registering compensation for savings accounts" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_51 -msgid "Company issues paper in return for cash" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,journal:0 -#: view:coda.bank.statement:0 -#: field:coda.bank.statement,journal_id:0 -msgid "Journal" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_19 -msgid "Settlement of credit cards" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_87 -msgid "Reimbursement of cheque-related costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_50 -msgid "Settlement of instalment credit" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_52 -msgid "Payment by a third person" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_60 -msgid "Remittance of documents abroad - credit under usual reserve" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_52 -msgid "Loading GSM cards" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -#: view:coda.bank.statement.line:0 -#: field:coda.bank.statement.line,note:0 -msgid "Notes" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement,balance_end_real:0 -msgid "Ending Balance" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_64 -msgid "Your issue" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:870 -#, python-format -msgid "" -"\n" -"\n" -"Bank Journal: %s\n" -"CODA Version: %s\n" -"CODA Sequence Number: %s\n" -"Paper Statement Sequence Number: %s\n" -"Bank Account: %s\n" -"Account Holder Name: %s\n" -"Date: %s, Starting Balance: %.2f, Ending Balance: %.2f%s" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,val_date:0 -msgid "Valuta Date" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_01 -msgid "" -"Purchase of domestic or foreign securities, including subscription rights, " -"certificates, etc." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_41_38 -msgid "Costs relating to incoming foreign and non-SEPA transfers" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_52 -msgid "Whatever the currency of the security" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_069 -msgid "Forward arbitrage contracts : sum to be supplied by customer" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:388 -#, python-format -msgid "" -"\n" -" Bank Statement '%s' line '%s':\n" -" There is no invoice matching the Structured Communication '%s'!\n" -" Please verify and adjust the invoice and perform the import again or " -"otherwise change the corresponding entry manually in the generated Bank " -"Statement." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_407 -msgid "Costs Article 45" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_007 -msgid "Information concerning the detail cash" -msgstr "" - -#. module: account_coda -#: view:account.coda:0 -#: field:account.coda,company_id:0 -#: field:coda.bank.account,company_id:0 -#: field:coda.bank.statement,company_id:0 -#: field:coda.bank.statement.line,company_id:0 -msgid "Company" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_35 -msgid "Cash advance" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_47 -msgid "Foreign commercial paper" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_13_15 -msgid "" -"Hire-purchase agreement under which the financial institution is the lessor" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_66 -msgid "Remittance of cheque by your branch - credit under usual reserve" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_50 -msgid "Credit of the remitter" -msgstr "" - -#. module: account_coda -#: field:account.coda.trans.category,category:0 -msgid "Transaction Category" -msgstr "" - -#. module: account_coda -#: field:account.coda,statement_ids:0 -msgid "Generated CODA Bank Statements" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_09 -msgid "Purchase of petrol coupons" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_52 -msgid "Remittance of foreign bill credit under usual reserve" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_061 -#: model:account.coda.trans.code,description:account_coda.actcc_80_47 -msgid "Charging fees for transactions" -msgstr "" - -#. module: account_coda -#: model:ir.model,name:account_coda.model_account_coda_trans_category -msgid "CODA transaction category" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_21 -msgid "Other credit applications" -msgstr "" - -#. module: account_coda -#: selection:coda.bank.statement.line,type:0 -msgid "Supplier" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_009 -msgid "Travelling expenses" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_30 -msgid "Various transactions" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_406 -msgid "Collection charges" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -msgid "Transactions" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_50 -msgid "Cash payment" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_27 -msgid "Subscription fee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_036 -msgid "Costs relating to a refused cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_101 -msgid "Credit transfer or cash payment with structured format communication" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_127 -msgid "European direct debit (SEPA)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_068 -msgid "Countervalue of an entry" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_010 -#: model:account.coda.trans.code,description:account_coda.actcc_80_31 -msgid "Writ service fee" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:635 -#, python-format -msgid "" -"\n" -"The CODA Statement %s Starting Balance (%.2f) does not correspond with the " -"previous Closing Balance (%.2f) in journal %s!" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_13 -msgid "Your repurchase of issue" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_409 -msgid "Safe deposit charges" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,def_payable:0 -msgid "Default Payable Account" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_055 -msgid "Repayment loan or credit capital" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_05 -msgid "Settlement of fixed advance" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_15 -msgid "" -"Commission collected to the debit of the customer to whom the bank delivers " -"a key which gives access to the night safe" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_059 -msgid "Default interest" -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,coda_st_naming:0 -msgid "" -"Define the rules to create the name of the Bank Statements generated by the " -"CODA processing.\n" -"E.g. %(code)s%(y)s/%(paper)s\n" -"\n" -"Variables:\n" -"Bank Journal Code: %(code)s\n" -"Current Year with Century: %(year)s\n" -"Current Year without Century: %(y)s\n" -"CODA sequence number: %(coda)s\n" -"Paper Statement sequence number: %(paper)s" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_108 -#: model:account.coda.trans.code,description:account_coda.actcc_35_01 -#: model:account.coda.trans.code,description:account_coda.actcc_35_50 -msgid "Closing" -msgstr "" - -#. module: account_coda -#: help:coda.bank.statement.line,globalisation_id:0 -msgid "" -"Code to identify transactions belonging to the same globalisation level " -"within a batch payment" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_05 -msgid "Commercial paper claimed back" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_411 -msgid "Fixed collection charge" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_64 -msgid "Your winning lottery ticket" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_009 -msgid "" -"Identification of the de ultimate ordering customer/debtor (SEPA SCT/SDD)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_05 -msgid "Card charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_03 -msgid "Payment card charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_54 -msgid "Remittance of commercial paper for discount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_05_01 -msgid "Payment" -msgstr "" - -#. module: account_coda -#: view:account.coda.import:0 -msgid "_Cancel" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_07 -msgid "Purchase of gold/pieces" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_15 -msgid "Balance due insurance premium" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_11 -msgid "Debit of the issuer by the bank in charge of the financial service" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_58 -msgid "Remittance of cheques, vouchers, etc. credit after collection" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_19 -#: model:account.coda.trans.code,description:account_coda.actcc_09_68 -msgid "Difference in payment" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,date:0 -msgid "Entry Date" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:193 -#, python-format -msgid "" -"\n" -"Please check if the 'Bank Account Number', 'Currency' and 'Account " -"Description' fields of your configuration record match with '%s', '%s' and " -"'%s' !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_58 -msgid "Idem without guarantee" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:139 -#, python-format -msgid "" -"\n" -"CODA File with Filename '%s' and Creation Date '%s' has already been " -"imported !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_63 -msgid "Second credit of unpaid cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_065 -msgid "Interest payment advice" -msgstr "" - -#. module: account_coda -#: field:account.coda.trans.code,type:0 -#: field:coda.bank.account,state:0 -#: field:coda.bank.statement,type:0 -#: field:coda.bank.statement.line,type:0 -msgid "Type" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_112 -msgid "ATM payment (usually Eurocheque card)" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,description1:0 -msgid "Primary Account Description" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_126 -msgid "Term investments" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_100 -msgid "" -"(SEPA) payment with a structured format communication applying the ISO " -"standard 11649: Structured creditor reference to remittan" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:164 -#, python-format -msgid "" -"\n" -"Foreign bank accounts with IBAN structure are not supported !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_100 -msgid "Gross amount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_43_62 -msgid "Reversal of cheques" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/account_coda.py:299 -#, python-format -msgid "Invalid action !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_64 -#: model:account.coda.trans.code,comment:account_coda.actcc_41_13 -#: model:account.coda.trans.code,comment:account_coda.actcc_41_64 -msgid "Intracompany" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_30_01 -msgid "Spot purchase of foreign exchange" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_429 -msgid "Foreign Stock Exchange tax" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_05_05 -#: model:account.coda.trans.code,description:account_coda.actcc_05_54 -msgid "Reimbursement" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:868 -#, python-format -msgid "None" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_405 -msgid "Bill guarantee commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_06 -msgid "Extension" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_008 -msgid "Identification of the de ultimate beneficiary/creditor (SEPA SCT/SDD)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_49 -msgid "Foreign counter transactions" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_01 -msgid "Cash withdrawal" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,partner_id:0 -msgid "Partner" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_37 -msgid "" -"Fixed right, either one-off or periodical; for details, see \"categories\"" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_05 -msgid "Loading Proton" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_21 -msgid "Pay-packet charges" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,transfer_account:0 -msgid "Default Internal Transfer Account" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_074 -msgid "Mailing costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_07 -msgid "Unpaid foreign bill" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_07 -msgid "Payment by GSM" -msgstr "" - -#. module: account_coda -#: view:coda.bank.account:0 -#: selection:coda.bank.account,state:0 -#: view:coda.bank.statement:0 -#: selection:coda.bank.statement,type:0 -msgid "Normal" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_05_50 -msgid "Credit after collection" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_80 -msgid "Separately charged costs and provisions" -msgstr "" - -#. module: account_coda -#: view:coda.bank.account:0 -#: field:coda.bank.account,currency:0 -#: field:coda.bank.statement,currency:0 -msgid "Currency" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_06 -msgid "Extension of maturity date" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,def_receivable:0 -msgid "Default Receivable Account" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_15 -msgid "Night safe" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "Total Amount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_214 -msgid "Issue commission (delivery order)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_13_07 -msgid "" -"Often by standing order or direct debit. In case of direct debit, family 13 " -"is used." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_01 -msgid "Loading a GSM card" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_021 -msgid "Costs for drawing up a bank cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_026 -msgid "Handling commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_201 -msgid "Advice notice commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_64 -#: model:account.coda.trans.code,description:account_coda.actcc_47_64 -msgid "Warrant" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_07 -msgid "Unpaid commercial paper" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:120 -#: code:addons/account_coda/wizard/account_coda_import.py:130 -#: code:addons/account_coda/wizard/account_coda_import.py:159 -#: code:addons/account_coda/wizard/account_coda_import.py:168 -#: code:addons/account_coda/wizard/account_coda_import.py:174 -#: code:addons/account_coda/wizard/account_coda_import.py:198 -#: code:addons/account_coda/wizard/account_coda_import.py:272 -#: code:addons/account_coda/wizard/account_coda_import.py:281 -#: code:addons/account_coda/wizard/account_coda_import.py:305 -#: code:addons/account_coda/wizard/account_coda_import.py:440 -#: code:addons/account_coda/wizard/account_coda_import.py:464 -#: code:addons/account_coda/wizard/account_coda_import.py:473 -#: code:addons/account_coda/wizard/account_coda_import.py:497 -#, python-format -msgid "Data Error!" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_010 -msgid "Information pertaining to sale or purchase of securities" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_54 -msgid "Your payment ATM" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_123 -msgid "Fees and commissions" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:689 -#, python-format -msgid "" -"Free Communication:\n" -" %s" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_43_15 -msgid "Purchase of an international bank cheque" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,coda_st_naming:0 -msgid "Bank Statement Naming Policy" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement,date:0 -msgid "Date" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_00_00 -#: model:account.coda.trans.code,description:account_coda.actcc_30_39 -#: model:account.coda.trans.code,description:account_coda.actcc_30_89 -msgid "Undefined transaction" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "Extended Filters..." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_06 -msgid "Costs chargeable to the remitter" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_205 -msgid "" -"Documentary payment commission | Document commission | Drawdown fee | " -"Negotiation fee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_60 -msgid "Settlement of mortgage loan" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_01 -msgid "Purchase of securities" -msgstr "" - -#. module: account_coda -#: field:account.coda,note:0 -msgid "Import Log" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_07 -msgid "Domestic commercial paper" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_034 -msgid "Reinvestment fee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_12 -msgid "Costs for opening a bank guarantee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_414 -msgid "Regularisation charges" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -#: field:coda.bank.statement.line,statement_id:0 -#: model:ir.actions.act_window,name:account_coda.act_account_bank_statement_goto_coda_bank_statement -#: model:ir.model,name:account_coda.model_coda_bank_statement -msgid "CODA Bank Statement" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_15 -msgid "Your repayment hire-purchase and similar claims" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_62 -msgid "Reversal of cheque" -msgstr "" - -#. module: account_coda -#: field:account.coda.trans.code,code:0 -msgid "Code" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_032 -msgid "Drawing up a circular cheque" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -msgid "Seq" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_52 -msgid "Payment night safe" -msgstr "" - -#. module: account_coda -#: model:ir.actions.act_window,name:account_coda.act_coda_bank_statement_goto_account_bank_statement -#: model:ir.model,name:account_coda.model_account_bank_statement -msgid "Bank Statement" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,counterparty_name:0 -msgid "Counterparty Name" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_006 -msgid "Various fees/commissions" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_209 -msgid "Transfer commission" -msgstr "" - -#. module: account_coda -#: selection:coda.bank.statement.line,type:0 -msgid "Information" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_00_39 -#: model:account.coda.trans.code,description:account_coda.actcc_00_89 -msgid "Cancellation of a transaction" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.type,description:account_coda.actt_3 -msgid "" -"Simple amount with detailed data; e.g. in case of charges for cross-border " -"credit transfers." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_15 -msgid "Your purchase of lottery tickets" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_41_05 -msgid "Collective payments of wages" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_17 -msgid "Collected for unsealed deposit of securities, and other parcels" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_004 -msgid "Counterparty’s banker" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:426 -#, python-format -msgid "" -"\n" -" Bank Statement '%s' line '%s':\n" -" No matching partner record found!\n" -" Please adjust the corresponding entry manually in the generated Bank " -"Statement." -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,journal:0 -msgid "Bank Journal for the Bank Statement" -msgstr "" - -#. module: account_coda -#: selection:coda.bank.statement.line,type:0 -msgid "Globalisation" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_54 -msgid "Fixed advance – capital and interest" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_11 -msgid "Payment documents abroad" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_09 -msgid "" -"Postage recouped to the debit of the customer (including forwarding charges)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_04 -msgid "Costs for holding a documentary cash credit" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement,balance_start:0 -msgid "Starting Balance" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_13 -msgid "Settlement of bank acceptances" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_200 -msgid "Overall documentary credit charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_25 -msgid "Renting of direct debit box" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_52 -msgid "" -"Payment of coupons from a deposit or settlement of coupons delivered over " -"the counter - credit under usual reserve" -msgstr "" - -#. module: account_coda -#: help:coda.bank.statement.line,globalisation_level:0 -msgid "" -"The value which is mentioned (1 to 9), specifies the hierarchy level of the " -"globalisation of which this record is the first.\n" -"The same code will be repeated at the end of the globalisation." -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,description2:0 -msgid "Secondary Account Description" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_211 -msgid "Credit arrangement fee | Additional credit arrangement fee" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -#: model:ir.actions.act_window,name:account_coda.action_coda_bank_statements -#: model:ir.ui.menu,name:account_coda.menu_coda_bank_statements -msgid "CODA Bank Statements" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_62 -msgid "Term loan" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_70 -msgid "Sale of traveller’s cheque" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,name:0 -#: field:coda.bank.statement,name:0 -msgid "Name" -msgstr "" - -#. module: account_coda -#: view:account.coda:0 -#: field:account.coda,coda_creation_date:0 -msgid "CODA Creation Date" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:583 -#: code:addons/account_coda/wizard/account_coda_import.py:904 -#, python-format -msgid "" -"\n" -"Unknown Error : " -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_035 -msgid "Charges foreign documentary bill" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_39 -msgid "Agios on guarantees given" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_070 -msgid "Forward arbitrage contracts : sum to be supplied by bank" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_56 -#: model:account.coda.trans.code,description:account_coda.actcc_11_56 -msgid "Reserve" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_23 -msgid "" -"Costs charged for all kinds of research (information on past transactions, " -"address retrieval, ...)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_14 -msgid "Handling costs instalment credit" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.type,description:account_coda.actt_6 -msgid "" -"Detail of 2. Simple amount without detailed data. Normally, data of this " -"kind comes after type 2. The customer may ask for a separate file containing " -"the detailed data. In that case, one will speak of a ‘separate application’. " -"The records in a separate application keep type 6." -msgstr "" - -#. module: account_coda -#: view:account.coda:0 -msgid "CODA Files" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_17 -msgid "Financial centralisation" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_404 -msgid "Discount commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_45 -msgid "Documentary credit charges" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:913 -#, python-format -msgid "" -"\n" -"Number of errors : " -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_22 -msgid "Management/custody" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_51 -msgid "Tender" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_56 -msgid "Non-presented certified cheques" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_408 -msgid "Cover commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_071 -msgid "Fixed loan advance - availability" -msgstr "" - -#. module: account_coda -#: field:account.coda,name:0 -#: field:account.coda.import,coda_fname:0 -msgid "CODA Filename" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_31 -msgid "E.g. for signing invoices" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_04_37 -msgid "Various costs for possessing or using a payment card" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_37 -msgid "Costs related to commercial paper" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_043 -#: model:account.coda.trans.code,description:account_coda.actcc_80_07 -msgid "Insurance costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_431 -msgid "Delivery of a copy" -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,transfer_account:0 -msgid "" -"Set here the default account that will be used for internal transfer between " -"own bank accounts (e.g. transfer between current and deposit bank accounts)." -msgstr "" - -#. module: account_coda -#: view:account.coda:0 -#: view:coda.bank.account:0 -#: view:coda.bank.statement:0 -#: view:coda.bank.statement.line:0 -msgid "Group By..." -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,awaiting_account:0 -msgid "Default Account for Unrecognized Movement" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:580 -#: code:addons/account_coda/wizard/account_coda_import.py:897 -#, python-format -msgid "" -"\n" -"System Error : " -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_60 -msgid "Non-presented circular cheque" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement,line_ids:0 -msgid "CODA Bank Statement lines" -msgstr "" - -#. module: account_coda -#: sql_constraint:account.coda:0 -msgid "This CODA has already been imported !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_19 -msgid "Documentary import credits" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:320 -#, python-format -msgid "" -"\n" -"CODA parsing error on movement data record 2.2, seq nr %s!\n" -"Please report this issue via your OpenERP support channel." -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_001 -msgid "Data concerning the counterparty" -msgstr "" - -#. module: account_coda -#: view:account.coda.comm.type:0 -msgid "CODA Structured Communication Type" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_07 -msgid "Contra-entry of a direct credit or of a discount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_30_55 -msgid "Interest term investment" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_007 -#: model:account.coda.trans.code,description:account_coda.actcc_80_37 -msgid "Access right to database" -msgstr "" - -#. module: account_coda -#: model:ir.model,name:account_coda.model_account_coda_trans_type -msgid "CODA transaction type" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,account_id:0 -msgid "Account" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_37 -msgid "Costs relating to the payment of a foreign bill" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_13 -msgid "Eurocheque written out abroad" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_13_01 -msgid "Capital and/or interest (specified by the category)" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "Glob. Am." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_17 -msgid "Charge for safe custody" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_102 -msgid "" -"Credit transfer or cash payment with reconstituted structured format " -"communication" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_86 -msgid "Payment after cession" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_14 -#: model:account.coda.trans.code,description:account_coda.actcc_47_14 -msgid "Warrant fallen due" -msgstr "" - -#. module: account_coda -#: model:ir.actions.act_window,name:account_coda.action_imported_coda_files -#: model:ir.ui.menu,name:account_coda.menu_imported_coda_files -msgid "Imported CODA Files" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_29 -msgid "Charges collected for: - commercial information - sundry information" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_15 -msgid "In case of subscription before the interest due date" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_43 -msgid "Foreign cheques" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_62 -msgid "Sale of gold/pieces under usual reserve" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_51 -msgid "The bank takes the initiative for crediting the customer’s account." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_13_05 -msgid "Full or partial reimbursement of a fixed advance at maturity date" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_26 -msgid "Travel insurance premium" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_416 -msgid "Charges for the deposit of security" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_04_04 -msgid "At home as well as abroad" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:192 -#, python-format -msgid "" -"\n" -"No matching CODA Bank Account Configuration record found !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_50 -msgid "Remittance of commercial paper - credit after collection" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -msgid "Search CODA Bank Statements" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_410 -msgid "Reclamation charges" -msgstr "" - -#. module: account_coda -#: model:ir.actions.act_window,help:account_coda.action_coda_bank_statements -msgid "" -"The CODA Bank Statements contain the information encoded in their " -"originating CODA file in a human readable format. The Bank Statements " -"associated with a CODA contain the subset of the CODA Bank Statement data " -"that is required for the creation of the Accounting Entries." -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_114 -msgid "POS credit - individual transaction" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_70 -msgid "Settlement of discount bank acceptance" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_04_02 -#: model:account.coda.trans.code,comment:account_coda.actcc_04_08 -msgid "Eurozone = countries which have the euro as their official currency" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_02 -msgid "The bank takes the initiative for debiting the customer’s account." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_05_58 -msgid "Reversal" -msgstr "" - -#. module: account_coda -#: view:coda.bank.account:0 -#: selection:coda.bank.account,state:0 -#: view:coda.bank.statement:0 -#: selection:coda.bank.statement,type:0 -msgid "Info" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_02 -msgid "Costs relating to electronic output" -msgstr "" - -#. module: account_coda -#: sql_constraint:account.coda.comm.type:0 -msgid "The Structured Communication Code must be unique !" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:57 -#, python-format -msgid "Wizard in incorrect state. Please hit the Cancel button!" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_418 -msgid "Endorsement commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_005 -msgid "Renting of letterbox" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_13 -msgid "Commission for renting a safe deposit box" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_39 -msgid "To be used for issued circular cheques given in consignment" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_11 -msgid "Securities" -msgstr "" - -#. module: account_coda -#: selection:coda.bank.statement.line,type:0 -msgid "Free Communication" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.type,description:account_coda.actt_2 -msgid "" -"Amount as totalised by the bank; e.g. : the total amount of a series of " -"credit transfers with a structured communication As a matter of principle, " -"this type will also be used when no detailed data (type 6 or 7) is following." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_37 -msgid "Cheque-related costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_033 -msgid "Charges for a foreign bill" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_13 -msgid "Cash withdrawal by your branch or agents" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_049 -msgid "Fiscal stamps/stamp duty" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_03_58 -msgid "" -"Also for vouchers, postal orders, anything but bills of exchange, " -"acquittances, promissory notes, etc." -msgstr "" - -#. module: account_coda -#: view:account.coda.import:0 -msgid "Select Your File :" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_06 -msgid "Damage relating to bills and cheques" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_09 -msgid "Unpaid voucher" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_13 -msgid "Unissued part (see 64)" -msgstr "" - -#. module: account_coda -#: view:account.coda.import:0 -#: model:ir.actions.act_window,name:account_coda.action_account_coda_import -#: model:ir.actions.act_window,name:account_coda.wizard_account_coda_import_1 -#: model:ir.actions.act_window,name:account_coda.wizard_account_coda_import_2 -#: model:ir.model,name:account_coda.model_account_coda_import -msgid "Import CODA File" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:289 -#: code:addons/account_coda/wizard/account_coda_import.py:481 -#, python-format -msgid "Transaction Code unknown, please consult your bank." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_55 -msgid "Fixed advance – interest only" -msgstr "" - -#. module: account_coda -#: view:account.coda.trans.type:0 -msgid "CODA Transaction Type" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,globalisation_level:0 -msgid "Globalisation Level" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_020 -msgid "Costs of physical delivery" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_60 -msgid "Sale of foreign bank notes" -msgstr "" - -#. module: account_coda -#: field:account.coda.import,note:0 -msgid "Log" -msgstr "" - -#. module: account_coda -#: view:account.coda:0 -msgid "Search CODA Files" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_52 -msgid "Remittance of commercial paper - credit under usual reserve" -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,active:0 -msgid "" -"If the active field is set to False, it will allow you to hide the Bank " -"Account without removing it." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_54 -msgid "Among other things advances or promissory notes" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_10 -msgid "Purchase of Smartcard" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:664 -#, python-format -msgid "" -"Transaction Type: %s - %s\n" -"Transaction Family: %s - %s\n" -"Transaction Code: %s - %s\n" -"Transaction Category: %s - %s\n" -"Structured Communication Type: %s - %s\n" -"Communication: %s" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_208 -msgid "Commitment fee deferred payment" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_005 -msgid "Data concerning the correspondent" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_66 -msgid "For professionals such as insurances and stockbrokers" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_19 -msgid "" -"Collected for securities, gold, pass-books, etc. placed in safe custody" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_09_19 -msgid "" -"Used in case of payments accepted under reserve of count, result of " -"overcrediting" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:630 -#, python-format -msgid "" -"\n" -"Configuration Error in journal %s!\n" -"Please verify the Default Debit and Credit Account settings." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_09 -msgid "Agio on supplier's bill" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_213 -msgid "Financing fee" -msgstr "" - -#. module: account_coda -#: field:account.bank.statement.line.global,coda_statement_line_ids:0 -msgid "CODA Bank Statement Lines" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:170 -#, python-format -msgid "" -"\n" -"Unsupported bank account structure !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_037 -msgid "Commission for handling charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_03 -msgid "Subscription to securities" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_425 -msgid "Foreign broker's commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.type,description:account_coda.actt_7 -msgid "" -"Detail of 2. Simple account with detailed data The records in a separate " -"application keep type 7." -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_125 -#: model:account.coda.trans.code,description:account_coda.actcf_13 -#: view:coda.bank.statement.line:0 -msgid "Credit" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:155 -#, python-format -msgid "" -"\n" -"Foreign bank accounts with BBAN structure are not supported !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_09 -msgid "Counter transactions" -msgstr "" - -#. module: account_coda -#: model:ir.model,name:account_coda.model_coda_bank_statement_line -msgid "CODA Bank Statement Line" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_17 -#: model:account.coda.trans.code,comment:account_coda.actcc_01_66 -msgid "" -"In case of centralisation by the bank, type 2 will be allotted to this " -"transaction. This total can be followed by the detailed movement." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_057 -msgid "Interest subsidy" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_41 -msgid "International credit transfers - non-SEPA credit transfers" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_03_87 -msgid "Overall amount, VAT included" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_43_01 -msgid "Payment of a foreign cheque" -msgstr "" - -#. module: account_coda -#: selection:coda.bank.statement.line,type:0 -msgid "General" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:856 -#, python-format -msgid "" -"\n" -"Incorrect ending Balance in CODA Statement %s for Bank Account %s!" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_04 -msgid "Issues" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_37 -msgid "" -"If any, detail in the category (e.g. costs for presentation for acceptance, " -"etc.)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_17 -msgid "Purchase of fiscal stamps" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_41_01 -#: model:account.coda.trans.code,description:account_coda.actcc_41_50 -msgid "Transfer" -msgstr "" - -#. module: account_coda -#: view:account.coda.import:0 -msgid "View Bank Statement(s)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_20 -msgid "Drawing up a certificate" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_013 -msgid "Payment commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_01 -msgid "" -"Bills of exchange, acquittances, promissory notes; debit of the drawee" -msgstr "" - -#. module: account_coda -#: view:account.coda.import:0 -msgid "View CODA Bank Statement(s)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_15 -msgid "Your purchase bank cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_05 -msgid "Payment of voucher" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_68 -msgid "Documentary export credits" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,find_bbacom:0 -msgid "Lookup Invoice" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_03 -msgid "Cheques" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_05_56 -msgid "Unexecutable reimbursement" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_05_03 -msgid "Unpaid debt" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_52 -msgid "" -"First credit of cheques, vouchers, luncheon vouchers, postal orders, credit " -"under usual reserve" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_05 -msgid "" -"Bill claimed back at the drawer's request (bill claimed back before maturity " -"date)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_11 -msgid "" -"Costs chargeable to clients who ask to have their correspondence kept at " -"their disposal at the bank's counter" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_64 -msgid "" -"Amount paid to the issuer by the bank in charge of the placement (firm " -"underwriting or not); also used for the payment in full of partly-paid " -"shares, see transaction 05" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_03_15 -msgid "Cheque drawn by the bank on itself, usually with charges." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_072 -msgid "Countervalue of commission to third party" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_01 -msgid "Individual transfer order" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:436 -#, python-format -msgid "" -"\n" -"Movement data records of type 2.%s are not supported !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_02 -msgid "Payment by means of a payment card within the Eurozone" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_01 -msgid "" -"Credit transfer given by the customer on paper or electronically, even if " -"the execution date of this transfer is in the future. Domestic payments as " -"well as euro payments meeting the requirements." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_35 -msgid "Closing (periodical settlements for interest, costs,…)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_51 -msgid "Unloading Proton" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_019 -msgid "Tax on physical delivery" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement,statement_id:0 -msgid "Associated Bank Statement" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_08 -msgid "" -"Debit of the remitter when the drawee pays in advance directly to the " -"remitter (regards bank acceptances)" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_103 -msgid "number (e.g. of the cheque, of the card, etc.)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_24 -msgid "Participation in and management of interest refund system" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -#: view:coda.bank.statement.line:0 -msgid "Glob. Amount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_58 -msgid "Payment by your branch/agents" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_25 -#: model:account.coda.trans.code,description:account_coda.actcc_43_70 -msgid "Purchase of traveller’s cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_39 -msgid "Your issue circular cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_09 -msgid "" -"For professionals (stockbrokers) only, whoever the issuer may be (Belgian or " -"foreigner)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_33 -msgid "" -"Costs not specified otherwise, often with a manual communication (e.g. for " -"collecting, ordering funds). VAT excluded = type 0 VAT included = type 3 (at " -"least 3 articles)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_023 -msgid "Exercising fee" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:934 -#, python-format -msgid "Import CODA File result" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_111 -msgid "POS credit – Globalisation" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "Search Bank Transactions" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:577 -#, python-format -msgid "" -"\n" -"Application Error : " -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,description1:0 -#: help:coda.bank.account,description2:0 -msgid "" -"The Primary or Secondary Account Description should match the corresponding " -"Account Description in the CODA file." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_17 -msgid "Management fee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_03 -msgid "Cash withdrawal by card (ATM)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_16 -msgid "Bank confirmation to revisor or accountant" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcf_04 -msgid "Cards" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "Statement" -msgstr "" - -#. module: account_coda -#: view:account.coda.trans.type:0 -#: model:ir.actions.act_window,name:account_coda.action_account_coda_trans_type_form -#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_trans_type_form -msgid "CODA Transaction Types" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_50 -msgid "Credit after a payment at a terminal" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_02 -msgid "Long-term loan" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_30_05 -#: model:account.coda.trans.code,description:account_coda.actcc_30_54 -msgid "Capital and/or interest term investment" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_68 -msgid "Credit of a payment via electronic purse" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_028 -msgid "Fidelity premium" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_39 -msgid "Provisionally unpaid due to other reason than manual presentation" -msgstr "" - -#. module: account_coda -#: constraint:coda.bank.account:0 -msgid "" -"\n" -"\n" -"Configuration Error! \n" -"The Bank Account Currency should match the Journal Currency !" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_35 -msgid "" -"Costs charged for calculating the amount of the tax to be paid (e.g. " -"Fiscomat)." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_014 -msgid "Collection commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_43_52 -msgid "Remittance of foreign cheque credit under usual reserve" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,counterparty_number:0 -msgid "Counterparty Number" -msgstr "" - -#. module: account_coda -#: view:account.coda.import:0 -msgid "_Import" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_04_03 -msgid "See annexe III : communication 124" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:420 -#, python-format -msgid "" -"\n" -" Bank Statement '%s' line '%s':\n" -" The bank account '%s' is not defined for the partner '%s'!\n" -" Please correct the configuration and perform the import again or " -"otherwise change the corresponding entry manually in the generated Bank " -"Statement." -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_113 -msgid "ATM/POS debit" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_30_03 -msgid "Forward purchase of foreign exchange" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_50 -msgid "Credit of a payment via terminal" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_04_52 -msgid "Credit provider" -msgstr "" - -#. module: account_coda -#: selection:account.coda.trans.code,type:0 -msgid "Transaction Family" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_68 -msgid "In case coupons attached to a purchased security are missing" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:57 -#: code:addons/account_coda/wizard/account_coda_import.py:325 -#: code:addons/account_coda/wizard/account_coda_import.py:337 -#: code:addons/account_coda/wizard/account_coda_import.py:362 -#: code:addons/account_coda/wizard/account_coda_import.py:513 -#: code:addons/account_coda/wizard/account_coda_import.py:524 -#, python-format -msgid "Error!" -msgstr "" - -#. module: account_coda -#: help:coda.bank.statement,type:0 -msgid "" -"No Bank Statements are associated with CODA Bank Statements of type 'Info'." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_09_58 -msgid "" -"Takes priority over transaction 52 (hence a payment made by an agent in a " -"night safe = 58 and not 52)" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_121 -msgid "Commercial bills" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_11 -msgid "Costs for the safe custody of correspondence" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_041 -msgid "Credit card costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_56 -msgid "Subsidy" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_06 -msgid "Payment with tank card" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_107 -msgid "Direct debit – DOM’80" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_60 -msgid "Reversal of voucher" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_00_87 -msgid "Costs refunded" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_41_17 -msgid "Financial centralisation (debit)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_02 -msgid "Payment to the bank on maturity date" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_025 -msgid "Individual entry for exchange charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_004 -#: model:account.coda.trans.code,description:account_coda.actcc_80_09 -msgid "Postage" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_09_50 -msgid "" -"For own account - the comment for the client is given in the communication; " -"also for mixed payments (cash + cheques) - not to be communicated to the " -"clients; for payments made by a third person: see family 01" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_09_68 -msgid "" -"In case of payment accepted under reserve of count; result of undercrediting " -"- see also transaction 19" -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,bank_id:0 -msgid "" -"Bank Account Number.\n" -"The CODA import function will find its CODA processing parameters on this " -"number." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_05 -msgid "Payment of wages, etc." -msgstr "" - -#. module: account_coda -#: sql_constraint:coda.bank.account:0 -msgid "" -"The combination of Bank Account, Account Description and Currency must be " -"unique !" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "Debit" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_10 -msgid "Renewal of agreed maturity date" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_55 -msgid "Income from payments by GSM" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_19 -msgid "Regularisation costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_13 -#: model:account.coda.trans.code,description:account_coda.actcc_41_13 -msgid "Transfer from your account" -msgstr "" - -#. module: account_coda -#: sql_constraint:account.bank.statement.line.global:0 -msgid "The code must be unique !" -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,currency:0 -#: help:coda.bank.statement,currency:0 -msgid "The currency of the CODA Bank Statement" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_41_07 -msgid "Collective transfers" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:116 -#, python-format -msgid "" -"\n" -"CODA V%s statements are not supported, please contact your bank!" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_427 -msgid "Belgian Stock Exchange tax" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_12 -msgid "Safe custody" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_001 -msgid "Interest received" -msgstr "" - -#. module: account_coda -#: model:ir.ui.menu,name:account_coda.menu_account_coda_import -msgid "Import CODA Files" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_105 -msgid "original amount of the transaction" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_09 -msgid "Your semi-standing order" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:508 -#, python-format -msgid "" -"\n" -"CODA parsing error on information data record 3.2, seq nr %s!\n" -"Please report this issue via your OpenERP support channel." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_09 -#: model:account.coda.trans.code,description:account_coda.actcc_11_70 -msgid "Settlement of securities" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_04_01 -msgid "Debit customer who is loading" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_047 -msgid "Charges extension bill" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_18 -msgid "Trade information" -msgstr "" - -#. module: account_coda -#: field:account.coda.trans.code,comment:0 -msgid "Comment" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_203 -msgid "" -"Confirmation fee | Additional confirmation fee | Commitment fee | Flat fee | " -"Confirmation reservation commission | Additional reservation commission" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_027 -msgid "Charges for unpaid bills" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_204 -msgid "Amendment fee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_11 -msgid "Your semi-standing order – payment to employees" -msgstr "" - -#. module: account_coda -#: model:ir.ui.menu,name:account_coda.menu_account_coda -msgid "CODA Processing" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_11 -msgid "Your repayment mortgage loan" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_00_37 -#: model:account.coda.trans.code,description:account_coda.actcc_01_37 -#: model:account.coda.trans.code,description:account_coda.actcc_04_37 -#: model:account.coda.trans.code,description:account_coda.actcc_05_37 -#: model:account.coda.trans.code,description:account_coda.actcc_09_37 -#: model:account.coda.trans.code,description:account_coda.actcc_11_37 -#: model:account.coda.trans.code,description:account_coda.actcc_30_37 -#: model:account.coda.trans.code,description:account_coda.actcc_35_37 -#: model:account.coda.trans.code,description:account_coda.actcc_80_35 -msgid "Costs" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_050 -msgid "Capital term investment" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_03_05 -msgid "Payment of holiday pay, etc." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_25 -msgid "" -"Commission for the renting of boxes put at the disposal for the " -"correspondence" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_008 -#: model:account.coda.trans.code,description:account_coda.actcc_80_29 -msgid "Information charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_03 -msgid "" -"Credit transfer for which the order has been given once and which is carried " -"out again at regular intervals without any change." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.type,description:account_coda.actt_0 -msgid "" -"Simple amount without detailed data; e.g. : an individual credit transfer " -"(free of charges)." -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,find_partner:0 -msgid "Partner lookup via Bank Account Number." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_403 -msgid "Minimum discount rate" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_47_56 -msgid "Remittance of guaranteed foreign supplier's bill" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_02 -msgid "Tenders" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_43_07 -msgid "Unpaid foreign cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_11_03 -msgid "" -"Bonds, shares, tap issues of CDs, with or without payment of interest, etc." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_09_66 -msgid "Repurchase of petrol coupons" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_058 -msgid "Capital premium" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_15 -#: model:account.coda.trans.code,description:account_coda.actcc_11_62 -msgid "Interim interest on subscription" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,counterparty_currency:0 -msgid "Counterparty Currency" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_202 -msgid "Advising commission | Additional advising commission" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,find_partner:0 -msgid "Lookup Partner" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -#: view:coda.bank.statement.line:0 -msgid "Glob. Id" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement:0 -#: view:coda.bank.statement.line:0 -#: model:ir.actions.act_window,name:account_coda.action_coda_bank_statement_line -#: model:ir.ui.menu,name:account_coda.coda_bank_statement_line -msgid "CODA Statement Lines" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,globalisation_amount:0 -msgid "Globalisation Amount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_01_13 -msgid "" -"Transfer from one account to another account of the same customer at the " -"bank's or the customer's initiative (intracompany)." -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:890 -#, python-format -msgid "" -"\n" -"Error ! " -msgstr "" - -#. module: account_coda -#: view:account.coda:0 -#: field:account.coda,user_id:0 -msgid "User" -msgstr "" - -#. module: account_coda -#: model:ir.model,name:account_coda.model_account_coda_trans_code -msgid "CODA transaction code" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_05_52 -msgid "Credit under usual reserve" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:125 -#, python-format -msgid "" -"\n" -"The CODA creation date doesn't fall within a defined Accounting Period!\n" -"Please create the Accounting Period for date %s." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_04_50 -msgid "Except Proton" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_011 -msgid "Information pertaining to coupons" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_122 -msgid "Bills - calculation of interest" -msgstr "" - -#. module: account_coda -#: view:account.coda.trans.code:0 -#: model:ir.actions.act_window,name:account_coda.action_account_coda_trans_code_form -#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_trans_code_form -msgid "CODA Transaction Codes" -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,state:0 -msgid "" -"No Bank Statements will be generated for CODA Bank Statements from Bank " -"Accounts of type 'Info'." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_49_03 -msgid "ATM withdrawal" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_012 -msgid "Exchange commission" -msgstr "" - -#. module: account_coda -#: view:coda.bank.account:0 -#: model:ir.actions.act_window,name:account_coda.action_coda_bank_account_form -#: model:ir.model,name:account_coda.model_coda_bank_account -#: model:ir.ui.menu,name:account_coda.menu_action_coda_bank_account_form -msgid "CODA Bank Account Configuration" -msgstr "" - -#. module: account_coda -#: field:coda.bank.account,active:0 -msgid "Active" -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/wizard/account_coda_import.py:724 -#, python-format -msgid "" -"Partner name: %s \n" -"Partner Account Number: %s\n" -"Transaction Type: %s - %s\n" -"Transaction Family: %s - %s\n" -"Transaction Code: %s - %s\n" -"Transaction Category: %s - %s\n" -"Structured Communication Type: %s - %s\n" -"Communication: %s" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_04 -msgid "Cash withdrawal from an ATM" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement,balance_end:0 -msgid "Balance" -msgstr "" - -#. module: account_coda -#: field:account.bank.statement,coda_statement_id:0 -msgid "Associated CODA Bank Statement" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_13_37 -msgid "Credit-related costs" -msgstr "" - -#. module: account_coda -#: model:ir.ui.menu,name:account_coda.menu_manage_coda -msgid "CODA Configuration" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_07_39 -msgid "Debit of the drawer after credit under usual reserve or discount" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_41_66 -msgid "Financial centralisation (credit)" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_08 -msgid "Payment in advance" -msgstr "" - -#. module: account_coda -#: view:account.coda.import:0 -msgid "Close" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_19 -msgid "Special charge for safe custody" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_01 -msgid "Payment of your cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_43_07 -msgid "Foreign cheque remitted for collection that returns unpaid" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_80_07 -msgid "" -"- insurance costs of account holders against fatal accidents - passing-on of " -"several insurance costs" -msgstr "" - -#. module: account_coda -#: help:coda.bank.account,awaiting_account:0 -msgid "" -"Set here the default account that will be used if the partner cannot be " -"unambiguously identified." -msgstr "" - -#. module: account_coda -#: code:addons/account_coda/account_coda.py:280 -#, python-format -msgid "No CODA Bank Statement found for this Bank Statement!" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_07 -msgid "Definitely unpaid cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_04_08 -msgid "Payment by means of a payment card outside the Eurozone" -msgstr "" - -#. module: account_coda -#: model:account.coda.comm.type,description:account_coda.acct_106 -msgid "" -"Method of calculation (VAT, withholding tax on income, commission, etc.)" -msgstr "" - -#. module: account_coda -#: model:ir.model,name:account_coda.model_account_coda_comm_type -msgid "CODA structured communication type" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_64 -msgid "Reversal of settlement of credit card" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_58 -msgid "" -"Repayable securities from a deposit or delivered at the counter - credit " -"under usual reserve" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.type,description:account_coda.actt_5 -msgid "" -"Detail of 1. Standard procedure is no detailing. However, the customer may " -"ask for detailed data to be included into his file after the overall record " -"(type 1)." -msgstr "" - -#. module: account_coda -#: field:account.coda.comm.type,description:0 -#: field:account.coda.trans.category,description:0 -#: field:account.coda.trans.code,description:0 -#: field:account.coda.trans.type,description:0 -msgid "Description" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_07_01 -msgid "Payment commercial paper" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_419 -msgid "Bank service fee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_41_37 -msgid "Costs relating to outgoing foreign transfers and non-SEPA transfers" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_03_17 -msgid "Your certified cheque" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_400 -msgid "Acceptance fee" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_11_68 -msgid "Compensation for missing coupon" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "Debit Transactions." -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_33 -msgid "Miscellaneous fees and commissions" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_03 -#: model:account.coda.trans.code,description:account_coda.actcc_41_03 -msgid "Standing order" -msgstr "" - -#. module: account_coda -#: selection:coda.bank.statement.line,type:0 -msgid "Customer" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_49 -#: model:account.coda.trans.code,description:account_coda.actcc_01_99 -#: model:account.coda.trans.code,description:account_coda.actcc_03_49 -#: model:account.coda.trans.code,description:account_coda.actcc_03_99 -#: model:account.coda.trans.code,description:account_coda.actcc_04_49 -#: model:account.coda.trans.code,description:account_coda.actcc_04_99 -#: model:account.coda.trans.code,description:account_coda.actcc_05_49 -#: model:account.coda.trans.code,description:account_coda.actcc_05_99 -#: model:account.coda.trans.code,description:account_coda.actcc_07_49 -#: model:account.coda.trans.code,description:account_coda.actcc_07_99 -#: model:account.coda.trans.code,description:account_coda.actcc_09_49 -#: model:account.coda.trans.code,description:account_coda.actcc_09_99 -#: model:account.coda.trans.code,description:account_coda.actcc_11_49 -#: model:account.coda.trans.code,description:account_coda.actcc_11_99 -#: model:account.coda.trans.code,description:account_coda.actcc_13_49 -#: model:account.coda.trans.code,description:account_coda.actcc_13_99 -#: model:account.coda.trans.code,description:account_coda.actcc_30_49 -#: model:account.coda.trans.code,description:account_coda.actcc_30_99 -#: model:account.coda.trans.code,description:account_coda.actcc_35_49 -#: model:account.coda.trans.code,description:account_coda.actcc_35_99 -#: model:account.coda.trans.code,description:account_coda.actcc_41_49 -#: model:account.coda.trans.code,description:account_coda.actcc_41_99 -#: model:account.coda.trans.code,description:account_coda.actcc_43_49 -#: model:account.coda.trans.code,description:account_coda.actcc_43_99 -#: model:account.coda.trans.code,description:account_coda.actcc_47_49 -#: model:account.coda.trans.code,description:account_coda.actcc_47_99 -#: model:account.coda.trans.code,description:account_coda.actcc_80_49 -#: model:account.coda.trans.code,description:account_coda.actcc_80_99 -msgid "Cancellation or correction" -msgstr "" - -#. module: account_coda -#: view:coda.bank.account:0 -#: field:coda.bank.account,bank_id:0 -#: field:coda.bank.statement,coda_bank_account_id:0 -#: view:coda.bank.statement.line:0 -#: field:coda.bank.statement.line,coda_bank_account_id:0 -msgid "Bank Account" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,comment:account_coda.actcc_13_56 -msgid "Interest or capital subsidy" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "Fin.Account" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_01_62 -msgid "Unpaid postal order" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_428 -msgid "Interest accrued" -msgstr "" - -#. module: account_coda -#: field:account.coda.comm.type,code:0 -msgid "Structured Communication Type" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_401 -msgid "Visa charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_210 -msgid "Commitment fee" -msgstr "" - -#. module: account_coda -#: view:account.coda.trans.category:0 -#: model:ir.actions.act_window,name:account_coda.action_account_coda_trans_category_form -#: model:ir.ui.menu,name:account_coda.menu_action_account_coda_trans_category_form -msgid "CODA Transaction Categories" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement.line,sequence:0 -msgid "Sequence" -msgstr "" - -#. module: account_coda -#: view:account.coda.import:0 -msgid "Results :" -msgstr "" - -#. module: account_coda -#: field:coda.bank.statement,coda_id:0 -#: model:ir.actions.act_window,name:account_coda.act_coda_bank_statement_goto_account_coda -msgid "CODA Data File" -msgstr "" - -#. module: account_coda -#: view:coda.bank.statement.line:0 -msgid "CODA Statement Line" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_073 -msgid "Costs of ATM abroad" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_018 -msgid "Tental guarantee charges" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.category,description:account_coda.actrca_430 -msgid "Recovery of foreign tax" -msgstr "" - -#. module: account_coda -#: model:account.coda.trans.code,description:account_coda.actcc_80_01 -msgid "Guarantee card charges" -msgstr "" From 378daedb6a248d374ccbdbed6019768d92aeffea Mon Sep 17 00:00:00 2001 From: "Hiral Patel (OpenERP)" Date: Mon, 8 Oct 2012 12:45:00 +0530 Subject: [PATCH 013/102] [FIX] Remove error field Sale Reference (sale_ref) can not be searched bzr revid: hip@tinyerp.com-20121008071500-1swtz9jbp9v1m6kh --- addons/sale_mrp/sale_mrp.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/sale_mrp/sale_mrp.py b/addons/sale_mrp/sale_mrp.py index d441196b37f..7346895c8cc 100644 --- a/addons/sale_mrp/sale_mrp.py +++ b/addons/sale_mrp/sale_mrp.py @@ -74,9 +74,14 @@ class mrp_production(osv.osv): context = {} return [] + def _sale_ref_search(self, cursor, user, obj, name, args, domain=None, context=None): + if context is None: + context = {} + return [] + _columns = { 'sale_name': fields.function(_ref_calc, multi='sale_name', fnct_search=_sale_name_search, type='char', string='Sale Name', help='Indicate the name of sales order.'), - 'sale_ref': fields.function(_ref_calc, multi='sale_name', type='char', string='Sale Reference', help='Indicate the Customer Reference from sales order.'), + 'sale_ref': fields.function(_ref_calc, multi='sale_name', fnct_search=_sale_ref_search, type='char', string='Sale Reference', help='Indicate the Customer Reference from sales order.'), } mrp_production() From 09f9e3428f56d1a39fcebd1568032b5530bd1d6b Mon Sep 17 00:00:00 2001 From: "Hiral Patel (OpenERP)" Date: Tue, 9 Oct 2012 11:03:02 +0530 Subject: [PATCH 014/102] [IMP] Revert the changes bzr revid: hip@tinyerp.com-20121009053302-rxn308zbm2kow4mh --- addons/sale/sale.py | 8 -------- addons/sale_mrp/sale_mrp.py | 14 ++------------ 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 3194e1f44b7..5893f0a2abd 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -96,14 +96,6 @@ class sale_order(osv.osv): res[order.id]['amount_total'] = res[order.id]['amount_untaxed'] + res[order.id]['amount_tax'] return res - - def test_state(self, cr, uid, ids, mode, *args): - return True - def action_ship_create(self, cr, uid, ids, context=None): - return True - def action_ship_end(self, cr, uid, ids, context=None): - return True - def _invoiced_rate(self, cursor, user, ids, name, arg, context=None): res = {} for sale in self.browse(cursor, user, ids, context=context): diff --git a/addons/sale_mrp/sale_mrp.py b/addons/sale_mrp/sale_mrp.py index 7346895c8cc..7397edbec2b 100644 --- a/addons/sale_mrp/sale_mrp.py +++ b/addons/sale_mrp/sale_mrp.py @@ -69,19 +69,9 @@ class mrp_production(osv.osv): res[production.id] = move.sale_line_id and move.sale_line_id.order_id.client_order_ref or False return res - def _sale_name_search(self, cursor, user, obj, name, args, domain=None, context=None): - if context is None: - context = {} - return [] - - def _sale_ref_search(self, cursor, user, obj, name, args, domain=None, context=None): - if context is None: - context = {} - return [] - _columns = { - 'sale_name': fields.function(_ref_calc, multi='sale_name', fnct_search=_sale_name_search, type='char', string='Sale Name', help='Indicate the name of sales order.'), - 'sale_ref': fields.function(_ref_calc, multi='sale_name', fnct_search=_sale_ref_search, type='char', string='Sale Reference', help='Indicate the Customer Reference from sales order.'), + 'sale_name': fields.function(_ref_calc, multi='sale_name', type='char', string='Sale Name', help='Indicate the name of sales order.'), + 'sale_ref': fields.function(_ref_calc, multi='sale_name', type='char', string='Sale Reference', help='Indicate the Customer Reference from sales order.'), } mrp_production() From ff5bded9ab067215489eb5b77f13aefab672f32d Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Tue, 9 Oct 2012 11:17:09 +0530 Subject: [PATCH 015/102] [FIX]Add access rights for mail.thread and publisher_warranty.contract bzr revid: tch@tinyerp.com-20121009054709-xw0ih1p6yacxv0yu --- addons/mail/security/ir.model.access.csv | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/mail/security/ir.model.access.csv b/addons/mail/security/ir.model.access.csv index b68a9ab7443..a759934b112 100644 --- a/addons/mail/security/ir.model.access.csv +++ b/addons/mail/security/ir.model.access.csv @@ -15,3 +15,5 @@ access_mail_alias_system,mail.alias,model_mail_alias,base.group_system,1,1,1,1 access_mail_message_subtype,mail.message.subtype,model_mail_message_subtype,,1,1,1,1 access_mail_mail_user,mail.mail,model_mail_mail,base.group_user,1,1,1,0 access_mail_vote_all,mail.vote.all,model_mail_vote,,1,1,1,1 +access_mail_thread_all,mail.thread.all,model_mail_thread,,1,1,1,1 +access_publisher_warranty_contract_all,publisher.warranty.contract.all,model_publisher_warranty_contract,,1,1,1,1 From 37bebb4f4a665a07e70bccb793be43c1af008306 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Tue, 9 Oct 2012 14:42:17 +0530 Subject: [PATCH 016/102] [FIX]Chnage dependency in account_analytic_defaults bzr revid: tch@tinyerp.com-20121009091217-9uy7l7wx2hualm14 --- addons/account_analytic_default/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account_analytic_default/__openerp__.py b/addons/account_analytic_default/__openerp__.py index 213d055f8de..0af606821ce 100644 --- a/addons/account_analytic_default/__openerp__.py +++ b/addons/account_analytic_default/__openerp__.py @@ -38,7 +38,7 @@ Allows to automatically select analytic accounts based on criterions: 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images': ['images/analytic_defaults.jpeg'], - 'depends': ['sale'], + 'depends': ['sale_stock'], 'data': [ 'security/ir.model.access.csv', 'security/account_analytic_default_security.xml', From f3d88dbe1dfdd22be0f88d1e218b0a4b0aed3a0d Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Wed, 10 Oct 2012 14:36:51 +0530 Subject: [PATCH 017/102] [FIX] mail: the 'type' field is deprecated in the 'ir.ui.view' model bzr revid: hmo@tinyerp.com-20121010090651-cez469apw8w7vlef --- addons/mail/mail_followers_view.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/mail/mail_followers_view.xml b/addons/mail/mail_followers_view.xml index 9fc8a545a20..a9d1d80240b 100644 --- a/addons/mail/mail_followers_view.xml +++ b/addons/mail/mail_followers_view.xml @@ -19,7 +19,6 @@ mail.followers.form mail.followers - form From 6acb3935830c1a4209da7fef0c256dccb5363dfd Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Wed, 10 Oct 2012 16:40:37 +0530 Subject: [PATCH 018/102] [FIX]Make .csv file for base_import module bzr revid: tch@tinyerp.com-20121010111037-y4ft0bvr0lysvbuo --- addons/account_analytic_default/__openerp__.py | 2 +- addons/base_import/__openerp__.py | 4 ++++ addons/base_import/security/ir.model.access.csv | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 addons/base_import/security/ir.model.access.csv diff --git a/addons/account_analytic_default/__openerp__.py b/addons/account_analytic_default/__openerp__.py index 0af606821ce..647babf0600 100644 --- a/addons/account_analytic_default/__openerp__.py +++ b/addons/account_analytic_default/__openerp__.py @@ -38,7 +38,7 @@ Allows to automatically select analytic accounts based on criterions: 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images': ['images/analytic_defaults.jpeg'], - 'depends': ['sale_stock'], + 'depends': ['sale_ stock'], 'data': [ 'security/ir.model.access.csv', 'security/account_analytic_default_security.xml', diff --git a/addons/base_import/__openerp__.py b/addons/base_import/__openerp__.py index eff20bc90ab..2b89722cf71 100644 --- a/addons/base_import/__openerp__.py +++ b/addons/base_import/__openerp__.py @@ -27,6 +27,10 @@ Re-implement openerp's file import system: 'depends': ['base'], 'installable': True, 'auto_install': False, # set to true and allow uninstall? + 'data': [ + 'security/ir.model.access.csv', + ], + 'css': [ 'static/lib/select2/select2.css', 'static/src/css/import.css', diff --git a/addons/base_import/security/ir.model.access.csv b/addons/base_import/security/ir.model.access.csv new file mode 100644 index 00000000000..7ed063df1c2 --- /dev/null +++ b/addons/base_import/security/ir.model.access.csv @@ -0,0 +1,15 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_base_import_tests_models_char,base.import.tests.models.char,model_base_import_tests_models_char,base.group_user,1,1,1,1 +access_base_import_tests_models_char_required,base.import.tests.models.char.required,model_base_import_tests_models_char_required,base.group_user,1,1,1,1 +access_base_import_tests_models_char_readonly,base.import.tests.models.char.readonly,model_base_import_tests_models_char_readonly,base.group_user,1,1,1,1 +access_base_import_tests_models_char_states,base.import.tests.models.char.states,model_base_import_tests_models_char_states,base.group_user,1,1,1,1 +access_base_import_tests_models_char_noreadonly,base.import.tests.models.char.noreadonly,model_base_import_tests_models_char_noreadonly,base.group_user,1,1,1,1 +access_base_import_tests_models_char_stillreadonly,base.import.tests.models.char.stillreadonly,model_base_import_tests_models_char_stillreadonly,base.group_user,1,1,1,1 +access_base_import_tests_models_m2o,base.import.tests.models.m2o,model_base_import_tests_models_m2o,base.group_user,1,1,1,1 +access_base_import_tests_models_m2o_related,base.import.tests.models.m2o.related,model_base_import_tests_models_m2o_related,base.group_user,1,1,1,1 +access_base_import_tests_models_m2o_required,base.import.tests.models.m2o.required,model_base_import_tests_models_m2o_required,base.group_user,1,1,1,1 +access_base_import_tests_models_m2o_required_related,base.import.tests.models.m2o.required.related,model_base_import_tests_models_m2o_required_related,base.group_user,1,1,1,1 +access_base_import_tests_models_o2m,base.import.tests.models.o2m,model_base_import_tests_models_o2m,base.group_user,1,1,1,1 +access_base_import_tests_models_o2m_child,base.import.tests.models.o2m.child,model_base_import_tests_models_o2m_child,base.group_user,1,1,1,1 +access_base_import_tests_models_preview,base.import.tests.models.preview,model_base_import_tests_models_preview,base.group_user,1,1,1,1 + From 80a2190f6097c9fd0b57ec2a29a050a8a746aff2 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Wed, 10 Oct 2012 16:42:44 +0530 Subject: [PATCH 019/102] [FIX]Make .csv file for base_import module bzr revid: tch@tinyerp.com-20121010111244-v6wg6uyt7orxaccc --- addons/account_analytic_default/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account_analytic_default/__openerp__.py b/addons/account_analytic_default/__openerp__.py index 647babf0600..0af606821ce 100644 --- a/addons/account_analytic_default/__openerp__.py +++ b/addons/account_analytic_default/__openerp__.py @@ -38,7 +38,7 @@ Allows to automatically select analytic accounts based on criterions: 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images': ['images/analytic_defaults.jpeg'], - 'depends': ['sale_ stock'], + 'depends': ['sale_stock'], 'data': [ 'security/ir.model.access.csv', 'security/account_analytic_default_security.xml', From c23ec49ad0d202923086dea1457882149a83e3e9 Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Thu, 11 Oct 2012 18:02:01 +0530 Subject: [PATCH 020/102] [FIX]server warninggs when insttaling modules bzr revid: tch@tinyerp.com-20121011123201-b0rdwialk1uqc14x --- addons/auth_oauth/res_users.py | 2 +- addons/hr_payroll/hr_payroll.py | 5 ----- addons/purchase/test/ui/duplicate_order.yml | 1 - addons/sale/sale.py | 1 + addons/stock/stock.py | 2 +- 5 files changed, 3 insertions(+), 8 deletions(-) diff --git a/addons/auth_oauth/res_users.py b/addons/auth_oauth/res_users.py index 9c1f88bd7f4..7306da5e11f 100644 --- a/addons/auth_oauth/res_users.py +++ b/addons/auth_oauth/res_users.py @@ -21,7 +21,7 @@ class res_users(osv.Model): } _sql_constraints = [ - ('uniq_users_oauth_provider_oauht_uid', 'unique(auth_provider_id, auth_uid)', 'OAuth UID must be unique per provider'), + ('uniq_users_oauth_provider_oauht_uid', 'unique(oauth_provider_id, oauth_uid)', 'OAuth UID must be unique per provider'), ] def auth_oauth_rpc(self, cr, uid, endpoint, access_token, context=None): diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py index b56b49d3d99..113f4959715 100644 --- a/addons/hr_payroll/hr_payroll.py +++ b/addons/hr_payroll/hr_payroll.py @@ -312,12 +312,7 @@ class hr_payslip(osv.osv): company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id default.update({ 'line_ids': [], - 'move_ids': [], - 'move_line_ids': [], 'company_id': company_id, - 'period_id': False, - 'basic_before_leaves': 0.0, - 'basic_amount': 0.0, 'number': '', 'payslip_run_id': False, 'paid': False, diff --git a/addons/purchase/test/ui/duplicate_order.yml b/addons/purchase/test/ui/duplicate_order.yml index ff7f7d906c5..d49cec22d73 100644 --- a/addons/purchase/test/ui/duplicate_order.yml +++ b/addons/purchase/test/ui/duplicate_order.yml @@ -4,5 +4,4 @@ I duplicate order. - !python {model: purchase.order}: | - context.update({'active_id':ref('purchase_order_1')}) self.copy(cr, uid, ref('purchase_order_1'), context) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index a1597f9317c..9ba6c43a588 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -96,6 +96,7 @@ class sale_order(osv.osv): res[order.id]['amount_total'] = res[order.id]['amount_untaxed'] + res[order.id]['amount_tax'] return res + def _invoiced_rate(self, cursor, user, ids, name, arg, context=None): res = {} for sale in self.browse(cursor, user, ids, context=context): diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 91e300eaa07..3694e2fecc6 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -2138,7 +2138,7 @@ class stock_move(osv.osv): new_id = move_obj.copy(cr, uid, move.id, { 'location_id': move.location_dest_id.id, 'location_dest_id': loc.id, - 'date_moved': time.strftime('%Y-%m-%d'), + 'date': time.strftime('%Y-%m-%d'), 'picking_id': pickid, 'state': 'waiting', 'company_id': company_id or res_obj._company_default_get(cr, uid, 'stock.company', context=context) , From d7976f9f22add00293b60df87cca03324075e5ef Mon Sep 17 00:00:00 2001 From: "Twinkle Christian (OpenERP)" Date: Fri, 12 Oct 2012 12:29:43 +0530 Subject: [PATCH 021/102] [FIX]Remove sale_delay field from the product_demo.xml file bzr revid: tch@tinyerp.com-20121012065943-v2vtqljxhhwqkycm --- addons/product/product_demo.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml index 14477d2401a..fead62f8521 100644 --- a/addons/product/product_demo.xml +++ b/addons/product/product_demo.xml @@ -96,7 +96,6 @@ consu - 4.0 17" LCD Monitor Processor AMD 8-Core 512MB RAM @@ -113,7 +112,6 @@ HDD SH-1 - 4.0 19" LCD Monitor Processor Core i5 2.70 Ghz 2GB RAM @@ -129,7 +127,6 @@ HDD SH-1 consu - 7.0 Custom computer assembled on order based on customer's requirement. From eaf48a8a0145c8174c79dd3b2c6a5c1a6875b016 Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Wed, 17 Oct 2012 11:26:00 +0530 Subject: [PATCH 022/102] [FIX] pass proper id in overdue report fro display_address. bzr revid: tpa@tinyerp.com-20121017055600-taotk8txmwzl263l --- addons/account/report/account_print_overdue.rml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account/report/account_print_overdue.rml b/addons/account/report/account_print_overdue.rml index 8b8238030fe..3e8b9b04b62 100644 --- a/addons/account/report/account_print_overdue.rml +++ b/addons/account/report/account_print_overdue.rml @@ -129,7 +129,7 @@ [[ o.title.name or '' ]] [[ o.name ]] - [[ display_address(o.partner_id) ]] + [[ display_address(o) ]] From 91dadbc8521dc665e3bac0545042a72511af87e1 Mon Sep 17 00:00:00 2001 From: "ajay javiya (OpenERP)" Date: Wed, 17 Oct 2012 12:04:30 +0530 Subject: [PATCH 023/102] [FIX]: Fix warning in pos bzr revid: aja@tinyerp.com-20121017063430-hlciy2dwr5ifyu5n --- addons/point_of_sale/report/pos_payment_report_user.rml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/point_of_sale/report/pos_payment_report_user.rml b/addons/point_of_sale/report/pos_payment_report_user.rml index 1d89d28c5f9..47700686819 100644 --- a/addons/point_of_sale/report/pos_payment_report_user.rml +++ b/addons/point_of_sale/report/pos_payment_report_user.rml @@ -194,7 +194,7 @@ Total: - [[ formatLang(pos_payment_user_total(data['form'], currency_obj = company.currency_id)) or removeParentNode('blockTable')]] + [[ formatLang(pos_payment_user_total(data['form']),currency_obj = company.currency_id) or removeParentNode('blockTable')]] From e39db9321726656a9b60b0f0f2aedebdbdfb7304 Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Thu, 18 Oct 2012 17:48:20 +0530 Subject: [PATCH 024/102] [FIX] hr_recuitment: global pdf file as email attchment instaed doc file bzr revid: jam@tinyerp.com-20121018121820-v2upbp55hi9jshn3 --- .../test/recruitment_process.yml | 2 +- addons/hr_recruitment/test/resume.eml | 2271 +++++++++++------ 2 files changed, 1519 insertions(+), 754 deletions(-) diff --git a/addons/hr_recruitment/test/recruitment_process.yml b/addons/hr_recruitment/test/recruitment_process.yml index 841a49dc866..5f0a005939d 100644 --- a/addons/hr_recruitment/test/recruitment_process.yml +++ b/addons/hr_recruitment/test/recruitment_process.yml @@ -15,7 +15,7 @@ applicant_ids = self.search(cr, uid, [('email_from','=', 'Mr. Richard Anderson ')]) assert applicant_ids, "Applicant is not created after getting the mail" applicant = self.browse(cr, uid, applicant_ids[0], context=context) - resume_ids = self.pool.get('ir.attachment').search(cr, uid, [('datas_fname','=','resume.doc'),('res_model','=',self._name),('res_id','=',applicant.id)]) + resume_ids = self.pool.get('ir.attachment').search(cr, uid, [('datas_fname','=','resume.pdf'),('res_model','=',self._name),('res_id','=',applicant.id)]) assert applicant.name == "Application for the post of Jr.application Programmer.", "Applicant name does not match." assert applicant.stage_id.id == ref('hr_recruitment.stage_job1'), "Stage should be 'Initial qualification' and is '%s'." % (applicant.stage_id.name) assert applicant.state == "draft", "Applicant state should be 'draft'." diff --git a/addons/hr_recruitment/test/resume.eml b/addons/hr_recruitment/test/resume.eml index 00cc5620563..ad8f4967040 100644 --- a/addons/hr_recruitment/test/resume.eml +++ b/addons/hr_recruitment/test/resume.eml @@ -80,760 +80,1525 @@ Content-Transfer-Encoding: 7bit --------------010004020303010906010104-- --------------010903010402010104090709 -Content-Type: application/msword; - name="resume.doc" +Content-Type: application/pdf; + name="resume.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; - filename="resume.doc" + filename="resume.pdf" -0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAASwAAAAAA -AAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD///////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -///////////////////////////////////9//////////7///9KAAAABQAAAAYAAAAHAAAA -CAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUA -AAD+////FwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAA -IwAAACQAAAAlAAAAJgAAACcAAAAoAAAA/v///yoAAAArAAAALAAAAC0AAAAuAAAALwAAADAA -AAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAA -PgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAA/v////7/ -//9MAAAATQAAAP7///////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////1IA -bwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAWAAUA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// -/////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAQAAAP7////+////BAAAAAUAAAAGAAAABwAAAP7/ -//8JAAAA/v////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////8BAP7/ -AwoAAP////8GCQIAAAAAAMAAAAAAAABGGAAAAE1pY3Jvc29mdCBXb3JkLURva3VtZW50AAoA -AABNU1dvcmREb2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAAAQACAAAAAAAAAAAAAAAAAAAAAAABAAAA -4IWf8vlPaBCrkQgAKyez2TAAAADsAAAACgAAAAEAAABYAAAAAgAAAGAAAAAEAAAAeAAAAAcA -AACUAAAACAAAAKQAAAAJAAAAsAAAAAoAAAC8AAAACwAAAMgAAAAMAAAA1AAAAA0AAADgAAAA -AgAAAOn9AAAeAAAAEAAAAENhbmRpZGF0ZXMgTmFtZQAeAAAAFAAAAHNhZ2FyIHAgc3VyeWF3 -YW5zaGkAHgAAAAcAAABOb3JtYWwAAB4AAAAEAAAAc2FpAB4AAAAEAAAAMTY5AEAAAAAAyPid -CgAAAEAAAAAAAAAAAAAAAEAAAAAAnpj/jovLAUAAAAAA1LJ/lhzMAQAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAZwAKAAEAWwAPAAIAAAAAAAAAYAAAEPH/AgBgAAAA -BgBOAG8AcgBtAGEAbAAAABEAAAADJABhJAAxJAEqJAFBJAAALwBCKgBPSgAAUUoAAENKFABt -SAkEc0gJBFBKAABuSAQIXkoAAGFKFABfSAEEdEgBBABcAAEQAQACAFwAAAAJAEgAZQBhAGQA -aQBuAGcAIAAxAAAAJwABAAMkA2EkAw3GBQABOAQAXoQAAF2EoAVghAAAE6RkABSkZAAGJAEA -DwBPSgIAUUoCAENKEgA1CAEAPgACEAEAAgA+AAAACQBIAGUAYQBkAGkAbgBnACAAMgAAAA0A -AgATpGQAFKRkAAYkAQAMAE9KAgBRSgIAQ0oSADoAAxABAAIAOgAAAAkASABlAGEAZABpAG4A -ZwAgADMAAAAFAAMABiQBAA8AT0oCAFFKAgBDShIANQgBAFYABBABAAIAVgAAAAkASABlAGEA -ZABpAG4AZwAgADQAAAAfAAQAEmRoAQEADcYFAAFoAQBehGgBXYQAAGCEmP4GJAEAEgBPSgIA -UUoCAENKEgA1CAFcCAEyAAUQAQBiBTIAAAAJAEgAZQBhAGQAaQBuAGcAIAA1AAAACgAFABOk -ZAAUpGQAAwA1CAEAUAAGEAEAAgBQAAAACQBIAGUAYQBkAGkAbgBnACAANgAAABkABgANxgUA -ATgEAF6EAABdhKAFYIQAAAYkAQASAE9KAgBRSgIAQ0oSAD4qAVwIAWAABxABAAIAYAAAAAkA -SABlAGEAZABpAG4AZwAgADcAAAAwAAcAQCYGCiYGC0YBAAomBgtGAQAxJAANxgUAARwBADck -AF6EHAFdhAAAYITk/gYkAQwAT0oCAFFKAgBDShIASAAIEAEAAgBIAAAACQBIAGUAYQBkAGkA -bgBnACAAOAAAABcACAAxJAA3JABehBwBXYQAAGCE5P4GJAEADABPSgIAUUoCAENKEgAAAEIA -QUDy/6EAQgAAABkAQQBiAHMAYQB0AHoALQBTAHQAYQBuAGQAYQByAGQAcwBjAGgAcgBpAGYA -dABhAHIAdAAAAAAAAAAAAAAAAABCAP4f8v/xAEIAAAAZAEEAYgBzAGEAdAB6AC0AUwB0AGEA -bgBkAGEAcgBkAHMAYwBoAHIAaQBmAHQAYQByAHQAAAAAAEgA/h/y/wEBSAAAABwAVwBXAC0A -QQBiAHMAYQB0AHoALQBTAHQAYQBuAGQAYQByAGQAcwBjAGgAcgBpAGYAdABhAHIAdAAAAAAA -SgD+H/L/EQFKAAAAHQBXAFcALQBBAGIAcwBhAHQAegAtAFMAdABhAG4AZABhAHIAZABzAGMA -aAByAGkAZgB0AGEAcgB0ADEAAAAAAEwA/h/y/yEBTAAAAB4AVwBXAC0AQQBiAHMAYQB0AHoA -LQBTAHQAYQBuAGQAYQByAGQAcwBjAGgAcgBpAGYAdABhAHIAdAAxADEAAAAAAE4A/h/y/zEB -TgAAAB8AVwBXAC0AQQBiAHMAYQB0AHoALQBTAHQAYQBuAGQAYQByAGQAcwBjAGgAcgBpAGYA -dABhAHIAdAAxADEAMQAAAAAAUAD+H/L/QQFQAAAAIABXAFcALQBBAGIAcwBhAHQAegAtAFMA -dABhAG4AZABhAHIAZABzAGMAaAByAGkAZgB0AGEAcgB0ADEAMQAxADEAAAAAAFIA/h/y/1EB -UgAAACEAVwBXAC0AQQBiAHMAYQB0AHoALQBTAHQAYQBuAGQAYQByAGQAcwBjAGgAcgBpAGYA -dABhAHIAdAAxADEAMQAxADEAAAAAAFQA/h/y/2EBVAAAACIAVwBXAC0AQQBiAHMAYQB0AHoA -LQBTAHQAYQBuAGQAYQByAGQAcwBjAGgAcgBpAGYAdABhAHIAdAAxADEAMQAxADEAMQAAAAAA -KgD+H/L/cQEqAAAACQBXAFcAOABOAHUAbQAyAHoAMAAAAAgAT0oBAFFKAQAuAP4f8v+BAS4A -AAAJAFcAVwA4AE4AdQBtADIAegAxAAAADABPSgcAUUoHAF5KBwAqAP4f8v+RASoAAAAJAFcA -VwA4AE4AdQBtADIAegAzAAAACABPSgEAUUoBADYA/h/y/6EBNgAAAAkAVwBXADgATgB1AG0A -MwB6ADAAAAATAE9KAABRSgAANQgBUEoAAF5KAAAAKgD+H/L/sQEqAAAACQBXAFcAOABOAHUA -bQAzAHoAMQAAAAgAT0oHAFFKBwAqAP4f8v/BASoAAAAJAFcAVwA4AE4AdQBtADMAegAyAAAA -CABPSggAUUoIACoA/h/y/9EBKgAAAAkAVwBXADgATgB1AG0ANAB6ADAAAAAIAE9KCABRSggA -LgD+H/L/4QEuAAAACQBXAFcAOABOAHUAbQA0AHoAMQAAAAwAT0oHAFFKBwBeSgcAKgD+H/L/ -8QEqAAAACQBXAFcAOABOAHUAbQA0AHoAMwAAAAgAT0oBAFFKAQA8AP4f8v8BAjwAAAAWAEQA -ZQBmAGEAdQBsAHQAIABQAGEAcgBhAGcAcgBhAHAAaAAgAEYAbwBuAHQAAAAAACoA/h/y/xEC -KgAAAAkAVwBXADgATgB1AG0AMQB6ADAAAAAIAE9KAABRSgAAKgD+H/L/IQIqAAAACQBXAFcA -OABOAHUAbQAzAHoAMwAAAAgAT0oBAFFKAQAqAP4f8v8xAioAAAAJAFcAVwA4AE4AdQBtADUA -egAwAAAACABPSgEAUUoBACoA/h/y/0ECKgAAAAkAVwBXADgATgB1AG0ANQB6ADEAAAAIAE9K -BwBRSgcAKgD+H/L/UQIqAAAACQBXAFcAOABOAHUAbQA1AHoAMgAAAAgAT0oIAFFKCAAqAP4f -8v9hAioAAAAJAFcAVwA4AE4AdQBtADcAegAwAAAACABPSgEAUUoBADwA/h/y/3ECPAAAAAkA -VwBXADgATgB1AG0AOAB6ADAAAAAZAEIqBnBo/wAAAE9KCABRSggAUEoAAF5KAAAALgD+H/L/ -gQIuAAAACQBXAFcAOABOAHUAbQA4AHoAMQAAAAwAT0oHAFFKBwBeSgcAKgD+H/L/kQIqAAAA -CQBXAFcAOABOAHUAbQA4AHoAMgAAAAgAT0oIAFFKCAAqAP4f8v+hAioAAAAJAFcAVwA4AE4A -dQBtADgAegAzAAAACABPSgEAUUoBACoA/h/y/7ECKgAAAAkAVwBXADgATgB1AG0AOQB6ADAA -AAAIAE9KAQBRSgEALAD+H/L/wQIsAAAACgBXAFcAOABOAHUAbQAxADAAegAwAAAACABPSgEA -UUoBACwA/h/y/9ECLAAAAAoAVwBXADgATgB1AG0AMQAxAHoAMAAAAAgAT0oBAFFKAQAsAP4f -8v/hAiwAAAAKAFcAVwA4AE4AdQBtADEAMgB6ADAAAAAIAE9KAQBRSgEALAD+H/L/8QIsAAAA -CgBXAFcAOABOAHUAbQAxADIAegAxAAAACABPSgcAUUoHACwA/h/y/wEDLAAAAAoAVwBXADgA -TgB1AG0AMQAyAHoAMgAAAAgAT0oIAFFKCAA2AP4f8v8RAzYAAAAKAFcAVwA4AE4AdQBtADEA -MwB6ADAAAAARAEIqBnBo/wAAAE9KAQBRSgEAADAA/h/y/yEDMAAAAAoAVwBXADgATgB1AG0A -MQAzAHoAMQAAAAwAT0oHAFFKBwBeSgcALAD+H/L/MQMsAAAACgBXAFcAOABOAHUAbQAxADMA -egAyAAAACABPSggAUUoIACwA/h/y/0EDLAAAAAoAVwBXADgATgB1AG0AMQAzAHoAMwAAAAgA -T0oBAFFKAQA+AP4f8v9RAz4AAAAKAFcAVwA4AE4AdQBtADEANAB6ADAAAAAZAEIqBnBo/wAA -AE9KCABRSggAUEoAAF5KAAAAMAD+H/L/YQMwAAAACgBXAFcAOABOAHUAbQAxADQAegAxAAAA -DABPSgcAUUoHAF5KBwAsAP4f8v9xAywAAAAKAFcAVwA4AE4AdQBtADEANAB6ADIAAAAIAE9K -CABRSggALAD+H/L/gQMsAAAACgBXAFcAOABOAHUAbQAxADQAegAzAAAACABPSgEAUUoBACwA -/h/y/5EDLAAAAAoAVwBXADgATgB1AG0AMQA2AHoAMAAAAAgAT0oBAFFKAQAwAP4f8v+hAzAA -AAAKAFcAVwA4AE4AdQBtADEANgB6ADEAAAAMAE9KBwBRSgcAXkoHACwA/h/y/7EDLAAAAAoA -VwBXADgATgB1AG0AMQA2AHoAMgAAAAgAT0oIAFFKCAAsAP4f8v/BAywAAAAKAFcAVwA4AE4A -dQBtADEAOAB6ADAAAAAIAE9KAQBRSgEALAD+H/L/0QMsAAAACgBXAFcAOABOAHUAbQAxADkA -egAwAAAACABPSgEAUUoBACwA/h/y/+EDLAAAAAoAVwBXADgATgB1AG0AMgAwAHoAMAAAAAgA -T0oAAFFKAAAsAP4f8v/xAywAAAAKAFcAVwA4AE4AdQBtADIAMgB6ADAAAAAIAE9KAQBRSgEA -LAD+H/L/AQQsAAAACgBXAFcAOABOAHUAbQAyADIAegAxAAAACABPSgcAUUoHACwA/h/y/xEE -LAAAAAoAVwBXADgATgB1AG0AMgAyAHoAMgAAAAgAT0oIAFFKCAAsAP4f8v8hBCwAAAAKAFcA -VwA4AE4AdQBtADIAMwB6ADAAAAAIAE9KAQBRSgEALAD+H/L/MQQsAAAACgBXAFcAOABOAHUA -bQAyADQAegAwAAAACABPSgEAUUoBACwA/h/y/0EELAAAAAoAVwBXADgATgB1AG0AMgA0AHoA -MQAAAAgAT0oHAFFKBwAsAP4f8v9RBCwAAAAKAFcAVwA4AE4AdQBtADIANAB6ADIAAAAIAE9K -CABRSggALAD+H/L/YQQsAAAACgBXAFcAOABOAHUAbQAyADYAegAwAAAACABPSgEAUUoBADAA -/h/y/3EEMAAAAAoAVwBXADgATgB1AG0AMgA2AHoAMQAAAAwAT0oIAFFKCABDShAALAD+H/L/ -gQQsAAAACgBXAFcAOABOAHUAbQAyADYAegAyAAAACABPSggAUUoIACwA/h/y/5EELAAAAAoA -VwBXADgATgB1AG0AMgA2AHoANAAAAAgAT0oHAFFKBwA0AP4f8v+hBDQAAAAKAFcAVwA4AE4A -dQBtADIANwB6ADAAAAAQAE9KAQBRSgEAUEoAAF5KAgAsAP4f8v+xBCwAAAAKAFcAVwA4AE4A -dQBtADIANwB6ADEAAAAIAE9KBwBRSgcALAD+H/L/wQQsAAAACgBXAFcAOABOAHUAbQAyADcA -egAyAAAACABPSggAUUoIACwA/h/y/9EELAAAAAoAVwBXADgATgB1AG0AMgA3AHoAMwAAAAgA -T0oBAFFKAQAsAP4f8v/hBCwAAAAKAFcAVwA4AE4AdQBtADIAOAB6ADAAAAAIAE9KAQBRSgEA -QgD+H/L/8QRCAAAAGQBXAFcALQBEAGUAZgBhAHUAbAB0ACAAUABhAHIAYQBnAHIAYQBwAGgA -IABGAG8AbgB0AAAAAAA0AFcQ8v8BBTQAAAAPAFMAdAByAG8AbgBnACAARQBtAHAAaABhAHMA -aQBzAAAABgA1CAFcCAEmAFgQ8v8RBSYAAAAIAEUAbQBwAGgAYQBzAGkAcwAAAAYANggBXQgB -NgBVEPL/IQU2AAAADQBJAG4AdABlAHIAbgBlAHQAIABMAGkAbgBrAAAADABCKgJwaAAA/wA+ -KgFGAFYQ8v8xBUYAAAAVAFYAaQBzAGkAdABlAGQAIABJAG4AdABlAHIAbgBlAHQAIABMAGkA -bgBrAAAADABCKgxwaIAAgAA+KgFCAP4fAgJBBUIAAAAKACAAQwBoAGEAcgAgAEMAaABhAHIA -AAAeAENKGABtSAkEc0gJBDUIAWFKGABfSAEEdEgBBFwIAUYA/h8BAGIFRgAAAAcASABlAGEA -ZABpAG4AZwAAAA0AVQATpPAAFKR4AAYkAQAYAE9KCQBRSgkAQ0ocAFBKCgBeSgoAYUocADIA -QhABAGIFMgAAAAkAVABlAHgAdAAgAGIAbwBkAHkAAAAKAFYAE6RkABSkZAAEAENKGAAcAC8Q -YQVyBRwAAAAEAEwAaQBzAHQAAAACAFcAAAA8AP4fAQCCBTwAAAAHAEMAYQBwAHQAaQBvAG4A -AAANAFgAE6R4ABSkeAAMJAEADgBDShgANggBYUoYAF0IASIA/h8BAJIFIgAAAAUASQBuAGQA -ZQB4AAAABQBZAAwkAQAAADgA/h8BAKIFOAAAAAwATgBvAHIAbQBhAGwAIAAoAFcAZQBiACkA -AAAKAFoAE6RkABSkZAAEAENKGAA2AP4fAQCyBTYAAAALAEIAbwBkAHkAIABUAGUAeAB0ACAA -MwAAAAoAWwATpGQAFKRkAAQAQ0oYAHwA/h8BAMIFfAAAABEASABUAE0ATAAgAFAAcgBlAGYA -bwByAG0AYQB0AHQAZQBkAAAANwBcAA3GMgAQlAMoB7wKUA7kEXgVDBmgHDQgyCNcJ/AqhC4Y -Mqw1QDkAAAAAAAAAAAAAAAAAAAAAABAAT0oHAFFKBwBQSgcAXkoHAEAAQxABANIFQAAAABAA -VABlAHgAdAAgAGIAbwBkAHkAIABpAG4AZABlAG4AdAAAAA4AXQBehNACXYQAAGCEAAAAADgA -ShABAGIFOAAAAAgAUwB1AGIAdABpAHQAbABlAAAACABeAAMkAmEkAg4AQ0oYADUIAWFKGABc -CAE4AP4fAQDyBTgAAAAIAGMAbwBtAHAAbwBzAGUAZgAAAAoAXwATpGQAFKRkAAwAT0oHAFFK -BwBQSgsASgD+HwEAAgZKAAAADABIAFQATQBMACAAQQBkAGQAcgBlAHMAcwAAAAIAYAAeAE9K -CwBRSgsAQ0oYADYIAVBKCwBeSgsAYUoYAF0IAS4AIBABABIGLgAAAAYARgBvAG8AdABlAHIA -AAAQAGEAMSQADcYIAALgEMAhAQIAADoA/h8BACIGOgAAAAsAQgBvAGQAeQAgAFQAZQB4AHQA -IAAyAAAAAgBiABAAT0oCAFFKAgBDShIAXkoCACwAHxABADIGLAAAAAYASABlAGEAZABlAHIA -AAANAGMADcYIAALgEMAhAQIAAAAwAP4fYQVCBjAAAAAOAEYAcgBhAG0AZQAgAGMAbwBuAHQA -ZQBuAHQAcwAAAAIAZAAAADQA/h8BAFIGNAAAAA4AVABhAGIAbABlACAAQwBvAG4AdABlAG4A -dABzAAAABQBlAAwkAQAAAD4A/h9RBmIGPgAAAA0AVABhAGIAbABlACAASABlAGEAZABpAG4A -ZwAAAAsAZgADJAFhJAEMJAEABgA1CAFcCAEAAAAADAEAAA0BAAABAAAAAAAAAAAA/////wIE -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQAADQEAAAAAAAAACAAAAAAAAAAA -AACABgAABAAAQAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAIAADCCwAARg8AAOASAAD+FAAACwAAAAwAAAANAAAADgAAAAAI -AABQDAAAkgwAAP4MAABoDQAA1A0AAEIOAACuDgAAGA8AACIPAAAsDwAANg8AAEAPAAD2EAAA -ahMAAO4TAACAFAAAABUAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgA -AAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAADwAA8GwAAAAAAAbwGAAAAAYEAAACAAAA -BQAAAAEAAAABAAAABgAAAB8AAfAsAAAAYgAH8CQAAAAGBiP0F3wAAAAANiQDkRECABAAAGoB -AAABAAAAMkAAAAAAAABAAB7xEAAAAAQAAAgBAAAIAgAACPcAABAADwAC8BwDAAAQAAjwCAAA -AAUAAAAFBAAADwAD8K4CAAAPAATwKAAAAAEACfAQAAAAAAAAAAAAAAABgP//AYD//wIACvAI -AAAAAAQAAAUAAAAPAATwqgAAAKIMCvAIAAAAAgQAAAAKAADTAAvwTgAAAIAAAAABAIEAAAAA -AIIAAAAAAIMAAAAAAIQAAAAAAIgAAAAAAIEB////AIIBAAAAAIMBAAAAAL8BEAAQAP8BAAAI -AIQDAAAAAIYDfL4BAEMAIvEYAAAAjwMAAAAAkAMAAAAAkQMAAAAAkgMCAAAAAAAQ8AQAAAAA -AAAAAAAR8AQAAAABAAAAAAAN8AQAAAAAAAEADwAE8G4AAABCAQrwCAAAAAMEAAAACgAAkwAL -8DYAAABEAQQAAAB/AQEQAAC/AQAAEADAAQAAAADCAf///wDLATBXAADWAQEAAAD/AQgACAA/ -AgAAAgBDACLxGAAAAI8DAAAAAJADAgAAAJEDAAAAAJIDAgAAAA8ABPBuAAAAQgEK8AgAAAAE -BAAAAAoAAJMAC/A2AAAARAEEAAAAfwEBEAAAvwEAABAAwAEAAAAAwgH///8AywEwVwAA1gEB -AAAA/wEIAAgAPwIAAAIAQwAi8RgAAACPAwAAAACQAwIAAACRAwAAAACSAwIAAAAPAATw2AAA -ALIECvAIAAAABQQAAAAKAADzAAvwiAAAAIEAAAAAAIIAAAAAAIMAAAAAAIQAAAAAAARBAQAA -AAYBAAAAAD8BAAAAAIEB////AIMBAAAAAL8BEAAQAP8BAAAIAIODLgAAAIQD98ABAIYD98AB -AL8DIAAgAAUABQAIAIkGAACvDgAAiQYAAOM6AADCPgAA4zoAANVCAACvDgAAiQYAAK8OAABD -ACLxGAAAAI8DAAAAAJADAgAAAJEDAAAAAJIDAgAAAAAAEPAEAAAAAAAAAAAAEfAEAAAAAQAA -AA8ABPBOAAAAEgAK8AgAAAABBAAAAA4AAHMAC/AqAAAAgQH///8AgwEAAAAAvwEQABAAwAEB -AAAIywEAAAAA/wEIAAgAAQICAAAIAAAR8AQAAAABAAAAHAAAAGwAAADcAQAAQQIAAIAGAAAE -BAAAAAAAAAYAAACsJgAABgAAAHQAAAAAAAMEAAAAAAAAmgAAAKwmAACaAAAAdAAAAAAAAgQA -AI////9iAAAAOCYAABkHAABUBgAAAAAFBAAAbAAAAPf///+dAQAAKAEAAJRAAAAAAP//AQAA -AA8AXwBQAGkAYwB0AHUAcgBlAEIAdQBsAGwAZQB0AHMAcAUAAH8GAAAAAAAAcQUAAH8GAAAB -AAEAAAABAAAA/w//D/8P/w//D/8P/w//D/8PAAACAAAAAQABAAAAAAAAAAAAAAAAAAAAAAAA -EAAAXoTQAmCEMP0VxgUAAdACBgIAAAApAAEAAAD/AAAAAAAAAAAAAAIAAAAAAAAAAAAQAABe -hEACYITA/RXGBQABAAAGAAABAAAA/wAAAAAAAAAAAAACAAAAAAAAAAAAEAAAXoTQAmCEMP0V -xgUAAQAABgAAAQAAAP8AAAAAAAAAAAAAAgAAAAAAAAAAABAAAF6EYANghKD8FcYFAAEAAAYA -AAEAAAD/AAAAAAAAAAAAAAIAAAAAAAAAAAAQAABehPADYIQQ/BXGBQABAAAGAAABAAAA/wAA -AAAAAAAAAAACAAAAAAAAAAAAEAAAXoSABGCEgPsVxgUAAQAABgAAAQAAAAAAAQAAAAAAAAAA -AAAAAAAAAAAAABAAAF6EQAtghJj+FcYFAAFACwYCAAYALgABAAAA/wAAAAAAAAAAAAACAAAA -AAAAAAAAEAAAXoSgBWCEYPoVxgUAAQAABgAAAQAAAP8AAAAAAAAAAAAAAgAAAAAAAAAAABAA -AF6EMAZghND5FcYFAAEAAAYAAAEAAAABAAAAAAAAAAAAAAAAAAAA////////AQAAAAAA/0AA -AAAAgAYAAAAAAAACEAAAAAAAAACABgAAUAAACAAAAAAMAAAARxaQAQAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAaQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBuAAAA -NRaQAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAeQBtAGIAbwBsAAAA -MyaQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAcgBpAGEAbAAAAEcW -kAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAGkAbQBlAHMAIABOAGUA -dwAgAFIAbwBtAGEAbgAAADUmkAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AABUAGEAaABvAG0AYQAAAD8WkAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AABXAGkAbgBnAGQAaQBuAGcAcwAgADIAAAA3JpABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAVgBlAHIAZABhAG4AYQAAAD80kAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABDAG8AdQByAGkAZQByACAATgBlAHcAAAA7BpABAgAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVwBpAG4AZwBkAGkAbgBnAHMAAABTJpABgBAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATABpAGIAZQByAGEAdABpAG8AbgAgAFMA -YQBuAHMAAABBAHIAaQBhAGwAAAA/BpABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAARABlAGoAYQBWAHUAIABTAGEAbgBzAAAASSaQAYAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAEEAcgBpAGEAbAAgAFUAbgBpAGMAbwBkAGUAIABNAFMAAABCAAQA -AQiNGAAA0AIAAGgBAAAAAHPC62bU3fWmAAAAAAEAAAAAAMkAAAASBgAAAgA/AAAABACDkD8A -AADJAAAAEgYAAAIAPwAAAD8AAAAAAAAAJwMA8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAIAAAAAAAAAAAAAAAAAAPAQAN/f//0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -gAAAAAAAAAAAAAAA//8SAAAAAAAAAA8AQwBhAG4AZABpAGQAYQB0AGUAcwAgAE4AYQBtAGUA -AAAAAAAAEwBzAGEAZwBhAHIAIABwACAAcwB1AHIAeQBhAHcAYQBuAHMAaABpAAMAcwBhAGkA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAJ4EAABEAGQA7gAjAQAAAAAAAAAAAAAAAAAAAACHAKUA6APoAwAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAADwAE8GYAAACyBArwCAAAAAEEAAAACgAAswAL8EIAAACBAAAA -AACCAAAAAACDAAAAAACEAAAAAAAEQQEAAAAGAQAAAAA/AQAAAACBAf///wCDAQAAAAC/ARAA -EAD/AQAACAAAABDwBAAAAAAAAIBiAAfw5AMAAAYGnRZ3tgAAAAB7OGUgEgIAEAAAwAMAAAEA -AAAAAAAAAAAAAABuHvC4AwAAnRZ3tgAAAAB7OGUgEgIAEP+JUE5HDQoaCgAAAA1JSERSAAAA -CQAAAAsIAwAAAJqHVykAAAMAUExURQAAAPf39/////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////88f9h0AAAADdFJOU///ANfKDUEA -AAABYktHRACIBR1IAAAADGNtUFBKQ21wMDcxMgAAAANIAHO8AAAALklEQVQYV22MQQoAAAjC -rP8/Ol10K8IJiuo7tbChbMtiRIMkMeT7m9B4e5RP2B4eJACOUomEagAAAABJRU5ErkJgggAA -ngQAAEQAZADuACMBAAAAAAAAAAAAAAAAAAAAAIcApQDoA+gDAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAPAATwZgAAALIECvAIAAAAAQQAAAAKAACzAAvwQgAAAIEAAAAAAIIA -AAAAAIMAAAAAAIQAAAAAAARBAQAAAAYBAAAAAD8BAAAAAIEB////AIMBAAAAAL8BEAAQAP8B -AAAIAAAAEPAEAAAAAAAAgGIAB/DkAwAABgadFne2AAAAAHs4ZSASAgAQAADAAwAAAQAAAAAA -AAAAAAAAAG4e8LgDAACdFne2AAAAAHs4ZSASAgAQ/4lQTkcNChoKAAAADUlIRFIAAAAJAAAA -CwgDAAAAmodXKQAAAwBQTFRFAAAA9/f3//////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -////////////////////////////////////////zx/2HQAAAAN0Uk5T//8A18oNQQAAAAFi -S0dEAIgFHUgAAAAMY21QUEpDbXAwNzEyAAAAA0gAc7wAAAAuSURBVBhXbYxBCgAACMKs/z86 -XXQrwgmK6ju1sKFsy2JEgyQx5Pub0Hh7lE/YHh4kAI5SiYRqAAAAAElFTkSuQmCCAACeBAAA -RABkAO4AIwEAAAAAAAAAAAAAAAAAAAAAhwClAOgD6AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAA8ABPBmAAAAsgQK8AgAAAABBAAAAAoAALMAC/BCAAAAgQAAAAAAggAAAAAA -gwAAAAAAhAAAAAAABEEBAAAABgEAAAAAPwEAAAAAgQH///8AgwEAAAAAvwEQABAA/wEAAAgA -AAAQ8AQAAAAAAACAYgAH8OQDAAAGBp0Wd7YAAAAAezhlIBICABAAAMADAAABAAAAAAAAAAAA -AAAAbh7wuAMAAJ0Wd7YAAAAAezhlIBICABD/iVBORw0KGgoAAAANSUhEUgAAAAkAAAALCAMA -AACah1cpAAADAFBMVEUAAAD39/f///////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -///////////////////////////////////PH/YdAAAAA3RSTlP//wDXyg1BAAAAAWJLR0QA -iAUdSAAAAAxjbVBQSkNtcDA3MTIAAAADSABzvAAAAC5JREFUGFdtjEEKAAAIwqz/PzpddCvC -CYrqO7WwoWzLYkSDJDHk+5vQeHuUT9geHiQAjlKJhGoAAAAASUVORK5CYIIAAJ4EAABEAGQA -7gAjAQAAAAAAAAAAAAAAAAAAAACHAKUA6APoAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAADwAE8GYAAACyBArwCAAAAAEEAAAACgAAswAL8EIAAACBAAAAAACCAAAAAACDAAAA -AACEAAAAAAAEQQEAAAAGAQAAAAA/AQAAAACBAf///wCDAQAAAAC/ARAAEAD/AQAACAAAABDw -BAAAAAAAAIBiAAfw5AMAAAYGnRZ3tgAAAAB7OGUgEgIAEAAAwAMAAAEAAAAAAAAAAAAAAABu -HvC4AwAAnRZ3tgAAAAB7OGUgEgIAEP+JUE5HDQoaCgAAAA1JSERSAAAACQAAAAsIAwAAAJqH -VykAAAMAUExURQAAAPf39/////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -/////////////////////////////88f9h0AAAADdFJOU///ANfKDUEAAAABYktHRACIBR1I -AAAADGNtUFBKQ21wMDcxMgAAAANIAHO8AAAALklEQVQYV22MQQoAAAjCrP8/Ol10K8IJiuo7 -tbChbMtiRIMkMeT7m9B4e5RP2B4eJACOUomEagAAAABJRU5ErkJgggAAngQAAEQAZADuACMB -AAAAAAAAAAAAAAAAAAAAAIcApQDoA+gDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAPAATwZgAAALIECvAIAAAAAQQAAAAKAACzAAvwQgAAAIEAAAAAAIIAAAAAAIMAAAAAAIQA -AAAAAARBAQAAAAYBAAAAAD8BAAAAAIEB////AIMBAAAAAL8BEAAQAP8BAAAIAAAAEPAEAAAA -AAAAgGIAB/DkAwAABgadFne2AAAAAHs4ZSASAgAQAADAAwAAAQAAAAAAAAAAAAAAAG4e8LgD -AACdFne2AAAAAHs4ZSASAgAQ/4lQTkcNChoKAAAADUlIRFIAAAAJAAAACwgDAAAAmodXKQAA -AwBQTFRFAAAA9/f3//////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -////////////////////////zx/2HQAAAAN0Uk5T//8A18oNQQAAAAFiS0dEAIgFHUgAAAAM -Y21QUEpDbXAwNzEyAAAAA0gAc7wAAAAuSURBVBhXbYxBCgAACMKs/z86XXQrwgmK6ju1sKFs -y2JEgyQx5Pub0Hh7lE/YHh4kAI5SiYRqAAAAAElFTkSuQmCCAACeBAAARABkAO4AIwEAAAAA -AAAAAAAAAAAAAAAAhwClAOgD6AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8A -BPBmAAAAsgQK8AgAAAABBAAAAAoAALMAC/BCAAAAgQAAAAAAggAAAAAAgwAAAAAAhAAAAAAA -BEEBAAAABgEAAAAAPwEAAAAAgQH///8AgwEAAAAAvwEQABAA/wEAAAgAAAAQ8AQAAAAAAACA -YgAH8OQDAAAGBp0Wd7YAAAAAezhlIBICABAAAMADAAABAAAAAAAAAAAAAAAAbh7wuAMAAJ0W -d7YAAAAAezhlIBICABD/iVBORw0KGgoAAAANSUhEUgAAAAkAAAALCAMAAACah1cpAAADAFBM -VEUAAAD39/f///////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -///////////////////PH/YdAAAAA3RSTlP//wDXyg1BAAAAAWJLR0QAiAUdSAAAAAxjbVBQ -SkNtcDA3MTIAAAADSABzvAAAAC5JREFUGFdtjEEKAAAIwqz/PzpddCvCCYrqO7WwoWzLYkSD -JDHk+5vQeHuUT9geHiQAjlKJhGoAAAAASUVORK5CYIIAAJ4EAABEAGQA7gAjAQAAAAAAAAAA -AAAAAAAAAACHAKUA6APoAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAE8GYA -AACyBArwCAAAAAEEAAAACgAAswAL8EIAAACBAAAAAACCAAAAAACDAAAAAACEAAAAAAAEQQEA -AAAGAQAAAAA/AQAAAACBAf///wCDAQAAAAC/ARAAEAD/AQAACAAAABDwBAAAAAAAAIBiAAfw -5AMAAAYGnRZ3tgAAAAB7OGUgEgIAEAAAwAMAAAEAAAAAAAAAAAAAAABuHvC4AwAAnRZ3tgAA -AAB7OGUgEgIAEP+JUE5HDQoaCgAAAA1JSERSAAAACQAAAAsIAwAAAJqHVykAAAMAUExURQAA -APf39/////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -/////////////88f9h0AAAADdFJOU///ANfKDUEAAAABYktHRACIBR1IAAAADGNtUFBKQ21w -MDcxMgAAAANIAHO8AAAALklEQVQYV22MQQoAAAjCrP8/Ol10K8IJiuo7tbChbMtiRIMkMeT7 -m9B4e5RP2B4eJACOUomEagAAAABJRU5ErkJgggAAngQAAEQAZADuACMBAAAAAAAAAAAAAAAA -AAAAAIcApQDoA+gDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAATwZgAAALIE -CvAIAAAAAQQAAAAKAACzAAvwQgAAAIEAAAAAAIIAAAAAAIMAAAAAAIQAAAAAAARBAQAAAAYB -AAAAAD8BAAAAAIEB////AIMBAAAAAL8BEAAQAP8BAAAIAAAAEPAEAAAAAAAAgGIAB/DkAwAA -BgadFne2AAAAAHs4ZSASAgAQAADAAwAAAQAAAAAAAAAAAAAAAG4e8LgDAACdFne2AAAAAHs4 -ZSASAgAQ/4lQTkcNChoKAAAADUlIRFIAAAAJAAAACwgDAAAAmodXKQAAAwBQTFRFAAAA9/f3 -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -////////zx/2HQAAAAN0Uk5T//8A18oNQQAAAAFiS0dEAIgFHUgAAAAMY21QUEpDbXAwNzEy -AAAAA0gAc7wAAAAuSURBVBhXbYxBCgAACMKs/z86XXQrwgmK6ju1sKFsy2JEgyQx5Pub0Hh7 -lE/YHh4kAI5SiYRqAAAAAElFTkSuQmCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAA7KUBAU0gCQQAAAgSvwAAAAAAADAAAAAAAAgAAAAVAAAOAENhb2xhbjgw -AAAAAAAAAAAAAAAAAAAAAAAACQQWAJxBAAAAAAAAAAAAAHIFAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAA0BAAAAAAAA//8PAAsAAAAEAAAA//8PAA8AAAARAAAA//8PAAAAAAAAAAAAAAAAAAAA -AACIAAAAAACIFQAAAAAAAIgVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANgV -AAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADsFQAANAAAACAWAAAkAAAA -RBYAAIwAAAAAAAAAAAAAACYdAAAGAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAOUaAAAmAAAACxsAAAwAAAAXGwAACAAAAAMdAAACAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCAAAGICAACOIgAAdAAAABEd -AAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -aRoAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQFgAAmQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAACIFQAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHxsAAB4A -AADjHAAAGAAAAMAVAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+xwAAAgAAAAAAAAAAAAAAAUdAAAMAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAIA2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAgACAAIAAgACAAIAAgACAAIAAgACAAQwBVAFIAUgBJAEMAVQBMAFUATQAgAFYA -SQBUAEEARQANAAgADQBSAGkAYwBoAGEAcgBkACAAQQBuAGQAZQByAHMAbwBuACAACwAxADIA -MwA0ACwAIABXAGUAcwB0ACAANgA3ACAAUwB0AHIAZQBlAHQALAAgAAsAQwBhAHIAbABpAHMA -bABlACwAIABNAEEAIAAwADEANwA0ADEALAAgAAsAKAAxADIAMwApAC0ANAA1ADYAIAA3ADgA -OQAwAC4ADQAIAAsAAQAgAEMAYQByAGUAZQByACAATwBiAGoAZQBjAHQAaQB2AGUADQANAEQA -ZQBzAGkAcgBlACAAYQAgAGMAaABhAGwAbABlAG4AZwBpAG4AZwAgAHAAbwBzAGkAdABpAG8A -bgAgAGkAbgAgAHQAaABlACAAYQByAGUAYQAgAG8AZgAgAFMAbwBmAHQAdwBhAHIAZQAgAGQA -ZQB2AGUAbABvAHAAbQBlAG4AdAAsACAAdwBoAGkAYwBoACAAdwBpAGwAbAAgAHUAdABpAGwA -aQB6AGUAIABtAHkAIABpAG4AdABlAHIAZABpAHMAYwBpAHAAbABpAG4AYQByAHkALAAgAHQA -ZQBjAGgAbgBpAGMAYQBsACwAIABhAG4AZAAgAHMAbwBmAHQAdwBhAHIAZQAgAGQAZQB2AGUA -bABvAHAAbQBlAG4AdAAgAGwAaQBmAGUAIABjAHkAYwBsAGUAIABzAGsAaQBsAGwAcwAgAGkA -bgAgAGEAIABwAHIAbwBkAHUAYwB0AGkAdgBlACwAIABlAG4AdABoAHUAcwBpAGEAcwB0AGkA -YwAgAGEAbgBkACAAaQBuACAAYQAgAHQAZQBhAG0ALQBvAHIAaQBlAG4AdABlAGQAIABlAG4A -dgBpAHIAbwBuAG0AZQBuAHQALgANAA0AAQAgAEUAZAB1AGMAYQB0AGkAbwBuAGEAbAAgAFMA -dQBtAG0AYQByAHkADQBQ8CAAQwBvAG0AcABsAGUAdABlAGQAIABNAGEAcwB0AGUAcgBzACAA -aQBuACAAQwBvAG0AcAB1AHQAZQByACAAYQBwAHAAbABpAGMAYQB0AGkAbwBuACAAKABNAC4A -QwAuAEEAKQAgAHcAaQB0AGgAIAA2ADMALgA3ADEAJQAgAA0AAQAgAFQAZQBjAGgAbgBpAGMA -YQBsACAASwBuAG8AdwBsAGUAZABnAGUAIABTAHUAbQBtAGEAcgB5AA0ACAANAAEAIAAgAEQA -ZQB0AGEAaQBsAGUAZAAgAEUAZAB1AGMAYQB0AGkAbwBuAGEAbAAgAEEAYwBhAGQAZQBtAGkA -YwAgAEMAcgBlAGQAZQBuAHQAaQBhAGwAcwANAEUAeABhAG0AaQBuAGEAdABpAG8AbgAHAEIA -bwBhAHIAZAAvAFUAbgBpAHYAZQByAHMAaQB0AHkABwBQAGEAcwBzAGkAbgBnACAAWQBlAGEA -cgAHAFAAZQByAGMAZQBuAHQAYQBnAGUABwAHAAgATQAuAEMALgBBACAABwAHACAAIAAgACAA -IAAgACAAIAAgACAAUwBlAG0AZQBzAHQAZQByACAAVgBJAAcAQwBhAHIAbABpAHMAbABlACAA -VQBuAGkAdgBlAHIAcwBpAHQAeQAHADIAMAAxADEABwA2ADMALgA3ADEABwAHACAAIAAgACAA -IAAgACAAIAAgACAAUwBlAG0AZQBzAHQAZQByACAAVgAHAEMAYQByAGwAaQBzAGwAZQAgAFUA -bgBpAHYAZQByAHMAaQB0AHkABwAyADAAMQAwAAcANgA3AC4AMQA3AAcABwAgACAAIAAgACAA -IAAgACAAIAAgAFMAZQBtAGUAcwB0AGUAcgAgAEkAVgAHAEMAYQByAGwAaQBzAGwAZQAgAFUA -bgBpAHYAZQByAHMAaQB0AHkABwAyADAAMQAwAAcANgAyAC4AOAAwAAcABwAgACAAIAAgACAA -IAAgACAAIAAgAFMAZQBtAGUAcwB0AGUAcgAgAEkASQBJAAcAQwBhAHIAbABpAHMAbABlACAA -VQBuAGkAdgBlAHIAcwBpAHQAeQAHADIAMAAxADAABwA2ADIALgAyADUABwAHACAAIAAgACAA -IAAgACAAIAAgACAAUwBlAG0AZQBzAHQAZQByACAASQBJAAcAQwBhAHIAbABpAHMAbABlACAA -VQBuAGkAdgBlAHIAcwBpAHQAeQAHADIAMAAwADkABwA2ADUALgA3ADUABwAHACAAIAAgACAA -IAAgACAAIAAgACAAUwBlAG0AZQBzAHQAZQByACAASQAHAEMAYQByAGwAaQBzAGwAZQAgAFUA -bgBpAHYAZQByAHMAaQB0AHkABwAyADAAMAA5AAcANgAzAC4AMwAzAAcABwAHAAcABwAHAAcA -BwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAAQAgAFMAdQBiAGoAZQBjAHQAIAAgAEYA -YQBtAGkAbABpAGEAcgBpAHQAeQA6AA0AUPAgAEQAYQB0AGEAYgBhAHMAZQAgAE0AYQBuAGEA -ZwBlAG0AZQBuAHQAIABDAG8AbgBjAGUAcAB0AHMADQBQ8CAATwBiAGoAZQBjAHQAIABPAHIA -aQBlAG4AdABlAGQAIABQAHIAbwBnAHIAYQBtAG0AaQBuAGcAIABDAG8AbgBjAGUAcAB0AA0A -UPAgAFMAeQBzAHQAZQBtACAAQQBuAGEAbAB5AHMAaQBzACAAYQBuAGQAIABEAGUAcwBpAGcA -bgANAFDwIABzAG8AZgB0AHcAYQByAGUAIABFAG4AZwBpAG4AZQBlAHIAaQBuAGcAIAANAFDw -IABPAHAAZQByAGEAdABpAG4AZwAgAFMAeQBzAHQAZQBtACAAQwBvAG4AYwBlAHAAdAANAFDw -IABVAG4AaQB4ACAAUwBoAGUAbABsACAAUAByAG8AZwByAGEAbQBtAGkAbgBnAA0AAQAgAEEA -cgBlAGEAIABvAGYAIABJAG4AdABlAHIAZQBzAHQAOgANAFDwIABTAG8AZgB0AHcAYQByAGUA -IABkAGUAdgBlAGwAbwBwAG0AZQBuAHQAIAAgAHUAcwBpAG4AZwAgAEoAYQB2AGEALwAuAE4A -ZQB0ACAAdABlAGMAaABuAG8AbABvAGcAaQBlAHMADQBQ8CAATABlAGEAcgBuAGkAbgBnACAA -bgBlAHcAIAB0AGUAYwBoAG4AbwBsAG8AZwBpAGUAcwAuAA0AAQAgAFAAZQByAHMAbwBuAGEA -bAAgAEQAZQB0AGEAaQBsAHMADQBOAGEAbQBlADoAIAAgAAkACQBSAGkAYwBoAGEAcgBkACAA -QQBuAGQAZQByAHMAbwBuAA0AQwB1AHIAcgBlAG4AdAAgAEEAZABkAHIAZQBzAHMACQAxADIA -MwA0ACwAIABXAGUAcwB0ACAANgA3ACAAUwB0AHIAZQBlAHQALAAgAAsAQwBhAHIAbABpAHMA -bABlACwAIABNAEEAIAAwADEANwA0ADEALAAgAAsAKAAxADIAMwApAC0ANAA1ADYAIAA3ADgA -OQAwAC4ADQBEAGEAdABlACAAbwBmACAAQgBpAHIAdABoADoAIAAJADEAcwB0ACAAagB1AG4A -ZQANAEcAZQBuAGQAZQByADoAIAAJAAkATQBhAGwAZQAJAA0ADQABAA0ATABhAG4AZwB1AGEA -ZwBlAHMAIABLAG4AbwB3AG4AIAAHAEMALAAgAEMAKwArACwASgBBAFYAQQAsACAALgBOAEUA -VAAgADMALgA1ACwAIABBAFMAUAAuAE4ARQBUACAAMwAuADUALABWAEIAIAAyADAAMAA4ACwA -cAB5AHQAaABvAG4ABwAHAEQAQgBNAFMALwBSAEQAQgBNAFMAIAAHAE8AUgBBAEMATABFACwA -TQBTACAAQQBjAGMAZQBzAHMALAAgAFMAUQBMACwAIABQAG8AcwB0AGcAcgBlAHMAcwAgAFMA -UQBMAAcABwBXAGUAYgAgAFQAZQBjAGgAbgBvAGwAbwBnAHkABwBIAFQATQBMACwASgBBAFYA -QQAgAFMAYwByAGkAcAB0AAcABwBPAHAAZQByAGEAdABpAG4AZwAgAFMAeQBzAHQAZQBtAAcA -VwBpAG4AZABvAHcAcwAgACgAOQA4AC8AMgAwADAANwAvAFgAUAAgAC8AVgBJAFMAVABBACwA -NwApACwAdQBiAHUAbgB0AHUABwAHAE8AdABoAGUAcgAHAE4AZQB0AHcAbwByAGsAIABQAHIA -bwBnAHIAYQBtAG0AaQBuAGcAIABpAG4AIABKAGEAdgBhACwAIABVAG4AaQB4ACAAUwBoAGUA -bABsACAAUAByAG8AZwByAGEAbQBtAGkAbgBnAAcABwAgAA0ADQANAA0AAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAWCAAAOAgAADoIAAA8CAAAXAgAANgI -AADaCAAA3AgAAN4IAADgCAAAAgkAAAQJAADMCgAAzgoAANAKAADSCgAA+goAAPwKAAD+CgAA -EgsAAGALAABiCwAAbAsAAHwLAAB+CwAAgAsAALgLAAC6CwAAvAsAAL4LAADACwAAwgsAAPn5 -9Ovh2PTMv7bMANisn7aVjoeHf3h4eGu2YfQAVLZhAAAAABlVCAEDauANAAAwSlAAXkoEAE9K -BABRSgQAEj4qATUIAV5KBABPSgQAUUoEAAAZVQgBA2pACQAAMEpQAF5KBABPSgQAUUoEAAxe -SgQAT0oEAFFKBAAADzUIAV5KBABPSgQAUUoEAAxDShIAT0oCAFFKAgAADENKEgBPSgUAUUoF -AAATMEpQAD4qAV5KBABPSgQAUUoEABlVCAEDaqAEAAAwSlAAXkoEAE9KBABRSgQAEkNKEgA+ -KgE1CAFPSgIAUUoCAAAQMEpQAF5KBABPSgQAUUoEAAAZVQgBA2oAAAAAMEpQAF5KBABPSgQA -UUoEABcwSlAAQ0oUAD4qAV5KBABPSgQAUUoEABBDShQAXkoEAE9KBABRSgQAABNDShQANQgB -XkoEAE9KBABRSgQAEENKFABtSAAEc0gABG5IAAQACQNqAAAAAFUIAQxDShYAT0oCAFFKAgAg -wgsAABYMAAAuDAAAUAwAAGoMAACADAAAggwAAIQMAACGDAAAkgwAAKgMAADADAAA0AwAAOgM -AADyDAAA/gwAABQNAAAqDQAAOg0AAFINAABcDQAAaA0AAH4NAACWDQAApg0AAL4NAADIDQAA -1A0AAOoNAAAEDgAAFA4AACwOAAA2DgAAQg4AAFgOAABwDgAAgA4AAJgOAACiDgAArg4AAMQO -AADaDgAA6g4AAAIPAAAMDwAAGA8AABwPAAAeDwAAIA8AACIPAAAmDwAAKA8AACoPAAAsDwAA -MA8AADIPAAA0DwAANg8AADoPAAA8DwAAPg8AAEAPAABCDwAARA8AAEYPAAD27Ozs7ADn39/Y -2M/Y2NjY2M/Y2NjY2M/Y2MnY2M/Y2MnY2M/Y2MnY2M/Y2Mnf2NjYvdjY2N/Y2Njf2NjYALCn -AAAAAAAAAAAAABAwSlAAXkoEAE9KBABRSgQAABlVCAEDaoASAAAwSlAAXkoEAE9KBABRSgQA -FkNKEgA1CAFhShIAXAgBT0oGAFFKBgAAC1wIAU9KBgBRSgYAEENKFABeSgQAT0oEAFFKBAAA -DF5KBABPSgQAUUoEAAAPNQgBXkoEAE9KBABRSgQACQNqAAAAAFUIARNDShIANQgBXkoEAE9K -BABRSgQAEj4qATUIAV5KBABPSgQAUUoEAEBGDwAAbg8AAHIPAAB0DwAAdg8AALAPAACyDwAA -tA8AAPwPAAD+DwAAABAAADYQAAA4EAAAOhAAAGYQAABoEAAAahAAAJwQAACeEAAAoBAAAM4Q -AADQEAAA0hAAAPYQAAD4EAAA+hAAAGARAABiEQAAZBEAAJoRAACcEQAAnhEAAMARAADMEQAA -0hEAAPQRAAASEgAAFBIAAIwSAACqEgAArhIAALISAAC+EgAA0hIAANoSAADeEgAA4BIAAPLm -4dra4dra4dra4dra4dra4drazcS64dra4drarcS6pdqbpZaNpdqF2qXapQAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9IKgFeSgQAT0oEAFFKBAAQQ0oUAF5KBABPSgQAUUoE -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 -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAFiQBSWYB -AAAAEmRoAQEAAyQBYSQBRyQAAA0AABYkAUlmAQAAABJkaAEBAAMkAWEkAUckAAAKAAAWJAFJ -ZgEAAAASZGgBAQBHJAAACgAAFiQBSWYBAAAAEmRoAQEARyQAADoAABYkARckAUlmAQAAAAjW -GgABYv/CJIAAAAAEAQEABAEBAAQBAQAEAQEACdYCAAAS1goAAAD/AAAA/wAAcNYKAAAA/wAA -AP8AADTWBgABAQMAADTWBgABAgNsADTWBgABBAMAADTWBgABCANsAAM0AGY0AAAF/gwAAAAN -AAAqDQAAUg0AAFwNAABoDQAAggAAAAAAAAAAAAAAAHcAAAAAAAAAAAAAAABsAAAAAAAAAAAA -AAAAXgAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAWJAFJ -ZgEAAAASZGgBAQADJAFhJAFHJAAADQAAFiQBSWYBAAAAEmRoAQEAAyQBYSQBRyQAAAoAABYk -AUlmAQAAABJkaAEBAEckAAAKAAAWJAFJZgEAAAASZGgBAQBHJAAAfAAAFiQBFyQBSWYBAAAA -CNZcAARi/8IL0hlyH8IkgAAAAAQBAQAEAQEABAEBAAAAAACAAAAABAEBAAQBAQAEAQEAAAAA -AIAAAAAEAQEABAEBAAQBAQAAAAAAgAAAAAQBAQAEAQEABAEBAAQBAQAJ1ggAAAAAAAAAABLW -KAAAAP8AAAD/AAAAAAD/AAAA/wAAAAAA/wAAAP8AAAAAAP8AAAD/AABw1igAAAD/AAAA/wAA -AAAA/wAAAP8AAAAAAP8AAAD/AAAAAAD/AAAA/wAANNYGAAEBAwAANNYGAAECA2wANNYGAAEE -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 -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAG8AbwB0ACAARQBuAHQAcgB5AAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAFAP////////// -AQAAAAYJAgAAAAAAwAAAAAAAAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAACAAgAAAAAAAAEA -QwBvAG0AcABPAGIAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAASAAIAAgAAAAUAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAGoAAAAAAAAAAQBPAGwAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAgD/////AwAAAP////8AAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFAAAAAAAAAAxAFQAYQBiAGwAZQAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgACAAQA -AAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAACIwAA -AAAAAEQAYQB0AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAKAAIA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAFgAAAP4kAAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEA -dABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgAGAAAACAAAAP////8AAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAHAEAAAAAAABXAG8AcgBkAEQA -bwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -GgACAAcAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkA -AACcQQAAAAAAAE8AYgBqAGUAYwB0AFAAbwBvAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAWAAEA////////////////AAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAABQBEAG8AYwB1AG0AZQBuAHQAUwB1AG0A -bQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAADgAAgD///////////// -//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAdAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAP7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///// -//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+////AAAAAAAA -AAA= +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 +HjbfWssgAtBZCtQlqQtzT5ftjsSxkQSRRvBbhX6iUWsa21RN9yrdW0S4U2n3JDgw7FSzH7In +p91m1ZZGrRgVUpWTuS2njd5lh+7ALTzbdsal9gSPBeIfo+hNG418vS3c87Dj7wn8SNpNz0r8 +yCoD1QXx7WHaHbZ77gQckoFG8mEBWUevhVT+9AeIddwVCmv8sf7/96Xc5Vr4XP4dH/Ivheft +hX/L05GvUZUtMQ38kncO/x/uzsJqCmVuZHN0cmVhbQplbmRvYmoKCjMgMCBvYmoKNTYyMApl +bmRvYmoKCjUgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1hZ2UvV2lkdGggOS9I +ZWlnaHQgMTEvQml0c1BlckNvbXBvbmVudCA4L0xlbmd0aCA2IDAgUgovRmlsdGVyL0ZsYXRl +RGVjb2RlL0NvbG9yU3BhY2VbIC9JbmRleGVkL0RldmljZVJHQiAyNTUKPDAwMDAwMEY3RjdG +N0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZG +RkZGRkZGRkZGRkZGRj4KXQovTWFzayA3IDAgUgo+PgpzdHJlYW0KeJxjYoIBBhjJAMSMIALE +YoAKQ2gGOIJKY1EDNwoGABtnAI4KZW5kc3RyZWFtCmVuZG9iagoKNiAwIG9iagozNQplbmRv +YmoKCjcgMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1hZ2UvV2lkdGggOS9IZWln +aHQgMTEvQml0c1BlckNvbXBvbmVudCAxL0xlbmd0aCA4IDAgUgovRmlsdGVyL0NDSVRURmF4 +RGVjb2RlL0RlY29kZVBhcm1zPDwvSyAtMS9CbGFja0lzMSB0cnVlL0NvbHVtbnMgOT4+Ci9J +bWFnZU1hc2sgdHJ1ZQovRGVjb2RlWyAwIDEgXQo+PgpzdHJlYW0KJqJKHCXYXbrYrCI+gl2K +7aWxW1jABABACmVuZHN0cmVhbQplbmRvYmoKCjggMCBvYmoKMjQKZW5kb2JqCgo0IDAgb2Jq +Cjw8L1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDE2L0hlaWdodCAxNi9CaXRz +UGVyQ29tcG9uZW50IDgvTGVuZ3RoIDkgMCBSCi9GaWx0ZXIvRmxhdGVEZWNvZGUvQ29sb3JT +cGFjZS9EZXZpY2VSR0IKL1NNYXNrIDEwIDAgUgo+PgpzdHJlYW0KeJxjYBikYOvha9WztmIi +oDhW9UCp/9gAUJx49d+/f8ej/jsa+Pz++eN7+NWjCd67fQ2f+s/vgej9++fvX4MQ0PB718/h +UQ9ScPvcvcvnrl0+BkLnj507vReP+mvn9x7bt/bYLiBaCkLbgORaXOpJDf8hCgA+0bJGCmVu +ZHN0cmVhbQplbmRvYmoKCjkgMCBvYmoKMTIwCmVuZG9iagoKMTAgMCBvYmoKPDwvVHlwZS9Y +T2JqZWN0L1N1YnR5cGUvSW1hZ2UvV2lkdGggMTYvSGVpZ2h0IDE2L0JpdHNQZXJDb21wb25l +bnQgOC9MZW5ndGggMTEgMCBSCi9GaWx0ZXIvRmxhdGVEZWNvZGUvQ29sb3JTcGFjZS9EZXZp +Y2VHcmF5Ci9EZWNvZGUgWyAxIDAgXQo+PgpzdHJlYW0KeJz7/59kwAADg4RPEQAA18WuUgpl +bmRzdHJlYW0KZW5kb2JqCgoxMSAwIG9iagoxOQplbmRvYmoKCjEzIDAgb2JqCjw8L0xlbmd0 +aCAxNCAwIFIvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnicjVVLi9wwDL7nV/i8kKyk +OLYDwZDHTGlv2wZ6GHpqu4XSaZm97N+vZOfhzUx2lwETZD0+ffrkgQLVc3ZRwD+DpGxN6uln +9vVO/c1Qye/pV2bZTkobp4zTfK0e76YQkOtuZA/OY3VVWDX+UPdHrRDU+NgA+vF3dhizh02A +g9S9fNO9LOhGwKkpW28bcD7XDYKnBg4eGwJfNkg+p/hJ6PNKks+GGECVGKIZWo80JzrgUaJC +aMn5MEbKJ6fSU+roDDX2/tv4KaJ+UC9Jc4VRpnDKFbTwllxYvsCF70twlabFfXH7fs7uP54r +NfxTUuD2rDbjcEU9RQe6aObX7fFLhU4DUNWBXjwioGNCOhxQo/U5IjNGwGZig0GLh7X9C7cu +SVElCRk/FJV6ngp+/pCByoE7PSsL3H74/qO+XIGKokLcdHFqqPU5D7GSUTgeCnSMq6GO20ug +pKmQs9RprjcVhw52qnPvJEor5dBSXoCAEV0JQToog821WFpxsEEpAWX06z3rcZiEt4M5tG9q +zecGwEHkXfk5WThicqkm6pQpJSCslIsgEucAot+lLBCQ1F92jts30r7MQMtnFT5Nsk3Wu2U/ +GNRi74JnL0HRMAh17by4U0g8g3VO+jpIa64eBjhKj+ubwDts58Wt40JPdeYSfC0jRb0+Fkyy +kXYX0LHT0P/7kFU1r/JLZGg8wpx1ZpFPXiUHUhDrYOxWlvpw38pdYDDgwt3RReVo5L3aLE4Z +l4bC/KMKokwGbp/6mX2Ut5GaqHMzPaYY1U4SBs0ruxY7X8svu0a7u2b4gTDp815JsIxxWqK9 +WrVUua51mpgry/By1/Nzvo86cka6KLecDetu3Vjl99KxZl6FEOQmCl30mPyR/Ae6V6DbCmVu +ZHN0cmVhbQplbmRvYmoKCjE0IDAgb2JqCjY2MgplbmRvYmoKCjE2IDAgb2JqCjw8L0xlbmd0 +aCAxNyAwIFIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgMjk4OTY+PgpzdHJlYW0KeJzt +fAtclFX6/znved93Zt65MDMwKPeXm4giEHhDTQcUFEUkQNTKYmAGwYAhBlS0Fi+raOqaKVhm +SqVm2ppZa6DWWllW5t7M/a2b/btoWRtr/vq5W6vw+n/OeWe4eGnbai+//+fv+M6c97znPOd5 +nvNcvueZ0braehcyoMWIIHtplaOG//jkqwihdxDC1tJ5dfKo/uVwjz+ESymrmVM1f36KEyEC +92jPnMqGsg2FV9cixK9BaPCZcpfDWZPSPxmh5HJ4PrwcOu5UqjVw3wr3MeVVdQs+CfyTBPdH +4f6bSnepozTvyyyEbjkM9z+pciyo+Zxr4BFKGQP3crWjylX/Uu1kuL8ToTEf1bg9dbejJVcR +ctvp85paV03ZRf403BcjJNA1MbzoHwM0RXrPEV4QNVqdpDcYTX5mi9U/wBbYr39QcEhoWHiE +HBkVHRM7IG5g/KDBCUMSk5JvSUkdOmz4iJFpo0aPuRX9P/AHD0Nt6Di8XkG70Ra8E+7KoPte +6Gnl9qPlqB56XsPH8SpuCPTtRBfRSRjZhI6T3TzCk1Eq9CJ0WuDQJVyIXgAaaTgAp2lEHvG5 +/At8Pt/Gn+dPoBG8hz/BF/MenEqeEIqEnXClkdc5K3oLRaA2/AHyoIPkc5JKDvMTeBP6gJwg +u9EnsArsN6yxDm1Hi4CXAOxGjdwiLh96jgkn0GZ4ueH5CbwVnwTuDuJl6BR6mPDcJLQVnwK5 +jqO/omWkkGsEu0zlyoD/Y0DrBMzfjDw8Ek5hCSncYOgD7mGtEvYeRoYIp9jrImqElQvRdrFN +DNBEwypUYzvxa7hD3IBa0UlyJ7mXvIeX89H8Ln4SWqdqgBSjdUB7M50jluEGkJ2+FlHq3Hy+ +GO9Gn/PFmhKg/TqVCNZ8gcsHicrQYbjmi2aQaTReTlYBp/RpGDqhmcwnwXygoLkfpAbDJsPQ +XGgtQnvRfjSEtKB1QInJK44Q/gozt/Afgczr8Frur+gEmYDiURl/AXSNAhBqQehFjSjwhMMo +QTbv42Kznfvst82U35wVOSThmlvZrJH3obx9xga57erVvJl8iDBrnxC6j8Rq9/Gx0R/d7OFH +QxKm5M2U93VlTvBSzSyeAH0FM6FJ76Ab+jMnsGd00X1CLPzNLt4nl5bLD5gfiB71gNk1agio +DZUpLXyZsB2ikQYF2w38FSRewVqhkeNR0tF3O25B5nc73u1I9rdEWmIjLZFlPOr0kJDOT5QW +jembr2rFePD/jyAe3S6cQhKy220ZpJXnWoUlGtSq00aIoQRFYL353Sn7/ApntsNg+8hZHUc7 +gXBSR8olShr4nhWFX/Ajfjw3e0SkRRgWm2qJtEUqeLLyCHa9jSd3bt/Neya1Tbp8ajd1MKpl +fjJYUSjabI+DwEL6h1oEHlkEgc8wP27ZaGwNWM+DtyGzxGEptJ+ZiGHmzin7bIVT9gUW3jFl +X0DhHcALuXpk5CyQ8cgRizXNy88lxo/GLPxZI/zZ0i8NOLOnTOeLhCLNQn6hMC+kKUgDfhjE +B8OGhNaheWJ9sCekLnQpWhG0NHhpyNLQXWhXiGU2mh0LIgwbjkaMxcOGDoiOEjXDxuLUFN4W +IGpEBM7/SmeOB69NdUx9asXdJxcsfHfmZzgg844g5dLu3bvn4/WjqjZlz2/JGP/OLSmfvXrn +jpow5Qsm+5arZ3kPyD4Q1dgTkc1fWqGLWCH7t9qMrboNYmirvCF6vbjG9mR8YKg/IgFBoQNk +cygJiNCJ8VQFgYU+6XVMehD/UgfICfKbO85dOtdh/vSCmb1AJ8nYrnOGOyIcsjOSR7NxOLYF +8JFRA+KGhYMow0GuwXiY2ugjIBm3/knlN8pndx2bW/hm1cvH2nfsPdC89cmHC16u9bw161Ns ++BmJjTj64Ptfxca+dktKy7qfNu+cX+NZFDPgBVn+7f779lC7hJzHbweb4pARLbGHYSMxIkKM +GYjoNa0CJkt02CChUFHLG0zmM1P26UEwIxPMQAV7d8zRjhQL3dVz747pSAFZ2Lbyb8HWvkU3 +dZAeDUKT0CxUgeajB5AmEA9GA/BgMhzn4mmGacYiXIbr8UKyHBthM3U4kqRaUm3RlmhL5DAi +KhxWhimnTr3VdZcQ23mWnOhM3aW04uLX2B5tvWrFryEFCSjIbiBb0TKR8DgI9RfNnR3vvgOa +7uxIHpFqI9H+F09uX5KvPKMcwXaYNwGi0E6Q2YAX2bOFYFHQSTo+WNKRYEkvccGY0+sl0aLR +agQLL2i1Gs5COAOMtkD6zZAEjogEPavXGvSSTqsGIb0GGc3vvtOPKgLUkNIvrdu8zVrvJfR8 +qs1ZUfuRCePZ9q9EThQ4CfxaskoDhRhJlsZyY4WhUrKUw00VMiS7NIuby90jzJGKpUVcI3ef +0Cgsllq4ZiFMg3ScliBeFEANItbwWqTV6JCOlyQDMgUTG2/TBhnMJpmPFGRR1sjaaF2MFKuX +TbJpDDeKDONThWTtcF2afpwh2ZSFsvBkzs5nCnYhQ8zQZGjtWrtugjTVYDfZTTO5Iu0sQ56p +jJtDHHyJUCwWa4q1Tp1Tcurno3l4EbeAzOfrhAaxQTNfW6NdYGg0NJpWcE1kJb9KWK57QL/O +tInfZnrWdAfstX+qDtO/OFqHoye8g0fhtLP07YSySlFeV15VhFNXrPwFel0eLJgvX0TUXu8F +v2yEXBSAQsAzY5AN61ZoVwq2p7HQbsCH+rdb2wxrQkNsnNamRVM4q19mKJjBpY6jLPaYz13q +OMf87hJzPHv8uLCasNaw34RdDBPGoXF4HDfONi5ESNAkaZN0CZIbubGbc9vcIbrZ9+LZ2BbJ +PHKEzYSjZWQxo9QUpEnE1Cv5xs79hhMvzj1WUvqbe5RLyjEc3/kx1rRxO1Zubjdxd93+8rGh +Q/cOSsAjsYT98Xjl/aObXti7ldqx++pZcgxkikPn7WOMBs6kL4gI1+o4jVQQERGeIenDI3gb +WoFX8QErbKv6t1v49tg2y5qB4ZI+IkSD8kO0Jo02ICpzoLnzKET6cyBZWppXWrPylwvmv1yw ++izSRKOtxqTG3P0ojtpfVagUqg81JILACfoEw2jdaGm0frRBLyMZx3ADpYH6Qf5JAUm2QYED +wwdGxMvxkTFxK6QV+hWGFUYr9USOEyVRTwzESEzEj5hJEAkmISSUD9PFJcWPi787vjF+cfyD +8a3xF+P7w9bfi21MabaAwAgW7cTo3tEuCSdCMB+emhJIVufuun3VqpKN447u+PoPt79WWfaG +Y+ka1x77noc//FXZC/y4vQMHFhbasyNNgx5ZteVAdPTLw4bNum1KXqxfTPPSrc+EM6CIRoDh +fCVsRf5opD3IJGj9yNPIgg9rmyQ9aJlHWrPVlBVg7hxzFP6mpLEcdUkNbGnJ+5+1gY4wzZSW +gMDR2AasDrNED0u14Pl4kbJ8iuell0490dQkbFVeXdfVuip387bfccXr8FjE7HUd2GsL5BE9 +ikEz7TH+IjKuMKDWQLE1NHCHudWwKmp96JpYQ5QuNCjcP5RERoTEgr2CwZ5j+3eu81xPmrAH +AN7FJ7gT5AR/XDguaraH7w/nZgN3TJWq8lTVcoQmCWQLQKqdRqYEcttXbtu2Ei6sy3k0582T +fqP33/MRFpSLHytdygWch0NyHiWjDz7x+KFDjz9xkGtoixmgfKV8OWO28uUXnyp/wmtxAy7B +O7w63QV5oxxiqIhK7f0FC0c4AsGSzxBa0RIiEMxjJGrMne8ctTB99sr3cEFioCly5ksAhmhA +1iANJBPLiJGz7NaZHBZJsJAmTBLmkH1on6ihsSLShqNx5C5ypOvjk1jpShVOFV1eIgxWeWkC +HT8BOo5DP/H6DxfudSCux4Ewsj0esLF/s4VvRhtj1/f4T1RIkGmIJiggaqD5zNGOzj7+A4n6 +wl8vmN+w9PUfs8+B/OLBOA5ExCfFT4sns681675JXDXrGDBrfpLnnbt3PD9/58KP/0t5Xzk/ +98vFizpqf364afOij9/G/f5S8Udh++sjhi+eV+qKCBp8+sDpD5OTfpOZtfIn1fdF9B9yZM8b +5wZQuQ/CuWAyxA0LAtMQIQdZ9KTJ1KY7rJFESANZVhoPUmhuhvj37jvUhF7I89/mz4HFqIxC +mk21UUsJ7EcmR2QnbHmqvX3UweX+iaHkBavl+Mtd+/nivWWlgsD07Ll6VogDPQeh4fZg4+Om +vVKzBT+O9vLN/UCdwZogI0oOMAeD/aZ0qNHnElNf8gt+IREhdFWqH6899gqiYJxCXNn5pVeR +chGbMVp6vmzun3+q/FxZiFfgghV/FkpO3X2Xckz5g3JaOXbX3ScnTcLb8BxcjrdNZD62CPZ/ +COhBQrHoMCDVCH0/nQk93U9sN1nkFREHQ9ujIVz2M6B+pL9Rp9VHEG1A5gBg8513IVerBnr0 +3KVO4PYN6mppljTqbdXJYcnhyRHJcnJkctS4OHuYPdweYZftkfaovLC88LyIPDkvMi8qL64m +bnlYU3hTRJPcFLk86sG41riLceG+qb5JvgnF4cURxXJxZE14TUSNXBO5OHxxxGJ5cWT/3n58 +Kx4BIQb0A7EGAmFkb+QXyL38wTNL3I+0t7WNO7zymeNdVzD31KbiA4Wul2//n4tcatmiEs/p +F+JzupbsLnO88sRLR6yNqxMTd8fFddI9fAXeGsQAOIdEvYg2cViLsnizekxIthvNkPfzhGKh +RrgoiBhStCX6lTY4PP6tg+q5Z64GDbabxJf559BhTsBaHmVpIXyqtgagy6436+y6PF2xrkYn +qGQoqANSbW188ZVWMeBzystbCIkRFIehX9qHEgq4OAvmvIALMBm2SJIuQ9JwBBDOs1q9oNMC +1hIkMZQfK4Ui3giMd1JUTVEXDdc3hl3gpjUMZxURjZ/WT8dJNi5A4y8N4AZoZM0AQFtDNcOk +Cu4+bpGmQVrMLdUslR7kAnmsJ/44hETjBBKnHagbiscQwD86l3aubp62QbcEryXN+FESwOIT +IFcQEoKUJfotPATfjxvxkNeVxuNK41HhVKeWfAMYJqIT8ejyR8xmzbSuw3C3hF61p0M+QhA+ +OXq2ArGJhCwc4HBJAwcukXbqLETS0geAzDXNFJeDNjQiOwHrBAlOfkdVPZx7t8Oa1utw1Qtw ++sKvF3zKBqqUDD/sx/lRxaCZaB6qQWuQToO1nEh0fCAO4orwTC7PAN7GLcDzuPtILT9fs0Db +hFdyiw0Pc4+QFr6fCtwpkiORJJo7rFzgYpVFn3Bpv1vZdffKU4KpK4jsvTwYNypLmOw0Xq9j +ObEfirb7i61W1GpYb13TXxfqF05CbSH9GWTzApgLyTiKs5itqSlWi5mLS6ERIzqKvnOrtzz2 +GPx97LErWKd8feWK8jXWCXnKCeUduE4AQ6l4KE5tVTzKCqVJ8bAUthCvpba3T/mKWyRa4dQz +wu4nPow2mYwaRKwi8pfYOcefnqIlesTxnqgleqI+l9LBwgU9WWCRswVY+0UP4IYNtY7gFq1Y +umx5a0vzxk2i9VNl7PnzyuhPvsBvfPgBPtoB622H9dxsvQi7n4aup8FIb+X9tQjWG3Oph65/ +aqDVFsBpoodbhw3ltgPJ5pbW5cuWidYOZcwHHyqjvvgEv37+PH6VxWQn/gAOBMvAJy0H0BYO +0i5vPvMOKyckQ9aMdHIhXZ9wy7ar56WzvBNsLgzdZY/mgzWWFeaw4FZNQKt5lZGDvG1cA4ii +XyiWSCiSzGK4uRP3Psmae2nDTLUBh1rz0Qt0m+g+wYFWOaoCFbqwxQdA+uRAGsXeJ0FdrQkz +Ey7jGOVd5cu7Xiu//cg9P3/77Z/f9nihcGq38pCfn3LhT/+t/EWWj9+SfGDLlgMxkO5AwtXA +/2pmN9EoCY23x/YHJBUntoYPabWuD18T92Ryf0PMoFBbTKifDqwITMkvMiSZJsFLRzsYiPKd +v9kdgLvewCnWl51p6YBl7+ioGIi+/r4BwDu3+sEdOx58cOcOZcfS9ejq//lAWb/koSeVr7/+ +Wvl6+6T1y5Zu2LB02Xru9c1NTZsfXdG0uUjev/j53/zm+cX75ag31p3+7LPT697AjrqlS+vg +Yr6wBGRqApn6M3wYrYkIwitQUKu0g29FqwIjWs3rA9fEakJDI/3DUVRUqJHBQxDA5x2fUnyv +osPAo0GvBh8JORJ6JOzV8KMRmt3Ww9bPrYBKZo9g+rf604SChg1FqWrajRqAfYKBFj7K2TIF +UOGo/ZUfKlew+WNMsEV5TvkkZwse60WOEYAJsRFbi+7Efl98igOZY21T7gjnNvlwI7Wz9+Bt +L5zLwSZfRMs4eiTvzjFwHo9+7+RJRQHZIf4L+8AetYBgEu021Awxtdms5cwSEoKMKShUx1tZ +JLCoeCyJlo32F/szPO6VITaSfQIM23AJD8MRykfKcSUD8MF+3KKUK3mKQ0i6Mh/3B8CTgPvt +VDYpi5WfKC3Md+AsSc4DbghC4+whcL5ayZtWGFdK9HzVr40CGqsRTQrIBEBzzgdozMolepyC +DOcXYg5ZHPJgSGuIgHsBP9/pMMoLbMj53Mfynn/jjefzHsudumN2l/J7yA7i9Cf4Yc8MHnz2 +xImzgwfvjonBY7EJW/GoaOTFdbwT8qw/GmoPIjpETFhsMlnaDJskSI8ol2IYel6hhTRWcADz +ttAT3v5i9awSbVE3laZd5oeBvLPtvvuan2lvz3i+/pU3uO1dd3Jbt219eXtXkxjQtdXl/LJ7 +XdCHP+C7PusevvG653zrvlBs+7WNu3Zl299ZGaAlXRjO9EoRfzusq0cD0WR7dJAhTGdd4R/Y +7kfaB0S3xR3Wtfu9FBw2IAhpDRNFq1XOjGc+DdiNAbcOyodZOUW9IC35QPGgxYNaBxHgxmfZ +sCf9zFxPHLoV0w1Sc0pgv2Gp5IkdzRt37NjYvKNNUS47nrnttq35v3ghbf99v+rs/NV9+9Pa +uFvfPHPmzWNnznyhfKx8Hhb+fMKgl355R2kJHoXpSWdUSelu6ssHQY7tIIcZhaKx9pDgdmQK +aBe0baY1+CVyOMxi1U/sB6dNLiuM6jBFzXDnGPdHwaR0xeGLw1vDPwzn8ezYbgWCHXEAA3sL +gz2A0p9b9A66evWdRc9xI5966KGn6LWra68o7XY6lMPKN/A67MBfHD9//jhcqLt2Us/03A/0 +7C+2W1G7oY3mXavfbcRqy7wm79qjxwUtQovERk2jtlHXKDXqFxkajY2mRr9Gc6NlkbU16GKQ +pe/ps0969mx8Zk/zhmee2XARW5ULF/9b+RJbyAfn33rr/GdvHvt8i/Km0qH8WTmG07A/DsAj +me0nAaPfMNufZQ8VzNigfVrETZAuxcMS5w8HRZ2gNfrpcwJolVWiqUhPU9GUfSbWpimKHeOP +WlnEOJfSCZKkUMPAB+y2PFurjR7TQJVhmCapaHqSpxCb+2Zf6VScpPy2fd++vS+JAY/klZeu +60wiv12Xe2gP8FUEWHUYX4wM+At7tjBdrRlOl3RkOq0ZTv9ONcNf3qBmSIWYss9Cq+VW+uZP +3/Qs3yIqGGRgg1pynbLPrHZTGf/hUiO2XxW4QC5QiJKGSdlctpAl2aU7uDuE6VKeVM1VC2VS +AwCJBqFRaOIe4R4WNkqHucPCr7hj5NdCmMDpiMjrBUmr18GHwcYFkUA+WAjRhugC9DZDLIrF +0VwcieRjhSgxShOrjdPFSJH6aEMaGc4P16bR2iI3iWTxdj5DsIt2jV07QTdBmqCndcUiVISL +uDz+NiFfzNfkaQt0hdJ0fSlgGxc3l7j4ucJcca6mWufQzzG4TfWoHjdw95MF/P3CQrFRXKhp +BEDaoGvULZLm6e83NHErhXWmTWgT3shtIFv4R4WHxYc1j2jtSS2GbaadaCfezm0ne/g9wtPi +05o92u2GZ02/4J4jL/GHhDbdL01HudfIO/zbQgOrUYZg+hdH63F0Udunn5z+9JM25b3T//3V +ab64s4XMpdeVVtLSOdfrX7eD7VL/H2kP8vn/GlMb3kSY50+EGJAZxryMBa8On/MfUH2fsMzm +PfpxrL4YiHvhD/JEW9uo5+47fhVdPX7fc13HwOt37QLPJwe4u/7WscvpwBOwFl4THIrN5/oY +3QpxvRFsV0RX7HGsTEPPWQL9IJyIRGqkYgYHBiqIAj1h8UijWqbPCikEpN/rdNufetjoSLnJ +gQvbfzaJm8vRWvUKbjG3ntvOaelCOjhU2JANB5NgfgAagONJPC9rh6FheBQZxSdraf05m2Tz +WcIk0a6ldjGLzOLztGWoDFeQCn6OUC4Wa+tRHV5EFvH1sP/L0XK8iqziVwkrxBbUgjdxm8nD +/MPCJnGX8JS4T3tE+4H2qnasr96Mo299Dd+F73pNufMy7GAheeZKqy/nasIgNkah2+0DRKuu +vx8SwzQ2Q1OYTNpCDgeZNcjip9WKeRatX15of21wVjQN4p2dcABl32qNgXTIDqE0Idr9k2Py +YmpiHoxphdcvYz6IuRqjg71lGdHWO0tely7jM48sffbl9tr6dTvba+ev3dnePm5fw8I9ZNV9 +8/7yMU2ej2+hyZPb+sSjv3ySJdE5Jfep8X0v2N9Mlr8D0Gh7aE8GXyPhwwFtBsjfAfpcyORZ +NmqCaep5/VxKdxp3247QNO4PJqgaXbctDsB7aRr/eVvb+OfqX3kT/xof5HZ2ObZte3k7t+hK +6zNlpRfJLqrHmQDU3wNb06HH7MFatS4IUTFD+zQ6TJ4WtAQOKFiUfF8lGZhJierJgp25RHay +SPHWDTuuKxzaM2gcG8BN5LI1gl7rp+9PQrSDtbJ+OEnTJuvt2M5lEjtvF8ZrZ5BZ2rv1xbiY +KyPFfLFQom3UL9Y/qw/xVhTpN4c48l4ytyuHe6Hzfu6FLhdfvKvzvQ27SCyV5VbI59Rv/PBq ++3iNltNZkJ9k0UsI+ZksfsjPaDEYEf0wGSEJGCyQAjKMep0Z6YUm8pJJf9hsMhokHUR+rR/v +pzf7or2WCa33OZYvbx09ykoZZtiQDm8N6maRXfhzvxSqi4siErSijhgDpX5GszHaOMyYLU2T +co23626X5kpNxsXGDUarhIAJiNp6k96vH7ZxZt4s9JMC9AGGYFOwXxyKwTGczMtCvHagLlaK +0ccY4oyDTIP8ZMsI8MxhXDKfLIyUhuuHG0Ya00xpfsmWdET1bGd6VqN5hi5TmmjMNmX72S2F +6DZ8Gzed5PF5QpE4XVOknaGbARF9umGWaZZfnqUMl3HlUoWpwq/Yski7wLTAbxV6QLdcv9yw +yrjKtMrvEV2zvtmw2bTZb7t+u2GPaY/fPsuvLR9YrlpcsHOCCatfh47D7PsjbkPuxvs2VOYU +pkYqo1XnLn9z4eZJKwr53M6NpBJ1Y+otEJsldNger7VAoNNYRIh2Fl/VJUMLSZocRpt0ooB5 +UUsrY3rq4u8etai59pwv1fK9Kik8raSYWSXlbp6TtIFcHBcvDNYWcWXcHK2Hmy8s5VYJP9Nu +4FqETdonOatO0ImcnkiagSSOHygMFgdr7IZyUmxYRZZDFFsrrtNsJps0u8lTwgHN65rfa74m +F8nX/EU+ePa9NIhZqNC0zHSwnYv9omsvd8/FrmPtYkBnBT7bdanrGS66630k0FykiffVWFAc +SkWr7MNj/GIHxA7wi4uJy0APGcIfSlzb/6EY8SHD2gHWNQNj1g+NiwyJBWOymXRGv0jjYFOI +0e8W/VCKtHSFDJUwh2X1AAq47vB9FXwLM19vtRdM1+o14zHe8vmFa3y4D2AMVL/+ARDW5zQO +odq/1zPhtzNKS2dMLy2dvvXgocdaDx7q3FRUWjJjRqmT3NLaeXtrxNbDh7Ztaz/Ird/406XN +zUuXNTeeOXTovfcOHX6PczQv/enGjT9d0tL4t/8Rje8deumP7x0+eEa1C18dTkQv2uN4ahcE +gpZqGQSeQ6bEKIPw+FlEi21IELDGV2u7afrbn6elBlGCyCAykZ8o3E7uJ8uIRkQaTsvrRBsO +4IIBPQ2CDDiAi+fjhVhR1o5EqWDMY/gxwghxEsrEmVw2ny1MFGehIrGMq+ArhIVoHp7HNfAN +Qr24WPsw2iTGgz9Eqt+icpO73jiJT+M//q7rmHDqSj/+88uD1Ror3gDyEZT4InqWw6GI5+mG +mrtzu3oux3Zjsrf4u07YJoisaPvW228Lp4AM0Nl/9awQD3QsyG4P1HIWPRKaTWt0aIlVGyqN +BLLp1h6y1Bw6Oju6Y1kag98R/uv8t/kTSrk7u8AZGc7v+4/vfe3VvceVD5RPlU+UD4RTnfUX +T568SFZ33qmcgRPzIBzDzleQ37aDD+tVfEXaDX669v62NX5tIZuCkNU6sb9BhMTcc7ry4qs3 ++uCr3gepXgesOBvkYPKJ7yzV9bOeE9ao9nYuyQunuPxe5yvnLuCGY9+LnO5Vz2y2oma1nhnk +l0qCbOb+rFDdq57p/eoY3uPUMgZ7J3FnlC5MzpzBWLl6Bg6XC5SVyhvK60oTbhBylDbQzadK +G56Eg3EInrRduUPZSqsveDsuod/MUQxw9T2liNXo9cgPTbCH6jkNMr1s0DQJL6HDhufMWrMg +TjNirQFlmVnF/lyatacmxg7Qdr3ZYrfkWYotNRa1eB8gen9/ohbxn/xF1i0VOaySv+b3R7Y4 +HhEHfs7wB9gav5bVc/zRKHt/3GymJR2rWdJyPK3ojLPQkg4rIPjK9uyXSXa9ny3CNs52t+1Z +m8AQsIp3YyPpz1z4wRDs8AZl7ebNa5WR+M0rVDtXlLeFpK5fP9S04qGdZ997/+OuXaqt86th +fT2tJonNPNeMlmib+Z9LAtZpCFi+QY3nR6llsGiVvD/CCJ7K6pXe6y2yryuYO9aVxn3TOZaW +I7N2d51Vfw81Gug3AB7Q4/H2LMEiakTeQngN/RB4zGGIHHCss8BIyaKTMP3QSwB+dBY4EGZI +Gh7zWsDYnLcFkNjggwR+3vMdOwr6UJAXHIjq76eOWnxnvpsd+a5H4Q9LPC8F8zZpgHQrf4s0 +nZ+hmSmVSfPwQn6epk5ayy+VHuG38Zs0D0kPSjvx0/yz/A7Nk1KrFCoRXoAzrj6Y2ASbLlgf +TwYIsbpBetk4CqeREcJQDf3NSLIxm2QJmbrJertxFkXr3CwyA3L+LMj5RbpZ+jyj27gANxof +xRs1e/B2zT7jr40fGK8ak+hXBhz94Qf7DQjvVO7Bu08rB5WDp/HzSu1pHI/j+eKuD7pewW3K +JG4yF6jci9fBHlxtUcpYPNOjDLu/nkOaZmEfWmIAFJSG1R3uE9vOqd/jdtIgxGKc0W7MMxYb +1xm3GVmMM/ts+623T5ydOm5FNQS8DcpXl3a3qPV1dDWD28/i5xB7AAqGXeaCCSIZ3Da0hOcQ +JklH2RLX4VTIX5x2d9c3u4VTf6tScw2td6YCLR1qsIdrLJQWNaIMDUe/3hJErOFC+eEaEENS +v9lK8254Wi/gwQBHhJ7ml+Th3EjNJG6ipoIr0yzmNHC+gtwSLMIZSpyBZ4ouXCE2iMvxA2Iz +3ixu05sZ7qUHzEj2NZWZazmqXOyaexTyRQT/0eXB/EdXIrx+NBf4FFCs3UCdiMehZBTi6e+q +aFQ9By6rS9bkaRaTxTzPQgR1nLe5/+q8G9R3ardX1rnst4pf2gfeHG+hZ31wC6TuC7dSbgq3 +4BAB0j8UwGGe0wHiGigM1I7ghgtDtRO5LMD907k53DxAXstoJUC7kXtUe56ziYQirxASpBEk +QF/9CcVegzTD+eHCcHGYJtmQTtjvniiaNZTAeaFcmKOZL9QYVpPVws8Ala0zbCaPiY9pDpBf +aF4nr2v+i/xe8xn5nP9M+JP4NflG+JuYQBHavRSi0a8DqYrf5rZiviuEBCt/7UqFXNq1ipvf +NanzLPfrrlsQ+06D6rrDWwOX0Xh7dBBqlnTN1iW4Wfp5hEWv5fyDIgRkCg0UgkITdSjUykeq +AfRd9nvCtO5Ylpa83y9K/amKGj67GxBHe32pEYk34AlPPvbYk8phPHjj+vUbFT3Hn7+8+L7m +HcrFK12fcW91vd+0es1yrkwZ6669t2bnkedWPREgH3/4zT96a/aFwK8/5ODn7MN0Wg2RRIiC +RLDwPMkQeWQjvK1ZF9BsXKLnBZFYgOdAkyAFBfGWcQFSqIFn+bnzKGXfogowhqYBa5q1z5HH ++7vQ/fZw9jXlQn8sIAELnEg0rIYQwAWSfjytPMVyA0icOEAzQDtAJ4cPx8O5LJzFlQv1fL0w +33+luFJDK0ARs9lPK/v5R5NETHOKJVKmaulON2Rt+qKxJ07/cvLqBWfexm9i1Lmsa5XyUHPz +Q9zhwAd/opTjxpaSrlXCqd//Ye1BblrXhaZly5azGIG4woV3zP5V291+Y/6CIrTs9+nHn964 +1vdbdYhaRZqdkJUR0vb8gB0hTZUS1vsn7df8xH0sfwKVcatB4/3QR3C1wLUFLif0bdV8jibw +HehefjByk2g0AvrXwbVLCEBNZDI6KLQgD38eLeLS0Cv0Es+jt4QGBCc/eB6B9sG1nTuLnHC/ +Fa7VcC0Buu+J8egtvgzdK1iBBr0CoB2ADvKfoHu536IkcTUqon38YXSr5jgbs5dPRTPpPf8E +OqjZDONhHe5OWO89tJ/OFXOQh0u7+h5/EvpMQP8wGs3debWF2w+ydcJ9PfSPg+t+uNZRG0NR +tBKD/oBz8G78BredmMjLpJMv5/cKg4QSYa84QSwRH4DcukLzphZpE7QZ2id0Bt083QO6t6VA +KV/6mfSVPkO/Uf+h4SvjWONvTCmmOtMf/Y6YR5rfsYwBbPOE5YJ1qLXWut/6sf92/zMBXEBR +wAKbwea0XfDuxFg0FAkIeb+tf4TuHG/jAuGT/q4/GI/t3q+Hu/cOQ1562NvmYNyT3jaB/qe8 +bR7a+71tARnQS962CLHyLW+bRoOT3rYehaFz3rbR+hj2/UsQExrqv9XbNiO9/++8bQvi/d+H +FTGvA4aS/T/ytjEKtFm8bQ5pbXHeNoH+JG+bh3amty2g/rY7vG0RBdg83rYWRdmavG09GmV7 +2ts2xo6ynfW2Tah8dJi3bUaBo5d72xakHf3oeHdNQ23FnPI6eWBpvJySnJwqlzTIGRV1nrpa +l6MqQc6uLk2U0ysr5Xw6yiPnuzyu2nkuZ6J03dThdGqhY17VXHf1HDnDUX6TiRNccx1F9XJp +uaN6jssjO2pdckW1XFNfUllRKjvdVY6Kat+YAke1J8PtvqfXba9mkavWU+GullMSU1PV7l4D +ytzVsGodCFFeV1czKinJCf3z6hM97vraUleZu3aOK7HaVZfFhlEeqBTdgssDPS6XXOKqdM+P +T5S/A8eJ8sTKhppyj1xRVeOurXM55bJad5WcXuua52XFtwbTUL2qod7LSFLP6iCZQ1ZZ61az +NORb/0jXb8h33kv5mpUrPJJDrqt1OF1Vjtp7ZHfZtVQkKc9VW1XhYeqv8MjlrloXrDWn1lEN +oieA7CAWTAONgZ4T5Dq37KhukGtgw2CCu6QONFYBKnDIpcC0BCPryl0+PZWWuqtqYDgdUFcO +1EHLrmoPaC+KqSQqHog5ZYfH4y6tcMB6ktNdWl/lqq5z1FF+yioqYZMGUopsglzgLqubD+qP +imec1Lpqat3O+lIXI+OsAMEqSurrXJQHqc+EBNjm0sp6J+VkfkVdubu+DpipqvAuRFeoVVUJ +ZOs9MJ6KkyBXuajUEjMQT3lCrzUS6JpJ7lrZ44J9gNEVwKpX/GuWpswB2Rqq6DpJVR1baH45 +GNZ1E+g2lNXXVsOCLjbR6ZY97gTZU18y11VaR3uofGXuSjA2KlCpu9pZQeXwjJKkQiDnKHHP +czEJVCtiDHQbQbW7DrbBo/bSXanpsQD1mewpd1RWSiUur9aADfASRx853dVgF7VylbvWdUOx +5bqGGleZAxZKVJnq+7TK0QDeAtOdFWUV1NAclXVgetAAog6nk0muqo46qKMW+KqvdNRKdCGn +y1Mxp5qxMUf1VZhELdRRCkQ8dIaPH8+1K1GSEizAFOaovDEB7xwfHz3UgL3qyga5opeZS1Sc +Whf914dsLG14qCLpvvjcwwU256plk+a7a50eOarbD6Po2r4HUhR12yimMtiZHK+/lLjAkyjV +etgDqpN57opuxlwL6sBjZEdNDbiXo6TSRR+osgNl2pB6NqXcUSeXOzxA0VXdRyfU6nqs2ynX +Vzu9DPewKjHmVAm/bVc97krq1Wzb6CY55EoaPcBXfANrHKX3OOaAYOCH1W6Jmuo/ZlR9loKA +BSy6KssoU5My5axpuYVywbSswhnp+ZlydoGclz+tKHtC5gQ5Kr0A7qMS5BnZhZOmTS+UYUR+ +em7hLHlalpyeO0uekp07IUHOnJmXn1lQIE3Ll7On5uVkZ0Jfdu74nOkTsnMnyhkwL3daoZyT +PTW7EIgWTmNTvaSyMwsosamZ+eMnwW16RnZOduGsBCkruzAXaAJz+XK6nJeeX5g9fnpOer6c +Nz0/b1pBJtCYAGRzs3Oz8mGVzKmZIAQQGj8tb1Z+9sRJhQkwqRA6E6TC/PQJmVPT86ckyEBs +GoicL7MhicAl0JAzi+jkgknpOTlyRnZhQWF+ZvpUOpZqZ2LutKmZUta06bkT0guzp+XKGZkg +SnpGTqbKG4gyPic9e2qCPCF9avpEKo5vETpMFadHHRKdMDEzNzM/PSdBLsjLHJ9NG6DH7PzM +8YVsJOgeNJHD2B0/Lbcg87bp0AHjfEskSDMmZbIlQIB0+DueccbEzwVxKZ3CafmF3azMyC7I +TJDT87ML6I5k5U8Ddul+TstiFjAd9Ek3L9fLL90j2ne9dcAoOtsr4ITM9BwgWEDZgA6pz1iw +rswFpa6aOmrbXudWQyMLo2rsTGBWqwYBMOGJ1eC4ah9rQloCz2JZR41uPQmbpuMENfSy8AHW +DZlIDb3OeS6IgB4aSty1kpsGk/kVHubpkAKr3GrOkz2OSlgMZlEvYqMgVjoqYZqnm80+DiX5 +kmFNbQVMmV9bUQfBRHbUQ29txUJvGq71pikmgdwjAV2lJzio/Ne6PDWQpSrmuSobEmFsLc1l +jJOKasBqVV7RmfpK60b5oEKdPIcRd7rrJEB0ibIkMcT1g6HTd8WyPw4OklQcJH8fHCT14CD5 +e+Ig6Xoc5A3ypYySx5czbgBQewCL9EOwkuzDStJ/BlaS1H34p2ElSXXYH4SVpB8RK0k9WEn+ +nlhJ6oMLvgdWkm6GleTvjpWkXlipt/v2gUuQzyFI/FhwSfLCJfkHwSWpD7vs3PhjQyap2i3/ +YMgk/aiQSfJCJvn7QybpWsgkfx/IJN0QMsn/CGSSCtOLpk6eRtlOn/S90JHUI/kPQUeSDx3J +PwQdSb3Rkfy90JF0Q3Qk/xB0RI21j6N0Ax/ppsBH/geAj/TtwEf+DsBHYsCnL3b4+4Cmzjfe +zkCDlAgfid9auUqaX3FPRVIFRJAFiTXlNUneMHZN5QyNR25UgxpQLapAc1A5qkMyGohKUTx8 +pqBkeKVCqwRGyCgDxtQhD1y1yIUcqAolQG82qobxidBKR5XwklF+Ny0Pu3PBpwvmzIN3J4yU +vsOqw7tXLYSV5sFa9L8gqYbRlA8HzPnHVpwArbkwrwjVw4hSGOtg1FxshoNJJAOVanivgTEl +QLcCxskw3w2rO9iza+kUMCoe4MgNr3tu8vTGvUWMQw/QdbNVU4DPVHj1Hn1jCmVshiprnXcn +qOx1wPkolAQvp3f8PBifCOPc8FkL0rjY3FomdyLQcMGcrF7UfHrw7cX1O06fUd262P64QEtu +NB/G0t34cXRMKU2EJw0wppzNrIBnNYzvOrafVAO1bAa1AEp13jVauVaOHhuq72NDN5OG/gcP +N5Jd3TMHtHpr7XprltCQH/CSvpOH/Ph+eeP97pG5Ap5IrFXHeqiVVTFd3wN9btiBv8cLlSyP +0ati1Hqsv4LxVM6eubxyzWGrVHt3PcG77+puqaupNqbacwLjy812v5rNr/F6mLqCG6jWeW2s +wmsFDkZD1bTkpVnHuLjWnkrZOGqHKnUfBTpa5V21ZRfzV9X2onpZSRTbOTrXyT49jK9SmOPw +yicxLygFC61iVOrYE59+yqBV6fWkgd089qxA4wrlvw7sV7V+umKPTmhPDfMaJ6xQymb7uHEy +CeqYrZXA0zr2VF1D+pYVErzeXAqc1TMqqk7mMxsoZ1GnzquZKtbXWyKfDLV9rFLltp7pMKHX +7tB2FdtPda+lXhHEA7MTbiJHQrecSSyCyIyy6g8q7QqvVvvu/rdL7dOcym1Nt0XXMb56rK5H +ovlMH1XfaQWfN5SxqF3tldDVa0Une6drJLBPqom5MKKU0VPH+PaP2nGlN7L5dqiUre1kHFd4 +OR3FvLPQy50DKLpZZOjZg96xqEcD10eCahhf5/UGT5+xPl/p0VjvGNB7nsxkdjDOJRab+9qa +qg01lzi+ZT/dLMvJ3r2vYp898eO77EUdy0Q0czq8EiX20dS3zaU6afDmFnV1qvMyxqPTa0mV +zE5ru3tUTqlOnb32vLfV+TKog2XEChYzKtmd1C2Rk3FK96u6lzbm9Mmr6kq+GOpg1qParm+N +a/Xj+bsy+biUvBL0WJiD7dF356DvOtfq40a8JXj3u5LNq7hJNJe6d6eWxVkHiys9dH09nm6L +9PnLtdnD5Y1zLiaFb6X5TConmx91g3wY1S33tTMkeObLtlG9rEz1mZxr8ksJ83d3L17rvX7g +s5N58LTiBhpzoQVMz9VeT66Bl5q9HCyiurpn9N53lWdfj3RDTylnEV5mnx4vjy5mSTezE1+s +u1HsdrJMUM32vbe+bqRVqZfmeu/h9/VVD4uavlzd420+T6LIobIbe9R6Z/SlWMMs+h54n+Pd +MTUfUquSuqPqPzNS3VyqEq+P1HnzYVm3piahTLbONJQLd3SdaXBXiGYAjsxnz7KhTwYclw9P +iuBuAvROYPuSzp7Q51HMG2dAm1KchqYzWiqNfHintGdBD6Uts3t6NwXG5wItOjcTzWRrZAK1 +AuBsGrQp7anQmwOfmd5xdMZ46JkO97Q9EVEUqq6XC7MKme/QeZQXldNC6O9ZtS9X2WxFH2dT +4S4f6E/yPk0H2tmMHuU/geEj2s718qlqLp9RpzqilCnN8cBRDrujvdPhMw/GFTB9pjOZVW5z +mQxZ8FyVJZNxoO6EytF4+MyDtemIicBXIdMCXanQOzKB7SOVZwKbT1edwkapnE3z7jJt91BJ +9OpS5YPqv6h75QImfw68ZCZ/IfQUsr1JB/o+uj7bmcgoUL4lpo3pTL50podpbIUMNo5qkeoz +p9vi8nvtynimL7pvlPMJbKV0ppGCG0rio9Z7d25kHVL3ChOZfJlMUzlsdAHoMRPGZ3f3qPaY +zWQd79W1SlO1e9UmcnppdzyTke7sbbBqptem0pnu+kpB92kG479HCnUH0r3v43vprGf3c727 +6+OnkK1ceAOtzGC+mMlGpbO9Luj2kSzmv1O9nE/vtrCeGDDda5/Tujnrq1+fH/nGfZfYodLy +rd13Bycwe8rxcljQrQ11hPQtdNXYlQl5rZSdc+q643bfzN0bNfag0d64M6FXrO2NBNQoPJGN +rbpmXE+velpSc1bPWac3drvRCdt3OlaxvA/19qAPNXarZ6LeqNfJ8LmKAT3dqMTNcKC7G5nM +Z097cnqNt3bi7nPOoys7WO5P6F7Ll4t6aKm40sHQAl3NcwNt3jxDSdedDGtYvldXmc/adV5k +QuWr946l/QuvOQ376j/X74F8wz3wyXIj5NBb/7Vsv2u8Z6kKpmGKJxO9dGuR71zWoxOqAbWu +VnXNrvdYH6U2Cl1bVaA6mNOLcyfTtYTUGh1dU2Lxylfj+vdXnX7suux/Uj1I6lMPuhZ5/fPq +QdIN60Hyv7geJH2nelBfJF/ai6eeWodv5HeroN6owiL92+pK8nV1Jen/15V61ZV6Kgz/O+tK +Up8M+++rK0k3OK39J9SVpBvWlXok+tfUlaRvqRf8a+pKEvpH60o93zr9mHWlHn/rW1e6Wfa9 +eXVJPZ+rSOI/rbokob7VpRtXN/411SXpW7Qr99Lgf3aVSWI2dj2a+ddXmaT/4CqTdE2Vqees ++6+sMkl/t8ok/8uqTNI/UGWS/2lVJonpoAioTmbcqtpOh+f/utqRdMM9/3fVjqTrakfyv612 +JN20dtRTA/rn146kf6B29G10/7m1I19kvXlGub7iI32Pik/vKs2PWfGRflDF5/oz2/er+Ei9 +Kj7fVnf4MSo0ddfRt6OeSoPE1qF3iT/gN1dJTC/3wJXEeHMy1JTI8GsN9PVFY9/+mzP2b5bV +f7v+E3Q7usGfNm6x/eoVhVwOIH+LJd+kkK9byF9N5C8KuaSQ/4klX5nIf7eQi7HkywfShS8V +cqGF/LmFdFwmX1wmf1LI56PIZxnkvEI+TSGfnCsQPmkh52DguQJy9uMk4exl8nES+UghHyrk +gxTyfwLI+y3kjELes5I/3k9OHyJ/UMjvYfjv7yen3p0onLqfvDuRnPxdiHBSIb8LIb9VyG8U +8muF/EohJ1rIO8fDhXcUcjycvJ1C3lLIG8stwhuh5PVAclQhrynkVYW8opAjCvmlQl5WyEsK +OayQQwo5aCHtK2KFdoW0vXhIaFPIiwdmCy8eIi8u5g/8IlY4MNt+lRyw87+IJS8o5PkWsl8h +zylkn0KeVcheJ/m5iTyzJ1Z4xkn27LYKe2LJbit5Gph++jLZpZCnFLJTITusZLtCnnzCJDyZ +Qp4wkcedpBWGtLaQbQrZ+phB2KqQxwxky6NBwhYneXSzWXg0iGw2k0ck8rBCNrUYhU0KaTGS +ZpjU3EI2bjAJGweSDSby0GWy/sFDwnqFPLhutvDgIfLgYn7dz2KFdbPJOjv/s1iyViFrVicK +axSyOpE8AGI+kE5WrdQLqwLISj1pgo4mJ1kBmloRS5ZbyE8VsmypRVimkKUWskQhixXSqBD7 +1Z/cf7/wE4Xcfz+5z0kWFdqERbFkoUIaFLLAROYbyDyJ1Cuk7jLxXCa1l8m9l0mNQtwKqVZI +ZSS5RyFzLRnC3AJSoZDy+8kcuClTiEshToWUKqREIY5RpPgyuctAZivkDoXcrpBZMyVh1mUy +UyIzAoOEGSmkSCHTYeXpGaTQRgqwWSjoT/IDyG2T/YXbFJKnJ9MUkjvVLOQqZKqZ5ChkCjyZ +opDJ2WZhsj/JDjMK2WYyyUgmKiSrhWS2kAkKGc8NEcZfJhmHSPoUYlfIOIWMvdUqjA0gt47x +E261kjGjjcIY+1U/MtpIRikkTSEjRwQIIy+TEcPNwogAMnyYXhhuJsP0ZGg4STWSlFv0QopC +btGT5CS9kGwkSXqSOEQnJJrJEB1JSCGDB8UKg51kULxVGBRL4q1kYFysMDCdxMWSAbF6YYAf +idWTGIVEKyTKj0SCnJFWIjtJxGUSDiKEO0mYkYSCBkMVEnKZBGeQILgJUkh/J+kHmuqnkECY +FBhEbAoJUIi/QqwwwKoQC8hqySDm+4mfk5gUYjQECkaFGGC0IZDoFSKZiU4hWhimVYgmgIhO +wsNDHizARqCXKISDe24IwWaCFILbsHP5Wjz4f8Mf9O9m4Fv/hP1faARn5gplbmRzdHJlYW0K +ZW5kb2JqCgoxNyAwIG9iagoxNDYyNgplbmRvYmoKCjE4IDAgb2JqCjw8L1R5cGUvRm9udERl +c2NyaXB0b3IvRm9udE5hbWUvREFBQUFBK0RlamFWdVNhbnMKL0ZsYWdzIDQKL0ZvbnRCQm94 +Wy0xMDIwIC00MTUgMTY3OSAxMTY2XS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgOTI4Ci9EZXNj +ZW50IC0yMzUKL0NhcEhlaWdodCAxMTY2Ci9TdGVtViA4MAovRm9udEZpbGUyIDE2IDAgUgo+ +PgplbmRvYmoKCjE5IDAgb2JqCjw8L0xlbmd0aCA0ODYvRmlsdGVyL0ZsYXRlRGVjb2RlPj4K +c3RyZWFtCnicXZPNjpswFIX3PIWX08UI/IOZkaJImWQiZdEfNdMHIOCkSA0ghyzy9vW5x22l +LhJ9hnPN5wu33B52h3FYym9x6o5hUedh7GO4TffYBXUKl2EstFH90C15Jf/dtZ2LMtUeH7cl +XA/jeVqtivJ7undb4kM9bfrpFD4V5dfYhziMF/X0Y3tM6+N9nn+FaxgXVRXrterDOe3zuZ2/ +tNdQStXzoU+3h+XxnEr+BT4ec1BG1poq3dSH29x2IbbjJRSrqlqr1X6/LsLY/3fP55LTufvZ +xhTVKVpVplonNsJWgy3ZgB3ZgmuyA3vWbsGNcN2AX4R9DX4VbqR2Q5baN+7jwVuy1O64j+Tf +mReHvbDDdV1xf3hq+ns4aPr7VzD93Q5Mfyf57I/z6uz/Aqa/kVr6G6mlv8VZNP2t5LO/5Olv +3sH0dzijpr8XZ/p71Jrsj7zJ/ji7oX8DN0N/vwfT36NXhv6N5Onv8SxD/0Yyuf/wN7n/8De5 +/xsw/Rv4G/r7NzD9jeTpX8ueuf/IW/rXyNjsj3dk6e/gbLM/nmXpX+Nclv5OaunfoCeW/k7y +uf+yD/0demXp7/CuLf0dnC39nTjk78fIx5+/cowB5vTPeKnuHmMaLRlmmSlM0zCGv/M+TzOq +5PcbeW76GwplbmRzdHJlYW0KZW5kb2JqCgoyMCAwIG9iago8PC9UeXBlL0ZvbnQvU3VidHlw +ZS9UcnVlVHlwZS9CYXNlRm9udC9EQUFBQUErRGVqYVZ1U2FucwovRmlyc3RDaGFyIDAKL0xh +c3RDaGFyIDYxCi9XaWR0aHNbNjAwIDMxNyA2MzYgNjM2IDYzNiA2MzYgMzE3IDk4OCA2MTUg +NTIwIDM5MiA2MzYgNjM2IDYzNCA0MTEgNjk4CjYxMiAyNzcgMjc3IDg2MiA2ODQgNjM2IDM5 +MCAzOTAgMzYwIDYzNiA2MzYgNjM2IDMxNyA3NzAgNTQ5IDYzMwo2MzMgNjM0IDYzNCA2MTEg +MzUyIDgxNyA2MzQgNTkxIDk3NCA2MzMgNTI0IDU5MSA1NzkgOTUwIDY4NCAyOTQKNzMxIDYz +NCA3ODcgMjc3IDYwMyA2MzEgNTkxIDI5NCAzMzYgNzQ4IDU1NyA2NTUgNjg2IDY5NCBdCi9G +b250RGVzY3JpcHRvciAxOCAwIFIKL1RvVW5pY29kZSAxOSAwIFIKPj4KZW5kb2JqCgoyMSAw +IG9iago8PC9MZW5ndGggMjIgMCBSL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGgxIDI3MjQ0 +Pj4Kc3RyZWFtCnic7X0LeBTV2fA5c2ZmZ2cv2U2yuV8mgQUiIQnhZrjIBhJCICQxBAQBzSa7 +IcEku2Y3YEQE2npt+aRVEfACKEVExTTwKSAqKm0VVLAFW29FW7StRvTzp15iMvzvOTOb3UBQ +qtb2/54/w86cOZf3vPf3Pe+uj8HWNi8yo1WIIFdds9s/zKh+ihB6CSEcXbc0qBjH7vkc2u8g +xFXX+xc39/rQLIT40TDnkcVN7fVTE4/9FN5hPF1p8Lo98/Nn5SE0GIbR2AboKFNbDPB+MbwP +bmgOXvNJQsdr0FwI73uafHXu+zqnPIKQMxber2h2X+NfSyYL8B6Ed6XF3eyN/6jkMni/A6FJ +Vr8vELwcrT6DUO1WOu5v9foXbKrthveDCBkehD4MF/0zQ1Ok7xzhBdEgGWWT2WKNstmjY2Id +cfEJiUnJKalp6UpG5qDBziFDh2VdNDx7BPpf+Ifr8Shcj/ajv0N7ErofdZN0xMFVD730+Qiu +Rl0wXgszV/M34Gp4NvNbEQfjK/mXAQSHR6FadDW0nPxWvB/tQ+/B6tV4jTBduJzOZhtRWJ8J +z+NPhAKuAM3jm/lJfCe/mu+EGW18Pb8adcC9gHuVv4dfzh/hl6N5FDNcRj8UD7QRz8CD0EZu +Iy7CibiIexk9y/CfjDfiCcJh4TA6jo7jSpj5CFrGyfi3+FOci+fhTlj1GfoMp8PbGG4MPoX/ +ChivR6+SeYKMNqLbcDS87UcvA97voU9RgAeo6DbhODdcOI6eR++iP0A/QkswB/dUMkI4Dtcn +aDtaApx5F3PCcTHWkMHXc1+gLvxjbhv3BR6EObiicTpw8wryMl/D/5a/BUaBO6Byo0g6mQL3 +hXSGcBxvBCzeFetxO8yj13LYp4t7ntsDND6N3ga6YHduIbec24jexjvxPsAYoRvwTr7GUMsn +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 +L2y2VyV7VPKEgzweTf5bJbtVskslnfHkV4mkI448BnAe6yY74bGzmzwK8x9NJo/A45EV5GGV +7BhCHlLJdpU8qJJtKvmlTLaq5IH7rcIDKrnfSu538VuAUVu6yWZYsjmNbILHpm5yHxB/Xwq5 +VyX33P2kcI9K7t64SLj7SXL3Kn7jbU5h4yKy0cVvUMl60I71Krkrh6yDhevSXGfInbD0ToXc +YSa3Q9ftM8kv4PELlfwc+PDzOLLWRm5zkv9SyRqV/EwlP1XJrSq5RSU33+QUblbJTU5yo0pu +UMlP8smP15EfqWS1SlYlkpUyuV4lK1RynUqWd5Nru0m7SpYt3SYsU8nSbaQtmCy0dZNgMgl0 +k9YV5GqV+H3Zgi+btHST5m7S1E2uUskSlTSqpKHOLDTkk8Uqqc8nXo8seFXikYnHxdfVykKd +mdTKxF3jENzrSA22CzUOcqVMrlDJIpUshPeFKllwebKwQCWXw9vlyWS+SuZ1k8tUMhfeXWfm +qmSOSqrTyOxYUnVpolDVTS6FgUsTSWVFolDZTSrK7UJFIim3k1lppGxmrFDmIDNn2IWZsWRG +qVWYYSelVjK9m5RMixVKHGRaLCnuJkVTrUJRFJlqJVMKncKUblIIMAudxDU5SnCpZPIlVmFy +FLnESiZNtAiT4shEC5ngIeNVUhBLLlbJuBgydkySMNZJxoyOFcYkkTEH+NGyRRgdS0av4kfl +m4VRsWSUi883k5F524SRKskD+HnbSK6Z5MSQEdnjhRHdJNvhFLLHk+EecpGHZKlkmIMMjbcL +Q9PIEIU408jgQcCA4YPTyCA7yUQWIbObZESRDBevxJJ0maSlkdSURCHVSVKiYoSURJKyB3zG +z/lkC0lKnCkkrSCJsGniTJKgkng7iYPd4rqJA/ocThLrITF2Eq0SO7zbVWLzkCirTYiKIVEH +eKuNWFfxFhixdBNzPjEBaaY4YlrFyxYiu3ijSiSVGFQiCrIgqkSQieDi+W5CPISDVZwK3ssi +YDtBFoL3YM8Na/Dw/x1/6N+NwL/wLxX9X3o5MywKZW5kc3RyZWFtCmVuZG9iagoKMjIgMCBv +YmoKMTI0OTMKZW5kb2JqCgoyMyAwIG9iago8PC9UeXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnRO +YW1lL0NBQUFBQStEZWphVnVTYW5zLUJvbGQKL0ZsYWdzIDQKL0ZvbnRCQm94Wy0xMDY5IC00 +MTUgMTk3NCAxMTc0XS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgOTI4Ci9EZXNjZW50IC0yMzUK +L0NhcEhlaWdodCAxMTc0Ci9TdGVtViA4MAovRm9udEZpbGUyIDIxIDAgUgo+PgplbmRvYmoK +CjI0IDAgb2JqCjw8L0xlbmd0aCA0MjYvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnic +XZNNj9owEIbv+RU+bg+rxIMT70ooEguLxKEfKtsfEBJDI5UkMuHAv6/fedNW6gH0eDxjPx5N +8u1hdxj6Of8Wx/YYZnPuhy6G23iPbTCncOmHzIrp+nZeVvrfXpspy1Pt8XGbw/UwnMf1Osu/ +p73bHB/madONp/Apy7/GLsR+uJinH9tjWh/v0/QrXMMwmyKra9OFczrnczN9aa4h16rnQ5e2 ++/nxnEr+JXw8pmBE15Yq7diF29S0ITbDJWTroqjNer+vszB0/+25kiWnc/uziSnVptSiKKVO +LMrVK3hFXoEd+QVcki24UvZa6xl34BdlKcCvyk7zN8x5B7+RS/CW5+hdO8b34HfWanxPRtwW +zMG9lv7VBkx/DwdLf1+B6e9wl6W/V6Z/tQXTv8Rdlv7VDkx/j55Y+juN09/jjZb+gv5Y+gve +aOkvWkv/Em5Cf/cGpr/34KX/yvR3mk9/j/OF/g5vF/oLeiKLP94l9C/hJvQv4SCLP9yE/iv0 +TehfoVdCf+d1eJYpwRhhzv+Mp2nvMabR1I9BZxLT2A/h7/cyjROq9PcbJvPUpgplbmRzdHJl +YW0KZW5kb2JqCgoyNSAwIG9iago8PC9UeXBlL0ZvbnQvU3VidHlwZS9UcnVlVHlwZS9CYXNl +Rm9udC9DQUFBQUErRGVqYVZ1U2Fucy1Cb2xkCi9GaXJzdENoYXIgMAovTGFzdENoYXIgNDUK +L1dpZHRoc1s2MDAgNzcwIDM0MiA1OTIgNzExIDY3NCA0OTMgNzE1IDM0OCA3NzMgNzExIDY3 +OCA1OTUgNjg3IDczMyA4NTAKNzE1IDM0MiA0NzggNjUxIDY4MyA3MTEgMzQyIDcyMCAxMDQx +IDY1MSA5OTUgNzE1IDQ1NyAzNzkgNDU3IDY4Mgo3NzQgOTIzIDcxNSA4MzAgNjQ1IDc2MiAz +NjUgODEyIDczMiA3MjQgODM2IDM5OSA0MzUgODIwIF0KL0ZvbnREZXNjcmlwdG9yIDIzIDAg +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 +KUZL9UuJ2HFPB9EtwtlmA80yJ9NMcyHNMJtoutlCHWY7dTnLqdNcTF+0VlJrQhVNsBZTq1n6 +0XghNYG6RrOVGiD1mbFonlmer9NmOBCHNScCDvVzAYfyeMAhQGLHAw76q4CDORpwkKcDDnw4 +4EBPBRwnnstwHD+W4fiV2DTucjx91OV46rDL8dyJ5zXHjj+rGf/Vr9VHn35GffipI2r9+OZx +Ih7dfJToDvsP1x0ePUx1hz0g9oJ47PDvDk8e5pVCAVVrCEuJ9Cs9ROpZfARPbtm50za2L9DQ +PLbZ1nKER4EFzWN4DO9qGeMD86MiypQ+A4MDA5lX+IwxlWNcZXfHGOeuGJAutNKF1l0BwphO +knXuikw8Zq7sHjOD9B8vGTj/yRyI3oxUJB/Q+ivVKekyCMfM/wP6LW6UCmVuZHN0cmVhbQpl +bmRvYmoKCjI3IDAgb2JqCjEwMzExCmVuZG9iagoKMjggMCBvYmoKPDwvVHlwZS9Gb250RGVz +Y3JpcHRvci9Gb250TmFtZS9HQUFBQUErVmVyZGFuYQovRmxhZ3MgNAovRm9udEJCb3hbLTQ5 +IC0yMDYgMTQ0NSAxMDAwXS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgMTAwNQovRGVzY2VudCAt +MjA5Ci9DYXBIZWlnaHQgMTAwMAovU3RlbVYgODAKL0ZvbnRGaWxlMiAyNiAwIFIKPj4KZW5k +b2JqCgoyOSAwIG9iago8PC9MZW5ndGggNDc0L0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVh +bQp4nF2TTY+bMBCG7/wKH7eHFdjGdlaKkLLJRsqhH2q2P4CAk0XaACLkkH9fv/PSVuoh0cN4 +PDxjPPn2sDv03Zz/mIbmGGd17vp2irfhPjVRneKl6zNtVNs18/Ik/821HrM87T0+bnO8Hvrz +sF5n+c+0dpunh3ratMMpfsny71Mbp66/qKdf22N6Pt7H8TNeYz+rIqsq1cZzqvO1Hr/V15jL +rudDm5a7+fGctvxLeH+MURl51lRphjbexrqJU91fYrYuikqt9/sqi33735oL3HI6Nx/1lFJ1 +Si0K66vEhmzAVti8gUvGV2BHLsCe7MCBHMArsgW/CJfCG9bcgl/JUmdLfgXvmL8Bv5E1eC/s +4KkLxuGm6V/CQdPflWD6O7xX09/hXZr+JXrU9A8Sp394AdM/SB36e/Su6e/3YPp7caB/KXH6 +O6m/+KNfTf9yl9jQ38PN0N/D39A/SHzxR++G/h5na+gfUN/Q30mc/l7i9Pd4r1nOH/5m8UeP +ZvFHj4b+QerQ30g+/a3k09+gR0t/hxy7nD9yLP2NMP0D+rKLP76vpb9HX5b+Hmdil/PH97X0 +d7KX/mEll3m5tbjWmLs/46Ka+zSlUZHhlBnBdHR9/Du/4zBil/x+A9ck8I0KZW5kc3RyZWFt +CmVuZG9iagoKMzAgMCBvYmoKPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZv +bnQvR0FBQUFBK1ZlcmRhbmEKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciA1NwovV2lkdGhzWzEw +MDAgNjM1IDYzNSAzNjMgNjM1IDYzNSA2MzUgNjM1IDYzNSA2OTggMzYzIDM1MSA4MTggNDU0 +IDY4MyA2ODMKNzQ4IDYzMiA2MTYgNjgzIDYwMyA2ODUgNjIzIDU5MSAzOTQgNjMyIDYwNiA2 +MzIgNzg3IDY5NSA1NTYgODQyCjUyMCA1OTUgNTIwIDc4NyA2MjMgNDI2IDk4OCA2MjMgMjc0 +IDc1MSAyNzQgNjIzIDgxOCA0NTQgNjM1IDQ1NAo2ODUgNDIwIDQ1NCA2MzIgNTkxIDYwMCA5 +NzIgNTkxIDczMSA1OTEgXQovRm9udERlc2NyaXB0b3IgMjggMCBSCi9Ub1VuaWNvZGUgMjkg +MCBSCj4+CmVuZG9iagoKMzEgMCBvYmoKPDwvTGVuZ3RoIDMyIDAgUi9GaWx0ZXIvRmxhdGVE +ZWNvZGUvTGVuZ3RoMSAyMDA2ND4+CnN0cmVhbQp4nO18e3xU1bXw2vuceWSSSWZC3plkTphk +eEwekAQDIZIJeSDG8ErAhBLJZHKSGZjJhJlJQtRqrCI1olJbaaWt+Ba1rUNAb0D7ge8WH9D6 +aLUqaLHqbSm0n9rrg8xde5+Tl6DXe7/vj+/3+5iTtffae6+99nrtdfY5DBMO9soQB4MggNPt +d/VMN8bqAeBFAJLo7gtLt70VfhPx4wDaOZ09Xf5L755tBtCbADSRLt9A5w3XxF4OYDyEfX/3 +yK6OVc75CQApEeRxgQc7Wka/p8P2h9jO9fjDm09r+uwAqXHYnukLuF236j4xYLsU2yl+1+ae +JkO3iO1LsC11u/zyiudfugHbPgDH73oCofAOmB0FqHay8Z6g3PPzgTsysN0GYDiDfQQv9kH+ +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 +NyAxMDM3XS9JdGFsaWNBbmdsZSAwCi9Bc2NlbnQgOTA1Ci9EZXNjZW50IC0yMTEKL0NhcEhl +aWdodCAxMDM3Ci9TdGVtViA4MAovRm9udEZpbGUyIDMxIDAgUgo+PgplbmRvYmoKCjM0IDAg +b2JqCjw8L0xlbmd0aCAyNjUvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnicXZDLbsMg +EEX3fAXLdBGBHSdpJAupcmTJiz5Utx+AYewg1YAwXvjvyyNtpS5AZ2buhZkhTXfttPLkzRnR +g8ej0tLBYlYnAA8wKY2KEksl/D1Kt5i5RSR4+23xMHd6NHWNyHuoLd5tePckzQAPiLw6CU7p +Ce8+mz7E/WrtF8ygPaaIMSxhDO88c/vCZyDJte9kKCu/7YPlT/CxWcBliovcijASFssFOK4n +QDWlDNdtyxBo+a92yY5hFDfugrIISkpLygKXiatD5EPiUxu5ynyNfEx8TvpTzjeRz5mPkR+z +pop8yfkq9XL/NXYV1/YzLRarc2HStNs0YhxOafhdvzU2utL5BqsMgBYKZW5kc3RyZWFtCmVu +ZG9iagoKMzUgMCBvYmoKPDwvVHlwZS9Gb250L1N1YnR5cGUvVHJ1ZVR5cGUvQmFzZUZvbnQv +RkFBQUFBK0FyaWFsTVQKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciA5Ci9XaWR0aHNbNzUwIDI3 +NyA3MjIgNTU2IDgzMyA1NTYgMjIyIDU1NiAyNzcgNTU2IF0KL0ZvbnREZXNjcmlwdG9yIDMz +IDAgUgovVG9Vbmljb2RlIDM0IDAgUgo+PgplbmRvYmoKCjM2IDAgb2JqCjw8L0xlbmd0aCAz +NyAwIFIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgMjkwOD4+CnN0cmVhbQp4nO1WWW8b +VRQ+d8Zjp6VLtpYUF3qHKVDIOIsDiEopmCRO4oQmwXbKGCLBxL1xph2PjZdAKpUCAlossYlV +bAKEhBBCugliEZVQUeGBTYitCFokxEtf2gdAPICoy7njyaISiT/AWDP3O+d853zn3HhuXCqU +GayBu0GGSDpr5psJAbw+ByCN6ZkSndj4sIL4Z/SNTeUz2W+3zZ8EkDrwZhl7durPwxdJAL5n +MP78NDN3nxw42g6gXIn21dPouPfMTQG0bbS3TmdLd35Ptteh/SjadXYubeowglAR+f6seWe+ +Wd6MDSgvoU0dM8sOf3y8ivYRvGP5XLHUDHvOApy3RsTzBZZvaf3tTbR1tNvwJuC2jxMB8bv2 +/9cT8Bg8CG9CDF6BFLTDlaBDGG6DG0GDPugBFT6Ej+ErOAqvwgPwFNwDz8FLwOE1iMABuI88 +D5vkY8p1yutwi9LAQefQNMyvGDP40EyKg3ZdC/e3GjtSrm9/in7LSVNbS4gTnf7I17SGuKQP +x42ollJDXNatFsojY4bKI6kQ9+kiVdXUfcZPwS9SQeQZZ4KnU0FN5UqrwftnUm4glcJ6ir52 +4uYQ9+tzF5NDqE4PTUwEOWCZgD631XVFFl11emMD3d4e4qt0ul+IfIRlKJcviWmU+y4d4jBm +VFjFpAJcE1TVVLDiWvGaJQRX17qrD9arWPE8nX7tjrNGp+080DphUDqg9Zt7qEF3T9ZKCN5a +oYzStEIHKv2mVqEVzZXTRHEeQSbOJxw8woSBOetcpR3HWlQ1SI9VcBswKYbdjHu9qS5tva7R +Y564Ro3hRFDlJGVUcKCYVtFoJVbRTJFQSxFLiNeLP0Mj9t0gBhCg8ZwBKmLRzD23LZ9EpDbp +OETloNi2od1aJcDpmNEdPIKRZv0tiJBITw8Zfq8e0uA+BXncEM+4oU1i91pPEBei9eDOR+LG +PFDoTffME0pw4TTNN7HNC1obdI5e3Bd8hMS3VsLvJki7lXE8mQLQNkegvXs+4Ft/OjznV050 +z8sSQpiThVsR7vmA/7K/u+eJ8Hc1qA2XqA1qn0SrW8kz1Wll/K83+nxfgDgRHoe/lapfhXVo +nO+XJdkfkC67uivcBMpx7dezpx7J3XTwLTaZvIPc5Ve73q2+Xf20+l2sn7w/WKyelO6H2qky +1dX1+65Hfrh1ffcfsKXOfdE+C33y5PIXz1XBcw5nqV2YF9h15sAyyrnnkySdgj7/TuwRoHY0 +Encv1ns1JLQl2Cjc8kLuxeTFxToHFmsSWI0W8bICeALUsIz+Rz3sQ/yshxVYi+9/DfvRP1fD ++GiBwx4msAq+8bAEDXDCwzLUw2kXE5d/xsPIJxs8LMEWcpGHZWgkO2qT4UMlox4W/LyHJTif +zHpYhgZS61kMvYG87GECdeQdD2M/5AMPy9BEvnSxDx+byS8eFvWrHpagUQp4WIbN0ibcGeJb +hXZVusrDBJrlLg9LsE4e8LCM/nEP+xBbHlbgAnm/h/3of3pb+nIa7ujYThNlh+600oVccbZY +YtkijTnpttXJwWg8SvtGowk6MpqkUSOWSNJaTmcnHSrbFnPoiDnJSqvH4tHeaB8Su0PXLmUk +xnt7o9G+pZxR25qxWIEOmradK43mmZOYzU7m7DjLlG2zsORYQrtYoWjlHNrZEW4LL7mvt22a +nM3nMgUzP22laT8zS+UCK95gZWrAI7DFSG8um8U6i4T+nJMuYeUiLS3Wub28rEIyVy6xIp36 +Lx4dL5aZbbuSbIE0ZRXT07g9O5/N2FZ6ei+zSsxZSHFc5vXl4j6GMafsZIpmAeMjuULWxMgi +r7/s7ENpiyYtryoWvYHVoslyqcQo0hdYCwGat16gOG7Zsf7dEt3LnCwr7D23GySxxdAAyzLm +IN3M55lt7dm7rCfYhifq5XhYhqEDP9sRJaAMDq47wcJYAXJQhFm8S8AgiyvFf+4ORtrwxU3C +IEQhjjfFI3QU1wSiEURJXKNgIDfh4uU6nfihMIQ6NmowV20ETJhEXMKqY27FXrz7vIrdEIJr +V9RIwDgyBVewV9IZdVVmXKUC2oOoZOMnh1qjkHf1EzhhFvVz6I+jJ+P2ZiJ/JcZKvl1u9SKq +5Nx5OlE/jHsUXpHtno3udTYDzf/+GQXwHjl7PycPwTCvGzPmCHk4NdcvfiHwevzx0xxHcHfq +QvxPPmGkeHMrwD8BVWMeCmVuZHN0cmVhbQplbmRvYmoKCjM3IDAgb2JqCjE2NDIKZW5kb2Jq +CgozOCAwIG9iago8PC9UeXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1lL0VBQUFBQStPcGVu +U3ltYm9sCi9GbGFncyA0Ci9Gb250QkJveFstMTc5IC0zMTIgMTA4MiA5MTZdL0l0YWxpY0Fu +Z2xlIDAKL0FzY2VudCA3OTkKL0Rlc2NlbnQgLTIwMAovQ2FwSGVpZ2h0IDkxNgovU3RlbVYg +ODAKL0ZvbnRGaWxlMiAzNiAwIFIKPj4KZW5kb2JqCgozOSAwIG9iago8PC9MZW5ndGggMjIx +L0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nF2QwW7DIBBE73zFHpNDBI6Um2WpShXJ +h6RV3X4AhrWDFC9ojQ/++wB1W6kHkIaZB7PIc/vakovynb3pMMLgyDLOfmGD0OPoSFRHsM7E +TZXdTDoImdhunSNOLQ2+roX8SN4ceYXdi/U97oV8Y4vsaITd17lLultCeOCEFEGJpgGLQ7rn +qsNNTygLdWhtsl1cDwn5C3yuAeFYdPVdxXiLc9AGWdOIolaqgfpyaQSS/edtRD+Yu+aUrHJS +nVTJbqeZymP9tAGzMKcmZfZSIT/uCH+/J/iQqbKehPFtjgplbmRzdHJlYW0KZW5kb2JqCgo0 +MCAwIG9iago8PC9UeXBlL0ZvbnQvU3VidHlwZS9UcnVlVHlwZS9CYXNlRm9udC9FQUFBQUEr +T3BlblN5bWJvbAovRmlyc3RDaGFyIDAKL0xhc3RDaGFyIDEKL1dpZHRoc1szNjUgNzg3IF0K +L0ZvbnREZXNjcmlwdG9yIDM4IDAgUgovVG9Vbmljb2RlIDM5IDAgUgo+PgplbmRvYmoKCjQx +IDAgb2JqCjw8L0xlbmd0aCA0MiAwIFIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgMjk0 +MTI+PgpzdHJlYW0KeJztvXl8m8W1MDwzz6J9tazFS/TIsuVF3uLIsZ2Y+HFiOwSTxFmxARMr +thwLvMWWs1BIzBowW1IggUIblxZIgRLFDsEJpJilUNpLSaGlQNtL2oYGKLmkLdstsfSdGT1e +Ailv732/P77f90PKPHNm5pyZM+ecOXNmpMiRvoEQ0qNBxCG5tSvYe8uumwcRQv+BELa2bopI +f//2sUyAjyOkKm/v3dA1cBLVI6RxIiQs3tC5tT28dukzCBlbEPJe1REKthWsvdCI0OzfQx9z +O6CiN3atCqESG5QzO7oiW/5mfvw6KJdD+frOntbgR7f3Xwvlp6Fc0xXc0vua+aciQnOgiKTu +YFeoyXV6D5QlhIrKenv6I79FeXGE1jfS9t6+UG/OvcZ7obwFIXMn1GF405ceQJGWCccLokqt +0er0BqPJbLEm2ZLtDqcrJTUtfZZbQv9/fwlHUBpLD6M03ofSEIqfmEyxcPwEbaM5+QCElZ5I +ymsEPYZ+i3OwhEbxP5EDfY5deDZagnj0GVjLfjSB7kY2tBrtxlaUiexoDVqCecDxo1vxffFN +8ffReejb6IH4k/ja+CPQfgd6EX0OHPwnj1EZWgb4a1AIvc+9i5ri30FqtAPp0Hy0EttREL0B +70+AhzvRXegn+Kr45zCqDV0L/VWialQdfzZ+BuWhW/mdwpuaJ9Au9BQW463xMJqFMtAQ8cff +iL+DfKgJ/QA9Bjz58Th/PvKgK9AN6B7s4l4E6G70QxTDetLMLRLAgmFea1E32oyG0CPo59iK +G4Q3hdPxb8VPIhEloRzgKYzex6V4KXmQ18cXxN9Gl6DD6GcwX/oe5y/hHxYuiVXFvxt/DiWj +J7EWP42fFUqE2yeuiX8//jhYpA/NBoksg3HWo+vQs+hl9Df0d7I9vh2dj1bByD/F6VjCPpD4 +G8RFtpFt3OuoEGbbDNwOoL0oCho5gp5CR0E2v0PH0bvYhlPxBXg93oX/TvSkjbzK3ccd5H7N +Y/5HIG8vygIZRdCD6BCs51fQq1iA/otxA74c9+A9+Lv4OImSD8lnvJq/jv+CnxB8seOxL+LL +4p8gJ0pBF6Ir0XaQ7Q/QKDqIfol+g/6O/oE+xWZcjjvw93EUH8cfEg3JIMtJL9lNHiQ/5pZx +u7hn+VJ+IX8F/wr/tnCjcIsqqIqdeSh2Z+zHsV/Fn4z/CmzHCP37UB1I9BqwigfRM+h16P0t +9Af0J2o/0P98fDG+DEbpxzfhu/CP8U/xr/AHMEvE3hlkPqmBUXtIH8jpWnInuQtGfxXex8jb +5A/kr+QTTuAyuLncRu77XJQb445xf+HNvI8v5Gfzy/mL+ThopkRYLKwS9gmPCs8Jp8VKsU3s +Fd9TXau6Xv0fE3kT/xlDsY5YNDYKtqsGS7oSJPE99ADY/UHQwc9Bor8Ejo+jj0ELKdiDs4Hv +ClyH6/FSfBG+FIfwtXgH/ja+B9+HH8CPwwxgDkQFvPtJNVlFgiREric7yG3kILyPkJfJG+RN +cgo4d3Bezs/N5pZwF3OXcN0whwi3jbseJLuLe4R7lXudO8m9x50CrTn4WfwAfyV/L/8wf5D/ +lXCh0AXvB4RnhHHhV8IZ4YxIxBQxTSwSLxf3iX9Siaq5qgbVzapfq/6h7sVpOA84l2Z6C+KC +NTiLPEJs/HZ8CirSMY9MMHM/6GEVrIp/oCouBnox0nbgLZm4+CRKKcp8FOgj+ClUin+KtouE +A0/MH0cj+PfkOP88OQ/9BrdgF/8w1y38nHjQo+CNdpKnyVN4ITpIKslacj+H8Lt4H3oX7H0L +ugtfgfvRo/gUnoevxmV4O/o1sXOr8PWoMv4A4bEGL8GnEXCAruHb0GVf7wVxBfo9ej/2Pd7A +XwX+aQztBo0+ht7BP0L/xEL8Q/BuHHijIHiZW8Heb0DU6zXDOtsO69EFHqRTfBUdpDuKqkxc +wF+JTqP/Ru8LR8CiFoInPRkL89/j/xwvixfACoNVhvbBuutAi2HFvAtWchTKtHQprHQt+JIS +WNUN6GLUhq4Gr7crHo3fH78uvjXeg34BtP/E+fifeBhWxBhQVKKfwfsO9Ba+Bdbh4v/dLhBr +Q+PoA+zEWbgE1sMpYZOwU3hEOCj8RHhFnA3Svh7dBxb9J7BmLcygFf0KfYA+w2rQjQvlowDw +Ww68N6JO0sQdRYtwCuqFNZsDfnyhMpN+6OVakN79sJ6Pwto4DX7iUvQT9CYm2AEzaoXx1dBP +Pch5HWA/BBq8Do9CTRt47Tz0V5i3EZeTCIwnQ0+7wWuNA0+/R38BaccZX/ngF2rwWujrM3QR +aoMR5qIGfADVxQ+Bp1qGarj/AHlnYjNaiDPwD4GuBVaoEaWjCuHPmKD82LJ4OQlzR2GPiUP9 +MOxeqeg8vBG4MME8JlAyXo5KYytRvizLVQvOq5w/r6K8rDQwp2R2cVFhQb4/Lzcn25eV6c3w +SO5Z6WmpKS6nw55sS7JazCajQa/TatQqUeA5glF+rbeuRYr6WqK8z3v++QW07A1CRXBGRUtU +gqq6s3GiUgtDk87GlAGz/UuYcgJTnsLEZqkSVRbkS7VeKfpKjVcawxevaAT4thpvkxQ9xeCl +DN7JYAPAHg8QSLXOjhopiluk2mjdpo6h2pYa6O6ATrvIuyikLchHB7Q6AHUARR3e3gPYsQAz +gDhq5x0gSG0ApqIp3praqMtbQzmIclm1wbZow4rG2ppUj6epID+KF7V610eRd2HU5GcoaBEb +JiouiqrYMFKYzgbdIh3IHx+6dcyM1rf49W3etuCljVEu2ETHsPhh3Jqo48oTzukidG5d1Lhj +ZmsqN1TrDEu0ODS0Q4qOr2ic2eqhz6Ym6ANoSVZdy1AdDH0rCLF+lQSjkRuaGqP4BhhSojOh +s0rML+StpTUtl0tRjXeht2Po8hZQTcpQFK3c6hlJSZEPx4+jlFppaHWj1xOtSvU2BWvSDtjQ +0Mqtoy5Zcp3dUpB/wGxJCPaA0aQAesNMIDTVxiCGTqH6lVOSxZQj7xIwiKjUKgEnjV6YUzl9 +hMrRUGs5oMGrCQNVtA00Eo5qFrUMmefRekofFbLMXmnoEwQW4D314dk1QaVGzDJ/gihI7WTK +1KB9Eo76/dG8PGoiqkWgU+BxASuXFuRvGiNzvb1mCTIQH2oA2Qab5hWB+D0equBbxmS0HgrR +wRWNibKE1qeOILnI3xQlLbRlfLIleQ1tGZxsmSJv8YIlH2RngOSo2jf1z2S2J9V2zIti+9c0 +hxLt9au89SsubpRqh1oU2davPquUaC+falOgaNKiRi6VKBBJ5VgrGOWlU8i00KiP8lnwT2RG +3RblwChZBZbqouaW8xPPJq3H8y9pxlTqGURj8dOUimXTZAqX0Xn+s8vzzyqfxZ1+iAN+eR+p +X33x0JD2rLY6cEBDQ3VeqW6oZSg4Fh9c75XM3qHD5GHy8FBvbcukQsfiR25Jjdbd2gST6MDz +CiAkoNIW4A07rAotPEhwTFSNkSo5CQl8jENaFR/DyKUWhRjhnsY+pIHA0omcfvOnlROVy8wf +Vy6dqERVAJvPwGN2scfisWTBA8NmfUbixs/IAvoCSfw4Pf0F4yeFy4TXIXr9tbz0Rs3Ntpvt +e9E94kuaX3O/1n3CabI0OfocQ64t1z4gDGhuFNSqJJXDkeRw5JI8LktQ5QhVeDm+V9ijeZn7 +qU6FV5rp2fc0BJ1j8fFRizPAcq0Bcnyx7HAW8GqjbLQGjPXrTHi5CZvkZGfANIZz5AxrgZYz +fWRciz5C0CXBKcVpOC05e1iFTSq3qljFgRRuHU3dtsrph1k2b1x6apm5+dPmpac+PoWqJj72 +N2884ac5BWYXo2bc3NyMBZH3SshiRh7JYXcIPp83Q7SY7XNK5vJV2L0w9sqHsd/HbsJX4gA2 +7Gsrif0u5cFNP/jFz4Y3PUJSLzn9Pr4D4upufPfey6J1fdd/EPtn7IMPd1O53Qlyy4SzoAsN +yeUqtUqjMjvUds1i9WKN6iLNWvNu8x7LPcn32R82P2n/bfK74qeizqDXY0RUWUkavU4yvGrE +xjFyi5whpzaktqRyvamDqURKLU4dTh1P5VMxkZDkKnaNuzgXoI2mzB5ITJtqd6m5eWPfp80J +RZ+qqqw0g5px88Ykj8XmsNPJzS0FpZuNxJvh82X7Su/EObqkO67aNpiCc4qvefPx197aZksX +jpz5y9Hyi7s27H6c85+JxT5/e3dT8L412z4FG4RoAglPw/yS4RT4uXxthWmJ6SLV5brL9Y9o +HjYOew8Z39RoRbWohUlr5xrrjHUmldqssdiMNpPNPNc417TYNGDcan5dq9ui2eLalH6T5ibX +jemixm7T6E3GVcYB4/XGu4w/MApGyaC3GQx6kz7Z4LBnJZltuMU2bCM2G5I8WQQTg9GYjNTG +Mfy0nI0MZgMx/Do1e1iMiuPiMZEXd/R6seQt9hKvJ1mCYLCYmh4ILGN267TAQF6fNp/6uBkM +hQqLLg5rRVHzRsixxVpRsaPQ32y82vwCtlQgKDPr2djcPMfiKbFDtCKq7HZHkocrJF6vxcLE +GwCxer27Sc9ffzP43LMtV18+GvveG32rL2uv/N1vLq9cfn7mwZPCkeU/v/bB36aV3/ho7E+4 +6tEmz8T93LLMxoUXXKIXqA3dCo+DIGMO9RxGAiyTkkBAoMvFm8VyucrmCCBBFhqEQeG4ILiF +FqFXOC3wgwIsD8IhNeHeAm8RhZiNG6eLjk7/GJR41M3P3quskz7FIVQljKTP7/fDxCy34hzh +yD/rgI/vwrnjQeFxcDnnySkNKto3D2sbqXkhRUW4mVIVZx+eluoyc4z2C1Cia9qrJ/m7OIcc +Fx7/YslndI674KTjgjnq8WOyTsf51D4dx3OYA48oa9LmBbTSvPkBzVj8+KiSyz9MK4RaeIga +tfbPmg+1PK/RapNIGm/WuLVeks9LmiLtBtLBhzSXazeTLfwPNY9on9Ac0X6q+afWvpffqdmr +fVHzsva35E3+Dc1b2pPkPf5dzQdaw2bNFu115Fb+Os2t2p1E1agLkcv5DZoO7SaylVfVkHq+ +RlOvvUh9kaZRq3Jqi4wBMo8PaOZrq4wqjuh5UaPRJpMU3qFRjcXnywWcViPxao2mhONtHMcT +nVZbwhEAiU7NcXqeEL1Wq9Go1G661rFhlEa6R0g50/UlzQkdO1atDgglKlm1XY3VR7eDaI7q +JJ2ejJFy2QrKlQERyYCEStx6rKfdGKgvMH+88ZTfb678L3Nliss8sXFiY2WK0zzh90OF+cRG +0IuZWbrVUbFDKPTvuPqFHYVOmvlBVfXRpFWNh5E6fvyATiovb6KuEl7MNvzIv5GqEmO6ccBB +3bILPwWnCRV+OnYq9ofYn2P/CZ7Dyb33zzr+2i+20YRwPA7+YjXoWUQfjSIOq0G/I9YKpubV +KfMC4+o38BvkLf4tQaDC3iLswbvJvfw9wl61mkM6sUhNFdqi3oxVLmQXc5FPXIIWixfBDsgR +ImFkwxiJHM9LgmgTBJEbI+tlnYjUAg9ixkQ4QuAsCuI0WSt0PN7OD/Lv8Md5nh/DOlm7nRvk +3uGOg+GBxJ8ADJDyEaxDhARlTTHG2KW6TPEWSydcHzf7mz9ubvY7T00J8dTZIgQJgndohkO+ +HzV7MBUVJrqJj3E17scb8LyJfwhHvnieP4+trnxYXYdBMirUJ3uLNMV8sdCg6dUManZqVCIW +SBYcflRIrXE4UvjtAhbGcIGsFVUSLoYjGqw6KFo4YwPpJYNkJ+GJSz3xWILX+hWNB4hc3lS5 +FNbjRCU8akM1J9hKn6isZEsSVFjqSQY1vhNbyt8WW8Y/9/nnXyyAbmmM8QzjSotLDiNV/E1Z +U1YREHPgoaJ2qckpDYgyPKD0ptzgyYY2eOSiPD5PyNEW6ctRmVClvxxdTkJcu9Ch3qB9jzNd +IGKi1mBYGRpepcHgOVQ2hFSiZkpzaq2ckr5AS4fQpaQHtFmE40ReQ927UVQR0CdGaj0IA/xN +UNa5MbuCG8QcHiOZssatwcUgO6I5QjIRT/Ungcxcuhn6+7R5I3g958QykMZfJh3+0lPg14sq +YX1Unq1LlbmycscLL7BFoVtVH50FQd9hxMVjI2peeyQeA9GcOSDy5fTVBGr3s5fHw8Ebe5I4 +Tngm9pPBiUNbYy+S+bgi7+cv4qWxUVghQ0SaOA76vxv0fxokrUM75fPAXlXqLNHqFnCxsF8g +gqDheLrLaTVZOgRH4XqOnK9FOqxLkQzFBtnAGXjNTAesn71qpgNuplHAx5UfJwI+mix0X4MI +mO0oI+kVAl2JKSw7kFQBrDcBEieYqX3AKk/2KOluvurM++T4hMTNEY58Hnvqs9jGz4D7C+J/ +4f8O8SGcZeTzDlvG0g/lvJjPQxCYDEFgstMfEkI5EXGLIZLzlv4Nr75Ju8a4JqPJ26Fvt27w +hHM25G9OvzF9t0dv9VIfP8sdoLkccqUEVmSs8D6b8ayX35ix0XtNxjXeP2b80Sv6tXmGzIxM +b4Uh4K3X1htqMhZ5LzeEvFsNV2bcbBjKeEj7sGFfRpJGqzGIGaLXpXUZ7BmqDK/WwGPHWqfs +kgI9Ttzj3OskziMkhFLBzvQpFe5UnFpg49D5mBrekhQpUIxl3ABnsp14GOLncazG/8XLKRVm +HvMFeRrnR3EHdshJjoCjXpXtSyl0Zw+bo2ZirscfWRLacBW8pqiiflXjAQTrcCmNMJaZP4Xc +30dj0o1+8CUnEnmf/wS44oSPZerJAHmkpi8AeRxT8j+PJFVkgHggg9LL4D+hdIy6NINkrdCy +ZKJ178lGPdQZKrROmphap19NNHzZiJuTslgoyEIV+i4NzJ07R+ITQbBKTIZQkWfRDY2QL8BS +yt4dd+w678LA4f9q2bH9ox9hG3aoYm8mXX31NUuK8stx9NWBW+PomdgHsTfwH9J23bR1RWBJ +qrVw/tqtj/c+3/73nxs2tpZmVASyitq7jt6y7fdXgMMG+7kt/h6/ivchO7pfdlxk2WDZLXAa +0SVWkkpLPam3nCQq0xiJyBZeZ0faZJtNqxGTbL7kZHB8ubLRLkuZgf12HLdje4qT6s6ekRnY +6Rx2kl7naSf5yImdWp1Po6ZNJsAdVuPTsJG6HFWVTDkgbmWlAPQppKWnKs0sHGJuoepU4qTg +KRVFGivTsNk2HUFzy+YdDV/xyIXY5V5ZdX5fHnbtXbP+skd2k+GY83ho/vKBE3j8i7dpvLwD +5nkXrHITSkPfPYys8c/l2bqKstTFqcS6VlyrXWtf62xK+0wllvLzDfOTSlNr+XpDfVJt6l2q +ezVavRGCLpQCghgRVDYqjySdzoS0Do86pXcWnmXOJZzPRCWix71okFpfelV1YoLg2iYq/7LM +vBHsjvr+U/REALPaCNNa1Cjr2sV2bbu93RlOE5qbUDOL/ebOKbHCmQhmnJ2cBHaQMBM4Gu3A +rmtHnovFJg5fckC2BpZsbb7u+g2hG4UjE6fvip2M/XfsdOztS5ruJ3kPLu/d++ih70PoSOIP +xFbgh1gcm4xukZfaVT6V5JirOqQWBh2Y4wWUbDOY9WYNZ0JYZvEph5phvnyyuM6MzbdrTNjm +I2bw4yl3OPByWHiGOWaIdVwQdR8hVyAPufwAaJOtNdfSE85lLJxXTj/NbLuDUB78u2UOc2zM +t4GrToKZJltsTLPZZZNavQ27SvcM5AXLZ9u8Jn+ZlT+E+diZnV988YuHLzOZTvNCVuBa7hOq +02rQaTa/ANlQGv7BYWQGndbpKu7VfMew27xPeFj7lOYpw1iKWm3D55PFYp12+ax9hkPioZSX +tD/Tv6F9U/+56jODIc2UliynpgeSZaMlYEp+JvnVZC6ZBvmmWVUsNzogJ7fJcCyyNhhbjMTo +tFIvdciVGsBzrOz8nC4lztEZuYncX5DInWksl01GU2CYXtOYge11VitY0CivszqpJWXqVMiD +i5I9yyEKTSmatW5Wz6y9s/hZJo9aNpgCald6OGFJ/rMO1KfASck2p5xjq3LKs0zwSDXDI81S +xXxM1QRzYlZgAjCslBlAYjng0XxkEhU2Y+aXGAGCBmsFZXrEQbPoqEa7gBWrPVUQegL+CT+o +spkNb5RBSkY6qJEOb5RBWIh1yrZycKVwfpvDjjVg2XDYF70SODozmlOCOA/TeFLC2znIP7Fz +7vv7Y3+9IYxtr5/CVnFC5q4NLrw4m9uy9tLKSoxXFn3n+0/s+gPsBP7YS7GjV99yPu68cvui +Rf3Uj60BW6gCW3ChP8orGk1N1iZ7hylsDduvdm517SF79C+aX3T+1vyG833xffX7Se8nfy4m +lSeVJ19gvcBe52zSh/WqedYye5mT2yxsNu0QbjTd7Npnfdh+2HrIrjEyXaYGjCw8tQWMcwy0 +xjUrwHKTJWA4gnmkBW1aLTokAyqSAQ/N2QnB6xHwtDw0SQ4VprXYg4oMFDAkVJ6q8thcKY0J +JVMdUxX7Pz7lp7cmzSf8iUsTyBP7BviNxDVJso3Kr4wKNYPeoMwpsfOzY381ti4PX739iob2 +ZGzzf/zK+7G/Yvup594lH5asWr3rkaP3X9JT9JPnsA/zcGLIepjKzh1/j+wSvguye0XOlZCE +vdpc0zzjBcYmk8qVjJycPRk5rEmw31iJDTs5jUqr0jvHMJZNyDHsiDq4FsjGHZxjDPMjMCw1 +b5RMb8UisBPq4DhYhFARXgdOFDDkHCfnc1jXJFfZ9tr227gW26Btp+2Y7bRNQDazTbIV23gQ +yJbhyfNxfbQMAr/5LPCzxcdpQH0mEU+bP3adQE7qUCcqKeoJ5mRM8KI2h5O9ic2izCEqFy0W +b+mc0iwLuXJcl52WfYFz/VUXXlmh01xzDU7hfcdjq6/1p6W+nTdnRe3su/Grx1//YexmkM8e +iBCvB/+pgRNCFUSIopClktTF6mfU76j5IvVONVGrUSJM1ECMWCUuF4m4kkNQTpF0xTqiOztG +1J4rRmyuVA4GkxcfX4kB93CnJuaTton7afz34OcTu6gPXAJ2Xwh270UleJncoUpRpwnp9pQL +Us9PW5L1O/M7Fs1cV53rIl+7a4PvRt+3XXemPJRyOPWllJ+l6kXRkGwXXfZsMTe5ybWZ3Ege +Ep8QXxT1zwTeMpP0zJLZlnxDpuwvDGTKGTnwcKUHejLPZJLMunTq1IrBqZ2XjlG6OT2a/t/p +fHp6Pp6DZKg1ITewtsZDHYOHOgaP7EwJeMAcnuBVeoM2n64aaMtX3BHLASOfGoxs082a7VPn +anIMTW79Xj2BY3UcdhsINgL6lOUBHGgBndxOj4Vzcj3rHPgduietc/SA/bnmKL4SrAbc5MZT +zVS8/kTpBNuPwDmBnME5sdiPCdt/ip4awHQ4o7lS2ZvoSsuGeIzeL3E2u8NDQzS2U9EwrWxu +WWI/xqKoSixEqJpbikNx/2uvPj1Wz6VmxT7QmVXc+T9s/uHRtfd9+6cXNvTUr8aXzf0gs6yx +5sLaOWYd+VPhd+5quvnJ2NitN1yYVuZS19WN3HTxbfVpWVLaitr5sdesJc7syvlrS3xlmSG6 +TrchJN4Dus7G8w+jXNBAs0VbBctfnyza9QEuoA44A94aUquuddZ49RJXlLtK05I7mLs394fi +w6qH9E+IT+ijucdyj+caUW5RbgM0PJP7Tq6YK6ekBaqgPMgaBZWHV6Wk22m0o1VRrcmzeJXZ +YslOTUvzZWvhoG8y+6wW+eLSFgvusWDLGKmTTSmpvvQ0qOtJwy1pOA3qDmbBmoMVnzuCUDZz +lJoqmstzge9sQM2WqyFVQsrMDmTL884LFGW/mv1ONmfKdmcPZnMoW8ouzo5n89munD9XTipW +CaMrl5pPQaQIp0k/rJZP4eRXqVyjsUsBM4u06O1h4sYQ9/mpVrE/yZNM1epgynXYkyEICWRT +XYoM9E2C2zB3y3j77uK6By4deCAnPXYyPXvF/I7C2MlZVXOrOwpiJ3nfrh+tXrNm9bpLa+6Z +aCLrvldYef4tu2OE1N13cX7d9fdOnIFFcCco7jEWe6nQ5sNIQ28NYfaypkFDBjVRzbjmmOYj +jeDWtGi2a4ahQuBEFRL4L8dioiCqeC1Rgd9mp39PZoB3qZUg2j91g5gItc6Ksvr8NM7CkO7E +rthJ7EoEVF9cwPsgNMYzOFzFzqRyLuVPaBDIoBAVxoVjwkeJq83twjBUCMAMB1sd58NokhPk +4r/CiTL2nMS4yk3mDoS4MrBgM9on5+wRsMaIVwntwoDAFVkbjR3GXiuv1Zj0bj25Qx/Xkyr9 +cj3Rj5HNcq5KhZGWI6I2B2nMmmJNr4bXpGy37rWSddbt1v3WY1beakY+zNEgXEfIIBwbCXZZ +qg7jNDQZiDODSUSnEKfCxsFOGGBSFSV0v4A1j+qjDthrSmGvOaAtKYd43EOdL7UVh4pZhgUP +gxCFRVfUtDRdtPi8+SuLeN+eK2pKPymsfiT2N5ijMbaCXwknqiQcOGjNEXASPVA79RDJ2SGc +U9GHSB+CHeoIFaE7ZV4AljFv0BlFM0FJIp9EeI6jN2pJLRCAj+H9slVnMhQZc5CUXJzcksyd +TsYsOM3wBWguW9NmBZLpDVUFJztdAXpNOYazZQ1hJdiIaMmKK5CcNjegnI9tLyg7rD9xqQb/ +lEsZvx8cpvnjEzR8L0rcsWHYWNlKslYAoDLSTzTo/Rp9NddHzSC0eSC0Ed6MjsRPIxw/fYAz +Y3Ypo1x2wKHYYKlKMie54GF1Vglj8dOjUKD5CJQTfTUleZKSPFhl5LwZ2dkswDFCvPc59sZu +XpS16KLtDSuWuRaWrr/MxfsmjOTvZ8jh5vXnZVh+b+hvovvhy2DNfwLp0/VWKKdy5eChy8Go +9nOEiD4sCcUCEfarX3mUfh5Hb+XMlZ/Sz2jgnDm5TF5OLBPOQPMz/6BP2vNK2Gm/A7ZrgDhp +j3z+e/ik+rOkz5L5l8h7ArG6BJeGNJnXJq21Nzn3kHvEe9R79GOa35DfCb/X/EZ/Ujgpvmcw +P6z+BfkP8Xn1i3phQH2zeL2aszAvq3NQL2vjVbYKVUpLam8qSTV60FlBYeL4yBhlR8eNcHbU +hM3t1nZ72MljenTEzUkBK1gqnOfg6Jjpy7JNHxxXDk3c/zcciL384bdjnw1haXd39913d3fv +Jhm3YnEo9tJHf4s9f3183/f27Ru+f98+uts4YdJ/EV5HdjQml8zlcR4vmSVLEz/oFNT8M06S +bLcQm9VuMSaZkNmYhJGZ2DRqkw6v08Uh5KET0orYYkpcDrBdxAz9gm2AWdu0mjlV6uXqBjWn +zjEXWdZZiIWGhgZjko/Y1qFh+7id2OkpS6MP2F2OLYdJOLGM/RsT0d+ZZggAXYlFTOMlSFXw +qChRoj/q7JPmsDsVZekmJ8+BgNBj8Trvr7h3YEu/b9GC80pfey128n7e13Dj9asyXzBXrKj/ +w5knuSXKJyN8E+jbjvbKTlWSI+lidYeaH+Mx7LPmGnWN6X2zINJppVtURoOo1+nAQxHssyN2 +JwJLADr5mjsRvZHujAaDfupqRI9P01P1WVcjUy4rcTuiuNeZdyMbqYua3rYsbHubRZL5ptjJ +zBUVSyJ+6q9ueb35O8vdZNZjofKG60dibt53/8FFHdd/i860GCzbDDPNI93y90SL6FVnOywO +7z3We2x7su/O06hsdTZifcpw2PiS513v54ZPM8RcwxpDyHC3bo/14YzDelW1V86s8W3IaPPt +sO6w3ZhxXaamzFcr1ukuMCw31XkWZqgyMrN9ZfpST2lGqbc0UyVqBYvG4zRk6zMyMryqzAw5 +v1+/xbY1eVPuQN5NydfnfSf57ryDGQe9hkF8h+NW5715P8qL5osZY/FfjObkQSiZyDPYpWUm +LR8fdWcmyq4UVpZTAbjCgOdm1GXcY7gr44WMX2eIngy9gedT6M71BJzf0Rx6kh91FFRh5ajL +yhlZAXYPmQ5xEcKJm0i+BQ/i05hD2MzuJXmGmWQHTDgI9SIer+NP84Svy9HZZejaPschQ78O +GTp1yKVlAQeNpB1yVi48oF+Tw82CVt6xJkUG+zCl4IaUeApJqUtSOTx22eMN2OU0d8Btx+/A ++pmj9jRk3ZFFsmRneiArJZ99NAUbdUM+Ls7HRfk4f5anGPaKOXC6VEKtxCf82qrENq0xwDbt +3zJGTesMOFoWHiuG5d9ISxBY0UvRZnYryl708/rmjfST+75E0UKvSBO3Bf7EGtsIr+Zm5uIz +4y/LGp21ypQDD9DAh4cMFXqbvoKCI3p6L/rBAV0Fux4AX98EXixxAwpxMwRg2ZnsBpTGZDMv +QOmX0WjUXYxTrN2tXWVZtuQlsccu2fb2u2//Oif2mWVdY0+xlObDzzY1fvzRWxO4yL9yTU5a +kZRss9QvWHvv0NO33zJ7wUK33TsrOa39gvobv/1aFHw5vfP/nN0GpqLNcpYoHLYddnKLBbxB +eAOcuSXLYDSiVDM90ZmQ2p69X4Xphy6jGl2AfslBtrvTi9Nb0nvTB9OFdLNp5uEubebhbim4 +bSrc6aMd+8YHu/6FyEhysPtdOEJ4vS4y/bn13fh32Lhy2yPr9yy7/OVnH9i/adFl55cOC0fs +nj/s3zEWtiRP/JZ/LtZSuL66ocOghYHvQkgIwnzMcPDaLs/JEXK0ix0hPqQX8hwVjvPtTfYO +u1DhmJu6I/VeYbdOcFuyMCJJ1iyTWe36yuySBj1Y8hR7iMdilZBkLjYTM52adPbUmqfmlvhk +Y/Ja21MC07Im21QifXs92AI6XkBganRud5H0J1uuGWspKGtfet36H068jnP+cFXZ+esqKztX +LXhCOJLmey528pdPXDfcWp/n5p87U2q0rv3pI48carcaEfuiE/nVh08ar1qzzlT5idqlZt8G +feDPlVPf8qe3neI9sG9hOK/jya/LIqRaEFuGFk1/gfZLXyj1iFBFKkCOL6EgpDsh7Ybyrfyf +0XfFR9AuYW08DnA+1CNhLbob0gVQvg3SDlIRf4DvR9WQ1pBHkBvq9gC8RJWOtkEfd9LEpaMd +UGeE9pehfSXkTsh3QV0x6+8lqkU0F96v4YX4Y1JO2rmLuZN8CX9SqBPbxbdVjaoX1D/XdGg+ +19bpKvV2/Qb9dw0mwy8NXxj7jf8wdZj/aFli+QmbmQfNSXyGCE8zKkLVcHJcau6EqIjWruOv +RPTbS+yLtOzJMYloWYljVGqsVmAONWKzAvPIhjsUWEBOfJUCiwDfpcAq9AJ+TIHVyEd6FViD +hshuBdbyz3GSAuvQetWfFFiP2tU1CmwQD6ofUWAjutR02ZTOtpuOKDBGgrlCgQnizQsUmEP5 +5oUKzCOtuVuBBaQ3b1FgEeDrFViF1pt3KrAaJZn/rsAaVGsRFFhLgpYLFFiHZic9OvU/c+Yk +/V6BDdzFNpMCG1GhIwycYJ5K3ejYo8A8SnE8yGAB6rWOZxSYR3bHywwWoV50vKPAPLI63mWw +iurF8ZkCgy4ccQaroV7vTFJgHjmdbgZrqH6dZQoM+nWVKjD046pSYNCva7ECQ5+uvQoM+nWN +KjDo1/ULBQb9uv6swKDflIcVGPSb8ooCg35TL1Jg0K/kUmDQr/QtBQb9Sn9UYNBv9t0Mpt7M +mP03BQZZZSfmqIN6a45LgXk0K8fPYD2dS84SBQb+c1Yw2EgtPyekwDxKyxlgsJn1s0uBaT8/ +YHASlXnOswoMMs95icE2yk/OWwoM/OScZHAy1NtysQLzSMpNZrCd4ueWKjDg5y5isIvhNysw +xd/I4FRqA7m7FBhsIPc+BqdTfnIPKDDwk/skg90M/2UFpvivMziT2kDu+woMNpD7CYPzqHzy +DAoM8slL8FlAPUFergLzk7CayX8KBv7zmP2o2bzyVigwrV9HYX0Cf6sC0/odDGZ6yfu+AtNx +f4RWo62oF4VQOwqiVsgl9CNIq1EHg5eiHtQNKaJgSeCte1AfwPQZhPoww5CgphPoCwGqYfXB +/8ueiqY4k9AqaOlEA1M4/VC3BPLEeLNRBbyLUYEClbDaaqDohHwl0GwAHiKMaiX01w+pD22C +Zxtg9UF7EDAXsjHavsLnvBk40hTWPLSW9dI/xTUdtRyeEsqBPsLAWx+09ENqh75yz9nLv+pj +GrdgBl+rZ9Q/ziRL5dYGfXRB3oeugDo62v9e5hLUhkBaYeApwnijMpKgTHEiSq9rQB8SamD0 +EvKx8ZbCczmM3c5kHwR8SheCXqm0NzNK2lvhOXhK6LkHxqU89QLu1n+JFWL2RfE2M642TI0b +Vqy3gGm5B61XuF7GWjqYFIPATf4U732sJcwsdRU8BxjXCY0krIrqYhHjJMKkPCm3PuBFAqyg +YosJiwoz2bcxC6M2183Gmqn3VqWvIOONUnaxHinfHTB+F+sxIX2JcR1k47Uq2ki0UK77FX0E +2RwTdFun9B9WrL1X0WCIyaafWWNidpMaCir8D7DRJDbCTK4mNU9lQ8ubWd8dM6yB4vawvhJj +T9YnpB1RJNKqWGr/V/Ai0GeISSUMeaLvVqVmgEmaWtS0TfewldvHJNrJ6CmnVJ9dCtXkCK2M +fpMyaliZaWI90h6mpdAOmLS3RO20XMOKdHuUmYQZ/gArTWu1n1lpJ+Pu3DYx6Vv7p+ZC27pY +f9N9UH9xhcJtUJF/K/N6krJKJ2XWxsbewGoT9HSFhRUddrB116vYSA886YrepEg70cO0tw8y +XSWsQ2IybFXmH2Za62Q4vWztJayxm1EmZjLTusNTlkVX/hZFM12MG2qbm5S1lfA7nVN8dLHS +tPVGvrQj9X9pfq3KGOtZDwNM0m1n2WYIbYT6SclS226dmmE7s22J2cAWJtt+ZneRKX+S0Drl +PbHeI4rXSKymfsXKpr1norWLaSSIrmT0Ca5pv62sddrSEqO3MWn1slWydWoWk2N3M59J24NM +En3KGHQNJaQYYfSTHE/23stsqIv5zUneCtneF4G2ebCnFkG/9F3IsGZ62ELmnboAo4OtpU6A +ugDqZhoKsVI/WsdsIKHxwinM/3dH2MwsJoEbmjHKMvD0q2Hfr4O0CCyPwsuhlu4AdfC8kNXX +Qs0qeFLbXAw7QS28l7La1cgApymaVjNr6j+HrUlT9Yl1kpBoryLzaRv993axac1MeuRJPa9n +rVsBf2BqzNYp35aw5+n9aKa3THiOaT+aWL9hxWf2K2t6A+slNOUT6WptUkajq3uT4kvXT+1G +iTEjXyOZSd+5eco7hZQVF5qy6T7mPyLKem5X7PFc8ppchVRioRm9TK/ir47XpuyA1ALXM8+Y +4Hq9oplupedzaSibzepsSSU88let4qsjT/o26sWCLBYNwqidirT7FR/yr8am0l8DNdN+dutX +dBFSooyZMVfCewcZR71MsmEl0vl3dC4pttg9w7dNjks9SRuTdHjGLtI3I1bOn8Lum2G303v3 +10uKctfF+p+0q56z+tvM9H8F0+bMOHTSP05j9gBuIkIdYBKn/XdMzSfB10zr7lI8akL+iVXV +q9jHtOc924a+bkbT9rGEzf2rmpuMveieE1IitMRsEvFeK9Nq95d00PcleU/33M+i1QEW9Sf2 +oU0sNtqMZkZX/2ftT/bXp8R/YeXMc64o7qt6TEhrOmJtZX1+dR1Paiz4JVm3/4+4nZbyV0c4 +e78/m6OQEsVGYO+Z7IGeT6pR4iSQAzF8AJXB+UuC52woFcBJMQCpGNHbkTWoXsEshtbZ0BJQ +4DI0BxKlmotK4SxAE+39f7bX/e93xsm2oi9Jb2o/XL21N9QebA1JP5JWd4SkpT3dPRGokhb1 +9PX29AUj4Z5uqbeztVCqCUaC/wekItqZtKqnc4DW9EtLuoFudkVFcQE8Sgql6s5OaWV4Q0ek +X1oZ6g/1bQq1VfeFg50LezrbJvucx2okWjVvbaivn3ZdUlheIuUsDbf29fT3tEdyp1FmYrDa +AtbXagbvk1b3BdtCXcG+K6Se9q/lXOoLbQj3R0J9oTYp3C1FAHXNKqkhGJF80uql0vL29kIp +2N0mhTr7Q5s7AK1wqieYc8+GvmBvx9aZVSGppi+4Ody9gdKGQbwF0sqe9dD1snBrR09nsD+f +9t4Xbg0HpVXBge42mAiIqrxkUU93JNRFeevbKvUHQYogqHC71BbqD2/ozpcSc28FrGAYGrt6 ++kJSx0BXsBvYl1o7gn3BVpgGFMKt/TCPYLcEbVvp/MMg9l6YYKg11N/fA8PRCQWh/4HWDims +dEUnP9AdkjaHIx1MDF09PW2UmsLAdgQYaQWh9k/WRTaHuiPhEGC3AjDQt7VQYpLu2RTqC4K+ +I32hYKQLmihB6wDovJ8ORvUY6mMstA90dgLIeIXhu3pgkHB320B/hE21P7K1MzRTEtRa++ko +ob6ucDfD6Ou5AroNAv+tAzBQQoFt4eCGHtq+uQNkLnWEOntBIj3ShvCmEENgZh+UOkEcUlcI +ZNcdbgX0YG9vCMTY3RqCQRLiDlNhSaEtMJmuUOdWCebWD7bTSfvoCncy8UaUhdSvjNcKFOtD +0kA/mBSTZmjjAGV2oJXKX2rvgSlDjzCpSITaCUy9LwR6j4BpgJr6QWTMPKHYFdwQvDLcDV2H +Iq35CaEBeVu4v7czuJUOQam7Q5v7e4O9wBqgtAGLkXA/7Zii9/b1dPWw3go7IpHeeUVFmzdv +LuxSDLawtaerqCPS1VnUFaG/Y1XU1b8uSCdeSCv/TYLNoU6oDTGSZctXL6lbsqh69ZLly6Tl +ddKFSxbVLltVK1UvXllbu7R22WqD1qBd3QFinZQaFTHVCTAKM4gwiZ5jibHJUEOmc16/Vdra +M0ApW6m1gZzZOkqYJRgHs1HQLyy/bkAPbugLhaglFkpNQNYRBDPoWU+XEVBGzmKGWudmak4h +UFyISrov1BoBPbeDHKf5oirs2RBiKEzFU3SgGrDe9QMR6BrY7IEVNWNC2f2TTIEhT4liipha +m7Qp2DkQXA8WFuwHC5lJXSit6WY2u3VyFjAnxXOBeQel/t5QaxiczldnLoEUu5m1UdpgW1uY +2gRYZR/zyvm0uo/Jlq3uLzHVGe4K0wnBIAxvc0/fFf0JI2X2yCp7NoNDHVjfGe7voONAXwlx +d4GhAv+gqt6tUsJ4FQmdPRCTx5L26clR77VxINTPhgG/1xrq61Zm0KfwzZD7O3oGOttgDW0K +hzYn3NVXpk/xQJMh8ABt0y5uao7AFnOsrZFpHdOJBRWu28/dLWN5ikBZ90pHME4wMo8irFlV +DZtATnmgLFcqm11eUBwoLtZo1tRDZfHs2YEAPMvmlEllc0srSisM2n+x6r52MdJSkcIeW4dw +XA0pQRINdWZes5zdEkED2AChwftn4UzXtqOzr7klpaZOufSY2aLUcTdxR7kXuGfgeWBm+1n1 +33xs8M3HBt98bPDNxwbffGzwzccG33xs8M3HBt98bPDNxwbffGzwzccG33xs8M3HBt98bPD/ +4Y8Npu4Pwuhf3SwkWi6EPGGtPaxm4Czcr7YuZl6j/yysybo69D6Ur0CfAv77UHf2rcPZbZM0 +k/FVzzl7nG5dy6CZOIma81lpE7vvOLv97JYGZfcdYGe/HrYqZ2Kfq32mpHr+pQx7eDe/gJ/P +L+Ln8uW8zJ/H1/MVM7HP2b76nDc607V1X5lPoqaelvBswJnZNl1br8SmV3yJ4xn12IL+xHnB +Sma0T9X9u3bzb8rm3+7v6+xK+b48imej36JzvI5y30EmTH9MYZy7Z9RsK5HHuHtHTUklcrWZ +uxs1QCIoyi1F45AI6uF2oe2QCKDXjxTMLjlMgVGtscQM+LcgCdIgJA4NwxOzsgyJ4t8ymmSn +3V83YrIwum+NFAcSwKjZWdJQbeO2IMyFuG7kRW5uG+SzIG+FPB3y9Vwb+AnKpzxqMpcMwnhV +gF7FJYMTcnPVnB2VQF7DpaBUhjYwYkyMMzCSk1dSreUWcU6GYuIM4I3cnJpTjZS4pac4GTiV +uZtGNTrK300j5uSSo9wNnArZAGsQsBxu01FOi4og0ZmsHtUYSnZW67nVMM3VIBY3R7+qv5c9 +Za57BDqC8Wq5NGSHtiu4dJQMeR03ayTZPf4UdydD+zbtBcZbMKKeQ7NRg7FkvFrD0f8NEOVu +B4nfzkbbOeorL0HVPi4HFUMiINTtANFfcTNzQwANgZqGQDVDoJoh4GIIiaD3m6HlZsAp4q5E +vdxmtBPSXoB56DJ5BCR4mAGZOSWHORfnBEmYnwLZYahNGdUYKWfOEWsSQ3OO6o0lVUe5frQc +EgHmI6MOZ0nPU1wem0r+qDOVEvSOaPQgOkdCF0Bopzo4yqVxs5gk0pkEotVuKGNk4twIk5+T +Y1Q65HXyG6pf+scDWP4LJX9FyX+ZyOPj5NgojCKPkddofrw6jbwLna0jf0B7ASLkKfI8bDRu +8jYZo1yQt8hhVAX5m1Bug/ww5HMgPzLi+Zl7jIyNQga83zdisNPJkudH/EUK4M5SAEeqAljt +JdVZ5DnyLEqDLn4LeSbkz5JxlAH5M5A7IR8nEfQzyJ8gpWg+5AeV/AXyNLVp8iQ5BDumm4yO +GCkL0REVzfaPiDR7fAQlSg1F7qfJ4+RRlAKoPx7xpUDtvlFfptv0FPSHyYMkMpLutlZryfdx +I/4YkIbRmzRHVvLASBntZOfI05L7MNlJdsrOMjlLLpAf4oqziguKH+KkLKlAKpMekqrN5HYk +gPBgwZJb4Am7MwHrgSRD2kluHuHLotUTMCc6L4IG4TnMoBZ49jIIwdM81XqaQVXkBrQcEoE+ +tkHaDmkQ0jWIh+eVkL4F6SpIV7OaCKQBSJvBffQCRS9Q9AJFL6PoBYpeoOgFil5G0ctGH4BE +KVqAogUoWoCihVG0AEULULQARQujoPy2AEULo2gAigagaACKBkbRABQNQNEAFA2MogEoGoCi +gVHIQCEDhQwUMqOQgUIGChkoZEYhA4UMFDKjKAaKYqAoBopiRlEMFMVAUQwUxYyiGCiKgaKY +UUhAIQGFBBQSo5CAQgIKCSgkRiEBhQQUEqMwA4UZKMxAYWYUZqAwA4UZKMyMwsz0MwCJUhwH +iuNAcRwojjOK40BxHCiOA8VxRnEcKI4DxXGy+QB3rPqnQHIMSI4ByTFGcgxIjgHJMSA5xkiO +AckxIDmmTD3ChEHAbLZB2g5pEBKlHQfacaAdB9pxRjvOzGsAEqWNAkUUKKJAEWUUUaCIAkUU +KKKMIgoUUaCIMophoBgGimGgGGYUw0AxDBTDQDHMKIaZ4Q5AohT/c6P8H6uGXIMb1bC5kkGc +y/Lt6EOWb0NvsvxqdIDlV6GHWP4tdC3Lr0RlLN+MfCyH/lgeQW41HnGXmart4AKWQ1oHqQfS +Xkj7IT0DScWgVyG9AylOSuUM3qRartqr2q96RiXsVx1XEZO4XNwr7hefEYX94nGRSNWpxMD8 +KLgWdAd7bofnR5BgE4FnFYOqSADGDYCfLYV3gARkyynpozz8ah5+Jg/vz8N35OFqDVmMeebp +IM4nwDhulPW+Be43IZX5sheAZ7r90IcO94hvrnsMP53IcmU/5B9COgDpIUjXQiqDVAKpAFIW +JDerywP8RjlD6fJpSNmQPJAkOgSy2yG2sVrU8mFiwA+N/tSA6E+BjmTnAN1TI9nFkI2NZC+H +7MmR7PXuag0+hLJpGISfAM09Cvn+EfcJaP5xIntsxP0UZPtG3AHImkeyCyG7ZCT7FXe1Aa9B +bp6SrlbyVTBvmq8cca8FtBUj7lzI/CPZPoqdBwNlQWsubkQnIM9SqDITI3lH3PMhyxhxV1Bs +NcqmisciKmDsCZBozo0CQx8dxo08lnXuU+473R8C+V9BsGAeb0ljPGSvZo3htbLW/XTB9wC5 +2j1SraX4sD8cUPIozZ9wP5R1s/s+6AtnHXLf6y50314wpobq24Dvm9kQI+5rpTHyqJzkHnQX +uyMFJ9z97gvcQfdKd3MW1I+4L3U/TdlETbiRPHrI3QAdLoFZZI24F2eNMRbr3FvdsjvbXSE9 +TeWLyhP9lhU8TSWAShKj54N887LGqI2vKRvDFjlPdVq1U3WJaqFqvsqrylDNUqWrbGqr2qw2 +qvVqrVqtFtW8mqiR2kb/87yf/udKm0h/sQGJPH3yDDYT+iSJ/0FLsJqgC1A0iasn9asW4vro +eCuqXy9FP13lHcPaFRdHBe9CHLXWo/rVC6Pl/voxVXxltMxfH1U1XNJ4AOPbm6A2Sm4aw2h1 +4xiO06obUunfvTiA0Q23pR5GGLtuuK2pCTntm6qcVdYFloq6mnM8WpTnjJ/ZdM4E06O761c1 +Rh9Jb4qWUCCe3lQfvYb+VYzDxEQMtTWHiZFmTY2H+V5iql1J6/nemiZAO8HQwJqNgIayaQZo +6oVIomjgTxZSNNBRAs8H5IDnoRngaQ3Ix/B8WgPD4zHFO/CmVFtzQJIYThZCbzKcN7PQDByw +GKCtOeDzMSyvhBspFm70SoyxXNaR2w0oBW6GAuc2N+vIjdlg0aJplCwFpXQKpZSNxeFpHHcC +x5YziWPLARz//+UrtNCPR2cPbHue/qGRFm9tCFJL9JZNHc7o4HpJOrBtQPkLJL6W9a0dNA+G +ogPeUE10m7dGOjD7+XM0P0+bZ3trDqDna1c3HnheDtWMzJZn13qDNU2jVZWN1WeNdfPUWI2V +5+isknbWSMeqqj5HczVtrqJjVdOxqulYVXIVG6s2TO2+ofGAGi2kv3TD8lGi04INt6R6mhba +zb0LqEEfnu9xbks9wiO8D+n8TVG9d2HUAIk2FVQXVNMmWGe0yUj/mozS5Nw235N6BO9TmsxQ +bfEuRJOiRRSJ/l5RfdSz6uJGaipROXhunfXTF2t2otpwDfyDcoQleM/ERP3nfEXO9RoYGOin +jwE/nJHro3mr6qNz6a8nqVQwVEtNE9QVTtZxHKs7oNHUjsXHodEPTOAIHY5Cfkx/g1LWwqlL +RYbFYRWhR4XIaEp6Sc9R2MG3Q4JzHNk8UsTOy2TzaEYWPb9ERotKEzmcT2k+kuIpob9oUAak +NM9K5LKlAICdWTsLdpYNZw0XDJeJ9CdmHoJK90N0Kx0peohDEX//pCAAjDShxE9jwnjfH0lL +ZwMPU8Dvb/L3s18tQl8WtV/5ZSQQ+pRg+5Ve+1n3kUmFJOr7UQI50egfmCQaUEhY4wAjAfD/ +AR2uw4IKZW5kc3RyZWFtCmVuZG9iagoKNDIgMCBvYmoKMTU3NjEKZW5kb2JqCgo0MyAwIG9i +ago8PC9UeXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1lL0JBQUFBQStBcmlhbC1Cb2xkTVQK +L0ZsYWdzIDQKL0ZvbnRCQm94Wy02MjcgLTM3NiAyMDMyIDEwNDddL0l0YWxpY0FuZ2xlIDAK +L0FzY2VudCA5MDUKL0Rlc2NlbnQgLTIxMQovQ2FwSGVpZ2h0IDEwNDcKL1N0ZW1WIDgwCi9G +b250RmlsZTIgNDEgMCBSCj4+CmVuZG9iagoKNDQgMCBvYmoKPDwvTGVuZ3RoIDM2Ny9GaWx0 +ZXIvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeJxdkstugzAQRfd8hZftIgLzMI2EkFISJBZ9qLQf +QOwhRSoGGbLg7+uZSVupC9AxvsMcGIdVc2zssIavbtItrKIfrHGwTFenQZzhMthAxsIMer2t +6K7Hbg5CX9tuywpjY/upKILwze8tq9vE3cFMZ7gPwhdnwA32Iu4+qtav2+s8f8EIdhVRUJbC +QO/f89TNz90IIVXtGuO3h3Xb+ZK/wPs2g4hpLVlFTwaWudPgOnuBoIiiUhR1XQZgzb+9JOaS +c68/O+ej0kejKI5KzzFxmiAnxFmGnDLHyBln9siKuULOmY/ID5xXyHvmFPnAGYn8yEzvrzhD +fY/EOT0/ESvqWzMfPMuIGTOS/RXWSvbPsZdk/xQdJPsr7CvZX6GnZH+F3yLZX+G3SPbPsa9k +/5wy7J+QA/urGpn9FfVif3VCZv+c3Ng/w/8cs3+a0oBuk8BR4Vn6OQJCX53z46cDR3PHiQ8W +fs/kPM1YRdc31B+2IgplbmRzdHJlYW0KZW5kb2JqCgo0NSAwIG9iago8PC9UeXBlL0ZvbnQv +U3VidHlwZS9UcnVlVHlwZS9CYXNlRm9udC9CQUFBQUErQXJpYWwtQm9sZE1UCi9GaXJzdENo +YXIgMAovTGFzdENoYXIgMzIKL1dpZHRoc1s3NTAgMjc3IDcyMiA3MjIgNzIyIDI3NyA2MTAg +ODMzIDY2NiA2MTAgNzIyIDY2NiA2NjYgNjEwIDYxMCAyNzcKNTU2IDU1NiAzMzMgNjEwIDU1 +NiA4ODkgMjc3IDI3NyAzODkgNTU2IDMzMyA2MTAgMzMzIDYxMCA1NTYgNjY2CjcyMiBdCi9G +b250RGVzY3JpcHRvciA0MyAwIFIKL1RvVW5pY29kZSA0NCAwIFIKPj4KZW5kb2JqCgo0NiAw +IG9iago8PC9GMSA0NSAwIFIvRjIgMjUgMCBSL0YzIDIwIDAgUi9GNCA0MCAwIFIvRjUgMzUg +MCBSL0Y2IDMwIDAgUgo+PgplbmRvYmoKCjQ3IDAgb2JqCjw8L0ZvbnQgNDYgMCBSCi9YT2Jq +ZWN0PDwvSW00IDQgMCBSL0ltNSA1IDAgUj4+Ci9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFnZUMv +SW1hZ2VJL0ltYWdlQl0KPj4KZW5kb2JqCgoxIDAgb2JqCjw8L1R5cGUvUGFnZS9QYXJlbnQg +MTUgMCBSL1Jlc291cmNlcyA0NyAwIFIvTWVkaWFCb3hbMCAwIDYxMiA3OTJdL0dyb3VwPDwv +Uy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCL0kgdHJ1ZT4+L0NvbnRlbnRzIDIgMCBSPj4K +ZW5kb2JqCgoxMiAwIG9iago8PC9UeXBlL1BhZ2UvUGFyZW50IDE1IDAgUi9SZXNvdXJjZXMg +NDcgMCBSL01lZGlhQm94WzAgMCA2MTIgNzkyXS9Hcm91cDw8L1MvVHJhbnNwYXJlbmN5L0NT +L0RldmljZVJHQi9JIHRydWU+Pi9Db250ZW50cyAxMyAwIFI+PgplbmRvYmoKCjE1IDAgb2Jq +Cjw8L1R5cGUvUGFnZXMKL1Jlc291cmNlcyA0NyAwIFIKL01lZGlhQm94WyAwIDAgNjEyIDc5 +MiBdCi9LaWRzWyAxIDAgUiAxMiAwIFIgXQovQ291bnQgMj4+CmVuZG9iagoKNDggMCBvYmoK +PDwvVHlwZS9DYXRhbG9nL1BhZ2VzIDE1IDAgUgovT3BlbkFjdGlvblsxIDAgUiAvWFlaIG51 +bGwgbnVsbCAwXQovVmlld2VyUHJlZmVyZW5jZXM8PC9EaXNwbGF5RG9jVGl0bGUgdHJ1ZQo+ +PgovTGFuZyhlbi1JTikKPj4KZW5kb2JqCgo0OSAwIG9iago8PC9UaXRsZTxGRUZGMDA0MzAw +NjEwMDZFMDA2NDAwNjkwMDY0MDA2MTAwNzQwMDY1MDA3MzAwMjAwMDRFMDA2MTAwNkQwMDY1 +PgovQXV0aG9yPEZFRkYwMDczMDA2MTAwNjcwMDYxMDA3MjAwMjAwMDcwMDAyMDAwNzMwMDc1 +MDA3MjAwNzkwMDYxMDA3NzAwNjEwMDZFMDA3MzAwNjgwMDY5PgovQ3JlYXRvcjxGRUZGMDA1 +NzAwNzIwMDY5MDA3NDAwNjUwMDcyPgovUHJvZHVjZXI8RkVGRjAwNEMwMDY5MDA2MjAwNzIw +MDY1MDA0RjAwNjYwMDY2MDA2OTAwNjMwMDY1MDAyMDAwMzMwMDJFMDAzNT4KL0NyZWF0aW9u +RGF0ZShEOjIwMTIxMDE4MTczMjU0KzA1JzMwJyk+PgplbmRvYmoKCnhyZWYKMCA1MAowMDAw +MDAwMDAwIDY1NTM1IGYgCjAwMDAwNzk2NzYgMDAwMDAgbiAKMDAwMDAwMDAxOSAwMDAwMCBu +IAowMDAwMDA1NzEwIDAwMDAwIG4gCjAwMDAwMDc3NjkgMDAwMDAgbiAKMDAwMDAwNTczMSAw +MDAwMCBuIAowMDAwMDA3NDkxIDAwMDAwIG4gCjAwMDAwMDc1MTAgMDAwMDAgbiAKMDAwMDAw +Nzc1MCAwMDAwMCBuIAowMDAwMDA4MDYyIDAwMDAwIG4gCjAwMDAwMDgwODIgMDAwMDAgbiAK +MDAwMDAwODI3OSAwMDAwMCBuIAowMDAwMDc5ODIwIDAwMDAwIG4gCjAwMDAwMDgyOTkgMDAw +MDAgbiAKMDAwMDAwOTAzNCAwMDAwMCBuIAowMDAwMDc5OTY2IDAwMDAwIG4gCjAwMDAwMDkw +NTUgMDAwMDAgbiAKMDAwMDAyMzc2OCAwMDAwMCBuIAowMDAwMDIzNzkxIDAwMDAwIG4gCjAw +MDAwMjM5ODYgMDAwMDAgbiAKMDAwMDAyNDU0MiAwMDAwMCBuIAowMDAwMDI0OTQ0IDAwMDAw +IG4gCjAwMDAwMzc1MjQgMDAwMDAgbiAKMDAwMDAzNzU0NyAwMDAwMCBuIAowMDAwMDM3NzQ3 +IDAwMDAwIG4gCjAwMDAwMzgyNDMgMDAwMDAgbiAKMDAwMDAzODU4NyAwMDAwMCBuIAowMDAw +MDQ4OTg1IDAwMDAwIG4gCjAwMDAwNDkwMDggMDAwMDAgbiAKMDAwMDA0OTE5OSAwMDAwMCBu +IAowMDAwMDQ5NzQzIDAwMDAwIG4gCjAwMDAwNTAxMjcgMDAwMDAgbiAKMDAwMDA1OTU2MCAw +MDAwMCBuIAowMDAwMDU5NTgyIDAwMDAwIG4gCjAwMDAwNTk3NzMgMDAwMDAgbiAKMDAwMDA2 +MDEwOCAwMDAwMCBuIAowMDAwMDYwMjk4IDAwMDAwIG4gCjAwMDAwNjIwMjYgMDAwMDAgbiAK +MDAwMDA2MjA0OCAwMDAwMCBuIAowMDAwMDYyMjQwIDAwMDAwIG4gCjAwMDAwNjI1MzEgMDAw +MDAgbiAKMDAwMDA2MjY5MiAwMDAwMCBuIAowMDAwMDc4NTQwIDAwMDAwIG4gCjAwMDAwNzg1 +NjMgMDAwMDAgbiAKMDAwMDA3ODc1OSAwMDAwMCBuIAowMDAwMDc5MTk2IDAwMDAwIG4gCjAw +MDAwNzk0ODQgMDAwMDAgbiAKMDAwMDA3OTU2NyAwMDAwMCBuIAowMDAwMDgwMDczIDAwMDAw +IG4gCjAwMDAwODAyMTYgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDUwL1Jvb3QgNDggMCBS +Ci9JbmZvIDQ5IDAgUgovSUQgWyA8ODY5MjMyNUIzMkVDNDJEMDM2NEY4RDIzNzg4NzY2RDc+ +Cjw4NjkyMzI1QjMyRUM0MkQwMzY0RjhEMjM3ODg3NjZENz4gXQovRG9jQ2hlY2tzdW0gLzU0 +MDIyMDJFMDIxMjc2QkZGRkZBOTQxQkRBMkIxMEQxCj4+CnN0YXJ0eHJlZgo4MDU1NAolJUVP +Rgo= --------------010903010402010104090709-- From f30d1585e52237f042305889a12ad889e2f2bb37 Mon Sep 17 00:00:00 2001 From: "Sanjay Gohel (Open ERP)" Date: Thu, 18 Oct 2012 18:25:06 +0530 Subject: [PATCH 025/102] [IMP]set pos company in statment create bzr revid: sgo@tinyerp.com-20121018125506-lrdsyklk0oap2u5z --- addons/account/account_bank_statement.py | 2 +- addons/point_of_sale/point_of_sale.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py index 549363ce269..401fac4e279 100644 --- a/addons/account/account_bank_statement.py +++ b/addons/account/account_bank_statement.py @@ -61,7 +61,7 @@ class account_bank_statement(osv.osv): return res def _get_period(self, cr, uid, context=None): - periods = self.pool.get('account.period').find(cr, uid) + periods = self.pool.get('account.period').find(cr, uid,context=context) if periods: return periods[0] return False diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 85eb1dd9612..e0b33d6df84 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -296,6 +296,8 @@ class pos_session(osv.osv): ] def create(self, cr, uid, values, context=None): + if context is None: + context = {} config_id = values.get('config_id', False) or False if config_id: # journal_id is not required on the pos_config because it does not @@ -304,6 +306,7 @@ class pos_session(osv.osv): # the .xml files as the CoA is not yet installed. jobj = self.pool.get('pos.config') pos_config = jobj.browse(cr, uid, config_id, context=context) + context.update({'company_id': pos_config.shop_id.company_id.id}) if not pos_config.journal_id: jid = jobj.default_get(cr, uid, ['journal_id'], context=context)['journal_id'] if jid: @@ -330,6 +333,7 @@ class pos_session(osv.osv): bank_values = { 'journal_id' : journal.id, 'user_id' : uid, + 'company_id' : pos_config.shop_id.company_id.id } statement_id = self.pool.get('account.bank.statement').create(cr, uid, bank_values, context=context) bank_statement_ids.append(statement_id) From 97f37e4297781c72b40137db2a930a6772583e46 Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Fri, 19 Oct 2012 10:44:38 +0530 Subject: [PATCH 026/102] [FIX] remove invisible field from account_data.xml bzr revid: tpa@tinyerp.com-20121019051438-gg0zk0wordvvi215 --- addons/account/data/account_data.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/addons/account/data/account_data.xml b/addons/account/data/account_data.xml index e435c0243e9..dd27cfbab4e 100644 --- a/addons/account/data/account_data.xml +++ b/addons/account/data/account_data.xml @@ -127,7 +127,6 @@ Status state - @@ -215,7 +214,6 @@ Status state - @@ -291,7 +289,6 @@ Status state - @@ -373,7 +370,6 @@ Status state - @@ -460,7 +456,6 @@ Status state - From 81e7d9ba3defa0dbaed1e244710fce29827bc1d6 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 24 Oct 2012 13:21:47 +0200 Subject: [PATCH 027/102] [WIP] calendar bzr revid: fme@openerp.com-20121024112147-g1xthxqor7wxb3wu --- addons/web_calendar/static/src/js/calendar.js | 140 +++++++++++------- 1 file changed, 90 insertions(+), 50 deletions(-) diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index 9c87f57626b..f92ee894229 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -128,6 +128,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ scheduler.config.drag_create = true; scheduler.config.mark_now = true; scheduler.config.day_date = '%l %j'; + scheduler.config.details_on_create = false; scheduler.locale = { date:{ @@ -173,17 +174,35 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ }; scheduler.init(this.$el.find('.oe_calendar')[0], null, this.mode || 'month'); - - - scheduler.detachAllEvents(); - scheduler.attachEvent('onEventAdded', this.do_create_event); - scheduler.attachEvent('onEventDeleted', this.do_delete_event); - scheduler.attachEvent('onEventChanged', this.do_save_event); - scheduler.attachEvent('onClick', this.do_edit_event); - scheduler.attachEvent('onLightbox', this.do_edit_event); - + //scheduler.attachEvent('onEventAdded', this.do_create_event); + //scheduler.attachEvent('onEventDeleted', this.do_delete_event); + //scheduler.attachEvent('onEventChanged', this.do_save_event); + //scheduler.attachEvent('onClick', this.do_edit_event); + //scheduler.attachEvent('onLightbox', this.do_edit_event); scheduler.attachEvent('onViewChange', this.on_view_changed); + scheduler.attachEvent('onEventChanged', this.proxy('quick_save')); + scheduler.attachEvent('onEventAdded', this.proxy('quick_create')); + scheduler.attachEvent('onEventDeleted', function() { + eval(3) + debugger + }); + scheduler.attachEvent('onEmptyClick', function(ev) { + eval(3) + debugger + }); + scheduler.attachEvent('onClick', function(ev) { + eval(3) + debugger + }); + scheduler.attachEvent('onLightbox', function(event_id) { + var index = self.dataset.get_id_index(event_id); + if (index !== null) { + self.open_event(self.dataset.ids[index]); + } else { + self.slow_create(event_id); + } + }); this.refresh_scheduler(); // Remove hard coded style attributes from dhtmlx scheduler @@ -304,9 +323,23 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ } return r; }, - do_create_event: function(event_id, event_obj) { - var self = this, - data = this.get_event_data(event_obj); + + + quick_save: function(event_id, event_obj) { + var self = this; + var data = this.get_event_data(event_obj); + delete(data.name); + var index = this.dataset.get_id_index(event_id); + if (index !== null) { + event_id = this.dataset.ids[index]; + this.dataset.write(event_id, data, {}).then(function() { + self.refresh_minical(); + }); + } + }, + quick_create: function(event_id, event_obj) { + var self = this; + var data = this.get_event_data(event_obj); this.dataset.create(data).then(function(r) { var id = r; self.dataset.ids.push(id); @@ -315,45 +348,48 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ self.reload_event(id); }, function(r, event) { event.preventDefault(); - self.do_create_event_with_formdialog(event_id, event_obj); + self.slow_create(event_id, event_obj); }); }, - do_create_event_with_formdialog: function(event_id, event_obj) { + slow_create: function(event_id, event_obj) { var self = this; - $.when(! self.form_dialog.dialog_inited ? self.form_dialog.init_dialog() : true).then(function() { - if (!event_obj) { - event_obj = scheduler.getEvent(event_id); - } - var data = self.get_event_data(event_obj), - fields_to_fetch = _(self.form_dialog.form.fields_view.fields).keys(); - self.dataset.index = null; - self.creating_event_id = event_id; - self.form_dialog.form.do_show().then(function() { - _.each(['date_start', 'date_delay', 'date_stop'], function(field) { - var field_name = self[field]; - if (field_name && self.form_dialog.form.fields[field_name]) { - var ffield = self.form_dialog.form.fields[field_name]; - ffield._dirty_flag = false; - $.when(ffield.set_value(data[field_name])).then(function() { - ffield._dirty_flag = true; - self.form_dialog.form.do_onchange(ffield); - }); - } - }); - self.form_dialog.open(); - }); + event_obj = event_obj || scheduler.getEvent(event_id); + var data = this.get_event_data(event_obj); + //self.creating_event_id = event_id; + var set_values = {}; + _.each(['date_start', 'date_delay', 'date_stop'], function(field) { + var field_name = self[field]; + set_values[field_name] = data[field_name]; + console.log(set_values); }); + this.open_form_popup(null, set_values); }, - do_save_event: function(event_id, event_obj) { - var self = this, - data = this.get_event_data(event_obj), - index = this.dataset.get_id_index(event_id); - if (index != null) { - event_id = this.dataset.ids[index]; - this.dataset.write(event_id, data, {}).then(function() { - self.refresh_minical(); - }); - } + open_event: function(event_id) { + this.open_form_popup(event_id); + }, + + open_form_popup: function(id, set_values) { + var pop = new instance.web.form.FormOpenPopup(this); + debugger + pop.show_element(this.dataset.model, id, this.dataset.get_context(), { + title: _t("Calendar entry: ") // + title + }); + //_.each(['date_start', 'date_delay', 'date_stop'], function(field) { + // var field_name = self[field]; + // if (field_name && self.form_dialog.form.fields[field_name]) { + // var ffield = self.form_dialog.form.fields[field_name]; + // ffield._dirty_flag = false; + // $.when(ffield.set_value(data[field_name])).then(function() { + // ffield._dirty_flag = true; + // self.form_dialog.form.do_onchange(ffield); + // }); + // } + //}); + pop.on('write_completed', self, function() { + debugger + //self.dataset.read_index(_.keys(self.fields_view.fields)).pipe(self.on_diagram_loaded); + }); + return pop; }, do_delete_event: function(event_id, event_obj) { // dhtmlx sends this event even when it does not exist in openerp. @@ -367,11 +403,13 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ } }, do_edit_event: function(event_id, evt) { + debugger var self = this; var index = this.dataset.get_id_index(event_id); if (index !== null) { - this.dataset.index = index; - this.do_switch_view('form'); + //this.dataset.index = index; + //this.do_switch_view('form'); + this.open_form_popup(this.dataset.ids[index]); } else if (scheduler.getState().mode === 'month') { var event_obj = scheduler.getEvent(event_id); if (event_obj._length === 1) { @@ -382,7 +420,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ event_obj['start_date'].addHours(8); event_obj['end_date'].addHours(-4); } - this.do_create_event_with_formdialog(event_id, event_obj); + this.slow_create(event_id, event_obj); // return false; // Theorically, returning false should prevent the lightbox to open. // It works, but then the scheduler is in a buggy state where drag'n drop @@ -395,7 +433,9 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ } }, get_event_data: function(event_obj) { - var data = {}; + var data = { + name: event_obj.text + }; data[this.date_start] = instance.web.datetime_to_str(event_obj.start_date); if (this.date_stop) { data[this.date_stop] = instance.web.datetime_to_str(event_obj.end_date); From b79406cb896e6f6003cb7ca6adc71f3f2da82d80 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 24 Oct 2012 15:48:59 +0200 Subject: [PATCH 028/102] [WIP] Updated dhtmlx calendar bzr revid: fme@openerp.com-20121024134859-pru7zenpiz0la8mq --- addons/web_calendar/__openerp__.py | 8 +- .../codebase/dhtmlxscheduler.css | 4 +- .../codebase/dhtmlxscheduler.js | 308 +- .../codebase/dhtmlxscheduler_dhx_terrace.css | 5 + .../codebase/dhtmlxscheduler_glossy.css | 4 +- .../ext/dhtmlxscheduler_active_links.js | 5 +- .../ext/dhtmlxscheduler_agenda_view.js | 15 +- .../codebase/ext/dhtmlxscheduler_all_timed.js | 9 + .../codebase/ext/dhtmlxscheduler_collision.js | 10 +- .../codebase/ext/dhtmlxscheduler_cookie.js | 6 +- .../ext/dhtmlxscheduler_dhx_terrace.js | 8 + .../codebase/ext/dhtmlxscheduler_editors.js | 15 +- .../codebase/ext/dhtmlxscheduler_expand.js | 2 +- .../codebase/ext/dhtmlxscheduler_grid_view.js | 28 + .../ext/dhtmlxscheduler_html_templates.js | 2 +- .../codebase/ext/dhtmlxscheduler_key_nav.js | 7 +- .../codebase/ext/dhtmlxscheduler_limit.js | 37 +- .../codebase/ext/dhtmlxscheduler_map_view.js | 18 +- .../codebase/ext/dhtmlxscheduler_minical.js | 46 +- .../ext/dhtmlxscheduler_multiselect.js | 4 +- .../ext/dhtmlxscheduler_multisource.js | 2 +- .../codebase/ext/dhtmlxscheduler_offline.js | 11 +- .../codebase/ext/dhtmlxscheduler_outerdrag.js | 6 +- .../codebase/ext/dhtmlxscheduler_pdf.js | 25 +- .../codebase/ext/dhtmlxscheduler_readonly.js | 12 +- .../codebase/ext/dhtmlxscheduler_recurring.js | 60 +- .../codebase/ext/dhtmlxscheduler_serialize.js | 11 +- .../codebase/ext/dhtmlxscheduler_timeline.js | 72 +- .../codebase/ext/dhtmlxscheduler_tooltip.js | 15 +- .../codebase/ext/dhtmlxscheduler_touch.css | 5 - .../codebase/ext/dhtmlxscheduler_touch.js | 26 - .../ext/dhtmlxscheduler_treetimeline.js | 26 +- .../codebase/ext/dhtmlxscheduler_units.js | 22 +- .../codebase/ext/dhtmlxscheduler_url.js | 2 +- .../ext/dhtmlxscheduler_week_agenda.js | 31 +- .../codebase/ext/dhtmlxscheduler_year_view.js | 28 +- .../codebase/imgs/clock_small.gif | Bin 388 -> 388 bytes ...pand-icon.gif => collapse_expand_icon.gif} | Bin .../dhtmlxScheduler/codebase/imgs/images.png | Bin 0 -> 1581 bytes .../codebase/imgs/lightbox.png | Bin 207 -> 0 bytes .../dhtmlxScheduler/codebase/imgs/move.png | Bin 145 -> 0 bytes .../codebase/imgs/multi-days-bg.png | Bin 350 -> 0 bytes .../codebase/imgs/resize_dots.png | Bin 0 -> 111 bytes .../codebase/imgs_dhx_terrace/arrow_left.png | Bin 0 -> 198 bytes .../codebase/imgs_dhx_terrace/arrow_right.png | Bin 0 -> 189 bytes .../codebase/imgs_dhx_terrace/but_repeat.gif | Bin 0 -> 1472 bytes .../codebase/imgs_dhx_terrace/calendar.gif | Bin 0 -> 1018 bytes .../codebase/imgs_dhx_terrace/clock_big.gif | Bin 0 -> 1958 bytes .../codebase/imgs_dhx_terrace/clock_small.gif | Bin 0 -> 588 bytes .../codebase/imgs_dhx_terrace/close_icon.png | Bin 0 -> 162 bytes .../imgs_dhx_terrace/collapse_expand_icon.gif | Bin 0 -> 1192 bytes .../codebase/imgs_dhx_terrace/controls.png | Bin 0 -> 761 bytes .../codebase/imgs_dhx_terrace/databg.png | Bin 0 -> 103 bytes .../codebase/imgs_dhx_terrace/databg_now.png | Bin 0 -> 103 bytes .../codebase/imgs_dhx_terrace/resize_dots.png | Bin 0 -> 110 bytes .../codebase/imgs_dhx_terrace/resizing.png | Bin 0 -> 99 bytes .../codebase/imgs_glossy/blue_tab.png | Bin 0 -> 247 bytes .../codebase/imgs_glossy/blue_tab_wide.png | Bin 0 -> 252 bytes .../codebase/imgs_glossy/but_repeat.gif | Bin 0 -> 1149 bytes .../codebase/imgs_glossy/buttons.gif | Bin 0 -> 616 bytes .../codebase/imgs_glossy/calendar.gif | Bin 0 -> 622 bytes .../codebase/imgs_glossy/clock_big.png | Bin 0 -> 1580 bytes .../codebase/imgs_glossy/clock_small.png | Bin 0 -> 3809 bytes .../imgs_glossy/collapse_expand_icon.gif | Bin 0 -> 452 bytes .../{imgs => imgs_glossy}/controlls5.png | Bin .../codebase/imgs_glossy/databg.png | Bin 0 -> 89 bytes .../codebase/imgs_glossy/databg_now.png | Bin 0 -> 89 bytes .../codebase/imgs_glossy/event-bg.png | Bin 0 -> 148 bytes .../codebase/imgs_glossy/icon.png | Bin 0 -> 230 bytes .../codebase/imgs_glossy/left-separator.png | Bin 0 -> 230 bytes .../codebase/imgs_glossy/left-time-bg.png | Bin 0 -> 124 bytes .../codebase/imgs_glossy/lightbox.png | Bin 0 -> 207 bytes .../codebase/imgs_glossy/loading.gif | Bin 0 -> 3951 bytes .../codebase/imgs_glossy/move.png | Bin 0 -> 145 bytes .../codebase/imgs_glossy/multi-days-bg.png | Bin 0 -> 350 bytes .../imgs_glossy/second-top-days-bg.png | Bin 0 -> 138 bytes .../codebase/imgs_glossy/top-days-bg.png | Bin 0 -> 177 bytes .../codebase/imgs_glossy/top-separator.gif | Bin 0 -> 259 bytes .../codebase/imgs_glossy/white_tab.png | Bin 0 -> 290 bytes .../codebase/imgs_glossy/white_tab_wide.png | Bin 0 -> 300 bytes .../static/lib/dhtmlxScheduler/readme.txt | 2 +- .../lib/dhtmlxScheduler/sources/base.js | 161 - .../lib/dhtmlxScheduler/sources/clear.css | 110 - .../lib/dhtmlxScheduler/sources/config.js | 117 - .../lib/dhtmlxScheduler/sources/connector.js | 139 - .../sources/dataprocessor_hook.js | 82 - .../lib/dhtmlxScheduler/sources/dayevents.js | 200 -- .../dhtmlxScheduler/sources/dhtmlxcommon.js | 914 ------ .../sources/dhtmlxdataprocessor.js | 587 ---- .../sources/dhtmlxdataprocessor_debug.js | 168 - .../sources/dhtmlxdataprocessor_jsonp.js | 57 - .../sources/dhtmlxscheduler.css | 1419 +++++++++ .../dhtmlxscheduler.js} | 2805 ++++++++++------- .../sources/dhtmlxscheduler_dhx_terrace.css | 2018 ++++++++++++ .../sources/dhtmlxscheduler_glossy.css | 1715 ++++++++++ .../lib/dhtmlxScheduler/sources/event.js | 647 ---- .../lib/dhtmlxScheduler/sources/ext.css | 386 --- .../ext/dhtmlxscheduler_active_links.js | 28 + ...view.js => dhtmlxscheduler_agenda_view.js} | 71 +- .../sources/ext/dhtmlxscheduler_all_timed.js | 133 + ...lision.js => dhtmlxscheduler_collision.js} | 37 +- ...xt_cookie.js => dhtmlxscheduler_cookie.js} | 10 +- .../ext/dhtmlxscheduler_dhx_terrace.js | 90 + ..._editors.js => dhtmlxscheduler_editors.js} | 63 +- ...xt_expand.js => dhtmlxscheduler_expand.js} | 2 +- .../sources/ext/dhtmlxscheduler_grid_view.js | 470 +++ ...s.js => dhtmlxscheduler_html_templates.js} | 2 +- .../sources/ext/dhtmlxscheduler_key_nav.js | 79 + .../sources/ext/dhtmlxscheduler_limit.js | 831 +++++ ...ap_view.js => dhtmlxscheduler_map_view.js} | 149 +- .../sources/ext/dhtmlxscheduler_minical.js | 435 +++ ...lect.js => dhtmlxscheduler_multiselect.js} | 47 +- ...urce.js => dhtmlxscheduler_multisource.js} | 2 +- .../sources/ext/dhtmlxscheduler_offline.js | 79 + ...erdrag.js => dhtmlxscheduler_outerdrag.js} | 7 +- .../sources/ext/dhtmlxscheduler_pdf.js | 276 ++ ...eadonly.js => dhtmlxscheduler_readonly.js} | 77 +- .../sources/ext/dhtmlxscheduler_recurring.js | 750 +++++ ...ialize.js => dhtmlxscheduler_serialize.js} | 15 +- .../sources/ext/dhtmlxscheduler_timeline.js | 963 ++++++ .../sources/ext/dhtmlxscheduler_tooltip.js | 172 + ...ine.js => dhtmlxscheduler_treetimeline.js} | 21 +- .../dhtmlxscheduler_units.js} | 25 +- .../{ext_url.js => dhtmlxscheduler_url.js} | 2 +- ...enda.js => dhtmlxscheduler_week_agenda.js} | 117 +- ...r_view.js => dhtmlxscheduler_year_view.js} | 29 +- .../sources/ext/ext_active_links.js | 26 - .../sources/ext/ext_key_nav.js | 36 - .../dhtmlxScheduler/sources/ext/ext_layer.js | 403 --- .../dhtmlxScheduler/sources/ext/ext_limit.js | 166 - .../dhtmlxScheduler/sources/ext/ext_matrix.js | 677 ---- .../sources/ext/ext_minical.js | 402 --- .../sources/ext/ext_monthheight.js | 31 - .../sources/ext/ext_offline.js | 102 - .../dhtmlxScheduler/sources/ext/ext_pdf.js | 222 -- .../sources/ext/ext_tooltip.js | 160 - .../lib/dhtmlxScheduler/sources/ext/ext_wp.js | 17 - .../lib/dhtmlxScheduler/sources/glossy.css | 294 -- .../lib/dhtmlxScheduler/sources/ical.js | 69 - .../lib/dhtmlxScheduler/sources/layout.css | 194 -- .../lib/dhtmlxScheduler/sources/lightbox.css | 239 -- .../lib/dhtmlxScheduler/sources/lightbox.js | 466 --- .../lib/dhtmlxScheduler/sources/load.js | 202 -- .../lib/dhtmlxScheduler/sources/locale.js | 47 - .../lib/dhtmlxScheduler/sources/locale_ar.js | 42 - .../lib/dhtmlxScheduler/sources/locale_ca.js | 48 - .../lib/dhtmlxScheduler/sources/locale_cn.js | 53 - .../lib/dhtmlxScheduler/sources/locale_cs.js | 47 - .../lib/dhtmlxScheduler/sources/locale_da.js | 46 - .../lib/dhtmlxScheduler/sources/locale_de.js | 46 - .../lib/dhtmlxScheduler/sources/locale_el.js | 47 - .../lib/dhtmlxScheduler/sources/locale_es.js | 48 - .../lib/dhtmlxScheduler/sources/locale_fi.js | 47 - .../lib/dhtmlxScheduler/sources/locale_fr.js | 45 - .../lib/dhtmlxScheduler/sources/locale_he.js | 47 - .../lib/dhtmlxScheduler/sources/locale_hu.js | 47 - .../lib/dhtmlxScheduler/sources/locale_id.js | 5 - .../lib/dhtmlxScheduler/sources/locale_it.js | 45 - .../lib/dhtmlxScheduler/sources/locale_jp.js | 49 - .../lib/dhtmlxScheduler/sources/locale_nb.js | 45 - .../lib/dhtmlxScheduler/sources/locale_nl.js | 47 - .../lib/dhtmlxScheduler/sources/locale_no.js | 47 - .../lib/dhtmlxScheduler/sources/locale_pl.js | 47 - .../lib/dhtmlxScheduler/sources/locale_pt.js | 58 - .../sources/locale_recurring_cn.js | 6 - .../sources/locale_recurring_cs.js | 157 - .../sources/locale_recurring_da.js | 6 - .../sources/locale_recurring_de.js | 6 - .../sources/locale_recurring_el.js | 6 - .../sources/locale_recurring_es.js | 6 - .../sources/locale_recurring_fi.js | 6 - .../sources/locale_recurring_fr.js | 6 - .../sources/locale_recurring_it.js | 6 - .../sources/locale_recurring_nb.js | 5 - .../sources/locale_recurring_nl.js | 6 - .../sources/locale_recurring_pl.js | 6 - .../sources/locale_recurring_pt.js | 5 - .../sources/locale_recurring_ru.js | 6 - .../sources/locale_recurring_sv.js | 5 - .../sources/locale_recurring_ua.js | 6 - .../lib/dhtmlxScheduler/sources/locale_ru.js | 45 - .../lib/dhtmlxScheduler/sources/locale_si.js | 47 - .../lib/dhtmlxScheduler/sources/locale_sv.js | 52 - .../lib/dhtmlxScheduler/sources/locale_tr.js | 47 - .../lib/dhtmlxScheduler/sources/locale_ua.js | 47 - .../lib/dhtmlxScheduler/sources/mobile.css | 380 --- .../lib/dhtmlxScheduler/sources/mobile.js | 626 ---- .../lib/dhtmlxScheduler/sources/note.css | 134 - .../lib/dhtmlxScheduler/sources/recurring.css | 130 - .../lib/dhtmlxScheduler/sources/recurring.js | 639 ---- .../sources/repeat_template.html | 57 - .../sources/repeat_template_cn.html | 57 - .../sources/repeat_template_de.html | 60 - .../sources/repeat_template_el.html | 57 - .../sources/repeat_template_es.html | 57 - .../sources/repeat_template_fr.html | 57 - .../sources/repeat_template_it.html | 57 - .../sources/repeat_template_nl.html | 65 - .../sources/repeat_template_ru.html | 57 - .../lib/dhtmlxScheduler/sources/scheduler.js | 714 ----- .../static/lib/dhtmlxScheduler/whatsnew.txt | 21 + .../static/src/css/web_calendar.css | 1028 ------ 202 files changed, 12017 insertions(+), 14724 deletions(-) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_dhx_terrace.css create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_all_timed.js create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_dhx_terrace.js create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_grid_view.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js rename addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/{colapce-expand-icon.gif => collapse_expand_icon.gif} (100%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/images.png delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/lightbox.png delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/move.png delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/multi-days-bg.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/resize_dots.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/arrow_left.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/arrow_right.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/but_repeat.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/calendar.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/clock_big.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/clock_small.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/close_icon.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/collapse_expand_icon.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/controls.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/databg.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/databg_now.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/resize_dots.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/resizing.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab_wide.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/buttons.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_small.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/collapse_expand_icon.gif rename addons/web_calendar/static/lib/dhtmlxScheduler/codebase/{imgs => imgs_glossy}/controlls5.png (100%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-time-bg.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-days-bg.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-separator.gif create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/base.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/clear.css delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/config.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/connector.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxscheduler.css rename addons/web_calendar/static/lib/dhtmlxScheduler/{codebase/dhtmlxscheduler_debug.js => sources/dhtmlxscheduler.js} (59%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxscheduler_dhx_terrace.css create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxscheduler_glossy.css delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/event.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext.css create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_active_links.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_agenda_view.js => dhtmlxscheduler_agenda_view.js} (53%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_all_timed.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_collision.js => dhtmlxscheduler_collision.js} (71%) rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_cookie.js => dhtmlxscheduler_cookie.js} (76%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_dhx_terrace.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_editors.js => dhtmlxscheduler_editors.js} (61%) rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_expand.js => dhtmlxscheduler_expand.js} (94%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_grid_view.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_html_templates.js => dhtmlxscheduler_html_templates.js} (89%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_key_nav.js create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_limit.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_map_view.js => dhtmlxscheduler_map_view.js} (83%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_minical.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_multiselect.js => dhtmlxscheduler_multiselect.js} (58%) rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_multisource.js => dhtmlxscheduler_multisource.js} (84%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_offline.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_outerdrag.js => dhtmlxscheduler_outerdrag.js} (82%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_pdf.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_readonly.js => dhtmlxscheduler_readonly.js} (59%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_recurring.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_serialize.js => dhtmlxscheduler_serialize.js} (72%) create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_timeline.js create mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_tooltip.js rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_treetimeline.js => dhtmlxscheduler_treetimeline.js} (90%) rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/{property.js => ext/dhtmlxscheduler_units.js} (90%) rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_url.js => dhtmlxscheduler_url.js} (91%) rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_week_agenda.js => dhtmlxscheduler_week_agenda.js} (69%) rename addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/{ext_year_view.js => dhtmlxscheduler_year_view.js} (89%) delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_pdf.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/glossy.css delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/ical.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/layout.css delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/load.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ar.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ca.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_cn.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_cs.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_da.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_de.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_el.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_es.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_fi.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_fr.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_he.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_hu.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_id.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_it.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_jp.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_nb.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_nl.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_no.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_pl.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_pt.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cn.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.css delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/note.css delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/recurring.css delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/recurring.js delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html delete mode 100644 addons/web_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js diff --git a/addons/web_calendar/__openerp__.py b/addons/web_calendar/__openerp__.py index 86b971976f9..169cdb1317f 100644 --- a/addons/web_calendar/__openerp__.py +++ b/addons/web_calendar/__openerp__.py @@ -9,12 +9,14 @@ OpenERP Web Calendar view. 'version': '2.0', 'depends': ['web'], 'js': [ - 'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js', - 'static/lib/dhtmlxScheduler/sources/ext/ext_minical.js', + 'static/lib/dhtmlxScheduler/sources/dhtmlxscheduler.js', + 'static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_minical.js', 'static/src/js/calendar.js' ], 'css': [ - 'static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_ext.css', + #'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css', + 'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_dhx_terrace.css', + #'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css', 'static/src/css/web_calendar.css' ], 'qweb' : [ diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css index 6259fe59eba..2e4cae2bdbf 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css @@ -1,5 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ -.dhx_cal_container{background-color:#C2D5FC;font-family:Tahoma;font-size:8pt;position:relative;overflow:hidden;}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none;}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2F3A48;}.dhx_cal_navline div{position:absolute;top:2px;white-space:nowrap;}.dhx_cal_navline .dhx_cal_date{font-weight:600;left:210px;}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:20;top:0;}.dhx_cal_prev_button{background-image:url(imgs/buttons.png);background-position:0 0;width:29px;height:17px;left:50px;cursor:pointer;}.dhx_cal_next_button{background-image:url(imgs/buttons.png);background-position:-30px 0;width:29px;height:17px;left:80px;cursor:pointer;}.dhx_cal_today_button{background-image:url(imgs/buttons.png);background-position:-60px 0;width:75px;height:17px;left:112px;cursor:pointer;text-align:center;text-decoration:underline;}.dhx_cal_tab{width:59px;height:19px;text-align:center;text-decoration:underline;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{text-decoration:none;cursor:default;font-weight:bold;border:1px dotted #586A7E;border-bottom:0;background-color:#C2D5FC;}.dhx_cal_header{position:absolute;left:10px;top:23px;width:750px;border-top:1px dotted #8894A3;border-right:1px dotted #8894A3;z-index:2;overflow:hidden;color:#2F3A48;}.dhx_cal_data{border-top:1px dotted #8894A3;position:absolute;top:44px;width:600px;overflow-y:auto;overflow-x:hidden;}.dhx_scale_bar{position:absolute;text-align:center;background-color:#C2D5FC;padding-top:3px;border-left:1px dotted #586A7E;}.dhx_scale_holder{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg.png);}.dhx_scale_holder_now{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg_now.png);}.dhx_scale_hour{height:41px;width:50px;border-bottom:1px dotted #8894A3;background-color:#C2D5FC;text-align:center;line-height:40px;color:#586A7E;overflow:hidden;}.dhx_month_head{background-color:#EBEFF4;color:#2F3A48;border-right:1px dotted #586A7E;height:18px;padding-right:5px;padding-top:3px;text-align:right;}.dhx_month_body{border-right:1px dotted #586A7E;border-bottom:1px dotted #586A7E;background-color:#FFF;}.dhx_now .dhx_month_body{background-color:#E2EDFF;}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#ECECEC;}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#E2E3E6;color:#94A6BB;}.dhx_now .dhx_month_head{background-color:#D1DEF4;font-weight:bold;}.dhx_cal_drag{position:absolute;z-index:9999;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50);}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:9999;}.dhx_multi_day_icon,.dhx_multi_day{background-color:#E1E6FF;background-repeat:no-repeat;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);}.dhx_multi_day_icon_small{background-image:url(imgs/clock_small.gif);}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-position:center center;background-color:#E1E6FF;background-repeat:no-repeat;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff;}.dhx_cal_event div{background-color:#FFE763;border:1px solid #B7A543;color:#887A2E;overflow:hidden;width:100%;font-family:Tahoma;font-size:8pt;}.dhx_move_denied .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default;}.dhx_cal_event .dhx_header{height:1px;margin-left:1px;border-width:1px 1px 0 1px;cursor:pointer;}.dhx_cal_event .dhx_title{height:12px;border-width:0 1px 1px 1px;border-bottom-style:dotted;font-size:7pt;font-weight:bold;text-align:center;background-position:right;background-repeat:no-repeat;cursor:pointer;}.dhx_cal_event .dhx_body{border-width:0 1px 1px 1px;padding:5px;}.dhx_resize_denied .dhx_cal_event .dhx_footer{cursor:default;}.dhx_cal_event .dhx_footer{height:1px;margin-left:2px;border-width:0 1px 1px 1px;cursor:s-resize;}.dhx_cal_event_line{background-color:#FFE763;border:1px solid #B7A543;border-radius:3px;font-family:Tahoma;font-size:8pt;height:13px;padding-left:10px;color:#887A2E;cursor:pointer;overflow:hidden;}.dhx_cal_event_clear{font-family:Tahoma;font-size:8pt;height:13px;padding-left:2px;color:#887A2E;white-space:nowrap;overflow:hidden;cursor:pointer;}.dhx_in_move{background-color:#FFFF80;}div.dhx_cal_editor{background-color:#FFE763;border:1px solid #B7A543;border-top-style:dotted;z-index:999;position:absolute;overflow:hidden;}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid black;margin:none;padding:none;overflow:auto;}div.dhx_menu_head{background-image:url(imgs/controls.gif);background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default;}div.dhx_menu_icon{background-image:url(imgs/controls.gif);width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer;}div.icon_details{background-position:0 0;}div.icon_edit{background-position:-22px 0;}div.icon_save{background-position:-84px -1px;}div.icon_cancel{background-position:-62px 0;}div.icon_delete{background-position:-42px 0;}div.dhx_now_time{position:absolute;width:100%;border-bottom:2px dotted red;z-index:1;}div.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1;}.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:0 -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:0;}.dhx_cal_ltitle{padding:2px 0 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 0 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 0 2px 10px;overflow:hidden;}.dhx_cal_ltext textarea{background-color:#FFF4B5;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 0 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 0;width:21px;}.dhx_cancel_btn{background-image:url('./imgs/controls.gif');background-position:-63px 0;width:20px;}.dhx_delete_btn{background-image:url('./imgs/controls.gif');background-position:-42px 0;width:20px;}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:black;opacity:.1;filter:alpha(opacity=10);}.dhx_custom_button{padding:0 3px 0 3px;color:#887A2E;font-family:Tahoma;font-size:8pt;background-color:#FFE763;font-weight:normal;margin-right:5px;margin-top:0;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:0;}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:100px;height:20px;font-size:16px;padding:5px 0 0 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:0;}.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:0;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;}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #8894A3;width:100%;}.dhx_expand_icon{position:absolute;top:0;right:0;background-image:url(./imgs/colapce-expand-icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:16;}.dhx_agenda_area{width:100%;height:100%;overflow-y:auto;background-image:url(./imgs/databg.png);}.dhx_agenda_line{height:21px;clear:both;overflow:hidden;}.dhx_agenda_line div{float:left;width:188px;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #8894A3;}.dhx_v_border{position:absolute;left:186px;top:0;border-right:1px dotted #8894A3;width:1px;height:100%;}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_agenda_line span{padding-left:5px;line-height:21px;}.dhx_year_body{border-left:1px dotted #586A7E;}.dhx_year_week{position:relative;}.dhx_scale_bar_last{border-right:1px dotted #586A7E;}.dhx_year_month{height:18px;padding-top:3px;border:1px dotted #586A7E;text-align:center;vertical-align:middle;}.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:#E2E3E6!important;}.dhx_year_body .dhx_month_body{height:0;overflow:hidden;}.dhx_month_head.dhx_year_event{background-color:#FFE763;}.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head{cursor:default;}.dhx_tooltip{border:1px solid #BBB;background-image:url(./imgs/databg.png);position:absolute;z-index:9998;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden;}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden;}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center;}.dhx_text_disabled{color:#887A2E;font-family:Tahoma;font-size:8pt;}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;}.dhx_mini_calendar .dhx_month_head{cursor:pointer;}.dhx_mini_calendar .dhx_calendar_click{background-color:#C2D5FC;}.dhx_cal_navline div.dhx_minical_icon{width:18px;height:18px;left:190px;top:1px;cursor:pointer;background-image:url(./imgs/calendar.gif);}.dhx_matrix_scell{height:100%;}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhx_matrix_cell{background-color:white;}.dhx_matrix_line{overflow:hidden;}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto;}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E;}.dhx_matrix_scell.folder,.dhx_data_table.folder .dhx_matrix_cell{background-color:#969394;cursor:pointer;}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px;}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px;}.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;padding-right:3px;}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto;}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left;}.dhx_data_table.folder .dhx_matrix_cell{border-right:0;}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px;}.dhx_section_timeline select{width:552px;}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(./imgs/databg.png);}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_map_line{height:21px;clear:both;overflow:hidden;}.dhx_map{position:absolute;}.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .headline_description{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden;}.dhx_map_line.highlight{background-color:#C4C5CC;}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3;}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888',Direction=135,Strength=5);background-color:white;border-left:1px dotted #887A2E;border-top:1px dotted #887A2E;color:#887A2E;cursor:default;padding:10px;position:absolute;z-index:500;}.dhx_cal_checkbox label{padding-left:5px;}.dhx_cal_light .radio{padding:2px 0 2px 10px;}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px;}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0;}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px;}.dhx_cal_light .combo{padding:4px;}.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 #789;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;}.dhx_second_scale_bar{border-bottom:1px dotted #586A7E;padding-top:2px;}div.dhx_form_repeat input.radio{margin:-4px 0 0 -4px!ie;}div.dhx_form_repeat input.checkbox{margin:0 0 0 -4px!ie;}.dhx_form_repeat,.dhx_form_repeat input{padding:0;margin:0;padding-left:5px;font-family:Tahoma,Verdana;font-size:11px;line-height:24px;}.dhx_form_repeat{overflow:hidden;height:0;background-color:#FFF4B5;}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent;}.dhx_repeat_center,.dhx_repeat_left{height:115px;padding:10px 0 10px 10px;float:left;}.dhx_repeat_left{width:95px;}.dhx_repeat_center{width:335px;margin-top:12px;}.dhx_repeat_divider{float:left;height:115px;border-left:1px dotted #DCC43E;width:1px;}.dhx_repeat_right{float:right;height:115px;width:160px;padding:10px 3px 10px 10px;margin-top:7px;}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px 0 4px;line-height:18px;padding:0 0 0 2px;}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px 0 4px;}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px 0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px #7f9db9 solid;line-height:18px;}input.dhx_repeat_radio{margin-right:4px;}input.dhx_repeat_checkbox{margin:4px 4px 0 0;}.dhx_repeat_days td{padding-right:5px;}.dhx_repeat_days label{font-size:10px;}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;}.dhx_custom_button_recurring{background-image:url(./imgs/but_repeat.gif);background-position:-5px 20px;width:20px;margin-right:10px;}.dhx_cal_light_rec{width:640px;}.dhx_cal_light_rec .dhx_cal_larea{width:632px;}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px;}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px;} \ No newline at end of file +.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000;}.dhtmlx-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Tahoma;z-index:10000;margin:5px;margin-bottom:10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease;}.dhtmlx-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden;}.dhtmlx_modal_box{overflow:hidden;display:inline-block;min-width:300px;width:300px;text-align:center;position:fixed;background-color:#fff;background:-webkit-linear-gradient(top,#fff 1%,#d0d0d0 99%);background:-moz-linear-gradient(top,#fff 1%,#d0d0d0 99%);box-shadow:0 0 14px #888;font-family:Tahoma;z-index:20000;border-radius:6px;border:1px solid #fff;}.dhtmlx_popup_title{border-top-left-radius:5px;border-top-right-radius:5px;border-width:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 97%,#393939 97%);}.dhtmlx-info,.dhtmlx_popup_button,.dhtmlx_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer;}.dhtmlx_popup_text{overflow:hidden;}.dhtmlx_popup_controls{border-radius:6px;padding:5px;}.dhtmlx_popup_button,.dhtmlx_button{height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:6px;color:#FFF;}.dhtmlx_popup_button{min-width:120px;}div.dhx_modal_cover{background-color:#000;cursor:default;filter:alpha(opacity = 20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1;}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px;}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC);}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid #f00;}.dhtmlx_button,.dhtmlx_popup_button{box-shadow:0 0 4px #888;border:1px solid #838383;}.dhtmlx_button input,.dhtmlx_popup_button div{border:1px solid #FFF;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=);background-image:-webkit-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#3d3d3d 70%,#4c4c4c 99%);border-radius:6px;font-size:15px;font-weight:normal;-moz-box-sizing:content-box;box-sizing:content-box;color:#fff;padding:0;margin:0;vertical-align:top;height:28px;line-height:28px;}.dhtmlx_button input:focus,.dhtmlx_button input:active,.dhtmlx_popup_button div:active,.dhtmlx_popup_button div:focus{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==);background-image:-webkit-linear-gradient(top,#707070 1%,#4c4c4c 99%);background-image:-moz-linear-gradient(top,#707070 1%,#4c4c4c 99%);}.dhtmlx_popup_title{color:#fff;text-shadow:1px 1px #000;height:40px;line-height:40px;font-size:20px;}.dhtmlx_popup_text{margin:15px 15px 5px 15px;font-size:14px;color:#000;min-height:30px;border-radius:6px;}.dhtmlx-info,.dhtmlx-error{font-size:14px;color:#000;box-shadow:0 0 10px #888;padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff;}.dhtmlx-info div{padding:5px 10px 5px 10px;background-color:#fff;border-radius:3px;border:1px solid #B8B8B8;}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:0 0 10px #000;}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF;}.dhx_cal_container{background-color:#C2D5FC;font-family:Tahoma;font-size:8pt;position:relative;overflow:hidden;}.dhx_cal_container div{-moz-user-select:none;-moz-user-select:-moz-none;}.dhx_cal_navline{height:20px;position:absolute;z-index:3;width:750px;color:#2F3A48;}.dhx_cal_navline div{position:absolute;top:2px;white-space:nowrap;}.dhx_cal_navline .dhx_cal_date{font-weight:600;left:210px;padding-top:1px;}.dhx_cal_button .dhx_left_bg{width:1px;overflow:hidden;height:17px;z-index:20;top:0;}.dhx_cal_prev_button{background-image:url(imgs/buttons.png);background-position:0 0;width:29px;height:17px;left:50px;cursor:pointer;}.dhx_cal_next_button{background-image:url(imgs/buttons.png);background-position:-30px 0;width:29px;height:17px;left:80px;cursor:pointer;}.dhx_cal_today_button{background-image:url(imgs/buttons.png);background-position:-60px 0;width:75px;height:17px;left:112px;cursor:pointer;text-align:center;text-decoration:underline;}.dhx_cal_tab{width:59px;height:19px;text-align:center;text-decoration:underline;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{text-decoration:none;cursor:default;font-weight:bold;border:1px dotted #586A7E;border-bottom:0;background-color:#C2D5FC;}.dhx_cal_header{position:absolute;left:10px;top:23px;width:750px;border-top:1px dotted #8894A3;border-right:1px dotted #8894A3;z-index:2;overflow:hidden;color:#2F3A48;}.dhx_cal_data{border-top:1px dotted #8894A3;position:absolute;top:44px;width:600px;overflow-y:auto;overflow-x:hidden;}.dhx_scale_bar{position:absolute;text-align:center;background-color:#C2D5FC;padding-top:3px;border-left:1px dotted #586A7E;}.dhx_scale_holder{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg.png);}.dhx_scale_holder_now{position:absolute;border-right:1px dotted #586A7E;background-image:url(imgs/databg_now.png);}.dhx_scale_hour{height:41px;width:50px;border-bottom:1px dotted #8894A3;background-color:#C2D5FC;text-align:center;line-height:40px;color:#586A7E;overflow:hidden;}.dhx_month_head{background-color:#EBEFF4;color:#2F3A48;border-right:1px dotted #586A7E;height:18px;padding-right:5px;padding-top:3px;text-align:right;}.dhx_month_body{border-right:1px dotted #586A7E;border-bottom:1px dotted #586A7E;background-color:#FFF;}.dhx_now .dhx_month_body{background-color:#E2EDFF;}.dhx_after .dhx_month_body,.dhx_before .dhx_month_body{background-color:#ECECEC;}.dhx_after .dhx_month_head,.dhx_before .dhx_month_head{background-color:#E2E3E6;color:#94A6BB;}.dhx_now .dhx_month_head{background-color:#D1DEF4;font-weight:bold;}.dhx_cal_drag{position:absolute;z-index:9999;background-color:#FFE763;border:1px solid #B7A543;opacity:.5;filter:alpha(opacity=50);}.dhx_loading{position:absolute;width:128px;height:15px;background-image:url(imgs/loading.gif);z-index:9999;}.dhx_multi_day_icon,.dhx_multi_day{background-color:#E1E6FF;background-repeat:no-repeat;border-right:1px dotted #8894A3;}.dhx_multi_day{position:absolute;border-top:1px dotted #8894A3;}.dhx_multi_day_icon,.dhx_multi_day_icon_small{background-position:center center;background-color:#E1E6FF;background-repeat:no-repeat;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhx_multi_day_icon{background-image:url(imgs/clock_big.gif);}.dhx_multi_day_icon_small{background-image:url(imgs/clock_small.gif);}.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container{background-color:#d0e5ff;}.dhx_cal_event .dhx_header,.dhx_cal_event .dhx_title,.dhx_cal_event .dhx_body,.dhx_cal_event .dhx_footer{background-color:#FFE763;border:1px solid #B7A543;color:#887A2E;overflow:hidden;width:100%;font-family:Tahoma;font-size:8pt;}.dhx_move_denied .dhx_cal_event .dhx_header,.dhx_move_denied .dhx_cal_event .dhx_title{cursor:default;}.dhx_cal_event .dhx_header{height:1px;margin-left:1px;border-width:1px 1px 0 1px;cursor:pointer;}.dhx_cal_event .dhx_title{height:12px;border-width:0 1px 1px 1px;border-bottom-style:dotted;font-size:7pt;font-weight:bold;text-align:center;background-position:right;background-repeat:no-repeat;cursor:pointer;}.dhx_cal_event .dhx_body,.dhx_cal_event.dhx_cal_select_menu .dhx_body{border-width:0 1px 1px 1px;padding:5px;}.dhx_resize_denied{cursor:default!important;}.dhx_cal_event .dhx_event_resize{cursor:s-resize;}.dhx_cal_event .dhx_footer,.dhx_cal_event .dhx_select_menu_footer{height:1px;margin-left:2px;border-width:0 1px 1px 1px;}.dhx_cal_event_line{background-color:#FFE763;border:1px solid #B7A543;border-radius:3px;font-family:Tahoma;font-size:8pt;height:13px;padding-left:10px;color:#887A2E;cursor:pointer;overflow:hidden;}.dhx_cal_event_clear{font-family:Tahoma;font-size:8pt;height:13px;padding-left:2px;color:#887A2E;white-space:nowrap;overflow:hidden;cursor:pointer;}.dhx_in_move{background-color:#FFFF80;}div.dhx_cal_editor{background-color:#FFE763;border:1px solid #B7A543;border-top-style:dotted;z-index:999;position:absolute;overflow:hidden;}textarea.dhx_cal_editor{width:100%;height:100%;border:0 solid black;margin:none;padding:none;overflow:auto;}div.dhx_menu_head{background-image:url(imgs/controls.gif);background-position:0 -43px;width:10px;height:10px;margin-left:5px;margin-top:1px;border:none;cursor:default;}div.dhx_menu_icon{background-image:url(imgs/controls.gif);width:20px;height:20px;margin-left:-5px;margin-top:0;border:none;cursor:pointer;}div.icon_details{background-position:0 0;}div.icon_edit{background-position:-22px 0;}div.icon_save{background-position:-84px -1px;}div.icon_cancel{background-position:-62px 0;}div.icon_delete{background-position:-42px 0;}.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:0 -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:0;}.dhx_cal_ltitle{padding:2px 0 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 0 3px 10px;}.dhx_section_time{background-color:#DBCF8C;white-space:nowrap;}.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 0 2px 10px;overflow:hidden;}.dhx_cal_ltext textarea{background-color:#FFF4B5;overflow:auto;border:none;color:#887A2E;height:100%;width:100%;outline:none!important;resize:none;}.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 0 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 0;width:21px;}.dhx_cancel_btn{background-image:url('./imgs/controls.gif');background-position:-63px 0;width:20px;}.dhx_delete_btn{background-image:url('./imgs/controls.gif');background-position:-42px 0;width:20px;}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:black;opacity:.1;filter:alpha(opacity=10);}.dhx_custom_button{padding:0 3px 0 3px;color:#887A2E;font-family:Tahoma;font-size:8pt;background-color:#FFE763;font-weight:normal;margin-right:5px;margin-top:0;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:0;}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:100px;height:20px;font-size:16px;padding:5px 0 0 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:0;}.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:0;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;}.dhx_minical_popup{position:absolute;z-index:10100;width:251px;height:175px;}.dhx_scale_bar_header{position:absolute;border-bottom:1px dotted #8894A3;width:100%;}.dhx_expand_icon{position:absolute;top:0;right:0;background-image:url(./imgs/collapse_expand_icon.gif);width:18px;height:18px;cursor:pointer;background-position:0 18px;z-index:16;}.dhx_scheduler_agenda .dhx_cal_data{background-image:url(./imgs/databg.png);}.dhx_agenda_area{width:100%;overflow-y:auto;background-image:url(./imgs/databg.png);}.dhx_agenda_line{height:21px;clear:both;overflow:hidden;}.dhx_agenda_line div{float:left;width:188px;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_agenda_area .dhx_agenda_line div{border-right:0 dotted #8894A3;}.dhx_v_border{position:absolute;left:187px;top:0;border-right:1px dotted #8894A3;width:1px;height:100%;}.dhx_agenda_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_agenda_line span{padding-left:5px;line-height:21px;}.dhx_year_body{border-left:1px dotted #586A7E;}.dhx_year_week{position:relative;}.dhx_scale_bar_last{border-right:1px dotted #586A7E;}.dhx_year_month{height:18px;padding-top:3px;border:1px dotted #586A7E;text-align:center;vertical-align:middle;}.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:#E2E3E6!important;}.dhx_year_body .dhx_month_body{height:0;overflow:hidden;}.dhx_month_head.dhx_year_event{background-color:#FFE763;}.dhx_year_body .dhx_before .dhx_month_head,.dhx_year_body .dhx_after .dhx_month_head{cursor:default;}.dhx_tooltip{border:1px solid #BBB;background-image:url(./imgs/databg.png);position:absolute;z-index:9998;width:300px;height:auto;font-family:Tahoma;font-size:8pt;overflow:hidden;}.dhx_tooltip_line{line-height:20px;height:20px;overflow:hidden;}.dhx_tooltip_line .dhx_event_icon{width:20px;height:20px;padding-right:10px;float:left;border-width:0;position:relative;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_tooltip_date{float:left;width:auto;padding-left:5px;text-align:center;}.dhx_text_disabled{color:#887A2E;font-family:Tahoma;font-size:8pt;}.dhx_mini_calendar{-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;}.dhx_mini_calendar .dhx_month_head{cursor:pointer;}.dhx_mini_calendar .dhx_calendar_click{background-color:#C2D5FC;}.dhx_cal_navline div.dhx_minical_icon{width:18px;height:18px;left:190px;top:1px;cursor:pointer;background-image:url(./imgs/calendar.gif);}.dhx_matrix_scell{height:100%;}.dhx_matrix_cell,.dhx_matrix_scell{overflow:hidden;text-align:center;vertical-align:middle;border-bottom:1px dotted #8894A3;border-right:1px dotted #8894A3;}.dhx_matrix_cell{background-color:white;}.dhx_matrix_line{overflow:hidden;}.dhx_matrix_cell div,.dhx_matrix_scell div{overflow:hidden;text-align:center;height:auto;}.dhx_cal_lsection .dhx_readonly{font-size:9pt;font-size:8pt;padding:2px;color:#887A2E;}.dhx_cal_event_line .dhx_event_resize{cursor:w-resize;background:url(./imgs/resize_dots.png) repeat-y;position:absolute;top:0;width:4px;}.dhx_event_resize_start{left:0;}.dhx_event_resize_end{right:0;}.dhx_matrix_scell.folder,.dhx_data_table.folder .dhx_matrix_cell{background-color:#969394;cursor:pointer;}.dhx_matrix_scell .dhx_scell_level0{padding-left:5px;}.dhx_matrix_scell .dhx_scell_level1{padding-left:20px;}.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;padding-right:3px;}.dhx_matrix_scell.folder .dhx_scell_name{float:left;width:auto;}.dhx_matrix_scell.item .dhx_scell_name{padding-left:15px;text-align:left;}.dhx_data_table.folder .dhx_matrix_cell{border-right:0;}.dhx_section_timeline{overflow:hidden;padding:4px 0 2px 10px;}.dhx_section_timeline select{width:552px;}.dhx_map_area{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;background-image:url(./imgs/databg.png);}.dhx_map_line .dhx_event_icon{width:20px;border-width:0;background:url(./imgs/icon.png) no-repeat;background-position:5px 4px;cursor:pointer;}.dhx_map_line{height:21px;clear:both;overflow:hidden;}.dhx_map{position:absolute;}.dhx_map_line div{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .headline_description{float:left;border-right:1px dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .dhx_map_description{float:left;border-right:0 dotted #8894A3;text-align:center;line-height:21px;overflow:hidden;}.dhx_map_line .headline_date,.dhx_map_line .headline_description{border-left:0;}.dhx_map_line .line_description{float:left;border-right:1px dotted #8894A3;text-align:left;padding-left:5px;line-height:21px;overflow:hidden;}.dhx_map_line.highlight{background-color:#C4C5CC;}.dhx_map_area .dhx_map_line div{border-right:0 dotted #8894A3;}.dhtmlXTooltip.tooltip{-moz-box-shadow:3px 3px 3px #888;-webkit-box-shadow:3px 3px 3px #888;-o-box-shadow:3px 3px 3px #888;box-shadow:3px 3px 3px #888;filter:progid:DXImageTransform.Microsoft.Shadow(color='#888888',Direction=135,Strength=5);background-color:white;border-left:1px dotted #887A2E;border-top:1px dotted #887A2E;color:#887A2E;cursor:default;padding:10px;position:absolute;z-index:500;}.dhx_cal_checkbox label{padding-left:5px;}.dhx_cal_light .radio{padding:2px 0 2px 10px;}.dhx_cal_light .radio input,.dhx_cal_light .radio label{line-height:15px;}.dhx_cal_light .radio input{vertical-align:middle;margin:0;padding:0;}.dhx_cal_light .radio label{vertical-align:middle;padding-right:10px;}.dhx_cal_light .combo{padding:4px;}.dhx_cal_light_wide .dhx_combo_box{width:608px!important;left:10px;}.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 #789;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;}.dhx_second_scale_bar{border-bottom:1px dotted #586A7E;padding-top:2px;}.dhx_cal_header div div{border-left:1px dotted #8894A3;}.dhx_grid_area{width:100%;height:100%;overflow-y:auto;background-color:#FCFEFC;}.dhx_grid_area table{border-collapse:collapse;border-spacing:0;width:100%;table-layout:fixed;}.dhx_grid_area td{table-layout:fixed;text-align:center;}.dhx_grid_line{height:21px;clear:both;overflow:hidden;}.dhx_grid_line div{float:left;cursor:default;padding-top:0;padding-bottom:0;text-align:center;line-height:21px;overflow:hidden;}.dhx_grid_area td,.dhx_grid_line div{padding-left:8px;padding-right:8px;}.dhx_grid_area tr.dhx_grid_event{height:21px;overflow:hidden;margin:0 0 1px 0;}.dhx_grid_area tr.dhx_grid_event td{border-bottom:1px solid #ECEEF4;}.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td,.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td{border-bottom-width:0;border-bottom-style:none;}.dhx_grid_area tr.dhx_grid_event:nth-child(2n){background-color:#ECEEF4;;}.dhx_grid_area .dhx_grid_dummy{table-layout:auto;margin:0!important;padding:0!important;}.dhx_grid_v_border{position:absolute;border-right:1px solid #A4BED4;width:1px;height:100%;}.dhx_grid_event_selected{background-color:#9cc1db!important;color:white!important;}.dhx_grid_sort_desc .dhx_grid_view_sort{background-position:0 -55px;}.dhx_grid_sort_asc .dhx_grid_view_sort{background-position:0 -66px;}.dhx_grid_view_sort{width:10px;height:10px;position:absolute;border:none!important;top:5px;background-repeat:no-repeat;background-image:url(./imgs/images.png);}.dhx_marked_timespan{position:absolute;width:100%;}.dhx_time_block{position:absolute;width:100%;background:silver;opacity:.4;filter:alpha(opacity=40);z-index:1;}.dhx_time_block_reset{opacity:1;filter:alpha(opacity=100);}.dhx_scheduler_month .dhx_marked_timespan{display:none;}.dhx_mini_calendar .dhx_marked_timespan{display:none;}.dhx_now_time{width:100%;border-bottom:2px dotted red;z-index:1;}.dhx_scheduler_month .dhx_now_time{border-bottom:0;border-left:2px dotted red;}.dhx_matrix_now_time{border-left:2px dotted red;z-index:1;}div.dhx_form_repeat input.radio{margin:-4px 0 0 -4px!ie;}div.dhx_form_repeat input.checkbox{margin:0 0 0 -4px!ie;}.dhx_form_repeat,.dhx_form_repeat input{padding:0;margin:0;padding-left:5px;font-family:Tahoma,Verdana;font-size:11px;line-height:24px;}.dhx_form_repeat{overflow:hidden;height:0;background-color:#FFF4B5;}.dhx_cal_light_wide .dhx_form_repeat{background-color:transparent;}.dhx_repeat_center,.dhx_repeat_left{height:115px;padding:10px 0 10px 10px;float:left;}.dhx_repeat_left{width:95px;}.dhx_repeat_center{width:335px;margin-top:12px;}.dhx_repeat_divider{float:left;height:115px;border-left:1px dotted #DCC43E;width:1px;}.dhx_repeat_right{float:right;height:115px;width:160px;padding:10px 3px 10px 10px;margin-top:7px;}input.dhx_repeat_text{height:16px;width:27px;margin:0 4px 0 4px;line-height:18px;padding:0 0 0 2px;}.dhx_form_repeat select{height:20px;width:87px;padding:0 0 0 2px;margin:0 4px 0 4px;}input.dhx_repeat_date{height:18px;width:80px;padding:0 0 0 2px;margin:0 4px 0 4px;background-repeat:no-repeat;background-position:64px 0;border:1px #7f9db9 solid;line-height:18px;}input.dhx_repeat_radio{margin-right:4px;}input.dhx_repeat_checkbox{margin:4px 4px 0 0;}.dhx_repeat_days td{padding-right:5px;}.dhx_repeat_days label{font-size:10px;}.dhx_custom_button{width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;}.dhx_custom_button_recurring{background-image:url(./imgs/but_repeat.gif);background-position:-5px 20px;width:20px;margin-right:10px;}.dhx_cal_light_rec{width:640px;}.dhx_cal_light_rec .dhx_cal_larea{width:632px;}.dhx_cal_light_rec.dhx_cal_light_wide{width:816px;}.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{width:808px;} \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js index 2c78468e81e..5d48e5a13e0 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js @@ -1,194 +1,218 @@ /* 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 */ -dhtmlx=function(a){for(var b in a)dhtmlx[b]=a[b];return dhtmlx}; -dhtmlx.extend_api=function(a,b,c){var d=window[a];if(d)window[a]=function(a){if(a&&typeof a=="object"&&!a.tagName&&!(a instanceof Array)){var c=d.apply(this,b._init?b._init(a):arguments),g;for(g in dhtmlx)if(b[g])this[b[g]](dhtmlx[g]);for(g in a)if(b[g])this[b[g]](a[g]);else g.indexOf("on")==0&&this.attachEvent(g,a[g])}else c=d.apply(this,arguments);b._patch&&b._patch(this);return c||this},window[a].prototype=d.prototype,c&&dhtmlXHeir(window[a].prototype,c)}; +window.dhtmlx||(dhtmlx=function(a){for(var b in a)dhtmlx[b]=a[b];return dhtmlx}); +dhtmlx.extend_api=function(a,b,c){var d=window[a];if(d)window[a]=function(a){if(a&&typeof a=="object"&&!a.tagName){var c=d.apply(this,b._init?b._init(a):arguments),g;for(g in dhtmlx)if(b[g])this[b[g]](dhtmlx[g]);for(g in a)if(b[g])this[b[g]](a[g]);else g.indexOf("on")==0&&this.attachEvent(g,a[g])}else c=d.apply(this,arguments);b._patch&&b._patch(this);return c||this},window[a].prototype=d.prototype,c&&dhtmlXHeir(window[a].prototype,c)}; dhtmlxAjax={get:function(a,b){var c=new dtmlXMLLoaderObject(!0);c.async=arguments.length<3;c.waitCall=b;c.loadXML(a);return c},post:function(a,b,c){var d=new dtmlXMLLoaderObject(!0);d.async=arguments.length<4;d.waitCall=c;d.loadXML(a,!0,b);return d},getSync:function(a){return this.get(a,null,!0)},postSync:function(a,b){return this.post(a,b,null,!0)}}; -function dtmlXMLLoaderObject(a,b,c,d){this.xmlDoc="";this.async=typeof c!="undefined"?c:!0;this.onloadAction=a||null;this.mainObject=b||null;this.waitCall=null;this.rSeed=d||!1;return this} -dtmlXMLLoaderObject.prototype.waitLoadFunction=function(a){var b=!0;return this.check=function(){if(a&&a.onloadAction!=null&&(!a.xmlDoc.readyState||a.xmlDoc.readyState==4)&&b){b=!1;if(typeof a.onloadAction=="function")a.onloadAction(a.mainObject,null,null,null,a);if(a.waitCall)a.waitCall.call(this,a),a.waitCall=null}}}; -dtmlXMLLoaderObject.prototype.getXMLTopNode=function(a,b){if(this.xmlDoc.responseXML){var c=this.xmlDoc.responseXML.getElementsByTagName(a);c.length==0&&a.indexOf(":")!=-1&&(c=this.xmlDoc.responseXML.getElementsByTagName(a.split(":")[1]));var d=c[0]}else d=this.xmlDoc.documentElement;if(d)return this._retry=!1,d;if(_isIE&&!this._retry){var e=this.xmlDoc.responseText,b=this.xmlDoc;this._retry=!0;this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM");this.xmlDoc.async=!1;this.xmlDoc.loadXML(e);return this.getXMLTopNode(a, -b)}dhtmlxError.throwError("LoadXML","Incorrect XML",[b||this.xmlDoc,this.mainObject]);return document.createElement("DIV")};dtmlXMLLoaderObject.prototype.loadXMLString=function(a){try{var b=new DOMParser;this.xmlDoc=b.parseFromString(a,"text/xml")}catch(c){this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"),this.xmlDoc.async=this.async,this.xmlDoc.loadXML(a)}this.onloadAction(this.mainObject,null,null,null,this);if(this.waitCall)this.waitCall(),this.waitCall=null}; +function dtmlXMLLoaderObject(a,b,c,d){this.xmlDoc="";this.async=typeof c!="undefined"?c:!0;this.onloadAction=a||null;this.mainObject=b||null;this.waitCall=null;this.rSeed=d||!1;return this}dtmlXMLLoaderObject.count=0; +dtmlXMLLoaderObject.prototype.waitLoadFunction=function(a){var b=!0;return this.check=function(){if(a&&a.onloadAction!=null&&(!a.xmlDoc.readyState||a.xmlDoc.readyState==4)&&b){b=!1;dtmlXMLLoaderObject.count++;if(typeof a.onloadAction=="function")a.onloadAction(a.mainObject,null,null,null,a);if(a.waitCall)a.waitCall.call(this,a),a.waitCall=null}}}; +dtmlXMLLoaderObject.prototype.getXMLTopNode=function(a,b){if(this.xmlDoc.responseXML){var c=this.xmlDoc.responseXML.getElementsByTagName(a);c.length==0&&a.indexOf(":")!=-1&&(c=this.xmlDoc.responseXML.getElementsByTagName(a.split(":")[1]));var d=c[0]}else d=this.xmlDoc.documentElement;if(d)return this._retry=!1,d;if(!this._retry)return this._retry=!0,b=this.xmlDoc,this.loadXMLString(this.xmlDoc.responseText.replace(/^[\s]+/,""),!0),this.getXMLTopNode(a,b);dhtmlxError.throwError("LoadXML","Incorrect XML", +[b||this.xmlDoc,this.mainObject]);return document.createElement("DIV")};dtmlXMLLoaderObject.prototype.loadXMLString=function(a,b){if(_isIE)this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"),this.xmlDoc.async=this.async,this.xmlDoc.onreadystatechange=function(){},this.xmlDoc.loadXML(a);else{var c=new DOMParser;this.xmlDoc=c.parseFromString(a,"text/xml")}if(!b){if(this.onloadAction)this.onloadAction(this.mainObject,null,null,null,this);if(this.waitCall)this.waitCall(),this.waitCall=null}}; dtmlXMLLoaderObject.prototype.loadXML=function(a,b,c,d){this.rSeed&&(a+=(a.indexOf("?")!=-1?"&":"?")+"a_dhx_rSeed="+(new Date).valueOf());this.filePath=a;this.xmlDoc=!_isIE&&window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");if(this.async)this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this);this.xmlDoc.open(b?"POST":"GET",a,this.async);d?(this.xmlDoc.setRequestHeader("User-Agent","dhtmlxRPC v0.1 ("+navigator.userAgent+")"),this.xmlDoc.setRequestHeader("Content-type", -"text/xml")):b&&this.xmlDoc.setRequestHeader("Content-type","application/x-www-form-urlencoded");this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest");this.xmlDoc.send(c);this.async||(new this.waitLoadFunction(this))()};dtmlXMLLoaderObject.prototype.destructor=function(){return this.xmlDoc=this.mainObject=this.onloadAction=null}; +"text/xml")):b&&this.xmlDoc.setRequestHeader("Content-type","application/x-www-form-urlencoded");this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest");this.xmlDoc.send(c);this.async||(new this.waitLoadFunction(this))()}; +dtmlXMLLoaderObject.prototype.destructor=function(){return this.setXSLParamValue=this.getXMLTopNode=this.xmlNodeToJSON=this.doSerialization=this.loadXMLString=this.loadXML=this.doXSLTransToString=this.doXSLTransToObject=this.doXPathOpera=this.doXPath=this.xmlDoc=this.mainObject=this.onloadAction=this.filePath=this.rSeed=this.async=this._retry=this._getAllNamedChilds=this._filterXPath=null}; dtmlXMLLoaderObject.prototype.xmlNodeToJSON=function(a){for(var b={},c=0;c-1&&(_isChrome=!0); -if(navigator.userAgent.indexOf("Safari")!=-1||navigator.userAgent.indexOf("Konqueror")!=-1){var x=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Safari")+7,5));if(x>525){_isFF=!0;var w=1.9}else _isKHTML=!0}else navigator.userAgent.indexOf("Opera")!=-1?(_isOpera=!0,_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Opera")+6,3))):navigator.appName.indexOf("Microsoft")!=-1?(_isIE=!0,navigator.appVersion.indexOf("MSIE 8.0")!=-1&&document.compatMode!="BackCompat"&& -(_isIE=8)):(_isFF=!0,w=parseFloat(navigator.userAgent.split("rv:")[1])); +dhtmlDragAndDropObject.prototype.initFrameRoute=function(a,b){if(a)window.dhtmlDragAndDrop.preCreateDragCopy(),window.dhtmlDragAndDrop.dragStartNode=a.dhtmlDragAndDrop.dragStartNode,window.dhtmlDragAndDrop.dragStartObject=a.dhtmlDragAndDrop.dragStartObject,window.dhtmlDragAndDrop.dragNode=a.dhtmlDragAndDrop.dragNode,window.dhtmlDragAndDrop.gldragNode=a.dhtmlDragAndDrop.dragNode,window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag,window.waitDrag=0,!_isIE&&b&&(!_isFF||_FFrv<1.8)&&window.dhtmlDragAndDrop.calculateFramePosition(); +try{parent.dhtmlDragAndDrop&&parent!=window&&parent!=a&&parent.dhtmlDragAndDrop.initFrameRoute(window)}catch(c){}for(var d=0;d-1&&(_isChrome=!0); +if(navigator.userAgent.indexOf("Safari")!=-1||navigator.userAgent.indexOf("Konqueror")!=-1)_KHTMLrv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Safari")+7,5)),_KHTMLrv>525?(_isFF=!0,_FFrv=1.9):_isKHTML=!0;else if(navigator.userAgent.indexOf("Opera")!=-1)_isOpera=!0,_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Opera")+6,3));else if(navigator.appName.indexOf("Microsoft")!=-1){if(_isIE=!0,(navigator.appVersion.indexOf("MSIE 8.0")!=-1||navigator.appVersion.indexOf("MSIE 9.0")!= +-1||navigator.appVersion.indexOf("MSIE 10.0")!=-1)&&document.compatMode!="BackCompat")_isIE=8}else _isFF=!0,_FFrv=parseFloat(navigator.userAgent.split("rv:")[1]); dtmlXMLLoaderObject.prototype.doXPath=function(a,b,c,d){if(_isKHTML||!_isIE&&!window.XPathResult)return this.doXPathOpera(a,b);if(_isIE)return b||(b=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML),b||dhtmlxError.throwError("LoadXML","Incorrect XML",[b||this.xmlDoc,this.mainObject]),c!=null&&b.setProperty("SelectionNamespaces","xmlns:xsl='"+c+"'"),d=="single"?b.selectSingleNode(a):b.selectNodes(a)||[];else{var e=b;b||(b=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML);b||dhtmlxError.throwError("LoadXML", -"Incorrect XML",[b||this.xmlDoc,this.mainObject]);b.nodeName.indexOf("document")!=-1?e=b:(e=b,b=b.ownerDocument);var f=XPathResult.ANY_TYPE;if(d=="single")f=XPathResult.FIRST_ORDERED_NODE_TYPE;var g=[],h=b.evaluate(a,e,function(){return c},f,null);if(f==XPathResult.FIRST_ORDERED_NODE_TYPE)return h.singleNodeValue;for(var i=h.iterateNext();i;)g[g.length]=i,i=h.iterateNext();return g}};function z(){if(!this.catches)this.catches=[];return this}z.prototype.catchError=function(a,b){this.catches[a]=b}; -z.prototype.throwError=function(a,b,c){if(this.catches[a])return this.catches[a](a,b,c);if(this.catches.ALL)return this.catches.ALL(a,b,c);alert("Error type: "+a+"\nDescription: "+b);return null};window.dhtmlxError=new z; +"Incorrect XML",[b||this.xmlDoc,this.mainObject]);b.nodeName.indexOf("document")!=-1?e=b:(e=b,b=b.ownerDocument);var f=XPathResult.ANY_TYPE;if(d=="single")f=XPathResult.FIRST_ORDERED_NODE_TYPE;var g=[],h=b.evaluate(a,e,function(){return c},f,null);if(f==XPathResult.FIRST_ORDERED_NODE_TYPE)return h.singleNodeValue;for(var k=h.iterateNext();k;)g[g.length]=k,k=h.iterateNext();return g}};function v(){if(!this.catches)this.catches=[];return this}v.prototype.catchError=function(a,b){this.catches[a]=b}; +v.prototype.throwError=function(a,b,c){if(this.catches[a])return this.catches[a](a,b,c);if(this.catches.ALL)return this.catches.ALL(a,b,c);alert("Error type: "+a+"\nDescription: "+b);return null};window.dhtmlxError=new v; dtmlXMLLoaderObject.prototype.doXPathOpera=function(a,b){var c=a.replace(/[\/]+/gi,"/").split("/"),d=null,e=1;if(!c.length)return[];if(c[0]==".")d=[b];else if(c[0]=="")d=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(c[e].replace(/\[[^\]]*\]/g,"")),e++;else return[];for(;e
"+a+"
"}function e(a){if(!l.area)l.area=document.createElement("DIV"),l.area.className="dhtmlx_message_area",l.area.style[l.position]="5px",document.body.appendChild(l.area);l.hide(a.id);var b=document.createElement("DIV");b.innerHTML="
"+a.text+"
";b.className="dhtmlx-info dhtmlx-"+a.type;b.onclick=function(){l.hide(a.id); +a=null};l.position=="bottom"&&l.area.firstChild?l.area.insertBefore(b,l.area.firstChild):l.area.appendChild(b);a.expire>0&&(l.timers[a.id]=window.setTimeout(function(){l.hide(a.id)},a.expire));l.pull[a.id]=b;b=null;return a.id}function f(b,c,e){var f=document.createElement("DIV");f.className=" dhtmlx_modal_box dhtmlx-"+b.type;f.setAttribute("dhxbox",1);var g="";if(b.width)f.style.width=b.width;if(b.height)f.style.height=b.height;b.title&&(g+='
'+b.title+"
");g+= +'
'+(b.content?"":b.text)+'
';c&&(g+=d(b.ok||"OK",!0));e&&(g+=d(b.cancel||"Cancel",!1));if(b.buttons)for(var h=0;h";f.innerHTML=g;if(b.content){var i=b.content;typeof i=="string"&&(i=document.getElementById(i));if(i.style.display=="none")i.style.display="";f.childNodes[b.title?1:0].appendChild(i)}f.onclick=function(c){var c=c||event,d=c.target||c.srcElement;if(!d.className)d= +d.parentNode;d.className.split(" ")[0]=="dhtmlx_popup_button"&&(result=d.getAttribute("result"),result=result=="true"||(result=="false"?!1:result),a(b,result))};b.box=f;if(c||e)p=b;return f}function g(a,d,e){var g=a.tagName?a:f(a,d,e);a.hidden||c(!0);document.body.appendChild(g);var h=Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-g.offsetWidth)/2)),i=Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-g.offsetHeight)/2));g.style.top=a.position== +"top"?"-3px":i+"px";g.style.left=h+"px";g.onkeydown=b;g.focus();a.hidden&&dhtmlx.modalbox.hide(g);return g}function h(a){return g(a,!0,!1)}function k(a){return g(a,!0,!0)}function i(a){return g(a)}function j(a,b,c){typeof a!="object"&&(typeof b=="function"&&(c=b,b=""),a={text:a,type:b,callback:c});return a}function m(a,b,c,d){typeof a!="object"&&(a={text:a,type:b,expire:c,id:d});a.id=a.id||l.uid();a.expire=a.expire||l.expire;return a}var p=null;document.attachEvent?document.attachEvent("onkeydown", +b):document.addEventListener("keydown",b,!0);dhtmlx.alert=function(){text=j.apply(this,arguments);text.type=text.type||"confirm";return h(text)};dhtmlx.confirm=function(){text=j.apply(this,arguments);text.type=text.type||"alert";return k(text)};dhtmlx.modalbox=function(){text=j.apply(this,arguments);text.type=text.type||"alert";return i(text)};dhtmlx.modalbox.hide=function(a){for(;a&&a.getAttribute&&!a.getAttribute("dhxbox");)a=a.parentNode;a&&(a.parentNode.removeChild(a),c(!1))};var l=dhtmlx.message= +function(a,b,c,d){a=m.apply(this,arguments);a.type=a.type||"info";var f=a.type.split("-")[0];switch(f){case "alert":return h(a);case "confirm":return k(a);case "modalbox":return i(a);default:return e(a)}};l.seed=(new Date).valueOf();l.uid=function(){return l.seed++};l.expire=4E3;l.keyboard=!0;l.position="top";l.pull={};l.timers={};l.hideAll=function(){for(var a in l.pull)l.hide(a)};l.hide=function(a){var b=l.pull[a];b&&b.parentNode&&(window.setTimeout(function(){b.parentNode.removeChild(b);b=null}, +2E3),b.className+=" hidden",l.timers[a]&&window.clearTimeout(l.timers[a]),delete l.pull[a])}})(); +function dataProcessor(a){this.serverProcessor=a;this.action_param="!nativeeditor_status";this.object=null;this.updatedRows=[];this.autoUpdate=!0;this.updateMode="cell";this._tMode="GET";this.post_delim="_";this._waitMode=0;this._in_progress={};this._invalid={};this.mandatoryFields=[];this.messages=[];this.styles={updated:"font-weight:bold;",inserted:"font-weight:bold;",deleted:"text-decoration : line-through;",invalid:"background-color:FFE0E0;",invalid_cell:"border-bottom:2px solid red;",error:"color:red;", +clear:"font-weight:normal;text-decoration:none;"};this.enableUTFencoding(!0);dhtmlxEventable(this);return this} dataProcessor.prototype={setTransactionMode:function(a,b){this._tMode=a;this._tSend=b},escape:function(a){return this._utf?encodeURIComponent(a):escape(a)},enableUTFencoding:function(a){this._utf=convertStringToBoolean(a)},setDataColumns:function(a){this._columns=typeof a=="string"?a.split(","):a},getSyncState:function(){return!this.updatedRows.length},enableDataNames:function(a){this._endnm=convertStringToBoolean(a)},enablePartialDataSend:function(a){this._changed=convertStringToBoolean(a)},setUpdateMode:function(a, b){this.autoUpdate=a=="cell";this.updateMode=a;this.dnd=b},ignore:function(a,b){this._silent_mode=!0;a.call(b||window);this._silent_mode=!1},setUpdated:function(a,b,c){if(!this._silent_mode){var d=this.findRow(a),c=c||"updated",e=this.obj.getUserData(a,this.action_param);e&&c=="updated"&&(c=e);b?(this.set_invalid(a,!1),this.updatedRows[d]=a,this.obj.setUserData(a,this.action_param,c),this._in_progress[a]&&(this._in_progress[a]="wait")):this.is_invalid(a)||(this.updatedRows.splice(d,1),this.obj.setUserData(a, this.action_param,""));b||this._clearUpdateFlag(a);this.markRow(a,b,c);b&&this.autoUpdate&&this.sendData(a)}},_clearUpdateFlag:function(){},markRow:function(a,b,c){var d="",e=this.is_invalid(a);e&&(d=this.styles[e],b=!0);if(this.callEvent("onRowMark",[a,b,c,e])&&(d=this.styles[b?c:"clear"]+d,this.obj[this._methods[0]](a,d),e&&e.details)){d+=this.styles[e+"_cell"];for(var f=0;f0?"&dhx_no_header=1":"")},b=function(b){return a.call(this,b)+(this._connector_sorting||"")+(this._connector_filter||"")},c=function(a,c,d){this._connector_sorting="&dhx_sort["+c+"]="+d;return b.call(this, a)},d=function(a,c,d){for(var h=0;h0)this.xy.nav_height=e;var f=this.xy.scale_height+ this.xy.nav_height+(this._quirks?-2:0);this.set_xy(this._els.dhx_cal_data[0],a,b-(f+2),0,f+2)};scheduler.set_xy=function(a,b,c,d,e){a.style.width=Math.max(0,b)+"px";a.style.height=Math.max(0,c)+"px";if(arguments.length>3)a.style.left=d+"px",a.style.top=e+"px"}; -scheduler.get_elements=function(){for(var a=this._obj.getElementsByTagName("DIV"),b=0;bf.getHours()&&(f.setHours(g),a=f.valueOf());b=a+e}var h=new Date(b);f.valueOf()==h.valueOf()&&h.setTime(h.valueOf()+e);d.start_date=d.start_date||f;d.end_date=d.end_date||h;d.text=d.text||this.locale.labels.new_event;d.id=this._drag_id= -this.uid();this._drag_mode="new-size";this._loading=!0;this.addEvent(d);this.callEvent("onEventCreated",[this._drag_id,c]);this._loading=!1;this._drag_event={};this._on_mouse_up(c)}; -scheduler._on_dbl_click=function(a,b){b=b||a.target||a.srcElement;if(!this.config.readonly){var c=b.className.split(" ")[0];switch(c){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 d=this._mouse_coords(a),e=this._min_date.valueOf()+(d.y*this.config.time_step+(this._table_view?0:d.x)*1440)*6E4,e=this._correct_shift(e);this.addEventNow(e,null,a);break;case "dhx_body":case "dhx_wa_ev_body":case "dhx_cal_event_line":case "dhx_cal_event_clear":var f= -this._locate_event(b);if(!this.callEvent("onDblClick",[f,a]))break;this.config.details_on_dblclick||this._table_view||!this.getEvent(f)._timed?this.showLightbox(f):this.edit(f);break;case "":if(b.parentNode)return scheduler._on_dbl_click(a,b.parentNode);default:var g=this["dblclick_"+c];g&&g.call(this,a)}}}; +scheduler.get_elements=function(){for(var a=this._obj.getElementsByTagName("DIV"),b=0;bf.getHours()&&(f.setHours(g),a=f.valueOf());b=a.valueOf()+e}var h=new Date(b);f.valueOf()==h.valueOf()&&h.setTime(h.valueOf()+e);d.start_date=d.start_date||f;d.end_date=d.end_date||h;d.text=d.text||this.locale.labels.new_event; +d.id=this._drag_id=this.uid();this._drag_mode="new-size";this._loading=!0;this.addEvent(d);this.callEvent("onEventCreated",[this._drag_id,c]);this._loading=!1;this._drag_event={};this._on_mouse_up(c)}; +scheduler._on_dbl_click=function(a,b){b=b||a.target||a.srcElement;if(!this.config.readonly){var c=b.className.split(" ")[0];switch(c){case "dhx_scale_holder":case "dhx_scale_holder_now":case "dhx_month_body":case "dhx_wa_day_data":case "dhx_marked_timespan":if(!scheduler.config.dblclick_create)break;this.addEventNow(this.getActionData(a).date,null,a);break;case "dhx_cal_event":case "dhx_wa_ev_body":case "dhx_agenda_line":case "dhx_grid_event":case "dhx_cal_event_line":case "dhx_cal_event_clear":var d= +this._locate_event(b);if(!this.callEvent("onDblClick",[d,a]))break;this.config.details_on_dblclick||this._table_view||!this.getEvent(d)._timed||!this.config.select?this.showLightbox(d):this.edit(d);break;case "dhx_time_block":case "dhx_cal_container":break;default:var e=this["dblclick_"+c];if(e)e.call(this,a);else if(b.parentNode&&b!=this)return scheduler._on_dbl_click(a,b.parentNode)}}}; scheduler._mouse_coords=function(a){var b,c=document.body,d=document.documentElement;b=a.pageX||a.pageY?{x:a.pageX,y:a.pageY}:{x:a.clientX+(c.scrollLeft||d.scrollLeft||0)-c.clientLeft,y:a.clientY+(c.scrollTop||d.scrollTop||0)-c.clientTop};b.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width);b.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els.dhx_cal_data[0].scrollTop;b.ev=a;var e=this["mouse_"+this._mode];if(e)return e.call(this, -b);if(this._table_view){for(var f=0,f=1;fb.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}; -scheduler._close_not_saved=function(){if((new Date).valueOf()-(scheduler._new_event||0)>500&&scheduler._edit_id){var a=scheduler.locale.labels.confirm_closing;(!a||confirm(a))&&scheduler.editStop(scheduler.config.positive_closing)}};scheduler._correct_shift=function(a,b){return a-=((new Date(scheduler._min_date)).getTimezoneOffset()-(new Date(a)).getTimezoneOffset())*6E4*(b?-1:1)}; -scheduler._on_mouse_move=function(a){if(this._drag_mode){var b=this._mouse_coords(a);if(!this._drag_pos||b.custom||this._drag_pos.x!=b.x||this._drag_pos.y!=b.y){this._edit_id!=this._drag_id&&this._close_not_saved();this._drag_pos=b;if(this._drag_mode=="create"){this._close_not_saved();this._loading=!0;var c=this._min_date.valueOf()+(b.y*this.config.time_step+(this._table_view?0:b.x)*1440)*6E4,c=this._correct_shift(c);if(!this._drag_start){this._drag_start=c;return}var d=c;if(d==this._drag_start)return; -this._drag_id=this.uid();this.addEvent(new Date(this._drag_start),new Date(d),this.locale.labels.new_event,this._drag_id,b.fields);this.callEvent("onEventCreated",[this._drag_id,a]);this._loading=!1;this._drag_mode="new-size"}var e=this.getEvent(this._drag_id);if(this._drag_mode=="move")c=this._min_date.valueOf()+(b.y*this.config.time_step+b.x*1440)*6E4,!b.custom&&this._table_view&&(c+=this.date.time_part(e.start_date)*1E3),c=this._correct_shift(c),d=e.end_date.valueOf()-(e.start_date.valueOf()-c); -else{c=e.start_date.valueOf();if(this._table_view)d=this._min_date.valueOf()+b.y*this.config.time_step*6E4+(b.custom?0:864E5),this._mode=="month"&&(d=this._correct_shift(d,!1));else if(d=this.date.date_part(new Date(e.end_date)).valueOf()+b.y*this.config.time_step*6E4,this._els.dhx_cal_data[0].style.cursor="s-resize",this._mode=="week"||this._mode=="day")d=this._correct_shift(d);if(this._drag_mode=="new-size")if(d<=this._drag_start)var f=b.shift||(this._table_view&&!b.custom?864E5:0),c=d-(b.shift? -0:f),d=this._drag_start+(f||this.config.time_step*6E4);else c=this._drag_start;else d<=c&&(d=c+this.config.time_step*6E4)}var g=new Date(d-1),h=new Date(c);if(this._table_view||g.getDate()==h.getDate()&&g.getHours()this._min_date&&t.getHours()>=this.config.first_hour&&t.getHours()b.y)break;b.y=Math.ceil((Math.max(0,b.x/this._cols[0])+Math.max(0,f-1)*7)*1440/this.config.time_step);if(scheduler._drag_mode||this._mode=="month")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.min(this._cols.length-1,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};scheduler._close_not_saved=function(){if((new Date).valueOf()-(scheduler._new_event||0)>500&&scheduler._edit_id){var a=scheduler.locale.labels.confirm_closing;scheduler._dhtmlx_confirm(a,scheduler.locale.labels.title_confirm_closing,function(){scheduler.editStop(scheduler.config.positive_closing)})}}; +scheduler._correct_shift=function(a,b){return a-=((new Date(scheduler._min_date)).getTimezoneOffset()-(new Date(a)).getTimezoneOffset())*6E4*(b?-1:1)}; +scheduler._on_mouse_move=function(a){if(this._drag_mode){var b=this._mouse_coords(a);if(!this._drag_pos||b.custom||this._drag_pos.x!=b.x||this._drag_pos.y!=b.y){var c,d;this._edit_id!=this._drag_id&&this._close_not_saved();this._drag_pos=b;if(this._drag_mode=="create"){this._close_not_saved();this._loading=!0;c=this._get_date_from_pos(b).valueOf();var e=this.callEvent("onBeforeEventCreated",[a]);if(!e)return;if(!this._drag_start){this._drag_start=c;return}d=c;if(d==this._drag_start)return;this._drag_id= +this.uid();this.addEvent(new Date(this._drag_start),new Date(d),this.locale.labels.new_event,this._drag_id,b.fields);this.callEvent("onEventCreated",[this._drag_id,a]);this._loading=!1;this._drag_mode="new-size"}var f=this.getEvent(this._drag_id);if(this._drag_mode=="move")c=this._min_date.valueOf()+(b.y*this.config.time_step+b.x*1440)*6E4,!b.custom&&this._table_view&&(c+=this.date.time_part(f.start_date)*1E3),c=this._correct_shift(c),d=f.end_date.valueOf()-(f.start_date.valueOf()-c);else{c=f.start_date.valueOf(); +d=f.end_date.valueOf();if(this._table_view){var g=this._min_date.valueOf()+b.y*this.config.time_step*6E4+(b.custom?0:864E5);this._mode=="month"&&(g=this._correct_shift(g,!1));b.resize_from_start?c=g:d=g}else if(d=this.date.date_part(new Date(f.end_date)).valueOf()+b.y*this.config.time_step*6E4,this._els.dhx_cal_data[0].style.cursor="s-resize",this._mode=="week"||this._mode=="day")d=this._correct_shift(d);if(this._drag_mode=="new-size")if(d<=this._drag_start){var h=b.shift||(this._table_view&&!b.custom? +864E5:0);c=d-(b.shift?0:h);d=this._drag_start+(h||this.config.time_step*6E4)}else c=this._drag_start;else d<=c&&(d=c+this.config.time_step*6E4)}var k=new Date(d-1),i=new Date(c);if(this._table_view||k.getDate()==i.getDate()&&k.getHours()";for(var o=0;o<7;o++){l+= -"=d?m="dhx_after":c.valueOf()==e.valueOf()&&(m="dhx_now");l+=" class='"+m+" "+this.templates.month_date_class(c,e)+"' ";l+=">
"+this.templates.month_day(c)+"
";c=this.date.add(c,1,"day")}l+="";i[k]=j;j+=this._colsS.height}l+="";this._max_date=c;a.innerHTML=l;return c}; -scheduler.getLabel=function(a,b){for(var c=this.config.lightbox.sections,d=0;d11?"pm":"am")+"';case "%A":return'"+(date.getHours()>11?"PM":"AM")+"';case "%s":return'"+scheduler.date.to_fixed(date.getSeconds())+"';case "%W":return'"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+"';default:return a}});b&&(a=a.replace(/date\.get/g, -"date.getUTC"));return new Function("date",'return "'+a+'";')},str_to_date:function(a,b){for(var c="var temp=date.split(/[^0-9a-zA-Z]+/g);",d=a.match(/%[a-zA-Z]/g),e=0;e50?1900:2000);";break;case "%g":case "%G":case "%h":case "%H":c+="set[3]=temp["+e+"]||0;";break;case "%i":c+="set[4]=temp["+e+"]||0;";break;case "%Y":c+= -"set[0]=temp["+e+"]||0;";break;case "%a":case "%A":c+="set[3]=set[3]%12+((temp["+e+"]||'').toLowerCase()=='am'?0:12);";break;case "%s":c+="set[5]=temp["+e+"]||0;";break;case "%M":c+="set[1]=scheduler.locale.date.month_short_hash[temp["+e+"]]||0;";break;case "%F":c+="set[1]=scheduler.locale.date.month_full_hash[temp["+e+"]]||0;"}var f="set[0],set[1],set[2],set[3],set[4],set[5]";b&&(f=" Date.UTC("+f+")");return new Function("date","var set=[0,0,1,0,0,0]; "+c+" return new Date("+f+");")},getISOWeek:function(a){if(!a)return!1; -var b=a.getDay();b===0&&(b=7);var c=new Date(a.valueOf());c.setDate(a.getDate()+(4-b));var d=c.getFullYear(),e=Math.round((c.getTime()-(new Date(d,0,1)).getTime())/864E5),f=1+Math.floor(e/7);return f},getUTCISOWeek:function(a){return this.getISOWeek(a)}}; +scheduler._reset_month_scale=function(a,b,c){var d=scheduler.date.add(b,1,"month"),e=new Date;this.date.date_part(e);this.date.date_part(c);var f=Math.ceil(Math.round((d.valueOf()-c.valueOf())/864E5)/7),g=[],h=Math.floor(a.clientHeight/f)-22;this._colsS.height=h+22;for(var k=this._colsS.heights=[],i=0;i<=7;i++)g[i]=" style='height:"+h+"px; width:"+((this._cols[i]||0)-1)+"px;' ";var j=0;this._min_date=c;for(var m="",p=[],i=0;i";for(var l=0;l<7;l++){m+= +"=d?n="dhx_after":c.valueOf()==e.valueOf()&&(n="dhx_now");m+=" class='"+n+" "+this.templates.month_date_class(c,e)+"' ";m+=">
"+this.templates.month_day(c)+"
";p.push(c);c=this.date.add(c,1,"day")}m+="";k[i]=j;j+=this._colsS.height}m+="
";this._max_date=c;a.innerHTML=m;this._scales={};for(var r=a.getElementsByTagName("div"),i=0;i11?"pm":"am")+"';case "%A":return'"+(date.getHours()>11?"PM":"AM")+"'; +case "%s":return'"+scheduler.date.to_fixed(date.getSeconds())+"';case "%W":return'"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+"';default:return a}});b&&(a=a.replace(/date\.get/g,"date.getUTC"));return new Function("date",'return "'+a+'";')},str_to_date:function(a,b){for(var c="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);",d=a.match(/%[a-zA-Z]/g),e=0;e50?1900:2000);";break;case "%g":case "%G":case "%h":case "%H":c+="set[3]=temp["+e+"]||0;";break;case "%i":c+="set[4]=temp["+e+"]||0;";break;case "%Y":c+="set[0]=temp["+e+"]||0;";break;case "%a":case "%A":c+="set[3]=set[3]%12+((temp["+e+"]||'').toLowerCase()=='am'?0:12);";break;case "%s":c+="set[5]=temp["+e+"]||0;";break;case "%M":c+="set[1]=scheduler.locale.date.month_short_hash[temp["+e+"]]||0;";break;case "%F":c+="set[1]=scheduler.locale.date.month_full_hash[temp["+ +e+"]]||0;"}var f="set[0],set[1],set[2],set[3],set[4],set[5]";b&&(f=" Date.UTC("+f+")");return new Function("date","var set=[0,0,1,0,0,0]; "+c+" return new Date("+f+");")},getISOWeek:function(a){if(!a)return!1;var b=a.getDay();b===0&&(b=7);var c=new Date(a.valueOf());c.setDate(a.getDate()+(4-b));var d=c.getFullYear(),e=Math.round((c.getTime()-(new Date(d,0,1)).getTime())/864E5),f=1+Math.floor(e/7);return f},getUTCISOWeek:function(a){return this.getISOWeek(a)},convert_to_utc:function(a){return new Date(a.getUTCFullYear(), +a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds())}}; scheduler.locale={date:{month_full:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),month_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),day_full:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(",")},labels:{dhx_cal_today_button:"Today",day_tab:"Day",week_tab:"Week",month_tab:"Month",new_event:"New event",icon_save:"Save",icon_cancel:"Cancel",icon_details:"Details", -icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Event will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",full_day:"Full day",confirm_recurring:"Do you want to edit the whole set of repeated events?",section_recurring:"Repeat event",button_recurring:"Disabled",button_recurring_open:"Enabled",agenda_tab:"Agenda",date:"Date",description:"Description",year_tab:"Year",week_agenda_tab:"Agenda"}}; +icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Event will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",full_day:"Full day",confirm_recurring:"Do you want to edit the whole set of repeated events?",section_recurring:"Repeat event",button_recurring:"Disabled",button_recurring_open:"Enabled",button_edit_series:"Edit series",button_edit_occurrence:"Edit occurrence",agenda_tab:"Agenda",date:"Date",description:"Description", +year_tab:"Year",week_agenda_tab:"Agenda",grid_tab:"Grid"}}; scheduler.config={default_date:"%j %M %Y",month_date:"%F %Y",load_date:"%Y-%m-%d",week_date:"%l",day_date:"%D, %F %j",hour_date:"%H:%i",month_day:"%d",xml_date:"%m/%d/%Y %H:%i",api_date:"%d-%m-%Y %H:%i",hour_size_px:42,time_step:5,start_on_monday:1,first_hour:0,last_hour:24,readonly:!1,drag_resize:1,drag_move:1,drag_create:1,dblclick_create:1,edit_on_create:1,details_on_create:0,click_form_details:0,cascade_event_display:!1,cascade_event_count:4,cascade_event_margin:30,drag_lightbox:!0,preserve_scroll:!0, -server_utc:!1,positive_closing:!1,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:!0},{name:"time",height:72,type:"time",map_to:"auto"}]},repeat_date_of_end:"01.01.2010"};scheduler.templates={}; -scheduler.init_templates=function(){var a=scheduler.date.date_to_str,b=scheduler.config,c=function(a,b){for(var c in b)a[c]||(a[c]=b[c])};c(scheduler.templates,{day_date:a(b.default_date),month_date:a(b.month_date),week_date:function(a,b){return scheduler.templates.day_date(a)+" – "+scheduler.templates.day_date(scheduler.date.add(b,-1,"day"))},day_scale_date:a(b.default_date),month_scale_date:a(b.week_date),week_scale_date:a(b.day_date),hour_scale:a(b.hour_date),time_picker:a(b.hour_date),event_date:a(b.hour_date), -month_day:a(b.month_day),xml_date:scheduler.date.str_to_date(b.xml_date,b.server_utc),load_format:a(b.load_date,b.server_utc),xml_format:a(b.xml_date,b.server_utc),api_date:scheduler.date.str_to_date(b.api_date),event_header:function(a,b){return scheduler.templates.event_date(a)+" - "+scheduler.templates.event_date(b)},event_text:function(a,b,c){return c.text},event_class:function(){return""},month_date_class:function(){return""},week_date_class:function(){return""},event_bar_date:function(a){return scheduler.templates.event_date(a)+ -" "},event_bar_text:function(a,b,c){return c.text}});this.callEvent("onTemplatesReady",[])};scheduler.uid=function(){if(!this._seed)this._seed=(new Date).valueOf();return this._seed++};scheduler._events={};scheduler.clearAll=function(){this._events={};this._loaded={};this.clear_view()}; +select:!0,server_utc:!1,positive_closing:!1,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:!0},{name:"time",height:72,type:"time",map_to:"auto"}]},highlight_displayed_event:!0,displayed_event_color:"#ffc5ab",displayed_event_text_color:"#7e2727"};scheduler.templates={}; +scheduler.init_templates=function(){var a=scheduler.locale.labels;a.dhx_save_btn=a.icon_save;a.dhx_cancel_btn=a.icon_cancel;a.dhx_delete_btn=a.icon_delete;var b=scheduler.date.date_to_str,c=scheduler.config,d=function(a,b){for(var c in b)a[c]||(a[c]=b[c])};d(scheduler.templates,{day_date:b(c.default_date),month_date:b(c.month_date),week_date:function(a,b){return scheduler.templates.day_date(a)+" – "+scheduler.templates.day_date(scheduler.date.add(b,-1,"day"))},day_scale_date:b(c.default_date), +month_scale_date:b(c.week_date),week_scale_date:b(c.day_date),hour_scale:b(c.hour_date),time_picker:b(c.hour_date),event_date:b(c.hour_date),month_day:b(c.month_day),xml_date:scheduler.date.str_to_date(c.xml_date,c.server_utc),load_format:b(c.load_date,c.server_utc),xml_format:b(c.xml_date,c.server_utc),api_date:scheduler.date.str_to_date(c.api_date),event_header:function(a,b){return scheduler.templates.event_date(a)+" - "+scheduler.templates.event_date(b)},event_text:function(a,b,c){return c.text}, +event_class:function(){return""},month_date_class:function(){return""},week_date_class:function(){return""},event_bar_date:function(a){return scheduler.templates.event_date(a)+" "},event_bar_text:function(a,b,c){return c.text}});this.callEvent("onTemplatesReady",[])};scheduler.uid=function(){if(!this._seed)this._seed=(new Date).valueOf();return this._seed++};scheduler._events={};scheduler.clearAll=function(){this._events={};this._loaded={};this.clear_view()}; scheduler.addEvent=function(a,b,c,d,e){if(!arguments.length)return this.addEventNow();var f=a;if(arguments.length!=1)f=e||{},f.start_date=a,f.end_date=b,f.text=c,f.id=d;f.id=f.id||scheduler.uid();f.text=f.text||"";if(typeof f.start_date=="string")f.start_date=this.templates.api_date(f.start_date);if(typeof f.end_date=="string")f.end_date=this.templates.api_date(f.end_date);var g=(this.config.event_duration||this.config.time_step)*6E4;f.start_date.valueOf()==f.end_date.valueOf()&&f.end_date.setTime(f.end_date.valueOf()+ -g);f._timed=this.is_one_day_event(f);var h=!this._events[f.id];this._events[f.id]=f;this.event_updated(f);this._loading||this.callEvent(h?"onEventAdded":"onEventChanged",[f.id,f])};scheduler.deleteEvent=function(a,b){var c=this._events[a];if(b||this.callEvent("onBeforeEventDelete",[a,c])&&this.callEvent("onConfirmedBeforeEventDelete",[a,c]))c&&(delete this._events[a],this.unselect(a),this.event_updated(c)),this.callEvent("onEventDeleted",[a])};scheduler.getEvent=function(a){return this._events[a]}; +g);f._timed=this.is_one_day_event(f);var h=!this._events[f.id];this._events[f.id]=f;this.event_updated(f);this._loading||this.callEvent(h?"onEventAdded":"onEventChanged",[f.id,f]);return f.id};scheduler.deleteEvent=function(a,b){var c=this._events[a];if(b||this.callEvent("onBeforeEventDelete",[a,c])&&this.callEvent("onConfirmedBeforeEventDelete",[a,c]))c&&(delete this._events[a],this.unselect(a),this.event_updated(c)),this.callEvent("onEventDeleted",[a,c])};scheduler.getEvent=function(a){return this._events[a]}; scheduler.setEvent=function(a,b){this._events[a]=b};scheduler.for_rendered=function(a,b){for(var c=this._rendered.length-1;c>=0;c--)this._rendered[c].getAttribute("event_id")==a&&b(this._rendered[c],c)};scheduler.changeEventId=function(a,b){if(a!=b){var c=this._events[a];if(c)c.id=b,this._events[b]=c,delete this._events[a];this.for_rendered(a,function(a){a.setAttribute("event_id",b)});if(this._select_id==a)this._select_id=b;if(this._edit_id==a)this._edit_id=b;this.callEvent("onEventIdChange",[a,b])}}; (function(){for(var a="text,Text,start_date,StartDate,end_date,EndDate".split(","),b=function(a){return function(b){return scheduler.getEvent(b)[a]}},c=function(a){return function(b,c){var d=scheduler.getEvent(b);d[a]=c;d._changed=!0;d._timed=this.is_one_day_event(d);scheduler.event_updated(d,!0)}},d=0;dthis._colsS.height-22){for(var i=g.rows[h].cells,k=0;kb.id?1:-1:a.start_date>b.start_date?1:-1});for(var c=[],d=[],e=0;el)l=i[j]._sorder;f._sorder=l+1;f._inner=!1}else f._sorder=0;i.push(f);i.length>(i.max_count||0)?(i.max_count=i.length,f._count= -i.length):f._count=f._count?f._count:1}if(g=this.config.last_hour)if(d.push(f),a[e]=f=this._copy_event(f),g=this.config.last_hour&&(f.end_date.setMinutes(0),f.end_date.setHours(this.config.last_hour)),f.start_date>f.end_date||g==this.config.last_hour)a.splice(e,1),e--}if(!b){for(e=0;ec.id?1:-1:a.start_date>c.start_date?1:-1})}; -scheduler._pre_render_events_table=function(a,b){this._time_order(a);for(var c=[],d=[[],[],[],[],[],[],[]],e=this._colsS.heights,f,g=this._cols.length,h=0;hthis._max_date)j=this._max_date;var l=this.locate_holder_day(k,!1,i);i._sday=l%g;var o=this.locate_holder_day(j,!0,i)||g;i._eday=o%g||g;i._length=o-l;i._sweek=Math.floor((this._correct_shift(k.valueOf(),1)-this._min_date.valueOf())/(864E5*g));var m= -d[i._sweek],n;for(n=0;n";if(this._quirks7)m.firstChild.style.height=g- -12+"px";this._editor=m.firstChild;this._editor.onkeypress=function(a){if((a||event).shiftKey)return!0;var b=(a||event).keyCode;b==scheduler.keys.edit_save&&scheduler.editStop(!0);b==scheduler.keys.edit_cancel&&scheduler.editStop(!1)};this._editor.onselectstart=function(a){return(a||event).cancelBubble=!0};m.firstChild.focus();this._els.dhx_cal_data[0].scrollLeft=0;m.firstChild.select()}if(this._select_id==a.id){if(this.config.cascade_event_display&&this._drag_mode)o.style.zIndex=1;for(var n=this.config["icons_"+ -(this._edit_id==a.id?"edit":"select")],p="",q=a.color?"background-color:"+a.color+";":"",v=a.textColor?"color:"+a.textColor+";":"",s=0;s
";var r=this._render_v_bar(a.id,i-b+1,f,b,n.length*20+26,"","
",p,!0);r.style.left=i-b+1;this._els.dhx_cal_data[0].appendChild(r);this._rendered.push(r)}}}}; -scheduler._render_v_bar=function(a,b,c,d,e,f,g,h,i){var k=document.createElement("DIV"),j=this.getEvent(a),l="dhx_cal_event",o=scheduler.templates.event_class(j.start_date,j.end_date,j);o&&(l=l+" "+o);var m=j.color?"background-color:"+j.color+";":"",n=j.textColor?"color:"+j.textColor+";":"",p='
';p+='
 
'; -p+='
'+g+"
";p+='
'+h+"
";p+='
';k.innerHTML=p;return k.firstChild};scheduler.locate_holder=function(a){return this._mode=="day"?this._els.dhx_cal_data[0].firstChild:this._els.dhx_cal_data[0].childNodes[a]}; -scheduler.locate_holder_day=function(a,b){var c=Math.floor((this._correct_shift(a,1)-this._min_date)/864E5);b&&this.date.time_part(a)&&c++;return c}; -scheduler.render_event_bar=function(a){var b=this._rendered_location,c=this._colsS[a._sday],d=this._colsS[a._eday];d==c&&(d=this._colsS[a._eday+1]);var e=this.xy.bar_height,f=this._colsS.heights[a._sweek]+(this._colsS.height?this.xy.month_scale_height+2:2)+a._sorder*e,g=document.createElement("DIV"),h=a._timed?"dhx_cal_event_clear":"dhx_cal_event_line",i=scheduler.templates.event_class(a.start_date,a.end_date,a);i&&(h=h+" "+i);var k=a.color?"background-color:"+a.color+";":"",j=a.textColor?"color:"+ -a.textColor+";":"",l='
';a._timed&&(l+=scheduler.templates.event_bar_date(a.start_date,a.end_date,a));l+=scheduler.templates.event_bar_text(a.start_date,a.end_date,a)+"
";l+="";g.innerHTML=l;this._rendered.push(g.firstChild);b.appendChild(g.firstChild)}; -scheduler._locate_event=function(a){for(var b=null;a&&!b&&a.getAttribute;)b=a.getAttribute("event_id"),a=a.parentNode;return b};scheduler.edit=function(a){if(this._edit_id!=a)this.editStop(!1,a),this._edit_id=a,this.updateEvent(a)};scheduler.editStop=function(a,b){if(!(b&&this._edit_id==b)){var c=this.getEvent(this._edit_id);if(c){if(a)c.text=this._editor.value;this._editor=this._edit_id=null;this.updateEvent(c.id);this._edit_stop_event(c,a)}}}; -scheduler._edit_stop_event=function(a,b){this._new_event?(b?this.callEvent("onEventAdded",[a.id,a]):this.deleteEvent(a.id,!0),this._new_event=null):b&&this.callEvent("onEventChanged",[a.id,a])};scheduler.getEvents=function(a,b){var c=[],d;for(d in this._events){var e=this._events[d];e&&e.start_datea&&c.push(e)}return c};scheduler._loaded={}; +scheduler.get_visible_events=function(a){var b=[],c;for(c in this._events)this.is_visible_events(this._events[c])&&(!a||this._events[c]._timed)&&this.filter_event(c,this._events[c])&&b.push(this._events[c]);return b};scheduler.filter_event=function(a,b){var c=this["filter_"+this._mode];return c?c(a,b):!0}; +scheduler.render_view_data=function(a,b){if(!a){if(this._not_render){this._render_wait=!0;return}this._render_wait=!1;this.clear_view();a=this.get_visible_events(!(this._table_view||this.config.multi_day))}if(this.config.multi_day&&!this._table_view){for(var c=[],d=[],e=0;ethis._colsS.height-22){for(var k=g.rows[h].cells,i=0;ib.id?1:-1:a.start_date>b.start_date?1:-1});var c=[],d=[];this._min_mapped_duration=Math.ceil(this.xy.min_event_height*60/this.config.hour_size_px);for(var e=0;er)r=j[n]._sorder;f._sorder=r+1;f._inner=!1}else f._sorder=0;j.push(f);j.length>(j.max_count||0)?(j.max_count=j.length,f._count=j.length):f._count=f._count?f._count:1}if(k=this.config.last_hour)if(d.push(f),a[e]=f=this._copy_event(f),k=this.config.last_hour&&(f.end_date.setMinutes(0), +f.end_date.setHours(this.config.last_hour)),f.start_date>f.end_date||k==this.config.last_hour)a.splice(e,1),e--}if(!b){for(e=0;ec.id?1:-1:a.start_date>c.start_date?1:-1})}; +scheduler._pre_render_events_table=function(a,b){this._time_order(a);for(var c=[],d=[[],[],[],[],[],[],[]],e=this._colsS.heights,f,g=this._cols.length,h={},k=0;kthis._max_date)m.last_chunk=!1,l=this._max_date;var n=this.locate_holder_day(p,!1,i);i._sday=n%g;var r=this.locate_holder_day(l,!0,i)||g;i._eday=r%g||g;i._length= +r-n;i._sweek=Math.floor((this._correct_shift(p.valueOf(),1)-this._min_date.valueOf())/(864E5*g));var o=d[i._sweek],q;for(q=0;q";if(this._quirks7)r.firstChild.style.height=k-12+"px";this._editor=r.firstChild;this._editor.onkeydown= +function(a){if((a||event).shiftKey)return!0;var b=(a||event).keyCode;b==scheduler.keys.edit_save&&scheduler.editStop(!0);b==scheduler.keys.edit_cancel&&scheduler.editStop(!1)};this._editor.onselectstart=function(a){return(a||event).cancelBubble=!0};r.firstChild.focus();this._els.dhx_cal_data[0].scrollLeft=0;r.firstChild.select()}if(this.xy.menu_width!==0&&this._select_id==a.id){if(this.config.cascade_event_display&&this._drag_mode)n.style.zIndex=1;for(var o=this.config["icons_"+(this._edit_id==a.id? +"edit":"select")],q="",s=a.color?"background-color: "+a.color+";":"",t=a.textColor?"color: "+a.textColor+";":"",u=0;u";var w=this._render_v_bar(a.id,j-b+1,h,b,o.length*20+26-2,"","
",q,!0);w.style.left=j-b+1;this._els.dhx_cal_data[0].appendChild(w);this._rendered.push(w)}}}}; +scheduler._render_v_bar=function(a,b,c,d,e,f,g,h,k){var i=document.createElement("DIV"),j=this.getEvent(a),m=k?"dhx_cal_event dhx_cal_select_menu":"dhx_cal_event",p=scheduler.templates.event_class(j.start_date,j.end_date,j);p&&(m=m+" "+p);var l=j.color?"background:"+j.color+";":"",n=j.textColor?"color:"+j.textColor+";":"",r='
';i.innerHTML=r;var o=i.cloneNode(!0).firstChild; +if(!scheduler.renderEvent||k||!scheduler.renderEvent(o,j)){var o=i.firstChild,q='
 
';q+='
'+g+"
";q+='
'+h+"
";var s="dhx_event_resize dhx_footer";k&&(s="dhx_resize_denied "+s);q+='
';o.innerHTML=q}return o};scheduler.locate_holder=function(a){return this._mode=="day"?this._els.dhx_cal_data[0].firstChild:this._els.dhx_cal_data[0].childNodes[a]};scheduler.locate_holder_day=function(a,b){var c=Math.floor((this._correct_shift(a,1)-this._min_date)/864E5);b&&this.date.time_part(a)&&c++;return c}; +scheduler.render_event_bar=function(a){var b=this._rendered_location,c=this._colsS[a._sday],d=this._colsS[a._eday];d==c&&(d=this._colsS[a._eday+1]);var e=this.xy.bar_height,f=this._colsS.heights[a._sweek]+(this._colsS.height?this.xy.month_scale_height+2:2)+a._sorder*e,g=document.createElement("DIV"),h="dhx_cal_event_clear";a._timed||(h="dhx_cal_event_line",a.hasOwnProperty("_first_chunk")&&a._first_chunk&&(h+=" dhx_cal_event_line_start"),a.hasOwnProperty("_last_chunk")&&a._last_chunk&&(h+=" dhx_cal_event_line_end")); +var k=scheduler.templates.event_class(a.start_date,a.end_date,a);k&&(h=h+" "+k);var i=a.color?"background:"+a.color+";":"",j=a.textColor?"color:"+a.textColor+";":"",m='
',a=scheduler.getEvent(a.id);a._timed&&(m+=scheduler.templates.event_bar_date(a.start_date,a.end_date,a));m+=scheduler.templates.event_bar_text(a.start_date,a.end_date,a)+"
";m+=""; +g.innerHTML=m;this._rendered.push(g.firstChild);b.appendChild(g.firstChild)};scheduler._locate_event=function(a){for(var b=null;a&&!b&&a.getAttribute;)b=a.getAttribute("event_id"),a=a.parentNode;return b};scheduler.edit=function(a){if(this._edit_id!=a)this.editStop(!1,a),this._edit_id=a,this.updateEvent(a)}; +scheduler.editStop=function(a,b){if(!(b&&this._edit_id==b)){var c=this.getEvent(this._edit_id);if(c){if(a)c.text=this._editor.value;this._editor=this._edit_id=null;this.updateEvent(c.id);this._edit_stop_event(c,a)}}};scheduler._edit_stop_event=function(a,b){this._new_event?(b?this.callEvent("onEventAdded",[a.id,a]):a&&this.deleteEvent(a.id,!0),this._new_event=null):b&&this.callEvent("onEventChanged",[a.id,a])}; +scheduler.getEvents=function(a,b){var c=[],d;for(d in this._events){var e=this._events[d];e&&(!a&&!b||e.start_datea)&&c.push(e)}return c};scheduler.getRenderedEvent=function(a){if(a){for(var b=scheduler._rendered,c=0;cthis._min_date;)b=this.date.add(b,-1,this._load_mode);c=b;for(var e=!0;cb&&this._loaded[d(f)]);if(c<=b)return!1;for(dhtmlxAjax.get(a+"&from="+d(b)+"&to="+d(c),function(a){scheduler.on_load(a)});b"},set_value:function(a,b){a.innerHTML=b||""},get_value:function(a){return a.innerHTML||""},focus:function(){}},textarea:{render:function(a){var b=(a.height||"130")+"px";return"
"},set_value:function(a,b){a.firstChild.value=b||""},get_value:function(a){return a.firstChild.value}, -focus:function(a){var b=a.firstChild;b.select();b.focus()}},select:{render:function(a){for(var b=(a.height||"23")+"px",c="
";return c},set_value:function(a,b){if(typeof b=="undefined")b=(a.firstChild.options[0]||{}).value;a.firstChild.value=b||""},get_value:function(a){return a.firstChild.value},focus:function(a){var b= -a.firstChild;b.select&&b.select();b.focus()}},time:{render:function(){var a=scheduler.config,b=this.date.date_part(new Date),c=1440,d=0;scheduler.config.limit_time_select&&(c=60*a.last_hour+1,d=60*a.first_hour,b.setHours(a.first_hour));for(var e=" ";return"
"+e+"  –  "+e+"
"},set_value:function(a, -b,c){function d(a,b,c){a[b+0].value=Math.round((c.getHours()*60+c.getMinutes())/scheduler.config.time_step)*scheduler.config.time_step;a[b+1].value=c.getDate();a[b+2].value=c.getMonth();a[b+3].value=c.getFullYear()}var e=a.getElementsByTagName("select");if(scheduler.config.full_day){if(!a._full_day){var f="";scheduler.config.wide_form||(f=a.previousSibling.innerHTML+ -f);a.previousSibling.innerHTML=f;a._full_day=!0}var g=a.previousSibling.getElementsByTagName("input")[0],h=scheduler.date.time_part(c.start_date)===0&&scheduler.date.time_part(c.end_date)===0&&c.end_date.valueOf()-c.start_date.valueOf()<1728E5;g.checked=h;for(var i in e)e[i].disabled=g.checked;g.onclick=function(){if(g.checked){var a=new Date(c.start_date),b=new Date(c.end_date);scheduler.date.date_part(a);b=scheduler.date.add(a,1,"day")}for(var f in e)e[f].disabled=g.checked;d(e,0,a||c.start_date); -d(e,4,b||c.end_date)}}if(scheduler.config.auto_end_date&&scheduler.config.event_duration)for(var k=function(){c.start_date=new Date(e[3].value,e[2].value,e[1].value,0,e[0].value);c.end_date.setTime(c.start_date.getTime()+scheduler.config.event_duration*6E4);d(e,4,c.end_date)},j=0;j<4;j++)e[j].onchange=k;d(e,0,c.start_date);d(e,4,c.end_date)},get_value:function(a,b){s=a.getElementsByTagName("select");b.start_date=new Date(s[3].value,s[2].value,s[1].value,0,s[0].value);b.end_date=new Date(s[7].value, -s[6].value,s[5].value,0,s[4].value);if(b.end_date<=b.start_date)b.end_date=scheduler.date.add(b.start_date,scheduler.config.time_step,"minute")},focus:function(a){a.getElementsByTagName("select")[0].focus()}}}; +focus:function(a){var b=a.firstChild;b.select();b.focus()}},select:{render:function(a){for(var b=(a.height||"23")+"px",c="
";return c},set_value:function(a,b,c,d){var e=a.firstChild;if(!e._dhx_onchange&&d.onchange)e.onchange=d.onchange,e._dhx_onchange=!0;if(typeof b=="undefined")b=(e.options[0]||{}).value; +e.value=b||""},get_value:function(a){return a.firstChild.value},focus:function(a){var b=a.firstChild;b.select&&b.select();b.focus()}},time:{render:function(a){var b=scheduler.config,c=this.date.date_part(new Date),d=1440,e=0;scheduler.config.limit_time_select&&(d=60*b.last_hour+1,e=60*b.first_hour,c.setHours(b.first_hour));var f=" ";return"
"+ +f+"  –  "+f+"
"},set_value:function(a,b,c,d){function e(a,b,c){for(var e=d._time_values,f=c.getHours()*60+c.getMinutes(),g=f,h=!1,i=0;i";scheduler.config.wide_form||(h=a.previousSibling.innerHTML+h);a.previousSibling.innerHTML=h;a._full_day=!0}var k=a.previousSibling.getElementsByTagName("input")[0];k.checked=scheduler.date.time_part(c.start_date)===0&&scheduler.date.time_part(c.end_date)===0;g[0].disabled=k.checked;g[g.length/2].disabled=k.checked;k.onclick=function(){if(k.checked){var b={};scheduler.form_blocks.time.get_value(a,b);var d=scheduler.date.date_part(b.start_date), +f=scheduler.date.date_part(b.end_date);if(+f==+d||+f>=+d&&(c.end_date.getHours()!=0||c.end_date.getMinutes()!=0))f=scheduler.date.add(f,1,"day")}g[0].disabled=k.checked;g[g.length/2].disabled=k.checked;e(g,0,d||c.start_date);e(g,4,f||c.end_date)}}if(f.auto_end_date&&f.event_duration)for(var i=function(){var a=new Date(g[3].value,g[2].value,g[1].value,0,g[0].value),b=new Date(a.getTime()+scheduler.config.event_duration*6E4);e(g,4,b)},j=0;j<4;j++)g[j].onchange=i;e(g,0,c.start_date);e(g,4,c.end_date)}, +get_value:function(a,b){s=a.getElementsByTagName("select");b.start_date=new Date(s[3].value,s[2].value,s[1].value,0,s[0].value);b.end_date=new Date(s[7].value,s[6].value,s[5].value,0,s[4].value);if(b.end_date<=b.start_date)b.end_date=scheduler.date.add(b.start_date,scheduler.config.time_step,"minute");return{start_date:new Date(b.start_date),end_date:new Date(b.end_date)}},focus:function(a){a.getElementsByTagName("select")[0].focus()}}}; scheduler.showCover=function(a){if(a){a.style.display="block";var b=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop,c=window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft,d=window.innerHeight||document.documentElement.clientHeight;a.style.top=b?Math.round(b+Math.max((d-a.offsetHeight)/2,0))+"px":Math.round(Math.max((d-a.offsetHeight)/2,0)+9)+"px";a.style.left=document.documentElement.scrollWidth>document.body.offsetWidth?Math.round(c+(document.body.offsetWidth- -a.offsetWidth)/2)+"px":Math.round((document.body.offsetWidth-a.offsetWidth)/2)+"px"}this.show_cover()};scheduler.showLightbox=function(a){if(a&&this.callEvent("onBeforeLightbox",[a])){var b=this._get_lightbox();this.showCover(b);this._fill_lightbox(a,b);this.callEvent("onLightbox",[a])}}; -scheduler._fill_lightbox=function(a,b){var c=this.getEvent(a),d=b.getElementsByTagName("span");scheduler.templates.lightbox_header?(d[1].innerHTML="",d[2].innerHTML=scheduler.templates.lightbox_header(c.start_date,c.end_date,c)):(d[1].innerHTML=this.templates.event_header(c.start_date,c.end_date,c),d[2].innerHTML=(this.templates.event_bar_text(c.start_date,c.end_date,c)||"").substr(0,70));for(var e=this.config.lightbox.sections,f=0;f
"+scheduler.locale.labels[c[d]]+"
";c=this.config.buttons_right;for(d=0;d
"+scheduler.locale.labels[c[d]]+"
";b+="";a.innerHTML=b;if(scheduler.config.drag_lightbox)a.firstChild.onmousedown= -scheduler._ready_to_dnd,a.firstChild.onselectstart=function(){return!1},a.firstChild.style.cursor="pointer",scheduler._init_dnd_events();document.body.insertBefore(a,document.body.firstChild);this._lightbox=a;for(var e=this.config.lightbox.sections,b="",d=0;d
"+this.locale.labels["button_"+ -e[d].button]+"
");this.config.wide_form&&(b+="
");b+="
"+g+this.locale.labels["section_"+e[d].name]+"
"+f.render.call(this,e[d]);b+="
"}}var h=a.getElementsByTagName("div");h[1].innerHTML=b;this.setLightboxSize();this._init_lightbox_events(this);a.style.display="none";a.style.visibility="visible"}return this._lightbox};scheduler._lightbox_template="
 
"; +scheduler.save_lightbox=function(){var a=this._lightbox_out({},this._lame_copy(this.getEvent(this._lightbox_id)));if(!this.checkEvent("onEventSave")||this.callEvent("onEventSave",[this._lightbox_id,a,this._new_event]))this._empty_lightbox(a),this.hide_lightbox()};scheduler.startLightbox=function(a,b){this._lightbox_id=a;this._lightbox=b;this.showCover(b)}; +scheduler.endLightbox=function(a,b){this._edit_stop_event(scheduler.getEvent(this._lightbox_id),a);a&&scheduler.render_view_data();this.hideCover(b);this._lightbox_id=null};scheduler.resetLightbox=function(){scheduler._lightbox&&scheduler._lightbox.parentNode.removeChild(scheduler._lightbox);scheduler._lightbox=null};scheduler.cancel_lightbox=function(){this.callEvent("onEventCancel",[this._lightbox_id,this._new_event]);this.endLightbox(!1);this.hide_lightbox()}; +scheduler._init_lightbox_events=function(){this.getLightbox().onclick=function(a){var b=a?a.target:event.srcElement;if(!b.className)b=b.previousSibling;if(b&&b.className)switch(b.className){case "dhx_save_btn":scheduler.save_lightbox();break;case "dhx_delete_btn":var c=scheduler.locale.labels.confirm_deleting;scheduler._dhtmlx_confirm(c,scheduler.locale.labels.title_confirm_deleting,function(){scheduler.deleteEvent(scheduler._lightbox_id);scheduler._new_event=null;scheduler.hide_lightbox()});break; +case "dhx_cancel_btn":scheduler.cancel_lightbox();break;default:if(b.getAttribute("dhx_button"))scheduler.callEvent("onLightboxButton",[b.className,b,a]);else{var d,e,f;if(b.className.indexOf("dhx_custom_button")!=-1)b.className.indexOf("dhx_custom_button_")!=-1?(d=b.parentNode.getAttribute("index"),f=b.parentNode.parentNode):(d=b.getAttribute("index"),f=b.parentNode,b=b.firstChild);d&&(e=scheduler.form_blocks[scheduler.config.lightbox.sections[d].type],e.button_click(d,b,f,f.nextSibling))}}};this.getLightbox().onkeydown= +function(a){switch((a||event).keyCode){case scheduler.keys.edit_save:if((a||event).shiftKey)break;scheduler.save_lightbox();break;case scheduler.keys.edit_cancel:scheduler.cancel_lightbox()}}};scheduler.setLightboxSize=function(){var a=this._lightbox;if(a){var b=a.childNodes[1];b.style.height="0px";b.style.height=b.scrollHeight+"px";a.style.height=b.scrollHeight+scheduler.xy.lightbox_additional_height+"px";b.style.height=b.scrollHeight+"px"}}; +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(a){if(scheduler._dnd_start_lb){if(!document.dhx_unselectable)document.body.className+=" dhx_unselectable",document.dhx_unselectable=!0;var b=scheduler.getLightbox(),c=a&&a.target?[a.pageX,a.pageY]:[event.clientX,event.clientY];b.style.top=scheduler._lb_start[1]+c[1]-scheduler._dnd_start_lb[1]+"px";b.style.left=scheduler._lb_start[0]+c[0]-scheduler._dnd_start_lb[0]+"px"}}; +scheduler._ready_to_dnd=function(a){var b=scheduler.getLightbox();scheduler._lb_start=[parseInt(b.style.left,10),parseInt(b.style.top,10)];scheduler._dnd_start_lb=a&&a.target?[a.pageX,a.pageY]:[event.clientX,event.clientY]};scheduler._finish_dnd=function(){if(scheduler._lb_start)scheduler._lb_start=scheduler._dnd_start_lb=!1,document.body.className=document.body.className.replace(" dhx_unselectable",""),document.dhx_unselectable=!1}; +scheduler.getLightbox=function(){if(!this._lightbox){var a=document.createElement("DIV");a.className="dhx_cal_light";scheduler.config.wide_form&&(a.className+=" dhx_cal_light_wide");scheduler.form_blocks.recurring&&(a.className+=" dhx_cal_light_rec");/msie|MSIE 6/.test(navigator.userAgent)&&(a.className+=" dhx_ie6");a.style.visibility="hidden";for(var b=this._lightbox_template,c=this.config.buttons_left,d=0;d
"+scheduler.locale.labels[c[d]]+"
";c=this.config.buttons_right;for(d=0;d
"+scheduler.locale.labels[c[d]]+"
";b+="";a.innerHTML=b;if(scheduler.config.drag_lightbox)a.firstChild.onmousedown=scheduler._ready_to_dnd,a.firstChild.onselectstart=function(){return!1},a.firstChild.style.cursor="pointer",scheduler._init_dnd_events(); +document.body.insertBefore(a,document.body.firstChild);this._lightbox=a;for(var e=this.config.lightbox.sections,b="",d=0;d
"+this.locale.labels["button_"+e[d].button]+"
");this.config.wide_form&&(b+="
");b+="
"+ +g+this.locale.labels["section_"+e[d].name]+"
"+f.render.call(this,e[d]);b+="
"}}for(var h=a.getElementsByTagName("div"),d=0;d"+e(a)+""};var f=scheduler.templates.week_scale_date;scheduler.templates.week_scale_date=function(a){return""+f(a)+""};dhtmlxEvent(this._obj,"click",function(a){var b=a.target||event.srcElement, -c=b.getAttribute("jump_to");if(c)return scheduler.setCurrentView(d(c),"day"),a&&a.preventDefault&&a.preventDefault(),!1})}); +c=b.getAttribute("jump_to");if(c)return scheduler.setCurrentView(d(c),scheduler.config.active_link_view),a&&a.preventDefault&&a.preventDefault(),!1})}); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js index c0eb363b8d5..2871439cc68 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js @@ -1,10 +1,11 @@ /* 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 */ -scheduler.date.add_agenda=function(b){return new Date(b.valueOf())};scheduler.dblclick_dhx_agenda_area=function(){!this.config.readonly&&this.config.dblclick_create&&this.addEventNow()};scheduler.templates.agenda_time=function(b,d,a){return a._timed?this.day_date(a.start_date,a.end_date,a)+" "+this.event_date(b):scheduler.templates.day_date(b)+" – "+scheduler.templates.day_date(d)};scheduler.templates.agenda_text=function(b,d,a){return a.text};scheduler.date.agenda_start=function(b){return b}; -scheduler.attachEvent("onTemplatesReady",function(){function b(b){if(b){var a=scheduler.locale.labels;scheduler._els.dhx_cal_header[0].innerHTML="
"+a.date+"
"+a.description+"
";scheduler._table_view=!0;scheduler.set_sizes()}}function d(){var b=scheduler._date,a=scheduler.get_visible_events();a.sort(function(a,b){return a.start_date>b.start_date?1:-1});for(var d="
",e=0;e
"+scheduler.templates.agenda_time(c.start_date,c.end_date,c)+"
";d+="
 
";d+=""+scheduler.templates.agenda_text(c.start_date,c.end_date,c)+"
"}d+="
";scheduler._els.dhx_cal_data[0].innerHTML=d;scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop= -scheduler._agendaScrollTop||0;var g=scheduler._els.dhx_cal_data[0].firstChild.childNodes;scheduler._els.dhx_cal_date[0].innerHTML="";scheduler._rendered=[];for(e=0;e
"+a.date+"
"+a.description+"";scheduler._table_view=!0;scheduler.set_sizes()}}function d(){var c=scheduler._date,a=scheduler.get_visible_events();a.sort(function(b,a){return b.start_date>a.start_date?1:-1});for(var d="
",e=0;e
"+scheduler.templates.agenda_time(b.start_date,b.end_date,b)+"
";d+="
 
";d+=""+scheduler.templates.agenda_text(b.start_date,b.end_date,b)+"
"}d+= +"
";scheduler._els.dhx_cal_data[0].innerHTML=d;scheduler._els.dhx_cal_data[0].childNodes[0].scrollTop=scheduler._agendaScrollTop||0;var f=scheduler._els.dhx_cal_data[0].childNodes[0],k=f.childNodes[f.childNodes.length-1];k.style.height=f.offsetHeight=24)},j=scheduler._pre_render_events_line;scheduler._pre_render_events_line=function(a,f){if(!this.config.all_timed)return j.call(this,a,f);for(var c=0;cthis._min_date&&b.start_dateb.end_date&&a.splice(c--,1);var e=this._lame_copy({},d);e.end_date=new Date(e.end_date);e.start_date=e.start_date=scheduler.config.collision_limit&&(a[j]=n,k=!1)}else b.length>scheduler.config.collision_limit&&(k=!1);return!k?!scheduler.callEvent("onEventCollision",[a,b]):k}var n,e;scheduler.config.collision_limit=1;scheduler.attachEvent("onBeforeDrag",function(a){h(a); -return!0});scheduler.attachEvent("onBeforeLightbox",function(a){var b=scheduler.getEvent(a);e=[b.start_date,b.end_date];h(a);return!0});scheduler.attachEvent("onEventChanged",function(a){if(!a)return!0;var b=scheduler.getEvent(a);if(!g(b)){if(!e)return!1;b.start_date=e[0];b.end_date=e[1];b._timed=this.is_one_day_event(b)}return!0});scheduler.attachEvent("onBeforeEventChanged",function(a){return g(a)});scheduler.attachEvent("onEventSave",function(a,b){return b.rec_type?(scheduler._roll_back_dates(b), -g(b)):!0})})(); +(function(){function h(b){var a=scheduler._props?scheduler._props[scheduler._mode]:null,i=scheduler.matrix?scheduler.matrix[scheduler._mode]:null,e=a||i;if(a)var f=e.map_to;if(i)f=e.y_property;e&&b&&(n=scheduler.getEvent(b)[f])}function g(b){var a=[],i=scheduler.config.collision_limit;if(b.rec_type)for(var e=scheduler.getRecDates(b),f=0;f=i&&(l=!1)}else a.length>=i&&(l=!1);if(!l){var p=!scheduler.callEvent("onEventCollision",[b,a]);p||(b[k]=n||b[k]);return p}return l}var n,d;scheduler.config.collision_limit=1;scheduler.attachEvent("onBeforeDrag", +function(b){h(b);return!0});scheduler.attachEvent("onBeforeLightbox",function(b){var a=scheduler.getEvent(b);d=[a.start_date,a.end_date];h(b);return!0});scheduler.attachEvent("onEventChanged",function(b){if(!b)return!0;var a=scheduler.getEvent(b);if(!g(a)){if(!d)return!1;a.start_date=d[0];a.end_date=d[1];a._timed=this.is_one_day_event(a)}return!0});scheduler.attachEvent("onBeforeEventChanged",function(b){return g(b)});scheduler.attachEvent("onEventSave",function(b,a){a=scheduler._lame_clone(a);a.id= +b;a.rec_type&&scheduler._roll_back_dates(data_copy);return g(a)})})(); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js index ef80ea8e8d0..774a629f8cb 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ -(function(){function g(e,b,a){var c=e+"="+a+(b?"; "+b:"");document.cookie=c}function h(e){var b=e+"=";if(document.cookie.length>0){var a=document.cookie.indexOf(b);if(a!=-1){a+=b.length;var c=document.cookie.indexOf(";",a);if(c==-1)c=document.cookie.length;return document.cookie.substring(a,c)}}return""}var f=!0;scheduler.attachEvent("onBeforeViewChange",function(e,b,a,c){if(f){f=!1;var d=h("scheduler_settings");if(d)return d=d.split("@"),d[0]=this.templates.xml_date(d[0]),this.setCurrentView(d[0], -d[1]),!1}var i=this.templates.xml_format(c||b)+"@"+(a||e);g("scheduler_settings","expires=Sun, 31 Jan 9999 22:00:00 GMT",i);return!0})})(); +(function(){function g(e,b,a){var c=e+"="+a+(b?"; "+b:"");document.cookie=c}function h(e){var b=e+"=";if(document.cookie.length>0){var a=document.cookie.indexOf(b);if(a!=-1){a+=b.length;var c=document.cookie.indexOf(";",a);if(c==-1)c=document.cookie.length;return document.cookie.substring(a,c)}}return""}var f=!0;scheduler.attachEvent("onBeforeViewChange",function(e,b,a,c){if(f){f=!1;var d=h("scheduler_settings");if(d)return d=unescape(d).split("@"),d[0]=this.templates.xml_date(d[0]),window.setTimeout(function(){scheduler.setCurrentView(d[0], +d[1])},1),!1}var i=escape(this.templates.xml_format(c||b)+"@"+(a||e));g("scheduler_settings","expires=Sun, 31 Jan 9999 22:00:00 GMT",i);return!0})})(); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_dhx_terrace.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_dhx_terrace.js new file mode 100644 index 00000000000..89e7d1b16f8 --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_dhx_terrace.js @@ -0,0 +1,8 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +(function(){scheduler.config.fix_tab_position=!0;scheduler.config.use_select_menu_space=!0;scheduler.config.hour_size_px=44;scheduler.xy.nav_height=59;scheduler.xy.bar_height=24;scheduler.config.wide_form=!0;scheduler.xy.lightbox_additional_height=90;scheduler.config.displayed_event_color="#ff4a4a";scheduler.config.displayed_event_text_color="#ffef80";scheduler.templates.event_bar_date=function(c){return"\u2022 "+scheduler.templates.event_date(c)+" "};scheduler.attachEvent("onLightbox",function(){for(var c= +scheduler.getLightbox(),d=c.getElementsByTagName("div"),b=0;b 
";scheduler.attachEvent("onTemplatesReady",function(){var c=scheduler.date.date_to_str("%d"), +d=scheduler.templates.month_day;scheduler.templates.month_day=function(a){if(this._mode=="month"){var b=c(a);a.getDate()==1&&(b=scheduler.locale.date.month_full[a.getMonth()]+" "+b);+a==+scheduler.date.date_part(new Date)&&(b=scheduler.locale.labels.dhx_cal_today_button+" "+b);return b}else return d.call(this,a)};if(scheduler.config.fix_tab_position)for(var b=scheduler._els.dhx_cal_navline[0].getElementsByTagName("div"),e=[],f=211,g=0;g";return d},set_value:function(a,d,c,b){a._combo&&a._combo.destructor();window.dhx_globalImgPath=b.image_path||"/";a._combo=new dhtmlXCombo(a,b.name,a.offsetWidth-8);a._combo.enableFilteringMode(!!b.filtering,b.script_path||null,!!b.cache);if(b.script_path)a._combo.setComboValue(c[b.map_to]||null);else{for(var f=[],e=0;e";for(var c=0;c";a.vertical&&(d+="
")}d+="";return d},set_value:function(a,d,c,b){for(var f=a.getElementsByTagName("input"),e=0;e':""},set_value:function(a,d,c,b){var a=document.getElementById(b.id),f=scheduler.uid(),e=!1;typeof b.checked_value!="undefined"&&c[b.map_to]==b.checked_value&&(e=!0);a.className+=" dhx_cal_checkbox";var g="",h="";scheduler.config.wide_form?(a.innerHTML=h,a.nextSibling.innerHTML=g):a.innerHTML=g+h},get_value:function(a,d,c){var a=document.getElementById(c.id),b=a.getElementsByTagName("input")[0];b||(b=a.nextSibling.getElementsByTagName("input")[0]);return b.checked?c.checked_value||!0:c.unchecked_value||!1},focus:function(){}}; +scheduler.form_blocks.combo={render:function(b){if(!b.cached_options)b.cached_options={};var d="";d+="
";return d},set_value:function(b,d,c,a){b._combo&&b._combo.destructor();window.dhx_globalImgPath=a.image_path||"/";b._combo=new dhtmlXCombo(b,a.name,b.offsetWidth-8);a.options_height&&b._combo.setOptionHeight(a.options_height);var e=b._combo;e.enableFilteringMode(!!a.filtering,a.script_path||null,!!a.cache);if(a.script_path){var f= +c[a.map_to];f?a.cached_options[f]?(e.addOption(f,a.cached_options[f]),e.disable(1),e.selectOption(0),e.disable(0)):dhtmlxAjax.get(a.script_path+"?id="+f+"&uid="+scheduler.uid(),function(b){var c=b.doXPath("//option")[0],d=c.childNodes[0].nodeValue;a.cached_options[f]=d;e.addOption(f,d);e.disable(1);e.selectOption(0);e.disable(0)}):e.setComboValue(null)}else{for(var g=[],h=0;h";for(var c=0;c";b.vertical&&(d+="
")}d+="";return d},set_value:function(b,d,c,a){for(var e=b.getElementsByTagName("input"),f=0;f':""},set_value:function(b,d,c,a){var b=document.getElementById(a.id),e=scheduler.uid(),f=typeof a.checked_value!="undefined"?c[a.map_to]==a.checked_value:!!d;b.className+=" dhx_cal_checkbox";var g="",h=""; +scheduler.config.wide_form?(b.innerHTML=h,b.nextSibling.innerHTML=g):b.innerHTML=g+h;if(a.handler){var i=b.getElementsByTagName("input")[0];i.onclick=a.handler}},get_value:function(b,d,c){var b=document.getElementById(c.id),a=b.getElementsByTagName("input")[0];a||(a=b.nextSibling.getElementsByTagName("input")[0]);return a.checked?c.checked_value||!0:c.unchecked_value||!1},focus:function(){}}; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js index 06a1187a723..fdc64711b59 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ scheduler.expand=function(){var a=scheduler._obj;do a._position=a.style.position||"",a.style.position="static";while((a=a.parentNode)&&a.style);a=scheduler._obj;a.style.position="absolute";a._width=a.style.width;a._height=a.style.height;a.style.width=a.style.height="100%";a.style.top=a.style.left="0px";var b=document.body;b.scrollTop=0;if(b=b.parentNode)b.scrollTop=0;document.body._overflow=document.body.style.overflow||"";document.body.style.overflow="hidden";scheduler._maximize()}; scheduler.collapse=function(){var a=scheduler._obj;do a.style.position=a._position;while((a=a.parentNode)&&a.style);a=scheduler._obj;a.style.width=a._width;a.style.height=a._height;document.body.style.overflow=document.body._overflow;scheduler._maximize()};scheduler.attachEvent("onTemplatesReady",function(){var a=document.createElement("DIV");a.className="dhx_expand_icon";scheduler.toggleIcon=a;scheduler._obj.appendChild(a);a.onclick=function(){scheduler.expanded?scheduler.collapse():scheduler.expand()}}); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_grid_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_grid_view.js new file mode 100644 index 00000000000..4b233ca8bd7 --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_grid_view.js @@ -0,0 +1,28 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +(function(){scheduler.grid={sort_rules:{"int":function(b,d,a){return a(b)*1new Date(0)&&scheduler._max_date "; +b.innerHTML+=a};scheduler.grid.sort_grid=function(b){var b=b||{dir:"desc",value:function(a){return a.start_date},rule:scheduler.grid.sort_rules.date},d=scheduler.get_visible_events();b.dir=="desc"?d.sort(function(a,c){return b.rule(a,c,b.value)}):d.sort(function(a,c){return-b.rule(a,c,b.value)});return d};scheduler.grid.set_full_view=function(b){if(b){var d=scheduler.locale.labels,a=scheduler.grid._print_grid_header(b);scheduler._els.dhx_cal_header[0].innerHTML=a;scheduler._table_view=!0;scheduler.set_sizes()}}; +scheduler.grid._calcPadding=function(b,d){var a=(b.paddingLeft!==void 0?1*b.paddingLeft:scheduler[d].defPadding)+(b.paddingRight!==void 0?1*b.paddingRight:scheduler[d].defPadding);return a}; +scheduler.grid._getStyles=function(b,d){for(var a=[],c="",e=0;d[e];e++)switch(c=d[e]+":",d[e]){case "text-align":b.align&&a.push(c+b.align);break;case "vertical-align":b.valign&&a.push(c+b.valign);break;case "padding-left":b.paddingLeft!=void 0&&a.push(c+(b.paddingLeft||"0")+"px");break;case "padding-left":b.paddingRight!=void 0&&a.push(c+(b.paddingRight||"0")+"px")}return a}; +scheduler.grid._fill_grid_tab=function(b,d){for(var a=scheduler._date,c=scheduler.grid.sort_grid(d),e=scheduler[b].columns,f="
",i=-2,g=0;g
")}f+="";f+="
";for(g=0;g";scheduler._els.dhx_cal_data[0].innerHTML=f;scheduler._els.dhx_cal_data[0].scrollTop= +scheduler.grid._gridScrollTop||0;var h=scheduler._els.dhx_cal_data[0].getElementsByTagName("tr");scheduler._rendered=[];for(g=0;g",g=scheduler.grid._getViewName(d),k=["text-align", +"vertical-align","padding-left","padding-right"],h=0;h"+j+""}i+= +"";return i}; +scheduler.grid._print_grid_header=function(b){for(var d="
",a=scheduler[b].columns,c=[],e=a.length,f=scheduler._obj.clientWidth-2*a.length-20,i=0;i"+(a[j].label===void 0?a[j].id:a[j].label)+"
"}d+="";return d}; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js index d882becfd64..da1bccf0da9 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js @@ -1,5 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ scheduler.attachEvent("onTemplatesReady",function(){for(var c=document.body.getElementsByTagName("DIV"),b=0;bd&&(a[e+1]=d);m=!0};scheduler.attachEvent("onScaleAdd",function(b,a){var c=k[a.valueOf()]||l[a.getDay()];if(c)for(var d=0;dscheduler.config.limit_end.valueOf()||this.date.add(d,1,c)<=scheduler.config.limit_start.valueOf())?(setTimeout(function(){scheduler.setCurrentView(scheduler._date, -c)},1),!1):!0});var f=function(b){var a=scheduler.config,c=b.start_date.valueOf()>=a.limit_start.valueOf()&&b.end_date.valueOf()<=a.limit_end.valueOf();if(c&&m&&b._timed){var d=scheduler.date.date_part(new Date(b.start_date.valueOf())),e=k[d.valueOf()]||l[d.getDay()],f=b.start_date.getHours()*60+b.start_date.getMinutes(),h=b.end_date.getHours()*60+b.end_date.getMinutes();if(e)for(var j=0;jf){if(f<=i&&f>=g){if(i==1440||h=g&&h=scheduler.config.limit_end.valueOf())a.start_date=this.date.add(scheduler.config.limit_end,-1,"day");if(a.end_date=scheduler.config.limit_end.valueOf())a.end_date=this.date.add(scheduler.config.limit_end,-1,"day");if(a.start_date.valueOf()>=a.end_date.valueOf())a.end_date=this.date.add(a.start_date,this.config.event_duration||this.config.time_step,"minute");a._timed=this.is_one_day_event(a)}return!0});scheduler.attachEvent("onEventChanged",function(b){if(!b)return!0;var a=scheduler.getEvent(b);if(!f(a)){if(!g)return!1;a.start_date=g[0];a.end_date= -g[1];a._timed=this.is_one_day_event(a)}return!0});scheduler.attachEvent("onBeforeEventChanged",function(b){return f(b)})})(); +scheduler.config.limit_start=null;scheduler.config.limit_end=null;scheduler.config.limit_view=!1;scheduler.config.check_limits=!0;scheduler.config.mark_now=!0;scheduler.config.display_marked_timespans=!0; +(function(){var u=null,s="dhx_time_block",F=function(b,a,c){a instanceof Date&&c instanceof Date?(b.start_date=a,b.end_date=c):(b.days=a,b.zones=c);return b},E=function(b,a,c){var d=typeof b=="object"?b:{days:b};d.type=s;d.css="";if(a){if(c)d.sections=c;d=F(d,b,a)}return d};scheduler.blockTime=function(b,a,c){var d=E(b,a,c);return scheduler.addMarkedTimespan(d)};scheduler.unblockTime=function(b,a,c){var a=a||"fullday",d=E(b,a,c);return scheduler.deleteMarkedTimespan(d)};scheduler.attachEvent("onBeforeViewChange", +function(b,a,c,d){d=d||a;c=c||b;return scheduler.config.limit_view&&(d.valueOf()>scheduler.config.limit_end.valueOf()||this.date.add(d,1,c)<=scheduler.config.limit_start.valueOf())?(setTimeout(function(){scheduler.setCurrentView(scheduler._date,c)},1),!1):!0});var x=function(b,a,c){var d=c[a]&&c[a][s]?c[a][s]:c[b]&&c[b][s]?c[b][s]:[];return d},t=function(b){if(!b)return!0;if(!scheduler.config.check_limits)return!0;for(var a=scheduler,c=a._mode,d=scheduler._marked_timespans,e=a.config,h=[],h=b.rec_type? +scheduler.getRecDates(b):[b],g=!0,i=0;i=e.limit_start.valueOf()&&f.end_date.valueOf()<=e.limit_end.valueOf():!0)for(var j=new Date(f.start_date.valueOf()),p=scheduler.date.add(j,1,"day");jp||f.end_date.getDate()!=j.getDate()?1440:scheduler._get_zone_minutes(f.end_date);if(k)for(l=0;lC){if(C<=w&&C>=z){if(w==1440||y=z&&yw)if(f._timed&&a._drag_id&&a._drag_mode=="new-size")f.end_date.setHours(0),f.end_date.setMinutes(z);else{g=!1;break}}}}if(!g)a._drag_id=null,a._drag_mode=null,g=a.checkEvent("onLimitViolation")?a.callEvent("onLimitViolation",[f.id,f]):g}return g};scheduler.attachEvent("onMouseDown", +function(b){return!(b=s)});scheduler.attachEvent("onBeforeDrag",function(b){return!b?!0:t(scheduler.getEvent(b))});scheduler.attachEvent("onClick",function(b){return t(scheduler.getEvent(b))});scheduler.attachEvent("onBeforeLightbox",function(b){var a=scheduler.getEvent(b);u=[a.start_date,a.end_date];return t(a)});scheduler.attachEvent("onEventSave",function(b,a){if(a.rec_type){var c=scheduler._lame_clone(a);scheduler._roll_back_dates(c)}return t(a)});scheduler.attachEvent("onEventAdded",function(b){if(!b)return!0; +var a=scheduler.getEvent(b);if(!t(a)&&scheduler.config.limit_start&&scheduler.config.limit_end){if(a.start_date=scheduler.config.limit_end.valueOf())a.start_date=this.date.add(scheduler.config.limit_end,-1,"day");if(a.end_date=scheduler.config.limit_end.valueOf())a.end_date=this.date.add(scheduler.config.limit_end, +-1,"day");if(a.start_date.valueOf()>=a.end_date.valueOf())a.end_date=this.date.add(a.start_date,this.config.event_duration||this.config.time_step,"minute");a._timed=this.is_one_day_event(a)}return!0});scheduler.attachEvent("onEventChanged",function(b){if(!b)return!0;var a=scheduler.getEvent(b);if(!t(a)){if(!u)return!1;a.start_date=u[0];a.end_date=u[1];a._timed=this.is_one_day_event(a)}return!0});scheduler.attachEvent("onBeforeEventChanged",function(b){return t(b)});scheduler.attachEvent("onBeforeEventCreated", +function(b){var a=scheduler.getActionData(b).date,c={_timed:!0,start_date:a,end_date:scheduler.date.add(a,scheduler.config.time_step,"minute")};return t(c)});scheduler.attachEvent("onViewChange",function(){scheduler.markNow()});scheduler.attachEvent("onSchedulerResize",function(){window.setTimeout(function(){scheduler.markNow()},1);return!0});scheduler.attachEvent("onTemplatesReady",function(){scheduler._mark_now_timer=window.setInterval(function(){scheduler.markNow()},6E4)});scheduler.markNow=function(b){var a= +"dhx_now_time";this._els[a]||(this._els[a]=[]);var c=scheduler.config.now_date||new Date,d=this.config;scheduler._remove_mark_now();if(!b&&d.mark_now&&cthis._min_date&&c.getHours()>=d.first_hour&&c.getHours()b.start_date||b.days!==void 0&&b.zones))return a; +var g=0,i=1440;if(b.zones=="fullday")b.zones=[g,i];if(b.zones&&b.invert_zones)b.zones=scheduler.invertZones(b.zones);b.id=scheduler.uid();b.css=b.css||"";b.type=b.type||"default";var f=b.sections;if(f)for(var j in f){if(f.hasOwnProperty(j)){var p=f[j];p instanceof Array||(p=[p]);for(e=0;er?scheduler._get_zone_minutes(m):g,s=q>v||q.getDate()!=r.getDate()?i:scheduler._get_zone_minutes(q);n.zones=[l,s];a.push(n);r=v;v=scheduler.date.add(v,1,"day")}else{if(k.days instanceof Date)k.days=scheduler.date.date_part(k.days).valueOf();k.zones=b.zones.slice();a.push(k)}}return a};scheduler._get_dates_by_index=function(b,a,c){for(var d=[],a=a||scheduler._min_date, +c=c||scheduler._max_date,e=a.getDay(),h=b-e>=0?b-e:7-a.getDay()+b,g=scheduler.date.add(a,h,"day");g=+f&&+h<=+f))return d;var j=f.getDay(),c=scheduler.config.start_on_monday?j==0?6:j-1:j}var p=b.zones,n=scheduler._get_css_classes_by_config(b);if(scheduler._table_view&&scheduler._mode=="month"){var o=[],k=[];if(a)o.push(a),k.push(c);else for(var k=i?[i]:scheduler._get_dates_by_index(c),m=0;mh&&f<=h||f=e)c[d]=Math.min(e,f),c[d+1]=Math.max(h,j),d-=2;else{if(!g)continue;var p=e>f?0:2;c.splice(d+p,0,f,j)}a.splice(i--,2);break}return c};scheduler._subtract_timespan_zones=function(b,a){for(var c=b.slice(),d=0;de&&i=i&&h<=f&&c.splice(d,2);ef&&c.splice(j?d+2:d,j?0:2,f,h);d-=2;break}}return c};scheduler.invertZones=function(b){return scheduler._subtract_timespan_zones([0,1440],b.slice())};scheduler._delete_marked_timespan_by_id=function(b){var a=scheduler._marked_timespans_ids[b];if(a)for(var c=0;c"+e.text+"

"+(e.event_location||"")+"

"+scheduler.templates.marker_date(f)+" - "+scheduler.templates.marker_date(g)+""}; -scheduler.dblclick_dhx_map_area=function(){!this.config.readonly&&this.config.dblclick_create&&this.addEventNow({start_date:scheduler._date,end_date:scheduler.date.add(scheduler._date,1,"hour")})};scheduler.templates.map_time=function(f,g,e){return e._timed?this.day_date(e.start_date,e.end_date,e)+" "+this.event_date(f):scheduler.templates.day_date(f)+" – "+scheduler.templates.day_date(g)};scheduler.templates.map_text=function(f,g,e){return e.text};scheduler.date.map_start=function(f){return f}; -scheduler.date.add_map=function(f){return new Date(f.valueOf())};scheduler.templates.map_date=function(){return""};scheduler._latLngUpdate=!1; -scheduler.attachEvent("onSchedulerReady",function(){function f(a){if(a){var c=scheduler.locale.labels;scheduler._els.dhx_cal_header[0].innerHTML="
"+c.date+"
"+c.description+"
";scheduler._table_view=!0;scheduler.set_sizes()}} -function g(){scheduler._selected_event_id=null;scheduler.map._infowindow.close();for(var a in scheduler.map._markers)scheduler.map._markers[a].setMap(null),delete scheduler.map._markers[a],scheduler.map._infowindows_content[a]&&delete scheduler.map._infowindows_content[a]}function e(){var a=scheduler.get_visible_events();a.sort(function(a,b){return a.start_date
"+scheduler.templates.map_time(b.start_date,b.end_date,b)+"
";c+="
 
"; +scheduler.dblclick_dhx_map_area=function(){!this.config.readonly&&this.config.dblclick_create&&this.addEventNow({start_date:scheduler._date,end_date:scheduler.date.add(scheduler._date,scheduler.config.time_step,"minute")})};scheduler.templates.map_time=function(f,g,e){return e._timed?this.day_date(e.start_date,e.end_date,e)+" "+this.event_date(f):scheduler.templates.day_date(f)+" – "+scheduler.templates.day_date(g)};scheduler.templates.map_text=function(f,g,e){return e.text}; +scheduler.date.map_start=function(f){return f};scheduler.date.add_map=function(f){return new Date(f.valueOf())};scheduler.templates.map_date=function(){return""};scheduler._latLngUpdate=!1; +scheduler.attachEvent("onSchedulerReady",function(){function f(a){if(a){var c=scheduler.locale.labels;scheduler._els.dhx_cal_header[0].innerHTML="
"+c.date+"
"+c.description+"
";scheduler._table_view=!0; +scheduler.set_sizes()}}function g(){scheduler._selected_event_id=null;scheduler.map._infowindow.close();var a=scheduler.map._markers,c;for(c in a)a.hasOwnProperty(c)&&(a[c].setMap(null),delete scheduler.map._markers[c],scheduler.map._infowindows_content[c]&&delete scheduler.map._infowindows_content[c])}function e(){var a=scheduler.get_visible_events();a.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(var c="
", +d=0;d
"+scheduler.templates.map_time(b.start_date,b.end_date,b)+"
";c+="
 
"; c+="
"+scheduler.templates.map_text(b.start_date,b.end_date,b)+"
"}c+="
";scheduler._els.dhx_cal_data[0].scrollTop=0;scheduler._els.dhx_cal_data[0].innerHTML=c;scheduler._els.dhx_cal_data[0].style.width=scheduler.xy.map_date_width+scheduler.xy.map_description_width+ 1+"px";var g=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(d=0;dscheduler._min_date||c.start_datescheduler._max_date||c.start_date.valueOf()>=scheduler._min_date&&c.end_date.valueOf()<=scheduler._max_date? +scheduler._latLngUpdate=!0;scheduler.callEvent("onEventChanged",[a.id,a])})},o=function(a,c,d,b){setTimeout(function(){var b=a.apply(c,d);a=c=d=null;return b},b||1)};scheduler.attachEvent("onEventChanged",function(a){if(this._latLngUpdate)this._latLngUpdate=!1;else{var c=scheduler.getEvent(a);c.start_datescheduler._min_date||c.start_datescheduler._max_date||c.start_date.valueOf()>=scheduler._min_date&&c.end_date.valueOf()<=scheduler._max_date? (scheduler.map._markers[a]&&scheduler.map._markers[a].setMap(null),j(c)):(scheduler._selected_event_id=null,scheduler.map._infowindow.close(),scheduler.map._markers[a]&&scheduler.map._markers[a].setMap(null))}return!0});scheduler.attachEvent("onEventIdChange",function(a,c){var d=scheduler.getEvent(c);if(d.start_datescheduler._min_date||d.start_datescheduler._max_date||d.start_date.valueOf()>=scheduler._min_date&&d.end_date.valueOf()<= scheduler._max_date)scheduler.map._markers[a]&&(scheduler.map._markers[a].setMap(null),delete scheduler.map._markers[a]),scheduler.map._infowindows_content[a]&&delete scheduler.map._infowindows_content[a],j(d);return!0});scheduler.attachEvent("onEventAdded",function(a,c){if(!scheduler._dataprocessor&&(c.start_datescheduler._min_date||c.start_datescheduler._max_date||c.start_date.valueOf()>=scheduler._min_date&&c.end_date.valueOf()<= scheduler._max_date))scheduler.map._markers[a]&&scheduler.map._markers[a].setMap(null),j(c);return!0});scheduler.attachEvent("onBeforeEventDelete",function(a){scheduler.map._markers[a]&&scheduler.map._markers[a].setMap(null);scheduler._selected_event_id=null;scheduler.map._infowindow.close();return!0});scheduler._event_resolve_delay=1500;scheduler.attachEvent("onEventLoading",function(a){scheduler.config.map_resolve_event_location&&a.event_location&&!a.lat&&!a.lng&&(scheduler._event_resolve_delay+= diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js index b7b0ba1d21d..7dcf3b45bd7 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js @@ -1,26 +1,26 @@ /* 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 */ -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"); -scheduler.renderCalendar=function(b,c){var a=null,d=b.date||new Date;typeof d=="string"&&(d=this.templates.api_date(d));if(c)a=this._render_calendar(c.parentNode,d,b,c),scheduler.unmarkCalendar(a);else{var e=b.container,f=b.position;typeof e=="string"&&(e=document.getElementById(e));typeof f=="string"&&(f=document.getElementById(f));if(f&&typeof f.left=="undefined")var n=getOffset(f),f={top:n.top+f.offsetHeight,left:n.left};e||(e=scheduler._get_def_cont(f));a=this._render_calendar(e,d,b);a.onclick= -function(a){var a=a||event,b=a.target||a.srcElement;if(b.className.indexOf("dhx_month_head")!=-1){var c=b.parentNode.className;if(c.indexOf("dhx_after")==-1&&c.indexOf("dhx_before")==-1){var d=scheduler.templates.xml_date(this.getAttribute("date"));d.setDate(parseInt(b.innerHTML,10));scheduler.unmarkCalendar(this);scheduler.markCalendar(this,d,"dhx_calendar_click");this._last_date=d;this.conf.handler&&this.conf.handler.call(scheduler,d,this)}}}}for(var m=scheduler.date.month_start(d),k=scheduler.date.add(m, -1,"month"),p=this.getEvents(m,k),i=0;i=k.valueOf())break}this._markCalendarCurrentDate(a);a.conf=b;return a}; -scheduler._get_def_cont=function(b){if(!this._def_count)this._def_count=document.createElement("DIV"),this._def_count.style.cssText="position:absolute;z-index:10100;width:251px; height:175px;",this._def_count.onclick=function(b){(b||event).cancelBubble=!0},document.body.appendChild(this._def_count);this._def_count.style.left=b.left+"px";this._def_count.style.top=b.top+"px";this._def_count._created=new Date;return this._def_count}; -scheduler._locateCalendar=function(b,c){var a=b.childNodes[2].childNodes[0];typeof c=="string"&&(c=scheduler.templates.api_date(c));var d=b.week_start+c.getDate()-1;return a.rows[Math.floor(d/7)].cells[d%7].firstChild};scheduler.markCalendar=function(b,c,a){this._locateCalendar(b,c).className+=" "+a};scheduler.unmarkCalendar=function(b,c,a){c=c||b._last_date;a=a||"dhx_calendar_click";if(c){var d=this._locateCalendar(b,c);d.className=(d.className||"").replace(RegExp(a,"g"))}}; -scheduler._week_template=function(b){for(var c=b||250,a=0,d=document.createElement("div"),e=this.date.week_start(new Date),f=0;f<7;f++)this._cols[f]=Math.floor(c/(7-f)),this._render_x_header(f,a,e,d),e=this.date.add(e,1,"day"),c-=this._cols[f],a+=this._cols[f];d.lastChild.className+=" dhx_scale_bar_last";return d};scheduler.updateCalendar=function(b,c){b.conf.date=c;this.renderCalendar(b.conf,b)};scheduler._mini_cal_arrows=[" "," "]; -scheduler._render_calendar=function(b,c,a,d){var e=scheduler.templates,f=this._cols;this._cols=[];var n=this._mode;this._mode="calendar";var m=this._colsS;this._colsS={height:0};var k=new Date(this._min_date),p=new Date(this._max_date),i=new Date(scheduler._date),o=e.month_day;e.month_day=e.calendar_date;var c=this.date.month_start(c),l=this._week_template(b.offsetWidth-1),g;d?g=d:(g=document.createElement("DIV"),g.className="dhx_cal_container dhx_mini_calendar");g.setAttribute("date",this.templates.xml_format(c)); -g.innerHTML="
"+l.innerHTML+"
";g.childNodes[0].innerHTML=this.templates.calendar_month(c);if(a.navigation){var h=document.createElement("DIV");h.className="dhx_cal_prev_button";h.style.cssText="left:1px;top:2px;position:absolute;";h.innerHTML=this._mini_cal_arrows[0];g.firstChild.appendChild(h);h.onclick=function(){scheduler.updateCalendar(g,scheduler.date.add(g._date,-1,"month"));scheduler._date.getMonth()== -g._date.getMonth()&&scheduler._date.getFullYear()==g._date.getFullYear()&&scheduler._markCalendarCurrentDate(g)};h=document.createElement("DIV");h.className="dhx_cal_next_button";h.style.cssText="left:auto; right:1px;top:2px;position:absolute;";h.innerHTML=this._mini_cal_arrows[1];g.firstChild.appendChild(h);h.onclick=function(){scheduler.updateCalendar(g,scheduler.date.add(g._date,1,"month"));scheduler._date.getMonth()==g._date.getMonth()&&scheduler._date.getFullYear()==g._date.getFullYear()&&scheduler._markCalendarCurrentDate(g)}}g._date= -new Date(c);g.week_start=(c.getDay()-(this.config.start_on_monday?1:0)+7)%7;var u=this.date.week_start(c);this._reset_month_scale(g.childNodes[2],c,u);for(var j=g.childNodes[2].firstChild.rows,q=j.length;q<6;q++){var t=j[j.length-1];j[0].parentNode.appendChild(t.cloneNode(!0));for(var r=parseInt(t.childNodes[t.childNodes.length-1].childNodes[0].innerHTML),r=r<10?r:0,s=0;s500))b=this._def_count.firstChild;if(b&&(b.onclick=null,b.innerHTML="",b.parentNode&&b.parentNode.removeChild(b),this._def_count))this._def_count.style.top="-1000px"};scheduler.isCalendarVisible=function(){return this._def_count&&parseInt(this._def_count.style.top,10)>0?this._def_count:!1}; -scheduler.attachEvent("onTemplatesReady",function(){dhtmlxEvent(document.body,"click",function(){scheduler.destroyCalendar()})});scheduler.templates.calendar_time=scheduler.date.date_to_str("%d-%m-%Y"); -scheduler.form_blocks.calendar_time={render:function(){var b="",c=scheduler.config,a=this.date.date_part(new Date);c.first_hour&&a.setHours(c.first_hour);b+=" ";var f=scheduler.config.full_day;return"
"+ -b+"  –  "+b+"
"},set_value:function(b,c,a){function d(a,b,c){n(a,b,c);a.value=scheduler.templates.calendar_time(b);a._date=scheduler.date.date_part(new Date(b))}var e=b.getElementsByTagName("input"),f=b.getElementsByTagName("select"),n=function(a,b,c){a.onclick=function(){scheduler.destroyCalendar(null,!0);scheduler.renderCalendar({position:a,date:new Date(this._date),navigation:!0,handler:function(b){a.value=scheduler.templates.calendar_time(b); -a._date=new Date(b);scheduler.destroyCalendar();scheduler.config.event_duration&&scheduler.config.auto_end_date&&c==0&&o()}})}};if(scheduler.config.full_day){if(!b._full_day){var m="";scheduler.config.wide_form||(m=b.previousSibling.innerHTML+m);b.previousSibling.innerHTML=m;b._full_day=!0}var k=b.previousSibling.getElementsByTagName("input")[0],p=scheduler.date.time_part(a.start_date)== -0&&scheduler.date.time_part(a.end_date)==0&&a.end_date.valueOf()-a.start_date.valueOf()<1728E5;k.checked=p;for(var i in f)f[i].disabled=k.checked;for(i=0;i=n.valueOf())break}}this._markCalendarCurrentDate(d);d.conf=a;a.sync&&!c&&this._synced_minicalendars.push(d);return d}; +scheduler._get_def_cont=function(a){if(!this._def_count)this._def_count=document.createElement("DIV"),this._def_count.className="dhx_minical_popup",this._def_count.onclick=function(a){(a||event).cancelBubble=!0},document.body.appendChild(this._def_count);this._def_count.style.left=a.left+"px";this._def_count.style.top=a.top+"px";this._def_count._created=new Date;return this._def_count}; +scheduler._locateCalendar=function(a,b){var c=a.childNodes[2].childNodes[0];typeof b=="string"&&(b=scheduler.templates.api_date(b));var d=a.week_start+b.getDate()-1;return c.rows[Math.floor(d/7)].cells[d%7].firstChild};scheduler.markCalendar=function(a,b,c){this._locateCalendar(a,b).className+=" "+c};scheduler.unmarkCalendar=function(a,b,c){b=b||a._last_date;c=c||"dhx_calendar_click";if(b){var d=this._locateCalendar(a,b);d.className=(d.className||"").replace(RegExp(c,"g"))}}; +scheduler._week_template=function(a){for(var b=a||250,c=0,d=document.createElement("div"),f=this.date.week_start(new Date),e=0;e<7;e++)this._cols[e]=Math.floor(b/(7-e)),this._render_x_header(e,c,f,d),f=this.date.add(f,1,"day"),b-=this._cols[e],c+=this._cols[e];d.lastChild.className+=" dhx_scale_bar_last";return d};scheduler.updateCalendar=function(a,b){a.conf.date=b;this.renderCalendar(a.conf,a,!0)};scheduler._mini_cal_arrows=[" "," "]; +scheduler._render_calendar=function(a,b,c,d){var f=scheduler.templates,e=this._cols;this._cols=[];var h=this._mode;this._mode="calendar";var k=this._colsS;this._colsS={height:0};var j=new Date(this._min_date),n=new Date(this._max_date),l=new Date(scheduler._date),s=f.month_day;f.month_day=f.calendar_date;var b=this.date.month_start(b),p=this._week_template(a.offsetWidth-1),g;d?g=d:(g=document.createElement("DIV"),g.className="dhx_cal_container dhx_mini_calendar");g.setAttribute("date",this.templates.xml_format(b)); +g.innerHTML="
"+p.innerHTML+"
";g.childNodes[0].innerHTML=this.templates.calendar_month(b);if(c.navigation)for(var i=function(a,b){var c=scheduler.date.add(a._date,b,"month");scheduler.updateCalendar(a,c);scheduler._date.getMonth()==a._date.getMonth()&&scheduler._date.getFullYear()==a._date.getFullYear()&&scheduler._markCalendarCurrentDate(a)},w=["dhx_cal_prev_button","dhx_cal_next_button"],x=["left:1px;top:2px;position:absolute;", +"left:auto; right:1px;top:2px;position:absolute;"],y=[-1,1],z=function(a){return function(){if(c.sync)for(var b=scheduler._synced_minicalendars,d=0;d500))a=this._def_count.firstChild;if(a&&(a.onclick=null,a.innerHTML="",a.parentNode&&a.parentNode.removeChild(a),this._def_count))this._def_count.style.top="-1000px"}; +scheduler.isCalendarVisible=function(){return this._def_count&&parseInt(this._def_count.style.top,10)>0?this._def_count:!1};scheduler.attachEvent("onTemplatesReady",function(){dhtmlxEvent(document.body,"click",function(){scheduler.destroyCalendar()})});scheduler.templates.calendar_time=scheduler.date.date_to_str("%d-%m-%Y"); +scheduler.form_blocks.calendar_time={render:function(){var a="",b=scheduler.config,c=this.date.date_part(new Date),d=1440,f=0;b.limit_time_select&&(f=60*b.first_hour,d=60*b.last_hour+1);c.setHours(f/60);a+=" ";var k=scheduler.config.full_day;return"
"+ +a+"  –  "+a+"
"},set_value:function(a,b,c){function d(a,b,c){h(a,b,c);a.value=scheduler.templates.calendar_time(b);a._date=scheduler.date.date_part(new Date(b))}var f=a.getElementsByTagName("input"),e=a.getElementsByTagName("select"),h=function(a,b,c){a.onclick=function(){scheduler.destroyCalendar(null,!0);scheduler.renderCalendar({position:a,date:new Date(this._date),navigation:!0,handler:function(b){a.value=scheduler.templates.calendar_time(b); +a._date=new Date(b);scheduler.destroyCalendar();scheduler.config.event_duration&&scheduler.config.auto_end_date&&c==0&&l()}})}};if(scheduler.config.full_day){if(!a._full_day){var k="";scheduler.config.wide_form||(k=a.previousSibling.innerHTML+k);a.previousSibling.innerHTML=k;a._full_day=!0}var j=a.previousSibling.getElementsByTagName("input")[0],n=scheduler.date.time_part(c.start_date)== +0&&scheduler.date.time_part(c.end_date)==0;j.checked=n;e[0].disabled=j.checked;e[1].disabled=j.checked;j.onclick=function(){if(j.checked==!0){var b={};scheduler.form_blocks.calendar_time.get_value(a,b);var h=scheduler.date.date_part(b.start_date),g=scheduler.date.date_part(b.end_date);if(+g==+h||+g>=+h&&(c.end_date.getHours()!=0||c.end_date.getMinutes()!=0))g=scheduler.date.add(g,1,"day")}var i=h||c.start_date,k=g||c.end_date;d(f[0],i);d(f[1],k);e[0].value=i.getHours()*60+i.getMinutes();e[1].value= +k.getHours()*60+k.getMinutes();e[0].disabled=j.checked;e[1].disabled=j.checked}}if(scheduler.config.event_duration&&scheduler.config.auto_end_date){var l=function(){start_date=scheduler.date.add(f[0]._date,e[0].value,"minute");end_date=new Date(start_date.getTime()+scheduler.config.event_duration*6E4);f[1].value=scheduler.templates.calendar_time(end_date);f[1]._date=scheduler.date.date_part(new Date(end_date));e[1].value=end_date.getHours()*60+end_date.getMinutes()};e[0].onchange=l}d(f[0],c.start_date, +0);d(f[1],c.end_date,1);h=function(){};e[0].value=c.start_date.getHours()*60+c.start_date.getMinutes();e[1].value=c.end_date.getHours()*60+c.end_date.getMinutes()},get_value:function(a,b){var c=a.getElementsByTagName("input"),d=a.getElementsByTagName("select");b.start_date=scheduler.date.add(c[0]._date,d[0].value,"minute");b.end_date=scheduler.date.add(c[1]._date,d[1].value,"minute");if(b.end_date<=b.start_date)b.end_date=scheduler.date.add(b.start_date,scheduler.config.time_step,"minute")},focus:function(){}}; +scheduler.linkCalendar=function(a,b){var c=function(){var c=scheduler._date,f=new Date(c.valueOf());b&&(f=b(f));f.setDate(1);scheduler.updateCalendar(a,f);return!0};scheduler.attachEvent("onViewChange",c);scheduler.attachEvent("onXLE",c);scheduler.attachEvent("onEventAdded",c);scheduler.attachEvent("onEventChanged",c);scheduler.attachEvent("onAfterEventDelete",c);c()}; +scheduler._markCalendarCurrentDate=function(a){var b=scheduler._date,c=scheduler._mode,d=scheduler.date.month_start(new Date(a._date)),f=scheduler.date.add(d,1,"month");if(c=="day"||this._props&&this._props[c])d.valueOf()<=b.valueOf()&&f>b&&scheduler.markCalendar(a,b,"dhx_calendar_click");else if(c=="week")for(var e=scheduler.date.week_start(new Date(b.valueOf())),h=0;h<7;h++)d.valueOf()<=e.valueOf()&&f>e&&scheduler.markCalendar(a,e,"dhx_calendar_click"),e=scheduler.date.add(e,1,"day")}; +scheduler.attachEvent("onEventCancel",function(){scheduler.destroyCalendar(null,!0)}); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js index 432bad25af0..fd8fa20b857 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js @@ -1,7 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ scheduler.form_blocks.multiselect={render:function(d){for(var a="
",b=0;b"+d.options[b].label+"",convertStringToBoolean(d.vertical)&&(a+="
");a+="
";return a},set_value:function(d,a,b,c){function h(b){for(var c=d.getElementsByTagName("input"),a=0;a";o=c[0].offsetWidth;return a}function y(c,a){for(var b=parseInt(c.style.left),d=0;db)return d;return a}function w(c){for(var a="",b=c.firstChild.rows,d=0;d";k=c.firstChild.rows[0].cells[0].offsetHeight}return a}function A(c){var a= -"";if(scheduler._mode=="agenda"){var b=scheduler._els.dhx_cal_header[0].childNodes[0].childNodes;a+=""+g(b[0].innerHTML)+""+g(b[1].innerHTML)+""}else if(scheduler._mode=="year")for(var b=scheduler._els.dhx_cal_data[0].childNodes,d=0;d",a+=q(b[d].childNodes[1].childNodes),a+=w(b[d].childNodes[2]),a+="";else{a+="";b=scheduler._els.dhx_cal_header[0].childNodes;a+=q(b);a+="";var e=scheduler._els.dhx_cal_data[0];if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){a+="";for(d=0;d";a+="";k=e.firstChild.rows[0].cells[0].offsetHeight}else if(e.firstChild.tagName=="TABLE")a+=w(e);else{for(e=e.childNodes[e.childNodes.length- -1];e.className.indexOf("dhx_scale_holder")==-1;)e=e.previousSibling;e=e.childNodes;a+="";for(d=0;d";a+="";k=e[0].offsetHeight}}a+="";return a}function r(c,a){return(window.getComputedStyle?window.getComputedStyle(c,null)[a]:c.currentStyle?c.currentStyle[a]:null)||""}function B(){var c="",a=scheduler._rendered;if(scheduler._mode=="agenda")for(var b=0;b"+g(a[b].childNodes[0].innerHTML)+""+ -g(a[b].childNodes[2].innerHTML)+"";else if(scheduler._mode=="year"){a=scheduler.get_visible_events();for(b=0;b";d=scheduler.date.add(d,1,"day"); -if(d.valueOf()>=scheduler._max_date.valueOf())break}}}else for(b=0;b";if(n=="event"){c+="
";var u=p?r(a[b].childNodes[2],"color"):"",v=p?r(a[b].childNodes[2],"backgroundColor"): -"";c+=""}else u=p?r(a[b],"color"):"",v=p?r(a[b],"backgroundColor"):"",c+="";c+=""}return c}function C(){var c="
";return c}var o=0,k=0,p=!1;f=="fullcolor"&&(p=!0,f="color");f=f||"color";html_regexp=RegExp("<[^>]*>","g");var l=(new Date).valueOf(),i=document.createElement("div");i.style.display="none";document.body.appendChild(i); -i.innerHTML=' ';document.getElementById(l).firstChild.value=A(f).replace("\u2013","-")+B()+C();document.getElementById(l).submit();i.parentNode.removeChild(i);grid=null}; +scheduler.toPDF=function(A,k,t,u){function g(d){return d.replace(newline_regexp,"\n").replace(html_regexp,"")}function m(d){d=parseFloat(d);return isNaN(d)?"auto":100*d/(q+1)}function x(d){d=parseFloat(d);return isNaN(d)?"auto":100*d/n}function v(d){var a="";if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){if(scheduler.matrix[scheduler._mode].second_scale)var b=d[1].childNodes;d=d[0].childNodes}for(var c=0;c";q=d[0].offsetWidth; +if(b)for(var f=0,e=d[0].offsetWidth,h=1,c=0;c",f+=b[c].offsetWidth,f>=e&&(e+=d[h]?d[h].offsetWidth:0,h++),q=b[0].offsetWidth;return a}function B(d,a){for(var b=parseInt(d.style.left,10),c=0;cb)return c;return a} +function z(d){for(var a="",b=d.firstChild.rows,c=0;c";n=d.firstChild.rows[0].cells[0].offsetHeight}return a}function D(d){var a="";if(scheduler._mode=="week_agenda")for(var c=scheduler._els.dhx_cal_data[0].getElementsByTagName("DIV"),f=0;f"+g(c[f].innerHTML)+"");else if(scheduler._mode=="agenda"||scheduler._mode=="map")c=scheduler._els.dhx_cal_header[0].childNodes[0].childNodes,a+=""+g(c[0].innerHTML)+""+g(c[1].innerHTML)+""; +else if(scheduler._mode=="year"){c=scheduler._els.dhx_cal_data[0].childNodes;for(f=0;f",a+=v(c[f].childNodes[1].childNodes),a+=z(c[f].childNodes[2]),a+=""}else{a+="";c=scheduler._els.dhx_cal_header[0].childNodes;a+=v(c);a+="";var e=scheduler._els.dhx_cal_data[0];if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){a+="";for(f=0;f"}a+="";n=e.firstChild.rows[0].cells[0].offsetHeight}else if(e.firstChild.tagName=="TABLE")a+=z(e);else{for(e=e.childNodes[e.childNodes.length-1];e.className.indexOf("dhx_scale_holder")==-1;)e=e.previousSibling;e=e.childNodes;a+="";for(f=0;f";a+="";n=e[0].offsetHeight}}a+="";return a}function l(d,a){return(window.getComputedStyle?window.getComputedStyle(d,null)[a]:d.currentStyle?d.currentStyle[a]:null)|| +""}function E(){var d="",a=scheduler._rendered;if(scheduler._mode=="agenda"||scheduler._mode=="map")for(var b=0;b"+g(a[b].childNodes[0].innerHTML)+""+g(a[b].childNodes[2].innerHTML)+"";else if(scheduler._mode=="week_agenda")for(b=0;b"+g(a[b].innerHTML)+"";else if(scheduler._mode=="year"){a=scheduler.get_visible_events();for(b=0;b";c=scheduler.date.add(c,1,"day");if(c.valueOf()>= +scheduler._max_date.valueOf())break}}}else{var k=scheduler.matrix&&scheduler.matrix[scheduler._mode];if(k&&k.render=="cell"){a=scheduler._els.dhx_cal_data[0].getElementsByTagName("TD");for(b=0;b"}else for(b=0;b";p=="event"?(d+="
",h=j?l(a[b].childNodes[2],"color"):"",o=j?l(a[b].childNodes[2],"backgroundColor"):"",d+=""):(h=j?l(a[b],"color"):"",o=j?l(a[b],"backgroundColor"):"",d+="");d+=""}}}}return d}function F(){var d="
";return d}var q=0,n=0,j=!1;k=="fullcolor"&&(j=!0,k="color");k=k||"color";html_regexp=RegExp("<[^>]*>","g");newline_regexp=RegExp("]*>","g");var p=(new Date).valueOf(),i=document.createElement("div");i.style.display= +"none";document.body.appendChild(i);i.innerHTML='
';document.getElementById(p).firstChild.value=encodeURIComponent(D(k).replace("\u2013","-")+E()+F());document.getElementById(p).submit();i.parentNode.removeChild(i);grid=null}; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js index 066e5e5a57b..0cb1e926595 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js @@ -1,9 +1,9 @@ /* 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 */ -scheduler.attachEvent("onTemplatesReady",function(){function h(d,b,c,f){for(var e=b.getElementsByTagName(d),a=c.getElementsByTagName(d),g=a.length-1;g>=0;g--)if(c=a[g],f){var i=document.createElement("SPAN");i.className="dhx_text_disabled";i.innerHTML=f(e[g]);c.parentNode.insertBefore(i,c);c.parentNode.removeChild(c)}else c.disabled=!0}scheduler.attachEvent("onBeforeLightbox",function(d){if(this.config.readonly_form||this.getEvent(d).readonly)this.config.readonly_active=!0;else return this.config.readonly_active= -!1,!0;for(var b=0;b=0;f--)if(a=g[f],h){var d=document.createElement("SPAN");d.className="dhx_text_disabled";d.innerHTML=h(i[f]);a.parentNode.insertBefore(d,a);a.parentNode.removeChild(a)}else a.disabled=!0}var r=scheduler.config.lightbox.sections,k=null,n=scheduler.config.buttons_left.slice(),o=scheduler.config.buttons_right.slice();scheduler.attachEvent("onBeforeLightbox", +function(e){if(this.config.readonly_form||this.getEvent(e).readonly){this.config.readonly_active=!0;for(var b=0;be)return a.setDate(a.getDate()+b[h]*1-e-(d?c:f));this.transpose_day_week(a,b,c+d,null,c)}; -scheduler.transpose_type=function(a){var b="transpose_"+a;if(!this.date[b]){var c=a.split("_"),d=864E5,f="add_"+a,e=this.transponse_size[c[0]]*c[1];if(c[0]=="day"||c[0]=="week"){var h=null;if(c[4]&&(h=c[4].split(","),scheduler.config.start_on_monday)){for(var j=0;j0&&a.setDate(a.getDate()+c*e);h&&scheduler.transpose_day_week(a,h,1,e)};this.date[f]=function(a,b){var c=new Date(a.valueOf()); +scheduler.showLightbox=function(a){var b=this.locale,c=scheduler.config.lightbox_recurring,d=this.getEvent(a).event_pid,f=a.toString().indexOf("#")!=-1;f&&(d=a.split("#")[0]);if(!d||d==0||!b.labels.confirm_recurring||c=="instance"||c=="series"&&!f)return this.showLightbox_rec(a);var e=function(){d=this.getEvent(d);d._end_date=d.end_date;d.end_date=new Date(d.start_date.valueOf()+d.event_length*1E3);return this.showLightbox_rec(d.id)};if(c=="ask"){var h=this;dhtmlx.modalbox({text:b.labels.confirm_recurring, +title:b.labels.title_confirm_recurring,width:"500px",position:"middle",buttons:[b.labels.button_edit_series,b.labels.button_edit_occurrence,b.labels.icon_cancel],callback:function(b){switch(+b){case 0:return e.call(h);case 1:return h.showLightbox_rec(a)}}})}else e()};scheduler.get_visible_events_rec=scheduler.get_visible_events; +scheduler.get_visible_events=function(a){for(var b=0;be)return a.setDate(a.getDate()+b[h]*1-e-(d?c:f));this.transpose_day_week(a,b,c+d,null,c)}; +scheduler.transpose_type=function(a){var b="transpose_"+a;if(!this.date[b]){var c=a.split("_"),d=864E5,f="add_"+a,e=this.transponse_size[c[0]]*c[1];if(c[0]=="day"||c[0]=="week"){var h=null;if(c[4]&&(h=c[4].split(","),scheduler.config.start_on_monday)){for(var i=0;i0&&a.setDate(a.getDate()+c*e);h&&scheduler.transpose_day_week(a,h,1,e)};this.date[f]=function(a,b){var c=new Date(a.valueOf()); if(h)for(var d=0;d=0&&a.setMonth(a.getMonth()+d*e);c[3]&&scheduler.date.day_week(a,c[2],c[3])},this.date[f]=function(a,b){var d=new Date(a.valueOf());d.setMonth(d.getMonth()+b*e);c[3]&&scheduler.date.day_week(d,c[2],c[3]);return d}}}; -scheduler.repeat_date=function(a,b,c,d,f){var d=d||this._min_date,f=f||this._max_date,e=new Date(a.start_date.valueOf());if(!a.rec_pattern&&a.rec_type)a.rec_pattern=a.rec_type.split("#")[0];this.transpose_type(a.rec_pattern);for(scheduler.date["transpose_"+a.rec_pattern](e,d);e0?new Date(e.valueOf()+a.event_length*1E3-k*6E4):new Date(i.end_date.valueOf()+k*6E4);i._timed=this.is_one_day_event(i);if(!i._timed&&!this._table_view&&!this.config.multi_day)break;b.push(i);c||(this._events[i.id]=i,this._rec_temp.push(i))}e=this.date.add(e,1,a.rec_pattern)}}; -scheduler.getRecDates=function(a,b){var c=typeof a=="object"?a:scheduler.getEvent(a),d=0,f=[],b=b||1E3,e=new Date(c.start_date.valueOf()),h=new Date(e.valueOf());if(!c.rec_type)return[{start_date:c.start_date,end_date:c.end_date}];this.transpose_type(c.rec_pattern);for(scheduler.date["transpose_"+c.rec_pattern](e,h);e0?new Date(d.valueOf()+c.event_length*1E3-e*6E4):new Date(b.valueOf()-e*6E4):new Date(f.valueOf())}; +scheduler.getRecDates=function(a,b){var c=typeof a=="object"?a:scheduler.getEvent(a),d=0,f=[],b=b||100,e=new Date(c.start_date.valueOf()),h=new Date(e.valueOf());if(!c.rec_type)return[{start_date:c.start_date,end_date:c.end_date}];if(c.rec_type=="none")return[];this.transpose_type(c.rec_pattern);for(scheduler.date["transpose_"+c.rec_pattern](e,h);ea)if(f.rec_pattern){if(f.rec_pattern!="none"){var e=[];this.repeat_date(f,e,!0,a,b);for(var h=0;ha&&!this._rec_markers[e[h].id]&&c.push(e[h])}}else f.id.toString().indexOf("#")==-1&&c.push(f)}return c};scheduler.config.repeat_date="%m.%d.%Y"; -scheduler.config.lightbox.sections=[{name:"description",height:130,map_to:"text",type:"textarea",focus:!0},{name:"recurring",type:"recurring",map_to:"rec_type",button:"recurring"},{name:"time",height:72,type:"time",map_to:"auto"}];scheduler._copy_dummy=function(){this.start_date=new Date(this.start_date);this.end_date=new Date(this.end_date);this.event_length=this.event_pid=this.rec_pattern=this.rec_type=this._timed=null}; -scheduler.__recurring_template='








day everymonth
everymonth

occurrences

'; +scheduler.config.lightbox.sections=[{name:"description",height:130,map_to:"text",type:"textarea",focus:!0},{name:"recurring",type:"recurring",map_to:"rec_type",button:"recurring"},{name:"time",height:72,type:"time",map_to:"auto"}];scheduler._copy_dummy=function(){var a=new Date(this.start_date),b=new Date(this.end_date);this.start_date=a;this.end_date=b;this.event_length=this.event_pid=this.rec_pattern=this.rec_type=null};scheduler.config.include_end_by=!1;scheduler.config.lightbox_recurring="ask"; +scheduler.__recurring_template='



day everymonth
everymonth

occurrences

'; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js index fd3b34913bb..dafc552292a 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js @@ -1,8 +1,9 @@ /* 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 */ -scheduler.data_attributes=function(){var f=[],d=scheduler.templates.xml_format,c;for(c in this._events){var e=this._events[c],a;for(a in e)a.substr(0,1)!="_"&&f.push([a,a=="start_date"||a=="end_date"?d:null]);break}return f}; -scheduler.toXML=function(f){var d=[],c=this.data_attributes(),e;for(e in this._events){var a=this._events[e];if(a.id.toString().indexOf("#")==-1){d.push("");for(var b=0;b");d.push("")}}return(f||"")+""+d.join("\n")+""}; -scheduler.toJSON=function(){var f=[],d=this.data_attributes(),c;for(c in this._events){var e=this._events[c];if(e.id.toString().indexOf("#")==-1){for(var e=this._events[c],a=[],b=0;b");for(var a=0;a");c.push("")}}return(g||"")+""+c.join("\n")+""}; +scheduler.toJSON=function(){var g=[],c=this.data_attributes(),b;for(b in this._events){var e=this._events[b];if(e.id.toString().indexOf("#")==-1){for(var e=this._events[b],d=[],a=0;a=this._trace_x[d+1];)d++;for(;this._trace_x[d]&&a[c].end_date>this._trace_x[d];)b[f][d]||(b[f][d]=[]),b[f][d].push(a[c]),d++}return b}function v(a,b,c){var f=0,d=b?a.end_date:a.start_date;if(d.valueOf()>scheduler._max_date.valueOf())d=scheduler._max_date;var i=d-scheduler._min_date_timeline; -if(i<0)k=0;else{var g=Math.round(i/(c*scheduler._cols[0]));if(g>scheduler._cols.length)g=scheduler._cols.length;for(var e=0;ed.start_date?1:-1});for(var l=[],d=0;dm.start_date;)n++;l[n]=m;o+=scheduler.render_timeline_event.call(this,m,n)}}if(this.fit_events){var w=this._events_height[this.y_unit[e].key]||0;h.height=w>h.height?w:h.height;h.style_height="height:"+ -h.height+"px;"}b+=""+h.td_content+"";if(this.render=="cell")for(d=0;d
"+scheduler.templates[this.name+"_cell_value"](c[e][d])+ -"
";else{b+="
";b+=o;b+="";for(d=0;d
"; -b+="
";b+="
"}b+=""}b+="";this._matrix=c;a.innerHTML=b;scheduler._rendered=[];for(var q=document.getElementsByTagName("DIV"),e=0;e";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})})(); +(function(){function E(){for(var a=scheduler.get_visible_events(),c=[],b=0;b=this._trace_x[f+1];)f++;for(;this._trace_x[f]&&a[b].end_date>this._trace_x[f];)c[e][f]||(c[e][f]=[]),c[e][f].push(a[b]),f++}return c}function t(a,c,b){var e=0,f=c?a.end_date:a.start_date;if(f.valueOf()>scheduler._max_date.valueOf())f=scheduler._max_date;var g=f-scheduler._min_date_timeline; +if(g<0)k=0;else{var i=Math.round(g/(b*scheduler._cols[0]));if(i>scheduler._cols.length)i=scheduler._cols.length;for(var d=0;db.id?1:-1:a.start_date>b.start_date? +1:-1});for(var b=[],e=a.length,f=0;fh)h=b[m]._sorder;g._sorder=h+1;g._inner=!1}else g._sorder=0;b.push(g);b.length>(b.max_count||0)?(b.max_count=b.length,g._count=b.length):g._count=g._count?g._count:1}for(var n=0;nh.height?m:h.height;h.style_height="height:"+h.height+"px;";this._section_height[this.y_unit[d].key]=h.height}c+= +""+h.td_content+"";if(this.render=="cell")for(f=0;f
"+scheduler.templates[this.name+"_cell_value"](b[d][f])+"
"; +else{c+="
";c+=l;c+="";for(f=0;f
";c+="
"; +c+="
"}c+=""}c+="";this._matrix=b;a.innerHTML=c;scheduler._rendered=[];for(var n=scheduler._obj.getElementsByTagName("DIV"),d=0;d";if(this.second_scale){for(var j=this.second_scale.x_unit,k=[this._trace_x[0]],h=[],l=[this.dx,this.dx],m=0,n=0;n
";var u=a.firstChild;u.style.height=b+"px";var s=a.lastChild;s.style.position="relative";for(var v=0;vb.start_date?1:-1});if(scheduler._tooltip){if(scheduler._tooltip.date==e)return;scheduler._tooltip.innerHTML=""}else{var g=scheduler._tooltip=document.createElement("DIV");g.className="dhx_tooltip";document.body.appendChild(g);g.onclick=scheduler._click.dhx_cal_data}for(var i="",d=0;d";i+="
"+(f[d]._timed?scheduler.templates.event_date(f[d].start_date):"")+"
";i+="
 
";i+=scheduler.templates[a.name+"_tooltip"](f[d].start_date,f[d].end_date,f[d])+""}scheduler._tooltip.style.display="";scheduler._tooltip.style.top="0px";scheduler._tooltip.style.left= +document.body.offsetWidth-b.left-scheduler._tooltip.offsetWidth<0?b.left-scheduler._tooltip.offsetWidth+"px":b.left+c.src.offsetWidth+"px";scheduler._tooltip.date=e;scheduler._tooltip.innerHTML=i;scheduler._tooltip.style.top=document.body.offsetHeight-b.top-scheduler._tooltip.offsetHeight<0?b.top-scheduler._tooltip.offsetHeight+c.src.offsetHeight+"px":b.top+"px"}}function C(){dhtmlxEvent(scheduler._els.dhx_cal_data[0],"mouseover",function(a){var c=scheduler.matrix[scheduler._mode];if(c&&c.render== +"cell"){if(c){var b=scheduler._locate_cell_timeline(a),a=a||event,e=a.target||a.srcElement;if(b)return J(c,b,getOffset(b.src))}D()}});C=function(){}}function K(a){for(var c=a.parentNode.childNodes,b=0;bb.x){var h=(b.x-(e-k))/k,h=h<0?0:h;break}}for(e=0;j< +this._colsS.heights.length;j++)if(e+=this._colsS.heights[j],e>b.y)break;b.fields={};a.y_unit[j]||(j=a.y_unit.length-1);if(j>=0&&a.y_unit[j]&&(b.section=b.fields[a.y_property]=a.y_unit[j].key,c))c[a.y_property]=b.section;b.x=0;var l;if(d>=a._trace_x.length)l=scheduler.date.add(a._trace_x[a._trace_x.length-1],a.x_step,a.x_unit);else{var m=a._trace_x[d+1]?a._trace_x[d+1]:scheduler.date.add(a._trace_x[a._trace_x.length-1],a.x_step,a.x_unit),n=Math.ceil(h*(m-a._trace_x[d]));l=new Date(+a._trace_x[d]+n)}if(this._drag_mode== +"move"&&this._drag_id&&this._drag_event){var c=this.getEvent(this._drag_id),o=this._drag_event;if(!o._move_delta)o._move_delta=(c.start_date-l)/6E4;l=scheduler.date.add(l,o._move_delta,"minute")}if(this._drag_mode=="resize"&&c)b.resize_from_start=!!(Math.abs(c.start_date-l)';if(scheduler.config.drag_resize){var p="dhx_event_resize";o+="
"}o+=n+"";if(c){var r=document.createElement("DIV");r.innerHTML=o;var u=this.order[b],s=scheduler._els.dhx_cal_data[0].firstChild.rows[u].cells[1].firstChild;scheduler._rendered.push(r.firstChild);s.appendChild(r.firstChild)}else return o};scheduler.renderMatrix=function(a,c){if(!c)scheduler._els.dhx_cal_data[0].scrollTop=0;scheduler._min_date=scheduler.date[this.name+"_start"](scheduler._date);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 b=scheduler._els.dhx_cal_header[0];b.className=b.className.replace(/ dhx_second_cal_header/gi,"")}}I.call(this,a)};scheduler._locate_cell_timeline=function(a){for(var a= +a||event,c=a.target?a.target:a.srcElement,b={},e=scheduler.matrix[scheduler._mode],f=scheduler.getActionData(a),g=0;g6){var m=new Date(a.days);scheduler.date.date_part(new Date(k))<=+m&&+h>=+m&&l.push(m)}else l.push.apply(l,scheduler._get_dates_by_index(a.days));for(var n=a.zones,o=scheduler._get_css_classes_by_config(a), +p=0;px){var q=scheduler._get_block_by_config(a);q.className=o;var y=t({start_date:x},!1,e._step)-1,A=t({start_date:w},!1,e._step)-1,B=A-y-1,C=e._section_height[b]-1;q.style.cssText="height: "+C+"px; left: "+y+"px; width: "+B+"px; top: 0;";c.insertBefore(q,c.firstChild);f.push(q)}}return f}}else return M.apply(scheduler, +[a,c,b])};var N=scheduler._append_mark_now;scheduler._append_mark_now=function(a){if(scheduler.matrix&&scheduler.matrix[scheduler._mode]){var c=new Date,b=scheduler._get_zone_minutes(c),e={days:+scheduler.date.date_part(c),zones:[b,b+1],css:"dhx_matrix_now_time",type:"dhx_now_time"};return scheduler._render_marked_timespan(e)}else return N.apply(scheduler,[a])};scheduler.attachEvent("onViewChange",function(a,c){scheduler.matrix&&scheduler.matrix[c]&&scheduler.markNow&&scheduler.markNow()});scheduler.attachEvent("onScaleAdd", +function(a,c){var b=scheduler._marked_timespans;if(b&&scheduler.matrix&&scheduler.matrix[scheduler._mode])for(var e=scheduler._mode,f=scheduler._min_date,g=scheduler._max_date,i=b.global,d=scheduler.date.date_part(new Date(f));dEvent: "+c.text+"
Start date: "+scheduler.templates.tooltip_date_format(b)+"
End date: "+scheduler.templates.tooltip_date_format(d)}; +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),g=b.target||b.srcElement;if(!this.isTooltip(g)){var h=0,l=0,i=scheduler._obj;if(i.offsetParent){do h+=i.offsetLeft,l+=i.offsetTop;while(i=i.offsetParent)}var j=e.x+(c.config.delta_x||0)-h,k=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 n=this.tooltip.offsetWidth,o=this.tooltip.offsetHeight,m=scheduler._obj.parentNode.scrollLeft||0,p=Math.min(scheduler._obj.offsetWidth,scheduler._obj.parentNode.offsetWidth);p-j-(scheduler.xy.margin_left||0)-n<0?(a.removeAttribute?a.removeAttribute("left"):a.removeProperty("left"),a.right=scheduler._obj.offsetWidth-m-j+2*(c.config.delta_x||0)+"px"):a.left=j<0?e.x+Math.abs(c.config.delta_x||0)+"px":j+m+"px"; +scheduler._obj.offsetHeight-k-(scheduler.xy.margin_top||0)-o<0?(a.removeAttribute?a.removeAttribute("top"):a.removeProperty("top"),a.bottom=scheduler._obj.offsetHeight-k-2*(c.config.delta_y||0)+"px"):a.top=k<0?e.y+Math.abs(c.config.delta_y||0)+"px":k+"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=window._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 g=scheduler.templates.tooltip_text(e.start_date,e.end_date,e);if(!g)return a.hide();var h=void 0;_isIE&&(h=document.createEventObject(c));scheduler.callEvent("onBeforeTooltip",[b,e])&&g&&a.delay(a.show,a,[h||c,g])}}else a.delay(a.hide,a,[])}); +scheduler.attachEvent("onBeforeDrag",function(){dhtmlXTooltip.hide();return!0});scheduler.attachEvent("onEventDeleted",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/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css deleted file mode 100644 index 212423da5d1..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -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_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/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js deleted file mode 100644 index 70b4abeda7c..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js +++ /dev/null @@ -1,26 +0,0 @@ -/* -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 -*/ -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/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js index c131cb1eb13..986ce0fa3e3 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js @@ -1,19 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ -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.attachEvent("onOptionsLoadStart",function(){a.y_unit=scheduler._getArrayToDisplay(a.y_unit_original)}),scheduler.form_blocks[a.name]={render:function(b){var c="
";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";return c},set_value:function(b,c,e,f){var d=scheduler._getArrayForSelect(scheduler.matrix[f.type].y_unit_original, +f.type);b.innerHTML="";var a=document.createElement("select");b.appendChild(a);for(var h=b.getElementsByTagName("select")[0],i=0;i",g=c.folder_events_available?"dhx_data_table folder_events":"dhx_data_table folder"):(f=c.dy,d="dhx_row_item",h="dhx_matrix_scell item",i="",g="dhx_data_table");td_content="
"+i+"
"+(scheduler.templates[c.name+"_scale_label"](b.key,b.label,b)||b.label)+"
";e={height:f,style_height:j,tr_className:d,td_className:h,td_content:td_content,table_className:g}}return e});var section_id_before; +scheduler.attachEvent("onBeforeEventChanged",function(a,b,c){if(scheduler._isRender("tree")){var e=scheduler.getSection(a[scheduler.matrix[scheduler._mode].y_property]);if(e&&typeof e.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){if(scheduler._isRender("tree")){var e=scheduler._locate_cell_timeline(c);if(e){var f=scheduler.matrix[scheduler._mode].y_unit[e.y].key;if(typeof scheduler.matrix[scheduler._mode].y_unit[e.y].children!="undefined"&&!scheduler.matrix[scheduler._mode].folder_events_available)return!1}var d=scheduler.getEvent(a);section_id_before=f||d[scheduler.matrix[scheduler._mode].y_property]}return!0}); +scheduler._getArrayToDisplay=function(a){var b=[],c=function(e,f){for(var d=f||0,a=0;ascheduler._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;escheduler._props[a].options.length)scheduler._props[a]._original_size=f,f=0;scheduler._props[a].size=f;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 g=(scheduler._props[a].position||0)+Math.floor((scheduler._correct_shift(c.valueOf(),1)-scheduler._min_date.valueOf())/864E5);return h[g].css?""+h[g].label+"":h[g].label};scheduler.date["add_"+a]=function(a,g){return scheduler.date.add(a,g,"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],g=c.order={},f=c.options,i=0;if.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 g=scheduler._props[this._mode];if(g)g.position=Math.min(Math.max(0,g.position+a),g.options.length-g.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})})(); +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 g= +scheduler._props[this._mode];if(g&&c){var e=this.getEvent(a);this._mouse_coords(c);f(g,e);this.event_updated(e)}return!0})})(); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js index bb342e484e0..d0241636ec9 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ scheduler.attachEvent("onTemplatesReady",function(){var d=!0,e=scheduler.date.str_to_date("%Y-%m-%d"),h=scheduler.date.date_to_str("%Y-%m-%d");scheduler.attachEvent("onBeforeViewChange",function(i,j,f,k){if(d){d=!1;for(var a={},g=(document.location.hash||"").replace("#","").split(","),b=0;b";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";for(var e=0;e
"}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 l=scheduler._els.dhx_cal_data[0].getElementsByTagName("div"),o=[],a=0;ai&&p.push(s)}p.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(e=0;e=i.valueOf()&&d.start_date.valueOf()<=n.valueOf()&&(q="start"),d.end_date.valueOf()>=i.valueOf()&& +d.end_date.valueOf()<=n.valueOf()&&(q="end"));f.innerHTML=scheduler.templates.week_agenda_event_text(d.start_date,d.end_date,d,i,q);f.setAttribute("event_id",d.id);w.appendChild(f)}i=scheduler.date.add(i,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=scheduler._allow_dnd=!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", +h();else{scheduler._table_view=scheduler._allow_dnd=!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 g=c._date;c=c.parentNode}if(!g)return b;b.x=0;var e=g.valueOf()-scheduler._min_date.valueOf();b.y=Math.ceil(e/6E4/this.config.time_step);if(this._drag_mode=="move"){this._drag_event._dhx_changed=!0;this._select_id=this._drag_id;for(var j=0;j";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;s";c+="
"+(h[e]._timed?this.templates.event_date(h[e].start_date):"")+"
";c+="
 
";c+=this.templates.year_tooltip(h[e].start_date,h[e].end_date,h[e])+""}this._tooltip.style.display= +"";this._tooltip.style.top="0px";this._tooltip.style.left=document.body.offsetWidth-a.left-this._tooltip.offsetWidth<0?a.left-this._tooltip.offsetWidth+"px":a.left+k.offsetWidth+"px";this._tooltip.date=b;this._tooltip.innerHTML=c;this._tooltip.style.top=document.body.offsetHeight-a.top-this._tooltip.offsetHeight<0?a.top-this._tooltip.offsetHeight+k.offsetHeight+"px":a.top+"px"};scheduler._init_year_tooltip=function(){dhtmlxEvent(scheduler._els.dhx_cal_data[0],"mouseover",function(b){if(c()){var b= +b||event,a=b.target||b.srcElement;if(a.tagName.toLowerCase()=="a")a=a.parentNode;(a.className||"").indexOf("dhx_year_event")!=-1?scheduler.showToolTip(w(a.getAttribute("date")),getOffset(a),b,a):scheduler.hideToolTip()}});this._init_year_tooltip=function(){}};scheduler.attachEvent("onSchedulerResize",function(){return c()?(this.year_view(!0),!1):!0});scheduler._get_year_cell=function(b){var a=b.getMonth()+12*(b.getFullYear()-this._min_date.getFullYear())-this.week_starts._month,j=this._els.dhx_cal_data[0].childNodes[a], +b=this.week_starts[a]+b.getDate()-1;return j.childNodes[2].firstChild.rows[Math.floor(b/7)].cells[b%7].firstChild};var l={};scheduler._mark_year_date=function(b,a){var j=v(b),c=this._get_year_cell(b),g=this.templates.event_class(a.start_date,a.end_date,a);if(!l[j])c.className="dhx_month_head dhx_year_event",c.setAttribute("date",j),l[j]=c;c.className+=g?" "+g:""};scheduler._unmark_year_date=function(b){this._get_year_cell(b).className="dhx_month_head"};scheduler._year_render_event=function(b){for(var a= +b.start_date,a=a.valueOf()=this._max_date.valueOf())break};scheduler.year_view=function(b){if(b){var a=scheduler.xy.scale_height;scheduler.xy.scale_height=-1}scheduler._els.dhx_cal_header[0].style.display=b?"none":"";scheduler.set_sizes();if(b)scheduler.xy.scale_height=a;scheduler._table_view=b;if(!this._load_mode||!this._load())if(b){scheduler._init_year_tooltip(); +scheduler._reset_year_scale();if(scheduler._load_mode&&scheduler._load())return scheduler._render_wait=!0;scheduler.render_view_data()}else scheduler.hideToolTip()};scheduler._reset_year_scale=function(){this._cols=[];this._colsS={};var b=[],a=this._els.dhx_cal_data[0],c=this.config;a.scrollTop=0;a.innerHTML="";var k=Math.floor(parseInt(a.style.width)/c.year_x),g=Math.floor((parseInt(a.style.height)-scheduler.xy.year_top)/c.year_y);g<190&&(g=190,k=Math.floor((parseInt(a.style.width)-scheduler.xy.scroll_width)/ +c.year_x));for(var h=k-11,l=0,e=document.createElement("div"),m=this.date.week_start(new Date),d=0;d<7;d++)this._cols[d]=Math.floor(h/(7-d)),this._render_x_header(d,l,m,e),m=this.date.add(m,1,"day"),h-=this._cols[d],l+=this._cols[d];e.lastChild.className+=" dhx_scale_bar_last";for(var f=this.date[this._mode+"_start"](this.date.copy(this._date)),n=f,d=0;d
";i.childNodes[0].innerHTML=this.templates.year_month(f);for(var q=this.date.week_start(f),t=this._reset_month_scale(i.childNodes[2],f,q),o=i.childNodes[2].firstChild.rows,p=o.length;p<6;p++){o[0].parentNode.appendChild(o[0].cloneNode(!0));for(var s=0;se;-X@@ zKp+=WWfAQT87diKOqQt_-l&EmI=E{B_d!I_q@S6OU@xHY_a7N|MJpQxhXpf;hZ`${ zL?i%`k~Wi*B#%QD0i2u)ot+k$LM$)?r>736128P3Hz+Oyv$PJhE-0@l7!3x#zrGCv K7%8ulUI8Z9T{f=( delta 156 zcmV;N0Av4z1B3$%M@dFFIbk0F5CGLTkqpp(5C8xMp}?DPNGuwUNaMp3>2xBVM{+t` zR7@8Lb&o(i9z7Mm>v$PJhE-0HR7!3x#zrGCv K7%7{RUI8Y4D>YjH diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/colapce-expand-icon.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/collapse_expand_icon.gif similarity index 100% rename from addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/colapce-expand-icon.gif rename to addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/collapse_expand_icon.gif diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/images.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/images.png new file mode 100644 index 0000000000000000000000000000000000000000..8faac6388962a9ee0336f0691d5a018bfe9d248c GIT binary patch literal 1581 zcmW;M3p5jY7y$4w<~fgy+<7D+Y95tX9m#4QGtH~3DMQHESn_C0G^CNdZ`2Wr!sHoa zWO)^7SM%6zdU+&yHRTb~In4QGoFhH~g0Hg;|NW|HYasEAYh#C&k z&j~Wh3`M)wxVvO1Ftkv53)R@IOr z2=m|q>3OghctoD0dDa|jowIAqB1d~HVyIRb2i1`Ahrnwaam;Wc z)*MTIAnbb}?DIc5W;r=w9e7@Cw2L>4hhxn+iok<>y&}|K8Z$uky^yYpJy_b;mMJ04hVZwn216CU8QsN0q_2+h?_iV?=#~|`L0_~02-Z{ zb%k+CURD(s*OD&MYn%+42T$ha0M(P2!8qKsn5`cgjaCQ`BOv+olbQP!Ud$C0zsyR% z!I@qCb!{PuTe3A8`?SkBDxhcaCxtc6U}T9X#i{T-;}_~JyY*G@EiJ)~SeOR;#f^#Y z8^5<#bm%4TJ+Je+oDFx07reeny+pqmR$aNiup8mP+}w`|I(*N?DBnd%%qTy|lNCJl zy*n^)KKghuMlB@Fh3sb7(4@xRZT`wiks01&`eSHs?X>aIJ=ukCFB&?dXkoq7SUtbC zWMXTe%)55rJi{%|0F{@eQ$8_3T4OYV(tzHuL9s$}cFZFRVZtJ3Hm+oL`%kTiX{Be~ zKH&lkySkC47OQLC6al~QMT)*Yq zk%JE668=q<^xqj<2XQ;h*J|fG$L%#XA%@3QZ7ekGCWYPd&+S}*6V zJu4DyiBJYKWFfLlA3nb?mVsC9Vi1=%KWbCm_~{0pSn*3f(afA>3^Kg043VZkVH>e(+j#7#BWyugeuq9Ehr4=4Ca-Juq@tkqi z1z*ss;MHHJ5G>lMUzmn?Ybx*c>TQYpHtAXtU>N@3{PyqYb{kpZ$`Ic+qKhPh^%49@ z2n0?}b|?InlJHNo&CfNUZvQ4PHJ>NScs$YnvGo%fkoX*iP+$9X1T$A^iH6v_L$r1t z)ocaTgTTrnZNF}BvPC*IB z_7H6h+{_9&(~cm-B%J>MsyDOO-mrhl&k~wGm#g%2YoZv`31}3<-&e*N3c+i&mO zdwlQFtp`tm=*GP#*X};La{J+>TMsVYxPSio-LqHkoW64V@~(_M_j6z90QE9>y85}Sb4q9e E0Ot&CaR2}S diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/move.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/move.png deleted file mode 100644 index ce5940f0d4962ba625de970a768d3089f13509e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^j371(GmxD1Q}Q5?(hBeiasB`Q|DXR){``ON`~RKa z|F8f0fBDz{^S}O|{`vpd&;N&h{NMNE|E}-G4eo73{aPnr;B3<$IN7bgn$Ht ugn|T)1djxbgp7n42R1Y$G9PAa<7P1SV%_MQ`h6x)HG`+CpUXO@geCxBH9=+o diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/multi-days-bg.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/multi-days-bg.png deleted file mode 100644 index 8ed81e357ddaf3ffbfa6b01ecd83d723faebf194..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmW;H$x1>26b4|MNGumYZCV%f0QCTcVv>o3txK?#n+B~-vec}~;o&{cEp6nyZX#o-JR4x2%x%u+}s5|z11+khMb1bGB1TS_H`P;*#Z`d}~! z#xqzb;qZpdZok%ss!cAS0cQ6TuprMCdGsVbAwkFa!ea&kt4K^bn|8ahefkT^>Eho2 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/resize_dots.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/resize_dots.png new file mode 100644 index 0000000000000000000000000000000000000000..44045c21c351a2d81e2bc803b70fcb2066ea8efb GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c6!3HF^d|7u4NO2Z;L>4nJ@ErkR#;MwT(m+8) zPZ!6Kid)Gk5B$%hI57F}0Kxx!1KO=u<5X=vX`o<* zr;B5V#`)wQ|Nq-F+wrixad^XhWKWC8EJH)XE6j!b6LcHAC)xx!3VI0gBx|s78Wyg;b2(~*Tb&H0|F;j9$d=dYN)N<%y_YD;+%&}A~~unBu+N}VX^J# sv$T|a(lDvgMN>^PXoJgkc8y((KiW1%)Jc}@1iFF2)78&qol`;+0N%Vk`Tzg` literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/arrow_right.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..ced03e5e4edb66c023aa752da9f47d870b4e52a9 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^+(693!3HF^taP6Tq&N#aB8wRq_>O=u<5X=vX`o=f zr;B5V#`)xggoFpIN&E_F|NsBDXSU;EV)F6fv2}>yPnj*aTB4`%kBy%no8=;r!v@C2 z&L#nU^EHkJ+&OjV&;zEB!(Kf}66+FEQwgzZW*Q;SUmi^$~V jUP~Gl-JU+<1sg*O$Hs_?XyY3|s~J39{an^LB{Ts5*oQlp literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/but_repeat.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/but_repeat.gif new file mode 100644 index 0000000000000000000000000000000000000000..93066671bd916122294b9bafd3fb0fa062eeca5a GIT binary patch literal 1472 zcmZ?wbhEHblw#0exT?tT^XJcv8#k_Ay?V*wMK`WrTeWiewk?~E9zOKx)2Ep;XRKel zX4b4(`}glXa^&!vH*YqsU$<}HzUR-Lo<4p0@}-OS?%n(K>({(_^S*xlx@^hfqeqYK z+q37^t()`b&wKm!?Y+Bqr%#{0asAr=|Nk@43@HBRj_?goa7ipl1kyJ46$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J=B$SufC zElE_U$j!+swyLmIN=(U5O0@#ALBje<3ScEA*|tiKAPEJKozD41sS2ig2D-@xW(Epo zhI)p^Cg$emItoSxh6efuM*4YxcX2i_H!?JIHFPw!FmrJ< zGIldIH+D5KHiPMP$xklLP0cHT=}kfCb;YR{ln`aDv3%K5U{SGf!Tfo1=ggip zbH?;(Q>RRxG;umQ)5GYU2RQuRb@qaS!qdeQDH%TUT#iyR%S+e zT53viQer}UTx?8qRAfYWSZGLaP+)++pRbR%m#2rjo2!enlcR&Zovn?vm8FHbnW>4f z5impP>FQ`}X=3_75)2UOZIupK@yp}<2&s{h22qLV&MO!HTmNHLf=H@Yw$d0Qmudt|wTfzXcY ztQ?jR@x2U=Q?x6@W%<`VJaopPPnt_X&__gGLe8C6*oQ+*MuAPX%!P@&NkJ-XigSj0 zV7R_CV2fu-_3o6 PJHM`8a8SvSfx#L8Aj1`Q literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/calendar.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/calendar.gif new file mode 100644 index 0000000000000000000000000000000000000000..8c12c947abc061840e77609603b73982074582c7 GIT binary patch literal 1018 zcmZ?wbhEHb6lV}+_|Cx4)7A6m-=8J(=B!z@X34T8b7sw%GO1_Dq9tqAty!{Y&YERQ zrc9c$W!)NvQ7{?;!!ZODf3kqRr2`^Cd4iqeI)k``0EdD@11pmtA4|Z81x^esYytua z2NoP*6ju-95eQUfX5(NJ(QtUM*pr3FWfIFthl5O06qFauIcfBSVHS(n29uMUm-|oW z5Rov^D9H$14zON=7IJQ2H|5NM*)0~8jUNdL8?w+BWyp=2F*w*X`?*dM< z6&qdEo@#t`X@@iWGp$=2UT*BVx=41%w69qwESrToY#zM5eQUGmgF5LFM+XLL02DBF A$N&HU literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/clock_big.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/clock_big.gif new file mode 100644 index 0000000000000000000000000000000000000000..26b331cf05e6419f9cb1bec5a6dc77ea833490d1 GIT binary patch literal 1958 zcmbVMX;>3i6rBLFD4^m>-GHxk2i0*_nv#-yXR~V;`q?G zYoImI&+(Az%H_1Qw86nav)P=Qnp#q2zabf0ULKD-?>%%#4im^m{+uRbDF0%*-4a85tWJtFP1KWM_|$kJr}L z*3{G}mC6D|p2=joTvVu1sTvy_3knL#OI1~s<+-`J#mb_q>dHH}zkm4fVNUj!%}x5Q zuC9rRiJPrACMPGeva&7}=0AG$DDUEhg8V#T6d!Iy#z~^rNGud_`VcYs-b)^A%+(yMo6QD;;cnND>FH@HDJj#_(+~u?P0!mC90IesGA{UU-6j`vd6B3L4oCM3L=5~u zbsZiS@EQ2slweY@n1x0N0uM{jU58%|;~kFV(fIgnzVKE#T`m+0Q5hGO3!_9*x}1UM z^09D~4(66^A|9SGkwr4_{+0vSg2}=pC`=)cJa{B338o?h#M8^$+uI!`lMoV-L?$9+ z55$}9Nv4xX@LwMuph@`q=%H-RUszzpz(>erVmgr+6B9#-@g!i9{X~RDqgi5*$sWMM zLwZOgKD`83PY8eNuu@931>Kut-XnDTu(sghV-4 zOhgDIqEKk5YsOkC3q}7<$7>Y`+@>P@ClnN(�D>SiD#eqHuxN-UiALoxDYG%2>Fe*q zB2m0pOpZ4NK>`pOiA-hs_#j>!e<}#+KkFMLlFGOu9y*IFu;4!NW&W!#oh3oJGE5SN zVNtUk5E6mOFlhuPhFQBP@NR*KkHttWkMpEfHYyPuMEM*ECWL2hmo9h~I{CkD zRV7!7FDr{?)B$J_keci-vobT%(^6Bu`25^wXV08I_30-cfArzW6UUDwCw-8Za5O$H z_Q?B(56NQ=M$4p<_r#b;7!`Ry5V3zB%IAf1_rCki+i$)3#_M}_zxHa_uF#z!ue=<* ztJtZJIBV_3J26>+y;#CkULNsp!aJa$Zq;*eBuX5$;XbL zIOc4J-yFLc|3=8kb5?G#xYY|>-63~ZU#6SYx#ab@W!?_U=Prs{GTb2)vR(zPI=}8t^>Ta2Hp$NYNPEgD_^g$q?HTxVLPqVupDseMo54BTT?;Qgq7ZGz zElYG>j4;I)eC_Dr_Do#&i_Ou*IdZd`fpgOJg(lNbXsJHgK5+s*s%SrT%u6~rI z3x<3gj2ll|J8Cz@ZcwsG_wRcx2{tYKjWyDi;KHhzKkrTBjYCJ4seMhE!MT?6}rm^)&LY5QHR6cFNbe`8D`EsoCmfuBnMoSm453>!U5*)m=%k z1vyFj^Bz66`BVGwJ5FsmaT6-Z-CIe*T@T$6Sf1bn*@*bPD`0I)@={E!J0Eh-*51`g zY}U5>>7AW$5+5xk(9aQ?!>KRv%bAaxN8-G-Zkr*?9i9(ug&Ov@SxrDaF80utKLKO$ BRLKAU literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/clock_small.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/clock_small.gif new file mode 100644 index 0000000000000000000000000000000000000000..9646dab0d163279a6702e2c2a2654315d7f2eb27 GIT binary patch literal 588 zcmZ?wbhEHblxN^)c*el+_wV1ibLYN#^=jtKnHx85{PpYCg9i`JpFe;7`t^ki7k>Eg z;n>k53l=PR_U!4)moFbbe*Ev>zcZ&#&!0DM^{SPRA3ys2`}f0#5C8o6bMoZL*|TOn zdGh%E`*&y0o?W|U^_I<>pFe*#efsn(moMMBb9?jV&2#3=UbAM+jqBI%-@pI!=g*Dn z*B&}};N81-mo8meylBy;4eNm5#PMU-uU%WQV#V_1%lGfyvv~31bLY<8x^?TxlP9}& z?b^C!)4H{5jvhVy<;$0^U%%eGaee*zb?eu!-?44$qeqYK+_`h>*3C^D)?d7E9;pAs z@#D8{-n@P5*5ykVXV0F!XV=avSFZg3|DRzn0mYvzj0_Bc3_2i3f#QULePu&nQ*%q8 zsF@?Pf~tf@YyX56K4X1XZD|oLYv+k`oB5gj0|Jy52k^R?&zs1~Be;xlS%8R<~e?=m(XzD-<0rO#_4s^1MF|jBpOgM1pkfV6g Sg$zd~j&>$-XD%)l25SK4FZx~p literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/close_icon.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/close_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa5d6620e493055c369385ec5cbd774f2bb9150 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{!3Opi<85sDEfH31!Z9ZwBV2G!S zV~E7%!d@R3@crIZ}u*9^a7gC;OXk;vd$@? F2>|j&FzEmQ literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/collapse_expand_icon.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/collapse_expand_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..bf64cc8199cee2ae3200dfb506eee46af6184866 GIT binary patch literal 1192 zcmZ?wbhEHb6k(~DO|DS<@LGeF#gl~X?OJYePkhZa}C`e4sPAySL zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@&oOZb5Ep zNuokUZcbjYRfVlmVoH8esuhq864qBz04piUwpDTjNhpBqbj~kIRWQ{v&`mZlGf*%y z)H5_TF*i5YQ7|$vG|)FN(l<2HH8i&}HnK7>P=Ep@plwAdX;wilZcw{`JX@uVl9B=| zef{$Ca=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~> zCgqow*eU^C3h_d20o>TUVm+{T^pf*)^(zt!^bPe4Kwg3=^!3HBG&dKny0|1L72#g2 z1{a4^7NqJ2r55Lx7A2F<7;)ua#$BaY0ZFv$KJ@xuKz}p_7rBv7@7f zk&%n5v#FV*1x&9?esXDUYF-IUZwf-M3r@YDgpgYRwAm%KD6=dz#jPkmR{`u{t4!Q( zal~mJRBsAyw>aU{s}FRHJ}6p|q8TOxOgkVZJkbI<@MNEw2Tbclz(mdX|KHy~zkmJw z@%`J^FP}es{P6zW+c&RYy?pWf+0!SFA3c0<|K8m@w{P9NasArWE0-@_ym0>9*)yk4 zojh^;*wG`04;?(Pf8X9cyLau}v3=XtEt@xO+^~M#+BK_Jtz5Bu+0rG87cE>cf8N|V zvuDkmF@4(9DU&BnoY3Fb+tc0E+0owC+S1(A*ic_rTT@+CSy5hAT2fq8SdgEWo0FZD znUS8Bnv$H9m=GTq8xtKB84(^98WJ277~t>c>*MX^>EZ6?>f-F==wNSWYh!I?X<=?= zYGP~z%usr|I@(&A8tQ7QD#}WV3i5KYGSX6#65?W_BEmv~0{ncuJltHI9PDhYEX+)d zz>?u73y@@D&;gbb44{&Ofhm4U|H{*E85Yku5R&e+!T-uz+XtnF4PtFqS1F|y9Q#l+ zVR_r*cN4#BJm2}#!Qr4m_-2mU-8~<7c6u3HS@pGR>85SELEm2e4a=Rf^3e)rrwcAD Wvon(Q@10!mhv#g5#G@QW25SH;i?#Ov literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/controls.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/controls.png new file mode 100644 index 0000000000000000000000000000000000000000..f9a99e21fae845f58cc3519fa806ac82cd3f9e32 GIT binary patch literal 761 zcmVx_Fc^m?f~SHYcoqBxUOjmg3Ijib-$S}F@#fK! zAP9mWcvKWrybJ~#g?)gXb`=Cc5QUh+JN8M!uHc1yE1Pm{jMmX;8r1)2>i z0g}M~mNdPZGk>2aUA|u}DG}}|v98o2epa%JsQhulLsBF;kn|;AM4#S^>Xzi2+$8B* zf|{`BH)lsO(UdWvJfUT*NX{jxWVxR1PA`d9Vx5xqSl)pomaG!l_LzO%4lL-J-2}_c zYDsQ)dljrn-sl{T@)bpl*m=IvF}~lMea{t@`7YUNR(I##CH;Kv*uU!NQN9Po=R^8@ zL|u}gV^rnsQmcp!f-c#$@0WQdwHzv|oFsoip(V{KKGp~t(texvQ-h=|eJIMz3p#C9 z;1EVoXh|QGZ`~j$V}o^hx-u`AsNI~Pb9U`1J(pU|Xh}AL?8D`dl3oiW6$#>!-YlMT z(*jXv?Al)>o6QKp)#aN8sC9LBDnUF7OfAZd*|lbY!ENsPW7ly~_?BcE3#rFWbp#GN zK`Sg2?^&Mbsp1B;I)0HYNhr2W16+0Y8CDVx!Dmrik)RWY5IiavAm1y({Msdn662>u zOUe&s#}vhF5N*%F><&#Y33^VgH*fB)iW!XXlB%8->QD>Z{!c$uBo*C25mo3QH%-)O z!UQY8?@0iXAPGPcfFwu)kOWDn1V{pq1W5pr03<;YfFuA(kOUwJk^m$DNP;8)NdS`m ztR$bsU0?x{On<~rO8lL-OkQ9q$!4|0Y~|V`Z9lOU13r0y4nJ@ErkR#;MwT(m+84 zPZ!6Kid)Gd^S3oJN*Wj%7#Qq1@#X)2rOW^AV;CeE7)~^?EqtOS9|ly*;OXk;vd$@? F2>@GS9hv|D literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/resizing.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_dhx_terrace/resizing.png new file mode 100644 index 0000000000000000000000000000000000000000..389ca543e0deee26e0d48330289f8e5d22def03a GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^vOvtr!3HFEiaq}cq&N#aB8wRq_>O=u<5X=vX`rB} tr;B5V#`)wQ_6!Y)3I>NeK55=HWKhj}t?V|{@*hwEgQu&X%Q~loCII>X80r83 literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab.png new file mode 100644 index 0000000000000000000000000000000000000000..f874fa321f76c0160b4b8f48a9daedd36cee8bd2 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-K!2~3QS7wv~DYlXzzhEE@1bNHYCjzN8o-U3d z9-VKm8gd;nkZ60jT|%I+@bbcQPDi;T_O`Hp6$;Z=5S?@TU|y`(N|Rpai&^>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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.png new file mode 100644 index 0000000000000000000000000000000000000000..8f78955621511ec7fd2bb17dd6f2ab5dfffd374a GIT binary patch literal 1580 zcmeHG=}+1R07cDAhc)TatX|8^61%PHIycwN)vm5n>$KKX)Ur%eENr?h6OUDy3QiHc z>%pw3)L*>NLdC0|P!E*i4I*VIprXPLMZ6USmDxXGUzUB?OWu25U*5~hxfkGL3AKen zAP`I6Z@pk=ZvUF+%+B<~Sd|3?Vg|YAAM9;38o6BVQ}!wx4i83RCM2LpB&zFHJ?me? zq~yw%Pg({wq?)PNX!6cOBf50zov4guwIut`+Q;$1*FPFk30OI1R zW)@G3&2P@Fp6KLE=akkly2qLaH0;5V;wR5|uU4xVEZ)QnsM)INl5)p|C3NwmaMm{j zeg8qis%8TOK~jx$aB8QfONEL}Hyj_w;tC@oB4Tlm_Vy2k1Pb+<7J)#h)EW+7fr!Z$ z$TZ>M;WQfUKzFFq9d7ULsn@qdBIA@wWlg7ad|JXBSPR1xpfG=s>0*V-c(&~S_@@oL zHH{5|KujRN!2*KLzVM#}sBz9iX-o*n0|7ed}^)%|(m2_>eI8v``BRgg^0{ z2PaGEV>cq`Y`@YWLTKPo$E@tq5A+Pjpy0~c)bK|c-Z9>o+o;+%ThM5iYqkZyjEuSY zRoYscBHuwqBONURnX+t3*h9cf=kCG3o$4e<*m(dK{ldOX_KluOWsAAWocdx&_$j2g zJ|~_t#45A!xqKL{h);4;8C+Yr&L6+r?sH3g|6D>}a@<9SV+F3Yf_DRnz`Zw`Bw9A1 zWTAP~R#*3^C`}e+{ldilb$M|<$wRRbZThKTb#K`C9rnRZovhwI%mdnx;())?boV?I zpDtRYcM^xe$~pMgW5^dTa#rj=qfMD!Avo__AK|?>>Mr{`7mXvWHaX7Z9w_|8)w$_i zs{tpQ??19(>fN(GfH^J=gvPyn<>FAkG0h?Js{QZ<^b~N%IHsPjqcDI%VrV3_~(m40D5v`y=|4-*;`CwOy< wvE-X}ur8QgO!64i+=xvp*ZWVVuNVxT9yN(dw#nx-)$5!1dIxwhzd>gF4S%~x&Hw-a literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_small.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_small.png new file mode 100644 index 0000000000000000000000000000000000000000..697be65515c444b90d1c988d736f86be20d950ea GIT binary patch literal 3809 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 literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controlls5.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png similarity index 100% rename from addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controlls5.png rename to addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..f5e71df6aa432e63b71dc708a929027822689ba0 GIT binary patch literal 3951 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 literal 0 HcmV?d00001 diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png b/addons/web_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/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png b/addons/web_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%)11?\"pm\":\"am\")+\""; - case "%A": return "\"+(date.getHours()>11?\"PM\":\"AM\")+\""; - case "%s": return "\"+scheduler.date.to_fixed(date.getSeconds())+\""; - 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+"\";"); - }, - str_to_date:function(format,utc){ - var splt="var temp=date.split(/[^0-9a-zA-Z]+/g);"; - var mask=format.match(/%[a-zA-Z]/g); - for (var i=0; i50?1900:2000);"; - break; - case "%g": - case "%G": - case "%h": - case "%H": - splt+="set[3]=temp["+i+"]||0;"; - break; - case "%i": - splt+="set[4]=temp["+i+"]||0;"; - break; - case "%Y": splt+="set[0]=temp["+i+"]||0;"; - break; - case "%a": - case "%A": splt+="set[3]=set[3]%12+((temp["+i+"]||'').toLowerCase()=='am'?0:12);"; - 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]"; - if (utc) code =" Date.UTC("+code+")"; - return new Function("date","var set=[0,0,1,0,0,0]; "+splt+" return new Date("+code+");"); - }, - - getISOWeek: function(ndate) { - if(!ndate) return false; - var nday = ndate.getDay(); - 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.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); - } -}; \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/clear.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/clear.css deleted file mode 100644 index 3a3217e940a..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/clear.css +++ /dev/null @@ -1,110 +0,0 @@ -/* -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; -} -.dhx_agenda_line { - overflow:hidden; - white-space:nowrap; -} -.dhx_cal_light select{ - width:auto; -} - -.dhx_custom_button { - width:120px !important; -} - -.dhx_cal_ltext{ - text-align:left; -} -.dhx_form_repeat{ - text-align:left; - width:100%; -} - -.dhx_cal_lsection { - text-align:left; -} -.dhx_month_head{ - font-size:8pt; -} -.dhx_expand_icon { - position:absolute; top:0px; right:2px; - background-image:url(./imgs/colapce-expand-icon.gif); - width:18px; height:18px; - cursor:pointer; - background-position:0px 18px; - z-index:16; -} - -div.dhx_cal_container table tr td { - border-width:0 !important; - padding:0 !important; -} - -.dhx_cal_container table { - border-collapse:separate !important; - margin:0 0 !important; -} - -.dhx_cal_container{ - z-index:999; -} - -div.dhx_cal_event_clear, div.dhx_cal_event{ - line-height:100%; -} - -.dhx_cal_ltext textarea { - -moz-box-shadow:none; - border-width:0; - padding:0; - background:transparent none repeat scroll 0 0; - -webkit-box-shadow:none; -} - -.dhx_cal_light{ - text-align:left; -} -.dhx_cal_light div, .dhx_cal_container div{ - line-height:normal; -} - -.dhx_cal_light .dhx_form_repeat div,.dhx_cal_light .dhx_form_repeat{ - line-height:24px; -} - - -/* anti-joomla */ -div.dhx_cal_navline div, .dhx_scale_bar, .dhx_scale_hour, .dhx_title{ - text-align:center !important; -} -#whitebox div .dhx_month_head { - text-align:right; -} -#whitebox div .dhx_cal_event_line, #whitebox div .dhx_body{ - text-align:left; -} -div.dhx_cal_container, div.dhx_cal_lsection{ - line-height:1em; -} -div.dhx_cal_container, div.dhx_cal_lsection{ - line-height:normal; -} -.dhx_cal_header .dhx_agenda_line div, .dhx_year_month{ - text-align:center !important; -} -.dhx_tooltip{ - text-align:left; -} - - -.dhx_cal_data table{ - border-width:0px !important; -} -.dhx_cal_data table tr td{ - border-top-width:0px !important; -} diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/config.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/config.js deleted file mode 100644 index 460b6771c00..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/config.js +++ /dev/null @@ -1,117 +0,0 @@ -/* -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) -%j Day of the year, 3 digits with leading zeros (001..366) -%a A textual representation of a day, two letters -%W A full textual representation of the day of the week - -%c Numeric representation of a month, without leading zeros (0..12) -%m Numeric representation of a month, with leading zeros (00..12) -%b A short textual representation of a month, three letters (Jan..Dec) -%M A full textual representation of a month, such as January or March (January..December) - -%y A two digit representation of a year (93..03) -%Y A full numeric representation of a year, 4 digits (1993..03) -*/ - -scheduler.config={ - default_date: "%j %M %Y", - month_date: "%F %Y", - load_date: "%Y-%m-%d", - week_date: "%l", - day_date: "%D, %F %j", - hour_date: "%H:%i", - month_day : "%d", - xml_date:"%m/%d/%Y %H:%i", - api_date:"%d-%m-%Y %H:%i", - - hour_size_px:42, - time_step:5, - - start_on_monday:1, - first_hour:0, - last_hour:24, - readonly:false, - drag_resize:1, - drag_move:1, - drag_create:1, - dblclick_create:1, - 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.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), - week_date:function(d1,d2){ - return scheduler.templates.day_date(d1)+" – "+scheduler.templates.day_date(scheduler.date.add(d2,-1,"day")); - }, - day_scale_date:d(c.default_date), - month_scale_date:d(c.week_date), - week_scale_date:d(c.day_date), - hour_scale:d(c.hour_date), - time_picker:d(c.hour_date), - event_date:d(c.hour_date), - month_day:d(c.month_day), - xml_date:scheduler.date.str_to_date(c.xml_date,c.server_utc), - load_format:d(c.load_date,c.server_utc), - xml_format:d(c.xml_date,c.server_utc), - api_date:scheduler.date.str_to_date(c.api_date), - event_header:function(start,end,ev){ - return scheduler.templates.event_date(start)+" - "+scheduler.templates.event_date(end); - }, - event_text:function(start,end,ev){ - return ev.text; - }, - event_class:function(start,end,ev){ - return ""; - }, - month_date_class:function(d){ - return ""; - }, - week_date_class:function(d){ - return ""; - }, - event_bar_date:function(start,end,ev){ - return scheduler.templates.event_date(start)+" "; - }, - event_bar_text:function(start,end,ev){ - return ev.text; - } - }); - this.callEvent("onTemplatesReady",[]); -}; - - diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/connector.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/connector.js deleted file mode 100644 index 72462172908..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/connector.js +++ /dev/null @@ -1,139 +0,0 @@ -/* -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 -*/ -if (window.dhtmlXGridObject){ - dhtmlXGridObject.prototype._init_point_connector=dhtmlXGridObject.prototype._init_point; - dhtmlXGridObject.prototype._init_point=function(){ - var clear_url=function(url){ - url=url.replace(/(\?|\&)connector[^\f]*/g,""); - return url+(url.indexOf("?")!=-1?"&":"?")+"connector=true"+(this.hdr.rows.length > 0 ? "&dhx_no_header=1":""); - }; - var combine_urls=function(url){ - 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; - return combine_urls.call(this,url); - }; - var filtering_url=function(url,inds,vals){ - for (var i=0; i"; - 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/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js deleted file mode 100644 index ce3c3891f0f..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js +++ /dev/null @@ -1,914 +0,0 @@ -/* -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); - t.async=(arguments.length<3); - t.waitCall=callback; - t.loadXML(url) - return t; - }, - post:function(url,post,callback){ - var t=new dtmlXMLLoaderObject(true); - t.async=(arguments.length<4); - t.waitCall=callback; - t.loadXML(url,true,post) - return t; - }, - getSync:function(url){ - return this.get(url,null,true) - }, - postSync:function(url,post){ - return this.post(url,post,null,true); - } -} - -/** - * @desc: xmlLoader object - * @type: private - * @param: funcObject - xml parser function - * @param: object - jsControl object - * @param: async - sync/async mode (async by default) - * @param: rSeed - enable/disable random seed ( prevent IE caching) - * @topic: 0 - */ -function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){ - this.xmlDoc=""; - - if (typeof (async) != "undefined") - this.async=async; - else - this.async=true; - - this.onloadAction=funcObject||null; - this.mainObject=dhtmlObject||null; - this.waitCall=null; - this.rSeed=rSeed||false; - return this; -}; -/** - * @desc: xml loading handler - * @type: private - * @param: dtmlObject - xmlLoader object - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ - var once = true; - this.check=function (){ - if ((dhtmlObject)&&(dhtmlObject.onloadAction != null)){ - if ((!dhtmlObject.xmlDoc.readyState)||(dhtmlObject.xmlDoc.readyState == 4)){ - if (!once) - return; - - once=false; //IE 5 fix - if (typeof dhtmlObject.onloadAction == "function") - dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject); - - if (dhtmlObject.waitCall){ - dhtmlObject.waitCall.call(this,dhtmlObject); - dhtmlObject.waitCall=null; - } - } - } - }; - return this.check; -}; - -/** - * @desc: return XML top node - * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla) - * @type: private - * @returns: top XML node - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){ - if (this.xmlDoc.responseXML){ - var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName); - if(temp.length==0 && tagName.indexOf(":")!=-1) - var temp = this.xmlDoc.responseXML.getElementsByTagName((tagName.split(":"))[1]); - var z = temp[0]; - } else - var z = this.xmlDoc.documentElement; - - if (z){ - this._retry=false; - return z; - } - - if ((_isIE)&&(!this._retry)){ - //fall back to MS.XMLDOM - var xmlString = this.xmlDoc.responseText; - var oldObj = this.xmlDoc; - this._retry=true; - this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async=false; - this.xmlDoc["loadXM"+"L"](xmlString); - - return this.getXMLTopNode(tagName, oldObj); - } - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (oldObj||this.xmlDoc), - this.mainObject - ]); - - return document.createElement("DIV"); -}; - -/** - * @desc: load XML from string - * @type: private - * @param: xmlString - xml string - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ - { - try{ - var parser = new DOMParser(); - this.xmlDoc=parser.parseFromString(xmlString, "text/xml"); - } - catch (e){ - this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async=this.async; - this.xmlDoc["loadXM"+"L"](xmlString); - } - } - - this.onloadAction(this.mainObject, null, null, null, this); - - if (this.waitCall){ - this.waitCall(); - this.waitCall=null; - } -} -/** - * @desc: load XML - * @type: private - * @param: filePath - xml file path - * @param: postMode - send POST request - * @param: postVars - list of vars for post request - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc){ - if (this.rSeed) - filePath+=((filePath.indexOf("?") != -1) ? "&" : "?")+"a_dhx_rSeed="+(new Date()).valueOf(); - this.filePath=filePath; - if ((!_isIE)&&(window.XMLHttpRequest)) - this.xmlDoc=new XMLHttpRequest(); - else { - this.xmlDoc=new ActiveXObject("Microsoft.XMLHTTP"); - } - - if (this.async) - this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); - this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async); - - if (rpc){ - this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 ("+navigator.userAgent+")"); - this.xmlDoc.setRequestHeader("Content-type", "text/xml"); - } - - else if (postMode) - this.xmlDoc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - - this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"); - this.xmlDoc.send(null||postVars); - - if (!this.async) - (new this.waitLoadFunction(this))(); -}; -/** - * @desc: destructor, cleans used memory - * @type: private - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.destructor=function(){ - this.onloadAction=null; - this.mainObject=null; - this.xmlDoc=null; - return null; -} - -dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function(node){ - var t={}; - for (var i=0; i-1) - _isChrome=true; - -if ((navigator.userAgent.indexOf('Safari') != -1)||(navigator.userAgent.indexOf('Konqueror') != -1)){ - var _KHTMLrv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Safari')+7, 5)); - - if (_KHTMLrv > 525){ //mimic FF behavior for Safari 3.1+ - _isFF=true; - var _FFrv = 1.9; - } else - _isKHTML=true; -} else if (navigator.userAgent.indexOf('Opera') != -1){ - _isOpera=true; - _OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Opera')+6, 3)); -} - - -else if (navigator.appName.indexOf("Microsoft") != -1){ - _isIE=true; - if (navigator.appVersion.indexOf("MSIE 8.0")!= -1 && document.compatMode != "BackCompat") _isIE=8; -} else { - _isFF=true; - var _FFrv = parseFloat(navigator.userAgent.split("rv:")[1]) -} - - -//multibrowser Xpath processor -dtmlXMLLoaderObject.prototype.doXPath=function(xpathExp, docObj, namespace, result_type){ - if (_isKHTML || (!_isIE && !window.XPathResult)) - return this.doXPathOpera(xpathExp, docObj); - - if (_isIE){ //IE - if (!docObj) - if (!this.xmlDoc.nodeName) - docObj=this.xmlDoc.responseXML - else - docObj=this.xmlDoc; - - if (!docObj) - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (docObj||this.xmlDoc), - this.mainObject - ]); - - if (namespace != null) - docObj.setProperty("SelectionNamespaces", "xmlns:xsl='"+namespace+"'"); // - - if (result_type == 'single'){ - return docObj.selectSingleNode(xpathExp); - } - else { - return docObj.selectNodes(xpathExp)||new Array(0); - } - } else { //Mozilla - var nodeObj = docObj; - - if (!docObj){ - if (!this.xmlDoc.nodeName){ - docObj=this.xmlDoc.responseXML - } - else { - docObj=this.xmlDoc; - } - } - - if (!docObj) - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (docObj||this.xmlDoc), - this.mainObject - ]); - - if (docObj.nodeName.indexOf("document") != -1){ - nodeObj=docObj; - } - else { - nodeObj=docObj; - docObj=docObj.ownerDocument; - } - var retType = XPathResult.ANY_TYPE; - - if (result_type == 'single') - retType=XPathResult.FIRST_ORDERED_NODE_TYPE - var rowsCol = new Array(); - var col = docObj.evaluate(xpathExp, nodeObj, function(pref){ - return namespace - }, retType, null); - - if (retType == XPathResult.FIRST_ORDERED_NODE_TYPE){ - return col.singleNodeValue; - } - var thisColMemb = col.iterateNext(); - - while (thisColMemb){ - rowsCol[rowsCol.length]=thisColMemb; - thisColMemb=col.iterateNext(); - } - return rowsCol; - } -} - -function _dhtmlxError(type, name, params){ - if (!this.catches) - this.catches=new Array(); - - return this; -} - -_dhtmlxError.prototype.catchError=function(type, func_name){ - this.catches[type]=func_name; -} -_dhtmlxError.prototype.throwError=function(type, name, params){ - if (this.catches[type]) - return this.catches[type](type, name, params); - - if (this.catches["ALL"]) - return this.catches["ALL"](type, name, params); - - alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]); - return null; -} - -window.dhtmlxError=new _dhtmlxError(); - - -//opera fake, while 9.0 not released -//multibrowser Xpath processor -dtmlXMLLoaderObject.prototype.doXPathOpera=function(xpathExp, docObj){ - //this is fake for Opera - var z = xpathExp.replace(/[\/]+/gi, "/").split('/'); - var obj = null; - var i = 1; - - if (!z.length) - return []; - - if (z[0] == ".") - obj=[docObj]; else if (z[0] == ""){ - obj=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(z[i].replace(/\[[^\]]*\]/g, "")); - i++; - } else - return []; - - for (i; i < z.length; i++)obj=this._getAllNamedChilds(obj, z[i]); - - if (z[i-1].indexOf("[") != -1) - obj=this._filterXPath(obj, z[i-1]); - return obj; -} - -dtmlXMLLoaderObject.prototype._filterXPath=function(a, b){ - var c = new Array(); - var b = b.replace(/[^\[]*\[\@/g, "").replace(/[\[\]\@]*/g, ""); - - for (var i = 0; i < a.length; i++) - if (a[i].getAttribute(b)) - c[c.length]=a[i]; - - return c; -} -dtmlXMLLoaderObject.prototype._getAllNamedChilds=function(a, b){ - var c = new Array(); - - if (_isKHTML) - b=b.toUpperCase(); - - for (var i = 0; i < a.length; i++)for (var j = 0; j < a[i].childNodes.length; j++){ - if (_isKHTML){ - if (a[i].childNodes[j].tagName&&a[i].childNodes[j].tagName.toUpperCase() == b) - c[c.length]=a[i].childNodes[j]; - } - - else if (a[i].childNodes[j].tagName == b) - c[c.length]=a[i].childNodes[j]; - } - - return c; -} - -function dhtmlXHeir(a, b){ - for (var c in b) - if (typeof (b[c]) == "function") - a[c]=b[c]; - return a; -} - -function dhtmlxEvent(el, event, handler){ - if (el.addEventListener) - el.addEventListener(event, handler, false); - - else if (el.attachEvent) - el.attachEvent("on"+event, handler); -} - -//============= XSL Extension =================================== - -dtmlXMLLoaderObject.prototype.xslDoc=null; -dtmlXMLLoaderObject.prototype.setXSLParamValue=function(paramName, paramValue, xslDoc){ - if (!xslDoc) - xslDoc=this.xslDoc - - if (xslDoc.responseXML) - xslDoc=xslDoc.responseXML; - var item = - this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+paramName+"']", xslDoc, - "http:/\/www.w3.org/1999/XSL/Transform", "single"); - - if (item != null) - item.firstChild.nodeValue=paramValue -} -dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(xslDoc, xmlDoc){ - if (!xslDoc) - xslDoc=this.xslDoc; - - if (xslDoc.responseXML) - xslDoc=xslDoc.responseXML - - if (!xmlDoc) - xmlDoc=this.xmlDoc; - - if (xmlDoc.responseXML) - xmlDoc=xmlDoc.responseXML - - //MOzilla - if (!_isIE){ - if (!this.XSLProcessor){ - this.XSLProcessor=new XSLTProcessor(); - this.XSLProcessor.importStylesheet(xslDoc); - } - var result = this.XSLProcessor.transformToDocument(xmlDoc); - } else { - var result = new ActiveXObject("Msxml2.DOMDocument.3.0"); - try{ - xmlDoc.transformNodeToObject(xslDoc, result); - }catch(e){ - result = xmlDoc.transformNode(xslDoc); - } - } - return result; -} - -dtmlXMLLoaderObject.prototype.doXSLTransToString=function(xslDoc, xmlDoc){ - var res = this.doXSLTransToObject(xslDoc, xmlDoc); - if(typeof(res)=="string") - return res; - return this.doSerialization(res); -} - -dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){ - if (!xmlDoc) - xmlDoc=this.xmlDoc; - if (xmlDoc.responseXML) - xmlDoc=xmlDoc.responseXML - if (!_isIE){ - var xmlSerializer = new XMLSerializer(); - return xmlSerializer.serializeToString(xmlDoc); - } else - return xmlDoc.xml; -} - -/** -* @desc: -* @type: private -*/ -dhtmlxEventable=function(obj){ - obj.dhx_SeverCatcherPath=""; - obj.attachEvent=function(name, catcher, callObj){ - name='ev_'+name.toLowerCase(); - if (!this[name]) - this[name]=new this.eventCatcher(callObj||this); - - return(name+':'+this[name].addEvent(catcher)); //return ID (event name & event ID) - } - obj.callEvent=function(name, arg0){ - name='ev_'+name.toLowerCase(); - if (this[name]) - return this[name].apply(this, arg0); - return true; - } - obj.checkEvent=function(name){ - return (!!this['ev_'+name.toLowerCase()]) - } - obj.eventCatcher=function(obj){ - var dhx_catch = []; - var z = function(){ - var res = true; - for (var i = 0; i < dhx_catch.length; i++){ - if (dhx_catch[i] != null){ - var zr = dhx_catch[i].apply(obj, arguments); - res=res&&zr; - } - } - return res; - } - z.addEvent=function(ev){ - if (typeof (ev) != "function") - ev=eval(ev); - if (ev) - return dhx_catch.push(ev)-1; - return false; - } - z.removeEvent=function(id){ - dhx_catch[id]=null; - } - return z; - } - obj.detachEvent=function(id){ - if (id != false){ - var list = id.split(':'); //get EventName and ID - 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/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js deleted file mode 100644 index 4a4143f947f..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js +++ /dev/null @@ -1,587 +0,0 @@ -/* -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 - * @type: public - */ -function dataProcessor(serverProcessorURL){ - this.serverProcessor = serverProcessorURL; - this.action_param="!nativeeditor_status"; - - this.object = null; - this.updatedRows = []; //ids of updated rows - - this.autoUpdate = true; - this.updateMode = "cell"; - this._tMode="GET"; - this.post_delim = "_"; - - this._waitMode=0; - this._in_progress={};//? - this._invalid={}; - this.mandatoryFields=[]; - this.messages=[]; - - this.styles={ - updated:"font-weight:bold;", - inserted:"font-weight:bold;", - deleted:"text-decoration : line-through;", - invalid:"background-color:FFE0E0;", - invalid_cell:"border-bottom:2px solid red;", - error:"color:red;", - clear:"font-weight:normal;text-decoration:none;" - }; - - this.enableUTFencoding(true); - dhtmlxEventable(this); - - return this; - } - -dataProcessor.prototype={ - /** - * @desc: select GET or POST transaction model - * @param: mode - GET/POST - * @param: total - true/false - send records row by row or all at once (for grid only) - * @type: public - */ - setTransactionMode:function(mode,total){ - this._tMode=mode; - this._tSend=total; - }, - escape:function(data){ - if (this._utf) - return encodeURIComponent(data); - else - return escape(data); - }, - /** - * @desc: allows to set escaping mode - * @param: true - utf based escaping, simple - use current page encoding - * @type: public - */ - enableUTFencoding:function(mode){ - this._utf=convertStringToBoolean(mode); - }, - /** - * @desc: allows to define, which column may trigger update - * @param: val - array or list of true/false values - * @type: public - */ - setDataColumns:function(val){ - this._columns=(typeof val == "string")?val.split(","):val; - }, - /** - * @desc: get state of updating - * @returns: true - all in sync with server, false - some items not updated yet. - * @type: public - */ - getSyncState:function(){ - return !this.updatedRows.length; - }, - /** - * @desc: enable/disable named field for data syncing, will use column ids for grid - * @param: mode - true/false - * @type: public - */ - enableDataNames:function(mode){ - this._endnm=convertStringToBoolean(mode); - }, - /** - * @desc: enable/disable mode , when only changed fields and row id send to the server side, instead of all fields in default mode - * @param: mode - true/false - * @type: public - */ - enablePartialDataSend:function(mode){ - this._changed=convertStringToBoolean(mode); - }, - /** - * @desc: set if rows should be send to server automaticaly - * @param: mode - "row" - based on row selection changed, "cell" - based on cell editing finished, "off" - manual data sending - * @type: public - */ - setUpdateMode:function(mode,dnd){ - this.autoUpdate = (mode=="cell"); - this.updateMode = mode; - this.dnd=dnd; - }, - ignore:function(code,master){ - this._silent_mode=true; - code.call(master||window); - this._silent_mode=false; - }, - /** - * @desc: mark row as updated/normal. check mandatory fields,initiate autoupdate (if turned on) - * @param: rowId - id of row to set update-status for - * @param: state - true for "updated", false for "not updated" - * @param: mode - update mode name - * @type: public - */ - setUpdated:function(rowId,state,mode){ - if (this._silent_mode) return; - var ind=this.findRow(rowId); - - mode=mode||"updated"; - var existing = this.obj.getUserData(rowId,this.action_param); - if (existing && mode == "updated") mode=existing; - if (state){ - this.set_invalid(rowId,false); //clear previous error flag - this.updatedRows[ind]=rowId; - this.obj.setUserData(rowId,this.action_param,mode); - if (this._in_progress[rowId]) - this._in_progress[rowId]="wait"; - } else{ - if (!this.is_invalid(rowId)){ - this.updatedRows.splice(ind,1); - this.obj.setUserData(rowId,this.action_param,""); - } - } - - //clear changed flag - if (!state) - this._clearUpdateFlag(rowId); - - this.markRow(rowId,state,mode); - if (state && this.autoUpdate) this.sendData(rowId); - }, - _clearUpdateFlag:function(id){}, - markRow:function(id,state,mode){ - var str=""; - var invalid=this.is_invalid(id); - if (invalid){ - str=this.styles[invalid]; - state=true; - } - if (this.callEvent("onRowMark",[id,state,mode,invalid])){ - //default logic - str=this.styles[state?mode:"clear"]+str; - - this.obj[this._methods[0]](id,str); - - if (invalid && invalid.details){ - str+=this.styles[invalid+"_cell"]; - for (var i=0; i < invalid.details.length; i++) - if (invalid.details[i]) - this.obj[this._methods[1]](id,i,str); - } - } - }, - getState:function(id){ - return this.obj.getUserData(id,this.action_param); - }, - is_invalid:function(id){ - return this._invalid[id]; - }, - set_invalid:function(id,mode,details){ - if (details) mode={value:mode, details:details, toString:function(){ return this.value.toString(); }}; - this._invalid[id]=mode; - }, - /** - * @desc: check mandatory fields and varify values of cells, initiate update (if specified) - * @param: rowId - id of row to set update-status for - * @type: public - */ - checkBeforeUpdate:function(rowId){ - return true; - }, - /** - * @desc: send row(s) values to server - * @param: rowId - id of row which data to send. If not specified, then all "updated" rows will be send - * @type: public - */ - sendData:function(rowId){ - if (this._waitMode && (this.obj.mytype=="tree" || this.obj._h2)) return; - if (this.obj.editStop) this.obj.editStop(); - - - if(typeof rowId == "undefined" || this._tSend) return this.sendAllData(); - if (this._in_progress[rowId]) return false; - - this.messages=[]; - if (!this.checkBeforeUpdate(rowId) && this.callEvent("onValidatationError",[rowId,this.messages])) return false; - this._beforeSendData(this._getRowData(rowId),rowId); - }, - _beforeSendData:function(data,rowId){ - if (!this.callEvent("onBeforeUpdate",[rowId,this.getState(rowId),data])) return false; - this._sendData(data,rowId); - }, - serialize:function(data, id){ - if (typeof data == "string") - return data; - if (typeof id != "undefined") - return this.serialize_one(data,""); - else{ - var stack = []; - var keys = []; - for (var key in data) - if (data.hasOwnProperty(key)){ - stack.push(this.serialize_one(data[key],key+this.post_delim)); - keys.push(key); - } - stack.push("ids="+this.escape(keys.join(","))); - return stack.join("&"); - } - }, - serialize_one:function(data, pref){ - if (typeof data == "string") - return data; - var stack = []; - for (var key in data) - if (data.hasOwnProperty(key)) - stack.push(this.escape((pref||"")+key)+"="+this.escape(data[key])); - return stack.join("&"); - }, - _sendData:function(a1,rowId){ - if (!a1) return; //nothing to send - if (!this.callEvent("onBeforeDataSending",rowId?[rowId,this.getState(rowId),a1]:[null, null, a1])) return false; - - if (rowId) - this._in_progress[rowId]=(new Date()).valueOf(); - var a2=new dtmlXMLLoaderObject(this.afterUpdate,this,true); - - var a3 = this.serverProcessor+(this._user?(getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&")):""); - - if (this._tMode!="POST") - a2.loadXML(a3+((a3.indexOf("?")!=-1)?"&":"?")+this.serialize(a1,rowId)); - else - a2.loadXML(a3,true,this.serialize(a1,rowId)); - - this._waitMode++; - }, - sendAllData:function(){ - if (!this.updatedRows.length) return; - - this.messages=[]; var valid=true; - for (var i=0; i[close] [clear]  DataProcessor
 Current state
 Log:
"; - if (document.body) document.body.insertBefore(c,document.body.firstChild); - else dhtmlxEvent(window,"load",function(){ - document.body.insertBefore(c,document.body.firstChild); - }) - dhtmlxEvent(window,"dblclick",function(){ - c.style.display=''; - }) - return c; -} - -dataProcessor.prototype._error=function(data){ - this._log(""+data+""); -} -dataProcessor.prototype._log=function(data){ - var div=document.createElement("DIV"); - div.innerHTML = data; - var parent=this._console.childNodes[2]; - parent.appendChild(div); - parent.scrollTop=parent.scrollHeight; - - if (window.console && window.console.log) - window.console.log("DataProcessor :: "+data.replace(" "," ").replace("","").replace("","")); - -} -dataProcessor.prototype._updateStat=function(data){ - var data=[" Current state"]; - for(var i=0;i")+"
Current mode: "+this.updateMode; -} -dataProcessor.prototype.xml_analize=function(xml){ - if (_isFF){ - if (!xml.xmlDoc.responseXML) - this._error("Not an XML, probably incorrect content type specified ( must be text/xml ), or some text output was started before XML data"); - else if (xml.xmlDoc.responseXML.firstChild.tagName=="parsererror") - this._error(xml.xmlDoc.responseXML.firstChild.textContent); - else return true; - } else if (_isIE){ - if (xml.xmlDoc.responseXML.parseError.errorCode) - this._error("XML error : "+xml.xmlDoc.responseXML.parseError.reason); - else if (!xml.xmlDoc.responseXML.documentElement) - this._error("Not an XML, probably incorrect content type specified ( must be text/xml ), or some text output was started before XML data"); - else return true; - } - return false; -} - -dataProcessor.wrap=function(name,before,after){ - var d=dataProcessor.prototype; - if (!d._wrap) d._wrap={}; - d._wrap[name]=d[name]; - d[name]=function(){ - if (before) before.apply(this,arguments); - var res=d._wrap[name].apply(this,arguments); - if (after) after.apply(this,[arguments,res]); - return res; - } -}; - -dataProcessor.wrap("setUpdated",function(rowId,state,mode){ - this._log(" row "+rowId+" "+(state?"marked":"unmarked")+" ["+(mode||"updated")+","+(this.is_invalid(rowId)||"valid")+"]"); -},function(){ - this._updateStat(); -}); - - - -dataProcessor.wrap("sendData",function(rowId){ - if (rowId){ - this._log(" Initiating data sending for "+rowId+""); - if (this.obj.mytype=="tree"){ - if (!this.obj._idpull[rowId]) - this._log(" Error! item with such ID not exists "+rowId+""); - } else { - if (this.rowsAr && !this.obj.rowsAr[rowId]) - this._log(" Error! row with such ID not exists "+rowId+""); - } - } -},function(){ - -}); - -dataProcessor.wrap("sendAllData",function(){ - this._log(" Initiating data sending for all rows "); -},function(){ - -}); -dataProcessor.logSingle=function(data,id){ - var tdata = {}; - if (id) - tdata[id] = data; - else - tdata = data; - - var url = []; - for (var key in tdata) { - url.push("
"+key+""); - var suburl = []; - - for (var ikey in tdata[key]) - suburl.push(ikey+" = "+tdata[key][ikey]); - - url.push(suburl.join("
")); - url.push("
"); - } - return url.join(""); -} -dataProcessor.wrap("_sendData",function(data,rowId){ - if (rowId) - this._log(" Sending in one-by-one mode, current ID = "+rowId); - else - this._log(" Sending all data at once"); - this._log(" Server url: "+this.serverProcessor+" parameters"); - var url = []; - this._log("
"+dataProcessor.logSingle(data,rowId)+"
"); -},function(){ - -}); - - -dataProcessor.wrap("afterUpdate",function(that,b,c,d,xml){ - that._log(" Server response received details
"+(xml.xmlDoc.responseText||"").replace(/\&/g,"&").replace(//g,">")+"
"); - if (!that.xml_analize(xml)) return; - var atag=xml.doXPath("//data/action"); - if (!atag){ - that._log(" No actions found"); - var atag=xml.getXMLTopNode("data"); - if (!atag) that._log(" XML not valid"); - else that._log(" Incorrect content type - need to be text/xml"); - } -},function(){ - -}); - -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 && !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/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js deleted file mode 100644 index 19779666494..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js +++ /dev/null @@ -1,57 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxscheduler.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxscheduler.css new file mode 100644 index 00000000000..e2b512bc030 --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxscheduler.css @@ -0,0 +1,1419 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ + +.dhtmlx_message_area{ + position:fixed; + right:5px; + width:250px; + z-index:1000; +} + +.dhtmlx-info{ + min-width: 120px; + padding:4px 4px 4px 20px; + font-family:Tahoma; + z-index: 10000; + + margin:5px; + margin-bottom:10px; + + -webkit-transition: all .5s ease; + -moz-transition: all .5s ease; + -o-transition: all .5s ease; + transition: all .5s ease; +} +.dhtmlx-info.hidden{ + height:0px; + padding:0px; + border-width:0px; + margin:0px; + overflow:hidden; +} + +.dhtmlx_modal_box{ + overflow:hidden; + display: inline-block; + min-width: 300px; + width: 300px; + text-align: center; + position:fixed; + + background-color: #fff; + background:-webkit-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + background:-moz-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + box-shadow: 0px 0px 14px #888; + + font-family: Tahoma; + + z-index:20000; + + border-radius:6px; + border: 1px solid #ffffff; +} + +.dhtmlx_popup_title{ + border-top-left-radius:5px; + border-top-right-radius:5px; + + border-width:0px; + + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); +} + +.dhtmlx-info, .dhtmlx_popup_button, .dhtmlx_button{ + user-select: none; + -webkit-user-select: none; + -moz-user-select:-moz-none; + + cursor:pointer; +} + +.dhtmlx_popup_text{ + overflow:hidden; +} + +.dhtmlx_popup_controls{ + border-radius:6px; + padding:5px; +} + +.dhtmlx_popup_button, .dhtmlx_button{ + height: 30px; + line-height:30px; + + display: inline-block; + margin: 0 5px; + border-radius: 6px; + + color:#FFF; +} +.dhtmlx_popup_button{ + min-width: 120px; +} + +div.dhx_modal_cover { + background-color:#000; + cursor:default; + + filter:alpha(opacity = 20); + opacity: 0.2; + + position: fixed; + z-index:19999; + left: 0px; top: 0px; + width: 100%; height: 100%; + + border: none; + zoom: 1; +} + +.dhtmlx-info img, .dhtmlx_modal_box img{ + float:left; + margin-right:20px; +} + +.dhtmlx-alert-error .dhtmlx_popup_title, .dhtmlx-confirm-error .dhtmlx_popup_title{ + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC); +} +.dhtmlx-alert-error, .dhtmlx-confirm-error { + border: 1px solid #ff0000; +} + +/*Skin section*/ +.dhtmlx_button, .dhtmlx_popup_button{ + box-shadow: 0px 0px 4px #888; + border:1px solid #838383; +} +.dhtmlx_button input, .dhtmlx_popup_button div{ + border:1px solid #FFF; + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + + border-radius:6px; + font-size:15px; + font-weight:normal; + -moz-box-sizing:content-box; + box-sizing:content-box; + + color:#fff; padding:0px; margin:0px; + vertical-align:top; + + height:28px; + line-height:28px; +} + +.dhtmlx_button input:focus, .dhtmlx_button input:active, .dhtmlx_popup_button div:active, .dhtmlx_popup_button div:focus{ + + background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==); + background-image: -webkit-linear-gradient(top, #707070 1%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #4c4c4c 99%); +} +.dhtmlx_popup_title{ + color:#fff; + text-shadow: 1px 1px #000; + height:40px; line-height:40px; + font-size:20px; +} +.dhtmlx_popup_text{ + margin:15px 15px 5px 15px; + font-size:14px; + color:#000; + min-height:30px; + border-radius:6px; +} + + +.dhtmlx-info, .dhtmlx-error{ + font-size:14px; + color:#000; + box-shadow: 0px 0px 10px #888; + + padding:0px; + + background-color:#FFF; + border-radius:3px; + border:1px solid #ffffff; +} +.dhtmlx-info div{ + padding:5px 10px 5px 10px; + background-color: #fff; + + border-radius:3px; + border:1px solid #B8B8B8; +} +.dhtmlx-error{ + background-color: #d81b1b; + border:1px solid #ff3c3c; + box-shadow: 0px 0px 10px #000; +} +.dhtmlx-error div{ + background-color: #d81b1b; + border:1px solid #940000; + color:#FFF; +} + + +.dhx_cal_container{ + background-color:#C2D5FC; + font-family:Tahoma; + font-size:8pt; + position:relative; + overflow:hidden; +} +.dhx_cal_container div{ + -moz-user-select:none; + -moz-user-select:-moz-none; +} +.dhx_cal_navline{ + height:20px; + position:absolute; + z-index:3; + width:750px; + color:#2F3A48; +} +.dhx_cal_navline div{ + position:absolute; + top:2px; + white-space:nowrap; +} +.dhx_cal_navline .dhx_cal_date { + font-weight:600; + left:210px; + padding-top: 1px; +} +.dhx_cal_button .dhx_left_bg{ + width:1px; overflow:hidden; + height:17px; + z-index:20; + top:0px; +} +.dhx_cal_prev_button{ + background-image:url(imgs/buttons.png); + background-position:0px 0px; + width:29px; height:17px; + left:50px; cursor:pointer; +} +.dhx_cal_next_button{ + background-image:url(imgs/buttons.png); + background-position: -30px 0px; + width:29px; height:17px; + left:80px; cursor:pointer; +} +.dhx_cal_today_button{ + background-image:url(imgs/buttons.png); + background-position: -60px 0px; + width:75px; height:17px; + left:112px; cursor:pointer; + text-align:center; + text-decoration:underline; +} +.dhx_cal_tab{ + width:59px; height:19px; + text-align:center; + text-decoration:underline; + 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{ + text-decoration:none; + + cursor:default; + font-weight:bold; + border: 1px dotted #586A7E; + border-bottom: 0; + background-color: #C2D5FC; +} +.dhx_cal_header{ + position:absolute; + left:10px; top:23px; + width:750px; + border-top:1px dotted #8894A3; + border-right:1px dotted #8894A3; + z-index:2; + overflow:hidden; + color:#2F3A48; +} +.dhx_cal_data{ + border-top:1px dotted #8894A3; + position:absolute; + top:44px; + width:600px; + overflow-y:auto; + overflow-x:hidden; +} +.dhx_scale_bar{ + position:absolute; + text-align:center; + background-color:#C2D5FC; + padding-top:3px; + border-left:1px dotted #586A7E; +} +.dhx_scale_holder{ + position:absolute; + border-right:1px dotted #586A7E; + background-image:url(imgs/databg.png); +} +.dhx_scale_holder_now{ + position:absolute; + border-right:1px dotted #586A7E; + background-image:url(imgs/databg_now.png); +} +.dhx_scale_hour{ + height:41px; + width:50px; + border-bottom:1px dotted #8894A3; + background-color:#C2D5FC; + text-align:center; + line-height:40px; + color:#586A7E; + overflow:hidden; +} +.dhx_month_head{ + background-color:#EBEFF4; + color:#2F3A48; + border-right:1px dotted #586A7E; + height:18px; + padding-right:5px; + padding-top:3px; + text-align:right; +} +.dhx_month_body{ + border-right:1px dotted #586A7E; + border-bottom:1px dotted #586A7E; + background-color:#FFFFFF; +} +.dhx_now .dhx_month_body{ + background-color:#E2EDFF; +} +.dhx_after .dhx_month_body, .dhx_before .dhx_month_body{ + background-color:#ECECEC; +} +.dhx_after .dhx_month_head, .dhx_before .dhx_month_head{ + background-color:#E2E3E6; + color:#94A6BB; +} +.dhx_now .dhx_month_head{ + background-color:#D1DEF4; + font-weight:bold; +} +.dhx_cal_drag{ + position:absolute; + z-index:9999; + background-color:#FFE763; + border:1px solid #B7A543; + opacity:0.5; + filter:alpha(opacity=50); +} +.dhx_loading{ + position:absolute; + width:128px; + height:15px; + background-image:url(imgs/loading.gif); + z-index:9999; +} +.dhx_multi_day_icon, .dhx_multi_day{ + background-color:#E1E6FF; + background-repeat:no-repeat; + border-right:1px dotted #8894A3; +} +.dhx_multi_day{ + position: absolute; + border-top:1px dotted #8894A3; +} +.dhx_multi_day_icon, .dhx_multi_day_icon_small{ + background-position: center center; + background-color:#E1E6FF; + background-repeat:no-repeat; + border-bottom:1px dotted #8894A3; + border-right:1px dotted #8894A3; +} +.dhx_multi_day_icon{ + background-image:url(imgs/clock_big.gif); +} +.dhx_multi_day_icon_small{ + background-image:url(imgs/clock_small.gif); + +} +.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container { + background-color: #d0e5ff; +} +.dhx_cal_event .dhx_header, .dhx_cal_event .dhx_title, .dhx_cal_event .dhx_body, .dhx_cal_event .dhx_footer { + background-color:#FFE763; + border:1px solid #B7A543; + color:#887A2E; + overflow:hidden; + width:100%; + + font-family:Tahoma; + font-size:8pt; +} +.dhx_move_denied .dhx_cal_event .dhx_header, .dhx_move_denied .dhx_cal_event .dhx_title{ + cursor:default; +} +.dhx_cal_event .dhx_header{ + height:1px; + margin-left:1px; + border-width:1px 1px 0px 1px; + cursor:pointer; +} +.dhx_cal_event .dhx_title { + height:12px; + border-width:0px 1px 1px 1px; + border-bottom-style:dotted; + + font-size:7pt; + font-weight:bold; + text-align:center; + + background-position:right; + background-repeat:no-repeat; + cursor:pointer; +} +.dhx_cal_event .dhx_body, .dhx_cal_event.dhx_cal_select_menu .dhx_body{ + border-width:0 1px 1px 1px; + padding:5px; +} +.dhx_resize_denied { + cursor:default !important; +} +.dhx_cal_event .dhx_event_resize { + cursor:s-resize; +} +.dhx_cal_event .dhx_footer, .dhx_cal_event .dhx_select_menu_footer{ + height:1px; + margin-left:2px; + border-width:0px 1px 1px 1px; +} +.dhx_cal_event_line{ + background-color:#FFE763; + border:1px solid #B7A543; + border-radius:3px; + font-family:Tahoma; + font-size:8pt; + height:13px; + padding-left:10px; + color:#887A2E; + cursor:pointer; + overflow:hidden; +} +.dhx_cal_event_clear{ + font-family:Tahoma; + font-size:8pt; + height:13px; + padding-left:2px; + color:#887A2E; + white-space:nowrap; + overflow:hidden; + cursor:pointer; +} +.dhx_in_move{ + background-color:#FFFF80; +} +div.dhx_cal_editor{ + background-color:#FFE763; + border:1px solid #B7A543; + border-top-style:dotted; + z-index:999; + position:absolute; + overflow:hidden; +} +textarea.dhx_cal_editor{ + width:100%; + height:100%; + border:0px solid black; + margin:none; + padding:none; + overflow:auto; +} +div.dhx_menu_head{ + background-image:url(imgs/controls.gif); + background-position: 0px -43px; + width:10px; height:10px; + margin-left:5px; margin-top:1px; + border:none; + cursor:default; +} +div.dhx_menu_icon{ + background-image:url(imgs/controls.gif); + width:20px; height:20px; + margin-left:-5px; margin-top:0px; + border:none; + cursor:pointer; +} +div.icon_details{ + background-position: 0px 0px; +} +div.icon_edit{ + background-position: -22px 0px; +} +div.icon_save{ + background-position: -84px -1px; +} +div.icon_cancel{ + background-position: -62px 0px; +} +div.icon_delete{ + background-position: -42px 0px; +} +.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; + white-space:nowrap; +} +.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; + resize: none; +} +.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; +} +.dhx_minical_popup{ + position:absolute;z-index:10100; + width:251px; height:175px; +} +.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(./imgs/collapse_expand_icon.gif); + width:18px; height:18px; + cursor:pointer; + background-position:0px 18px; + z-index:16; +} +.dhx_scheduler_agenda .dhx_cal_data { + background-image:url(./imgs/databg.png); +} +.dhx_agenda_area{ + width:100%; + overflow-y:auto; + background-image:url(./imgs/databg.png); +} +.dhx_agenda_line{ + height:21px; + clear:both; + overflow:hidden; +} +.dhx_agenda_line div{ + float:left; + width:188px; + border-right:1px dotted #8894A3; + text-align:center; + line-height:21px; + overflow:hidden; +} +.dhx_agenda_area .dhx_agenda_line div{ + border-right:0px dotted #8894A3; +} +.dhx_v_border{ + position:absolute; + left:187px; + top:0; + border-right:1px dotted #8894A3; + width:1px; + height:100%; +} +.dhx_agenda_line .dhx_event_icon{ + width:20px; + border-width:0px; + background:url(./imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor:pointer; +} +.dhx_agenda_line span{ + padding-left:5px; + line-height:21px; +} + + +.dhx_year_body{ + border-left:1px dotted #586A7E; +} +.dhx_year_week{ + position:relative; +} +.dhx_scale_bar_last{ + border-right:1px dotted #586A7E; +} +.dhx_year_month{ + height:18px; + padding-top:3px; + border:1px dotted #586A7E; + text-align:center; + vertical-align:middle; +} +.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:#E2E3E6 !important; +} +.dhx_year_body .dhx_month_body{ + height:0px; + overflow:hidden; +} +.dhx_month_head.dhx_year_event{ + background-color:#FFE763; +} +.dhx_year_body .dhx_before .dhx_month_head, .dhx_year_body .dhx_after .dhx_month_head{ + cursor: default; +} +.dhx_tooltip{ + border:1px solid #BBBBBB; + background-image:url(./imgs/databg.png); + position:absolute; + z-index:9998; + width:300px; + height:auto; + font-family:Tahoma; + font-size:8pt; + overflow:hidden; +} + +.dhx_tooltip_line{ + line-height:20px; + height:20px; + overflow:hidden; +} + +.dhx_tooltip_line .dhx_event_icon{ + width:20px; height:20px; + padding-right:10px; + float:left; + border-width:0px; + position:relative; + background:url(./imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor:pointer; +} + +.dhx_tooltip_date{ + float:left; + width:auto; + padding-left:5px; + text-align:center; +} + +.dhx_text_disabled{ + color:#887A2E; + font-family:Tahoma; + font-size:8pt; +} + +.dhx_mini_calendar{ + -moz-box-shadow:5px 5px 5px #888; /*Doesn't work in IE*/ + -khtml-box-shadow: 5px 5px 5px #888; +} + +.dhx_mini_calendar .dhx_month_head{ + cursor:pointer; +} +.dhx_mini_calendar .dhx_calendar_click{ + background-color: #C2D5FC; +} +.dhx_cal_navline div.dhx_minical_icon{ + width:18px; + height:18px; + left:190px; + top:1px; + cursor:pointer; + background-image:url(./imgs/calendar.gif); +} + +.dhx_matrix_scell { + height: 100%; +} + +.dhx_matrix_cell, .dhx_matrix_scell{ + overflow:hidden; + text-align:center; + vertical-align:middle; + border-bottom:1px dotted #8894A3; + border-right:1px dotted #8894A3; +} +.dhx_matrix_cell{ + background-color:white; +} +.dhx_matrix_line{ + overflow: hidden; +} +.dhx_matrix_cell div, .dhx_matrix_scell div{ + overflow:hidden; + text-align:center; + height:auto; +} + +.dhx_cal_lsection .dhx_readonly{ + font-size:9pt; + font-size:8pt; + padding:2px; + color:#887A2E; +} +.dhx_cal_event_line .dhx_event_resize { + cursor: w-resize; + background: url(./imgs/resize_dots.png) repeat-y; + position: absolute; + top: 0; + width: 4px; +} +.dhx_event_resize_start { + left: 0; +} +.dhx_event_resize_end { + right: 0; +} + +/* Tree view */ +.dhx_matrix_scell.folder, .dhx_data_table.folder .dhx_matrix_cell{ + background-color: #969394; + cursor: pointer; +} +.dhx_matrix_scell .dhx_scell_level0{ + padding-left: 5px; +} +.dhx_matrix_scell .dhx_scell_level1{ + padding-left: 20px; +} +.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; + padding-right:3px; +} +.dhx_matrix_scell.folder .dhx_scell_name{ + float: left; + width: auto; +} +.dhx_matrix_scell.item .dhx_scell_name{ + padding-left:15px; + text-align: left; +} +.dhx_data_table.folder .dhx_matrix_cell{ + border-right: 0; +} +.dhx_section_timeline { + overflow: hidden; + padding: 4px 0 2px 10px; +} +.dhx_section_timeline select{ + width: 552px; +} + +/* Tree view end*/ + +/* Map view */ +.dhx_map_area{ + width:100%; + height:100%; + overflow-y: auto; + overflow-x: hidden; + background-image:url(./imgs/databg.png); +} +.dhx_map_line .dhx_event_icon{ + width:20px; + border-width:0px; + background:url(./imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor:pointer; +} +.dhx_map_line{ + height:21px; + clear:both; + overflow:hidden; +} +.dhx_map { + position:absolute; +} +.dhx_map_line div{ + float:left; + border-right:1px dotted #8894A3; + text-align:center; + line-height:21px; + overflow:hidden; +} +.dhx_map_line .headline_description{ + float:left; + + border-right:1px dotted #8894A3; + text-align:center; + line-height:21px; + overflow:hidden; +} +.dhx_map_line .dhx_map_description{ + float:left; + border-right: 0 dotted #8894A3; + text-align:center; + line-height:21px; + overflow:hidden; +} +.dhx_map_line .headline_date, .dhx_map_line .headline_description { + border-left: 0; +} +.dhx_map_line .line_description { + float:left; + border-right:1px dotted #8894A3; + text-align:left; + padding-left:5px; + line-height:21px; + overflow:hidden; +} +.dhx_map_line.highlight{ + background-color: #C4C5CC; +} +.dhx_map_area .dhx_map_line div{ + border-right:0px dotted #8894A3; +} +/* Map view end */ + +/* dhtmlXTooltip start */ +.dhtmlXTooltip.tooltip{ + -moz-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; + color:#887A2E; + cursor:default; + padding:10px; + position:absolute; + z-index:500; +} +/* dhtmlXTooltip end */ + +/* Lightbox checkbox section */ +.dhx_cal_checkbox label { + padding-left: 5px; +} +/* Lightbox checkbox section end */ + + +/* Lightbox radiobuttons section */ +.dhx_cal_light .radio { + padding: 2px 0px 2px 10px; +} +.dhx_cal_light .radio input, .dhx_cal_light .radio label{ + line-height: 15px; +} +.dhx_cal_light .radio input { + vertical-align: middle; + margin: 0px; + padding: 0px; +} +.dhx_cal_light .radio label { + vertical-align: middle; + padding-right: 10px; +} +/* Lightbox radiobuttons section end */ + + +/* Lightbox dhtmlx combo section */ +.dhx_cal_light .combo { + padding: 4px; +} +.dhx_cal_light_wide .dhx_combo_box/*, .dhx_cal_light_wide .combo*/ { + width: 608px !important; + left: 10px; +} +/* 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 */ + + +/* grid view */ + +.dhx_cal_header div div{ + border-left: 1px dotted #8894A3; +} + +.dhx_grid_area{ + width:100%; + height:100%; + overflow-y:auto; + background-color:#FCFEFC; +} +.dhx_grid_area table{ + border-collapse: collapse; + border-spacing: 0; + width:100%; + table-layout:fixed; +} +.dhx_grid_area td{ + table-layout:fixed; + text-align:center; +} + +.dhx_grid_line{ + height:21px; + clear:both; + overflow:hidden; +} +.dhx_grid_line div{ + float:left; + cursor:default; + padding-top: 0; + padding-bottom: 0; + text-align:center; + line-height:21px; + overflow:hidden; +} + +.dhx_grid_area td, .dhx_grid_line div{ + padding-left:8px; + padding-right:8px; +} + + +.dhx_grid_area tr.dhx_grid_event{ + height:21px; + overflow:hidden; + margin:0 0 1px 0; +} +.dhx_grid_area tr.dhx_grid_event td{ + /*borders for old ies*/ + border-bottom:1px solid #ECEEF4; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td, .dhx_grid_area tr.dhx_grid_event:nth-child(2n) td{ + border-bottom-width:0px; + border-bottom-style:none; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n){ + background-color:#ECEEF4;; +} +.dhx_grid_area .dhx_grid_dummy{ + table-layout:auto; + margin:0 !important; + padding:0 !important; +} + +.dhx_grid_v_border{ + position:absolute; + border-right:1px solid #A4BED4; + width:1px; + height:100%; +} + +.dhx_grid_event_selected{ + background-color: #9cc1db !important; + color: white !important; +} + +.dhx_grid_sort_desc .dhx_grid_view_sort{ + background-position: 0 -55px; +} +.dhx_grid_sort_asc .dhx_grid_view_sort{ + background-position: 0 -66px; +} +.dhx_grid_view_sort{ + width:10px; + height:10px; + position: absolute; + border:none !important; + top: 5px; + background-repeat:no-repeat; + background-image: url(./imgs/images.png); +} +/* end grid */ + +/* marked timespans */ +.dhx_marked_timespan { + position: absolute; + width: 100%; +} +.dhx_time_block { + position:absolute; + width:100%; + background:silver; + opacity:0.4; + filter:alpha(opacity=40); + z-index:1; +} +.dhx_time_block_reset { + opacity: 1; + filter:alpha(opacity=100); +} +.dhx_scheduler_month .dhx_marked_timespan { + display: none; +} +.dhx_mini_calendar .dhx_marked_timespan { + display: none; +} +/* now time */ +.dhx_now_time { + width:100%; + border-bottom:2px dotted red; + z-index: 1; +} +.dhx_scheduler_month .dhx_now_time { + border-bottom: 0; + border-left: 2px dotted red; +} +.dhx_matrix_now_time { + border-left:2px dotted red; + z-index: 1; +} + + +/*IE*/ +div.dhx_form_repeat input.radio { margin:-4px 0 0 -4px !ie; } +div.dhx_form_repeat input.checkbox { margin:0 0 0 -4px !ie; } + +/*All*/ +.dhx_form_repeat, .dhx_form_repeat input { + padding:0; + margin:0; + padding-left:5px; + font-family:Tahoma, Verdana; + font-size:11px; + line-height:24px; +} + +.dhx_form_repeat { + overflow:hidden; + /*height:115px;*/ + height:0px; + background-color: #FFF4B5; + /*border: 1px solid #DCC43E;*/ +} + +.dhx_cal_light_wide .dhx_form_repeat { + background-color: transparent; +} + + +.dhx_repeat_center, .dhx_repeat_left{ + height:115px; + padding:10px 0 10px 10px; + float:left; +} + +.dhx_repeat_left{ + width:95px; +} + +.dhx_repeat_center{ + width:335px; + margin-top:12px; +} + +.dhx_repeat_divider{ + float:left; + height:115px; + border-left:1px dotted #DCC43E; + /*background-color: #DCC43E;*/ + width:1px; +} + +.dhx_repeat_right { + float:right; + height:115px; + width:160px; + padding:10px 3px 10px 10px; + margin-top:7px; +} + +input.dhx_repeat_text { + height:16px; + width: 27px; + margin: 0 4px 0 4px; + line-height:18px; + padding: 0 0 0 2px; +} + +.dhx_form_repeat select { + height: 20px; + width: 87px; + padding:0 0 0 2px; + margin: 0 4px 0 4px; +} + +input.dhx_repeat_date{ + height: 18px; + width: 80px; + padding:0 0 0 2px; + margin: 0 4px 0 4px; + background-repeat:no-repeat; + background-position:64px 0; + border:1px #7f9db9 solid; + line-height:18px; +} + +input.dhx_repeat_radio { + margin-right:4px; +} + +input.dhx_repeat_checkbox { + margin:4px 4px 0 0; +} + +.dhx_repeat_days td { + padding-right:5px; +} +.dhx_repeat_days label { + font-size:10px; +} +.dhx_custom_button{ + width:90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_custom_button_recurring{ + background-image:url(./imgs/but_repeat.gif); + background-position:-5px 20px; + width:20px; + margin-right:10px; +} + +/* increase width of lightbox */ +.dhx_cal_light_rec{ + width:640px; +} +.dhx_cal_light_rec .dhx_cal_larea{ + width:632px; +} +.dhx_cal_light_rec.dhx_cal_light_wide{ + width:816px; +} +.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea{ + width:808px; +} \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxscheduler.js similarity index 59% rename from addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxscheduler.js index 30384b83b5c..3dc9dc4e46f 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxscheduler.js @@ -1,21 +1,23 @@ /* 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 */ -window.dhtmlx || (dhtmlx=function(obj){ - for (var a in obj) dhtmlx[a]=obj[a]; - return dhtmlx; //simple singleton -}) +if (!window.dhtmlx) { + 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)){ + if (obj && typeof obj == "object" && !obj.tagName){ 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]); + if (map[a]) this[map[a]](dhtmlx[a]); //local settings for (var a in obj){ if (map[a]) this[map[a]](obj[a]); @@ -52,19 +54,19 @@ dhtmlxAjax={ return this.get(url,null,true) }, postSync:function(url,post){ - return this.post(url,post,null,true); + return this.post(url,post,null,true); } } /** - * @desc: xmlLoader object - * @type: private - * @param: funcObject - xml parser function - * @param: object - jsControl object - * @param: async - sync/async mode (async by default) - * @param: rSeed - enable/disable random seed ( prevent IE caching) - * @topic: 0 - */ + * @desc: xmlLoader object + * @type: private + * @param: funcObject - xml parser function + * @param: object - jsControl object + * @param: async - sync/async mode (async by default) + * @param: rSeed - enable/disable random seed ( prevent IE caching) + * @topic: 0 + */ function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){ this.xmlDoc=""; @@ -79,12 +81,15 @@ function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){ this.rSeed=rSeed||false; return this; }; + +dtmlXMLLoaderObject.count = 0; + /** - * @desc: xml loading handler - * @type: private - * @param: dtmlObject - xmlLoader object - * @topic: 0 - */ + * @desc: xml loading handler + * @type: private + * @param: dtmlObject - xmlLoader object + * @topic: 0 + */ dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ var once = true; this.check=function (){ @@ -94,6 +99,7 @@ dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ return; once=false; //IE 5 fix + dtmlXMLLoaderObject.count++; if (typeof dhtmlObject.onloadAction == "function") dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject); @@ -108,12 +114,12 @@ dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ }; /** - * @desc: return XML top node - * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla) - * @type: private - * @returns: top XML node - * @topic: 0 - */ + * @desc: return XML top node + * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla) + * @type: private + * @returns: top XML node + * @topic: 0 + */ dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){ if (this.xmlDoc.responseXML){ var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName); @@ -128,17 +134,13 @@ dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){ return z; } - if ((_isIE)&&(!this._retry)){ - //fall back to MS.XMLDOM - var xmlString = this.xmlDoc.responseText; - var oldObj = this.xmlDoc; + if (!this._retry){ this._retry=true; - this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async=false; - this.xmlDoc["loadXM"+"L"](xmlString); - + var oldObj = this.xmlDoc; + this.loadXMLString(this.xmlDoc.responseText.replace(/^[\s]+/,""), true); return this.getXMLTopNode(tagName, oldObj); } + dhtmlxError.throwError("LoadXML", "Incorrect XML", [ (oldObj||this.xmlDoc), this.mainObject @@ -148,25 +150,28 @@ dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){ }; /** - * @desc: load XML from string - * @type: private - * @param: xmlString - xml string - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ - { - try{ - var parser = new DOMParser(); - this.xmlDoc=parser.parseFromString(xmlString, "text/xml"); - } - catch (e){ - this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async=this.async; - this.xmlDoc["loadXM"+"L"](xmlString); - } + * @desc: load XML from string + * @type: private + * @param: xmlString - xml string + * @topic: 0 + */ +dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString, silent){ + + if (!_isIE){ + var parser = new DOMParser(); + this.xmlDoc=parser.parseFromString(xmlString, "text/xml"); + } else { + this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); + this.xmlDoc.async=this.async; + this.xmlDoc.onreadystatechange = function(){}; + this.xmlDoc["loadXM"+"L"](xmlString); } - this.onloadAction(this.mainObject, null, null, null, this); + if (silent) + return; + + if (this.onloadAction) + this.onloadAction(this.mainObject, null, null, null, this); if (this.waitCall){ this.waitCall(); @@ -174,17 +179,18 @@ dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ } } /** - * @desc: load XML - * @type: private - * @param: filePath - xml file path - * @param: postMode - send POST request - * @param: postVars - list of vars for post request - * @topic: 0 - */ + * @desc: load XML + * @type: private + * @param: filePath - xml file path + * @param: postMode - send POST request + * @param: postVars - list of vars for post request + * @topic: 0 + */ dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc){ if (this.rSeed) filePath+=((filePath.indexOf("?") != -1) ? "&" : "?")+"a_dhx_rSeed="+(new Date()).valueOf(); this.filePath=filePath; + if ((!_isIE)&&(window.XMLHttpRequest)) this.xmlDoc=new XMLHttpRequest(); else { @@ -202,7 +208,7 @@ dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc else if (postMode) this.xmlDoc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - + this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"); this.xmlDoc.send(null||postVars); @@ -210,40 +216,57 @@ dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc (new this.waitLoadFunction(this))(); }; /** - * @desc: destructor, cleans used memory - * @type: private - * @topic: 0 - */ + * @desc: destructor, cleans used memory + * @type: private + * @topic: 0 + */ dtmlXMLLoaderObject.prototype.destructor=function(){ - this.onloadAction=null; - this.mainObject=null; - this.xmlDoc=null; + this._filterXPath = null; + this._getAllNamedChilds = null; + this._retry = null; + this.async = null; + this.rSeed = null; + this.filePath = null; + this.onloadAction = null; + this.mainObject = null; + this.xmlDoc = null; + this.doXPath = null; + this.doXPathOpera = null; + this.doXSLTransToObject = null; + this.doXSLTransToString = null; + this.loadXML = null; + this.loadXMLString = null; + // this.waitLoadFunction = null; + this.doSerialization = null; + this.xmlNodeToJSON = null; + this.getXMLTopNode = null; + this.setXSLParamValue = null; return null; } dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function(node){ - var t={}; - for (var i=0; i-1) _isChrome=true; if ((navigator.userAgent.indexOf('Safari') != -1)||(navigator.userAgent.indexOf('Konqueror') != -1)){ - var _KHTMLrv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Safari')+7, 5)); + _KHTMLrv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Safari')+7, 5)); if (_KHTMLrv > 525){ //mimic FF behavior for Safari 3.1+ _isFF=true; - var _FFrv = 1.9; + _FFrv = 1.9; } else _isKHTML=true; } else if (navigator.userAgent.indexOf('Opera') != -1){ @@ -614,10 +646,12 @@ if ((navigator.userAgent.indexOf('Safari') != -1)||(navigator.userAgent.indexOf( else if (navigator.appName.indexOf("Microsoft") != -1){ _isIE=true; - if (navigator.appVersion.indexOf("MSIE 8.0")!= -1 && document.compatMode != "BackCompat") _isIE=8; + if ((navigator.appVersion.indexOf("MSIE 8.0")!= -1 || navigator.appVersion.indexOf("MSIE 9.0")!= -1 || navigator.appVersion.indexOf("MSIE 10.0")!= -1 ) && document.compatMode != "BackCompat"){ + _isIE=8; + } } else { _isFF=true; - var _FFrv = parseFloat(navigator.userAgent.split("rv:")[1]) + _FFrv = parseFloat(navigator.userAgent.split("rv:")[1]) } @@ -844,9 +878,9 @@ dtmlXMLLoaderObject.prototype.doXSLTransToString=function(xslDoc, xmlDoc){ dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){ if (!xmlDoc) - xmlDoc=this.xmlDoc; + xmlDoc=this.xmlDoc; if (xmlDoc.responseXML) - xmlDoc=xmlDoc.responseXML + xmlDoc=xmlDoc.responseXML if (!_isIE){ var xmlSerializer = new XMLSerializer(); return xmlSerializer.serializeToString(xmlDoc); @@ -855,65 +889,314 @@ dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){ } /** -* @desc: -* @type: private -*/ + * @desc: + * @type: private + */ dhtmlxEventable=function(obj){ - obj.dhx_SeverCatcherPath=""; - obj.attachEvent=function(name, catcher, callObj){ - name='ev_'+name.toLowerCase(); - if (!this[name]) - this[name]=new this.eventCatcher(callObj||this); - - return(name+':'+this[name].addEvent(catcher)); //return ID (event name & event ID) - } - obj.callEvent=function(name, arg0){ - name='ev_'+name.toLowerCase(); - if (this[name]) - return this[name].apply(this, arg0); - return true; - } - obj.checkEvent=function(name){ - return (!!this['ev_'+name.toLowerCase()]) - } - obj.eventCatcher=function(obj){ - var dhx_catch = []; - var z = function(){ - var res = true; - for (var i = 0; i < dhx_catch.length; i++){ - if (dhx_catch[i] != null){ - var zr = dhx_catch[i].apply(obj, arguments); - res=res&&zr; - } + obj.attachEvent=function(name, catcher, callObj){ + name='ev_'+name.toLowerCase(); + if (!this[name]) + this[name]=new this.eventCatcher(callObj||this); + + return(name+':'+this[name].addEvent(catcher)); //return ID (event name & event ID) + } + obj.callEvent=function(name, arg0){ + name='ev_'+name.toLowerCase(); + if (this[name]) + return this[name].apply(this, arg0); + return true; + } + obj.checkEvent=function(name){ + return (!!this['ev_'+name.toLowerCase()]) + } + obj.eventCatcher=function(obj){ + var dhx_catch = []; + var z = function(){ + var res = true; + for (var i = 0; i < dhx_catch.length; i++){ + if (dhx_catch[i] != null){ + var zr = dhx_catch[i].apply(obj, arguments); + res=res&&zr; } - return res; } - z.addEvent=function(ev){ - if (typeof (ev) != "function") - ev=eval(ev); - if (ev) - return dhx_catch.push(ev)-1; - return false; - } - z.removeEvent=function(id){ - dhx_catch[id]=null; - } - return z; + return res; } - obj.detachEvent=function(id){ - if (id != false){ - var list = id.split(':'); //get EventName and ID - this[list[0]].removeEvent(list[1]); //remove event - } + z.addEvent=function(ev){ + if (typeof (ev) != "function") + ev=eval(ev); + if (ev) + return dhx_catch.push(ev)-1; + return false; } - obj.detachAllEvents = function(){ - for (var name in this){ - if (name.indexOf("ev_")==0) - delete this[name]; - } + z.removeEvent=function(id){ + dhx_catch[id]=null; } -} + return z; + } + obj.detachEvent=function(id){ + if (id != false){ + var list = id.split(':'); //get EventName and ID + this[list[0]].removeEvent(list[1]); //remove event + } + } + obj.detachAllEvents = function(){ + for (var name in this){ + if (name.indexOf("ev_")==0) + delete this[name]; + } + } + obj = null; +}; +if(!window.dhtmlx) + window.dhtmlx = {}; + +(function(){ + var _dhx_msg_cfg = null; + function callback(config, result){ + var usercall = config.callback; + modality(false); + config.box.parentNode.removeChild(config.box); + _dhx_msg_cfg = config.box = null; + if (usercall) + usercall(result); + } + function modal_key(e){ + if (_dhx_msg_cfg){ + e = e||event; + var code = e.which||event.keyCode; + if (dhtmlx.message.keyboard){ + if (code == 13 || code == 32) + callback(_dhx_msg_cfg, true); + if (code == 27) + callback(_dhx_msg_cfg, false); + } + if (e.preventDefault) + e.preventDefault(); + return !(e.cancelBubble = true); + } + } + if (document.attachEvent) + document.attachEvent("onkeydown", modal_key); + else + document.addEventListener("keydown", modal_key, true); + + function modality(mode){ + if(!modality.cover){ + modality.cover = document.createElement("DIV"); + //necessary for IE only + modality.cover.onkeydown = modal_key; + modality.cover.className = "dhx_modal_cover"; + document.body.appendChild(modality.cover); + } + var height = document.body.scrollHeight; + modality.cover.style.display = mode?"inline-block":"none"; + } + + function button(text, result){ + var button_css = "dhtmlx_"+text.toLowerCase().replace(/ /g, "_")+"_button"; // dhtmlx_ok_button, dhtmlx_click_me_button + return "
"+text+"
"; + } + + function info(text){ + if (!t.area){ + t.area = document.createElement("DIV"); + t.area.className = "dhtmlx_message_area"; + t.area.style[t.position]="5px"; + document.body.appendChild(t.area); + } + + t.hide(text.id); + var message = document.createElement("DIV"); + message.innerHTML = "
"+text.text+"
"; + message.className = "dhtmlx-info dhtmlx-" + text.type; + message.onclick = function(){ + t.hide(text.id); + text = null; + }; + + if (t.position == "bottom" && t.area.firstChild) + t.area.insertBefore(message,t.area.firstChild); + else + t.area.appendChild(message); + + if (text.expire > 0) + t.timers[text.id]=window.setTimeout(function(){ + t.hide(text.id); + }, text.expire); + + t.pull[text.id] = message; + message = null; + + return text.id; + } + function _boxStructure(config, ok, cancel){ + var box = document.createElement("DIV"); + box.className = " dhtmlx_modal_box dhtmlx-"+config.type; + box.setAttribute("dhxbox", 1); + + var inner = ''; + + if (config.width) + box.style.width = config.width; + if (config.height) + box.style.height = config.height; + if (config.title) + inner+='
'+config.title+'
'; + inner+='
'+(config.content?'':config.text)+'
'; + if (ok) + inner += button(config.ok || "OK", true); + if (cancel) + inner += button(config.cancel || "Cancel", false); + if (config.buttons){ + for (var i=0; i[close] [clear]  DataProcessor
 Current state
 Log:
"; - if (document.body) document.body.insertBefore(c,document.body.firstChild); - else dhtmlxEvent(window,"load",function(){ - document.body.insertBefore(c,document.body.firstChild); - }) - dhtmlxEvent(window,"dblclick",function(){ - c.style.display=''; - }) - return c; -} - -dataProcessor.prototype._error=function(data){ - this._log(""+data+""); -} -dataProcessor.prototype._log=function(data){ - var div=document.createElement("DIV"); - div.innerHTML = data; - var parent=this._console.childNodes[2]; - parent.appendChild(div); - parent.scrollTop=parent.scrollHeight; - - if (window.console && window.console.log) - window.console.log("DataProcessor :: "+data.replace(" "," ").replace("","").replace("","")); - -} -dataProcessor.prototype._updateStat=function(data){ - var data=[" Current state"]; - for(var i=0;i")+"
Current mode: "+this.updateMode; -} -dataProcessor.prototype.xml_analize=function(xml){ - if (_isFF){ - if (!xml.xmlDoc.responseXML) - this._error("Not an XML, probably incorrect content type specified ( must be text/xml ), or some text output was started before XML data"); - else if (xml.xmlDoc.responseXML.firstChild.tagName=="parsererror") - this._error(xml.xmlDoc.responseXML.firstChild.textContent); - else return true; - } else if (_isIE){ - if (xml.xmlDoc.responseXML.parseError.errorCode) - this._error("XML error : "+xml.xmlDoc.responseXML.parseError.reason); - else if (!xml.xmlDoc.responseXML.documentElement) - this._error("Not an XML, probably incorrect content type specified ( must be text/xml ), or some text output was started before XML data"); - else return true; - } - return false; -} - -dataProcessor.wrap=function(name,before,after){ - var d=dataProcessor.prototype; - if (!d._wrap) d._wrap={}; - d._wrap[name]=d[name]; - d[name]=function(){ - if (before) before.apply(this,arguments); - var res=d._wrap[name].apply(this,arguments); - if (after) after.apply(this,[arguments,res]); - return res; - } -}; - -dataProcessor.wrap("setUpdated",function(rowId,state,mode){ - this._log(" row "+rowId+" "+(state?"marked":"unmarked")+" ["+(mode||"updated")+","+(this.is_invalid(rowId)||"valid")+"]"); -},function(){ - this._updateStat(); -}); - - - -dataProcessor.wrap("sendData",function(rowId){ - if (rowId){ - this._log(" Initiating data sending for "+rowId+""); - if (this.obj.mytype=="tree"){ - if (!this.obj._idpull[rowId]) - this._log(" Error! item with such ID not exists "+rowId+""); - } else { - if (this.rowsAr && !this.obj.rowsAr[rowId]) - this._log(" Error! row with such ID not exists "+rowId+""); - } - } -},function(){ - -}); - -dataProcessor.wrap("sendAllData",function(){ - this._log(" Initiating data sending for all rows "); -},function(){ - -}); -dataProcessor.logSingle=function(data,id){ - var tdata = {}; - if (id) - tdata[id] = data; - else - tdata = data; - - var url = []; - for (var key in tdata) { - url.push("
"+key+""); - var suburl = []; - - for (var ikey in tdata[key]) - suburl.push(ikey+" = "+tdata[key][ikey]); - - url.push(suburl.join("
")); - url.push("
"); - } - return url.join(""); -} -dataProcessor.wrap("_sendData",function(data,rowId){ - if (rowId) - this._log(" Sending in one-by-one mode, current ID = "+rowId); - else - this._log(" Sending all data at once"); - this._log(" Server url: "+this.serverProcessor+" parameters"); - var url = []; - this._log("
"+dataProcessor.logSingle(data,rowId)+"
"); -},function(){ - -}); - - -dataProcessor.wrap("afterUpdate",function(that,b,c,d,xml){ - that._log(" Server response received details
"+(xml.xmlDoc.responseText||"").replace(/\&/g,"&").replace(//g,">")+"
"); - if (!that.xml_analize(xml)) return; - var atag=xml.doXPath("//data/action"); - if (!atag){ - that._log(" No actions found"); - var atag=xml.getXMLTopNode("data"); - if (!atag) that._log(" XML not valid"); - else that._log(" Incorrect content type - need to be text/xml"); - } -},function(){ - -}); - -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 && !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(){ - -}); - - - - - - - /* dhx_sort[index]=direction dhx_filter[index]=mask @@ -1798,8 +1918,9 @@ dhtmlxError.catchError("LoadXML",function(a,b,c){ } }); -window.dhtmlXScheduler=window.scheduler={version:3.0}; +window.dhtmlXScheduler = window.scheduler = { version: "3.5.0" }; dhtmlxEventable(scheduler); + scheduler.init=function(id,date,mode){ date=date||(new Date()); mode=mode||"week"; @@ -1818,8 +1939,10 @@ scheduler.init=function(id,date,mode){ dhtmlxEvent(window,"resize",function(){ window.clearTimeout(scheduler._resize_timer); scheduler._resize_timer=window.setTimeout(function(){ - if (scheduler.callEvent("onSchedulerResize",[])) + if (scheduler.callEvent("onSchedulerResize",[])) { scheduler.update_view(); + scheduler.callEvent("onAfterSchedulerResize", []); + } }, 100); }); this.set_sizes(); @@ -1837,7 +1960,8 @@ scheduler.xy={ menu_width:25, margin_top:0, margin_left:0, - editor_width:140 + editor_width:140, + lightbox_additional_height:50 }; scheduler.keys={ edit_save:13, @@ -1873,6 +1997,7 @@ scheduler.get_elements=function(){ var els=this._obj.getElementsByTagName("DIV"); for (var i=0; i < els.length; i++){ var name=els[i].className; + if (name) name = name.split(" ")[0]; if (!this._els[name]) this._els[name]=[]; this._els[name].push(els[i]); @@ -1898,10 +2023,15 @@ scheduler.set_actions=function(){ }; this._obj.ondblclick=function(e){ scheduler._on_dbl_click(e||event); - } + }; + this._obj.oncontextmenu = function(e) { + var ev = e||event; + var src = ev.target||ev.srcElement; + var returnValue = scheduler.callEvent("onContextMenu", [scheduler._locate_event(src), ev]); + return returnValue; + }; }; scheduler.select=function(id){ - if (this._table_view || !this.getEvent(id)._timed) return; //temporary block if (this._select_id==id) return; this.editStop(false); this.unselect(); @@ -1922,19 +2052,28 @@ scheduler.getState=function(){ max_date: this._max_date, editor_id: this._edit_id, lightbox_id: this._lightbox_id, - new_event: this._new_event + new_event: this._new_event, + select_id: this._select_id, + expanded: this.expanded, + drag_id: this._drag_id, + drag_mode: this._drag_mode }; }; scheduler._click={ dhx_cal_data:function(e){ - //debugger; var trg = e?e.target:event.srcElement; var id = scheduler._locate_event(trg); e = e || event; - if ((id && !scheduler.callEvent("onClick",[id,e])) ||scheduler.config.readonly) return; - - if (id) { + + if (!id) { + scheduler.callEvent("onEmptyClick",[scheduler.getActionData(e).date, e]); + } else { + if ( !scheduler.callEvent("onClick",[id,e]) || scheduler.config.readonly ) return; + } + + if (id && scheduler.config.select) { + scheduler.select(id); var mask = trg.className; if (mask.indexOf("_icon")!=-1) @@ -1958,13 +2097,30 @@ scheduler._click={ scheduler.setCurrentView(scheduler._date,mode); }, buttons:{ - "delete":function(id){ var c=scheduler.locale.labels.confirm_deleting; if (!c||confirm(c)) scheduler.deleteEvent(id); }, + "delete":function(id){ + var c = scheduler.locale.labels.confirm_deleting; + scheduler._dhtmlx_confirm(c, scheduler.locale.labels.title_confirm_deleting, function(){ scheduler.deleteEvent(id) }); + }, edit:function(id){ scheduler.edit(id); }, save:function(id){ scheduler.editStop(true); }, details:function(id){ scheduler.showLightbox(id); }, cancel:function(id){ scheduler.editStop(false); } } }; +scheduler._dhtmlx_confirm = function(message, title, callback) { + if (!message) + return callback(); + var opts = { text: message }; + if (title) + opts.title = title; + if (callback) { + opts.callback = function(result) { + if (result) + callback(); + }; + } + dhtmlx.confirm(opts); +}; scheduler.addEventNow=function(start,end,e){ var base = {}; if (start && start.constructor.toString().match(/object/i) !== null){ @@ -1981,7 +2137,7 @@ scheduler.addEventNow=function(start,end,e){ start_date.setHours(start_hour); start = start_date.valueOf(); } - end = start+d; + end = start.valueOf()+d; } var end_date = new Date(end); @@ -2012,29 +2168,36 @@ scheduler._on_dbl_click=function(e,src){ case "dhx_scale_holder_now": case "dhx_month_body": case "dhx_wa_day_data": + case "dhx_marked_timespan": 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; - start = this._correct_shift(start); - this.addEventNow(start,null,e); + this.addEventNow(this.getActionData(e).date,null,e); break; - case "dhx_body": + case "dhx_cal_event": case "dhx_wa_ev_body": + case "dhx_agenda_line": + case "dhx_grid_event": case "dhx_cal_event_line": case "dhx_cal_event_clear": var id = this._locate_event(src); if (!this.callEvent("onDblClick",[id,e])) return; - if (this.config.details_on_dblclick || this._table_view || !this.getEvent(id)._timed) + if (this.config.details_on_dblclick || this._table_view || !this.getEvent(id)._timed || !this.config.select) this.showLightbox(id); else this.edit(id); break; - case "": - if (src.parentNode) - return scheduler._on_dbl_click(e,src.parentNode); + case "dhx_time_block": + case "dhx_cal_container": + return; + break; default: var t = this["dblclick_"+name]; - if (t) t.call(this,e); + if (t) { + t.call(this,e); + } + else { + if (src.parentNode && src != this) + return scheduler._on_dbl_click(e,src.parentNode); + } break; } }; @@ -2060,25 +2223,31 @@ scheduler._mouse_coords=function(ev){ 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); + if (!this._table_view) { + pos.x=Math.min(this._cols.length-1, 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 { + if (!this._cols || !this._colsS) // agenda/map views + return pos; 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.y=Math.ceil( (Math.max(0, pos.x/this._cols[0])+Math.max(0,dy-1)*7)*24*60/this.config.time_step ); + + if (scheduler._drag_mode || this._mode == "month") + 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; -} +}; scheduler._close_not_saved=function(){ if (new Date().valueOf()-(scheduler._new_event||0) > 500 && scheduler._edit_id){ var c=scheduler.locale.labels.confirm_closing; - if (!c || confirm(c)) - scheduler.editStop(scheduler.config.positive_closing); + + scheduler._dhtmlx_confirm(c, scheduler.locale.labels.title_confirm_closing, function() { scheduler.editStop(scheduler.config.positive_closing); }); } }; scheduler._correct_shift=function(start, back){ @@ -2088,7 +2257,7 @@ scheduler._on_mouse_move=function(e){ if (this._drag_mode){ var pos=this._mouse_coords(e); if (!this._drag_pos || pos.custom || this._drag_pos.x!=pos.x || this._drag_pos.y!=pos.y){ - + var start, end; if (this._edit_id!=this._drag_id) this._close_not_saved(); @@ -2098,14 +2267,16 @@ scheduler._on_mouse_move=function(e){ this._close_not_saved(); this._loading=true; //will be ignored by dataprocessor - var start=this._min_date.valueOf()+(pos.y*this.config.time_step+(this._table_view?0:pos.x)*24*60)*60000; - //if (this._mode != "week" && this._mode != "day") - start = this._correct_shift(start); - + start = this._get_date_from_pos(pos).valueOf(); + + var res = this.callEvent("onBeforeEventCreated", [e]); + if (!res) + return; + if (!this._drag_start){ this._drag_start=start; return; } - var end = start; + end = start; if (end==this._drag_start) return; this._drag_id=this.uid(); @@ -2118,26 +2289,31 @@ scheduler._on_mouse_move=function(e){ } var ev=this.getEvent(this._drag_id); - var start,end; + if (this._drag_mode=="move"){ start = this._min_date.valueOf()+(pos.y*this.config.time_step+pos.x*24*60)*60000; if (!pos.custom && this._table_view) start+=this.date.time_part(ev.start_date)*1000; start = this._correct_shift(start); end = ev.end_date.valueOf()-(ev.start_date.valueOf()-start); - } else { + } else { // resize start = ev.start_date.valueOf(); + end = ev.end_date.valueOf(); if (this._table_view) { - end = this._min_date.valueOf()+pos.y*this.config.time_step*60000 + (pos.custom?0:24*60*60000); + var resize_date = 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{ + resize_date = this._correct_shift(resize_date, false); + + if (pos.resize_from_start) + start = resize_date; + else + end = resize_date; + } 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"; if (this._mode == "week" || this._mode == "day") end = this._correct_shift(end); } - if (this._drag_mode == "new-size"){ + 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-(pos.shift?0:shift); @@ -2145,25 +2321,30 @@ scheduler._on_mouse_move=function(e){ } else { start = this._drag_start; } - - } else if (end<=start) - end=start+this.config.time_step*60000; + } else { + if (end<=start) + end=start+this.config.time_step*60000; + } } 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()
"; + rendered_dates.push(sd); sd=this.date.add(sd,1,"day"); } html+=""; @@ -2477,7 +2667,20 @@ scheduler._reset_month_scale=function(b,dd,sd){ html+=""; this._max_date=sd; - b.innerHTML=html; + b.innerHTML=html; + + this._scales = {}; + var divs = b.getElementsByTagName('div'); + for (var i=0; i=0; i--) - if (this._rendered[i].getAttribute("event_id")==id) - method(this._rendered[i],i); +scheduler.for_rendered = function(id, method) { + for (var i = this._rendered.length - 1; i >= 0; i--) + if (this._rendered[i].getAttribute("event_id") == id) + method(this._rendered[i], i); }; -scheduler.changeEventId=function(id,new_id){ +scheduler.changeEventId = function(id, new_id) { if (id == new_id) return; - var ev=this._events[id]; - if (ev){ - ev.id=new_id; - this._events[new_id]=ev; + var ev = this._events[id]; + if (ev) { + ev.id = new_id; + this._events[new_id] = ev; delete this._events[id]; } - this.for_rendered(id,function(r){ - r.setAttribute("event_id",new_id); + this.for_rendered(id, function(r) { + r.setAttribute("event_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]); + 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]); }; -(function(){ - var attrs=["text","Text","start_date","StartDate","end_date","EndDate"]; - var create_getter=function(name){ - return function(id){ return (scheduler.getEvent(id))[name]; }; +(function() { + var attrs = ["text", "Text", "start_date", "StartDate", "end_date", "EndDate"]; + var create_getter = function(name) { + return function(id) { return (scheduler.getEvent(id))[name]; }; }; - var create_setter=function(name){ - return function(id,value){ - var ev=scheduler.getEvent(id); ev[name]=value; - ev._changed=true; - ev._timed=this.is_one_day_event(ev); - scheduler.event_updated(ev,true); + var create_setter = function(name) { + return function(id, value) { + var ev = scheduler.getEvent(id); + ev[name] = value; + ev._changed = true; + ev._timed = this.is_one_day_event(ev); + scheduler.event_updated(ev, true); }; }; - for (var i=0; i this._colsS.height-22){ // 22 - height of cell's header + if ((h[i]) * hb > this._colsS.height - 22) { // 22 - height of cell's header //we have overflow, update heights var cells = evl.rows[i].cells; - for (var j=0; j < cells.length; j++) { - cells[j].childNodes[1].style.height = h[i]*hb+"px"; + for (var j = 0; j < cells.length; j++) { + cells[j].childNodes[1].style.height = h[i] * hb + "px"; } - h[i]=(h[i-1]||0)+cells[0].offsetHeight; + h[i] = (h[i - 1] || 0) + cells[0].offsetHeight; } - h[i]=(h[i-1]||0)+evl.rows[i].cells[0].offsetHeight; + h[i] = (h[i - 1] || 0) + evl.rows[i].cells[0].offsetHeight; } h.unshift(0); - if (evl.parentNode.offsetHeightb.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++) { - var ev=evs[i]; - - //check scale overflow - var sh = ev.start_date.getHours(); - var eh = ev.end_date.getHours(); - - ev._sday=this._get_event_sday(ev); - if (!days[ev._sday]) days[ev._sday]=[]; - - 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); - - 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; - } +scheduler._get_event_mapped_end_date = function(ev) { + var end_date = ev.end_date; + if (this.config.separate_short_events) { + var ev_duration = (ev.end_date - ev.start_date) / 60000; // minutes + if (ev_duration < this._min_mapped_duration) { + end_date = this.date.add(end_date, this._min_mapped_duration - ev_duration, "minute"); } - - if (sh < this.config.first_hour || eh >= this.config.last_hour){ + } + return end_date; +}; +scheduler._pre_render_events_line = function(evs, hold) { + 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 = []; + + this._min_mapped_duration = Math.ceil(this.xy.min_event_height * 60 / this.config.hour_size_px); // values could change along the way + + for (var i = 0; i < evs.length; i++) { + var ev = evs[i]; + + //check date overflow + var sd = ev.start_date; + var ed = ev.end_date; + //check scale overflow + var sh = sd.getHours(); + var eh = ed.getHours(); + + ev._sday = this._get_event_sday(ev); // sday based on event start_date + if (!days[ev._sday]) days[ev._sday] = []; + + if (!hold) { + ev._inner = false; + + var stack = days[ev._sday]; + + while (stack.length) { + var t_ev = stack[stack.length - 1]; + var t_end_date = this._get_event_mapped_end_date(t_ev); + if (t_end_date.valueOf() <= ev.start_date.valueOf()) { + stack.splice(stack.length - 1, 1); + } else { + break; + } + } + + var sorderSet = false; + for (var j = 0; j < stack.length; j++) { + var t_ev = stack[j]; + var t_end_date = this._get_event_mapped_end_date(t_ev); + if (t_end_date.valueOf() <= ev.start_date.valueOf()) { + sorderSet = true; + ev._sorder = t_ev._sorder; + stack.splice(j, 1); + ev._inner = true; + break; + } + } + + if (stack.length) + stack[stack.length - 1]._inner = true; + + if (!sorderSet) { + 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 < stack.length; j++) { + var _is_sorder = false; + for (var k = 0; k < stack.length; k++) { + if (stack[k]._sorder == j) { + _is_sorder = true; + break; + } + } + if (!_is_sorder) { + ev._sorder = j; + break; + } + } + ev._inner = true; + } else { + var _max_sorder = stack[0]._sorder; + for (j = 1; j < stack.length; j++) { + if (stack[j]._sorder > _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) { + // Need to create copy of event as we will be changing it's start/end date + // e.g. first_hour = 11 and event.start_date hours = 9. Need to preserve that info evs_originals.push(ev); - evs[i]=ev=this._copy_event(ev); - if (sh < this.config.first_hour){ + evs[i] = ev = this._copy_event(ev); + + if (sh < this.config.first_hour) { ev.start_date.setHours(this.config.first_hour); ev.start_date.setMinutes(0); } - if (eh >= this.config.last_hour){ + if (eh >= this.config.last_hour) { ev.end_date.setMinutes(0); ev.end_date.setHours(this.config.last_hour); } - if (ev.start_date>ev.end_date || sh==this.config.last_hour) { - evs.splice(i,1); i--; continue; + + if (ev.start_date > ev.end_date || sh == this.config.last_hour) { + 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++) - evs_originals[i]._count=days[evs_originals[i]._sday].max_count; + 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++) + evs_originals[i]._count = days[evs_originals[i]._sday].max_count; } - + return evs; }; -scheduler._time_order=function(evs){ - evs.sort(function(a,b){ - if (a.start_date.valueOf()==b.start_date.valueOf()){ +scheduler._time_order = function(evs) { + 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 a.id>b.id?1:-1; + return a.id > b.id ? 1 : -1; } - return a.start_date>b.start_date?1:-1; + return a.start_date > b.start_date ? 1 : -1; }); }; -scheduler._pre_render_events_table=function(evs,hold){ // max - max height of week slot +scheduler._pre_render_events_table = function(evs, hold) { // max - max height of week slot this._time_order(evs); - - var out=[]; - var weeks=[[],[],[],[],[],[],[]]; //events by weeks + var out = []; + var weeks = [ + [], + [], + [], + [], + [], + [], + [] + ]; //events by weeks var max = this._colsS.heights; var start_date; var cols = this._cols.length; - - for (var i=0; i < evs.length; i++) { - var ev=evs[i]; - var sd = (start_date||ev.start_date); + var chunks_info = {}; + + for (var i = 0; i < evs.length; i++) { + var ev = evs[i]; + var id = ev.id; + if (!chunks_info[id]) { + chunks_info[id] = { + first_chunk: true, + last_chunk: true + }; + } + var chunk_info = chunks_info[id]; + var sd = (start_date || ev.start_date); var ed = ev.end_date; //trim events which are crossing through current view - if (sdthis._max_date) ed=this._max_date; - - var locate_s = this.locate_holder_day(sd,false,ev); - ev._sday=locate_s%cols; - var locate_e = this.locate_holder_day(ed,true,ev)||cols; - ev._eday=(locate_e%cols)||cols; //cols used to fill full week, when event end on monday - ev._length=locate_e-locate_s; - + if (sd < this._min_date) { + chunk_info.first_chunk = false; + sd = this._min_date; + } + if (ed > this._max_date) { + chunk_info.last_chunk = false; + ed = this._max_date; + } + + var locate_s = this.locate_holder_day(sd, false, ev); + ev._sday = locate_s % cols; + var locate_e = this.locate_holder_day(ed, true, ev) || cols; + ev._eday = (locate_e % cols) || cols; //cols used to fill full week, when event end on monday + ev._length = locate_e - locate_s; + //3600000 - compensate 1 hour during winter|summer time shift - ev._sweek=Math.floor((this._correct_shift(sd.valueOf(),1)-this._min_date.valueOf())/(60*60*1000*24*cols)); - + ev._sweek = Math.floor((this._correct_shift(sd.valueOf(), 1) - this._min_date.valueOf()) / (60 * 60 * 1000 * 24 * cols)); + //current slot - var stack=weeks[ev._sweek]; + var stack = weeks[ev._sweek]; //check order position var stack_line; - - for (stack_line=0; stack_line"; - 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); + + d2.innerHTML = ""; + if (this._quirks7) d2.firstChild.style.height = height - 12 + "px"; //IEFIX + this._editor = d2.firstChild; + this._editor.onkeydown = 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; }; - 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; + this._els["dhx_cal_data"][0].scrollLeft = 0; d2.firstChild.select(); - + } - if (this._select_id==ev.id){ - if(this.config.cascade_event_display && this._drag_mode) - d.style.zIndex = 1; //fix overlapping issue for cascade view in case of dnd of selected event - var icons=this.config["icons_"+((this._edit_id==ev.id)?"edit":"select")]; - var icons_str=""; - var bg_color = (ev.color?("background-color:"+ev.color+";"):""); - var color = (ev.textColor?("color:"+ev.textColor+";"):""); - 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; + if (this.xy.menu_width !== 0 && this._select_id == ev.id) { + if (this.config.cascade_event_display && this._drag_mode) + d.style.zIndex = 1; //fix overlapping issue for cascade view in case of dnd of selected event + var icons = this.config["icons_" + ((this._edit_id == ev.id) ? "edit" : "select")]; + var icons_str = ""; + var bg_color = (ev.color ? ("background-color: " + ev.color + ";") : ""); + var color = (ev.textColor ? ("color: " + ev.textColor + ";") : ""); + for (var i = 0; i < icons.length; i++) + icons_str += "
"; + var obj = this._render_v_bar(ev.id, left - menu + 1, top, menu, icons.length * 20 + 26 - 2, "", "
", icons_str, true); + obj.style.left = left - menu + 1; this._els["dhx_cal_data"][0].appendChild(obj); this._rendered.push(obj); } }; -scheduler._render_v_bar=function(id,x,y,w,h,style,contentA,contentB,bottom){ - var d=document.createElement("DIV"); +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+='
'; - - d.innerHTML=html; - return d.firstChild; + var cs = (bottom) ? "dhx_cal_event dhx_cal_select_menu" : "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:" + ev.color + ";") : ""); + var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); + + var html = '
'; + d.innerHTML = html; + + var container = d.cloneNode(true).firstChild; + + if (scheduler.renderEvent && !bottom && scheduler.renderEvent(container, ev)) { + return container; + } else { + container = d.firstChild; + + var inner_html = '
 
'; + inner_html += '
' + contentA + '
'; + inner_html += '
' + contentB + '
'; // +2 css specific, moved from render_event + + var footer_class = "dhx_event_resize dhx_footer"; + if (bottom) + footer_class = "dhx_resize_denied " + footer_class; + + inner_html += ''; + + container.innerHTML = inner_html; + } + + return container; }; -scheduler.locate_holder=function(day){ - if (this._mode=="day") return this._els["dhx_cal_data"][0].firstChild; //dirty +scheduler.locate_holder = function(day) { + if (this._mode == "day") return this._els["dhx_cal_data"][0].firstChild; //dirty return this._els["dhx_cal_data"][0].childNodes[day]; }; -scheduler.locate_holder_day=function(date,past){ - var day = Math.floor((this._correct_shift(date,1)-this._min_date)/(60*60*24*1000)); +scheduler.locate_holder_day = function(date, past) { + var day = Math.floor((this._correct_shift(date, 1) - this._min_date) / (60 * 60 * 24 * 1000)); //when locating end data of event , we need to use next day if time part was defined if (past && this.date.time_part(date)) day++; return day; }; -scheduler.render_event_bar=function(ev){ - var parent=this._rendered_location; +scheduler.render_event_bar = function (ev) { + 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 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.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 title_line = scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev); - - var html='
'; - + 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 = "dhx_cal_event_clear"; + if (!ev._timed) { + cs = "dhx_cal_event_line"; + if (ev.hasOwnProperty("_first_chunk") && ev._first_chunk) + cs += " dhx_cal_event_line_start"; + if (ev.hasOwnProperty("_last_chunk") && ev._last_chunk) + cs += " dhx_cal_event_line_end"; + } + + var cse = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + if (cse) cs = cs + " " + cse; + + var bg_color = (ev.color ? ("background:" + ev.color + ";") : ""); + var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); + + var html = '
'; + + ev = scheduler.getEvent(ev.id); // ev at this point could be a part of a larged event 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)+'
'; - html+='
'; - - d.innerHTML=html; - + 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) + ''; + html += ''; + + d.innerHTML = html; + this._rendered.push(d.firstChild); parent.appendChild(d.firstChild); }; -scheduler._locate_event=function(node){ - var id=null; - while (node && !id && node.getAttribute){ - id=node.getAttribute("event_id"); - node=node.parentNode; +scheduler._locate_event = function(node) { + var id = null; + while (node && !id && node.getAttribute) { + id = node.getAttribute("event_id"); + node = node.parentNode; } return id; }; - -scheduler.edit=function(id){ - if (this._edit_id==id) return; - this.editStop(false,id); - this._edit_id=id; +scheduler.edit = function(id) { + if (this._edit_id == id) return; + this.editStop(false, id); + this._edit_id = id; this.updateEvent(id); }; -scheduler.editStop=function(mode,id){ - if (id && this._edit_id==id) return; - var ev=this.getEvent(this._edit_id); - if (ev){ - if (mode) ev.text=this._editor.value; - this._edit_id=null; - this._editor=null; +scheduler.editStop = function(mode, id) { + if (id && this._edit_id == id) return; + var ev = this.getEvent(this._edit_id); + if (ev) { + if (mode) ev.text = this._editor.value; + this._edit_id = null; + this._editor = null; this.updateEvent(ev.id); - this._edit_stop_event(ev,mode); + this._edit_stop_event(ev, mode); } }; -scheduler._edit_stop_event=function(ev,mode){ - if (this._new_event){ - if (!mode) this.deleteEvent(ev.id,true); - else this.callEvent("onEventAdded",[ev.id,ev]); - this._new_event=null; - } else - if (mode) this.callEvent("onEventChanged",[ev.id,ev]); +scheduler._edit_stop_event = function(ev, mode) { + if (this._new_event) { + if (!mode) { + if (ev) // in case of custom lightbox user can already delete event + this.deleteEvent(ev.id, true); + } else { + this.callEvent("onEventAdded", [ev.id, ev]); + } + this._new_event = null; + } else { + if (mode) + this.callEvent("onEventChanged", [ev.id, ev]); + } }; -scheduler.getEvents = function(from,to){ +scheduler.getEvents = function(from, to) { var result = []; - for (var a in this._events){ + for (var a in this._events) { var ev = this._events[a]; - if (ev && ev.start_datefrom) + if (ev && ( (!from && !to) || (ev.start_date < to && ev.end_date > from) )) result.push(ev); } return result; }; - +scheduler.getRenderedEvent = function(id) { + if (!id) + return; + var rendered_events = scheduler._rendered; + for (var i=0; i"; - }, - set_value:function(node,value,ev,config){ - node.innerHTML = value||""; - }, - get_value:function(node,ev,config){ - return node.innerHTML||""; - }, - focus: function(node){ - } - }, + 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"; @@ -3791,10 +4269,15 @@ scheduler.form_blocks={ html+=""; return html; }, - set_value:function(node,value,ev){ + set_value:function(node,value,ev,sns){ + var select = node.firstChild; + if (!select._dhx_onchange && sns.onchange) { + select.onchange = sns.onchange; + select._dhx_onchange = true; + } if (typeof value == "undefined") - value = (node.firstChild.options[0]||{}).value; - node.firstChild.value=value||""; + value = (select.options[0]||{}).value; + select.value=value||""; }, get_value:function(node,ev){ return node.firstChild.value; @@ -3802,9 +4285,9 @@ scheduler.form_blocks={ focus:function(node){ var a=node.firstChild; if (a.select) a.select(); a.focus(); } - }, + }, time:{ - render:function(){ + render:function(sns){ //hours var cfg = scheduler.config; var dt = this.date.date_part(new Date()); @@ -3814,46 +4297,46 @@ scheduler.form_blocks={ first = 60*cfg.first_hour; dt.setHours(cfg.first_hour); } - + var html=" "; - + return "
"+html+"  –  "+html+"
"; }, - set_value:function(node,value,ev){ - - + set_value:function(node,value,ev,config){ + var cfg = scheduler.config; var s=node.getElementsByTagName("select"); - if(scheduler.config.full_day) { + if(cfg.full_day) { if (!node._full_day){ var html = ""; if (!scheduler.config.wide_form) @@ -3862,46 +4345,63 @@ scheduler.form_blocks={ 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); - input.checked = isFulldayEvent; - - for(var k in s) - s[k].disabled=input.checked; + input.checked = (scheduler.date.time_part(ev.start_date)===0 && scheduler.date.time_part(ev.end_date)===0); + + s[0].disabled=input.checked; + s[ s.length/2 ].disabled=input.checked; input.onclick = function(){ if(input.checked) { - var start_date = new Date(ev.start_date); - var end_date = new Date(ev.end_date); - - scheduler.date.date_part(start_date); - end_date = scheduler.date.add(start_date, 1, "day"); - } - for(var i in s) - s[i].disabled=input.checked; + var obj = {}; + scheduler.form_blocks.time.get_value(node,obj); + + var start_date = scheduler.date.date_part(obj.start_date); + var end_date = scheduler.date.date_part(obj.end_date); + + if (+end_date == +start_date || (+end_date >= +start_date && (ev.end_date.getHours() != 0 || ev.end_date.getMinutes() != 0))) + end_date = scheduler.date.add(end_date, 1, "day"); + } + + s[0].disabled=input.checked; + s[ s.length/2 ].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) { + if(cfg.auto_end_date && cfg.event_duration) { function _update_lightbox_select() { - ev.start_date=new Date(s[3].value,s[2].value,s[1].value,0,s[0].value); - ev.end_date.setTime(ev.start_date.getTime() + (scheduler.config.event_duration * 60 * 1000)); - _fill_lightbox_select(s,4,ev.end_date); + var start_date = new Date(s[3].value,s[2].value,s[1].value,0,s[0].value); + var end_date = new Date(start_date.getTime() + (scheduler.config.event_duration * 60 * 1000)); + _fill_lightbox_select(s, 4, end_date); } for(var i=0; i<4; i++) { s[i].onchange = _update_lightbox_select; } } - function _fill_lightbox_select(s,i,d){ - s[i+0].value=Math.round((d.getHours()*60+d.getMinutes())/scheduler.config.time_step)*scheduler.config.time_step; + function _fill_lightbox_select(s,i,d) { + var time_values = config._time_values; + var direct_value = d.getHours()*60+d.getMinutes(); + var fixed_value = direct_value; + var value_found = false; + for (var k=0; k
"+scheduler.locale.labels[buttons[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+="
"+scheduler.locale.labels[buttons[i]]+"
"; + html+=""; d.innerHTML=html; if (scheduler.config.drag_lightbox){ @@ -4159,7 +4683,7 @@ scheduler._get_lightbox=function(){ //scheduler.config.wide_form=true; 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; @@ -4181,14 +4705,19 @@ scheduler._get_lightbox=function(){ //scheduler.config.wide_form=true; html+="
"+button+this.locale.labels["section_"+sns[i].name]+"
"+block.render.call(this,sns[i]); html+="" } - - //localization + var ds=d.getElementsByTagName("div"); - //sections - ds[1].innerHTML=html; + for (var i=0; i=0; i--) - if (this._rendered[i].getAttribute("event_id")==id) - method(this._rendered[i],i); -}; -scheduler.changeEventId=function(id,new_id){ - if (id == new_id) return; - var ev=this._events[id]; - if (ev){ - ev.id=new_id; - this._events[new_id]=ev; - delete this._events[id]; - } - this.for_rendered(id,function(r){ - r.setAttribute("event_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]); -}; - -(function(){ - var attrs=["text","Text","start_date","StartDate","end_date","EndDate"]; - var create_getter=function(name){ - return function(id){ return (scheduler.getEvent(id))[name]; }; - }; - var create_setter=function(name){ - return function(id,value){ - var ev=scheduler.getEvent(id); ev[name]=value; - ev._changed=true; - ev._timed=this.is_one_day_event(ev); - scheduler.event_updated(ev,true); - }; - }; - for (var i=0; i this._colsS.height-22){ // 22 - height of cell's header - //we have overflow, update heights - var cells = evl.rows[i].cells; - for (var j=0; j < cells.length; j++) { - cells[j].childNodes[1].style.height = h[i]*hb+"px"; - } - h[i]=(h[i-1]||0)+cells[0].offsetHeight; - } - h[i]=(h[i-1]||0)+evl.rows[i].cells[0].offsetHeight; - } - h.unshift(0); - if (evl.parentNode.offsetHeightb.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++) { - var ev=evs[i]; - - //check scale overflow - var sh = ev.start_date.getHours(); - var eh = ev.end_date.getHours(); - - ev._sday=this._get_event_sday(ev); - if (!days[ev._sday]) days[ev._sday]=[]; - - 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); - - 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){ - evs_originals.push(ev); - evs[i]=ev=this._copy_event(ev); - if (sh < this.config.first_hour){ - ev.start_date.setHours(this.config.first_hour); - ev.start_date.setMinutes(0); - } - if (eh >= this.config.last_hour){ - ev.end_date.setMinutes(0); - ev.end_date.setHours(this.config.last_hour); - } - if (ev.start_date>ev.end_date || sh==this.config.last_hour) { - 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++) - evs_originals[i]._count=days[evs_originals[i]._sday].max_count; - } - - return evs; -}; -scheduler._time_order=function(evs){ - 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 a.id>b.id?1:-1; - } - return a.start_date>b.start_date?1:-1; - }); -}; -scheduler._pre_render_events_table=function(evs,hold){ // max - max height of week slot - this._time_order(evs); - - var out=[]; - var weeks=[[],[],[],[],[],[],[]]; //events by weeks - var max = this._colsS.heights; - var start_date; - var cols = this._cols.length; - - for (var i=0; i < evs.length; i++) { - var ev=evs[i]; - var sd = (start_date||ev.start_date); - var ed = ev.end_date; - //trim events which are crossing through current view - if (sdthis._max_date) ed=this._max_date; - - var locate_s = this.locate_holder_day(sd,false,ev); - ev._sday=locate_s%cols; - var locate_e = this.locate_holder_day(ed,true,ev)||cols; - ev._eday=(locate_e%cols)||cols; //cols used to fill full week, when event end on monday - ev._length=locate_e-locate_s; - - //3600000 - compensate 1 hour during winter|summer time shift - ev._sweek=Math.floor((this._correct_shift(sd.valueOf(),1)-this._min_date.valueOf())/(60*60*1000*24*cols)); - - //current slot - var stack=weeks[ev._sweek]; - //check order position - var stack_line; - - for (stack_line=0; stack_line"; - 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){ - if(this.config.cascade_event_display && this._drag_mode) - d.style.zIndex = 1; //fix overlapping issue for cascade view in case of dnd of selected event - var icons=this.config["icons_"+((this._edit_id==ev.id)?"edit":"select")]; - var icons_str=""; - var bg_color = (ev.color?("background-color:"+ev.color+";"):""); - var color = (ev.textColor?("color:"+ev.textColor+";"):""); - 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; - this._els["dhx_cal_data"][0].appendChild(obj); - this._rendered.push(obj); - } -}; -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+='
'; - - d.innerHTML=html; - return d.firstChild; -}; -scheduler.locate_holder=function(day){ - if (this._mode=="day") return this._els["dhx_cal_data"][0].firstChild; //dirty - return this._els["dhx_cal_data"][0].childNodes[day]; -}; -scheduler.locate_holder_day=function(date,past){ - var day = Math.floor((this._correct_shift(date,1)-this._min_date)/(60*60*24*1000)); - //when locating end data of event , we need to use next day if time part was defined - if (past && this.date.time_part(date)) day++; - return day; -}; -scheduler.render_event_bar=function(ev){ - 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 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; - - var bg_color = (ev.color?("background-color:"+ev.color+";"):""); - var color = (ev.textColor?("color:"+ev.textColor+";"):""); - - 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)+'
'; - html+=''; - - d.innerHTML=html; - - this._rendered.push(d.firstChild); - parent.appendChild(d.firstChild); -}; - -scheduler._locate_event=function(node){ - var id=null; - while (node && !id && node.getAttribute){ - id=node.getAttribute("event_id"); - node=node.parentNode; - } - return id; -}; - - -scheduler.edit=function(id){ - if (this._edit_id==id) return; - this.editStop(false,id); - this._edit_id=id; - this.updateEvent(id); -}; -scheduler.editStop=function(mode,id){ - if (id && this._edit_id==id) return; - var ev=this.getEvent(this._edit_id); - if (ev){ - if (mode) ev.text=this._editor.value; - this._edit_id=null; - this._editor=null; - this.updateEvent(ev.id); - this._edit_stop_event(ev,mode); - } -}; -scheduler._edit_stop_event=function(ev,mode){ - if (this._new_event){ - if (!mode) this.deleteEvent(ev.id,true); - else this.callEvent("onEventAdded",[ev.id,ev]); - this._new_event=null; - } else - if (mode) this.callEvent("onEventChanged",[ev.id,ev]); -}; - -scheduler.getEvents = function(from,to){ - var result = []; - for (var a in this._events){ - var ev = this._events[a]; - if (ev && ev.start_datefrom) - result.push(ev); - } - return result; -}; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext.css deleted file mode 100644 index de19bca63ed..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext.css +++ /dev/null @@ -1,386 +0,0 @@ -/* -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(./imgs/colapce-expand-icon.gif); - width:18px; height:18px; - cursor:pointer; - background-position:0px 18px; - z-index:16; -} -.dhx_agenda_area{ - width:100%; - height:100%; - overflow-y:auto; - background-image:url(./imgs/databg.png); -} -.dhx_agenda_line{ - height:21px; - clear:both; - overflow:hidden; -} -.dhx_agenda_line div{ - float:left; - width:188px; - border-right:1px dotted #8894A3; - text-align:center; - line-height:21px; - overflow:hidden; -} -.dhx_agenda_area .dhx_agenda_line div{ - border-right:0px dotted #8894A3; -} -.dhx_v_border{ - position:absolute; left:186px; top:0px; - border-right:1px dotted #8894A3; - width:1px; - height:100%; -} -.dhx_agenda_line .dhx_event_icon{ - width:20px; - border-width:0px; - background:url(./imgs/icon.png) no-repeat; - background-position: 5px 4px; - cursor:pointer; -} -.dhx_agenda_line span{ - padding-left:5px; - line-height:21px; -} - - -.dhx_year_body{ - border-left:1px dotted #586A7E; -} -.dhx_year_week{ - position:relative; -} -.dhx_scale_bar_last{ - border-right:1px dotted #586A7E; -} -.dhx_year_month{ - height:18px; - padding-top:3px; - border:1px dotted #586A7E; - text-align:center; - vertical-align:middle; -} -.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:#E2E3E6 !important; -} -.dhx_year_body .dhx_month_body{ - height:0px; - overflow:hidden; -} -.dhx_month_head.dhx_year_event{ - background-color:#FFE763; -} -.dhx_year_body .dhx_before .dhx_month_head, .dhx_year_body .dhx_after .dhx_month_head{ - cursor: default; -} -.dhx_tooltip{ - border:1px solid #BBBBBB; - background-image:url(./imgs/databg.png); - position:absolute; - z-index:9998; - width:300px; - height:auto; - font-family:Tahoma; - font-size:8pt; - overflow:hidden; -} - -.dhx_tooltip_line{ - line-height:20px; - height:20px; - overflow:hidden; -} - -.dhx_tooltip_line .dhx_event_icon{ - width:20px; height:20px; - padding-right:10px; - float:left; - border-width:0px; - position:relative; - background:url(./imgs/icon.png) no-repeat; - background-position: 5px 4px; - cursor:pointer; -} - -.dhx_tooltip_date{ - float:left; - width:auto; - padding-left:5px; - text-align:center; -} - -.dhx_text_disabled{ - color:#887A2E; - font-family:Tahoma; - font-size:8pt; -} - -.dhx_mini_calendar{ - -moz-box-shadow:5px 5px 5px #888; /*Doesn't work in IE*/ - -khtml-box-shadow: 5px 5px 5px #888; -} - -.dhx_mini_calendar .dhx_month_head{ - cursor:pointer; -} -.dhx_mini_calendar .dhx_calendar_click{ - background-color: #C2D5FC; -} -.dhx_cal_navline div.dhx_minical_icon{ - width:18px; - height:18px; - left:190px; - top:1px; - cursor:pointer; - background-image:url(./imgs/calendar.gif); -} - -.dhx_matrix_scell { - height: 100%; -} - -.dhx_matrix_cell, .dhx_matrix_scell{ - overflow:hidden; - text-align:center; - vertical-align:middle; - border-bottom:1px dotted #8894A3; - border-right:1px dotted #8894A3; -} -.dhx_matrix_cell{ - background-color:white; -} -.dhx_matrix_line{ - overflow: hidden; -} -.dhx_matrix_cell div, .dhx_matrix_scell div{ - overflow:hidden; - text-align:center; - height:auto; -} - -.dhx_cal_lsection .dhx_readonly{ - font-size:9pt; - font-size:8pt; - padding:2px; - color:#887A2E; -} - -/* Tree view */ -.dhx_matrix_scell.folder, .dhx_data_table.folder .dhx_matrix_cell{ - background-color: #969394; - cursor: pointer; -} -.dhx_matrix_scell .dhx_scell_level0{ - padding-left: 5px; -} -.dhx_matrix_scell .dhx_scell_level1{ - padding-left: 20px; -} -.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; - padding-right:3px; -} -.dhx_matrix_scell.folder .dhx_scell_name{ - float: left; - width: auto; -} -.dhx_matrix_scell.item .dhx_scell_name{ - padding-left:15px; - text-align: left; -} -.dhx_data_table.folder .dhx_matrix_cell{ - border-right: 0; -} -.dhx_section_timeline { - overflow: hidden; - padding: 4px 0 2px 10px; -} -.dhx_section_timeline select{ - width: 552px; -} - -/* Tree view end*/ - -/* Map view */ -.dhx_map_area{ - width:100%; - height:100%; - overflow-y: auto; - overflow-x: hidden; - background-image:url(./imgs/databg.png); -} -.dhx_map_line .dhx_event_icon{ - width:20px; - border-width:0px; - background:url(./imgs/icon.png) no-repeat; - background-position: 5px 4px; - cursor:pointer; -} -.dhx_map_line{ - height:21px; - clear:both; - overflow:hidden; -} -.dhx_map { - position:absolute; -} -.dhx_map_line div{ - float:left; - border-right:1px dotted #8894A3; - text-align:center; - line-height:21px; - overflow:hidden; -} -.dhx_map_line .headline_description{ - float:left; - - border-right:1px dotted #8894A3; - text-align:center; - line-height:21px; - overflow:hidden; -} -.dhx_map_line .dhx_map_description{ - float:left; - border-right: 0 dotted #8894A3; - text-align:center; - line-height:21px; - overflow:hidden; -} -.dhx_map_line .line_description{ - float:left; - border-right:1px dotted #8894A3; - text-align:left; - padding-left:5px; - line-height:21px; - overflow:hidden; -} -.dhx_map_line.highlight{ - background-color: #C4C5CC; -} -.dhx_map_area .dhx_map_line div{ - border-right:0px dotted #8894A3; -} -/* Map view end */ - -/* dhtmlXTooltip start */ -.dhtmlXTooltip.tooltip{ - -moz-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; - color:#887A2E; - cursor:default; - padding:10px; - position:absolute; - z-index:500; -} -/* dhtmlXTooltip end */ - -/* Lightbox checkbox section */ -.dhx_cal_checkbox label { - padding-left: 5px; -} -/* Lightbox checkbox section end */ - - -/* Lightbox radiobuttons section */ -.dhx_cal_light .radio { - padding: 2px 0px 2px 10px; -} -.dhx_cal_light .radio input, .dhx_cal_light .radio label{ - line-height: 15px; -} -.dhx_cal_light .radio input { - vertical-align: middle; - margin: 0px; - padding: 0px; -} -.dhx_cal_light .radio label { - vertical-align: middle; - padding-right: 10px; -} -/* Lightbox radiobuttons section end */ - - -/* Lightbox dhtmlx combo section */ -.dhx_cal_light .combo { - 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/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_active_links.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_active_links.js new file mode 100644 index 00000000000..3a2af4ecb93 --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_active_links.js @@ -0,0 +1,28 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.config.active_link_view = "day"; +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); + + 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) { + scheduler.setCurrentView(s_d(to), scheduler.config.active_link_view); + if (e && e.preventDefault) + e.preventDefault(); + return false; + } + }) +}); \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_agenda_view.js similarity index 53% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_agenda_view.js index 08d06e0e644..ff93a8876fe 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_agenda_view.js @@ -1,15 +1,11 @@ /* 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 */ scheduler.date.add_agenda = function(date){ - return (new Date(date.valueOf())); + return scheduler.date.add(date, 1, "year"); }; -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); @@ -19,41 +15,46 @@ scheduler.templates.agenda_time = function(start,end,ev){ scheduler.templates.agenda_text = function(start,end,event){ return event.text; }; -scheduler.date.agenda_start=function(d){ return d; }; - -scheduler.attachEvent("onTemplatesReady",function(){ - +scheduler.templates.agenda_date = function(){ return ""; }; +scheduler.date.agenda_start=function(){ return scheduler.date.date_part(new Date()); }; +scheduler.attachEvent("onTemplatesReady",function() { + var old_dblclick_dhx_cal_data = scheduler.dblclick_dhx_cal_data; + scheduler.dblclick_dhx_cal_data = function() { + if (this._mode == "agenda") { + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow(); + } else { + if (old_dblclick_dhx_cal_data) + return old_dblclick_dhx_cal_data.apply(this, arguments); + } + }; scheduler.attachEvent("onSchedulerResize",function(){ - if (this._mode == "agenda"){ - this.agenda_view(true); - return false; - } - return true; + if (this._mode == "agenda"){ + this.agenda_view(true); + return false; + } + return true; }); var old = scheduler.render_data; scheduler.render_data=function(evs){ if (this._mode == "agenda") - fill_agenda_tab(); - else - return old.apply(this,arguments); - } + fill_agenda_tab(); + else + return old.apply(this,arguments); + }; var old_render_view_data = scheduler.render_view_data; - scheduler.render_view_data=function(){ + 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){ @@ -77,9 +78,10 @@ scheduler.attachEvent("onTemplatesReady",function(){ var html="
"; for (var i=0; i
"+scheduler.templates.agenda_time(ev.start_date, ev.end_date,ev)+"
"; + var bg_color = (ev.color?("background:"+ev.color+";"):""); + var color = (ev.textColor?("color:"+ev.textColor+";"):""); + var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + html+="
"+scheduler.templates.agenda_time(ev.start_date, ev.end_date,ev)+"
"; html+="
 
"; html+=""+scheduler.templates.agenda_text(ev.start_date, ev.end_date, ev)+"
"; } @@ -88,9 +90,14 @@ scheduler.attachEvent("onTemplatesReady",function(){ //render html scheduler._els["dhx_cal_data"][0].innerHTML = html; scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = scheduler._agendaScrollTop||0; + + // setting up dhx_v_border size + var agenda_area = scheduler._els["dhx_cal_data"][0].childNodes[0]; + var v_border = agenda_area.childNodes[agenda_area.childNodes.length-1]; + v_border.style.height = (agenda_area.offsetHeight < scheduler._els["dhx_cal_data"][0].offsetHeight) ? "100%" : (agenda_area.offsetHeight+"px"); var t=scheduler._els["dhx_cal_data"][0].firstChild.childNodes; - scheduler._els["dhx_cal_date"][0].innerHTML=""; + scheduler._els["dhx_cal_date"][0].innerHTML=scheduler.templates.agenda_date(scheduler._min_date, scheduler._max_date, scheduler._mode); scheduler._rendered=[]; for (var i=0; i < t.length-1; i++) @@ -99,8 +106,8 @@ scheduler.attachEvent("onTemplatesReady",function(){ } scheduler.agenda_view=function(mode){ - scheduler._min_date = scheduler.config.agenda_start||(new Date()); - scheduler._max_date = scheduler.config.agenda_end||(new Date(9999,1,1)); + scheduler._min_date = scheduler.config.agenda_start||scheduler.date.agenda_start(scheduler._date); + scheduler._max_date = scheduler.config.agenda_end||scheduler.date.add_agenda(scheduler._min_date, 1); scheduler._table_view = true; set_full_view(mode); if (mode){ @@ -110,4 +117,4 @@ scheduler.attachEvent("onTemplatesReady",function(){ //agenda tab de-activated } } -}) +}); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_all_timed.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_all_timed.js new file mode 100644 index 00000000000..30d1d7066ef --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_all_timed.js @@ -0,0 +1,133 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +(function(){ + + scheduler.config.all_timed = "short"; + scheduler.config.update_render = true; + + var is_event_short = function (ev) { + return !((ev.end_date - ev.start_date)/(1000*60*60) >= 24); + }; + + var old_prerender_events_line = scheduler._pre_render_events_line; + scheduler._pre_render_events_line = function(evs, hold){ + if (!this.config.all_timed) + return old_prerender_events_line.call(this, evs, hold); + + for (var i=0; i < evs.length; i++) { + var ev=evs[i]; + + if (!ev._timed) { + + if (this.config.all_timed == "short") { + if (!is_event_short(ev)) { + evs.splice(i--,1); + continue; + } + } + + var ce = this._lame_copy({}, ev); // current event (event for one specific day) is copy of original with modified dates + + ce.start_date = new Date(ce.start_date); // as lame copy doesn't copy date objects + + var next_day = scheduler.date.add(ev.start_date, 1, "day"); + next_day = scheduler.date.date_part(next_day); + + if (ev.end_date < next_day) { + ce.end_date = new Date(ev.end_date); + } + else { + ce.end_date = next_day; + if (this.config.last_hour != 24) { // if specific last_hour was set (e.g. 20) + ce.end_date = scheduler.date.date_part(new Date(ce.start_date)); + ce.end_date.setHours(this.config.last_hour); + } + } + + var event_changed = false; + if (ce.start_date < this._max_date && ce.end_date > this._min_date && ce.start_date < ce.end_date) { + evs[i] = ce; // adding another event in collection + event_changed = true; + } + if (ce.start_date > ce.end_date) { + evs.splice(i--,1); + } + + var re = this._lame_copy({}, ev); // remaining event, copy of original with modified start_date (making range more narrow) + re.end_date = new Date(re.end_date); + if (re.start_date < this._min_date) + re.start_date = new Date(this._min_date); + else + re.start_date = this.date.add(ev.start_date, 1, "day"); + + re.start_date.setHours(this.config.first_hour); + re.start_date.setMinutes(0); // as we are starting only with whole hours + if (re.start_date < this._max_date && re.start_date < re.end_date) { + if (event_changed) + evs.splice(i+1,0,re); + else { + evs[i--] = re; + continue; + } + } + } + } + // in case of all_timed pre_render is not applied to the original event + // so we need to force redraw in case of dnd + var redraw = (this._drag_mode == 'move')?false:hold; + return old_prerender_events_line.call(this, evs, redraw); + }; + var old_get_visible_events = scheduler.get_visible_events; + scheduler.get_visible_events = function(only_timed){ + if (!this.config.all_timed) + return old_get_visible_events.call(this, only_timed); + return old_get_visible_events.call(this, false); // only timed = false + }; + scheduler.attachEvent("onBeforeViewChange", function (old_mode, old_date, mode, date) { + scheduler._allow_dnd = (mode == "day" || mode == "week"); + return true; + }); + + scheduler.render_view_data=function(evs, hold){ + if(!evs){ + if (this._not_render) { + this._render_wait=true; + return; + } + this._render_wait=false; + + this.clear_view(); + evs=this.get_visible_events( !(this._table_view || this.config.multi_day) ); + } + + if (this.config.multi_day && !this._table_view){ + + var tvs = []; + var tvd = []; + for (var i=0; i < evs.length; i++){ + if (evs[i]._timed || this.config.all_timed === true || (this.config.all_timed == "short" && is_event_short(evs[i])) ) + tvs.push(evs[i]); + else + tvd.push(evs[i]); + } + + // normal events + this._rendered_location = this._els['dhx_cal_data'][0]; + this._table_view=false; + this.render_data(tvs, hold); + + // multiday events + this._rendered_location = this._els['dhx_multi_day'][0]; + this._table_view = true; + this.render_data(tvd, hold); + this._table_view=false; + + } else { + this._rendered_location = this._els['dhx_cal_data'][0]; + this.render_data(evs, hold); + } + }; + +})(); \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_collision.js similarity index 71% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_collision.js index e1e5d0fb52f..700b8de19ed 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_collision.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ (function(){ @@ -40,23 +40,25 @@ scheduler.attachEvent("onEventChanged",function(id){ ev.start_date = before[0]; ev.end_date = before[1]; ev._timed=this.is_one_day_event(ev); - }; + } return true; }); scheduler.attachEvent("onBeforeEventChanged",function(ev,e,is_new){ return collision_check(ev); }); -scheduler.attachEvent("onEventSave",function(id, edited_ev){ +scheduler.attachEvent("onEventSave",function(id, edited_ev, is_new){ + edited_ev = scheduler._lame_clone(edited_ev); + edited_ev.id = id; + if(edited_ev.rec_type){ - scheduler._roll_back_dates(edited_ev); - return collision_check(edited_ev); + scheduler._roll_back_dates(data_copy); } - return true; - //return collision_check(edited_ev); + return collision_check(edited_ev); // in case user creates event on one date but then edited it another }); function collision_check(ev){ var evs = []; + var collision_limit = scheduler.config.collision_limit; if (ev.rec_type) { var evs_dates = scheduler.getRecDates(ev); for(var k=0; k= scheduler.config.collision_limit) { - ev[map_to] = temp_section; // from _setTempSection for custom views + if (count >= collision_limit) { + single = false; } } else { - if (evs.length > scheduler.config.collision_limit) + if ( evs.length >= collision_limit ) single = false; } - if (!single) return !scheduler.callEvent("onEventCollision",[ev,evs]); + if (!single) { + var res = !scheduler.callEvent("onEventCollision",[ev,evs]); + if (!res) { + ev[map_to] = temp_section||ev[map_to]; // from _setTempSection for custom views + } + return res; + } return single; } diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_cookie.js similarity index 76% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_cookie.js index 71f1d5e6794..f989ee8ddc5 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_cookie.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ (function(){ function setCookie(name,cookie_param,value) { @@ -27,13 +27,15 @@ to use it in not GPL project. Please contact sales@dhtmlx.com for details first = false; var data=getCookie("scheduler_settings"); if (data){ - data = data.split("@"); + data = unescape(data).split("@"); data[0] = this.templates.xml_date(data[0]); - this.setCurrentView(data[0],data[1]); + window.setTimeout(function(){ + scheduler.setCurrentView(data[0],data[1]); + },1); return false; } } - var text = this.templates.xml_format(d||od)+"@"+(m||om); + var text = escape(this.templates.xml_format(d||od)+"@"+(m||om)); setCookie("scheduler_settings","expires=Sun, 31 Jan 9999 22:00:00 GMT",text); return true; }); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_dhx_terrace.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_dhx_terrace.js new file mode 100644 index 00000000000..613741bac43 --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_dhx_terrace.js @@ -0,0 +1,90 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +(function(){ + + scheduler.config.fix_tab_position = true; + scheduler.config.use_select_menu_space = true; + scheduler.config.hour_size_px = 44; + scheduler.xy.nav_height = 59; + scheduler.xy.bar_height = 24; + scheduler.config.wide_form = true; + scheduler.xy.lightbox_additional_height = 90; + + scheduler.config.displayed_event_color = "#ff4a4a"; + scheduler.config.displayed_event_text_color = "#ffef80"; + + scheduler.templates.event_bar_date = function(start,end,ev) { + return "• "+scheduler.templates.event_date(start)+" "; + }; + + scheduler.attachEvent("onLightbox", function(){ + var lightbox = scheduler.getLightbox(); + var divs = lightbox.getElementsByTagName('div'); + for (var i=0; i
"; + res += "
"; return res; }, set_value:function(node,value,ev,config){ @@ -13,8 +15,11 @@ scheduler.form_blocks['combo']={ node._combo.destructor(); } window.dhx_globalImgPath = config.image_path||'/'; - node._combo = new dhtmlXCombo(node, config.name, node.offsetWidth-8); - node._combo.enableFilteringMode(!!config.filtering, config.script_path||null, !!config.cache); + node._combo = new dhtmlXCombo(node, config.name, node.offsetWidth-8); + if (config.options_height) + node._combo.setOptionHeight(config.options_height); + var combo = node._combo; + combo.enableFilteringMode(!!config.filtering, config.script_path||null, !!config.cache); if (!config.script_path) { // script-side filtration is used var all_options = []; @@ -24,17 +29,40 @@ scheduler.form_blocks['combo']={ single_option.push(config.options[i].label); all_options.push(single_option); } - node._combo.addOption(all_options); + combo.addOption(all_options); if (ev[config.map_to]) { - var index = node._combo.getIndexByValue(ev[config.map_to]); - node._combo.selectOption(index); + var index = combo.getIndexByValue(ev[config.map_to]); + combo.selectOption(index); } } else { // server-side filtration is used - node._combo.setComboValue(ev[config.map_to]||null); + var selected_id = ev[config.map_to]; + if (selected_id) { + if (config.cached_options[selected_id]) { + combo.addOption(selected_id, config.cached_options[selected_id]); + combo.disable(1); + combo.selectOption(0); + combo.disable(0); + } else { + dhtmlxAjax.get(config.script_path+"?id="+selected_id+"&uid="+scheduler.uid(), function(result){ + var option = result.doXPath("//option")[0]; + var label = option.childNodes[0].nodeValue; + config.cached_options[selected_id] = label; + combo.addOption(selected_id, label); + combo.disable(1); + combo.selectOption(0); + combo.disable(0); + }); + } + } else { + combo.setComboValue(null); + } } }, - get_value:function(node,ev,config){ + get_value:function(node,ev,config) { var selected_id = node._combo.getSelectedValue(); // value = key + if (config.script_path) { + config.cached_options[selected_id] = node._combo.getSelectedText(); + } return selected_id; }, focus:function(node){ @@ -59,7 +87,8 @@ scheduler.form_blocks['radio']={ var radiobuttons = node.getElementsByTagName('input'); for (var i = 0; i < radiobuttons.length; i++) { radiobuttons[i].checked = false; - if (radiobuttons[i].value == ev[config.map_to]) { + var checked_value = ev[config.map_to]||value; + if (radiobuttons[i].value == checked_value) { radiobuttons[i].checked = true; } } @@ -84,12 +113,9 @@ scheduler.form_blocks['checkbox']={ return ''; }, set_value:function(node,value,ev,config){ - node=document.getElementById(config.id); + 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; - } + var isChecked = (typeof config.checked_value != "undefined") ? ev[config.map_to] == config.checked_value : !!value; node.className += " dhx_cal_checkbox"; var check_html = ""; var label_html = ""; @@ -98,9 +124,14 @@ scheduler.form_blocks['checkbox']={ node.nextSibling.innerHTML=check_html; } else node.innerHTML=check_html+label_html; + + if (config.handler) { + var checkbox = node.getElementsByTagName('input')[0]; + checkbox.onclick = config.handler; + } }, get_value:function(node,ev,config){ - node=document.getElementById(config.id); + node=document.getElementById(config.id); var checkbox = node.getElementsByTagName('input')[0]; // moved to the header if (!checkbox) checkbox = node.nextSibling.getElementsByTagName('input')[0]; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_expand.js similarity index 94% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_expand.js index 5e916128cf9..1f00aa4e5ab 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_expand.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ scheduler.expand = function(){ var t = scheduler._obj; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_grid_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_grid_view.js new file mode 100644 index 00000000000..a25199a7c4f --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_grid_view.js @@ -0,0 +1,470 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +(function(){ + scheduler.grid = { + sort_rules:{ + "int":function(a,b, getVal){ return getVal(a)*1 < getVal(b)*1?1:-1}, + "str":function(a,b, getVal){ return getVal(a) < getVal(b)?1:-1}, + "date":function(a,b, getVal){ return new Date(getVal(a))< new Date(getVal(b))?1:-1} + }, + _getObjName:function(name){ + return "grid_"+name; + }, + _getViewName:function(objName){ + return objName.replace(/^grid_/,''); + } + }; +} +)(); +/* +obj={ + name:'grid_name' + fields:[ + { id:"id", label:"Id", width:80, sort:"int/date/str", template:function(start_date, end_date, ev){ return ""}, align:"right/left/center" }, + { id:"text", label:"Text", width:'*', css:"class_name", sort:function(a,b){ return 1 or -1}, valign:'top/bottom/middle' } + ... + ], + from:new Date(0), + to:Date:new Date(9999,1,1), + rowHeight:int, + paging:true/false, + select:true/false +} +*/ + + +scheduler.createGridView=function(obj){ + + var name = obj.name || 'grid'; + var objName = scheduler.grid._getObjName(name); + + scheduler.config[name + '_start'] = obj.from ||(new Date(0)); + scheduler.config[name + '_end'] = obj.to || (new Date(9999,1,1)); + + scheduler[objName] = obj; + scheduler[objName].defPadding = 8; + scheduler[objName].columns = scheduler[objName].fields; + delete scheduler[objName].fields; + function isValidSize(size){ + return !(size !== undefined && (size*1 != size || size < 0)); + } + + var cols = scheduler[objName].columns; + for(var i=0; i < cols.length; i++){ + if(isValidSize(cols[i].width)) + cols[i].initialWidth = cols[i].width; + if(!isValidSize(cols[i].paddingLeft)) + delete cols[i].paddingLeft; + if(!isValidSize(cols[i].paddingRight)) + delete cols[i].paddingRight; + } + + scheduler[objName].select = obj.select === undefined ? true : obj.select; + if(scheduler.locale.labels[name +'_tab'] === undefined) + scheduler.locale.labels[name +'_tab'] = scheduler[objName].label || scheduler.locale.labels.grid_tab; + + scheduler[objName]._selected_divs = []; + + scheduler.date[name+'_start']=function(d){ return d; }; + scheduler.date['add_' + name] = function(date, inc){ + var ndate = new Date(date); + ndate.setMonth(ndate.getMonth()+inc); + return ndate; + }; + + scheduler.templates[name+"_date"] = function(start, end){ + return scheduler.templates.day_date(start)+" - "+scheduler.templates.day_date(end) + } + + scheduler.attachEvent("onTemplatesReady",function(){ + + scheduler.templates[name + '_full_date'] = 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[name + '_single_date'] = function(date){ + return scheduler.templates.day_date(date)+" "+this.event_date(date); + } + + + scheduler.attachEvent("onDblClick",function(event_id, native_event_object){ + if(this._mode == name){ + scheduler._click.buttons['details'](event_id) + return false; + } + return true; + }); + + scheduler.attachEvent("onClick",function(event_id, native_event_object){ + if(this._mode == name && scheduler[objName].select ){ + scheduler.grid.unselectEvent('', name); + scheduler.grid.selectEvent(event_id, name, native_event_object); + return false; + } + return true; + }); + + + scheduler.templates[name + '_field'] = function(field_name, event){ + return event[field_name]; + }; + + scheduler.attachEvent("onSchedulerResize", function() { + if (this._mode == name) { + this[name + '_view'](true); + // timeout used to run code after all onSchedulerResize handlers are finished + window.setTimeout(function(){ + // we need to call event manually because handler return false, and blocks default logic + scheduler.callEvent("onAfterSchedulerResize", []); + },1); + return false; + } + return true; + }); + + + var old = scheduler.render_data; + scheduler.render_data=function(evs){ + if (this._mode == name) + scheduler.grid._fill_grid_tab(objName); + else + return old.apply(this,arguments); + }; + + var old_render_view_data = scheduler.render_view_data; + scheduler.render_view_data=function(){ + if(this._mode == name) { + scheduler.grid._gridScrollTop = 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 = 'auto'; + } + else { + scheduler._els["dhx_cal_data"][0].style.overflowY = 'auto'; + } + return old_render_view_data.apply(this,arguments); + } +}); + + + scheduler[name+'_view']=function(mode){ + if (mode){ + scheduler._min_date = scheduler[objName].paging ? scheduler.date[name+'_start'](new Date(scheduler._date)) : scheduler.config[name + '_start']; + scheduler._max_date = scheduler[objName].paging ? scheduler.date.add(scheduler._min_date, 1, name) : scheduler.config[name + '_end']; + + scheduler.grid.set_full_view(objName); + if(scheduler._min_date > new Date(0) && scheduler._max_date < (new Date(9999,1,1))) + scheduler._els["dhx_cal_date"][0].innerHTML=scheduler.templates[name+"_date"](scheduler._min_date,scheduler._max_date); + else + scheduler._els["dhx_cal_date"][0].innerHTML=""; + + //grid tab activated + scheduler.grid._fill_grid_tab(objName); + scheduler._gridView = objName; + } else { + scheduler.grid._sort_marker = null; + delete scheduler._gridView; + scheduler._rendered=[]; + scheduler[objName]._selected_divs = []; + //grid tab de-activated + } + }; + + +} + + +scheduler.dblclick_dhx_grid_area=function(){ + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow(); +}; + +if(scheduler._click.dhx_cal_header){ + scheduler._old_header_click = scheduler._click.dhx_cal_header; +} +scheduler._click.dhx_cal_header=function(e){ + if(scheduler._gridView){ + var event = e||window.event; + var params = scheduler.grid.get_sort_params(event, scheduler._gridView); + + scheduler.grid.draw_sort_marker(event.originalTarget || event.srcElement, params.dir); + + scheduler.clear_view(); + scheduler.grid._fill_grid_tab(scheduler._gridView, params); + } + else if(scheduler._old_header_click) + return scheduler._old_header_click.apply(this,arguments); +}; + +scheduler.grid.selectEvent = function(id, view_name, native_event_object){ + if(scheduler.callEvent("onBeforeRowSelect",[id,native_event_object])){ + var objName = scheduler.grid._getObjName(view_name); + + scheduler.for_rendered(id, function(event_div){ + event_div.className += " dhx_grid_event_selected"; + scheduler[objName]._selected_divs.push(event_div); + }); + scheduler._select_id = id; + } +}; + +scheduler.grid._unselectDiv= function(div){ + div.className = div.className.replace(/ dhx_grid_event_selected/,''); +} +scheduler.grid.unselectEvent = function(id, view_name){ + var objName = scheduler.grid._getObjName(view_name); + if(!objName || !scheduler[objName]._selected_divs) + return; + + if(!id){ + for(var i=0; i "; + node.innerHTML += html; + +}; + +scheduler.grid.sort_grid=function(sort){ + + var sort = sort || {dir:'desc', value:function(ev){return ev.start_date;}, rule:scheduler.grid.sort_rules['date']}; + + var events = scheduler.get_visible_events(); + + if(sort.dir == 'desc') + events.sort(function(a,b){return sort.rule(a,b,sort.value)}); + else + events.sort(function(a,b){return -sort.rule(a,b, sort.value)}); + return events; +}; + + + +scheduler.grid.set_full_view = function(mode){ + if (mode){ + var l = scheduler.locale.labels; + var html =scheduler.grid._print_grid_header(mode); + + scheduler._els["dhx_cal_header"][0].innerHTML= html; + scheduler._table_view=true; + scheduler.set_sizes(); + } +}; +scheduler.grid._calcPadding = function(column, parent){ + var padding = (column.paddingLeft !== undefined ? 1*column.paddingLeft : scheduler[parent].defPadding) + + (column.paddingRight !== undefined ? 1*column.paddingRight : scheduler[parent].defPadding); + return padding; +}; + +scheduler.grid._getStyles = function(column, items){ + var cell_style = [], style = ""; + for(var i=0; items[i]; i++ ){ + style = items[i] + ":"; + switch (items[i]){ + case "text-align": + if(column.align) + cell_style.push(style+column.align); + break; + case "vertical-align": + if(column.valign) + cell_style.push(style+column.valign); + break; + case "padding-left": + if(column.paddingLeft != undefined) + cell_style.push(style+(column.paddingLeft||'0') + "px"); + break; + case "padding-left": + if(column.paddingRight != undefined) + cell_style.push(style+(column.paddingRight||'0') + "px"); + break; + } + } + return cell_style; +}; + +scheduler.grid._fill_grid_tab = function(objName, sort){ + //get current date + var date = scheduler._date; + //select events for which data need to be printed + var events = scheduler.grid.sort_grid(sort) + + //generate html for the view + var columns = scheduler[objName].columns; + + var html = "
"; + var left = -2;//column borders at the same pos as header borders... + for(var i=0; i < columns.length; i++){ + var padding = scheduler.grid._calcPadding(columns[i], objName); + left +=columns[i].width + padding ;// + if(i < columns.length - 1) + html += "
"; + } + html += "
" + html +="
"; + + for (var i=0; i"; + + var name = scheduler.grid._getViewName(objName); + var availStyles = ["text-align", "vertical-align", "padding-left","padding-right"]; + for(var i =0; i < columns.length; i++){ + var value; + if(columns[i].template){ + value = columns[i].template(ev.start_date, ev.end_date, ev); + }else if(columns[i].id == 'date') { + value = scheduler.templates[name + '_full_date'](ev.start_date, ev.end_date, ev); + }else if(columns[i].id == 'start_date' || columns[i].id == 'end_date' ){ + value = scheduler.templates[name + '_single_date'](ev[columns[i].id]); + }else{ + value = scheduler.templates[name + '_field'](columns[i].id, ev); + } + + var cell_style = scheduler.grid._getStyles(columns[i], availStyles); + + var className = columns[i].css ? (" class=\""+columns[i].css+"\"") : ""; + + html+= ""; + + } + html+=""; + + return html; +}; + +scheduler.grid._print_grid_header = function(objName){ + var head = "
"; + + var columns = scheduler[objName].columns; + var widths = []; + + var unsized_columns = columns.length; + var avail_width = scheduler._obj.clientWidth - 2*columns.length -20;//-20 for possible scrollbar, -length for borders + for(var ind=0; ind < columns.length; ind++){ + + var val = columns[ind].initialWidth*1; + if(!isNaN(val) && columns[ind].initialWidth != '' && columns[ind].initialWidth != null && typeof columns[ind].initialWidth != 'boolean'){ + + unsized_columns--; + avail_width -= val; + widths[ind] = val; + }else { + widths[ind] = null; + } + } + + var unsized_width = Math.floor(avail_width / unsized_columns); + var availStyles = ["text-align", "padding-left","padding-right"]; + for(var i=0; i < columns.length; i++){ + var column_width = !widths[i] ? unsized_width : widths[i]; + columns[i].width = column_width - scheduler.grid._calcPadding(columns[i], objName); + var cell_style = scheduler.grid._getStyles(columns[i], availStyles); + head += "
" + (columns[i].label === undefined ? columns[i].id : columns[i].label) + "
"; + } + head +="
"; + + return head; +}; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_html_templates.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_html_templates.js similarity index 89% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_html_templates.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_html_templates.js index a5123677c38..89f6a0ca984 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_html_templates.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_html_templates.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ scheduler.attachEvent("onTemplatesReady",function(){ var els = document.body.getElementsByTagName("DIV"); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_key_nav.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_key_nav.js new file mode 100644 index 00000000000..087a71cdaec --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_key_nav.js @@ -0,0 +1,79 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +//Initial idea and implementation by Steve MC +(function (){ + +var isLightboxOpen = false; +var date; // used for copy and paste operations +var isCopy = null; + +scheduler.attachEvent("onBeforeLightbox",function(){ isLightboxOpen = true; return true; }); +scheduler.attachEvent("onAfterLightbox",function(){ isLightboxOpen = false; return true; }); + +scheduler.attachEvent("onMouseMove", function(id,e){ + date = scheduler.getActionData(e).date; +}); + +dhtmlxEvent(document,(_isOpera?"keypress":"keydown"),function(e){ + e=e||event; + if (!isLightboxOpen){ + + var scheduler = window.scheduler; + + if (e.keyCode == 37 || e.keyCode == 39) { // Left, Right arrows + e.cancelBubble = true; + + var next = scheduler.date.add(scheduler._date,(e.keyCode == 37 ? -1 : 1 ),scheduler._mode); + scheduler.setCurrentView(next); + return true; + } + + var select_id = scheduler._select_id; + if (e.ctrlKey && e.keyCode == 67) { // CTRL+C + if (select_id) { + scheduler._buffer_id = select_id; + isCopy = true; + scheduler.callEvent("onEventCopied", [scheduler.getEvent(select_id)]); + } + return true; + } + if (e.ctrlKey && e.keyCode == 88) { // CTRL+X + if (select_id) { + isCopy = false; + scheduler._buffer_id = select_id; + var ev = scheduler.getEvent(select_id); + scheduler.updateEvent(ev.id); + scheduler.callEvent("onEventCut", [ev]); + } + } + + if (e.ctrlKey && e.keyCode == 86) { // CTRL+V + var ev = scheduler.getEvent(scheduler._buffer_id); + if (ev) { + var event_duration = ev.end_date-ev.start_date; + if (isCopy) { + var new_ev = scheduler._lame_clone(ev); + new_ev.id = scheduler.uid(); + new_ev.start_date = new Date(date); + new_ev.end_date = new Date(new_ev.start_date.valueOf() + event_duration); + scheduler.addEvent(new_ev); + scheduler.callEvent("onEventPasted", [isCopy, new_ev, ev]); + } + else { // cut operation + var copy = scheduler._lame_copy({}, ev); + ev.start_date = new Date(date); + ev.end_date = new Date(ev.start_date.valueOf() + event_duration); + scheduler.render_view_data(); // need to redraw all events + + scheduler.callEvent("onEventPasted", [isCopy, ev, copy]); + isCopy = true; // switch to copy after first paste operation + } + } + return true; + } + } +}); + +})(); \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_limit.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_limit.js new file mode 100644 index 00000000000..0892024eb46 --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_limit.js @@ -0,0 +1,831 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.config.limit_start = null; +scheduler.config.limit_end = null; +scheduler.config.limit_view = false; +scheduler.config.check_limits = true; +scheduler.config.mark_now = true; +scheduler.config.display_marked_timespans = true; + +(function(){ + var before = null; + var dhx_time_block = "dhx_time_block"; + + var fix_options = function(options, days, zones) { + if (days instanceof Date && zones instanceof Date) { + options.start_date = days; + options.end_date = zones + } else { + options.days = days; + options.zones = zones; + } + return options; + }; + var get_resulting_options = function(days, zones, sections) { + var options = (typeof days == "object") ? days : { days: days }; + options.type = dhx_time_block; + options.css = ""; + if (zones) { + if (sections) + options.sections = sections; + options = fix_options(options, days, zones); + } + return options; + }; + scheduler.blockTime = function(days, zones, sections){ + var options = get_resulting_options(days, zones, sections); + return scheduler.addMarkedTimespan(options); + }; + scheduler.unblockTime = function(days, zones, sections) { + zones = zones || "fullday"; + var options = get_resulting_options(days, zones, sections); + return scheduler.deleteMarkedTimespan(options); + }; + scheduler.attachEvent("onBeforeViewChange",function(om,od,nm,nd){ + nd = nd||od; nm = nm||om; + if (scheduler.config.limit_view){ + if (nd.valueOf()>scheduler.config.limit_end.valueOf() || this.date.add(nd,1,nm)<=scheduler.config.limit_start.valueOf()){ + setTimeout(function(){ + scheduler.setCurrentView(scheduler._date, nm); + },1); + return false; + } + } + return true; + }); + var get_relevant_blocked_zones = function(day_index, day_value, zones) { + var relevant_zones = (zones[day_value] && zones[day_value][dhx_time_block]) ? zones[day_value][dhx_time_block] : + (zones[day_index] && zones[day_index][dhx_time_block]) ? zones[day_index][dhx_time_block] : []; + return relevant_zones; + }; + var blocker = function(event){ + if(!event) + return true; + if (!scheduler.config.check_limits) + return true; + var s = scheduler; + var mode = s._mode; + var timespans = scheduler._marked_timespans; + var c = s.config; + var evs = []; + if (event.rec_type) { + evs = scheduler.getRecDates(event); + } else { + evs = [event]; + } + + var res = true; + for (var p=0; p= c.limit_start.valueOf() && ev.end_date.valueOf() <= c.limit_end.valueOf()) : true; + if (res){ + var temp_start_date = new Date(ev.start_date.valueOf()); + var temp_end_date = scheduler.date.add(temp_start_date, 1, "day"); + + for (; temp_start_date < ev.end_date; temp_start_date = scheduler.date.date_part(temp_end_date), temp_end_date = s.date.add(temp_start_date, 1, "day") ) { + var day_value = +scheduler.date.date_part( new Date(temp_start_date) ); // the first part of event not necessarily contains only date part + var day_index = temp_start_date.getDay(); + + var zones = []; + if(s._props && s._props[mode]){ + var view = s._props[mode]; + var block_units = timespans[mode]; + if(block_units && block_units[ev[view.map_to]]) { + var unit_zones = block_units[ev[view.map_to]]; + var blocked_unit_zones = get_relevant_blocked_zones(day_index, day_value, unit_zones); + for (var i=0; itemp_end_date || ev.end_date.getDate() != temp_start_date.getDate() ) ? 1440 : scheduler._get_zone_minutes(ev.end_date); + + 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 ez)){ + if(ev._timed && s._drag_id && s._drag_mode == "new-size"){ + ev.end_date.setHours(0); + ev.end_date.setMinutes(sz); + } + else { + res = false; + break; + } + } + } + } + } + } + } + if (!res) { + s._drag_id = null; + s._drag_mode = null; + res = (s.checkEvent("onLimitViolation")) ? s.callEvent("onLimitViolation",[ev.id, ev]) : res; + } + } + return res; + }; + scheduler.attachEvent("onMouseDown", function(classname) { + return !(classname = dhx_time_block); + }); + scheduler.attachEvent("onBeforeDrag",function(id){ + if (!id) return true; + return blocker(scheduler.getEvent(id)); + }); + scheduler.attachEvent("onClick", function (event_id, native_event_object){ + return blocker(scheduler.getEvent(event_id)); + }); + scheduler.attachEvent("onBeforeLightbox",function(id){ + + var ev = scheduler.getEvent(id); + before = [ev.start_date, ev.end_date]; + return blocker(ev); + }); + scheduler.attachEvent("onEventSave", function(id, data, is_new_event) { + if(data.rec_type){ + var data_copy = scheduler._lame_clone(data); + scheduler._roll_back_dates(data_copy); + return blocker(data); + } + return blocker(data); + }); + scheduler.attachEvent("onEventAdded",function(id){ + if (!id) return true; + var ev = scheduler.getEvent(id); + if (!blocker(ev) && scheduler.config.limit_start && scheduler.config.limit_end) { + if (ev.start_date < scheduler.config.limit_start) { + ev.start_date = new Date(scheduler.config.limit_start); + } + 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"); + } + 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; + }); + scheduler.attachEvent("onEventChanged",function(id){ + if (!id) return true; + var ev = scheduler.getEvent(id); + if (!blocker(ev)){ + if (!before) return false; + ev.start_date = before[0]; + ev.end_date = before[1]; + ev._timed=this.is_one_day_event(ev); + } + return true; + }); + scheduler.attachEvent("onBeforeEventChanged",function(ev, native_object, is_new){ + return blocker(ev); + }); + scheduler.attachEvent("onBeforeEventCreated", function(ev) { // native event + var start_date = scheduler.getActionData(ev).date; + var event = { + _timed: true, + start_date: start_date, + end_date: scheduler.date.add(start_date, scheduler.config.time_step, "minute") + }; + return blocker(event); + }); + + scheduler.attachEvent("onViewChange", function(){ + scheduler.markNow(); + }); + scheduler.attachEvent("onSchedulerResize", function(){ + window.setTimeout(function(){ scheduler.markNow(); }, 1); + return true; + }); + scheduler.attachEvent("onTemplatesReady", function() { + scheduler._mark_now_timer = window.setInterval(function() { + scheduler.markNow(); + }, 60000); + }); + scheduler.markNow = function(hide) { + // day, week, units views + var dhx_now_time = 'dhx_now_time'; + if (!this._els[dhx_now_time]) { + this._els[dhx_now_time] = []; + } + var now = scheduler.config.now_date || new Date(); + var cfg = this.config; + scheduler._remove_mark_now(); // delete previous marks if they exist + if (!hide && cfg.mark_now && now < this._max_date && now > this._min_date && now.getHours() >= cfg.first_hour && now.getHours() config.start_date) || (config.days !== undefined && config.zones)) ) + return r_configs; // incorrect config was provided + + var min = 0; + var max = 24*60; + if (config.zones == "fullday") + config.zones = [min, max]; + if (config.zones && config.invert_zones) { + config.zones = scheduler.invertZones(config.zones); + } + + config.id = scheduler.uid(); + config.css = config.css||""; + config.type = config.type||"default"; + + var sections = config.sections; + if (sections) { + for (var view_key in sections) { + if (sections.hasOwnProperty(view_key)) { + var ids = sections[view_key]; + if (!(ids instanceof Array)) + ids = [ids]; + for (var i=0; i t_sd) ? scheduler._get_zone_minutes(start_date) : min; + var zone_end = ( end_date>t_ed || end_date.getDate() != t_sd.getDate() ) ? max : scheduler._get_zone_minutes(end_date); + t_config.zones = [zone_start, zone_end]; + r_configs.push(t_config); + + t_sd = t_ed; + t_ed = scheduler.date.add(t_ed, 1, "day"); + } + } else { + if (c_config.days instanceof Date) + c_config.days = (scheduler.date.date_part(c_config.days)).valueOf(); + c_config.zones = config.zones.slice(); + r_configs.push(c_config); + } + } + return r_configs; + }; + scheduler._get_dates_by_index = function(index, start, end) { + var dates = []; + start = start||scheduler._min_date; + end = end||scheduler._max_date; + var start_day = start.getDay(); + var delta = (index-start_day >= 0) ? (index-start_day) : (7-start.getDay()+index); + var t_date = scheduler.date.add(start, delta, "day"); + for (; t_date < end; t_date = scheduler.date.add(t_date, 1, "week")) { + dates.push(t_date); + } + return dates; + }; + scheduler._get_css_classes_by_config = function(config) { + var css_classes = []; + if (config.type == dhx_time_block) { + css_classes.push(dhx_time_block); + if (config.css) + css_classes.push(dhx_time_block+"_reset"); + } + css_classes.push("dhx_marked_timespan", config.css); + return css_classes.join(" "); + }; + scheduler._get_block_by_config = function(config) { + var block = document.createElement("DIV"); + if (config.html) { + if (typeof config.html == "string") + block.innerHTML = config.html; + else + block.appendChild(config.html); + } + return block; + }; + scheduler._render_marked_timespan = function(options, area, day) { + var blocks = []; // resulting block which will be rendered and returned + var c = scheduler.config; + var min_date = this._min_date; + var max_date = this._max_date; + var day_value = false; // if timespan for specific date should be displayed + + if (!c.display_marked_timespans) + return blocks; + + if (!day && day !== 0) { // in case of markTimespan + if (options.days < 7) + day = options.days; + else { + var date_to_display = new Date(options.days); + day_value = +date_to_display; + + // in case of markTimespan date could be not in the viewing range, need to return + if ( !(+max_date >= +date_to_display && +min_date <= +date_to_display) ) + return blocks; + + var day_index = date_to_display.getDay(); + if (scheduler.config.start_on_monday) { + day = (day_index == 0) ? 6 : day_index-1; + } else + day = day_index; + } + } + var zones = options.zones; + var css_classes = scheduler._get_css_classes_by_config(options); + + if (scheduler._table_view && scheduler._mode == "month") { + var areas = []; + var days = []; + + + if (!area) { + days = (day_value) ? [day_value] : scheduler._get_dates_by_index(day); + for (var i=0; i < days.length; i++) { + areas.push( this._scales[days[i]] ); + } + } else { + areas.push(area); + days.push(day); + } + + for (var i=0; i < areas.length; i++) { + area = areas[i]; + day = days[i]; + + for (var k=0; k < zones.length; k+=2) { + var start = zones[i]; + var end = zones[i+1]; + if (end <= start) + return []; + + var block = scheduler._get_block_by_config(options); + block.className = css_classes; + + var height = area.offsetHeight - 1; // 1 for bottom border + var width = area.offsetWidth - 1; // 1 for left border + + var sweek = Math.floor((this._correct_shift(day,1)-min_date.valueOf())/(60*60*1000*24*this._cols.length)); + var sday = this.locate_holder_day(day, false) % this._cols.length; + + var left = this._colsS[sday]; + var top = this._colsS.heights[sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)-1; + + block.style.top = top + "px"; + block.style.lineHeight = block.style.height = height + "px"; + + block.style.left = (left + Math.round( (start)/(24*60) * width)) + "px"; + block.style.width = Math.round( (end-start)/(24*60) * width) + "px"; + + area.appendChild(block); + blocks.push(block); + } + } + } else { + area = area ? area : scheduler.locate_holder(day); + + for (var i = 0; i < zones.length; i+=2){ + var start = Math.max(zones[i], c.first_hour*60); + var end = Math.min(zones[i+1], c.last_hour*60); + if (end <= start) + return []; + + var block = scheduler._get_block_by_config(options); + block.className = css_classes; + + 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.lineHeight = block.style.height = Math.max((Math.round(((end-start-1)*60*1000)*this.config.hour_size_px/(60*60*1000)))%(this.config.hour_size_px*24), 1)+"px"; + + area.appendChild(block); + blocks.push(block); + } + } + + return blocks; + }; + // just marks timespan, will be cleaned after refresh + scheduler.markTimespan = function(configuration) { + var configs = scheduler._prepare_timespan_options(configuration); + if (!configs.length) + return; + var divs = []; + for (var i=0; i c_zone_end && zone_start <= c_zone_end) || (zone_start < c_zone_start && zone_end >= c_zone_start)) { + resulting_zones[i] = Math.min(c_zone_start, zone_start); + resulting_zones[i+1] = Math.max(c_zone_end, zone_end); + i -= 2; + } else { + if (!isLast) // do nothing, maybe next current zone will match or will be last + continue; + + var offset = (c_zone_start > zone_start)?0:2; + resulting_zones.splice(i+offset, 0, zone_start, zone_end); // last current zone, need to add another + } + zones.splice(k--,2); // zone was merged or added, need to exclude it + break; + } + } + return resulting_zones; + }; + scheduler._subtract_timespan_zones = function(current_zones, zones) { + var resulting_zones = current_zones.slice(); + for (var i=0; i c_zone_start && zone_start < c_zone_end) { + var is_modified = false; + if (c_zone_start >= zone_start && c_zone_end <= zone_end) { + resulting_zones.splice(i, 2); + } + if (c_zone_start < zone_start) { + resulting_zones.splice(i, 2, c_zone_start, zone_start); + is_modified = true; + } + if (c_zone_end > zone_end) { + resulting_zones.splice( (is_modified)?(i+2):i, (is_modified)?0:2, zone_end, c_zone_end); + } + i -= 2; + break; + } else { + continue; + } + } + } + return resulting_zones; + }; + scheduler.invertZones = function(zones) { + return scheduler._subtract_timespan_zones([0, 1440], zones.slice()); + }; + scheduler._delete_marked_timespan_by_id = function(id) { + var configs = scheduler._marked_timespans_ids[id]; + if (configs) { + for (var i=0; i
" + l.date + "
" + l.description + "
"; + scheduler._els["dhx_cal_header"][0].innerHTML = "
" + l.date + "
" + l.description + "
"; scheduler._table_view = true; scheduler.set_sizes(); } @@ -191,11 +191,14 @@ scheduler.attachEvent("onSchedulerReady", function() { 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]; + var markers = scheduler.map._markers; + for (var key in markers) { + if (markers.hasOwnProperty(key)) { + markers[key].setMap(null); + delete scheduler.map._markers[key]; + if (scheduler.map._infowindows_content[key]) + delete scheduler.map._infowindows_content[key]; + } } } @@ -203,20 +206,9 @@ scheduler.attachEvent("onSchedulerReady", function() { //select events for which data need to be printed var events = scheduler.get_visible_events(); 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; + 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; }); //generate html for the view @@ -224,7 +216,7 @@ scheduler.attachEvent("onSchedulerReady", function() { 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 bg_color = (ev.color ? ("background:" + ev.color + ";") : ""); var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); html += "
" + scheduler.templates.map_time(ev.start_date, ev.end_date, ev) + "
"; html += "
 
"; @@ -244,7 +236,6 @@ scheduler.attachEvent("onSchedulerReady", function() { for (var i = 0; i < t.length - 2; i++) { scheduler._rendered[i] = t[i]; } - } function _setMapSize(elem_id) { //input - map's div id @@ -267,7 +258,7 @@ scheduler.attachEvent("onSchedulerReady", function() { 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._max_date = scheduler.config.map_end || scheduler.date.add(new Date(), 1, "year"); scheduler._table_view = true; set_full_view(mode); @@ -358,29 +349,29 @@ scheduler.attachEvent("onSchedulerReady", function() { var _displayEventOnMap = function(event) { if (event.event_location && geocoder) { geocoder.geocode( - { - 'address': event.event_location, - 'language': scheduler.uid().toString() - }, - function(results, status) { - var point = {}; - if (status != google.maps.GeocoderStatus.OK) { - point = scheduler.callEvent("onLocationError", [event.id]); - if (!point || point === true) - point = scheduler.config.map_error_position; - } else { - point = results[0].geometry.location; - } - event.lat = point.lat(); - event.lng = point.lng(); - - scheduler._selected_event_id = event.id; - - scheduler._latLngUpdate = true; - scheduler.callEvent("onEventChanged", [event.id, event]); - showAddress(event, true, true); + { + 'address': event.event_location, + 'language': scheduler.uid().toString() + }, + function(results, status) { + var point = {}; + if (status != google.maps.GeocoderStatus.OK) { + point = scheduler.callEvent("onLocationError", [event.id]); + if (!point || point === true) + point = scheduler.config.map_error_position; + } else { + point = results[0].geometry.location; } - ); + event.lat = point.lat(); + event.lng = point.lng(); + + scheduler._selected_event_id = event.id; + + scheduler._latLngUpdate = true; + scheduler.callEvent("onEventChanged", [event.id, event]); + showAddress(event, true, true); + } + ); } else { showAddress(event, true, true); } @@ -389,32 +380,32 @@ scheduler.attachEvent("onSchedulerReady", function() { var _updateEventLocation = function(event) { // update lat and lng in database if (event.event_location && geocoder) { geocoder.geocode( - { - 'address': event.event_location, - 'language': scheduler.uid().toString() - }, - function(results, status) { - var point = {}; - if (status != google.maps.GeocoderStatus.OK) { - point = scheduler.callEvent("onLocationError", [event.id]); - if (!point || point === true) - point = scheduler.config.map_error_position; - } else { - point = results[0].geometry.location; - } - event.lat = point.lat(); - event.lng = point.lng(); - scheduler._latLngUpdate = true; - scheduler.callEvent("onEventChanged", [event.id, event]); + { + 'address': event.event_location, + 'language': scheduler.uid().toString() + }, + function(results, status) { + var point = {}; + if (status != google.maps.GeocoderStatus.OK) { + point = scheduler.callEvent("onLocationError", [event.id]); + if (!point || point === true) + point = scheduler.config.map_error_position; + } else { + point = results[0].geometry.location; } - ); + event.lat = point.lat(); + event.lng = point.lng(); + scheduler._latLngUpdate = true; + scheduler.callEvent("onEventChanged", [event.id, event]); + } + ); } }; var _delay = function(method, object, params, delay) { setTimeout(function() { var ret = method.apply(object, params); - method = obj = params = null; + method = object = params = null; return ret; }, delay || 1); }; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_minical.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_minical.js new file mode 100644 index 00000000000..595af055fce --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_minical.js @@ -0,0 +1,435 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-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"); +scheduler.config.minicalendar = { + mark_events: true +}; +scheduler._synced_minicalendars = []; +scheduler.renderCalendar = function(obj, _prev, is_refresh) { + var cal = null; + var date = obj.date || (new Date()); + if (typeof date == "string") + date = this.templates.api_date(date); + + if (!_prev) { + var cont = obj.container; + var pos = obj.position; + + if (typeof cont == "string") + cont = document.getElementById(cont); + + if (typeof pos == "string") + pos = document.getElementById(pos); + if (pos && (typeof pos.left == "undefined")) { + var tpos = getOffset(pos); + pos = { + top: tpos.top + pos.offsetHeight, + left: tpos.left + }; + } + if (!cont) + cont = scheduler._get_def_cont(pos); + + cal = this._render_calendar(cont, date, obj); + cal.onclick = function(e) { + e = e || event; + var src = e.target || e.srcElement; + + if (src.className.indexOf("dhx_month_head") != -1) { + var pname = src.parentNode.className; + if (pname.indexOf("dhx_after") == -1 && pname.indexOf("dhx_before") == -1) { + var newdate = scheduler.templates.xml_date(this.getAttribute("date")); + newdate.setDate(parseInt(src.innerHTML, 10)); + scheduler.unmarkCalendar(this); + scheduler.markCalendar(this, newdate, "dhx_calendar_click"); + this._last_date = newdate; + if (this.conf.handler) this.conf.handler.call(scheduler, newdate, this); + } + } + }; + } else { + cal = this._render_calendar(_prev.parentNode, date, obj, _prev); + scheduler.unmarkCalendar(cal); + } + + if (scheduler.config.minicalendar.mark_events) { + var start = scheduler.date.month_start(date); + var end = scheduler.date.add(start, 1, "month"); + var evs = this.getEvents(start, end); + var filter = this["filter_" + this._mode]; + for (var i = 0; i < evs.length; i++) { + var ev = evs[i]; + if (filter && !filter(ev.id, ev)) + continue; + var d = ev.start_date; + if (d.valueOf() < start.valueOf()) + d = start; + d = scheduler.date.date_part(new Date(d.valueOf())); + while (d < ev.end_date) { + this.markCalendar(cal, d, "dhx_year_event"); + d = this.date.add(d, 1, "day"); + if (d.valueOf() >= end.valueOf()) + break; + } + } + } + + this._markCalendarCurrentDate(cal); + + cal.conf = obj; + if (obj.sync && !is_refresh) + this._synced_minicalendars.push(cal); + + return cal; +}; +scheduler._get_def_cont = function(pos) { + if (!this._def_count) { + this._def_count = document.createElement("DIV"); + this._def_count.className = "dhx_minical_popup"; + this._def_count.onclick = function(e) { (e || event).cancelBubble = true; }; + document.body.appendChild(this._def_count); + } + + this._def_count.style.left = pos.left + "px"; + this._def_count.style.top = pos.top + "px"; + this._def_count._created = new Date(); + + return this._def_count; +}; +scheduler._locateCalendar = function(cal, date) { + var table = cal.childNodes[2].childNodes[0]; + if (typeof date == "string") + date = scheduler.templates.api_date(date); + + var d = cal.week_start + date.getDate() - 1; + return table.rows[Math.floor(d / 7)].cells[d % 7].firstChild; +}; +scheduler.markCalendar = function(cal, date, css) { + this._locateCalendar(cal, date).className += " " + css; +}; +scheduler.unmarkCalendar = function(cal, date, css) { + date = date || cal._last_date; + css = css || "dhx_calendar_click"; + if (!date) return; + var el = this._locateCalendar(cal, date); + el.className = (el.className || "").replace(RegExp(css, "g")); +}; +scheduler._week_template = function(width) { + var summ = (width || 250); + 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"; + return week_template; +}; +scheduler.updateCalendar = function(obj, sd) { + obj.conf.date = sd; + this.renderCalendar(obj.conf, obj, true); +}; +scheduler._mini_cal_arrows = [" ", " "]; +scheduler._render_calendar = function(obj, sd, conf, previous) { + /*store*/ + var ts = scheduler.templates; + var temp = this._cols; + this._cols = []; + var temp2 = this._mode; + this._mode = "calendar"; + var temp3 = this._colsS; + this._colsS = {height: 0}; + var temp4 = new Date(this._min_date); + var temp5 = new Date(this._max_date); + var temp6 = new Date(scheduler._date); + var temp7 = ts.month_day; + ts.month_day = ts.calendar_date; + + sd = this.date.month_start(sd); + var week_template = this._week_template(obj.offsetWidth - 1); + + var d; + if (previous) + d = previous; else { + d = document.createElement("DIV"); + d.className = "dhx_cal_container dhx_mini_calendar"; + } + d.setAttribute("date", this.templates.xml_format(sd)); + d.innerHTML = "
" + week_template.innerHTML + "
"; + + d.childNodes[0].innerHTML = this.templates.calendar_month(sd); + if (conf.navigation) { + var move_minicalendar_date = function(calendar, diff) { + var date = scheduler.date.add(calendar._date, diff, "month"); + scheduler.updateCalendar(calendar, date); + if (scheduler._date.getMonth() == calendar._date.getMonth() && scheduler._date.getFullYear() == calendar._date.getFullYear()) { + scheduler._markCalendarCurrentDate(calendar); + } + }; + + var css_classnames = ["dhx_cal_prev_button", "dhx_cal_next_button"]; + var css_texts = ["left:1px;top:2px;position:absolute;", "left:auto; right:1px;top:2px;position:absolute;"]; + var diffs = [-1, 1]; + var handler = function(diff) { + return function() { + if (conf.sync) { + var calendars = scheduler._synced_minicalendars; + for (var k = 0; k < calendars.length; k++) { + move_minicalendar_date(calendars[k], diff); + } + } else { + move_minicalendar_date(d, diff); + } + } + }; + for (var j = 0; j < 2; j++) { + var arrow = document.createElement("DIV"); + //var diff = diffs[j]; + arrow.className = css_classnames[j]; + arrow.style.cssText = css_texts[j]; + arrow.innerHTML = this._mini_cal_arrows[j]; + d.firstChild.appendChild(arrow); + arrow.onclick = handler(diffs[j]) + } + } + 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); + this._reset_month_scale(d.childNodes[2], sd, dd); + + var r = d.childNodes[2].firstChild.rows; + for (var k = r.length; k < 6; k++) { + 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; +}; +scheduler.destroyCalendar = function(cal, force) { + if (!cal && this._def_count && this._def_count.firstChild) { + if (force || (new Date()).valueOf() - this._def_count._created.valueOf() > 500) + cal = this._def_count.firstChild; + } + if (!cal) return; + cal.onclick = null; + cal.innerHTML = ""; + if (cal.parentNode) + cal.parentNode.removeChild(cal); + if (this._def_count) + this._def_count.style.top = "-1000px"; +}; +scheduler.isCalendarVisible = function() { + if (this._def_count && parseInt(this._def_count.style.top, 10) > 0) + return this._def_count; + return false; +}; +scheduler.attachEvent("onTemplatesReady", function() { + dhtmlxEvent(document.body, "click", function() { scheduler.destroyCalendar(); }); +}); + +scheduler.templates.calendar_time = scheduler.date.date_to_str("%d-%m-%Y"); + +scheduler.form_blocks.calendar_time = { + render: function() { + var html = ""; + + var cfg = scheduler.config; + var dt = this.date.date_part(new Date()); + + var last = 24 * 60, first = 0; + if (cfg.limit_time_select) { + first = 60 * cfg.first_hour; + last = 60 * cfg.last_hour + 1; // to include "17:00" option if time select is limited + } + dt.setHours(first / 60); + + html += " "; + + var full_day = scheduler.config.full_day; + + return "
" + html + "  –  " + html + "
"; + }, + set_value: function(node, value, ev) { + + var inputs = node.getElementsByTagName("input"); + var selects = node.getElementsByTagName("select"); + + var _init_once = function(inp, date, number) { + inp.onclick = function() { + scheduler.destroyCalendar(null, true); + scheduler.renderCalendar({ + position: inp, + date: new Date(this._date), + navigation: true, + handler: function(new_date) { + inp.value = scheduler.templates.calendar_time(new_date); + inp._date = new Date(new_date); + scheduler.destroyCalendar(); + if (scheduler.config.event_duration && scheduler.config.auto_end_date && number == 0) { //first element = start date + _update_minical_select(); + } + } + }); + }; + }; + + if (scheduler.config.full_day) { + if (!node._full_day) { + 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); + input.checked = isFulldayEvent; + + selects[0].disabled = input.checked; + selects[1].disabled = input.checked; + + input.onclick = function() { + if (input.checked == true) { + var obj = {}; + scheduler.form_blocks.calendar_time.get_value(node, obj); + + var start_date = scheduler.date.date_part(obj.start_date); + var end_date = scheduler.date.date_part(obj.end_date); + + if (+end_date == +start_date || (+end_date >= +start_date && (ev.end_date.getHours() != 0 || ev.end_date.getMinutes() != 0))) + end_date = scheduler.date.add(end_date, 1, "day"); + } + + var start = start_date || ev.start_date; + var end = end_date || ev.end_date; + _attach_action(inputs[0], start); + _attach_action(inputs[1], end); + selects[0].value = start.getHours() * 60 + start.getMinutes(); + selects[1].value = end.getHours() * 60 + end.getMinutes(); + + selects[0].disabled = input.checked; + selects[1].disabled = input.checked; + + }; + } + + if (scheduler.config.event_duration && scheduler.config.auto_end_date) { + + function _update_minical_select() { + start_date = scheduler.date.add(inputs[0]._date, selects[0].value, "minute"); + end_date = new Date(start_date.getTime() + (scheduler.config.event_duration * 60 * 1000)); + + inputs[1].value = scheduler.templates.calendar_time(end_date); + inputs[1]._date = scheduler.date.date_part(new Date(end_date)); + + selects[1].value = end_date.getHours() * 60 + end_date.getMinutes(); + } + + selects[0].onchange = _update_minical_select; // only update on first select should trigger update so user could define other end date if he wishes too + } + + function _attach_action(inp, date, number) { + _init_once(inp, date, number); + inp.value = scheduler.templates.calendar_time(date); + inp._date = scheduler.date.date_part(new Date(date)); + } + + _attach_action(inputs[0], ev.start_date, 0); + _attach_action(inputs[1], ev.end_date, 1); + _init_once = function() {}; + + selects[0].value = ev.start_date.getHours() * 60 + ev.start_date.getMinutes(); + selects[1].value = ev.end_date.getHours() * 60 + ev.end_date.getMinutes(); + + }, + get_value: function(node, ev) { + var inputs = node.getElementsByTagName("input"); + var selects = node.getElementsByTagName("select"); + + ev.start_date = scheduler.date.add(inputs[0]._date, selects[0].value, "minute"); + ev.end_date = scheduler.date.add(inputs[1]._date, selects[1].value, "minute"); + + if (ev.end_date <= ev.start_date) + ev.end_date = scheduler.date.add(ev.start_date, scheduler.config.time_step, "minute"); + }, + focus: function(node) { + } +}; +scheduler.linkCalendar = function(calendar, datediff) { + var action = function() { + var date = scheduler._date; + var dateNew = new Date(date.valueOf()); + if (datediff) dateNew = datediff(dateNew); + dateNew.setDate(1); + scheduler.updateCalendar(calendar, dateNew); + return true; + }; + + scheduler.attachEvent("onViewChange", action); + scheduler.attachEvent("onXLE", action); + scheduler.attachEvent("onEventAdded", action); + scheduler.attachEvent("onEventChanged", action); + scheduler.attachEvent("onAfterEventDelete", action); + action(); +}; + +scheduler._markCalendarCurrentDate = function(calendar) { + var date = scheduler._date; + var mode = scheduler._mode; + var month_start = scheduler.date.month_start(new Date(calendar._date)); + var month_end = scheduler.date.add(month_start, 1, "month"); + + if (mode == 'day' || (this._props && !!this._props[mode])) { // if day or units view + if (month_start.valueOf() <= date.valueOf() && month_end > date) { + 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++) { + if (month_start.valueOf() <= dateNew.valueOf() && month_end > dateNew) // >= would mean mark first day of the next month + scheduler.markCalendar(calendar, dateNew, "dhx_calendar_click"); + dateNew = scheduler.date.add(dateNew, 1, "day"); + } + } +}; + +scheduler.attachEvent("onEventCancel", function(){ + scheduler.destroyCalendar(null, true); +}); \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_multiselect.js similarity index 58% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_multiselect.js index 2890d0180a6..ccf9b911900 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_multiselect.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ scheduler.form_blocks["multiselect"]={ render:function(sns) { @@ -25,31 +25,30 @@ scheduler.form_blocks["multiselect"]={ _children[i].checked = !! ids[_children[i].value]; } } - - if(!scheduler._new_event) { // if it is a new event - new to get saved options - var _ids = []; - if(ev[config.map_to]) { - var results = ev[config.map_to].split(','); - for(var i=0;i]*>","g"); + newline_regexp = new RegExp("]*>","g"); + function clean_html(val){ + return val.replace(newline_regexp, "\n").replace(html_regexp,""); + } + function x_norm(x) { + x = parseFloat(x); + if (isNaN(x)) return "auto"; + return 100 * x / (dx + 1); + } + function y_norm(y) { + y = parseFloat(y); + if (isNaN(y)) return "auto"; + return 100 * y / dy; + } + function xml_month_scale(xh){ + var xml=""; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + if (scheduler.matrix[scheduler._mode].second_scale) + var xhs = xh[1].childNodes; + + xh = xh[0].childNodes; + } + + + for (var i = 0; i < xh.length; i++) + xml += "\n"; + dx = xh[0].offsetWidth; + + if (xhs) { + var width = 0; + var top_width = xh[0].offsetWidth; + var top_col = 1; + for (var i = 0; i < xhs.length; i++) { + xml += "\n"; + width+=xhs[i].offsetWidth; + if (width>=top_width){ + top_width+=(xh[top_col] ? xh[top_col].offsetWidth: 0); + top_col++; + } + dx = xhs[0].offsetWidth; + } + } + return xml; + } + function de_day(node,n){ + var x = parseInt(node.style.left,10); + + for (var dx=0; dx < scheduler._cols.length; dx++){ + x-=scheduler._cols[dx]; + if (x<0) return dx; + } + return n; + } + function de_week(node,n){ + var y = parseInt(node.style.top,10); + for (var dy=0; dy < scheduler._colsS.heights.length; dy++) + if (scheduler._colsS.heights[dy]>y) return dy; + return n; + } + function xml_month(yh){ + var xml=""; + var r = yh.firstChild.rows; + for (var i = 0; i < r.length; i++) { + var days = []; + for (var j = 0; j < r[i].cells.length; j++){ + /* var dd = r[i].cells[j]; + var css = dd.className; + + if (css!=" " && css!="dhx_now ") + days.push(""); + else*/ + days.push(r[i].cells[j].firstChild.innerHTML); + } + + xml += "\n"; + dy = yh.firstChild.rows[0].cells[0].offsetHeight; + } + return xml; + } + function xml_top(profile) { + var xml = ""; + + if (scheduler._mode == "week_agenda"){ + var xh = scheduler._els.dhx_cal_data[0].getElementsByTagName("DIV"); + for (var i=0; i"; + } else if (scheduler._mode == "agenda" || scheduler._mode == "map"){ + var xh = scheduler._els.dhx_cal_header[0].childNodes[0].childNodes; + + 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_month_scale(xh[i].childNodes[1].childNodes); + xml+=xml_month(xh[i].childNodes[2]); + xml+=""; + } + } else { + xml += ""; + var xh = scheduler._els.dhx_cal_header[0].childNodes; + xml+=xml_month_scale(xh); + xml += ""; + + var yh = scheduler._els.dhx_cal_data[0]; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + xml += ""; + for (var i=0; i < yh.firstChild.rows.length; i++) { + var el = yh.firstChild.rows[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]; + while (yh.className.indexOf("dhx_scale_holder") == -1) + yh = yh.previousSibling; + yh = yh.childNodes; + + xml += ""; + for (var i = 0; i < yh.length; i++) + xml += "\n"; + xml += ""; + dy = yh[0].offsetHeight; + } + } + xml += ""; + return xml; + } + function get_style(node, style){ + return (window.getComputedStyle?(window.getComputedStyle(node, null)[style]):(node.currentStyle?node.currentStyle[style]:null))||""; + } + function xml_body() { + var xml = ""; + var evs = scheduler._rendered; + if (scheduler._mode == "agenda" || scheduler._mode == "map"){ + for (var i=0; i < evs.length; i++) + xml+=""+clean_html(evs[i].childNodes[0].innerHTML)+""+clean_html(evs[i].childNodes[2].innerHTML)+""; + } else if (scheduler._mode == "week_agenda"){ + for (var i=0; i < evs.length; i++) + xml+=""+clean_html(evs[i].innerHTML)+""; + } else if (scheduler._mode == "year"){ + var evs = scheduler.get_visible_events(); + for (var i=0; i < evs.length; i++) { + var d = evs[i].start_date; + if (d.valueOf()"; + d = scheduler.date.add(d,1,"day"); + if (d.valueOf()>=scheduler._max_date.valueOf()) + break; + } + } + } else { + var matrix = scheduler.matrix && scheduler.matrix[scheduler._mode]; + if (matrix && matrix.render == "cell"){ + var evs = scheduler._els.dhx_cal_data[0].getElementsByTagName("TD"); + for (var i = 0; i < evs.length; i++){ + var text_color = colors?get_style(evs[i],"color"):""; + var bg_color = colors?get_style(evs[i],"backgroundColor"):""; + xml += "\n"; + } + } else { + for (var i = 0; i < evs.length; i++) { + var zx = x_norm(evs[i].style.left); + var zdx = x_norm(evs[i].style.width); + if (isNaN(zdx*1)) continue; + 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_", ""); + if (e_type === 'dhx_tooltip_line') continue; + var dets = scheduler.getEvent(evs[i].getAttribute("event_id")); +// if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue; + var day = dets._sday; + var week = dets._sweek; + var length = dets._length || 0; + if (scheduler._mode != "month") { + if (scheduler.matrix && scheduler.matrix[scheduler._mode]){ + day = 0; + var el = evs[i].parentNode.parentNode.parentNode; + week = el.rowIndex; + zdx += x_norm(10); + } else { + + if (scheduler.xy.menu_width){ + zdx+=x_norm(zdx*20/100); + zx-=x_norm(15-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.matrix && scheduler.matrix[scheduler._mode]) { + var dy_copy = dy; + dy = evs[i].parentNode.offsetHeight; + zy = y_norm(evs[i].style.top); + zy -= zy*0.2; + dy = dy_copy; + } + } else { + zdy = parseInt(evs[i].offsetHeight,10); + zy = parseInt(evs[i].style.top,10) - 22; + + day = de_day(evs[i],day); + week = de_week(evs[i],week); + } + + xml += "\n"; + + + if (e_type == "event") { + xml += "
"; + var text_color = colors?get_style(evs[i].childNodes[2],"color"):""; + var bg_color = colors?get_style(evs[i].childNodes[2],"backgroundColor"):""; + xml += ""; + } else { + var text_color = colors?get_style(evs[i],"color"):""; + var bg_color = colors?get_style(evs[i],"backgroundColor"):""; + xml += ""; + } + xml += "
"; + } + } + } + return xml; + } + function xml_end(){ + var xml = "
"; + return xml; + } + + var uid = (new Date()).valueOf(); + var d=document.createElement("div"); + d.style.display="none"; + document.body.appendChild(d); + + d.innerHTML = '
'; + document.getElementById(uid).firstChild.value = encodeURIComponent(xml_top(mode).replace("\u2013", "-") + xml_body() + xml_end()); + document.getElementById(uid).submit(); + d.parentNode.removeChild(d);grid = null; +}; \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_readonly.js similarity index 59% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_readonly.js index 9bd1df9d859..df888122424 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_readonly.js @@ -1,20 +1,69 @@ /* 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 */ scheduler.attachEvent("onTemplatesReady", function() { + var original_sns = scheduler.config.lightbox.sections; + var recurring_section = null; + var original_left_buttons = scheduler.config.buttons_left.slice(); + var original_right_buttons = scheduler.config.buttons_right.slice(); + + scheduler.attachEvent("onBeforeLightbox", function(id) { - if (this.config.readonly_form || this.getEvent(id).readonly) + if (this.config.readonly_form || this.getEvent(id).readonly) { this.config.readonly_active = true; + + for (var i = 0; i < this.config.lightbox.sections.length; i++) { + this.config.lightbox.sections[i].focus = false; + } + } else { this.config.readonly_active = false; - return true; + scheduler.config.buttons_left = original_left_buttons.slice(); + scheduler.config.buttons_right = original_right_buttons.slice(); } - for (var i = 0; i < this.config.lightbox.sections.length; i++) { - this.config.lightbox.sections[i].focus = false; + var sns = this.config.lightbox.sections; + if (this.config.readonly_active) { + var is_rec_found = false; + for (var i = 0; i < sns.length; i++) { + if (sns[i].type == 'recurring') { + recurring_section = sns[i]; + if (this.config.readonly_active) { + sns.splice(i, 1); + } + break; + } + } + if (!is_rec_found && !this.config.readonly_active && recurring_section) { + // need to restore restore section + sns.splice(sns.length-2,0,recurring_section); + } + + var forbidden_buttons = ["dhx_delete_btn", "dhx_save_btn"]; + var button_arrays = [scheduler.config.buttons_left, scheduler.config.buttons_right]; + for (var i = 0; i < forbidden_buttons.length; i++) { + var forbidden_button = forbidden_buttons[i]; + for (var k = 0; k < button_arrays.length; k++) { + var button_array = button_arrays[k]; + var index = -1; + for (var p = 0; p < button_array.length; p++) { + if (button_array[p] == forbidden_button) { + index = p; + break; + } + } + if (index != -1) { + button_array.splice(index, 1); + } + } + } + + } + this.resetLightbox(); + return true; }); @@ -37,26 +86,13 @@ scheduler.attachEvent("onTemplatesReady", function() { 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 d = this.getLightbox(); 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; @@ -66,9 +102,6 @@ scheduler.attachEvent("onTemplatesReady", function() { 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); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_recurring.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_recurring.js new file mode 100644 index 00000000000..998fe8bedd2 --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_recurring.js @@ -0,0 +1,750 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ + +scheduler.config.occurrence_timestamp_in_utc = false; +scheduler.form_blocks["recurring"] = { + render:function(sns) { + return scheduler.__recurring_template; + }, + _ds: {}, + _init_set_value:function(node, value, ev) { + scheduler.form_blocks["recurring"]._ds = {start:ev.start_date, end:ev._end_date}; + + var str_date_format = scheduler.date.str_to_date(scheduler.config.repeat_date); + var str_date = function(str_date) { + var date = str_date_format(str_date); + if (scheduler.config.include_end_by) + date = scheduler.date.add(date, 1, 'day'); + return date; + }; + + var date_str = scheduler.date.date_to_str(scheduler.config.repeat_date); + + var top = node.getElementsByTagName("FORM")[0]; + var els = []; + + function register_els(inps) { + for (var i = 0; i < inps.length; i++) { + var inp = inps[i]; + if (inp.type == "checkbox" || inp.type == "radio") { + if (!els[inp.name]) + els[inp.name] = []; + els[inp.name].push(inp); + } else + els[inp.name] = inp; + } + } + + register_els(top.getElementsByTagName("INPUT")); + register_els(top.getElementsByTagName("SELECT")); + + if (!scheduler.config.repeat_date_of_end) { + var formatter = scheduler.date.date_to_str(scheduler.config.repeat_date); + scheduler.config.repeat_date_of_end = formatter(scheduler.date.add(new Date(), 30, "day")); + } + els["date_of_end"].value = scheduler.config.repeat_date_of_end; + + var $ = function(a) { + return document.getElementById(a); + }; + + function get_radio_value(name) { + var col = els[name]; + for (var i = 0; i < col.length; i++) + if (col[i].checked) return col[i].value; + } + + function change_current_view() { + $("dhx_repeat_day").style.display = "none"; + $("dhx_repeat_week").style.display = "none"; + $("dhx_repeat_month").style.display = "none"; + $("dhx_repeat_year").style.display = "none"; + $("dhx_repeat_" + this.value).style.display = "block"; + } + + function get_repeat_code(dates) { + var code = [get_radio_value("repeat")]; + get_rcode[code[0]](code, dates); + + while (code.length < 5) code.push(""); + var repeat = ""; + if (els["end"][0].checked) { + dates.end = new Date(9999, 1, 1); + repeat = "no"; + } + else if (els["end"][2].checked) { + dates.end = str_date(els["date_of_end"].value); + } + else { + scheduler.transpose_type(code.join("_")); + repeat = Math.max(1, els["occurences_count"].value); + var transp = ((code[0] == "week" && code[4] && code[4].toString().indexOf(scheduler.config.start_on_monday ? 1 : 0) == -1) ? 1 : 0); + dates.end = scheduler.date.add(new Date(dates.start), repeat + transp, code.join("_")); + } + + return code.join("_") + "#" + repeat; + } + + scheduler.form_blocks["recurring"]._get_repeat_code = get_repeat_code; + var get_rcode = { + month:function(code, dates) { + if (get_radio_value("month_type") == "d") { + code.push(Math.max(1, els["month_count"].value)); + dates.start.setDate(els["month_day"].value); + } else { + code.push(Math.max(1, els["month_count2"].value)); + code.push(els["month_day2"].value); + code.push(Math.max(1, els["month_week2"].value)); + dates.start.setDate(1); + } + dates._start = true; + }, + week:function(code, dates) { + code.push(Math.max(1, els["week_count"].value)); + code.push(""); + code.push(""); + var t = []; + var col = els["week_day"]; + for (var i = 0; i < col.length; i++) { + if (col[i].checked) t.push(col[i].value); + } + if (!t.length) + t.push(dates.start.getDay()); + + dates.start = scheduler.date.week_start(dates.start); + dates._start = true; + + code.push(t.sort().join(",")); + }, + day:function(code) { + if (get_radio_value("day_type") == "d") { + code.push(Math.max(1, els["day_count"].value)); + } + else { + code.push("week"); + code.push(1); + code.push(""); + code.push(""); + code.push("1,2,3,4,5"); + code.splice(0, 1); + } + }, + year:function(code, dates) { + if (get_radio_value("year_type") == "d") { + code.push("1"); + dates.start.setMonth(0); + dates.start.setDate(els["year_day"].value); + dates.start.setMonth(els["year_month"].value); + + } else { + code.push("1"); + code.push(els["year_day2"].value); + code.push(els["year_week2"].value); + dates.start.setDate(1); + dates.start.setMonth(els["year_month2"].value); + } + dates._start = true; + } + }; + var set_rcode = { + week:function(code, dates) { + els["week_count"].value = code[1]; + var col = els["week_day"]; + var t = code[4].split(","); + var d = {}; + for (var i = 0; i < t.length; i++) d[t[i]] = true; + for (var i = 0; i < col.length; i++) + col[i].checked = (!!d[col[i].value]); + }, + month:function(code, dates) { + if (code[2] == "") { + els["month_type"][0].checked = true; + els["month_count"].value = code[1]; + els["month_day"].value = dates.start.getDate(); + } else { + els["month_type"][1].checked = true; + els["month_count2"].value = code[1]; + els["month_week2"].value = code[3]; + els["month_day2"].value = code[2]; + } + }, + day:function(code, dates) { + els["day_type"][0].checked = true; + els["day_count"].value = code[1]; + }, + year:function(code, dates) { + if (code[2] == "") { + els["year_type"][0].checked = true; + els["year_day"].value = dates.start.getDate(); + els["year_month"].value = dates.start.getMonth(); + } else { + els["year_type"][1].checked = true; + els["year_week2"].value = code[3]; + els["year_day2"].value = code[2]; + els["year_month2"].value = dates.start.getMonth(); + } + } + }; + + function set_repeat_code(code, dates) { + var data = code.split("#"); + code = data[0].split("_"); + set_rcode[code[0]](code, dates); + var e = els["repeat"][({day:0, week:1, month:2, year:3})[code[0]]]; + switch (data[1]) { + case "no": + els["end"][0].checked = true; + break; + case "": + els["end"][2].checked = true; + els["date_of_end"].value = date_str(dates.end); + break; + default: + els["end"][1].checked = true; + els["occurences_count"].value = data[1]; + break; + } + + e.checked = true; + e.onclick(); + } + + scheduler.form_blocks["recurring"]._set_repeat_code = set_repeat_code; + + for (var i = 0; i < top.elements.length; i++) { + var el = top.elements[i]; + switch (el.name) { + case "repeat": + el.onclick = change_current_view; + break; + } + } + scheduler._lightbox._rec_init_done = true; + }, + set_value:function(node, value, ev) { + var rf = scheduler.form_blocks["recurring"]; + if (!scheduler._lightbox._rec_init_done) + rf._init_set_value(node, value, ev); + node.open = !ev.rec_type; + if (ev.event_pid && ev.event_pid != "0") + node.blocked = true; + else node.blocked = false; + + var ds = rf._ds; + ds.start = ev.start_date; + ds.end = ev._end_date; + + rf.button_click(0, node.previousSibling.firstChild.firstChild, node, node); + if (value) + rf._set_repeat_code(value, ds); + }, + get_value:function(node, ev) { + if (node.open) { + var ds = scheduler.form_blocks["recurring"]._ds; + var actual_dates = {}; + this.formSection('time').getValue(actual_dates); + ds.start = actual_dates.start_date; + ev.rec_type = scheduler.form_blocks["recurring"]._get_repeat_code(ds); + if (ds._start) { + ev.start_date = new Date(ds.start); + ev._start_date = new Date(ds.start); + ds._start = false; + } else + ev._start_date = null; + + ev._end_date = ev.end_date = ds.end; + ev.rec_pattern = ev.rec_type.split("#")[0]; + } else { + ev.rec_type = ev.rec_pattern = ""; + ev._end_date = ev.end_date; + } + return ev.rec_type; + }, + focus:function(node) { + }, + button_click:function(index, el, section, cont) { + if (!cont.open && !cont.blocked) { + cont.style.height = "115px"; + el.style.backgroundPosition = "-5px 0px"; + el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring_open; + } else { + cont.style.height = "0px"; + el.style.backgroundPosition = "-5px 20px"; + el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring; + } + cont.open = !cont.open; + + scheduler.setLightboxSize(); + } +}; + + +//problem may occur if we will have two repeating events in the same moment of time +scheduler._rec_markers = {}; +scheduler._rec_markers_pull = {}; +scheduler._add_rec_marker = function(ev, time) { + ev._pid_time = time; + this._rec_markers[ev.id] = ev; + if (!this._rec_markers_pull[ev.event_pid]) this._rec_markers_pull[ev.event_pid] = {}; + this._rec_markers_pull[ev.event_pid][time] = ev; +}; +scheduler._get_rec_marker = function(time, id) { + var ch = this._rec_markers_pull[id]; + if (ch) return ch[time]; + return null; +}; +scheduler._get_rec_markers = function(id) { + return (this._rec_markers_pull[id] || []); +}; +scheduler._rec_temp = []; +(function() { + var old_add_event = scheduler.addEvent; + scheduler.addEvent = function(start_date, end_date, text, id, extra_data) { + var ev_id = old_add_event.apply(this, arguments); + + if (ev_id) { + var ev = scheduler.getEvent(ev_id); + if (ev.event_pid != 0) + scheduler._add_rec_marker(ev, ev.event_length * 1000); + if (ev.rec_type) + ev.rec_pattern = ev.rec_type.split("#")[0]; + } + }; +})(); +scheduler.attachEvent("onEventIdChange", function(id, new_id) { + if (this._ignore_call) return; + this._ignore_call = true; + + for (var i = 0; i < this._rec_temp.length; i++) { + var tev = this._rec_temp[i]; + if (tev.event_pid == id) { + tev.event_pid = new_id; + this.changeEventId(tev.id, new_id + "#" + tev.id.split("#")[1]); + } + } + + delete this._ignore_call; +}); +scheduler.attachEvent("onBeforeEventDelete", function(id) { + var ev = this.getEvent(id); + if (id.toString().indexOf("#") != -1 || (ev.event_pid && ev.event_pid != "0" && ev.rec_type && ev.rec_type != 'none')) { + id = id.split("#"); + var nid = this.uid(); + var tid = (id[1]) ? id[1] : (ev._pid_time / 1000); + + var nev = this._copy_event(ev); + nev.id = nid; + nev.event_pid = ev.event_pid || id[0]; + var timestamp = tid; + nev.event_length = timestamp; + nev.rec_type = nev.rec_pattern = "none"; + this.addEvent(nev); + + this._add_rec_marker(nev, timestamp * 1000); + } else { + if (ev.rec_type && this._lightbox_id) + this._roll_back_dates(ev); + var sub = this._get_rec_markers(id); + for (var i in sub) { + if (sub.hasOwnProperty(i)) { + id = sub[i].id; + if (this.getEvent(id)) + this.deleteEvent(id, true); + } + } + } + return true; +}); + +scheduler.attachEvent("onEventChanged", function(id) { + if (this._loading) return true; + + var ev = this.getEvent(id); + if (id.toString().indexOf("#") != -1) { + var id = id.split("#"); + var nid = this.uid(); + this._not_render = true; + + var nev = this._copy_event(ev); + nev.id = nid; + nev.event_pid = id[0]; + var timestamp = id[1]; + nev.event_length = timestamp; + nev.rec_type = nev.rec_pattern = ""; + this.addEvent(nev); + + this._not_render = false; + this._add_rec_marker(nev, timestamp * 1000); + } else { + if (ev.rec_type && this._lightbox_id) + this._roll_back_dates(ev); + var sub = this._get_rec_markers(id); + for (var i in sub) { + if (sub.hasOwnProperty(i)) { + delete this._rec_markers[sub[i].id]; + this.deleteEvent(sub[i].id, true); + } + } + delete this._rec_markers_pull[id]; + + // it's possible that after editing event is no longer exists, in such case we need to remove _select_id flag + var isEventFound = false; + for (var k = 0; k < this._rendered.length; k++) { + if (this._rendered[k].getAttribute('event_id') == id) + isEventFound = true; + } + if (!isEventFound) + this._select_id = null; + } + return true; +}); +scheduler.attachEvent("onEventAdded", function(id) { + if (!this._loading) { + var ev = this.getEvent(id); + if (ev.rec_type && !ev.event_length) + this._roll_back_dates(ev); + } + return true; +}); +scheduler.attachEvent("onEventSave", function(id, data, is_new_event) { + var ev = this.getEvent(id); + if (!ev.rec_type && data.rec_type && (id + '').indexOf('#') == -1) + this._select_id = null; + return true; +}); +scheduler.attachEvent("onEventCreated", function(id) { + var ev = this.getEvent(id); + if (!ev.rec_type) + ev.rec_type = ev.rec_pattern = ev.event_length = ev.event_pid = ""; + return true; +}); +scheduler.attachEvent("onEventCancel", function(id) { + var ev = this.getEvent(id); + if (ev.rec_type) { + this._roll_back_dates(ev); + // a bit expensive, but we need to be sure that event re-rendered, because view can be corrupted by resize , during edit process + this.render_view_data(); + } +}); +scheduler._roll_back_dates = function(ev) { + ev.event_length = (ev.end_date.valueOf() - ev.start_date.valueOf()) / 1000; + ev.end_date = ev._end_date; + if (ev._start_date) { + ev.start_date.setMonth(0); + ev.start_date.setDate(ev._start_date.getDate()); + ev.start_date.setMonth(ev._start_date.getMonth()); + ev.start_date.setFullYear(ev._start_date.getFullYear()); + + } +}; + +scheduler.validId = function(id) { + return id.toString().indexOf("#") == -1; +}; + +scheduler.showLightbox_rec = scheduler.showLightbox; +scheduler.showLightbox = function(id) { + var locale = this.locale; + var c = scheduler.config.lightbox_recurring; + var pid = this.getEvent(id).event_pid; + var isVirtual = (id.toString().indexOf("#") != -1); + if (isVirtual) + pid = id.split("#")[0]; + if ( !pid || pid == 0 || ( (!locale.labels.confirm_recurring || c == 'instance') || (c == 'series' && !isVirtual)) ) { + return this.showLightbox_rec(id); // editing instance or non recurring event + } + // show series + var callback = function() { + pid = this.getEvent(pid); + pid._end_date = pid.end_date; + pid.end_date = new Date(pid.start_date.valueOf() + pid.event_length * 1000); + return this.showLightbox_rec(pid.id); // editing series + }; + if (c == 'ask') { + var that = this; + dhtmlx.modalbox({ + text: locale.labels.confirm_recurring, + title: locale.labels.title_confirm_recurring, + width: "500px", + position: "middle", + buttons:[locale.labels.button_edit_series, locale.labels.button_edit_occurrence, locale.labels.icon_cancel], + callback: function(index) { + switch(+index) { + case 0: + return callback.call(that); + case 1: + return that.showLightbox_rec(id); + case 2: + return; + } + } + }); + } else { + callback(); + } + +}; + + +scheduler.get_visible_events_rec = scheduler.get_visible_events; +scheduler.get_visible_events = function(only_timed) { + for (var i = 0; i < this._rec_temp.length; i++) + delete this._events[this._rec_temp[i].id]; + this._rec_temp = []; + + var stack = this.get_visible_events_rec(only_timed); + var out = []; + for (var i = 0; i < stack.length; i++) { + if (stack[i].rec_type) { + //deleted element of serie + if (stack[i].rec_pattern != "none") + this.repeat_date(stack[i], out); + } + else out.push(stack[i]); + } + return out; +}; + + +(function() { + var old = scheduler.is_one_day_event; + scheduler.is_one_day_event = function(ev) { + if (ev.rec_type) return true; + return old.call(this, ev); + }; + var old_update_event = scheduler.updateEvent; + scheduler.updateEvent = function(id) { + var ev = scheduler.getEvent(id); + if (ev && ev.rec_type && id.toString().indexOf('#') === -1) { + scheduler.update_view(); + } else { + old_update_event.call(this, id); + } + }; +})(); + +scheduler.transponse_size = { + day:1, week:7, month:1, year:12 +}; +scheduler.date.day_week = function(sd, day, week) { + sd.setDate(1); + week = (week - 1) * 7; + var cday = sd.getDay(); + var nday = day * 1 + week - cday + 1; + sd.setDate(nday <= week ? (nday + 7) : nday); +}; +scheduler.transpose_day_week = function(sd, list, cor, size, cor2) { + var cday = (sd.getDay() || (scheduler.config.start_on_monday ? 7 : 0)) - cor; + for (var i = 0; i < list.length; i++) { + if (list[i] > cday) + return sd.setDate(sd.getDate() + list[i] * 1 - cday - (size ? cor : cor2)); + } + this.transpose_day_week(sd, list, cor + size, null, cor); +}; +scheduler.transpose_type = function(type) { + var f = "transpose_" + type; + if (!this.date[f]) { + var str = type.split("_"); + var day = 60 * 60 * 24 * 1000; + var gf = "add_" + type; + var step = this.transponse_size[str[0]] * str[1]; + + if (str[0] == "day" || str[0] == "week") { + var days = null; + if (str[4]) { + days = str[4].split(","); + if (scheduler.config.start_on_monday) { + for (var i = 0; i < days.length; i++) + days[i] = (days[i] * 1) || 7; + days.sort(); + } + } + + + this.date[f] = function(nd, td) { + var delta = Math.floor((td.valueOf() - nd.valueOf()) / (day * step)); + if (delta > 0) + nd.setDate(nd.getDate() + delta * step); + if (days) + scheduler.transpose_day_week(nd, days, 1, step); + }; + this.date[gf] = function(sd, inc) { + var nd = new Date(sd.valueOf()); + if (days) { + for (var count = 0; count < inc; count++) + scheduler.transpose_day_week(nd, days, 0, step); + } else + nd.setDate(nd.getDate() + inc * step); + + return nd; + }; + } + else if (str[0] == "month" || str[0] == "year") { + this.date[f] = function(nd, td) { + var delta = Math.ceil(((td.getFullYear() * 12 + td.getMonth() * 1) - (nd.getFullYear() * 12 + nd.getMonth() * 1)) / (step)); + if (delta >= 0) + nd.setMonth(nd.getMonth() + delta * step); + if (str[3]) + scheduler.date.day_week(nd, str[2], str[3]); + }; + this.date[gf] = function(sd, inc) { + var nd = new Date(sd.valueOf()); + nd.setMonth(nd.getMonth() + inc * step); + if (str[3]) + scheduler.date.day_week(nd, str[2], str[3]); + return nd; + }; + } + } +}; +scheduler.repeat_date = function(ev, stack, non_render, from, to) { + + from = from || this._min_date; + to = to || this._max_date; + + var td = new Date(ev.start_date.valueOf()); + + if (!ev.rec_pattern && ev.rec_type) + ev.rec_pattern = ev.rec_type.split("#")[0]; + + this.transpose_type(ev.rec_pattern); + scheduler.date["transpose_" + ev.rec_pattern](td, from); + while (td < ev.start_date || scheduler._fix_daylight_saving_date(td,from,ev,td,new Date(td.valueOf() + ev.event_length * 1000)).valueOf() <= from.valueOf() || td.valueOf() + ev.event_length * 1000 <= from.valueOf()) + td = this.date.add(td, 1, ev.rec_pattern); + while (td < to && td < ev.end_date) { + var timestamp = (scheduler.config.occurrence_timestamp_in_utc) ? Date.UTC(td.getFullYear(), td.getMonth(), td.getDate(), td.getHours(), td.getMinutes(), td.getSeconds()) : td.valueOf(); + var ch = this._get_rec_marker(timestamp, ev.id); + if (!ch) { // unmodified element of series + var ted = new Date(td.valueOf() + ev.event_length * 1000); + var copy = this._copy_event(ev); + //copy._timed = ev._timed; + copy.text = ev.text; + copy.start_date = td; + copy.event_pid = ev.id; + copy.id = ev.id + "#" + Math.ceil(timestamp / 1000); + copy.end_date = ted; + + copy.end_date = scheduler._fix_daylight_saving_date(copy.start_date, copy.end_date, ev, td, copy.end_date); + + copy._timed = this.is_one_day_event(copy); + + if (!copy._timed && !this._table_view && !this.config.multi_day) return; + stack.push(copy); + + if (!non_render) { + this._events[copy.id] = copy; + this._rec_temp.push(copy); + } + + } else + if (non_render) stack.push(ch); + + td = this.date.add(td, 1, ev.rec_pattern); + } +}; +scheduler._fix_daylight_saving_date = function(start_date, end_date, ev, counter, default_date) { + var shift = start_date.getTimezoneOffset() - end_date.getTimezoneOffset(); + if (shift) { + if (shift > 0) { + // e.g. 24h -> 23h + return new Date(counter.valueOf() + ev.event_length * 1000 - shift * 60 * 1000); + } + else { + // e.g. 24h -> 25h + return new Date(end_date.valueOf() - shift * 60 * 1000); + } + } + return new Date(default_date.valueOf()); +}; +scheduler.getRecDates = function(id, max) { + var ev = typeof id == "object" ? id : scheduler.getEvent(id); + var count = 0; + var result = []; + max = max || 100; + + var td = new Date(ev.start_date.valueOf()); + var from = new Date(td.valueOf()); + + if (!ev.rec_type) { + return [ + { start_date: ev.start_date, end_date: ev.end_date } + ]; + } + if (ev.rec_type == "none") { + return []; + } + this.transpose_type(ev.rec_pattern); + scheduler.date["transpose_" + ev.rec_pattern](td, from); + + while (td < ev.start_date || (td.valueOf() + ev.event_length * 1000) <= from.valueOf()) + td = this.date.add(td, 1, ev.rec_pattern); + while (td < ev.end_date) { + var ch = this._get_rec_marker(td.valueOf(), ev.id); + var res = true; + if (!ch) { // unmodified element of series + var sed = new Date(td); + var ted = new Date(td.valueOf() + ev.event_length * 1000); + + ted = scheduler._fix_daylight_saving_date(sed, ted, ev, td, ted); + + result.push({start_date:sed, end_date:ted}); + } else { + (ch.rec_type == "none") ? + (res = false) : + result.push({ start_date: ch.start_date, end_date: ch.end_date }); + } + td = this.date.add(td, 1, ev.rec_pattern); + if (res) { + count++; + if (count == max) + break; + } + } + return result; +}; +scheduler.getEvents = function(from, to) { + var result = []; + for (var a in this._events) { + var ev = this._events[a]; + if (ev && ev.start_date < to && ev.end_date > from) { + if (ev.rec_pattern) { + if (ev.rec_pattern == "none") continue; + var sev = []; + this.repeat_date(ev, sev, true, from, to); + 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_date < to && sev[i].end_date > from && !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); + } + } + } + return result; +}; + +scheduler.config.repeat_date = "%m.%d.%Y"; +scheduler.config.lightbox.sections = [ + {name:"description", height:130, map_to:"text", type:"textarea" , focus:true}, + {name:"recurring", type:"recurring", map_to:"rec_type", button:"recurring"}, + {name:"time", height:72, type:"time", map_to:"auto"} +]; + + +//drop secondary attributes +scheduler._copy_dummy = function(ev) { + var start_date = new Date(this.start_date); + var end_date = new Date(this.end_date); + this.start_date = start_date; + this.end_date = end_date; + this.event_length = this.event_pid = this.rec_pattern = this.rec_type = null; +}; + +scheduler.config.include_end_by = false; +scheduler.config.lightbox_recurring = 'ask'; // series, instance +scheduler.__recurring_template='



"+value+"





day everymonth
everymonth

occurrences

'; + diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_serialize.js similarity index 72% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_serialize.js index 9d19f520861..92273c13b44 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_serialize.js @@ -1,6 +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 +to use it in non-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(){ @@ -42,7 +42,7 @@ scheduler.toJSON = function(){ var ev = this._events[a]; var line =[]; for (var i=0; i < attrs.length; i++) - line.push(' '+attrs[i][0]+':"'+((attrs[i][1]?attrs[i][1](ev[attrs[i][0]]):ev[attrs[i][0]])||"").toString().replace(/\n/g,"")+'" '); + line.push(' "'+attrs[i][0]+'": "'+((attrs[i][1]?attrs[i][1](ev[attrs[i][0]]):ev[attrs[i][0]])||"").toString().replace(/\n/g,"")+'" '); json.push("{"+line.join(",")+"}"); } return "["+json.join(",\n")+"]"; @@ -53,6 +53,7 @@ scheduler.toICal = function(header){ var start = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//dhtmlXScheduler//NONSGML v2.2//EN\nDESCRIPTION:"; var end = "END:VCALENDAR"; var format = scheduler.date.date_to_str("%Y%m%dT%H%i%s"); + var full_day_format = scheduler.date.date_to_str("%Y%m%d"); var ical = []; for (var a in this._events){ @@ -61,8 +62,14 @@ scheduler.toICal = function(header){ ical.push("BEGIN:VEVENT"); - ical.push("DTSTART:"+format(ev.start_date)); - ical.push("DTEND:"+format(ev.end_date)); + if (!ev._timed || (!ev.start_date.getHours() && !ev.start_date.getMinutes())) + ical.push("DTSTART:"+full_day_format(ev.start_date)); + else + ical.push("DTSTART:"+format(ev.start_date)); + if (!ev._timed || (!ev.end_date.getHours() && !ev.end_date.getMinutes())) + ical.push("DTEND:"+full_day_format(ev.end_date)); + else + ical.push("DTEND:"+format(ev.end_date)); ical.push("SUMMARY:"+ev.text); ical.push("END:VEVENT"); } diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_timeline.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_timeline.js new file mode 100644 index 00000000000..35ac0826158 --- /dev/null +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_timeline.js @@ -0,0 +1,963 @@ +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +(function(){ +scheduler.matrix = {}; +scheduler._merge=function(a,b){ + for (var c in b) + if (typeof a[c] == "undefined") + a[c]=b[c]; +}; +scheduler.createTimelineView=function(obj){ + + scheduler._merge(obj,{ + section_autoheight: true, + name:"matrix", + x:"time", + y:"time", + x_step:1, + x_unit:"hour", + y_unit:"day", + y_step:1, + x_start:0, + x_size:24, + y_start:0, + y_size: 7, + render:"cell", + dx:200, + dy:50, + event_dy: scheduler.xy.bar_height-5, + event_min_dy: scheduler.xy.bar_height-5, + resize_events: true, + fit_events: true, + second_scale: false, + _logic: function(render_name, y_unit, timeline) { + var res = {}; + if(scheduler.checkEvent("onBeforeViewRender")) { + res = scheduler.callEvent("onBeforeViewRender", [render_name, y_unit, timeline]); + } + return res; + } + }); + + if (scheduler.checkEvent("onTimelineCreated")) { + scheduler.callEvent("onTimelineCreated", [obj]); + } + + 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++) { + this.clear_event(evs[i]); + this.render_timeline_event.call(this.matrix[this._mode], evs[i], true); + } + else + scheduler.renderMatrix.call(obj, true, true); + } else + return old.apply(this,arguments); + }; + + scheduler.matrix[obj.name]=obj; + scheduler.templates[obj.name+"_cell_value"] = function(ar){ return ar?ar.length:""; }; + 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 ""; }; + 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() && 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); + }; + + scheduler.date[obj.name+"_start"] = function(date) { + var func = scheduler.date[obj.x_unit+"_start"] || scheduler.date.day_start; + var start_date = func.call(scheduler.date, date); + start_date = scheduler.date.add(start_date, obj.x_step*obj.x_start, obj.x_unit); + return start_date; + }; + + scheduler.attachEvent("onSchedulerResize",function(){ + if (this._mode == obj.name){ + scheduler.renderMatrix.call(obj, true, true); + return false; + } + return true; + }); + + scheduler.attachEvent("onOptionsLoad",function(){ + obj.order = {}; + scheduler.callEvent('onOptionsLoadStart', []); + for(var i=0; ipos.x){ //index of section + var ratio = (pos.x-(summ-column_width))/column_width; + ratio = (ratio < 0) ? 0: ratio; + break; + } + } + + summ = 0; + for (yind; yind < this._colsS.heights.length; yind++) { + summ+=this._colsS.heights[yind]; + if (summ>pos.y) + break; + } + + pos.fields={}; + if(!obj.y_unit[yind]) { + yind=obj.y_unit.length-1; + } + + if (yind >= 0 && obj.y_unit[yind]) { + pos.section = pos.fields[obj.y_property] = obj.y_unit[yind].key; + if (ev) { + ev[obj.y_property] = pos.section; + } + } + + pos.x = 0; + + var end_date; + if(xind >= obj._trace_x.length) { // if our event is at the end of the view + end_date = scheduler.date.add(obj._trace_x[obj._trace_x.length-1], obj.x_step, obj.x_unit); + } else { + var max_date = (obj._trace_x[xind+1]) ? obj._trace_x[xind+1] : scheduler.date.add(obj._trace_x[obj._trace_x.length-1], obj.x_step, obj.x_unit); + var timestamp_diff = Math.ceil(ratio*(max_date-obj._trace_x[xind])); + end_date = new Date(+obj._trace_x[xind]+timestamp_diff); + } + + if (this._drag_mode == "move" && this._drag_id && this._drag_event) { // as we can simply be calling _locate_cell_timeline + var ev = this.getEvent(this._drag_id); + var drag_event = this._drag_event; + + if (!drag_event._move_delta) { + drag_event._move_delta = (ev.start_date-end_date)/60000; + } + + end_date = scheduler.date.add(end_date, drag_event._move_delta, "minute"); + } + + if (this._drag_mode == "resize" && ev) { + pos.resize_from_start = !!(Math.abs(ev.start_date-end_date) < Math.abs(ev.end_date-end_date)); + } + + pos.y = Math.round((end_date-this._min_date)/(1000*60*this.config.time_step)); + pos.custom = true; + pos.shift = this.config.time_step //step_diff; + return pos; + } +}; + +scheduler.render_timeline_event = function(ev, attach){ + var section = ev[this.y_property]; // section id + + var sorder = ev._sorder; + + var x_start = _getX(ev, false, this._step); + var x_end = _getX(ev, true, this._step); + + var event_height = this.event_dy; + if (this.event_dy == "full") { + if (this.section_autoheight) { + event_height = this._section_height[section] - 6; + } else { + event_height = this.dy - 3; + } + } + + if (this.resize_events) { + event_height = Math.max(Math.floor(event_height / ev._count), this.event_min_dy); + } + + var hb = event_height - 2;// takes into account css sizes (border/padding) + if (!ev._inner && this.event_dy == "full") { + hb=(hb+2)*(ev._count-sorder)-2; + } + + var y = 2+sorder*event_height+(sorder?(sorder*2):0); // original top + number_of_events * event_dy + default event top/bottom borders + if (scheduler.config.cascade_event_display) { + y =2+sorder*scheduler.config.cascade_event_margin+(sorder?(sorder*2):0); + } + + var section_height = event_height+y+2; + if(!this._events_height[section] || (this._events_height[section] < section_height)){ + this._events_height[section] = section_height; + } + + var cs = scheduler.templates.event_class(ev.start_date,ev.end_date,ev); + cs = "dhx_cal_event_line "+(cs||""); + + var bg_color = (ev.color?("background:"+ev.color+";"):""); + var color = (ev.textColor?("color:"+ev.textColor+";"):""); + var text = scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev); + + var html='
'; + if (scheduler.config.drag_resize){ + var dhx_event_resize = 'dhx_event_resize'; + html += ("
"); + } + html += (text+'
'); + + if (!attach) + return html; + else { + var d = document.createElement("DIV"); + d.innerHTML = html; + var ind = this.order[section]; + var parent = scheduler._els["dhx_cal_data"][0].firstChild.rows[ind].cells[1].firstChild; + + scheduler._rendered.push(d.firstChild); + parent.appendChild(d.firstChild); + } +}; +function trace_events(){ + //minimize event set + 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]) + matrix[y]=[]; + + for (var i=0; i < evs.length; i++) { + var y = this.order[evs[i][this.y_property]]; + var x = 0; + while (this._trace_x[x+1] && evs[i].start_date>=this._trace_x[x+1]) x++; + while (this._trace_x[x] && evs[i].end_date>this._trace_x[x]) { + if (!matrix[y][x]) matrix[y][x]=[]; + matrix[y][x].push(evs[i]); + x++; + } + } + return matrix; +} + +// function used to get X (both start and end) coordinates for timeline bar view +function _getX(ev, isEndPoint, step) { + var x = 0; + var date = (isEndPoint) ? ev.end_date : ev.start_date; + if(date.valueOf()>scheduler._max_date.valueOf()) + date = scheduler._max_date; + var delta = date - scheduler._min_date_timeline; + if (delta<0) { + column_offset = 0; + } else { + var index = Math.round( delta/(step*scheduler._cols[0]) ); // results varies ~0.9 - ~24.17, e.g. that way we get 1 and 24 + if(index>scheduler._cols.length) // if columns really small it's possible to get incorrect index + index = scheduler._cols.length; + for (var k=0; kb.id?1:-1; + return a.start_date>b.start_date?1:-1; + }); + var stack=[]; + var evs_length = evs.length; + // prepare events for render + for (var j=0; j first event side + while (stack.length) { + if (stack[stack.length-1].end_date.valueOf() <= ev.start_date.valueOf()) { + stack.splice(stack.length-1,1); + } else { + break; + } + } + + // cutting stack from the first -> last event side + var sorderSet = false; + for(var p=0; p _max_sorder) + _max_sorder = stack[w]._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; + } + } + // fix _count for every event + for (var m=0; m < evs.length; m++) { + evs[m]._count = stack.max_count; + } + // render events + for (var v=0; vstats.height)?rendered_height:stats.height; + stats.style_height = "height:"+stats.height+"px;"; + this._section_height[this.y_unit[i].key] = stats.height; + } + + // section 1 + html+=""+stats.td_content+""; + + if (this.render == "cell"){ + for (var j=0; j < scheduler._cols.length; j++) { + html+="
"+scheduler.templates[this.name+"_cell_value"](evs[i][j])+"
"; + } + } else { + //section 2 + html+="
"; + + // adding events + html += events_html; + + //section 3 + html+=""; + for (var j=0; j < scheduler._cols.length; j++) + html+=""; + html+="
"; + html+="
"; + } + html+=""; + } + html += ""; + this._matrix = evs; + //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 = []; + var divs = scheduler._obj.getElementsByTagName("DIV"); + for (var i=0; i < divs.length; i++) + if (divs[i].getAttribute("event_id")) + scheduler._rendered.push(divs[i]); + + this._scales = {}; + for (var i=0; i < d.firstChild.rows.length; i++) { + heights.push(d.firstChild.rows[i].offsetHeight); + var unit_key = this.y_unit[i].key; + var scale = this._scales[unit_key] = (scheduler._isRender('cell')) ? d.firstChild.rows[i] : d.firstChild.rows[i].childNodes[1].getElementsByTagName('div')[0]; + scheduler.callEvent("onScaleAdd", [scale, unit_key]); + } +} +function x_scale(h){ + 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 start = scheduler._min_date; + for (var k=0; kb.start_date?1:-1; }); + + if (scheduler._tooltip){ + if (scheduler._tooltip.date == mark) return; + scheduler._tooltip.innerHTML=""; + } else { + var t = scheduler._tooltip = document.createElement("DIV"); + t.className = "dhx_tooltip"; + document.body.appendChild(t); + t.onclick = scheduler._click.dhx_cal_data; + } + + var html = ""; + + for (var i=0; i"; + 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])+""; + } + + scheduler._tooltip.style.display=""; + scheduler._tooltip.style.top = "0px"; + + if (document.body.offsetWidth-offset.left-scheduler._tooltip.offsetWidth < 0) + scheduler._tooltip.style.left = offset.left-scheduler._tooltip.offsetWidth+"px"; + else + scheduler._tooltip.style.left = offset.left+pos.src.offsetWidth+"px"; + + scheduler._tooltip.date = mark; + scheduler._tooltip.innerHTML = html; + + if (document.body.offsetHeight-offset.top-scheduler._tooltip.offsetHeight < 0) + scheduler._tooltip.style.top= offset.top-scheduler._tooltip.offsetHeight+pos.src.offsetHeight+"px"; + else + scheduler._tooltip.style.top= offset.top+"px"; +} + +function _init_matrix_tooltip() { + dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", function(e){ + var obj = scheduler.matrix[scheduler._mode]; + if (!obj || obj.render != "cell") + return; + if (obj){ + var pos = scheduler._locate_cell_timeline(e); + var e = e || event; + var src = e.target||e.srcElement; + if (pos) + return showToolTip(obj,pos,getOffset(pos.src)); + } + hideToolTip(); + }); + _init_matrix_tooltip=function(){}; +} + +scheduler.renderMatrix = function(mode, refresh) { + if (!refresh) + scheduler._els['dhx_cal_data'][0].scrollTop=0; + + scheduler._min_date = scheduler.date[this.name+"_start"](scheduler._date); + 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); +}; + +function html_index(el) { + var p = el.parentNode.childNodes; + for (var i=0; i < p.length; i++) + if (p[i] == el) return i; + return -1; +} +function locate_hcell(e){ + e = e||event; + var trg = e.target?e.target:e.srcElement; + while (trg && trg.tagName != "DIV") + trg=trg.parentNode; + if (trg && trg.tagName == "DIV"){ + var cs = trg.className.split(" ")[0]; + if (cs == "dhx_scale_bar") + return { x:html_index(trg), y:-1, src:trg, scale:true }; + } +} +scheduler._locate_cell_timeline = function(e){ + e = e||event; + var trg = e.target?e.target:e.srcElement; + + var res = {}; + var view = scheduler.matrix[scheduler._mode]; + var pos = scheduler.getActionData(e); + + for (var xind = 0; xind < view._trace_x.length-1; xind++) { + if (+pos.date <= view._trace_x[xind+1]) // | 8:00, 8:30 | 8:15 should be checked against 8:30 + break; + } + + res.x = xind; + res.y = view.order[pos.section]; + var diff = scheduler._isRender('cell') ? 1 : 0; + res.src = view._scales[pos.section].getElementsByTagName('td')[xind+diff]; + + if (trg.className.split(" ")[0] == "dhx_matrix_scell") { // Y scale + res.x = -1; + res.src = trg; + res.scale = true; + } + + return res; +}; + +var old_click = scheduler._click.dhx_cal_data; +scheduler._click.dhx_marked_timespan = scheduler._click.dhx_cal_data = function(e){ + var ret = old_click.apply(this,arguments); + var obj = scheduler.matrix[scheduler._mode]; + if (obj){ + var pos = scheduler._locate_cell_timeline(e); + if (pos){ + if (pos.scale) + scheduler.callEvent("onYScaleClick",[pos.y, obj.y_unit[pos.y], e||event]); + else + scheduler.callEvent("onCellClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]); + } + } + return ret; +}; + +scheduler.dblclick_dhx_marked_timespan = scheduler.dblclick_dhx_matrix_cell = function(e){ + var obj = scheduler.matrix[scheduler._mode]; + if (obj){ + var pos = scheduler._locate_cell_timeline(e); + if (pos){ + if (pos.scale) + scheduler.callEvent("onYScaleDblClick",[pos.y, obj.y_unit[pos.y], e||event]); + else + scheduler.callEvent("onCellDblClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]); + } + } +}; +scheduler.dblclick_dhx_matrix_scell = function(e){ + return scheduler.dblclick_dhx_matrix_cell(e); +}; + +scheduler._isRender = function(mode){ + return (scheduler.matrix[scheduler._mode] && scheduler.matrix[scheduler._mode].render == mode); +}; + +scheduler.attachEvent("onCellDblClick", function (x, y, a, b, event){ + if (this.config.readonly|| (event.type == "dblclick" && !this.config.dblclick_create)) return; + + var obj = scheduler.matrix[scheduler._mode]; + var event_options = {}; + event_options['start_date'] = obj._trace_x[x]; + event_options['end_date'] = (obj._trace_x[x+1]) ? obj._trace_x[x+1] : scheduler.date.add(obj._trace_x[x], obj.x_step, obj.x_unit); + event_options[scheduler.matrix[scheduler._mode].y_property] = obj.y_unit[y].key; + scheduler.addEventNow(event_options, null, event); +}); + +scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){ + return !scheduler._isRender("cell"); +}); +scheduler.attachEvent("onEventChanged", function(id, ev) { + ev._timed = this.is_one_day_event(ev); +}); +var old_render_marked_timespan = scheduler._render_marked_timespan; +scheduler._render_marked_timespan = function(options, area, unit_id) { + if (!scheduler.config.display_marked_timespans) + return []; + + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + if (scheduler._isRender('cell')) + return; + + var view_opts = scheduler.matrix[scheduler._mode]; + var blocks = []; + + var units = []; + var areas = []; + if (!unit_id) { // should draw for every unit + var order = view_opts.order; + for (var key in order) { + if (order.hasOwnProperty(key)) { + units.push(key); + areas.push(view_opts._scales[key]); + } + } + } else { + areas = [area]; + units = [unit_id] + } + + var min_date = scheduler._min_date; + var max_date = scheduler._max_date; + var dates = []; + + if (options.days > 6) { + var specific_date = new Date(options.days); + if (scheduler.date.date_part(new Date(min_date)) <= +specific_date && +max_date >= +specific_date) + dates.push(specific_date); + } else { + dates.push.apply(dates, scheduler._get_dates_by_index(options.days)); + } + + var zones = options.zones; + var css_classes = scheduler._get_css_classes_by_config(options); + + for (var j=0; j start_date)) + continue; + + var block = scheduler._get_block_by_config(options); + block.className = css_classes; + + var start_pos = _getX({start_date: start_date}, false, view_opts._step)-1; + var end_pos = _getX({start_date: end_date}, false, view_opts._step)-1; + var width = end_pos - start_pos-1; + var height = view_opts._section_height[unit_id]-1; + + block.style.cssText = "height: "+height+"px; left: "+start_pos+"px; width: "+width+"px; top: 0;"; + + area.insertBefore(block, area.firstChild); + blocks.push(block); + } + } + } + + return blocks; + + } else { + return old_render_marked_timespan.apply(scheduler, [options, area, unit_id]); + } +}; + +var old_append_mark_now = scheduler._append_mark_now; +scheduler._append_mark_now = function(day_index) { + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + var n_date = new Date(); + var zone_start = scheduler._get_zone_minutes(n_date); + var options = { + days: +scheduler.date.date_part(n_date), + zones: [zone_start, zone_start+1], + css: "dhx_matrix_now_time", + type: "dhx_now_time" + }; + return scheduler._render_marked_timespan(options); + } else { + return old_append_mark_now.apply(scheduler, [day_index]); + } +}; +scheduler.attachEvent("onViewChange", function(date, mode) { + if (scheduler.matrix && scheduler.matrix[mode]) { + if (scheduler.markNow) { + scheduler.markNow(); + } + } +}); + +scheduler.attachEvent("onScaleAdd", function(scale, unit_key) { + var timespans = scheduler._marked_timespans; + + if (timespans && scheduler.matrix && scheduler.matrix[scheduler._mode]) { + var mode = scheduler._mode; + + var min_date = scheduler._min_date; + var max_date = scheduler._max_date; + var global_data = timespans["global"]; + + for (var t_date = scheduler.date.date_part(new Date(min_date)); t_date < max_date; t_date = scheduler.date.add(t_date, 1, "day")) { + var day_value = +t_date; + var day_index = t_date.getDay(); + var r_configs = []; + + var day_types = global_data[day_value]||global_data[day_index]; + r_configs.push.apply(r_configs, scheduler._get_configs_to_render(day_types)); + + if (timespans[mode] && timespans[mode][unit_key]) { + var unit_types = scheduler._get_types_to_render(timespans[mode][unit_key][day_index], timespans[mode][unit_key][day_value]); + r_configs.push.apply(r_configs, scheduler._get_configs_to_render(unit_types)); + } + + for (var i=0; iEvent: " + event.text + "
Start date: " + scheduler.templates.tooltip_date_format(start) + "
End date: " + scheduler.templates.tooltip_date_format(end); +}; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_treetimeline.js similarity index 90% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_treetimeline.js index d92a4be8428..001b8b0ae6d 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_treetimeline.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ scheduler.attachEvent("onTimelineCreated", function (obj){ @@ -90,7 +90,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[scheduler.matrix[scheduler._mode].y_property]); - if (typeof section.children != 'undefined' && !scheduler.matrix[scheduler._mode].folder_events_available) { + if (section && typeof section.children != 'undefined' && !scheduler.matrix[scheduler._mode].folder_events_available) { // section itself could be not defined in case of new event (addEventNow) if (!is_new) { //if old - move back event_object[scheduler.matrix[scheduler._mode].y_property] = section_id_before; } @@ -101,15 +101,16 @@ scheduler.attachEvent("onBeforeEventChanged", function(event_object, native_even }); scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){ - var cell = scheduler._locate_cell_timeline(native_event_object); - if(cell) { - var section_id = scheduler.matrix[scheduler._mode].y_unit[cell.y].key; - if(typeof scheduler.matrix[scheduler._mode].y_unit[cell.y].children != "undefined" && !scheduler.matrix[scheduler._mode].folder_events_available) { - return false; - } - } if(scheduler._isRender("tree")) { - ev = scheduler.getEvent(event_id); + var cell = scheduler._locate_cell_timeline(native_event_object); + if(cell) { + var section_id = scheduler.matrix[scheduler._mode].y_unit[cell.y].key; + if(typeof scheduler.matrix[scheduler._mode].y_unit[cell.y].children != "undefined" && !scheduler.matrix[scheduler._mode].folder_events_available) { + return false; + } + } + + var ev = scheduler.getEvent(event_id); section_id_before = section_id||ev[scheduler.matrix[scheduler._mode].y_property]; // either event id or section_id will be available } return true; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/property.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_units.js similarity index 90% rename from addons/web_calendar/static/lib/dhtmlxScheduler/sources/property.js rename to addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_units.js index 96f11ec64a5..39bd056338b 100644 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/property.js +++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/dhtmlxscheduler_units.js @@ -1,6 +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 +to use it in non-GPL project. Please contact sales@dhtmlx.com for details */ scheduler._props = {}; scheduler.createUnitsView=function(name,property,list,size,step,skip_incorrect){ @@ -170,7 +170,7 @@ scheduler.scrollUnit=function(step){ var l = scheduler.locate_holder_day; scheduler.locate_holder_day=function(a,b,ev){ var pr = scheduler._props[this._mode]; - if (pr){ + if (pr && ev) { fix_und(pr,ev); return pr.order[ev[pr.map_to]]*1+(b?1:0)-pr.position; } @@ -188,9 +188,9 @@ scheduler.scrollUnit=function(step){ 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; + var key = pr.map_to; + pos.section = ev[key]=pr.options[unit_ind].key; pos.x = 0; - pos.custom = true; } return pos; }; @@ -215,7 +215,7 @@ scheduler.scrollUnit=function(step){ }); scheduler.attachEvent("onEventCreated",function(id,n_ev){ var pr = scheduler._props[this._mode]; - if (pr){ + if (pr && n_ev){ var ev = this.getEvent(id); this._mouse_coords(n_ev); fix_und(pr,ev); @@ -224,18 +224,3 @@ scheduler.scrollUnit=function(step){ return true; }) })(); - - -/* 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; i
"; + var day = Math.min(6, k * 2 + i); + 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_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 = []; @@ -96,7 +98,7 @@ scheduler.attachEvent("onTemplatesReady", function() { 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 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++) { @@ -104,38 +106,39 @@ scheduler.attachEvent("onTemplatesReady", function() { 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; + 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_date < tend && tev.end_date > tstart) + 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) + var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + ev_div.className = 'dhx_wa_ev_body' + (ev_class ? (' ' + ev_class) : ''); + if (ev._text_style) + ev_div.style.cssText = ev._text_style; + if (ev.color) + ev_div.style.background = ev.color; + if (ev.textColor) ev_div.style.color = ev.textColor; - if(scheduler._select_id && ev.id == scheduler._select_id) { + if (scheduler._select_id && ev.id == scheduler._select_id && !(!scheduler.config.week_agenda_select && scheduler.config.week_agenda_select !== undefined)) { ev_div.className += " dhx_cal_event_selected"; scheduler._wa._selected_divs.push(ev_div); } var position = ""; - if(!ev._timed){ + if (!ev._timed) { position = "middle"; - if(ev.start_date.valueOf() >= tstart.valueOf() && ev.start_date.valueOf() <= tend.valueOf()) + 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()) + 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); @@ -151,34 +154,32 @@ scheduler.attachEvent("onTemplatesReady", function() { scheduler._max_date = scheduler.date.add(scheduler._min_date, 1, "week"); scheduler.set_sizes(); if (mode) { // mode enabled - scheduler._table_view=true; + scheduler._table_view = scheduler._allow_dnd = 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 = ""; + // 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_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; + } else { // leaving week_agenda mode + scheduler._table_view = scheduler._allow_dnd = 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_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'; } }; @@ -190,7 +191,7 @@ scheduler.attachEvent("onTemplatesReady", function() { var date = src._date; src = src.parentNode; } - if(!date) + if (!date) return pos; pos.x = 0; var diff = date.valueOf() - scheduler._min_date.valueOf(); @@ -227,29 +228,29 @@ scheduler.attachEvent("onTemplatesReady", function() { return true; }); - scheduler.attachEvent("onEventSave",function(id,data,is_new_event){ - if(is_new_event) + scheduler.attachEvent("onEventSave", function(id, data, is_new_event) { + if (is_new_event && this._mode == 'week_agenda') 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"; @@ -145,12 +148,17 @@ scheduler.templates.year_tooltip = function(s, e, ev) { return t.childNodes[2].firstChild.rows[Math.floor(d / 7)].cells[d % 7].firstChild; }; - var marked = []; + var marked = {}; scheduler._mark_year_date = function(d, ev) { + var date = to_attr(d); 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); + var ev_class = this.templates.event_class(ev.start_date, ev.end_date, ev); + if (!marked[date]) { + c.className = "dhx_month_head dhx_year_event"; + c.setAttribute("date", date); + marked[date] = c; + } + c.className += (ev_class) ? (" "+ev_class) : ""; }; scheduler._unmark_year_date = function(d) { this._get_year_cell(d).className = "dhx_month_head"; @@ -188,6 +196,7 @@ scheduler.templates.year_tooltip = function(s, e, ev) { if (mode) { scheduler._init_year_tooltip(); scheduler._reset_year_scale(); + if (scheduler._load_mode && scheduler._load()) return scheduler._render_wait = true; scheduler.render_view_data(); } else { scheduler.hideToolTip(); diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js deleted file mode 100644 index 46bc624c1ea..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js +++ /dev/null @@ -1,26 +0,0 @@ -/* -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); - - 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) { - scheduler.setCurrentView(s_d(to),"day"); - if (e && e.preventDefault) e.preventDefault(); - return false; - } - }) -}); \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js deleted file mode 100644 index 242f735a41f..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js +++ /dev/null @@ -1,36 +0,0 @@ -/* -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 -*/ -//Initial idea and implementation by Steve MC -(function (){ - -var lightboxopen = false; - -scheduler.attachEvent("onBeforeLightbox",function(){ lightboxopen = true; return true; }); -scheduler.attachEvent("onAfterLightbox",function(){ lightboxopen = false; return true; }); - -dhtmlxEvent(document,(_isOpera?"keypress":"keydown"),function(e){ - e=e||event; - if (!lightboxopen){ - - if (e.keyCode == 37 || e.keyCode == 39) { // Left-Arrow - e.cancelBubble = true; - - var next = scheduler.date.add(scheduler._date,(e.keyCode == 37 ? -1 : 1 ),scheduler._mode); - scheduler.setCurrentView(next); - return true; - } else if (e.ctrlKey && e.keyCode == 67){ - scheduler._copy_id = scheduler._select_id; - } else if (e.ctrlKey && e.keyCode == 86){ - var ev = scheduler.getEvent(scheduler._copy_id); - if (ev){ - var new_ev = scheduler._copy_event(ev); - new_ev.id = scheduler.uid(); - scheduler.addEvent(new_ev); - } - } - } -}); - -})(); \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js deleted file mode 100644 index 322f1668838..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js +++ /dev/null @@ -1,403 +0,0 @@ -/* -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(){ - - this.layers.sort(function(a, b){ - return a.zIndex - b.zIndex; - }); - - scheduler._dp_init=function(dp){ - dp._methods=["setEventTextStyle","","changeEventId","deleteEvent"]; - - this.attachEvent("onEventAdded",function(id){ - if (!this._loading && this.validId(id) && this.getEvent(id) && this.getEvent(id).layer == dp.layer) - dp.setUpdated(id,true,"inserted"); - }); - this.attachEvent("onBeforeEventDelete",function(id){ - if(this.getEvent(id) && this.getEvent(id).layer == dp.layer) { - if (!this.validId(id)) return; - var z=dp.getState(id); - - if (z=="inserted" || this._new_event) { dp.setUpdated(id,false); return true; } - if (z=="deleted") return false; - if (z=="true_deleted") return true; - - dp.setUpdated(id,true,"deleted"); - return false; - } - else return true; - }); - this.attachEvent("onEventChanged",function(id){ - if (!this._loading && this.validId(id) && this.getEvent(id) && this.getEvent(id).layer == dp.layer) - dp.setUpdated(id,true,"updated"); - }); - - dp._getRowData=function(id,pref){ - var ev=this.obj.getEvent(id); - var data = {}; - - for (var a in ev){ - if (a.indexOf("_")==0) continue; - if (ev[a] && ev[a].getUTCFullYear) //not very good, but will work - data[a] = this.obj.templates.xml_format(ev[a]); - else - data[a] = ev[a]; - } - return data; - }; - dp._clearUpdateFlag=function(){}; - - dp.attachEvent("insertCallback", scheduler._update_callback); - dp.attachEvent("updateCallback", scheduler._update_callback); - dp.attachEvent("deleteCallback", function(upd, id) { - this.obj.setUserData(id, this.action_param, "true_deleted"); - this.obj.deleteEvent(id); - }); - }; - - (function() { - var _cloneObj = function(obj){ - if(obj == null || typeof(obj) != 'object') - return obj; - var temp = new obj.constructor(); - for(var key in obj) - temp[key] = _cloneObj(obj[key]); - return temp; - }; - - scheduler._dataprocessors = []; - scheduler._layers_zindex = {}; - 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/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js deleted file mode 100644 index ad790cf3ea9..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js +++ /dev/null @@ -1,166 +0,0 @@ -/* -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; - -(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){ - if (nd.valueOf()>scheduler.config.limit_end.valueOf() || this.date.add(nd,1,nm)<=scheduler.config.limit_start.valueOf()){ - setTimeout(function(){ - scheduler.setCurrentView(scheduler._date, nm); - },1); - return false; - } - } - return true; - }); - 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.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"); - } - 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; - }); - scheduler.attachEvent("onEventChanged",function(id){ - if (!id) return true; - var ev = scheduler.getEvent(id); - if (!blocker(ev)){ - if (!before) return false; - ev.start_date = before[0]; - ev.end_date = before[1]; - ev._timed=this.is_one_day_event(ev); - }; - return true; - }); - scheduler.attachEvent("onBeforeEventChanged",function(ev, native_object, is_new){ - return blocker(ev); - }); - -})(); \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js deleted file mode 100644 index 07ea857c13f..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js +++ /dev/null @@ -1,677 +0,0 @@ -/* -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){ - for (var c in b) - if (typeof a[c] == "undefined") - a[c]=b[c]; -}; -scheduler.createTimelineView=function(obj){ - - - scheduler._merge(obj,{ - section_autoheight: true, - name:"matrix", - x:"time", - y:"time", - x_step:1, - x_unit:"hour", - y_unit:"day", - y_step:1, - x_start:0, - x_size:24, - y_start:0, - y_size: 7, - 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")) { - res = scheduler.callEvent("onBeforeViewRender", [render_name, y_unit, timeline]); - } - return res; - } - }); - - if (scheduler.checkEvent("onTimelineCreated")) { - scheduler.callEvent("onTimelineCreated", [obj]); - } - - 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++) { - this.clear_event(evs[i]); - this.render_timeline_event.call(this.matrix[this._mode], evs[i], 0, true); - } - else - set_full_view.call(obj,true); - } else - return old.apply(this,arguments); - }; - - scheduler.matrix[obj.name]=obj; - scheduler.templates[obj.name+"_cell_value"] = function(ar){ return ar?ar.length:""; }; - 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 ""; }; - 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() && 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); - }; - - // note this is not correct start_date as it doesn't take into account x_start value (though scheduler._min_date is correct) - scheduler.date[obj.name+"_start"] = scheduler.date[obj.x_unit+"_start"] || scheduler.date.day_start; - - scheduler.attachEvent("onSchedulerResize",function(){ - if (this._mode == obj.name){ - set_full_view.call(obj,true); - return false; - } - return true; - }); - - scheduler.attachEvent("onOptionsLoad",function(){ - obj.order = {}; - scheduler.callEvent('onOptionsLoadStart', []); - for(var i=0; ipos.x){ //index of section - break; - } - } - - summ = 0; - for (yind; yind < this._colsS.heights.length; yind++) { - summ+=this._colsS.heights[yind]; - if (summ>pos.y) - break; - } - - pos.fields={}; - if(!obj.y_unit[yind]) { - yind=obj.y_unit.length-1; - } - pos.fields[obj.y_property] = ev[obj.y_property] = obj.y_unit[yind].key; - - pos.x = 0; - - if (this._drag_mode == "new-size" && ev.start_date*1==this._drag_start*1) { - xind++; - } - - - if(xind >= obj._trace_x.length) { // if our event is at the end of the view - var end_date = scheduler.date.add(obj._trace_x[obj._trace_x.length-1], obj.x_step, obj.x_unit); - } else { - var end_date = obj._trace_x[xind]; - } - - pos.y = Math.round((end_date-this._min_date)/(1000*60*this.config.time_step)); - pos.custom = true; - pos.shift = step_diff; - return pos; - }; - } -}; - -scheduler.render_timeline_event = function(ev, stack, attach){ - - var x_start = _getX(ev, false, this._step); - var x_end = _getX(ev, true, this._step); - - var hb = scheduler.xy.bar_height; - var y = 2+stack*hb; - - var height = hb+y-2; - var section = ev[this.y_property]; - if(!this._events_height[section] || (this._events_height[section] < height)){ - this._events_height[section] = height; - } - - var cs = scheduler.templates.event_class(ev.start_date,ev.end_date,ev); - cs = "dhx_cal_event_line "+(cs||""); - - var bg_color = (ev.color?("background-color:"+ev.color+";"):""); - var color = (ev.textColor?("color:"+ev.textColor+";"):""); - - 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[section]; - var parent = scheduler._els["dhx_cal_data"][0].firstChild.rows[ind].cells[1].firstChild; - - scheduler._rendered.push(d.firstChild); - parent.appendChild(d.firstChild); - } - -}; -function trace_events(){ - //minimize event set - 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]) - matrix[y]=[]; - - for (var i=0; i < evs.length; i++) { - var y = this.order[evs[i][this.y_property]]; - var x = 0; - while (this._trace_x[x+1] && evs[i].start_date>=this._trace_x[x+1]) x++; - while (this._trace_x[x] && evs[i].end_date>this._trace_x[x]) { - if (!matrix[y][x]) matrix[y][x]=[]; - matrix[y][x].push(evs[i]); - x++; - } - } - return matrix; -} - -// function used to get X (both start and end) coordinates for timeline bar view -function _getX(ev, isEndPoint, step) { - var x = 0; - var date = (isEndPoint) ? ev.end_date : ev.start_date; - if(date.valueOf()>scheduler._max_date.valueOf()) - date = scheduler._max_date; - var delta = date - scheduler._min_date_timeline; - if (delta<0) { - column_offset = 0; - } else { - var index = Math.round( delta/(step*scheduler._cols[0]) ); // results varies ~0.9 - ~24.17, e.g. that way we get 1 and 24 - if(index>scheduler._cols.length) // if columns really small it's possible to get incorrect index - index = scheduler._cols.length; - for (var k=0; kb.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+=""+stats.td_content+""; - - if (this.render == "cell"){ - for (var j=0; j < scheduler._cols.length; j++) { - html+="
"+scheduler.templates[this.name+"_cell_value"](evs[i][j])+"
"; - } - } else { - //section 2 - html+="
"; - - // adding events - html += events_html; - - //section 3 - html+=""; - for (var j=0; j < scheduler._cols.length; j++) - html+=""; - html+="
"; - html+="
"; - } - html+=""; - } - html += ""; - this._matrix = evs; - //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 = []; - var divs = document.getElementsByTagName("DIV"); - for (var i=0; i < divs.length; i++) - if (divs[i].getAttribute("event_id")) - scheduler._rendered.push(divs[i]); - - for (var i=0; i < d.firstChild.rows.length; i++) - heights.push(d.firstChild.rows[i].offsetHeight); - -} -function x_scale(h){ - 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 start = scheduler._min_date; - for (var k=0; kb.start_date?1:-1; }); - - if (scheduler._tooltip){ - if (scheduler._tooltip.date == mark) return; - scheduler._tooltip.innerHTML=""; - } else { - var t = scheduler._tooltip = document.createElement("DIV"); - t.className = "dhx_tooltip"; - document.body.appendChild(t); - t.onclick = scheduler._click.dhx_cal_data; - } - - var html = ""; - - for (var i=0; i"; - 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])+""; - } - - scheduler._tooltip.style.display=""; - scheduler._tooltip.style.top = "0px"; - - if (document.body.offsetWidth-offset.left-scheduler._tooltip.offsetWidth < 0) - scheduler._tooltip.style.left = offset.left-scheduler._tooltip.offsetWidth+"px"; - else - scheduler._tooltip.style.left = offset.left+pos.src.offsetWidth+"px"; - - scheduler._tooltip.date = mark; - scheduler._tooltip.innerHTML = html; - - if (document.body.offsetHeight-offset.top-scheduler._tooltip.offsetHeight < 0) - scheduler._tooltip.style.top= offset.top-scheduler._tooltip.offsetHeight+pos.src.offsetHeight+"px"; - else - scheduler._tooltip.style.top= offset.top+"px"; -} - -function _init_matrix_tooltip(){ - dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", function(e){ - var obj = scheduler.matrix[scheduler._mode]; - if (obj){ - var pos = scheduler._locate_cell_timeline(e); - var e = e || event; - var src = e.target||e.srcElement; - if (pos) - return showToolTip(obj,pos,getOffset(pos.src)); - } - hideToolTip(); - }); - _init_matrix_tooltip=function(){}; -} - -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); -}; - -function html_index(el) { - var p = el.parentNode.childNodes; - for (var i=0; i < p.length; i++) - if (p[i] == el) return i; - return -1; -} -function locate_hcell(e){ - e = e||event; - var trg = e.target?e.target:e.srcElement; - while (trg && trg.tagName != "DIV") - trg=trg.parentNode; - if (trg && trg.tagName == "DIV"){ - var cs = trg.className.split(" ")[0]; - if (cs == "dhx_scale_bar") - return { x:html_index(trg), y:-1, src:trg, scale:true }; - } -} -scheduler._locate_cell_timeline = function(e){ - e = e||event; - var trg = e.target?e.target:e.srcElement; - while (trg && trg.tagName != "TD") - trg=trg.parentNode; - if (trg && trg.tagName == "TD"){ - var cs = trg.className.split(" ")[0]; - if (cs == "dhx_matrix_cell") { - - if(scheduler._isRender("cell")) { - return { x:trg.cellIndex-1, y:trg.parentNode.rowIndex, src:trg }; - } else { // probably desired path for all modes except cell - var trscell = trg.parentNode; // moving out from current td - while(trscell && trscell.tagName != "TD") { - trscell=trscell.parentNode; - } - return { x:trg.cellIndex, y:trscell.parentNode.rowIndex, src:trg }; - } - } - else if (cs == "dhx_matrix_scell") - return { x:-1, y:trg.parentNode.rowIndex, src:trg, scale:true }; - } - return false; -}; - -var old_click = scheduler._click.dhx_cal_data; -scheduler._click.dhx_cal_data = function(e){ - var ret = old_click.apply(this,arguments); - var obj = scheduler.matrix[scheduler._mode]; - if (obj){ - var pos = scheduler._locate_cell_timeline(e); - if (pos){ - if (pos.scale) - scheduler.callEvent("onYScaleClick",[pos.y, obj.y_unit[pos.y], e||event]); - else - scheduler.callEvent("onCellClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]); - } - } - return ret; -}; - -scheduler.dblclick_dhx_matrix_cell = function(e){ - var obj = scheduler.matrix[scheduler._mode]; - if (obj){ - var pos = scheduler._locate_cell_timeline(e); - if (pos){ - if (pos.scale) - scheduler.callEvent("onYScaleDblClick",[pos.y, obj.y_unit[pos.y], e||event]); - else - scheduler.callEvent("onCellDblClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]); - } - } -}; -scheduler.dblclick_dhx_matrix_scell = function(e){ - return scheduler.dblclick_dhx_matrix_cell(e); -}; - -scheduler._isRender = function(mode){ - return (scheduler.matrix[scheduler._mode] && scheduler.matrix[scheduler._mode].render == mode); -}; - -scheduler.attachEvent("onCellDblClick", function (x, y, a, b, event){ - if (this.config.readonly|| (event.type == "dblclick" && !this.config.dblclick_create)) return; - - var obj = scheduler.matrix[scheduler._mode]; - var event_options = {}; - event_options['start_date'] = obj._trace_x[x]; - event_options['end_date'] = (obj._trace_x[x+1]) ? obj._trace_x[x+1] : scheduler.date.add(obj._trace_x[x], obj.x_step, obj.x_unit); - event_options[scheduler.matrix[scheduler._mode].y_property] = obj.y_unit[y].key; - scheduler.addEventNow(event_options, null, event); -}); - -scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){ - if(scheduler._isRender("cell")) { - return false; - } - return true; -}); - -})(); \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js deleted file mode 100644 index 0fa43fc3e0c..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js +++ /dev/null @@ -1,402 +0,0 @@ -/* -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"); - - -scheduler.renderCalendar=function(obj, _prev){ - var cal = null; - var date = obj.date||(new Date()); - if (typeof date == "string") - date = this.templates.api_date(date); - - if (!_prev){ - var cont = obj.container; - var pos = obj.position; - - - if (typeof cont == "string") - cont = document.getElementById(cont); - - if (typeof pos == "string") - pos = document.getElementById(pos); - if (pos && (typeof pos.left == "undefined")){ - var tpos = getOffset(pos); - pos = { - top:tpos.top + pos.offsetHeight, - left:tpos.left - }; - } - if (!cont) - cont = scheduler._get_def_cont(pos); - - cal = this._render_calendar(cont,date,obj); - cal.onclick = function(e){ - e = e||event; - var src = e.target||e.srcElement; - - if (src.className.indexOf("dhx_month_head")!=-1){ - var pname = src.parentNode.className; - if (pname.indexOf("dhx_after")==-1 && pname.indexOf("dhx_before")==-1) { - var newdate = scheduler.templates.xml_date(this.getAttribute("date")); - newdate.setDate(parseInt(src.innerHTML,10)); - scheduler.unmarkCalendar(this); - scheduler.markCalendar(this,newdate,"dhx_calendar_click"); - this._last_date=newdate; - if (this.conf.handler) this.conf.handler.call(scheduler, newdate, this); - } - } - }; - } else { - 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"); - var evs = this.getEvents(start,end); - for (var i=0; i < evs.length; i++){ - var ev = evs[i]; - var d = ev.start_date; - if (d.valueOf()=end.valueOf()) - break; - } - } - - - this._markCalendarCurrentDate(cal); - - - cal.conf = obj; - return cal; -}; -scheduler._get_def_cont = function(pos){ - if (!this._def_count){ - this._def_count = document.createElement("DIV"); - this._def_count.style.cssText = "position:absolute;z-index:10100;width:251px; height:175px;"; - this._def_count.onclick = function(e){ (e||event).cancelBubble = true; }; - document.body.appendChild(this._def_count); - } - - this._def_count.style.left = pos.left+"px"; - this._def_count.style.top = pos.top+"px"; - this._def_count._created = new Date(); - - return this._def_count; -}; -scheduler._locateCalendar=function(cal,date){ - var table=cal.childNodes[2].childNodes[0]; - if (typeof date == "string") - date = scheduler.templates.api_date(date); - - var d = cal.week_start+date.getDate()-1; - return table.rows[Math.floor(d/7)].cells[d%7].firstChild; -}; -scheduler.markCalendar=function(cal,date,css){ - this._locateCalendar(cal,date).className+=" "+css; -}; -scheduler.unmarkCalendar=function(cal,date,css){ - date=date||cal._last_date; - css=css||"dhx_calendar_click"; - if (!date) return; - var el = this._locateCalendar(cal,date); - el.className= (el.className||"").replace(RegExp(css,"g")); -}; -scheduler._week_template=function(width){ - var summ = (width || 250); - 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"; - return week_template; -}; -scheduler.updateCalendar=function(obj,sd){ - obj.conf.date = sd; - this.renderCalendar(obj.conf, obj); -}; -scheduler._mini_cal_arrows = [" ", " "]; -scheduler._render_calendar=function(obj,sd,conf, previous){ - /*store*/ - var ts = scheduler.templates; - var temp = this._cols; this._cols=[]; - var temp2 = this._mode; this._mode = "calendar"; - var temp3 = this._colsS; this._colsS = {height:0}; - var temp4 = new Date(this._min_date); - var temp5 = new Date(this._max_date); - var temp6 = new Date(scheduler._date); - var temp7 = ts.month_day; ts.month_day=ts.calendar_date; - - - sd = this.date.month_start(sd); - var week_template = this._week_template(obj.offsetWidth-1); - - var d; - if (previous) - d = previous; - else { - d = document.createElement("DIV"); - d.className="dhx_cal_container dhx_mini_calendar"; - } - d.setAttribute("date",this.templates.xml_format(sd)); - d.innerHTML="
"+week_template.innerHTML+"
"; - - d.childNodes[0].innerHTML=this.templates.calendar_month(sd); - if (conf.navigation){ - var arrow = document.createElement("DIV"); - arrow.className = "dhx_cal_prev_button"; - arrow.style.cssText="left:1px;top:2px;position:absolute;"; - arrow.innerHTML = this._mini_cal_arrows[0]; - 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"); - arrow.className = "dhx_cal_next_button"; - arrow.style.cssText="left:auto; right:1px;top:2px;position:absolute;"; - arrow.innerHTML = this._mini_cal_arrows[1]; - 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.week_start = (sd.getDay()-(this.config.start_on_monday?1:0)+7)%7; - - var dd = this.date.week_start(sd); - this._reset_month_scale(d.childNodes[2],sd,dd); - - var r=d.childNodes[2].firstChild.rows; - for (var k=r.length; k<6; k++) { - 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 <= 0 ? "0px" : (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; -}; -scheduler.destroyCalendar=function(cal,force){ - if (!cal && this._def_count && this._def_count.firstChild){ - if (force || (new Date()).valueOf() - this._def_count._created.valueOf() > 500) - cal = this._def_count.firstChild; - } - if (!cal) return; - cal.onclick=null; - cal.innerHTML=""; - if (cal.parentNode) - cal.parentNode.removeChild(cal); - if (this._def_count) - this._def_count.style.top = "-1000px"; -}; -scheduler.isCalendarVisible=function(){ - if (this._def_count && parseInt(this._def_count.style.top,10) > 0 ) - return this._def_count; - return false; -}; -scheduler.attachEvent("onTemplatesReady",function(){ - dhtmlxEvent(document.body, "click", function(){ scheduler.destroyCalendar(); }); -}); - -scheduler.templates.calendar_time = scheduler.date.date_to_str("%d-%m-%Y"); - -scheduler.form_blocks.calendar_time={ - render:function(){ - var html = ""; - - var cfg = scheduler.config; - var dt = this.date.date_part(new Date()); - if (cfg.first_hour) - dt.setHours(cfg.first_hour); - - html+=" "; - - var full_day = scheduler.config.full_day; - - return "
"+html+"  –  "+html+"
"; - }, - set_value:function(node,value,ev){ - - var inputs=node.getElementsByTagName("input"); - var selects=node.getElementsByTagName("select"); - - var _init_once = function(inp,date,number){ - inp.onclick = function(){ - scheduler.destroyCalendar(null, true); - scheduler.renderCalendar({ - position:inp, - date:new Date(this._date), - navigation:true, - handler:function(new_date){ - inp.value = scheduler.templates.calendar_time(new_date); - inp._date = new Date(new_date); - scheduler.destroyCalendar(); - if(scheduler.config.event_duration && scheduler.config.auto_end_date && number == 0) { //first element = start date - _update_minical_select(); - } - } - }); - }; - }; - - if(scheduler.config.full_day) { - if (!node._full_day){ - 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); - input.checked = isFulldayEvent; - for(var i in selects) - selects[i].disabled=input.checked; - 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 + 1); - } - function y_norm(y) { - y = parseFloat(y); - if (isNaN(y)) return "auto"; - return 100 * y / dy; - } - 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"; - dx = xh[0].offsetWidth; - return xml; - } - function de_day(node,n){ - var x = parseInt(node.style.left); - - for (var dx=0; dx < scheduler._cols.length; dx++){ - x-=scheduler._cols[dx]; - if (x<0) return dx; - } - return n; - } - function de_week(node,n){ - var y = parseInt(node.style.top); - for (var dy=0; dy < scheduler._colsS.heights.length; dy++) - if (scheduler._colsS.heights[dy]>y) return dy; - return n; - } - function xml_month(yh){ - var xml=""; - var r = yh.firstChild.rows; - for (var i = 0; i < r.length; i++) { - var days = []; - for (var j = 0; j < r[i].cells.length; j++){ - /* var dd = r[i].cells[j]; - var css = dd.className; - - if (css!=" " && css!="dhx_now ") - days.push(""); - else*/ - days.push(r[i].cells[j].firstChild.innerHTML); - } - - xml += "\n"; - dy = yh.firstChild.rows[0].cells[0].offsetHeight; - } - return xml; - } - function xml_top(profile) { - var xml = ""; - - if (scheduler._mode == "agenda"){ - var xh = scheduler._els.dhx_cal_header[0].childNodes[0].childNodes; - - 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_month_scale(xh[i].childNodes[1].childNodes); - xml+=xml_month(xh[i].childNodes[2]); - xml+=""; - }; - } else { - xml += ""; - var xh = scheduler._els.dhx_cal_header[0].childNodes; - xml+=xml_month_scale(xh); - xml += ""; - - var yh = scheduler._els.dhx_cal_data[0]; - 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]; - while (yh.className.indexOf("dhx_scale_holder") == -1) - yh = yh.previousSibling; - yh = yh.childNodes; - - xml += ""; - for (var i = 0; i < yh.length; i++) - xml += "\n"; - xml += ""; - dy = yh[0].offsetHeight; - } - } - - xml += ""; - return xml; - } - function get_style(node, style){ - return (window.getComputedStyle?(window.getComputedStyle(node, null)[style]):(node.currentStyle?node.currentStyle[style]:null))||""; - } - function xml_body() { - var xml = ""; - var evs = scheduler._rendered; - - if (scheduler._mode == "agenda"){ - for (var i=0; i < evs.length; i++) - 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++) { - var d = evs[i].start_date; - if (d.valueOf()"; - d = scheduler.date.add(d,1,"day"); - if (d.valueOf()>=scheduler._max_date.valueOf()) - break; - } - } - } else { - for (var i = 0; i < evs.length; i++) { - var zx = x_norm(evs[i].style.left); - 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 (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; - - day = de_day(evs[i],day); - week = de_week(evs[i],week); - } - - xml += "\n"; - - - if (e_type == "event") { - xml += "
"; - var text_color = colors?get_style(evs[i].childNodes[2],"color"):""; - var bg_color = colors?get_style(evs[i].childNodes[2],"backgroundColor"):""; - xml += ""; - } else { - var text_color = colors?get_style(evs[i],"color"):""; - var bg_color = colors?get_style(evs[i],"backgroundColor"):""; - xml += ""; - } - xml += "
"; - } - } - return xml; - } - function xml_end(){ - var xml = "
"; - return xml; - } - - var uid = (new Date()).valueOf(); - var d=document.createElement("div"); - d.style.display="none"; - document.body.appendChild(d); - - 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; -} \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js deleted file mode 100644 index 512cafebd5f..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js +++ /dev/null @@ -1,160 +0,0 @@ -/* -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(event, text) { //browser event, text to display - 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 offsetleft = 0; - var offsettop = 0; - var pobj = scheduler._obj; - if(pobj.offsetParent) { - do { - offsetleft += pobj.offsetLeft; - offsettop += pobj.offsetTop; - } while (pobj = pobj.offsetParent); - } - - var actual_x = pos.x + (dhxTooltip.config.delta_x||0) - offsetleft; - var actual_y = pos.y - (dhxTooltip.config.delta_y||0) - offsettop; - - tooltip_div_style.visibility = "hidden"; - - if(tooltip_div_style.removeAttribute) { - tooltip_div_style.removeAttribute("right"); - tooltip_div_style.removeAttribute("bottom"); - } else { - tooltip_div_style.removeProperty("right"); - tooltip_div_style.removeProperty("bottom"); - } - - 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 ((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 - 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 - tooltip_div_style.left = (pos.x + Math.abs(dhxTooltip.config.delta_x||0)) + "px"; - } else { // normal situation - tooltip_div_style.left = actual_x + "px"; - } - } - - 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 - 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 - tooltip_div_style.top = (pos.y + Math.abs(dhxTooltip.config.delta_y||0)) + "px"; - } - else { // normal situation - tooltip_div_style.top = actual_y + "px"; - } - } - - tooltip_div_style.visibility = "visible"; -}; - -dhtmlXTooltip.hide = function() { - if(this.tooltip.parentNode) { - this.tooltip.parentNode.removeChild(this.tooltip); - } -}; -dhtmlXTooltip.delay = function(method, object, params, delay) { - if(this.tooltip._timeout_id) { - window.clearTimeout(this.tooltip._timeout_id); - } - this.tooltip._timeout_id = setTimeout(function(){ - var ret = method.apply(object,params); - method = object = params = null; - return ret; - },delay||this.config.timeout_to_display); -}; - -dhtmlXTooltip.isTooltip = function(node){ - var res = false; - while (node && !res) { - res = (node.className == this.tooltip.className); - node=node.parentNode; - } - return res; -}; - -dhtmlXTooltip.position = function(ev) { - ev = ev || window.event; - if(ev.pageX || ev.pageY) //FF, KHTML - return {x:ev.pageX, y:ev.pageY}; - //IE - var d = ((dhtmlx._isIE)&&(document.compatMode != "BackCompat"))?document.documentElement:document.body; - return { - x:ev.clientX + d.scrollLeft - d.clientLeft, - y:ev.clientY + d.scrollTop - d.clientTop - }; -}; - -scheduler.attachEvent("onMouseMove", function(event_id, e){ // (scheduler event_id, browser event) - var ev = window.event||e; - var target = ev.target||ev.srcElement; - var dhxTooltip = dhtmlXTooltip; - - 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); - - var evt = undefined; - if (_isIE) { //make a copy of event, will be used in timed call - evt = document.createEventObject(ev); - } - - dhxTooltip.delay(dhxTooltip.show, dhxTooltip, [(evt||ev), text]); // showing tooltip - } else { - 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); -}; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js deleted file mode 100644 index 7f85903674d..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js +++ /dev/null @@ -1,17 +0,0 @@ -/* -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("onLightBox",function(){ - if (this._cover){ - try{ - this._cover.style.height = this.expanded ? "100%" : ((document.body.parentNode||document.body).scrollHeight+"px"); - } catch(e) {}; - } -}); - -scheduler.form_blocks.select.set_value=function(node,value,ev){ - if (typeof value == "undefined" || value === "") - value = (node.firstChild.options[0]||{}).value; - node.firstChild.value=value||""; -}; \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/glossy.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/glossy.css deleted file mode 100644 index 51c4e99d668..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/glossy.css +++ /dev/null @@ -1,294 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/ical.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ical.js deleted file mode 100644 index 60dbfef8626..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ical.js +++ /dev/null @@ -1,69 +0,0 @@ -/* -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,"")); - if (!data.length) return; - - //unfolding - data[0]=data[0].replace(/[\r\n]+(?=[a-z \t])/g," "); - //drop property - data[0]=data[0].replace(/\;[^:\r\n]*/g,""); - - - var incoming=[]; - var match; - var event_r = RegExp("(?:"+this.e_start+")([^\f]*?)(?:"+this.e_end+")","g"); - while (match=event_r.exec(data)){ - var e={}; - var param; - var param_r = /[^\r\n]+[\r\n]+/g; - while (param=param_r.exec(match[1])) - this.parse_param(param.toString(),e); - if (e.uid && !e.id) e.id = e.uid; //fallback to UID, when ID is not defined - incoming.push(e); - } - return incoming; - }, - parse_param:function(str,obj){ - var d = str.indexOf(":"); - if (d==-1) return; - - var name = str.substr(0,d).toLowerCase(); - var value = str.substr(d+1).replace(/\\\,/g,",").replace(/[\r\n]+$/,""); - if (name=="summary") - name="text"; - else if (name=="dtstart"){ - name = "start_date"; - value = this.parse_date(value,0,0); - } - else if (name=="dtend"){ - name = "end_date"; - if (obj.start_date && obj.start_date.getHours()==0) - value = this.parse_date(value,24,00); - else - value = this.parse_date(value,23,59); - } - obj[name]=value; - }, - parse_date:function(value,dh,dm){ - var t = value.split("T"); - if (t[1]){ - dh=t[1].substr(0,2); - dm=t[1].substr(2,2); - } - var dy = t[0].substr(0,4); - var dn = parseInt(t[0].substr(4,2),10)-1; - var dd = t[0].substr(6,2); - if (scheduler.config.server_utc && !t[1]) { // if no hours/minutes were specified == full day event - return new Date(Date.UTC(dy,dn,dd,dh,dm)) ; - } - return new Date(dy,dn,dd,dh,dm); - }, - c_start:"BEGIN:VCALENDAR", - e_start:"BEGIN:VEVENT", - e_end:"END:VEVENT", - c_end:"END:VCALENDAR" -}; \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/layout.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/layout.css deleted file mode 100644 index a888f4d0c79..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/layout.css +++ /dev/null @@ -1,194 +0,0 @@ -/* -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; - font-size:8pt; - position:relative; - overflow:hidden; -} -.dhx_cal_container div{ - -moz-user-select:none; - -moz-user-select:-moz-none; -} -.dhx_cal_navline{ - height:20px; - position:absolute; - z-index:3; - width:750px; - color:#2F3A48; -} -.dhx_cal_navline div{ - position:absolute; - top:2px; - white-space:nowrap; -} -.dhx_cal_navline .dhx_cal_date{ - font-weight:600; - left:210px; -} -.dhx_cal_button .dhx_left_bg{ - width:1px; overflow:hidden; - height:17px; - z-index:20; - top:0px; -} -.dhx_cal_prev_button{ - background-image:url(imgs/buttons.png); - background-position:0px 0px; - width:29px; height:17px; - left:50px; cursor:pointer; -} -.dhx_cal_next_button{ - background-image:url(imgs/buttons.png); - background-position: -30px 0px; - width:29px; height:17px; - left:80px; cursor:pointer; -} -.dhx_cal_today_button{ - background-image:url(imgs/buttons.png); - background-position: -60px 0px; - width:75px; height:17px; - left:112px; cursor:pointer; - text-align:center; - text-decoration:underline; -} -.dhx_cal_tab{ - width:59px; height:19px; - text-align:center; - text-decoration:underline; - 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{ - text-decoration:none; - - cursor:default; - font-weight:bold; - border: 1px dotted #586A7E; - border-bottom: 0; - background-color: #C2D5FC; -} -.dhx_cal_header{ - position:absolute; - left:10px; top:23px; - width:750px; - border-top:1px dotted #8894A3; - border-right:1px dotted #8894A3; - z-index:2; - overflow:hidden; - color:#2F3A48; -} -.dhx_cal_data{ - border-top:1px dotted #8894A3; - position:absolute; - top:44px; - width:600px; - overflow-y:auto; - overflow-x:hidden; -} -.dhx_scale_bar{ - position:absolute; - text-align:center; - background-color:#C2D5FC; - padding-top:3px; - border-left:1px dotted #586A7E; -} -.dhx_scale_holder{ - position:absolute; - border-right:1px dotted #586A7E; - background-image:url(imgs/databg.png); -} -.dhx_scale_holder_now{ - position:absolute; - border-right:1px dotted #586A7E; - background-image:url(imgs/databg_now.png); -} -.dhx_scale_hour{ - height:41px; - width:50px; - border-bottom:1px dotted #8894A3; - background-color:#C2D5FC; - text-align:center; - line-height:40px; - color:#586A7E; - overflow:hidden; -} -.dhx_month_head{ - background-color:#EBEFF4; - color:#2F3A48; - border-right:1px dotted #586A7E; - height:18px; - padding-right:5px; - padding-top:3px; - text-align:right; -} -.dhx_month_body{ - border-right:1px dotted #586A7E; - border-bottom:1px dotted #586A7E; - background-color:#FFFFFF; -} -.dhx_now .dhx_month_body{ - background-color:#E2EDFF; -} -.dhx_after .dhx_month_body, .dhx_before .dhx_month_body{ - background-color:#ECECEC; -} -.dhx_after .dhx_month_head, .dhx_before .dhx_month_head{ - background-color:#E2E3E6; - color:#94A6BB; -} -.dhx_now .dhx_month_head{ - background-color:#D1DEF4; - font-weight:bold; -} -.dhx_cal_drag{ - position:absolute; - z-index:9999; - background-color:#FFE763; - border:1px solid #B7A543; - opacity:0.5; - filter:alpha(opacity=50); -} -.dhx_loading{ - position:absolute; - width:128px; - height:15px; - background-image:url(imgs/loading.gif); - z-index:9999; -} -.dhx_multi_day_icon, .dhx_multi_day{ - background-color:#E1E6FF; - background-repeat:no-repeat; - 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); -} -.dhx_multi_day_icon_small{ - background-image:url(imgs/clock_small.gif); -} -.dhx_multi_day_icon, .dhx_multi_day_icon_small{ - background-position: center center; - background-color:#E1E6FF; - background-repeat:no-repeat; - border-bottom:1px dotted #8894A3; - border-right:1px dotted #8894A3; -} -.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container { - background-color: #d0e5ff; -} \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css deleted file mode 100644 index afb83295be3..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css +++ /dev/null @@ -1,239 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js deleted file mode 100644 index 7749ff6708c..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js +++ /dev/null @@ -1,466 +0,0 @@ -/* -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"; - return "
"; - }, - set_value:function(node,value,ev){ - node.firstChild.value=value||""; - }, - get_value:function(node,ev){ - return node.firstChild.value; - }, - focus:function(node){ - var a=node.firstChild; a.select(); a.focus(); - } - }, - select:{ - render:function(sns){ - var height=(sns.height||"23")+"px"; - var html="
"; - return html; - }, - set_value:function(node,value,ev){ - if (typeof value == "undefined") - value = (node.firstChild.options[0]||{}).value; - node.firstChild.value=value||""; - }, - get_value:function(node,ev){ - return node.firstChild.value; - }, - focus:function(node){ - var a=node.firstChild; if (a.select) a.select(); a.focus(); - } - }, - time:{ - render:function(){ - //hours - var cfg = scheduler.config; - var dt = this.date.date_part(new Date()); - var last = 24*60, first = 0; - if(scheduler.config.limit_time_select){ - last = 60*cfg.last_hour+1; - first = 60*cfg.first_hour; - dt.setHours(cfg.first_hour); - } - - var html=" "; - - return "
"+html+"  –  "+html+"
"; - - }, - set_value:function(node,value,ev){ - - - var s=node.getElementsByTagName("select"); - - if(scheduler.config.full_day) { - if (!node._full_day){ - 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); - input.checked = isFulldayEvent; - - for(var k in s) - s[k].disabled=input.checked; - - input.onclick = function(){ - if(input.checked) { - var start_date = new Date(ev.start_date); - var end_date = new Date(ev.end_date); - - scheduler.date.date_part(start_date); - 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) { - function _update_lightbox_select() { - ev.start_date=new Date(s[3].value,s[2].value,s[1].value,0,s[0].value); - ev.end_date.setTime(ev.start_date.getTime() + (scheduler.config.event_duration * 60 * 1000)); - _fill_lightbox_select(s,4,ev.end_date); - } - for(var i=0; i<4; i++) { - s[i].onchange = _update_lightbox_select; - } - } - - function _fill_lightbox_select(s,i,d){ - s[i+0].value=Math.round((d.getHours()*60+d.getMinutes())/scheduler.config.time_step)*scheduler.config.time_step; - s[i+1].value=d.getDate(); - s[i+2].value=d.getMonth(); - s[i+3].value=d.getFullYear(); - } - - _fill_lightbox_select(s,0,ev.start_date); - _fill_lightbox_select(s,4,ev.end_date); - }, - get_value:function(node,ev){ - s=node.getElementsByTagName("select"); - ev.start_date=new Date(s[3].value,s[2].value,s[1].value,0,s[0].value); - ev.end_date=new Date(s[7].value,s[6].value,s[5].value,0,s[4].value); - if (ev.end_date<=ev.start_date) - ev.end_date=scheduler.date.add(ev.start_date,scheduler.config.time_step,"minute"); - }, - focus:function(node){ - node.getElementsByTagName("select")[0].focus(); - } - } -}; -scheduler.showCover=function(box){ - if (box){ - box.style.display="block"; - - 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; - var box = this._get_lightbox(); - 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"); - if (scheduler.templates.lightbox_header){ - s[1].innerHTML=""; - s[2].innerHTML=scheduler.templates.lightbox_header(ev.start_date,ev.end_date,ev); - } else { - s[1].innerHTML=this.templates.event_header(ev.start_date,ev.end_date,ev); - s[2].innerHTML=(this.templates.event_bar_text(ev.start_date,ev.end_date,ev)||"").substr(0,70); //IE6 fix - } - - - var sns = this.config.lightbox.sections; - 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]); - 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); - 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); - var box=this._get_lightbox(); - - this._lightbox_out(ev); - - ev._timed=this.is_one_day_event(ev); - this.setEvent(ev.id,ev); - 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])) - return; - 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) - scheduler.render_view_data(); - this.hideCover(box); -}; -scheduler.resetLightbox = function(){ - if (scheduler._lightbox) - scheduler._lightbox.parentNode.removeChild(scheduler._lightbox); - scheduler._lightbox = null; -}; -scheduler.cancel_lightbox=function(){ - this.callEvent("onEventCancel",[this._lightbox_id, this._new_event]); - this.endLightbox(false); - this.hide_lightbox(); -}; -scheduler._init_lightbox_events=function(){ - this._get_lightbox().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_save_btn": - scheduler.save_lightbox(); - break; - case "dhx_delete_btn": - var c=scheduler.locale.labels.confirm_deleting; - if (!c||confirm(c)) { - scheduler.deleteEvent(scheduler._lightbox_id); - scheduler._new_event = null; //clear flag, if it was unsaved event - scheduler.hide_lightbox(); - } - break; - case "dhx_cancel_btn": - scheduler.cancel_lightbox(); - break; - - default: - 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().onkeydown=function(e){ - switch((e||event).keyCode){ - case scheduler.keys.edit_save: - if ((e||event).shiftKey) return; - scheduler.save_lightbox(); - break; - case scheduler.keys.edit_cancel: - scheduler.cancel_lightbox(); - break; - default: - break; - } - }; -}; -scheduler.setLightboxSize=function(){ - var d = this._lightbox; - if (!d) return; - - var con = d.childNodes[1]; - con.style.height="0px"; - 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._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"; - 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; - 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 (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"); - //sections - ds[1].innerHTML=html; - //sizes - this.setLightboxSize(); - - this._init_lightbox_events(this); - d.style.display="none"; - d.style.visibility="visible"; - } - return this._lightbox; -}; -scheduler._lightbox_template="
 
"; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/load.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/load.js deleted file mode 100644 index 6d1579862ff..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/load.js +++ /dev/null @@ -1,202 +0,0 @@ -/* -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; - url+=(url.indexOf("?")==-1?"?":"&")+"timeshift="+(new Date()).getTimezoneOffset(); - if (this.config.prevent_cache) url+="&uid="+this.uid(); - var to; - from=from||this._date; - - if (this._load_mode){ - var lf = this.templates.load_format; - - from = this.date[this._load_mode+"_start"](new Date(from.valueOf())); - while (from>this._min_date) from=this.date.add(from,-1,this._load_mode); - to = from; - - var cache_line = true; - while (tofrom && this._loaded[lf(temp_to)]); - - if (to<=from) - return false; //already loaded - dhtmlxAjax.get(url+"&from="+lf(from)+"&to="+lf(to),function(l){scheduler.on_load(l);}); - while(from
'; - diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js deleted file mode 100644 index 310f5c508fb..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js +++ /dev/null @@ -1,157 +0,0 @@ -/* -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=' -
-
-
-
-
-
- -
-
-
-
- - -
- - - Den každého - Měsíc
- - - každý - Měsíc
-
- -
-
-
-
-
- - Události
- -
-
-
-
-
-
'; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js deleted file mode 100644 index 1d3e272a936..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js deleted file mode 100644 index 71929e988ea..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js deleted file mode 100644 index d3d18ab4358..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js deleted file mode 100644 index 99bb3fdbfa5..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js deleted file mode 100644 index 02184e9b601..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js deleted file mode 100644 index d11418acba3..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js deleted file mode 100644 index a40b63939d3..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js deleted file mode 100644 index 65078dbc0b7..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js deleted file mode 100644 index 314e1b083ad..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js deleted file mode 100644 index f3f27bf4eb1..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js deleted file mode 100644 index c15c10cbea4..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js deleted file mode 100644 index 0bff7bde13a..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js deleted file mode 100644 index bb16adafb12..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js deleted file mode 100644 index fbe032f3e32..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js +++ /dev/null @@ -1,6 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js deleted file mode 100644 index f199ae683e4..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js +++ /dev/null @@ -1,45 +0,0 @@ -/* -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ктябрь", "Ноябрь", "Декабрь"], - month_short:["Янв", "Фев", "Maр", "Aпр", "Maй", "Июн", "Июл", "Aвг", "Сен", "Окт", "Ноя", "Дек"], - day_full:[ "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"], - day_short:["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"] - }, - labels:{ - dhx_cal_today_button: "Сегодня", - day_tab:"День", - week_tab:"Неделя", - month_tab:"Месяц", - new_event:"Новое событие", - icon_save:"Сохранить", - icon_cancel:"Отменить", - icon_details:"Детали", - icon_edit:"Изменить", - icon_delete:"Удалить", - confirm_closing:"",//Ваши изменения будут потеряны, продолжить? - confirm_deleting:"Событие будет удалено безвозвратно, продолжить?", - section_description:"Описание", - section_time:"Период времени", - full_day:"Весь день", - - confirm_recurring:"Вы хотите изменить всю серию повторяющихся событий?", - section_recurring:"Повторение", - button_recurring:"Отключено", - button_recurring_open:"Включено", - - /*agenda view extension*/ - agenda_tab:"Список", - date:"Дата", - description:"Описание", - - /*year view extension*/ - year_tab:"Год", - - /*week agenda view extension*/ - week_agenda_tab: "Список" - } -} diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js deleted file mode 100644 index 1225b6ece32..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js +++ /dev/null @@ -1,47 +0,0 @@ -/* -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"], - month_short:["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], - day_full:["Nedelja", "Ponedeljek", "Torek", "Sreda", "etrtek", "Petek", "Sobota"], - day_short:["Ne", "Po", "To", "Sre", "e", "Pe", "So"] - }, - labels:{ - dhx_cal_today_button:"Danes", - day_tab:"Dan", - week_tab:"Teden", - month_tab:"Mesec", - new_event:"Nov dogodek", - icon_save:"Shrani", - icon_cancel:"Preklii", - icon_details:"Podrobnosti", - icon_edit:"Uredi", - icon_delete:"Zbrii", - confirm_closing:"",//Vae spremembe bodo izgubljene, elite nadaljevati ? - confirm_deleting:"Dogodek bo izbrisan trajno, elite nadaljevati?", - section_description:"Opis", - section_time:"asovno obdobje", - full_day:"Ves dan", - - /*recurring events*/ - confirm_recurring:"Ali elite urediti celoten nabor ponavljajoih dogodkov?", - section_recurring:"Ponovi dogodek", - button_recurring:"Onemogoi", - button_recurring_open:"Omogoi", - - /*agenda view extension*/ - agenda_tab:"Agenda", - date:"Datum", - description:"Opis", - - /*year view extension*/ - year_tab:"Leto", - - /*week agenda view extension*/ - week_agenda_tab: "Agenda" - } -} - diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js deleted file mode 100644 index bcb120831e9..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js +++ /dev/null @@ -1,52 +0,0 @@ -/* -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 -To use it on other terms please contact us at sales@dhtmlx.com -*/ - -scheduler.locale={ - date:{ - month_full:["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], - month_short:["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - day_full:["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"], - day_short:["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"] - }, - labels:{ - dhx_cal_today_button:"Idag", - day_tab:"Dag", - week_tab:"Vecka", - month_tab:"Månad", - new_event:"Ny händelse", - icon_save:"Spara", - icon_cancel:"Ångra", - icon_details:"Detajer", - icon_edit:"Ändra", - icon_delete:"Ta bort", - confirm_closing:"",//Dina förändingar kommer gå förlorade, är du säker? - confirm_deleting:"Är du säker på att du vill ta bort händelsen permanent?", - section_description:"Beskrivning", - section_time:"Tid", - full_day:"Hela dagen", - - /*recurring events*/ - confirm_recurring:"Vill du redigera hela serien med repeterande händelser?", - section_recurring:"Upprepa händelse", - button_recurring:"Inaktiverat", - button_recurring_open:"Aktiverat", - - /*agenda view extension*/ - agenda_tab:"Dagordning", - date:"Datum", - description:"Beskrivning", - - /*year view extension*/ - year_tab:"År", - - /*week agenda view extension*/ - week_agenda_tab: "Dagordning" - } -} \ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js deleted file mode 100644 index 5548a6f0dfc..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js +++ /dev/null @@ -1,47 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js deleted file mode 100644 index 4009969d298..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js +++ /dev/null @@ -1,47 +0,0 @@ -/* -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:["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], - month_short:["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], - day_full:["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"], - day_short:["Нед", "Пон", "Вів", "Сер", "Чет", "Птн", "Суб"] - }, - labels:{ - dhx_cal_today_button:"Сьогодні", - day_tab:"День", - week_tab:"Тиждень", - month_tab:"Місяць", - new_event:"Нова подія", - icon_save:"Зберегти", - icon_cancel:"Відміна", - icon_details:"Деталі", - icon_edit:"Редагувати", - icon_delete:"Вилучити", - confirm_closing:"",//Ваші зміни втратяться. Ви впевнені ? - confirm_deleting:"Подія вилучиться назавжди. Ви впевнені?", - section_description:"Опис", - section_time:"Часовий проміжок", - full_day:"Весь день", - - /*recurring events*/ - confirm_recurring:"Хочете редагувати весь перелік повторюваних подій?", - section_recurring:"Повторювана подія", - button_recurring:"Відключено", - button_recurring_open:"Включено", - - /*agenda view extension*/ - agenda_tab:"Перелік", - date:"Дата", - description:"Опис", - - /*year view extension*/ - year_tab:"Рік", - - /*week agenda view extension*/ - week_agenda_tab: "Перелік" - } -} - diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.css deleted file mode 100644 index 8f543f20fee..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.css +++ /dev/null @@ -1,380 +0,0 @@ -/* -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/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.js deleted file mode 100644 index 4455ef939be..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.js +++ /dev/null @@ -1,626 +0,0 @@ -/* -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(startcday) - return sd.setDate(sd.getDate()+list[i]*1-cday-(size?cor:cor2)); - } - this.transpose_day_week(sd,list,cor+size,null,cor); -}; -scheduler.transpose_type = function(type){ - var f = "transpose_"+type; - if (!this.date[f]) { - var str = type.split("_"); - var day = 60*60*24*1000; - var gf = "add_"+type; - var step = this.transponse_size[str[0]]*str[1]; - - if (str[0]=="day" || str[0]=="week"){ - var days = null; - if (str[4]){ - days=str[4].split(","); - if (scheduler.config.start_on_monday){ - for (var i=0; i < days.length; i++) - days[i]=(days[i]*1)||7; - days.sort(); - } - } - - - this.date[f] = function(nd,td){ - var delta = Math.floor((td.valueOf()-nd.valueOf())/(day*step)); - if (delta>0) - nd.setDate(nd.getDate()+delta*step); - if (days) - scheduler.transpose_day_week(nd,days,1,step); - }; - this.date[gf] = function(sd,inc){ - var nd = new Date(sd.valueOf()); - if (days){ - for (var count=0; count < inc; count++) - scheduler.transpose_day_week(nd,days,0,step); - } else - nd.setDate(nd.getDate()+inc*step); - - return nd; - }; - } - else if (str[0]=="month" || str[0]=="year"){ - this.date[f] = function(nd,td){ - var delta = Math.ceil(((td.getFullYear()*12+td.getMonth()*1)-(nd.getFullYear()*12+nd.getMonth()*1))/(step)); - if (delta>=0) - nd.setMonth(nd.getMonth()+delta*step); - if (str[3]) - scheduler.date.day_week(nd,str[2],str[3]); - }; - this.date[gf] = function(sd,inc){ - var nd = new Date(sd.valueOf()); - nd.setMonth(nd.getMonth()+inc*step); - if (str[3]) - scheduler.date.day_week(nd,str[2],str[3]); - return nd; - }; - } - } -}; -scheduler.repeat_date=function(ev,stack,non_render,from,to){ - from = from||this._min_date; - to = to||this._max_date; - - var td = new Date(ev.start_date.valueOf()); - if (!ev.rec_pattern && ev.rec_type) - ev.rec_pattern = ev.rec_type.split("#")[0]; - - this.transpose_type(ev.rec_pattern); - scheduler.date["transpose_"+ev.rec_pattern](td, from); - while (td0) - copy.end_date = new Date(td.valueOf()+ev.event_length*1000-shift*60*1000); - else { - copy.end_date = new Date(copy.end_date.valueOf() + shift*60*1000); - } - } - - copy._timed=this.is_one_day_event(copy); - - if (!copy._timed && !this._table_view && !this.config.multi_day) return; - stack.push(copy); - - if(!non_render){ - this._events[copy.id] = copy; - this._rec_temp.push(copy); - } - - } else - if (non_render) stack.push(ch); - - td = this.date.add(td,1,ev.rec_pattern); - } -}; - -scheduler.getRecDates = function(id, max){ - var ev = typeof id == "object" ? id : scheduler.getEvent(id); - var count = 0; - var result = []; - max = max || 1000; - - var td = new Date(ev.start_date.valueOf()); - var from = new Date(td.valueOf()); - - if(!ev.rec_type) { - return [ { start_date: ev.start_date, end_date: ev.end_date } ]; - } - this.transpose_type(ev.rec_pattern); - scheduler.date["transpose_"+ev.rec_pattern](td, from); - - while (tdfrom){ - if (ev.rec_pattern){ - if (ev.rec_pattern=="none") continue; - var sev = []; - this.repeat_date(ev,sev,true,from,to); - 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); - } - } - } - return result; -}; - -scheduler.config.repeat_date="%m.%d.%Y"; -scheduler.config.lightbox.sections=[ - {name:"description", height:130, map_to:"text", type:"textarea" , focus:true}, - {name:"recurring", type:"recurring", map_to:"rec_type", button:"recurring"}, - {name:"time", height:72, type:"time", map_to:"auto"} -]; -//drop secondary attributes -scheduler._copy_dummy=function(ev){ - this.start_date=new Date(this.start_date); - this.end_date=new Date(this.end_date); - this.event_length=this.event_pid=this.rec_pattern=this.rec_type=this._timed=null; -}; diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html deleted file mode 100644 index 078f4415777..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html +++ /dev/null @@ -1,57 +0,0 @@ -
-
-
-
-
-
- -
-
-
- - -
- day everymonth
- everymonth
-
- -
-
-
-
- occurrences
-
-
-
-
-
-
\ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html deleted file mode 100644 index c47f485b80f..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html +++ /dev/null @@ -1,57 +0,0 @@ -
-
-
-
-
-
- -
-
-
- - -
- 日 每
-
-
- -
-
-
-
- 次结束
-
-
-
-
-
-
\ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html deleted file mode 100644 index bb70c5aac79..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html +++ /dev/null @@ -1,60 +0,0 @@ -
-
-
-
-
-
- -
-
-
- - -
- - Tag eines jedenMonats
- jedenMonats
-
- -
-
-
-
- Ereignissen
-
-
-
-
-
-
\ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html deleted file mode 100644 index eddddee99aa..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html +++ /dev/null @@ -1,57 +0,0 @@ -
-
-
-
-
-
- -
-
-
- - -
- ημέρα κάθεμήνα
- κάθεμήνα
-
- -
-
-
-
- επαναλήψεις
-
-
-
-
-
-
\ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html deleted file mode 100644 index 94549432bc8..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html +++ /dev/null @@ -1,57 +0,0 @@ -
-
-
-
-
-
- -
-
-
- - -
- dia cada mes
- cadames
-
- -
-
-
-
- occurencias
-
-
-
-
-
-
\ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html deleted file mode 100644 index 281dbe7afc4..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html +++ /dev/null @@ -1,57 +0,0 @@ -
-
-
-
-
-
- -
-
-
- - -
- jour chaquemois
- chaquemois
-
- -
-
-
-
- occurrences
-
-
-
-
-
-
\ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html deleted file mode 100644 index 1d92cb4d420..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html +++ /dev/null @@ -1,57 +0,0 @@ -
-
-
-
-
-
- -
-
-
- - -
- giorno ognimese
- ognimese
-
- -
-
-
-
- occorenze
-
-
-
-
-
-
\ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html deleted file mode 100644 index d9e563191f6..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html +++ /dev/null @@ -1,65 +0,0 @@ -
-
-
-
-
-
- -
-
-
- - -
- dag iederemaanden
- iederemaanden
-
- -
-
-
-
- keren
-
-
-
-
-
-
diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html deleted file mode 100644 index becab2809c7..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html +++ /dev/null @@ -1,57 +0,0 @@ -
-
-
-
-
-
- -
-
-
- - -
- числа каждый месяц
- каждый месяц
-
- -
-
-
-
- повторений
-
-
-
-
-
-
\ No newline at end of file diff --git a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js deleted file mode 100644 index 80018266f24..00000000000 --- a/addons/web_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js +++ /dev/null @@ -1,714 +0,0 @@ -/* -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=[]; - this._scroll=true; - this._quirks=(_isIE && document.compatMode == "BackCompat"); - this._quirks7=(_isIE && navigator.appVersion.indexOf("MSIE 8")==-1); - - this.get_elements(); - this.init_templates(); - this.set_actions(); - dhtmlxEvent(window,"resize",function(){ - window.clearTimeout(scheduler._resize_timer); - scheduler._resize_timer=window.setTimeout(function(){ - if (scheduler.callEvent("onSchedulerResize",[])) - scheduler.update_view(); - }, 100); - }); - this.set_sizes(); - scheduler.callEvent('onSchedulerReady', []); - this.setCurrentView(date,mode); -}; -scheduler.xy={ - nav_height:22, - min_event_height:40, - scale_width:50, - bar_height:20, - scroll_width:18, - scale_height:20, - month_scale_height:20, - menu_width:25, - margin_top:0, - margin_left:0, - editor_width:140 -}; -scheduler.keys={ - edit_save:13, - edit_cancel:27 -}; -scheduler.set_sizes=function(){ - var w = this._x = this._obj.clientWidth-this.xy.margin_left; - var h = this._y = this._obj.clientHeight-this.xy.margin_top; - - //not-table mode always has scroll - need to be fixed in future - var scale_x=this._table_view?0:(this.xy.scale_width+this.xy.scroll_width); - var scale_s=this._table_view?-1:this.xy.scale_width; - - this.set_xy(this._els["dhx_cal_navline"][0],w,this.xy.nav_height,0,0); - this.set_xy(this._els["dhx_cal_header"][0],w-scale_x,this.xy.scale_height,scale_s,this.xy.nav_height+(this._quirks?-1:1)); - //to support alter-skin, we need a way to alter height directly from css - var actual_height = this._els["dhx_cal_navline"][0].offsetHeight; - if (actual_height > 0) this.xy.nav_height = actual_height; - - 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"; - if (arguments.length>3){ - 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"); - for (var i=0; i < els.length; i++){ - var name=els[i].className; - if (!this._els[name]) this._els[name]=[]; - this._els[name].push(els[i]); - - //check if name need to be changed - 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.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; - this.editStop(false); - 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, - date: this._date, - min_date: this._min_date, - max_date: this._max_date, - editor_id: this._edit_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); - - e = e || event; - if ((id && !scheduler.callEvent("onClick",[id,e])) ||scheduler.config.readonly) return; - - if (id) { - scheduler.select(id); - var mask = trg.className; - if (mask.indexOf("_icon")!=-1) - scheduler._click.buttons[mask.split(" ")[1].replace("icon_","")](id); - } else - scheduler._close_not_saved(); - }, - dhx_cal_prev_button:function(){ - scheduler._click.dhx_cal_next_button(0,-1); - }, - dhx_cal_next_button:function(dummy,step){ - scheduler.setCurrentView(scheduler.date.add( //next line changes scheduler._date , but seems it has not side-effects - scheduler.date[scheduler._mode+"_start"](scheduler._date),(step||1),scheduler._mode)); - }, - dhx_cal_today_button:function(){ - scheduler.setCurrentView(new Date()); - }, - dhx_cal_tab:function(){ - var name = this.getAttribute("name"); - var mode = name.substring(0, name.search("_tab")); - scheduler.setCurrentView(scheduler._date,mode); - }, - buttons:{ - "delete":function(id){ var c=scheduler.locale.labels.confirm_deleting; if (!c||confirm(c)) scheduler.deleteEvent(id); }, - edit:function(id){ scheduler.edit(id); }, - save:function(id){ scheduler.editStop(true); }, - details:function(id){ scheduler.showLightbox(id); }, - cancel:function(id){ scheduler.editStop(false); } - } -}; -scheduler.addEventNow=function(start,end,e){ - var base = {}; - if (start && start.constructor.toString().match(/object/i) !== null){ - 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; - } - 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||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]); - this._loading=false; - - 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; - var name = src.className.split(" ")[0]; - switch(name){ - 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; - start = this._correct_shift(start); - 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); - if (!this.callEvent("onDblClick",[id,e])) return; - if (this.config.details_on_dblclick || this._table_view || !this.getEvent(id)._timed) - this.showLightbox(id); - else - this.edit(id); - break; - case "": - if (src.parentNode) - return scheduler._on_dbl_click(e,src.parentNode); - default: - var t = this["dblclick_"+name]; - if (t) t.call(this,e); - break; - } -}; - -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); - 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); - 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; -} -scheduler._close_not_saved=function(){ - if (new Date().valueOf()-(scheduler._new_event||0) > 500 && scheduler._edit_id){ - var c=scheduler.locale.labels.confirm_closing; - 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 || 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(); - - this._drag_pos=pos; - - if (this._drag_mode=="create"){ - this._close_not_saved(); - this._loading=true; //will be ignored by dataprocessor - - var start=this._min_date.valueOf()+(pos.y*this.config.time_step+(this._table_view?0:pos.x)*24*60)*60000; - //if (this._mode != "week" && this._mode != "day") - start = this._correct_shift(start); - - if (!this._drag_start){ - this._drag_start=start; return; - } - var end = start; - if (end==this._drag_start) return; - - this._drag_id=this.uid(); - this.addEvent(new Date(this._drag_start), new Date(end),this.locale.labels.new_event,this._drag_id, pos.fields); - - this.callEvent("onEventCreated",[this._drag_id,e]); - this._loading=false; - this._drag_mode="new-size"; - - } - - var ev=this.getEvent(this._drag_id); - var start,end; - if (this._drag_mode=="move"){ - start = this._min_date.valueOf()+(pos.y*this.config.time_step+pos.x*24*60)*60000; - if (!pos.custom && this._table_view) start+=this.date.time_part(ev.start_date)*1000; - start = this._correct_shift(start); - end = ev.end_date.valueOf()-(ev.start_date.valueOf()-start); - } else { - start = ev.start_date.valueOf(); - 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"; - if (this._mode == "week" || this._mode == "day") - end = this._correct_shift(end); - } - 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-(pos.shift?0:shift); - end = this._drag_start+(shift||(this.config.time_step*60000)); - } else { - start = this._drag_start; - } - - } else if (end<=start) - end=start+this.config.time_step*60000; - } - 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()=ed) - cls='dhx_after'; - else if (sd.valueOf()==cd.valueOf()) - cls='dhx_now'; - html+=" class='"+cls+" "+this.templates.month_date_class(sd,cd)+"' "; - html+=">
"+this.templates.month_day(sd)+"
"; - sd=this.date.add(sd,1,"day"); - } - html+=""; - h[i] = cellheight; - cellheight+=this._colsS.height; - } - html+=""; - this._max_date=sd; - - b.innerHTML=html; - return sd; -}; -scheduler.getLabel = function(property, key) { - var sections = this.config.lightbox.sections; - for (var i=0; i Date: Wed, 24 Oct 2012 17:06:05 +0200 Subject: [PATCH 029/102] [IMP] Reworked calendar bzr revid: fme@openerp.com-20121024150605-2o5tnwtkdguhk78n --- .../static/src/css/web_calendar.css | 4 + addons/web_calendar/static/src/js/calendar.js | 251 ++++++++---------- 2 files changed, 116 insertions(+), 139 deletions(-) diff --git a/addons/web_calendar/static/src/css/web_calendar.css b/addons/web_calendar/static/src/css/web_calendar.css index 4cac2480357..9aeea8a9c8c 100644 --- a/addons/web_calendar/static/src/css/web_calendar.css +++ b/addons/web_calendar/static/src/css/web_calendar.css @@ -25,3 +25,7 @@ .oe_calendar_filter { padding: 0 10px; } + +.openerp .dhx_cal_select_menu { + display: none; +} diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index f92ee894229..220b16c366e 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -22,7 +22,6 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ this.view_id = view_id; this.view_type = 'calendar'; this.has_been_loaded = $.Deferred(); - this.creating_event_id = null; this.dataset_events = []; this.form_dialog = new instance.web_calendar.CalendarFormDialog(this, { destroy_on_close: false, @@ -75,7 +74,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ if (this.color_field && this.selected_filters.length === 0) { var default_filter; - if (default_filter = this.dataset.context['calendar_default_' + this.color_field]) { + if ((default_filter = this.dataset.context['calendar_default_' + this.color_field])) { this.selected_filters.push(default_filter + ''); } } @@ -175,34 +174,25 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ scheduler.init(this.$el.find('.oe_calendar')[0], null, this.mode || 'month'); scheduler.detachAllEvents(); - //scheduler.attachEvent('onEventAdded', this.do_create_event); - //scheduler.attachEvent('onEventDeleted', this.do_delete_event); - //scheduler.attachEvent('onEventChanged', this.do_save_event); - //scheduler.attachEvent('onClick', this.do_edit_event); - //scheduler.attachEvent('onLightbox', this.do_edit_event); scheduler.attachEvent('onViewChange', this.on_view_changed); scheduler.attachEvent('onEventChanged', this.proxy('quick_save')); scheduler.attachEvent('onEventAdded', this.proxy('quick_create')); - scheduler.attachEvent('onEventDeleted', function() { - eval(3) - debugger + scheduler.attachEvent('onEventDeleted', this.proxy('delete_event')); + scheduler.attachEvent('onClick', function(event_id, mouse_event) { + if (!self.$el.find('.dhx_cal_editor').length) { + self.open_event(event_id); + } }); - scheduler.attachEvent('onEmptyClick', function(ev) { - eval(3) - debugger - }); - scheduler.attachEvent('onClick', function(ev) { - eval(3) - debugger - }); - scheduler.attachEvent('onLightbox', function(event_id) { + scheduler.attachEvent("onBeforeLightbox", function (event_id) { var index = self.dataset.get_id_index(event_id); if (index !== null) { self.open_event(self.dataset.ids[index]); } else { - self.slow_create(event_id); + self.slow_create(event_id, scheduler.getEvent(event_id)); } + return false; }); + this.refresh_scheduler(); // Remove hard coded style attributes from dhtmlx scheduler @@ -323,115 +313,6 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ } return r; }, - - - quick_save: function(event_id, event_obj) { - var self = this; - var data = this.get_event_data(event_obj); - delete(data.name); - var index = this.dataset.get_id_index(event_id); - if (index !== null) { - event_id = this.dataset.ids[index]; - this.dataset.write(event_id, data, {}).then(function() { - self.refresh_minical(); - }); - } - }, - quick_create: function(event_id, event_obj) { - var self = this; - var data = this.get_event_data(event_obj); - this.dataset.create(data).then(function(r) { - var id = r; - self.dataset.ids.push(id); - scheduler.changeEventId(event_id, id); - self.refresh_minical(); - self.reload_event(id); - }, function(r, event) { - event.preventDefault(); - self.slow_create(event_id, event_obj); - }); - }, - slow_create: function(event_id, event_obj) { - var self = this; - event_obj = event_obj || scheduler.getEvent(event_id); - var data = this.get_event_data(event_obj); - //self.creating_event_id = event_id; - var set_values = {}; - _.each(['date_start', 'date_delay', 'date_stop'], function(field) { - var field_name = self[field]; - set_values[field_name] = data[field_name]; - console.log(set_values); - }); - this.open_form_popup(null, set_values); - }, - open_event: function(event_id) { - this.open_form_popup(event_id); - }, - - open_form_popup: function(id, set_values) { - var pop = new instance.web.form.FormOpenPopup(this); - debugger - pop.show_element(this.dataset.model, id, this.dataset.get_context(), { - title: _t("Calendar entry: ") // + title - }); - //_.each(['date_start', 'date_delay', 'date_stop'], function(field) { - // var field_name = self[field]; - // if (field_name && self.form_dialog.form.fields[field_name]) { - // var ffield = self.form_dialog.form.fields[field_name]; - // ffield._dirty_flag = false; - // $.when(ffield.set_value(data[field_name])).then(function() { - // ffield._dirty_flag = true; - // self.form_dialog.form.do_onchange(ffield); - // }); - // } - //}); - pop.on('write_completed', self, function() { - debugger - //self.dataset.read_index(_.keys(self.fields_view.fields)).pipe(self.on_diagram_loaded); - }); - return pop; - }, - 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 - var self = this, - index = this.dataset.get_id_index(event_id); - if (index !== null) { - this.dataset.unlink(event_id).then(function() { - self.refresh_minical(); - }); - } - }, - do_edit_event: function(event_id, evt) { - debugger - var self = this; - var index = this.dataset.get_id_index(event_id); - if (index !== null) { - //this.dataset.index = index; - //this.do_switch_view('form'); - this.open_form_popup(this.dataset.ids[index]); - } else if (scheduler.getState().mode === 'month') { - var event_obj = scheduler.getEvent(event_id); - if (event_obj._length === 1) { - event_obj['start_date'].addHours(8); - event_obj['end_date'] = new Date(event_obj['start_date']); - event_obj['end_date'].addHours(1); - } else { - event_obj['start_date'].addHours(8); - event_obj['end_date'].addHours(-4); - } - this.slow_create(event_id, event_obj); - // return false; - // Theorically, returning false should prevent the lightbox to open. - // It works, but then the scheduler is in a buggy state where drag'n drop - // related internal Event won't be fired anymore. - // I tried scheduler.editStop(event_id); but doesn't work either - // After losing one hour on this, here's a quick and very dirty fix : - $(".dhx_cancel_btn").click(); - } else { - scheduler.editStop($(evt.target).hasClass('icon_save')); - } - }, get_event_data: function(event_obj) { var data = { name: event_obj.text @@ -481,7 +362,66 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ get_selected_ids: function() { // no way to select a record anyway return []; - } + }, + + quick_save: function(event_id, event_obj) { + var self = this; + var data = this.get_event_data(event_obj); + delete(data.name); + var index = this.dataset.get_id_index(event_id); + if (index !== null) { + event_id = this.dataset.ids[index]; + this.dataset.write(event_id, data, {}).then(function() { + self.refresh_minical(); + }); + } + }, + quick_create: function(event_id, event_obj) { + var self = this; + var data = this.get_event_data(event_obj); + this.dataset.create(data).then(function(r) { + var id = r; + self.dataset.ids.push(id); + scheduler.changeEventId(event_id, id); + self.refresh_minical(); + self.reload_event(id); + }, function(r, event) { + event.preventDefault(); + self.slow_create(event_id, event_obj); + }); + }, + slow_create: function(event_id, event_obj) { + var self = this; + if (scheduler.getState().mode === 'month') { + if (event_obj._length === 1) { + event_obj['start_date'].addHours(8); + event_obj['end_date'] = new Date(event_obj['start_date']); + event_obj['end_date'].addHours(1); + } else { + event_obj['start_date'].addHours(8); + event_obj['end_date'].addHours(-4); + } + } + var set_values = {}; + var data = this.get_event_data(event_obj); + this.form_dialog.create_record(data, event_id); + }, + open_event: function(event_id) { + this.form_dialog.open_record(event_id); + }, + 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 + var self = this; + var index = this.dataset.get_id_index(event_id); + if (index !== null) { + this.dataset.unlink(event_id).then(function() { + self.refresh_minical(); + }); + } + }, + + }); instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ @@ -490,16 +430,18 @@ instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ this.dataset = dataset; this.view_id = view_id; this.view = view; + this.creating_event_id = null; this.on("closing", this, function() { - if (this.view.creating_event_id) { - scheduler.deleteEvent(this.view.creating_event_id); - this.view.creating_event_id = null; + if (this.creating_event_id) { + scheduler.deleteEvent(this.creating_event_id); + this.creating_event_id = null; } }); + this.ready = $.when(!this.dialog_inited ? this.init_dialog() : true); }, start: function() { var self = this; - this._super(); + this._super.apply(this, arguments); this.form = new instance.web.FormView(this, this.dataset, this.view_id, { pager: false, $buttons: this.$buttons, @@ -509,14 +451,46 @@ instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ this.form.on('record_saved', self, this.on_form_dialog_saved); this.form.on_button_cancel = function() { self.close(); - } + }; return def; }, + create_record: function(data, dhtmlx_event_id) { + var self = this; + this.ready.then(function() { + self.view.dataset.index = null; + self.creating_event_id = dhtmlx_event_id; + self.form.do_show().then(function() { + _.each(data, function(val, field_name) { + var ffield = self.form.fields[field_name]; + if (ffield) { + ffield._dirty_flag = false; + $.when(ffield.set_value(val)).then(function() { + ffield._dirty_flag = true; + self.form.do_onchange(ffield); + }); + } + }); + self.open(); + }); + }); + }, + open_record: function(id) { + var self = this; + this.ready.then(function() { + if (self.dataset.select_id(id)) { + self.form.do_show().then(function() { + self.open(); + }); + } else { + console.error("Calendar could not find event id", event_id); + } + }); + }, on_form_dialog_saved: function() { var id = this.dataset.ids[this.dataset.index]; - if (this.view.creating_event_id) { - scheduler.changeEventId(this.view.creating_event_id, id); - this.view.creating_event_id = null; + if (this.creating_event_id) { + scheduler.changeEventId(this.creating_event_id, id); + this.creating_event_id = null; } this.view.reload_event(id); this.close(); @@ -578,5 +552,4 @@ instance.web_calendar.SidebarFilter = instance.web.Widget.extend({ }; -// DEBUG_RPC:rpc.request:('execute', 'addons-dsh-l10n_us', 1, '*', ('ir.filters', 'get_filters', u'res.partner')) // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: From 149d05a83faa23fb1948e89f10fd5a141335d248 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 24 Oct 2012 18:05:25 +0200 Subject: [PATCH 030/102] [ADD] Saas file bzr revid: fme@openerp.com-20121024160525-rta4chbzjkj3a1sj --- addons/web_calendar/__openerp__.py | 4 +- .../static/src/css/web_calendar.css | 60 ++++++++++--------- .../static/src/css/web_calendar.sass | 40 +++++++++++++ 3 files changed, 74 insertions(+), 30 deletions(-) create mode 100644 addons/web_calendar/static/src/css/web_calendar.sass diff --git a/addons/web_calendar/__openerp__.py b/addons/web_calendar/__openerp__.py index 169cdb1317f..d4b348bd17f 100644 --- a/addons/web_calendar/__openerp__.py +++ b/addons/web_calendar/__openerp__.py @@ -15,8 +15,8 @@ OpenERP Web Calendar view. ], 'css': [ #'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css', - 'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_dhx_terrace.css', - #'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css', + #'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_dhx_terrace.css', + 'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css', 'static/src/css/web_calendar.css' ], 'qweb' : [ diff --git a/addons/web_calendar/static/src/css/web_calendar.css b/addons/web_calendar/static/src/css/web_calendar.css index 9aeea8a9c8c..64d41500b71 100644 --- a/addons/web_calendar/static/src/css/web_calendar.css +++ b/addons/web_calendar/static/src/css/web_calendar.css @@ -1,31 +1,35 @@ -.oe_view_manager_view_calendar { - position: relative; -} -.oe_calendar_table { - position: absolute; - left: 0px; - right: 0px; - top: 0px; - border-top: 3px solid #eee; - width:100%; - overflow: hidden; -} -.oe_calendar { - background-color:#eee; - height: 600px; - border-right: 1px solid #eee; -} -.oe_calendar_sidebar { - width: 200px; -} -.oe_calendar_mini { - background-color: #eee; - padding: 5px; -} -.oe_calendar_filter { - padding: 0 10px; +@charset "utf-8"; +.openerp .oe_view_manager_view_calendar { + position: relative; } -.openerp .dhx_cal_select_menu { - display: none; +.openerp .oe_calendar_sidebar { + width: 200px; + padding: 5px; +} +.openerp .oe_calendar { + background-color: white; + height: 600px; + border-right: 1px solid #eeeeee; +} +.openerp .oe_calendar .oe_calendar_table { + position: absolute; + left: 0px; + right: 0px; + top: 0px; + border-top: 3px solid #eeeeee; + width: 100%; + overflow: hidden; +} +.openerp .oe_calendar .oe_calendar_filter { + padding: 0 10px; +} +.openerp .oe_calendar .dhx_cal_select_menu { + display: none; +} +.openerp .oe_calendar.oe_cal_month .dhx_cal_data { + overflow-y: hidden; +} +.openerp .oe_calendar.oe_cal_month .dhx_cal_data table tr td:last-child div.dhx_month_body { + padding-right: 5px; } diff --git a/addons/web_calendar/static/src/css/web_calendar.sass b/addons/web_calendar/static/src/css/web_calendar.sass new file mode 100644 index 00000000000..72a3a262e60 --- /dev/null +++ b/addons/web_calendar/static/src/css/web_calendar.sass @@ -0,0 +1,40 @@ +@charset "utf-8" + +.openerp + .oe_view_manager_view_calendar + position: relative + +.openerp + .oe_calendar_sidebar + width: 200px + padding: 5px + + .oe_calendar + background-color: white + height: 600px + border-right: 1px solid #eee + + .oe_calendar_table + position: absolute + left: 0px + right: 0px + top: 0px + border-top: 3px solid #eee + width: 100% + overflow: hidden + + .oe_calendar_filter + padding: 0 10px + + // Dhtmlx Scheduler css overrides + .dhx_cal_select_menu + display: none + + &.oe_cal_month .dhx_cal_data + overflow-y: hidden + + table tr td:last-child div.dhx_month_body + padding-right: 5px + +// au BufWritePost,FileWritePost *.sass :!sass --style expanded --line-numbers > "%:p:r.css" +// vim:tabstop=4:shiftwidth=4:softtabstop=4:fdm=marker: From baf68323025ee525547fa91dbfe19bc9a410bedd Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 25 Oct 2012 10:07:47 +0200 Subject: [PATCH 031/102] [IMP] Open form dialog in edit mode bzr revid: fme@openerp.com-20121025080747-hr57jyhfe67xxco4 --- addons/web_calendar/static/src/js/calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index 220b16c366e..2d26730eaed 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -478,7 +478,7 @@ instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ var self = this; this.ready.then(function() { if (self.dataset.select_id(id)) { - self.form.do_show().then(function() { + self.form.do_show({ mode: 'edit' }).then(function() { self.open(); }); } else { From d693558868f76f63226051195124e83c2ff66423 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 25 Oct 2012 12:16:01 +0200 Subject: [PATCH 032/102] [FIX] Misc fix and improvements to calendar bzr revid: fme@openerp.com-20121025101601-at3yqs03shp6ho46 --- addons/web_calendar/static/src/js/calendar.js | 51 ++++++++++++++----- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index 2d26730eaed..f2a838c3d75 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -176,13 +176,28 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ scheduler.detachAllEvents(); scheduler.attachEvent('onViewChange', this.on_view_changed); scheduler.attachEvent('onEventChanged', this.proxy('quick_save')); - scheduler.attachEvent('onEventAdded', this.proxy('quick_create')); scheduler.attachEvent('onEventDeleted', this.proxy('delete_event')); + scheduler.attachEvent('onEventAdded', function(event_id, event_obj) { + var fn = event_obj._force_slow_create ? 'slow_create' : 'quick_create'; + self[fn].apply(self, arguments); + }); scheduler.attachEvent('onClick', function(event_id, mouse_event) { if (!self.$el.find('.dhx_cal_editor').length) { self.open_event(event_id); } }); + scheduler.attachEvent('onEmptyClick', function(start_date, mouse_event) { + if (!self.$el.find('.dhx_cal_editor').length) { + var end_date = new Date(start_date); + end_date.addHours(1); + scheduler.addEvent({ + start_date: start_date, + end_date: end_date, + text: _t("New event"), + _force_slow_create: true, + }); + } + }); scheduler.attachEvent("onBeforeLightbox", function (event_id) { var index = self.dataset.get_id_index(event_id); if (index !== null) { @@ -393,12 +408,11 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ slow_create: function(event_id, event_obj) { var self = this; if (scheduler.getState().mode === 'month') { + event_obj['start_date'].addHours(8); if (event_obj._length === 1) { - event_obj['start_date'].addHours(8); event_obj['end_date'] = new Date(event_obj['start_date']); event_obj['end_date'].addHours(1); } else { - event_obj['start_date'].addHours(8); event_obj['end_date'].addHours(-4); } } @@ -407,11 +421,27 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ this.form_dialog.create_record(data, event_id); }, open_event: function(event_id) { - this.form_dialog.open_record(event_id); + if (this.dataset.get_id_index(event_id) === null) { + // Some weird behaviour in dhtmlx scheduler could lead to this case + // eg: making multiple days event in week view, dhtmlx doesn't trigger eventAdded !!?? + // so the user clicks back on the orphan event and we land here. We have to duplicate + // the dhtmlx internal event because it will delete it on next sheduler refresh. + var event_obj = scheduler.getEvent(event_id); + scheduler.deleteEvent(event_id); + scheduler.addEvent({ + start_date: event_obj.start_date, + end_date: event_obj.end_date, + text: event_obj.text + ' fix', + _force_slow_create: true, + }); + } else { + this.form_dialog.open_record(event_id); + } }, 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 + debugger var self = this; var index = this.dataset.get_id_index(event_id); if (index !== null) { @@ -420,8 +450,6 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ }); } }, - - }); instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ @@ -477,13 +505,10 @@ instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ open_record: function(id) { var self = this; this.ready.then(function() { - if (self.dataset.select_id(id)) { - self.form.do_show({ mode: 'edit' }).then(function() { - self.open(); - }); - } else { - console.error("Calendar could not find event id", event_id); - } + self.dataset.select_id(id); + self.form.do_show({ mode: 'edit' }).then(function() { + self.open(); + }); }); }, on_form_dialog_saved: function() { From b63ae7daa942da24fa0bd9d8e746b69318cfe053 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 25 Oct 2012 12:37:48 +0200 Subject: [PATCH 033/102] [REM] Renamed on_* & do_* callbacks from calendar view bzr revid: fme@openerp.com-20121025103748-4idbc0tvo7pzc285 --- addons/web_calendar/static/src/js/calendar.js | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index f2a838c3d75..e5e78fe410c 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -40,10 +40,6 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ this.selected_filters = []; this.on('view_loaded', self, self.load_calendar); }, - start: function() { - this._super(); - return this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type":"calendar", 'toolbar': false}).then(this.on_loaded); - }, destroy: function() { scheduler.clearAll(); this._super(); @@ -174,7 +170,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ scheduler.init(this.$el.find('.oe_calendar')[0], null, this.mode || 'month'); scheduler.detachAllEvents(); - scheduler.attachEvent('onViewChange', this.on_view_changed); + scheduler.attachEvent('onViewChange', this.proxy('view_changed')); scheduler.attachEvent('onEventChanged', this.proxy('quick_save')); scheduler.attachEvent('onEventDeleted', this.proxy('delete_event')); scheduler.attachEvent('onEventAdded', function(event_id, event_obj) { @@ -216,11 +212,11 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ self.$el.find(".dhx_cal_navline").removeAttr('style'); }); }, - on_view_changed: function(mode, date) { + view_changed: function(mode, date) { this.$el.find('.oe_calendar').removeClass('oe_cal_day oe_cal_week oe_cal_month').addClass('oe_cal_' + mode); if (!date.between(this.range_start, this.range_stop)) { this.update_range_dates(date); - this.do_ranged_search(); + this.ranged_search(); this.$el.find(".dhx_cal_navline div").removeAttr('style'); } this.ready.resolve(); @@ -238,7 +234,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ } }, reload_event: function(id) { - this.dataset.read_ids([id], _.keys(this.fields)).then(this.on_events_loaded); + this.dataset.read_ids([id], _.keys(this.fields)).then(this.proxy('events_loaded')); }, get_color: function(key) { if (this.color_map[key]) { @@ -249,7 +245,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ this.color_map[key] = color; return color; }, - on_events_loaded: function(events, fn_filter, no_filter_reload) { + events_loaded: function(events, fn_filter, no_filter_reload) { var self = this; //To parse Events we have to convert date Format @@ -295,7 +291,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ this.refresh_scheduler(); this.refresh_minical(); if (!no_filter_reload && this.sidebar) { - this.sidebar.filter.on_events_loaded(sidebar_items); + this.sidebar.filter.events_loaded(sidebar_items); } }, convert_event: function(evt) { @@ -344,9 +340,9 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ }, do_search: function(domain, context, group_by) { this.last_search = arguments; - this.do_ranged_search(); + this.ranged_search(); }, - do_ranged_search: function() { + ranged_search: function() { var self = this; scheduler.clearAll(); $.when(this.has_been_loaded, this.ready).then(function() { @@ -356,7 +352,7 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ context: self.last_search[1] }).then(function(events) { self.dataset_events = events; - self.on_events_loaded(events); + self.events_loaded(events); }); }); }, @@ -441,7 +437,6 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ 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 - debugger var self = this; var index = this.dataset.get_id_index(event_id); if (index !== null) { @@ -475,8 +470,8 @@ instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ $buttons: this.$buttons, }); var def = this.form.appendTo(this.$el); - this.form.on('record_created', self, this.on_form_dialog_saved); - this.form.on('record_saved', self, this.on_form_dialog_saved); + this.form.on('record_created', self, this.form_dialog_saved); + this.form.on('record_saved', self, this.form_dialog_saved); this.form.on_button_cancel = function() { self.close(); }; @@ -511,7 +506,7 @@ instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ }); }); }, - on_form_dialog_saved: function() { + form_dialog_saved: function() { var id = this.dataset.ids[this.dataset.index]; if (this.creating_event_id) { scheduler.changeEventId(this.creating_event_id, id); @@ -540,13 +535,13 @@ instance.web_calendar.Sidebar = instance.web.Widget.extend({ }); instance.web_calendar.SidebarFilter = instance.web.Widget.extend({ events: { - 'change input:checkbox': 'on_filter_click' + 'change input:checkbox': 'filter_click' }, init: function(parent, view) { this._super(parent); this.view = view; }, - on_events_loaded: function(filters) { + events_loaded: function(filters) { var selected_filters = this.view.selected_filters.slice(0); this.$el.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters })); this.$('div.oe_calendar_responsible input').each(function() { @@ -555,7 +550,7 @@ instance.web_calendar.SidebarFilter = instance.web.Widget.extend({ } }); }, - on_filter_click: function(e) { + filter_click: function(e) { var self = this, responsibles = [], $e = $(e.target); @@ -566,11 +561,11 @@ instance.web_calendar.SidebarFilter = instance.web.Widget.extend({ }); scheduler.clearAll(); if (responsibles.length) { - this.view.on_events_loaded(this.view.dataset_events, function(filter_value) { + this.view.events_loaded(this.view.dataset_events, function(filter_value) { return _.indexOf(responsibles, filter_value.toString()) > -1; }, true); } else { - this.view.on_events_loaded(this.view.dataset_events, false, true); + this.view.events_loaded(this.view.dataset_events, false, true); } } }); From eccb14b4e3b9304b4839a67e16962e2b2177d618 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 25 Oct 2012 16:11:40 +0200 Subject: [PATCH 034/102] [REM] Removed CalendarFormDialog and replace it with FormOpenPopup bzr revid: fme@openerp.com-20121025141140-2ab8pwwbc7kg3729 --- addons/web/static/src/js/view_form.js | 4 +- addons/web_calendar/static/src/js/calendar.js | 113 +++++------------- 2 files changed, 35 insertions(+), 82 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 72d9725e105..31cc4645d82 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -4373,13 +4373,14 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ this.dataset.create_function = function(data, sup) { var fct = self.options.create_function || sup; return fct.call(this, data).then(function(r) { + self.trigger('create_completed saved', r); self.created_elements.push(r); }); }; this.dataset.write_function = function(id, data, options, sup) { var fct = self.options.write_function || sup; return fct.call(this, id, data, options).then(function() { - self.trigger('write_completed'); + self.trigger('write_completed saved'); }); }; this.dataset.parent_view = this.options.parent_view; @@ -4456,6 +4457,7 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ this.select_elements(this.created_elements); this.created_elements = []; } + this.trigger('closed'); this.destroy(); }, destroy: function () { diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index e5e78fe410c..e027dd2259d 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -23,11 +23,6 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ this.view_type = 'calendar'; this.has_been_loaded = $.Deferred(); this.dataset_events = []; - this.form_dialog = new instance.web_calendar.CalendarFormDialog(this, { - destroy_on_close: false, - width: '80%', - min_width: 850 - }, this.options.action_views_ids.form, dataset); 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', @@ -189,7 +184,6 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ scheduler.addEvent({ start_date: start_date, end_date: end_date, - text: _t("New event"), _force_slow_create: true, }); } @@ -412,12 +406,32 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ event_obj['end_date'].addHours(-4); } } - var set_values = {}; - var data = this.get_event_data(event_obj); - this.form_dialog.create_record(data, event_id); + var defaults = {}; + _.each(this.get_event_data(event_obj), function(val, field_name) { + defaults['default_' + field_name] = val; + }); + var something_saved = false; + var pop = new instance.web.form.FormOpenPopup(this); + pop.show_element(this.dataset.model, null, this.dataset.get_context(defaults), { + title: _t("Create: ") + ' ' + this.name, + disable_multiple_selection: true, + }); + pop.on('closed', self, function() { + if (!something_saved) { + scheduler.deleteEvent(event_id); + } + }); + pop.on('create_completed', self, function(id) { + something_saved = true; + self.dataset.ids.push(id); + scheduler.changeEventId(event_id, id); + self.reload_event(id); + }); }, open_event: function(event_id) { - if (this.dataset.get_id_index(event_id) === null) { + var self = this; + var index = this.dataset.get_id_index(event_id); + if (index === null) { // Some weird behaviour in dhtmlx scheduler could lead to this case // eg: making multiple days event in week view, dhtmlx doesn't trigger eventAdded !!?? // so the user clicks back on the orphan event and we land here. We have to duplicate @@ -431,7 +445,14 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ _force_slow_create: true, }); } else { - this.form_dialog.open_record(event_id); + var pop = new instance.web.form.FormOpenPopup(this); + var id_for_buggy_addons = this.dataset.ids[index]; // ids could be non numeric + pop.show_element(this.dataset.model, id_for_buggy_addons, this.dataset.get_context(), { + title: _t("Edit: ") + this.name + }); + pop.on('write_completed', self, function(){ + self.reload_event(event_id); + }); } }, delete_event: function(event_id, event_obj) { @@ -447,76 +468,6 @@ instance.web_calendar.CalendarView = instance.web.View.extend({ }, }); -instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ - init: function(view, options, view_id, dataset) { - this._super(view, options); - this.dataset = dataset; - this.view_id = view_id; - this.view = view; - this.creating_event_id = null; - this.on("closing", this, function() { - if (this.creating_event_id) { - scheduler.deleteEvent(this.creating_event_id); - this.creating_event_id = null; - } - }); - this.ready = $.when(!this.dialog_inited ? this.init_dialog() : true); - }, - start: function() { - var self = this; - this._super.apply(this, arguments); - this.form = new instance.web.FormView(this, this.dataset, this.view_id, { - pager: false, - $buttons: this.$buttons, - }); - var def = this.form.appendTo(this.$el); - this.form.on('record_created', self, this.form_dialog_saved); - this.form.on('record_saved', self, this.form_dialog_saved); - this.form.on_button_cancel = function() { - self.close(); - }; - return def; - }, - create_record: function(data, dhtmlx_event_id) { - var self = this; - this.ready.then(function() { - self.view.dataset.index = null; - self.creating_event_id = dhtmlx_event_id; - self.form.do_show().then(function() { - _.each(data, function(val, field_name) { - var ffield = self.form.fields[field_name]; - if (ffield) { - ffield._dirty_flag = false; - $.when(ffield.set_value(val)).then(function() { - ffield._dirty_flag = true; - self.form.do_onchange(ffield); - }); - } - }); - self.open(); - }); - }); - }, - open_record: function(id) { - var self = this; - this.ready.then(function() { - self.dataset.select_id(id); - self.form.do_show({ mode: 'edit' }).then(function() { - self.open(); - }); - }); - }, - form_dialog_saved: function() { - var id = this.dataset.ids[this.dataset.index]; - if (this.creating_event_id) { - scheduler.changeEventId(this.creating_event_id, id); - this.creating_event_id = null; - } - this.view.reload_event(id); - this.close(); - }, -}); - instance.web_calendar.Sidebar = instance.web.Widget.extend({ template: 'CalendarView.sidebar', start: function() { From 35e86bbe97f6c9ddc1d161bbbbcb3c3a770ec25f Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Mon, 29 Oct 2012 11:56:15 +0530 Subject: [PATCH 035/102] [IMP] hr_expense: improved view of form for total amount bzr revid: tpa@tinyerp.com-20121029062615-6yso6bkirdm1yjus --- addons/hr_expense/hr_expense_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index 1b8fd17dece..327a8ac3cd8 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -123,8 +123,8 @@ - - + + From ffc347d3aed24e8d88a33fdff940a42ef07b8812 Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Mon, 29 Oct 2012 12:44:09 +0530 Subject: [PATCH 036/102] [IMP] hr_holidays: add onchange on employee_id field to change department also. bzr revid: tpa@tinyerp.com-20121029071409-r8z0q8fko35gnsjy --- addons/hr_holidays/hr_holidays.py | 7 +++++++ addons/hr_holidays/hr_holidays_view.xml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 0977f3729b4..eb7b44b8a3d 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -182,6 +182,13 @@ class hr_holidays(osv.osv): } return result + def onchange_employee(self, cr, uid, ids, employee_id): + result = {'value': {'department_id': False}} + if employee_id: + employee = self.pool.get('hr.employee').browse(cr, uid, employee_id) + result['value'] = {'department_id': employee.department_id.id} + return result + # TODO: can be improved using resource calendar method def _get_number_of_days(self, date_from, date_to): """Returns a float equals to the timedelta between two dates given as string.""" diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 1808e216906..ea9a7fe3a66 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -115,7 +115,7 @@ - + From f95608ae892c1d17c99a05c10c87dd44fd7290ba Mon Sep 17 00:00:00 2001 From: "ajay javiya (OpenERP)" Date: Mon, 29 Oct 2012 14:04:14 +0530 Subject: [PATCH 037/102] [ADD]:Add onchange for contact from and leave request bzr revid: aja@tinyerp.com-20121029083414-4bw6i8ii72wctevk --- addons/hr_holidays/hr_holidays.py | 8 +++++++- addons/hr_holidays/hr_holidays_view.xml | 4 ++-- addons/hr_recruitment/hr_recruitment.py | 11 +++++++++++ addons/hr_recruitment/hr_recruitment_view.xml | 2 +- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 0977f3729b4..636ee6ea9b3 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -199,7 +199,13 @@ class hr_holidays(osv.osv): raise osv.except_osv(_('Warning!'),_('You cannot delete a leave which is in %s state!')%(rec.state)) return super(hr_holidays, self).unlink(cr, uid, ids, context) - def onchange_date_from(self, cr, uid, ids, date_to, date_from): + def onchange_date_from(self, cr, uid, ids, date_from): + date_to = False + if date_from: + date_to = date_from + return {'value':{'date_to': date_to}} + + def onchange_date_to(self, cr, uid, ids, date_to, date_from): result = {} if date_to and date_from: diff_day = self._get_number_of_days(date_from, date_to) diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 1808e216906..89a526c9046 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -104,8 +104,8 @@