diff -p -up ./0.11/clients/admin.py.orig ./0.11/clients/admin.py --- ./0.11/clients/admin.py.orig 2008-10-13 23:08:46.000000000 +0200 +++ ./0.11/clients/admin.py 2010-03-24 11:16:29.000000000 +0100 @@ -32,6 +32,7 @@ class ClientAdminPanel(TicketAdminPanel) clnt.summary_period = req.args.get('summary_period') clnt.default_rate = req.args.get('default_rate') clnt.currency = req.args.get('currency') + clnt.external_tracker = req.args.get('external_tracker') clnt.update() db = self.env.get_db_cnx() diff -p -up ./0.11/clients/api.py.orig ./0.11/clients/api.py --- ./0.11/clients/api.py.orig 2009-09-02 10:52:08.000000000 +0200 +++ ./0.11/clients/api.py 2010-03-24 11:16:29.000000000 +0100 @@ -13,7 +13,7 @@ class ClientsSetupParticipant(Component) def __init__(self): self.db_version_key = 'clients_plugin_version' - self.db_version = 5 + self.db_version = 6 self.db_installed_version = None # Initialise database schema version tracking. @@ -118,8 +118,13 @@ class ClientsSetupParticipant(Component) cursor.execute('INSERT INTO client SELECT name, description, default_rate, currency FROM client_tmp') cursor.execute('DROP TABLE client_tmp') - #if self.db_installed_version < 6: - # print 'Updating clients table (v6)' + if self.db_installed_version < 6: + print 'Updating clients table (v6)' + cursor.execute('ALTER TABLE client ' + 'ADD COLUMN external_tracker TEXT') + + #if self.db_installed_version < 7: + # print 'Updating clients table (v7)' # cursor.execute('...') # Updates complete, set the version @@ -150,7 +155,8 @@ class ClientsSetupParticipant(Component) def ticket_fields_need_upgrade(self): section = 'ticket-custom' return ('text' != self.config.get(section, 'client') \ - or 'text' != self.config.get(section, 'clientrate')) + or 'text' != self.config.get(section, 'clientrate') \ + or 'text' != self.config.get(section, 'external_ticket')) def do_ticket_field_upgrade(self): section = 'ticket-custom' @@ -161,6 +167,9 @@ class ClientsSetupParticipant(Component) self.config.set(section,'clientrate', 'text') self.config.set(section,'clientrate.label', 'Client Charge Rate') + self.config.set(section,'external_ticket', 'text') + self.config.set(section,'external_ticket.label', 'Client Ticket') + self.config.save(); diff -p -up ./0.11/clients/client.py.orig ./0.11/clients/client.py --- ./0.11/clients/client.py.orig 2009-09-02 11:17:34.000000000 +0200 +++ ./0.11/clients/client.py 2010-03-24 11:17:27.000000000 +0100 @@ -38,9 +38,22 @@ class ClientModule(Component): field['options'].append(client.name) if newticket: default_client = self.config.get('ticket', 'default_client') - if default_client: + if default_client and not data['ticket']['client']: + # data['ticket']['client'] is not empty in preview mode data['ticket']['client'] = default_client - break; + elif 'external_ticket' == field['name']: + if not data["ticket"]["external_ticket"]: + continue + field["value"] = data["ticket"]["external_ticket"] + client = model.Client(self.env, data["ticket"]["client"]) + client_tracker = client.external_tracker + if not client_tracker: + # Exteral ticket specified, but no client tracker. Skip it + continue + ticket_url = client_tracker % field["value"] + field["rendered"] = tag.a(field["value"], + href=ticket_url, + target="_blank") elif req.path_info.startswith('/query'): if data['fields'].has_key('client'): data['fields']['client']['type'] = 'select' @@ -56,10 +69,6 @@ class ClientModule(Component): newticket = req.path_info.startswith('/newticket') if req.path_info.startswith('/ticket/') or newticket: - setdefaultrate = '' - if newticket: - setdefaultrate = "$('#field-client').trigger('change');" - script = StringIO() script.write(""" $(document).ready(function() { @@ -67,13 +76,38 @@ class ClientModule(Component): """); script.write('var clientrates = new Array();') for client in model.Client.select(self.env): - script.write('clientrates["%s"] = %s;' % (client.name, client.default_rate or '""')) + default_rate = client.default_rate + if default_rate == "" or default_rate is None: + default_rate = '""' + script.write('clientrates["%s"] = %s;' % (client.name, default_rate)) + script.write('var clienttrackers = new Array();') + for client in model.Client.select(self.env): + script.write('clienttrackers["%s"] = "%s";' % (client.name, client.external_tracker or '')) script.write(""" - try { $('#field-clientrate').attr('value', clientrates[this.options[this.selectedIndex].value]); } + try { + var client = this.options[this.selectedIndex].value; + var rate = clientrates[client]; + $('#field-clientrate').attr('value', rate); + if (parseInt(rate) == 0) { + $('#field-clientrate').css("display", "none"); + $('label[for=field-clientrate]').css("display", "none"); + } else { + $('#field-clientrate').css("display", "inline"); + $('label[for=field-clientrate]').css("display", "inline"); + } + var tracker = clienttrackers[client]; + if (tracker) { + $('#field-external_ticket').css("display", "inline"); + $('label[for=field-external_ticket]').css("display", "inline"); + } else { + $('#field-external_ticket').css("display", "none"); + $('label[for=field-external_ticket]').css("display", "none"); + } + } catch (er) { } }); - %s - });""" % setdefaultrate); + $('#field-client').trigger('change'); + });""") stream |= Transformer('.//head').append(tag.script(script.getvalue(), type_='text/javascript')) return stream diff -p -up ./0.11/clients/model.py.orig ./0.11/clients/model.py --- ./0.11/clients/model.py.orig 2009-09-02 10:52:08.000000000 +0200 +++ ./0.11/clients/model.py 2010-03-24 11:16:29.000000000 +0100 @@ -27,7 +27,7 @@ class Client(object): db = self.env.get_db_cnx() cursor = db.cursor() cursor.execute("SELECT description," - "default_rate, currency " + "default_rate, currency, external_tracker " "FROM client " "WHERE name=%s", (name,)) row = cursor.fetchone() @@ -35,13 +35,15 @@ class Client(object): raise TracError('Client %s does not exist.' % name) self.name = self._old_name = name self.description = row[0] or '' - self.default_rate = row[1] or '' + self.default_rate = row[1] self.currency = row[2] or '' + self.external_tracker = row[3] or None else: self.name = self._old_name = None self.description = None - self.default_rate = '' + self.default_rate = None self.currency = '' + self.external_tracker = None exists = property(fget=lambda self: self._old_name is not None) @@ -72,13 +74,17 @@ class Client(object): else: handle_ta = False + if self.default_rate == "": + self.default_rate = None + cursor = db.cursor() self.env.log.debug("Creating new client '%s'" % self.name) cursor.execute("INSERT INTO client (name, description," - " default_rate, currency) " + " default_rate, currency, external_tracker) " "VALUES (%s,%s, %s,%s)", (self.name, self.description, - (self.default_rate or None), self.currency)) + self.default_rate, self.currency, + (self.external_tracker or None))) if handle_ta: db.commit() @@ -93,14 +99,17 @@ class Client(object): else: handle_ta = False + if self.default_rate == "": + self.default_rate = None + cursor = db.cursor() self.env.log.info('Updating client "%s"' % self.name) cursor.execute("UPDATE client SET name=%s,description=%s," - " default_rate=%s, currency=%s " + " default_rate=%s, currency=%s, external_tracker=%s " "WHERE name=%s", (self.name, self.description, - (self.default_rate or None), self.currency, - self._old_name)) + self.default_rate, self.currency, + (self.external_tracker or None), self._old_name)) if self.name != self._old_name: # Update tickets cursor.execute("UPDATE ticket_custom SET value=%s " @@ -123,14 +132,17 @@ class Client(object): db = env.get_db_cnx() cursor = db.cursor() cursor.execute("SELECT name,description," - " default_rate, currency " + " default_rate, currency, " + "external_tracker " "FROM client " "ORDER BY name") - for name, description, default_rate, currency in cursor: + for name, description, default_rate, currency, external_tracker \ + in cursor: client = cls(env) client.name = client._old_name = name client.description = description or '' - client.default_rate = default_rate or '' + client.default_rate = default_rate client.currency = currency or '' + client.external_tracker = external_tracker or '' yield client select = classmethod(select) diff -p -up ./0.11/clients/templates/admin_clients.html.orig ./0.11/clients/templates/admin_clients.html --- ./0.11/clients/templates/admin_clients.html.orig 2008-10-15 20:24:02.000000000 +0200 +++ ./0.11/clients/templates/admin_clients.html 2010-03-24 11:16:29.000000000 +0100 @@ -45,7 +45,12 @@ $client.description
The default numeric hourly rate for this client (will be copied to the ticket on creation)
+The default numeric hourly rate for this client (will be copied to the ticket on creation). Enter "0" (zero) for no charge rate.
+If the client uses an external ticket system, this is the pattern URL. The string "%s" will be replaced by the field value.