diff --git a/include/ECM/open_flash_chart2/python-ofc-library-2/demo.py b/include/ECM/open_flash_chart2/python-ofc-library-2/demo.py
new file mode 100755
index 00000000..92b16d1c
--- /dev/null
+++ b/include/ECM/open_flash_chart2/python-ofc-library-2/demo.py
@@ -0,0 +1,452 @@
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Author: Eugene Kin Chee Yip
+# Date: 7 Nov 2008
+
+import cherrypy
+import socket
+import math
+
+import openFlashChart
+from openFlashChart_varieties import (Line,
+ Line_Dot,
+ Line_Hollow,
+ Bar,
+ Bar_Filled,
+ Bar_Glass,
+ Bar_3d,
+ Bar_Sketch,
+ HBar,
+ Bar_Stack,
+ Area_Line,
+ Area_Hollow,
+ Pie,
+ Scatter,
+ Scatter_Line)
+
+from openFlashChart_varieties import (dot_value,
+ hbar_value,
+ bar_value,
+ bar_3d_value,
+ bar_glass_value,
+ bar_sketch_value,
+ bar_stack_value,
+ pie_value,
+ scatter_value,
+ x_axis_labels,
+ x_axis_label)
+
+class OFC:
+
+ @cherrypy.expose
+ def index(self):
+ graphs = []
+
+ # Line Charts
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/line', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/line_dot', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/line_hollow', '/flashes/'))
+
+ # Bar Charts
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/bar', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/bar_filled', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/bar_glass', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/bar_3d', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/bar_sketch', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/hbar', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/bar_stack', '/flashes/'))
+
+ # Area Charts
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/area_line', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/area_hollow', '/flashes/'))
+
+ # Pie Chart
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/pie', '/flashes/'))
+
+ # Scatter Charts
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/scatter', '/flashes/'))
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/scatter_line', '/flashes/'))
+
+ # Radar Charts
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/radar', '/flashes/'))
+
+ # Testing Chart
+ graphs.append(openFlashChart.flashHTML('100%', '400', '/test', '/flashes/'))
+
+ graphs.append(self.source("html_snippet.html"))
+
+ return self.source("OFC.htm") %({"chart": "
".join(graphs)})
+
+
+ # Line Charts
+ @cherrypy.expose
+ def line(self):
+ plot1 = Line(text = "line1", fontsize = 20, values = range(0,10))
+ plot2 = Line(text = "line2", fontsize = 06, values = range(10,0, -1))
+ plot3 = Line(text = "line3", fontsize = 12, values = range(-5,5))
+
+ plot1.set_line_style(4, 3)
+ plot2.set_line_style(5, 5)
+ plot3.set_line_style(4, 8)
+
+ plot1.set_colour('#D4C345')
+ plot2.set_colour('#C95653')
+ plot3.set_colour('#8084FF')
+
+ chart = openFlashChart.template("Line chart")
+ chart.set_y_axis(min = -6, max = 10)
+
+ chart.add_element(plot1)
+ chart.add_element(plot2)
+ chart.add_element(plot3)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def line_dot(self):
+ plot1 = Line_Dot(values = [math.sin(float(x)/10) * 1.9 + 4 for x in range(0, 62, 2)])
+ plot2 = Line_Dot(values = [math.sin(float(x)/10) * 1.9 + 7 for x in range(0, 62, 2)])
+ plot3 = Line_Dot(values = [math.sin(float(x)/10) * 1.9 + 10 for x in range(0, 62, 2)])
+
+ plot1.set_halo_size(0)
+ plot2.set_halo_size(1)
+ plot3.set_halo_size(3)
+
+ plot1.set_width(1)
+ plot2.set_width(2)
+ plot3.set_width(6)
+
+ plot1.set_dot_size(4)
+ plot2.set_dot_size(4)
+ plot3.set_dot_size(6)
+
+ chart = openFlashChart.template("Line_Dot chart")
+ chart.set_y_axis(min = 0, max = 15, steps = 5)
+ chart.add_element(plot1)
+ chart.add_element(plot2)
+ chart.add_element(plot3)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def line_hollow(self):
+ plot1 = Line_Hollow(values = [math.sin(float(x)/10) * 1.9 + 4 for x in range(0, 62, 2)])
+ plot2 = Line_Hollow(values = [math.sin(float(x)/10) * 1.9 + 7 for x in range(0, 62, 2)])
+ plot3 = Line_Hollow(values = [math.sin(float(x)/10) * 1.9 + 10 for x in range(0, 62, 2)])
+
+ plot1.set_halo_size(3)
+ plot2.set_halo_size(1)
+ plot3.set_halo_size(0)
+
+ plot1.set_width(1)
+ plot2.set_width(2)
+ plot3.set_width(3)
+
+ plot1.set_dot_size(4)
+ plot2.set_dot_size(4)
+ plot3.set_dot_size(6)
+
+ chart = openFlashChart.template("Line_Hollow chart")
+ chart.set_y_axis(min = 0, max = 15, steps = 5)
+ chart.add_element(plot1)
+ chart.add_element(plot2)
+ chart.add_element(plot3)
+
+ return chart.encode()
+
+
+ # Bar Charts
+ @cherrypy.expose
+ def bar(self):
+ plot = Bar(text = "bar1", values = range(9, 0, -1))
+
+ chart = openFlashChart.template("Bar chart")
+ chart.add_element(plot)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def bar_filled(self):
+ plot = Bar_Filled(values = range(9, 0, -1) + [bar_value((5, 3), '#AAAAAA', 'Special:
Top = #top#
Bottom = #bottom#')], colour = '#E2D66A', outline = '#577261')
+
+ chart = openFlashChart.template("Bar_Filled chart",)
+ chart.add_element(plot)
+ chart.set_bg_colour('#FFFFFF')
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def bar_glass(self):
+ plot = Bar_Glass(values = range(-5, 5, 2) + [bar_glass_value(5, '#333333', 'Special:
Top = #top#
Bottom = #bottom#')])
+
+ chart = openFlashChart.template("Bar_Glass chart")
+ chart.set_y_axis(min = -6, max = 6)
+ chart.add_element(plot)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def bar_3d(self):
+ plot = Bar_3d(values = range(-8, 8, 2) + [bar_3d_value(5, '#333333', 'Special:
Top = #top#
Bottom = #bottom#')])
+ plot.set_colour('#D54C78')
+
+ chart = openFlashChart.template("Bar_3d chart")
+ chart.set_y_axis(min = -8, max = 8)
+ chart.set_x_axis(colour = '#909090', three_d = 5, labels = list('qp#m^fur'))
+ chart.add_element(plot)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def bar_sketch(self):
+ plot1 = Bar_Sketch(values = range(10, 0, -1) + [bar_sketch_value(5, '#333333', 'Special:
Top = #top#')], colour = '#81AC00', outline = '#567300')
+ plot2 = Bar_Sketch(values = [bar_sketch_value(5, '#333333', 'Special:
Top = #top#')] + range(10, 0, -1), colour = '#81ACFF', outline = '#5673FF')
+
+ chart = openFlashChart.template("Bar_Sketch chart", style = '{color: #567300; font-size: 14px}')
+ chart.add_element(plot1)
+ chart.add_element(plot2)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def hbar(self):
+ months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+
+ plot = HBar(colour = '#86BBEF')
+ plot.set_tooltip('Months: #val#')
+ plot.append_values(hbar_value((0, 4), colour = '#909090'))
+ plot.append_values(hbar_value((4, 8), colour = '#909009'))
+ plot.append_values(hbar_value((8, 11), tooltip = '#left# to #right#
%s to %s (#val# months)' %(months[8], months[11])))
+
+ chart = openFlashChart.template("HBar chart")
+ chart.set_x_axis(offset = False, labels = x_axis_labels(labels = months))
+ chart.set_y_axis(offset = True, labels = ['one', 'two', 'three'])
+ chart.add_element(plot)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def bar_stack(self):
+ plot = Bar_Stack(colours = ['#C4D318', '#50284A', '#7D7B6A'])
+ plot.set_tooltip('X label [#x_label#], Value [#val#]
Total [#total#]')
+ plot.append_keys('#C4D318', 'job1', 13)
+ plot.append_keys('#50284A', 'job2', 13)
+ plot.append_keys('#7D7B6A', 'job3', 13)
+ plot.append_keys('#ff0000', 'job4', 13)
+ plot.append_keys('#ff00ff', 'job5', 13)
+
+ plot.append_stack([2.5, 5, 2.5])
+ plot.append_stack([2.5, 5, 1.25, 1.25])
+ plot.append_stack([5, bar_stack_value(5, '#ff0000')])
+ plot.append_stack([2, 2, 2, 2, bar_stack_value(2, '#ff00ff')])
+
+ chart = openFlashChart.template("Bar_Stack chart", style = '{font-size: 20px; color: #F24062; text-align: center;}')
+ chart.set_tooltip(behaviour = 'hover')
+ chart.set_x_axis(labels = x_axis_labels(labels = ['Winter', 'Spring', 'Summer', 'Autumn']))
+ chart.set_y_axis(min = 0, max = 14, steps = 2)
+ chart.add_element(plot)
+
+ return chart.encode()
+
+
+ # Area charts
+ @cherrypy.expose
+ def area_line(self):
+ plot = Area_Line(colour = '#C4B86A', fill = '#C4B86A', fill_alpha = 0.7, values = [math.sin(float(x)/10) * 1.9 for x in range(0, 62, 2)])
+ plot.set_halo_size(1)
+ plot.set_width(2)
+ plot.set_dot_size(4)
+
+ chart = openFlashChart.template("Area_Line chart")
+ chart.set_y_axis(min = -2, max = 2, steps = 2, offset = True)
+ chart.set_x_axis(labels = x_axis_labels(labels = ['%d' %i for i in range(0, 62, 2)], steps = 4, rotate = 'vertical'), steps = 2)
+ chart.add_element(plot)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def area_hollow(self):
+ plot = Area_Hollow(colour = '#838A96', fill = '#E01B49', fill_alpha = 0.4, values = [math.sin(float(x)/10) * 1.9 for x in range(0, 62, 2)])
+ plot.set_halo_size(1)
+ plot.set_width(2)
+ plot.set_dot_size(4)
+
+ chart = openFlashChart.template("Area_Hollow chart")
+ chart.set_y_axis(min = -2, max = 2, steps = 2, offset = False)
+ chart.set_x_axis(labels = x_axis_labels(rotate = 'diagonal'), steps = 2)
+ chart.add_element(plot)
+
+ return chart.encode()
+
+
+ # Pie chart
+ @cherrypy.expose
+ def pie(self):
+ plot = Pie(start_angle = 35, animate = True, values = [2, 3, pie_value(6.5, ('hello (6.5)', '#FF33C9', 24))], colours = ['#D01F3C', '#356AA0', '#C79810'], label_colour = '#432BAF')
+ plot.set_tooltip('#val# of #total#
#percent# of 100%')
+ plot.set_gradient_fill(True)
+ plot.set_on_click('plot1')
+ plot.set_no_labels(False)
+
+ chart = openFlashChart.template("Pie chart")
+ chart.add_element(plot)
+
+ return chart.encode()
+
+
+ # Scatter charts
+ @cherrypy.expose
+ def scatter(self):
+ radians = [math.radians(degree) for degree in xrange(0, 360, 5)]
+ values = [scatter_value(('%.2f' %math.sin(radian), '%.2f' %math.cos(radian))) for radian in radians]
+
+ plot1 = Scatter(colour = '#FFD600', values = [scatter_value((0, 0))])
+ plot2 = Scatter(colour = '#D600FF', values = values)
+
+ plot1.set_dot_size(10)
+ plot2.set_dot_size(3)
+
+ chart = openFlashChart.template("Scatter chart")
+ chart.set_x_axis(min = -2, max = 3)
+ chart.set_y_axis(min = -2, max = 2)
+ chart.add_element(plot1)
+ chart.add_element(plot2)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def scatter_line(self):
+ from random import randint
+
+ x_values = [0]
+ while x_values[-1] < 25:
+ x_values.append(x_values[-1] + float(randint(5, 15))/10)
+
+ values = [scatter_value((x, float(randint(-15, 15))/10)) for x in x_values]
+
+ plot = Scatter_Line(colour = '#FFD600', values = values)
+ plot.set_dot_size(3)
+
+ chart = openFlashChart.template("Scatter_Line chart")
+ chart.set_x_axis(min = 0, max = 25)
+ chart.set_y_axis(min = -10, max = 10)
+ chart.add_element(plot)
+
+ return chart.encode()
+
+
+ # Radar Charts
+ @cherrypy.expose
+ def radar(self):
+ plot = Area_Hollow(colour = '#45909F', fill = '#45909F', fill_alpha = 0.4, values = [3, 4, 5, 4, 3, 3, 2.5])
+ plot.set_width(1)
+ plot.set_dot_size(4)
+ plot.set_halo_size(1)
+ plot.set_loop()
+
+ chart = openFlashChart.template("Radar chart")
+ chart.set_bg_colour('#DFFFEC')
+ chart.set_radar_axis(max = 5, colour = '#EFD1EF', grid_colour = '#EFD1EF', labels = list('012345'), spoke_labels = list('1234567'))
+ chart.set_tooltip(behaviour = 'proximity')
+ chart.add_element(plot)
+
+ return chart.encode()
+
+
+ # Testing Graph
+ @cherrypy.expose
+ def test(self):
+ plot1 = Line(text = "line1", fontsize = 20, values = [None, 5, 1, 2, 4, None, None, 2, 7, 5])
+ plot2 = Line(text = "line2", fontsize = 12, values = range(-4, 7, 1))
+ plot3 = Bar_Glass(text = "bar1", values = [4, None, -4, 3, bar_glass_value((5, -2), '#333333', 'Special:
Top = #top#
Bottom = #bottom#'), 7, None, None, -5, 5])
+
+ plot1.set_tooltip('Title1:
Amount = #val#')
+ plot2.set_tooltip('Title2:
Value = #val#')
+ plot3.set_tooltip('Title3:
Height = #val#')
+
+ plot1.set_on_click('plot1')
+ plot2.set_on_click('plot2')
+
+ plot1.set_line_style(4, 3)
+ plot2.set_line_style(4, 8)
+
+ plot1.set_colour('#D4C345')
+ plot2.set_colour('#8084FF')
+ plot3.set_colour('#FF84FF')
+
+ chart = openFlashChart.template("Testing chart", style = '{font-size: 40px; font-family: Times New Roman; color: #A2ACBA; text-align: right;}')
+
+ chart.set_x_axis(stroke = 10, colour = '#165132', tick_height = 30, grid_colour = '#AAEE00', offset = True, steps = 2, labels = x_axis_labels(labels = list('sfwertr56w') + [x_axis_label('custom!!', '#2683CF', 24, 'diagonal')], steps = 2))
+ chart.set_y_axis(stroke = 5, colour = '#1E33FF', tick_length = 15, grid_colour = '#090305', offset = True, steps = 4, min = -6)
+ chart.set_y_axis_right(stroke = 5, colour = '#44FF22', tick_length = 20, grid_colour = '#55ff55', offset = True, steps = 1)
+
+ chart.set_x_legend("x-axis legend", style = '{font-size: 20px; color: #778877}')
+ chart.set_y_legend("y-axis legend", style = '{font-size: 22px; color: #778877}')
+
+ chart.set_tooltip(shadow = True, stroke = 4, colour = '#909090', bg_colour = '#FAFAFA', title_style = '{font-size: 14px; color: #CC2A43;}', body_style = '{font-size: 10px; font-weight: bold; color: #000000;}')
+
+ chart.add_element(plot1)
+ chart.add_element(plot2)
+ chart.add_element(plot3)
+
+ return chart.encode()
+
+ @cherrypy.expose
+ def ajax(self, count):
+ if int(count) % 3 is 0:
+ plot = Line_Dot(text = "line1", fontsize = 20, values = [None, 5, dot_value(1, '#D02020', '#val#
Text'), 2, 4, None, None, 2, 7, 5])
+ elif int(count) % 3 is 1:
+ plot = Line(text = "line2", fontsize = 12, values = range(-4, 7, 1))
+ else:
+ plot = Bar_Glass(text = "bar1", values = [4, None, -4, 3, bar_glass_value((5, -2), '#333333', 'Special:
Top = #top#
Bottom = #bottom#'), 7, None, None, -5, 5])
+
+ plot.set_tooltip('Title1:
Amount = #val#')
+ plot.set_on_click('plot1')
+ plot.set_line_style(4, 3)
+
+ plot.set_colour('#D4C345')
+
+ chart = openFlashChart.template("Testing chart: %s" %count, style = '{font-size: 40px; font-family: Times New Roman; color: #A2ACBA; text-align: right;}')
+
+ chart.set_x_axis(stroke = 10, colour = '#165132', tick_height = 30, grid_colour = '#AAEE00', offset = True, steps = 2, labels = x_axis_labels(labels = list('sfwertr56w') + [x_axis_label('custom!!', '#2683CF', 24, 210)], steps = 2))
+ chart.set_y_axis(stroke = 5, colour = '#1E33FF', tick_length = 15, grid_colour = '#090305', offset = True, steps = 4, min = -6)
+ chart.set_y_axis_right(stroke = 5, colour = '#44FF22', tick_length = 20, grid_colour = '#55ff55', offset = True, steps = 1)
+
+ chart.set_x_legend("x-axis legend", style = '{font-size: 20px; color: #778877}')
+ chart.set_y_legend("y-axis legend", style = '{font-size: 22px; color: #778877}')
+
+ chart.set_tooltip(shadow = True, stroke = 4, colour = '#909090', bg_colour = '#FAFAFA', title_style = '{font-size: 14px; color: #CC2A43;}', body_style = '{font-size: 10px; font-weight: bold; color: #000000;}')
+
+ chart.add_element(plot)
+
+ return chart.encode()
+
+
+
+
+
+ def source(self, filename):
+ """Opens a file specified by the file/pathname in read-only"""
+ file = open(filename, 'r')
+ result = file.read()
+ file.close()
+ return result
+
+ @cherrypy.expose
+ def flashes(self, filename):
+ cherrypy.response.headers['Content-Type'] = "application/x-shockwave-flash"
+ cherrypy.response.headers['Expires'] = "Tue, 01 Dec 2009 12:00:00 GMT"
+ cherrypy.response.headers['Cache-Control'] = "Public"
+ return open(filename)
+
+
+cherrypy.server.socket_host = socket.gethostbyname(socket.gethostname())
+cherrypy.quickstart(OFC(), config = 'serverconfig.conf')
+
diff --git a/include/ECM/open_flash_chart2/python-ofc-library-2/openFlashChart.py b/include/ECM/open_flash_chart2/python-ofc-library-2/openFlashChart.py
new file mode 100755
index 00000000..834d1a89
--- /dev/null
+++ b/include/ECM/open_flash_chart2/python-ofc-library-2/openFlashChart.py
@@ -0,0 +1,88 @@
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Author: Emanuel Fonseca
+# Email: emdfonsecagmailcom
+# Date: 25 August 2008
+#
+# Author: Eugene Kin Chee Yip
+# Date: 7 Nov 2008
+
+import cjson
+
+from openFlashChart_elements import (title,
+ x_legend,
+ y_legend,
+ x_axis,
+ y_axis,
+ radar_axis,
+ tooltip)
+
+
+def flashHTML(width, height, url, ofc_base_url="/flashes/", ofc_swf="OFC.swf" ):
+ return (
+ """
+
+ """) % locals()
+
+
+
+class template(dict):
+ def __init__(self, title_string, style = None):
+ self['title'] = title(title_string, style)
+
+ def set_x_legend(self, legend, style):
+ self['x_legend'] = x_legend(legend, style)
+
+ def set_y_legend(self, legend, style):
+ self['y_legend'] = y_legend(legend, style)
+
+ def set_x_axis(self, stroke = None, tick_height = None, colour = None, grid_colour = None, labels = None, three_d = None, max = None, min = None, steps = None, offset = None):
+ self['x_axis'] = x_axis(stroke, tick_height, colour, grid_colour, labels, three_d, max, min, steps, offset)
+
+ def set_y_axis(self, stroke = None, tick_length = None, colour = None, grid_colour = None, labels = None, max = None, min = None, steps = None, offset = None):
+ self['y_axis'] = y_axis(stroke, tick_length, colour, grid_colour, labels, max, min, steps, offset)
+
+ def set_y_axis_right(self, stroke = None, tick_length = None, colour = None, grid_colour = None, labels = None, max = None, min = None, steps = None, offset = None):
+ self['y_axis_right'] = y_axis(stroke, tick_length, colour, grid_colour, labels, max, min, steps, offset)
+
+ def set_radar_axis(self, stroke = None, tick_height = None, colour = None, grid_colour = None, labels = None, max = None, min = None, steps = None, spoke_labels = None):
+ self['radar_axis'] = radar_axis(stroke, tick_height, colour, grid_colour, labels, max, min, steps, spoke_labels)
+
+
+ def set_bg_colour(self, colour):
+ self['bg_colour'] = colour
+
+ def set_tooltip(self, shadow = None, stroke = None, colour = None, bg_colour = None, title_style = None, body_style = None, behaviour = None):
+ self['tooltip'] = tooltip(shadow, stroke, colour, bg_colour, title_style, body_style, behaviour)
+
+ def add_element(self, element):
+ try:
+ self['elements'].append(element)
+ except:
+ self['elements'] = [element]
+
+ def encode(self):
+ return cjson.encode(self)
+
+
+
+
+
diff --git a/include/ECM/open_flash_chart2/python-ofc-library-2/openFlashChart_elements.py b/include/ECM/open_flash_chart2/python-ofc-library-2/openFlashChart_elements.py
new file mode 100755
index 00000000..02f9ac31
--- /dev/null
+++ b/include/ECM/open_flash_chart2/python-ofc-library-2/openFlashChart_elements.py
@@ -0,0 +1,163 @@
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Author: Emanuel Fonseca
+# Email: emdfonsecagmailcom
+# Date: 25 August 2008
+#
+# Author: Eugene Kin Chee Yip
+# Date: 7 Nov 2008
+
+
+
+
+##########################################
+# title class
+class title(dict):
+ def __init__(self, title, style=None):
+ self['text'] = title
+ self.set_style(style)
+
+ def set_style(self, style):
+ self['style'] = style if style else '{color: #000000; font-size: 12px;}'
+
+class y_legend(title):
+ pass
+
+class x_legend(title):
+ pass
+
+##########################################
+# axis classes
+class axis(dict):
+ def __init__(self, stroke = None, colour = None, grid_colour = None, labels = None, max = None, min = None, steps = None, offset = None):
+ self.set_stroke(stroke)
+ self.set_colour(colour)
+ self.set_grid_colour(grid_colour)
+ self.set_labels(labels)
+ self.set_steps(steps)
+ self.set_offset(offset)
+ self.set_max(max)
+ self.set_min(min)
+
+ def set_stroke(self, stroke):
+ if stroke:
+ self['stroke'] = stroke
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_grid_colour(self, grid_colour):
+ if grid_colour:
+ self['grid-colour'] = grid_colour
+
+ def set_labels(self, labels):
+ if labels:
+ self['labels'] = labels
+
+ def set_steps(self, steps):
+ if steps:
+ self['steps'] = steps
+
+ def set_offset(self, offset):
+ if offset is not None:
+ self['offset'] = offset
+
+ def set_max(self, max):
+ if max:
+ self['max'] = max
+
+ def set_min(self, min):
+ if min:
+ self['min'] = min
+
+class x_axis(axis):
+ def __init__(self, stroke = None, tick_height = None, colour = None, grid_colour = None, labels = None, three_d = None, max = None, min = None, steps = None, offset = None):
+ axis.__init__(self, stroke, colour, grid_colour, labels, max, min, steps, offset)
+ self.set_tick_height(tick_height)
+ self.set_3d(three_d)
+
+ def set_tick_height(self, tick_height):
+ if tick_height:
+ self['tick-height'] = tick_height
+
+ def set_3d(self, three_d):
+ if three_d:
+ self['3d'] = three_d
+
+class y_axis(axis):
+ def __init__(self, stroke = None, tick_length = None, colour = None, grid_colour = None, labels = None, max = None, min = None, steps = None, offset = None):
+ axis.__init__(self, stroke, colour, grid_colour, labels, max, min, steps, offset)
+ self.set_tick_length(tick_length)
+ self.set_offset(offset)
+
+ def set_tick_length(self, tick_length):
+ if tick_length:
+ self['tick-length'] = tick_length
+
+class radar_axis(axis):
+ def __init__(self, stroke = None, tick_height = None, colour = None, grid_colour = None, labels = None, max = None, min = None, steps = None, spoke_labels = None):
+ axis.__init__(self, stroke, colour, grid_colour, labels, max, min, steps)
+ self.set_tick_height(tick_height)
+ self.set_spoke_labels(spoke_labels)
+
+ def set_tick_height(self, tick_height):
+ if tick_height:
+ self['tick-height'] = tick_height
+
+ def set_spoke_labels(self, spoke_labels):
+ if spoke_labels:
+ self['spoke-labels'] = {'labels': spoke_labels}
+
+
+##########################################
+# tooltip class
+class tooltip(dict):
+ def __init__(self, shadow = None, stroke = None, colour = None, bg_colour = None, title_style = None, body_style = None, behaviour = None):
+ self.set_shadow(shadow)
+ self.set_stroke(stroke)
+ self.set_colour(colour)
+ self.set_background(bg_colour)
+ self.set_title(title_style)
+ self.set_body(body_style)
+ self.set_behaviour(behaviour)
+
+ def set_shadow(self, shadow):
+ if shadow is not None:
+ self['shadow'] = shadow
+
+ def set_stroke(self, stroke):
+ if stroke:
+ self['stroke'] = stroke
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_background(self, background):
+ if background:
+ self['background'] = background
+
+ def set_title(self, title):
+ if title:
+ self['title'] = title
+
+ def set_body(self, body):
+ if body:
+ self['body'] = body
+
+ def set_behaviour(self, behaviour):
+ if behaviour == 'proximity':
+ self['mouse'] = 1
+ if behaviour == 'hover':
+ self['mouse'] = 2
+
+
+
diff --git a/include/ECM/open_flash_chart2/python-ofc-library-2/openFlashChart_varieties.py b/include/ECM/open_flash_chart2/python-ofc-library-2/openFlashChart_varieties.py
new file mode 100755
index 00000000..379fcd9e
--- /dev/null
+++ b/include/ECM/open_flash_chart2/python-ofc-library-2/openFlashChart_varieties.py
@@ -0,0 +1,391 @@
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Author: Emanuel Fonseca
+# Email: emdfonsecagmailcom
+# Date: 25 August 2008
+#
+# Author: Eugene Kin Chee Yip
+# Date: 7 Nov 2008
+
+class varieties(dict):
+ def __init__(self, type = None, alpha = None, colour = None, text = None, fontsize = None, values = None):
+ self.set_type(type)
+ self.set_alpha(alpha)
+ self.set_colour(colour)
+ self.set_text(text)
+ self.set_fontsize(fontsize)
+ self.set_values(values)
+
+ def set_type(self, type):
+ if type:
+ self['type'] = type
+
+ def set_alpha(self, alpha):
+ if alpha:
+ self['alpha'] = alpha
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_gradient_fill(self, gradient_fill):
+ self['gradient-fill'] = gradient_fill
+
+
+ def set_halo_size(self, size):
+ self['halo-size'] = size
+
+ def set_width(self, width):
+ self['width'] = width
+
+ def set_dot_size(self, size):
+ self['dot-size'] = size
+
+
+
+ def set_text(self, text):
+ if text:
+ self['text'] = text
+
+ def set_fontsize(self, fontsize):
+ if fontsize:
+ self['font-size'] = fontsize
+
+ def set_values(self, values):
+ if values:
+ self['values'] = values
+
+ def append_keys(self, colour = None, text = None, fontsize = None):
+ try:
+ self['keys'].append(bar_stack_key(colour, text, fontsize))
+ except:
+ self['keys'] = [bar_stack_key(colour, text, fontsize)]
+
+
+ def append_values(self, values):
+ try:
+ self['values'].append(values)
+ except:
+ self['values'] = [values]
+
+ def append_stack(self, values):
+ self.append_values(values)
+
+
+
+ def set_line_style(self, on, off):
+ self['line-style'] = line_style(on, off)
+
+ def set_tooltip(self, text):
+ self['tip'] = text
+
+ def set_no_labels(self, no_labels):
+ self['no-labels'] = no_labels
+
+ def set_loop(self):
+ self['loop'] = True
+
+ def set_on_click(self, javascript_call):
+ self['on-click'] = javascript_call
+
+
+
+
+##########################################
+# key class for bar stack
+class bar_stack_key(dict):
+ def __init__(self, colour = None, text = None, fontsize = None):
+ self.set_colour(colour)
+ self.set_text(text)
+ self.set_fontsize(fontsize)
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_text(self, text):
+ if text:
+ self['text'] = text
+
+ def set_fontsize(self, fontsize):
+ if fontsize:
+ self['font-size'] = fontsize
+
+
+##########################################
+# value class for custom data points
+class value(dict):
+ def __init__(self, val = None, colour = None, tooltip = None):
+ self.set_val(val)
+ self.set_colour(colour)
+ self.set_tooltip(tooltip)
+
+ def set_val(self, val):
+ if val:
+ self['value'] = val
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_tooltip(self, tooltip):
+ if tooltip:
+ self['tip'] = tooltip
+
+class dot_value(value):
+ pass
+
+class bar_value(value):
+ def __init__(self, (top, bottom), colour = None, tooltip = None):
+ value.__init__(self, colour = colour, tooltip = tooltip)
+ self.set_top_value(top)
+ self.set_bottom_value(bottom)
+
+ def set_top_value(self, top):
+ self['top'] = top
+
+ def set_bottom_value(self, bottom):
+ self['bottom'] = bottom
+
+class bar_3d_value(bar_value):
+ def __init__(self, top, colour = None, tooltip = None):
+ value.__init__(self, colour = colour, tooltip = tooltip)
+ self.set_top_value(top)
+
+ def set_top_value(self, top):
+ self['top'] = top
+
+
+class bar_glass_value(bar_3d_value):
+ pass
+
+class bar_sketch_value(bar_3d_value):
+ pass
+
+class hbar_value(value):
+ def __init__(self, (left, right), colour = None, tooltip = None):
+ value.__init__(self, colour = colour, tooltip = tooltip)
+ self.set_left_value(left)
+ self.set_right_value(right)
+
+ def set_left_value(self, left):
+ self['left'] = left
+
+ def set_right_value(self, right):
+ self['right'] = right
+
+class bar_stack_value(value):
+ def __init__(self, val, colour = None, tooltip = None):
+ value.__init__(self, colour = colour, tooltip = tooltip)
+ self.set_value(val)
+
+ def set_value(self, val):
+ if val:
+ self['val'] = val
+
+class pie_value(value):
+ def __init__(self, val, label = None, colour = None, tooltip = None):
+ value.__init__(self, val, colour, tooltip)
+ self.set_label(label)
+
+ def set_label(self, (label, colour, fontsize)):
+ if label:
+ self['label'] = label
+ if colour:
+ self['label-colour'] = colour
+ if fontsize:
+ self['font-size'] = fontsize
+
+
+
+class scatter_value(value):
+ def __init__(self, (x, y), colour = None, tooltip = None):
+ value.__init__(self, colour = colour, tooltip = tooltip)
+ self.set_x_value(x)
+ self.set_y_value(y)
+
+ def set_x_value(self, x):
+ self['x'] = x
+
+ def set_y_value(self, y):
+ self['y'] = y
+
+
+##########################################
+# line style class for charts with lines
+class line_style(dict):
+ def __init__(self, on = None, off = None, style = 'dash'):
+ self.set_style(style)
+ self.set_on(on)
+ self.set_off(off)
+
+ def set_style(self, style):
+ self['style'] = style
+
+ def set_on(self, on):
+ if on:
+ self['on'] = on
+
+ def set_off(self, off):
+ if off:
+ self['off'] = off
+
+##########################################
+# label classes
+class x_axis_labels(dict):
+ def __init__(self, labels = None, steps = None, colour = None, size = None, rotate = None):
+ self.set_labels(labels)
+ self.set_steps(steps)
+ self.set_colour(colour)
+ self.set_size(size)
+ self.set_rotate(rotate)
+
+ def set_labels(self, labels):
+ if labels:
+ self['labels'] = labels
+
+ def set_steps(self, steps):
+ if steps:
+ self['steps'] = steps
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_size(self, size):
+ if size:
+ self['size'] = size
+
+ def set_rotate(self, rotate):
+ if rotate:
+ self['rotate'] = rotate
+
+class x_axis_label(dict):
+ def __init__(self, text = None, colour = None, size = None, rotate = None):
+ self.set_text(text)
+ self.set_colour(colour)
+ self.set_size(size)
+ self.set_rotate(rotate)
+
+ def set_text(self, text):
+ if text:
+ self['text'] = text
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_size(self, size):
+ if size:
+ self['size'] = size
+
+ def set_rotate(self, rotate):
+ if rotate:
+ self['rotate'] = rotate
+
+
+
+
+##########################################
+# Chart classes
+
+# Line Charts
+class Line(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None):
+ varieties.__init__(self, 'line', alpha, colour, text, fontsize, values)
+
+class Line_Dot(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None):
+ varieties.__init__(self, 'line_dot', alpha, colour, text, fontsize, values)
+
+class Line_Hollow(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None):
+ varieties.__init__(self, 'line_hollow', alpha, colour, text, fontsize, values)
+
+
+
+# Bar Charts
+class Bar(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None):
+ varieties.__init__(self, 'bar', alpha, colour, text, fontsize, values)
+
+class Bar_Filled(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None, outline = None):
+ varieties.__init__(self, 'bar_filled', alpha, colour, text, fontsize, values)
+ if outline:
+ self['outline-colour'] = outline
+
+class Bar_Glass(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None):
+ varieties.__init__(self, 'bar_glass', alpha, colour, text, fontsize, values)
+
+class Bar_3d(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None):
+ varieties.__init__(self, 'bar_3d', alpha, colour, text, fontsize, values)
+
+class Bar_Sketch(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None, outline = None):
+ varieties.__init__(self, 'bar_sketch', alpha, colour, text, fontsize, values)
+ if outline:
+ self['outline-colour'] = outline
+
+class HBar(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None):
+ varieties.__init__(self, 'hbar', alpha, colour, text, fontsize, values)
+
+
+class Bar_Stack(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None, colours = None):
+ varieties.__init__(self, 'bar_stack', alpha, colour, text, fontsize, values)
+ if colours:
+ self['colours'] = colours
+
+# Area Charts
+class Area_Line(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None, fill = None, fill_alpha = None):
+ varieties.__init__(self, 'area_line', alpha, colour, text, fontsize, values)
+ if fill_alpha:
+ self['fill-alpha'] = fill_alpha
+ if fill:
+ self['fill'] = fill
+
+class Area_Hollow(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None, fill = None, fill_alpha = None):
+ varieties.__init__(self, 'area_hollow', alpha, colour, text, fontsize, values)
+ if fill_alpha:
+ self['fill-alpha'] = fill_alpha
+ if fill:
+ self['fill'] = fill
+
+# Pie Chart
+class Pie(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None, start_angle = None, animate = None, colours = None, label_colour = None):
+ varieties.__init__(self, 'pie', alpha, colour, text, fontsize, values)
+ if start_angle:
+ self['start-angle'] = start_angle
+ if animate:
+ self['animate'] = animate
+ if colours:
+ self['colours'] = colours
+ if label_colour:
+ self['label-colour'] = label_colour
+
+# Scatter Charts
+class Scatter(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None, colours = None):
+ varieties.__init__(self, 'scatter', alpha, colour, text, fontsize, values)
+
+class Scatter_Line(varieties):
+ def __init__(self, alpha = None, colour = None, text = None, fontsize = None, values = None, colours = None):
+ varieties.__init__(self, 'scatter_line', alpha, colour, text, fontsize, values)
+
+
+
+
diff --git a/include/ECM/open_flash_chart2/python-ofc-library/ofc-demo.py b/include/ECM/open_flash_chart2/python-ofc-library/ofc-demo.py
new file mode 100755
index 00000000..d518f195
--- /dev/null
+++ b/include/ECM/open_flash_chart2/python-ofc-library/ofc-demo.py
@@ -0,0 +1,136 @@
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Author: Emanuel Fonseca
+# Email: emdfonsecagmailcom
+# Date: 25 August 2008
+
+import cherrypy
+from string import Template
+
+import datetime
+
+import ofc2
+from ofc2_element import Line, Bar, BarStack
+
+xhtml_template = """
+
+
+
+
+
+
+$title
+
+
+
+
+ $body
+
+
+
+"""
+
+jstpl = Template('swfobject.embedSWF("/static/open-flash-chart.swf","$title", "$width", "$height", "$flash_ver", "expressInstall.swf", {"data-file": "$data_src"});\n')
+dvtpl = Template('$title
\n')
+
+class Chart(object):
+ type = ''
+ title = 'chart'
+
+ width=400
+ height=200
+ flash_ver='9.0.0'
+
+ data_src = None
+
+ chart = None
+
+ def index(self):
+ return self.chart.encode()
+ index.exposed = True
+
+ def __init__(self, type, name):
+ self.title = name
+ self.data_src='/'+name
+
+ def get_js(self):
+ return jstpl.substitute(title=self.title, width=self.width, height=self.height, flash_ver = self.flash_ver, data_src = self.data_src)
+
+ def get_div(self):
+ return dvtpl.substitute(title=self.title)
+
+class BarChart(Chart):
+ def __init__(self, type, name):
+ Chart.__init__(self, type, name)
+
+ # create the bar element and set its values
+ element = Bar(values=[9,8,7,6,5,4,3,2,1])
+
+ # create the chart and set its title
+ self.chart = ofc2.open_flash_chart(title=str(datetime.datetime.now()))
+ self.chart.add_element(element)
+
+class BarStackChart(Chart):
+ def __init__(self, type, name):
+ Chart.__init__(self, type, name)
+
+ # create the bar element and set its values
+ element = BarStack(values=[ [ 2.5, 5 ], [ 7.5 ], [ 5, { 'val': 5, 'colour': '#ff0000' } ], [ 2, 2, 2, 2, { "val": 2, 'colour': '#ff00ff' } ] ])
+
+ # create the chart and set its title
+ self.chart = ofc2.open_flash_chart(title=str(datetime.datetime.now()))
+ self.chart.set_y_axis(min=0, max=14, steps=7)
+ self.chart.set_x_axis(labels=['a', 'b', 'c', 'd'])
+ self.chart.add_element(element)
+
+class LineChart(Chart):
+ def __init__(self, type, name):
+ Chart.__init__(self, type, name)
+
+ # create the bar element and set its values
+ element = Line(values=[9,8,7,6,5,4,3,2,1])
+
+ # create the chart and set its title
+ self.chart = ofc2.open_flash_chart(title=str(datetime.datetime.now()))
+ self.chart.add_element(element)
+
+class OFC2Demo(object):
+ tpl = Template(xhtml_template)
+ swfobjs = ''
+ divs = ''
+
+ linechart = LineChart('line_chart', 'linechart') # var name must be the same as the second param
+ barchart = BarChart('bar_chart', 'barchart') # var name must be the same as the second param
+ barstackchart = BarStackChart('bar_stack', 'barstackchart') # var name must be the same as the second param
+
+ def index(self):
+ self.load_charts()
+ response = self.tpl.substitute(title='Open Flash Charts 2 - Python Library Demo', js=self.swfobjs, body=self.divs)
+ return response
+
+ def load_charts(self):
+ self.swfobjs = ''
+ self.divs = ''
+ self.add_chart(self.linechart)
+ self.add_chart(self.barchart)
+ self.add_chart(self.barstackchart)
+
+ def add_chart(self, chart):
+ self.swfobjs += chart.get_js()
+ self.divs += chart.get_div()
+
+ # Expose methods
+ index.exposed = True
+
+cherrypy.quickstart(OFC2Demo(), '/', 'cherrypy.conf')
+
diff --git a/include/ECM/open_flash_chart2/python-ofc-library/ofc2.py b/include/ECM/open_flash_chart2/python-ofc-library/ofc2.py
new file mode 100755
index 00000000..78028100
--- /dev/null
+++ b/include/ECM/open_flash_chart2/python-ofc-library/ofc2.py
@@ -0,0 +1,167 @@
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Author: Emanuel Fonseca
+# Email: emdfonsecagmailcom
+# Date: 25 August 2008
+
+import cjson
+
+class Title(dict):
+ def __init__(self, title, style=None):
+ self['text'] = title
+ self.set_style(style)
+
+ def set_style(self, style):
+ if style:
+ self['style'] = style
+
+class y_legend(Title):
+ pass
+
+class x_legend(Title):
+ pass
+
+##########################################
+# axis classes
+class axis(dict):
+ def __init__(self, stroke=None, tick_height=None, colour=None, grid_colour=None, steps=None):
+ self.set_stroke(stroke)
+ self.set_tick_height(tick_height)
+ self.set_colour(colour)
+ self.set_grid_colour(grid_colour)
+ self.set_steps(steps)
+
+ def set_stroke(self, stroke):
+ if stroke:
+ self['stroke'] = stroke
+
+ def set_tick_height(self, tick_height):
+ if tick_height:
+ self['tick_height'] = tick_height
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_grid_colour(self, grid_colour):
+ if grid_colour:
+ self['grid_colour'] = grid_colour
+
+ def set_steps(self, steps):
+ if steps:
+ self['steps'] = steps
+
+class x_axis(axis):
+ def __init__(self, stroke=None, tick_height=None, colour=None, grid_colour=None, labels=None, steps=None):
+ axis.__init__(self, stroke, tick_height, colour, grid_colour, steps)
+ self.set_labels(labels)
+ self['orientation'] = 2
+
+ def set_labels(self, labels):
+ if labels:
+ self['labels'] = labels
+
+class y_axis(axis):
+ def __init__(self, stroke=None, tick_height=None, colour=None, grid_colour=None, offset=None, max=None, min=None, steps=None):
+ axis.__init__(self, stroke, tick_height, colour, grid_colour, steps)
+ self.set_offset(offset)
+ self.set_max(max)
+ self.set_min(min)
+
+ def set_offset(self, offset):
+ if offset:
+ self['offset'] = offset
+
+ def set_max(self, max):
+ if max:
+ self['max'] = max
+
+ def set_min(self, min):
+ if min:
+ self['min'] = min
+
+##########################################
+# open_flash_chart class
+class tooltip(dict):
+ def __init__(self, shadow=None, stroke=None, colour=None, bg_colour=None, title_style=None, body_style=None):
+ self.set_shadow(shadow)
+ self.set_stroke(stroke)
+ self.set_colour(colour)
+ self.set_background(bg_colour)
+ self.set_title(title_style)
+ self.set_body(body_style)
+
+ def set_shadow(self, shadow):
+ if shadow:
+ self['shadow'] = shadow
+
+ def set_stroke(self, stroke):
+ if stroke:
+ self['stroke'] = stroke
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_background(self, background):
+ if background:
+ self['background'] = background
+
+ def set_title(self, title):
+ if title:
+ self['title'] = title
+
+ def set_body(self, body):
+ if body:
+ self['body'] = body
+
+##########################################
+# open_flash_chart class
+class open_flash_chart(dict):
+ def __init__(self, title, style=None):
+ self['title'] = Title(title, style)
+
+ def set_x_legend(self, legend):
+ self['x_legend'] = x_legend(legend)
+
+ def set_y_legend(self, legend):
+ self['y_legend'] = y_legend(legend)
+
+ def set_x_axis(self, stroke=None, tick_height=None, colour=None, grid_colour=None, labels=None, steps=None):
+ self['x_axis'] = x_axis(stroke, tick_height, colour, grid_colour, labels, steps)
+
+ def set_y_axis(self, stroke=None, tick_height=None, colour=None, grid_colour=None, offset=None, max=None, min=None, steps=None):
+ self['y_axis'] = y_axis(stroke, tick_height, colour, grid_colour, offset, max, min, steps)
+
+ def set_y_axis_right(self, stroke=None, tick_height=None, colour=None, grid_colour=None, offset=None, max=None, min=None, steps=None):
+ self['y_axis_right'] = y_axis(stroke, tick_height, colour, grid_colour, offset, max, min, steps)
+
+ def set_bg_colour(self, colour):
+ self['bg_colour'] = colour
+
+ def set_tooltip(self, shadow=None, stroke=None, colour=None, bg_colour=None, title_style=None, body_style=None):
+ self['tooltip'] = tooltip(shadow, stroke, colour, bg_colour, title_style, body_style)
+
+ def add_element(self, element):
+ try:
+ self['elements'].append(element)
+ except:
+ self['elements'] = [element]
+
+ def encode(self):
+ return cjson.encode(self)
+
+#ofc = open_flash_chart('Example JSON')
+#ofc.set_y_legend('Example Y Legend')
+#ofc.set_x_legend('Example X Legend')
+#ofc.set_x_axis(1, 1, '#ff0000', '#00ff00', ['sun', 'mon', 'tue'])
+#ofc.set_x_axis(labels=['sun', 'mon', 'tue'])
+
+#print cjson.encode(ofc)
diff --git a/include/ECM/open_flash_chart2/python-ofc-library/ofc2_element.py b/include/ECM/open_flash_chart2/python-ofc-library/ofc2_element.py
new file mode 100755
index 00000000..93f436f2
--- /dev/null
+++ b/include/ECM/open_flash_chart2/python-ofc-library/ofc2_element.py
@@ -0,0 +1,57 @@
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Author: Emanuel Fonseca
+# Email: emdfonsecagmailcom
+# Date: 25 August 2008
+
+class element(dict):
+ def __init__(self, type=None, alpha=None, colour=None, text=None, fontsize=None, values=None):
+ self.set_type(type)
+ self.set_alpha(alpha)
+ self.set_colour(colour)
+ self.set_text(text)
+ self.set_fontsize(fontsize)
+ self.set_values(values)
+
+ def set_type(self, type):
+ if type:
+ self['type'] = type
+
+ def set_alpha(self, alpha):
+ if alpha:
+ self['alpha'] = alpha
+
+ def set_colour(self, colour):
+ if colour:
+ self['colour'] = colour
+
+ def set_text(self, text):
+ if text:
+ self['text'] = text
+
+ def set_fontsize(self, fontsize):
+ if fontsize:
+ self['font-size'] = fontsize
+
+ def set_values(self, values):
+ if values:
+ self['values'] = values
+
+class Line(element):
+ def __init__(self, type=None, alpha=None, colour=None, text=None, fontsize=None, values=None):
+ element.__init__(self, 'line', alpha, colour, text, fontsize, values)
+
+class Bar(element):
+ def __init__(self, type=None, alpha=None, colour=None, text=None, fontsize=None, values=None):
+ element.__init__(self, 'bar', alpha, colour, text, fontsize, values)
+
+class BarStack(element):
+ def __init__(self, type=None, alpha=None, colour=None, text=None, fontsize=None, values=None):
+ element.__init__(self, 'bar_stack', alpha, colour, text, fontsize, values)
diff --git a/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/B2BReader.php b/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/B2BReader.php
index 07330a63..9cff5445 100644
--- a/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/B2BReader.php
+++ b/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/B2BReader.php
@@ -9,7 +9,7 @@ DELETE FROM ecommerce_invoices_products WHERE invoice_id IN (
DELETE FROM ecommerce_invoices WHERE origin='amazon b2b' AND register_date LIKE '2025-04-%';
*/
-$filename = getcwd() . '/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/files/07-2025.csv';
+$filename = getcwd() . '/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/files/08-2025.csv';
$handle = fopen($filename, 'r');
if ($handle === false) {
die('Cannot open file: ' . $filename);
diff --git a/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/amazonWZ.php b/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/amazonWZ.php
index 25ac60b4..cdcd76a5 100644
--- a/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/amazonWZ.php
+++ b/modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/amazonWDT/amazonWZ.php
@@ -1,7 +1,7 @@
parent_address_city = 'Obrowo';
$invoice->type = 'normal';
- $date = '31.07.2025';
+ $date = '31.08.2025';
$invoice->register_date = $date;
$invoice->sell_date = $date;
$invoice->validtill_date = $date;
@@ -87,6 +87,10 @@ function createInvoice($type, $products, $DO_REAL_SAVE = false)
if ($p[10] == 'FR00148_') {
$p[10] = 'FR00148_1000_amz_de_3pcs';
}
+ // (08.2025)
+ if ($p[10] == 'F3-W9PW-O239') {
+ $p[10] = 'FR00148_1000_amz_de';
+ }
$fromDb = $db->fetchByAssoc($db->query("SELECT id, name, code, product_category_id, unit_id FROM ecmproducts WHERE code = '$p[10]' OR amazon_code = '$p[10]'"));
if ($fromDb == false) {