diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..91078ac --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/env diff --git a/README.md b/README.md index c613c0d..2bd328a 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,17 @@ Cubes Examples Cubes is Lightweight Python Online Analytical Processing (OLAP) framework. This package contains example uses of cubes including data. +This repository is a fork of DataBrewery cubes-examples, but this one contains the +Cubes examples used by CubesViewer. + Contents -------- -* *procurements* - Public Procurements of Slovakia * *webshop* - Sample model and data of an imaginary online shop + (see `webshop/README.md` file for more information). + +A tutorial for Cubes and CubesViewer using this example is available at +http://github.com/jjmontesl/cubesviewer/tree/master/doc/guide/cubesviewer-quickstart.md . +You can see the webshop example online at http://jjmontesl.github.io/cubesviewer/ . diff --git a/procurements/README.md b/procurements/README.md deleted file mode 100644 index d82e3d9..0000000 --- a/procurements/README.md +++ /dev/null @@ -1,40 +0,0 @@ -Public Procurements of Slovakia -=============================== - -Example includes: - -* star schema -* mappings -* default dimension naming with prefixes -* default cube fact table naming (with explicit prefix) -* Flask (web microframework) example browser -* cross-table (see cross.py) - -Slicer Use ----------- - -Execute: - - $ slicer serve slicer.ini - -Documentation: http://packages.python.org/cubes/server.html - -Cross table ------------ - - $ python cross.py - -Result output is in table.html. - -Flask Use ---------- - - cd procurements - python flask_app.py - -Navigate browser to http://localhost:5000/ - -Source Data ------------ - -http://tendre.sme.sk diff --git a/procurements/cross.py b/procurements/cross.py deleted file mode 100644 index bf6839d..0000000 --- a/procurements/cross.py +++ /dev/null @@ -1,46 +0,0 @@ -import sqlalchemy -import cubes -import cubes.tutorial.sql as tutorial - -def print_cross_table(onrows, oncolumns, table): - # Print column header: - out = "" - - out += "" * len(onrows) + "".join(["" % c for c in table.columns]) - - measure = "amount_sum" - - for row_hdr, row in zip(table.rows, table.data): - row_label = "".join(["" % h for h in tuple(row_hdr)]) - values_str = "".join(["" % (value[0] if value else 0) for value in row]) - row_string = "%s%s" % (row_label, values_str) - out += row_string + "\n" - - out += "
%s%s%s
" - - with open("table.html", "w") as f: - f.write(out) - -######################################################################## -# Create browsing context - -model = cubes.load_model("vvo_model.json") -cube = model.cube("contracts") -workspace = cubes.create_workspace("sql", model, url="sqlite:///vvo_data.sqlite", - dimension_prefix="dm_", - fact_prefix="ft_") -browser = workspace.browser(cube) -cell = cubes.Cell(cube) - -######################################################################## -# Create cross-table (written to table.html in current directory) - -result = browser.aggregate(cell, drilldown=["process_type", "date"]) - -rows=["process_type.description"] -columns=["date.year"] - -table = result.cross_table(rows, columns, ["contract_amount_sum"]) -print_cross_table(rows, columns, table) - -print "Created file: table.html" diff --git a/procurements/drilldown_tree.py b/procurements/drilldown_tree.py deleted file mode 100644 index f214607..0000000 --- a/procurements/drilldown_tree.py +++ /dev/null @@ -1,52 +0,0 @@ -import cubes - -model = cubes.load_model("vvo_model.json") -cube = model.cube("contracts") -workspace = cubes.create_workspace("sql", model, url="sqlite:///vvo_data.sqlite", - dimension_prefix="dm_", - fact_prefix="ft_") - -# workspace = cubes.create_workspace("sql", model, url="postgres://localhost/ep2012", -# schema="vvo", -# dimension_prefix="dm_", -# fact_prefix="ft_", -# denormalized_view_schema="views", -# use_denormalization=False, -# denormalized_view_prefix="mft_") - -def drilldown(cell, dimension): - """Drill-down and aggregate recursively through als levels of `dimension`. - - This function is like recursively traversing directories on a file system - and aggregating the file sizes, for example. - - * `cell` - cube cell to drill-down - * `dimension` - dimension to be traversed through all levels - """ - - if cell.is_base(dimension): - return - - result = browser.aggregate(cell, drilldown=[dimension]) - - # for row in cubes.drilldown_rows(cell, result, dimension): - for row in result.table_rows(dimension): - indent = " " * (len(row.path) - 1) - print "%s%s: %d" % (indent, row.label, row.record["contract_amount_sum"]) - - new_cell = cell.drilldown(dimension, row.key) - drilldown(new_cell, dimension) - -# Drill down through all levels of item hierarchy -browser = workspace.browser(cube) - -# Get whole cube -cell = cubes.Cell(cube) - -print "Drill down through date hierarchy:" -drilldown(cell, cube.dimension("date")) - -# print "Drill down through CPV hierarchy in 2011:" -# cell = cell.slice(cubes.PointCut("date", [2010,5])) -# drilldown(cell, cube.dimension("cpv")) - diff --git a/procurements/flask_app.py b/procurements/flask_app.py deleted file mode 100644 index 8d396e2..0000000 --- a/procurements/flask_app.py +++ /dev/null @@ -1,120 +0,0 @@ -from flask import Flask, render_template, request, g -import cubes -import os.path -import sqlalchemy - -import logging - -logger = cubes.get_logger() -logger.setLevel(logging.DEBUG) - -app = Flask(__name__) - -# -# Data we aregoing to browse and logical model of the data -# - -APP_ROOT = os.path.dirname(os.path.abspath(__file__)) - -MODEL_PATH = os.path.join(APP_ROOT, "vvo_model.json") -DB_PATH = os.path.join(APP_ROOT, "vvo_data.sqlite") -DB_URL = "sqlite:///" + DB_PATH - -CUBE_NAME = "contracts" - -# Some global variables. We do not have to care about Flask provided thread -# safety here, as they are non-mutable. - -workspace = None -model = None - -@app.route("/") -@app.route("/") -def report(dim_name=None): - cube = workspace.cube("contracts") - browser = workspace.browser(cube) - result = browser.aggregate() - print 'keys: ', result.levels - - if not dim_name: - return render_template('report.html', dimensions=cube.dimensions) - - # First we need to get the hierarchy to know the order of levels. Cubes - # supports multiple hierarchies internally. - - dimension = cube.dimension(dim_name) - hierarchy = dimension.hierarchy() - - # Parse the`cut` request parameter and convert it to a list of - # actual cube cuts. Think of this as of multi-dimensional path, even that - # for this simple example, we are goint to use only one dimension for - # browsing. - - cutstr = request.args.get("cut") - cell = cubes.Cell(browser.cube, cubes.cuts_from_string(cube,cutstr)) - - # Get the cut of actually browsed dimension, so we know "where we are" - - # the current dimension path - cut = cell.cut_for_dimension(dimension) - - if cut: - path = cut.path - else: - path = [] - - # - # Do the work, do the aggregation. - # - print "AGGREGATE %s DD: %s" % (cell, dim_name) - result = browser.aggregate(cell, drilldown=[dim_name]) - - # If we have no path, then there is no cut for the dimension, # therefore - # there is no corresponding detail. - if path: - details = browser.cell_details(cell, dimension)[0] - else: - details = [] - - # Find what level we are on and what is going to be the drill-down level - # in the hierarchy - - levels = hierarchy.levels_for_path(path) - if levels: - next_level = hierarchy.next_level(levels[-1]) - else: - next_level = hierarchy.next_level(None) - - # Are we at the very detailed level? - - is_last = hierarchy.is_last(next_level) - # Finally, we render it - - return render_template('report.html', - dimensions=cube.dimensions, - dimension=dimension, - levels=levels, - next_level=next_level, - result=result, - cell=cell, - is_last=is_last, - details=details) - -@app.before_first_request -def initialize_model(): - global model - global workspace - #model = cubes.load_model(MODEL_PATH) - # workspace = cubes.create_workspace("sql",url=DB_URL, - # fact_prefix="ft_", - # dimension_prefix="dm_") - # engine = sqlalchemy.create_engine(DB_URL) - # connection = engine.connect() - - workspace = cubes.Workspace(config='slicer.ini') - #workspace.register_default_store("sql",url=DB_URL) - print MODEL_PATH - print DB_URL - #workspace.import_model(MODEL_PATH) -if __name__ == "__main__": - app.debug = True - app.run() diff --git a/procurements/postgres/README.md b/procurements/postgres/README.md deleted file mode 100644 index 845b0b6..0000000 --- a/procurements/postgres/README.md +++ /dev/null @@ -1,30 +0,0 @@ -PostgreSQL database dump -======================== - -Dump of example data (same as in the SQLite database) for Postgres database. - -Files: - -* pg_dump.sql - schema and full data dump -* pg_dump-schema.sql - dump of schema pnly - -Load the data into database, edit slicer-pg.ini (change database name). - -Use: - - $ slicer serve slicer-pg.ini - -Denormalisation ---------------- - -1. uncomment three denormalisation lines in the slicer-pg.ini -2. either create schema `views` or change `denormalized_view_schema` -3. execute: - - $ slicer denormalize slicer-pg.ini - -Try also with: --force, --materialize and --index arguments. - -For more information read http://packages.python.org/cubes/slicer.html#denormalize - - diff --git a/procurements/postgres/pg_dump-schema.sql b/procurements/postgres/pg_dump-schema.sql deleted file mode 100644 index 36f0d22..0000000 --- a/procurements/postgres/pg_dump-schema.sql +++ /dev/null @@ -1,260 +0,0 @@ --- --- PostgreSQL database dump --- - -SET statement_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = off; -SET check_function_bodies = false; -SET client_min_messages = warning; -SET escape_string_warning = off; - --- --- Name: vvo; Type: SCHEMA; Schema: -; Owner: postgres --- - -CREATE SCHEMA vvo; - - -ALTER SCHEMA vvo OWNER TO postgres; - -SET search_path = vvo, pg_catalog; - -SET default_tablespace = ''; - -SET default_with_oids = false; - --- --- Name: dm_cpv; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE dm_cpv ( - id integer, - code text, - code_src text, - code_wcheck text, - level integer, - division text, - "group" text, - class text, - category text, - detail text, - division_compet numeric, - group_compet numeric, - class_compet numeric, - category_compet numeric, - detail_compet numeric, - division_label_en text, - group_label_en text, - class_label_en text, - category_label_en text, - detail_label_en text, - division_label_sk text, - group_label_sk text, - class_label_sk text, - category_label_sk text, - detail_label_sk text -); - - -ALTER TABLE vvo.dm_cpv OWNER TO stefan; - --- --- Name: dm_criteria; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE dm_criteria ( - id integer, - code character varying, - description_sk character varying, - sdesc_sk character varying, - description_en character varying, - sdesc_en character varying -); - - -ALTER TABLE vvo.dm_criteria OWNER TO stefan; - --- --- Name: dm_date; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE dm_date ( - id integer, - year integer, - month integer, - month_name_sk character varying, - month_sname_sk character varying, - month_name_en character varying, - month_sname_en character varying, - day integer, - week_day integer, - week_day_name_sk character varying, - week_day_sname_sk character varying, - week_day_name_en character varying, - week_day_sname_en character varying -); - - -ALTER TABLE vvo.dm_date OWNER TO stefan; - --- --- Name: dm_geography; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE dm_geography ( - id integer, - okres character varying, - okres_code character varying, - okres_regis character varying, - kraj character varying, - kraj_code character varying -); - - -ALTER TABLE vvo.dm_geography OWNER TO stefan; - --- --- Name: dm_process_type; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE dm_process_type ( - id integer, - code character varying, - description_sk character varying, - sdesc_sk character varying, - description_en character varying, - sdesc_en character varying -); - - -ALTER TABLE vvo.dm_process_type OWNER TO stefan; - --- --- Name: dm_procurer; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE dm_procurer ( - id integer, - ico character varying, - name character varying, - address text, - region character varying, - country character varying, - date_start date, - date_end date, - legal_form character varying, - legal_form_code integer, - account_sector character varying, - account_sector_code integer, - ownership character varying, - ownership_code integer, - source character varying, - date_created date, - offer_count_avg numeric, - competitiveness numeric -); - - -ALTER TABLE vvo.dm_procurer OWNER TO stefan; - --- --- Name: dm_supplier; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE dm_supplier ( - id integer, - ico character varying, - name character varying, - address text, - region character varying, - country character varying, - date_start date, - date_end date, - legal_form character varying, - legal_form_code integer, - account_sector character varying, - account_sector_code integer, - ownership character varying, - ownership_code integer, - source character varying, - date_created date, - offer_count_avg numeric, - competitiveness numeric -); - - -ALTER TABLE vvo.dm_supplier OWNER TO stefan; - --- --- Name: ft_contracts; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE ft_contracts ( - id integer, - document_id integer, - document_code character varying, - contract_key character varying, - document_type_code character varying, - vz_flag integer, - bulletin_number character varying, - announcement_number character varying, - source_url character varying, - bulletin_date_id integer, - bulletin_date date, - contract_name text, - process_type_id integer, - contract_type_id integer, - criteria_id integer, - elektronicka_aukcia_flag integer, - zakazka_eurofondy_flag integer, - cpv_id integer, - cpv_code character varying, - procurer_id integer, - supplier_id integer, - geography_id integer, - predpoklad_subdodavok character varying, - pocet_ponuk integer, - pocet_zmluv integer, - procurement_amount numeric, - procurement_currency character varying, - contract_amount numeric, - contract_currency character varying -); - - -ALTER TABLE vvo.ft_contracts OWNER TO stefan; - --- --- Name: dm_account_sector; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE dm_account_sector ( - id integer, - sektor character varying, - sektor_code integer, - sektor_desc character varying, - sektor_sdesc character varying -); - - -ALTER TABLE vvo.dm_account_sector OWNER TO stefan; - --- --- Name: dm_contract_type; Type: TABLE; Schema: vvo; Owner: stefan; Tablespace: --- - -CREATE TABLE dm_contract_type ( - id integer, - code character varying, - description character varying, - sdesc character varying -); - - -ALTER TABLE vvo.dm_contract_type OWNER TO stefan; - --- --- PostgreSQL database dump complete --- - diff --git a/procurements/postgres/pg_dump.sql.gz b/procurements/postgres/pg_dump.sql.gz deleted file mode 100644 index 5baefc4..0000000 Binary files a/procurements/postgres/pg_dump.sql.gz and /dev/null differ diff --git a/procurements/postgres/slicer-pg.ini b/procurements/postgres/slicer-pg.ini deleted file mode 100644 index 81bc0b5..0000000 --- a/procurements/postgres/slicer-pg.ini +++ /dev/null @@ -1,33 +0,0 @@ -# Slicer OLAP server configuration -# -# replace VVO_ROOT with absolute path to VVO files -# - -[model] -path: ../vvo_model.json -cube: contracts -locales: en,sk - -[server] -# Set writeable path for logging slicer info -log_level: info -prettyprint: true -backend: sql -reload: true - -[workspace] -# EDIT: change the database -url: postgres://localhost/ep2012 -schema: vvo -fact_prefix: ft_ -dimension_prefix: dm_ -debug: true - -# Denormalisation demo (see README.md) -# -# denormalized_view_prefix = mft_ -# denormalized_view_schema = views -# use_denormalization = yes - -[translations] -sk: ../vvo_model-sk.json diff --git a/procurements/procurements.cubesmodel/cube_contracts.json b/procurements/procurements.cubesmodel/cube_contracts.json deleted file mode 100644 index e869f1e..0000000 --- a/procurements/procurements.cubesmodel/cube_contracts.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "dimensions": [ - "date", - "cpv", - "procurer", - "supplier", - "process_type", - "criteria", - "geography" - ], - "measures": [ - { - "name": "contract_amount" - } - ], - "name": "contracts", - "details": [ - { - "name": "contract_name", - "label": "Contract name" - }, - { - "name": "bulletin_number", - "label": "Bulletin number" - }, - { - "name": "source_url", - "label": "Source URL" - } - ], - "joins": [ - { - "master": "bulletin_date_id", - "detail": "dm_date.id", - "method": "detail" - }, - { - "master": "cpv_id", - "detail": "dm_cpv.id" - }, - { - "master": "procurer_id", - "detail": "dm_procurer.id" - }, - { - "master": "supplier_id", - "detail": "dm_supplier.id" - }, - { - "master": "process_type_id", - "detail": "dm_process_type.id" - }, - { - "master": "criteria_id", - "detail": "dm_criteria.id" - }, - { - "master": "geography_id", - "detail": "dm_geography.id" - } - ], - "mappings": { - "fact.date_id": "bulletin_date_id", - "zmluva_hodnota": "zmluva_hodnota" - } -} diff --git a/procurements/procurements.cubesmodel/dim_cpv.json b/procurements/procurements.cubesmodel/dim_cpv.json deleted file mode 100644 index c59fcb5..0000000 --- a/procurements/procurements.cubesmodel/dim_cpv.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "hierarchies": [ - { - "levels": [ - "division", - "group", - "class", - "category", - "detail" - ], - "name": "default" - } - ], - "levels": [ - { - "name": "division", - "label": "division", - "key": "division", - "attributes": [ - { - "name": "division" - }, - { - "name": "division_label", - "locales": [ - "en", - "sk" - ] - }, - { - "name": "division_compet", - "label": "competitiveness in division" - } - ], - "order_attribute": "division", - "label_attribute": "division_label" - }, - { - "name": "group", - "label": "group", - "key": "group", - "attributes": [ - { - "name": "group", - "label": "Group code" - }, - { - "name": "group_label", - "locales": [ - "en", - "sk" - ], - "label": "Group" - }, - { - "name": "group_compet", - "label": "competitiveness in grouop" - } - ], - "order_attribute": "group", - "label_attribute": "group_label" - }, - { - "name": "class", - "label": "class", - "key": "class", - "attributes": [ - { - "name": "class" - }, - { - "name": "class_label", - "locales": [ - "en", - "sk" - ] - }, - { - "name": "class_compet", - "label": "competitiveness in class" - } - ], - "order_attribute": "class", - "label_attribute": "class_label" - }, - { - "name": "category", - "label": "category", - "key": "category", - "attributes": [ - { - "name": "category", - "label": "category code" - }, - { - "name": "category_label", - "locales": [ - "en", - "sk" - ], - "label": "category" - }, - { - "name": "category_compet", - "label": "competitiveness in category" - } - ], - "order_attribute": "category", - "label_attribute": "category_label" - }, - { - "name": "detail", - "label": "detail", - "key": "id", - "attributes": [ - { - "name": "id" - }, - { - "name": "detail", - "label": "detail code" - }, - { - "name": "detail_label", - "locales": [ - "en", - "sk" - ], - "label": "detail" - }, - { - "name": "code", - "label": "CPV Code" - }, - { - "name": "detail_compet", - "label": "competitiveness" - } - ], - "order_attribute": "id", - "label_attribute": "detail_label" - } - ], - "name": "cpv", - "label": "Common Procurement Vocabulary" -} \ No newline at end of file diff --git a/procurements/procurements.cubesmodel/dim_criteria.json b/procurements/procurements.cubesmodel/dim_criteria.json deleted file mode 100644 index 71143a3..0000000 --- a/procurements/procurements.cubesmodel/dim_criteria.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "hierarchies": [ - { - "levels": [ - "criteria" - ], - "name": "default" - } - ], - "levels": [ - { - "attributes": [ - { - "name": "code" - }, - { - "name": "description", - "locales": [ - "en", - "sk" - ] - }, - { - "name": "sdesc", - "locales": [ - "en", - "sk" - ] - }, - { - "name": "id" - } - ], - "order_attribute": "code", - "label_attribute": "description", - "name": "criteria", - "key": "code" - } - ], - "name": "criteria", - "label": "Evalutaion criteria" -} \ No newline at end of file diff --git a/procurements/procurements.cubesmodel/dim_date.json b/procurements/procurements.cubesmodel/dim_date.json deleted file mode 100644 index 3874b02..0000000 --- a/procurements/procurements.cubesmodel/dim_date.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "info": { - "cv-datefilter": true - }, - "role": "time", - "hierarchies": [ - { - "levels": [ - "year", - "month", - "day" - ], - "name": "default" - } - ], - "levels": [ - { - "info": { - "cv-datefilter-field": "year" - }, - "name": "year", - "label": "Year", - "key": "year", - "attributes": [ - { - "name": "year" - } - ], - "order_attribute": "year", - "label_attribute": "year" - }, - { - "info": { - "cv-datefilter-field": "month" - }, - "name": "month", - "label": "Month", - "key": "month", - "attributes": [ - { - "name": "month" - }, - { - "name": "month_name", - "locales": [ - "en", - "sk" - ] - }, - { - "name": "month_sname", - "locales": [ - "en", - "sk" - ] - } - ], - "order_attribute": "month", - "label_attribute": "month_name" - }, - { - "info": { - "cv-datefilter-field": "day" - }, - "name": "day", - "label": "Day", - "key": "day", - "attributes": [ - { - "name": "id" - }, - { - "name": "day" - } - ], - "order_attribute": "id", - "label_attribute": "day" - } - ], - "name": "date", - "label": "Date" -} diff --git a/procurements/procurements.cubesmodel/dim_geography.json b/procurements/procurements.cubesmodel/dim_geography.json deleted file mode 100644 index aaf8db3..0000000 --- a/procurements/procurements.cubesmodel/dim_geography.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "hierarchies": [ - { - "levels": [ - "kraj", - "okres" - ], - "name": "default" - } - ], - "levels": [ - { - "attributes": [ - { - "name": "okres_code", - "label": "county code" - }, - { - "name": "okres", - "label": "county" - } - ], - "order_attribute": "okres_code", - "label_attribute": "okres", - "name": "okres", - "key": "okres_code" - }, - { - "attributes": [ - { - "name": "kraj_code", - "label": "region code" - }, - { - "name": "kraj", - "label": "region" - } - ], - "order_attribute": "kraj_code", - "label_attribute": "kraj", - "name": "kraj", - "key": "kraj_code" - } - ], - "name": "geography", - "label": "Region" -} \ No newline at end of file diff --git a/procurements/procurements.cubesmodel/dim_process_type.json b/procurements/procurements.cubesmodel/dim_process_type.json deleted file mode 100644 index ff2c384..0000000 --- a/procurements/procurements.cubesmodel/dim_process_type.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "hierarchies": [ - { - "levels": [ - "process_type" - ], - "name": "default" - } - ], - "levels": [ - { - "attributes": [ - { - "name": "id" - }, - { - "name": "code" - }, - { - "name": "description", - "locales": [ - "en", - "sk" - ] - }, - { - "name": "sdesc", - "locales": [ - "en", - "sk" - ] - } - ], - "order_attribute": "id", - "label_attribute": "description", - "name": "process_type", - "key": "id" - } - ], - "name": "process_type", - "label": "Procurement type" -} \ No newline at end of file diff --git a/procurements/procurements.cubesmodel/dim_procurer.json b/procurements/procurements.cubesmodel/dim_procurer.json deleted file mode 100644 index 2e03fb6..0000000 --- a/procurements/procurements.cubesmodel/dim_procurer.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "hierarchies": [ - { - "levels": [ - "sector", - "procurer" - ], - "name": "default" - } - ], - "levels": [ - { - "attributes": [ - { - "name": "account_sector_code", - "label": "account sector code" - }, - { - "name": "account_sector", - "label": "account sector" - } - ], - "order_attribute": "account_sector_code", - "label_attribute": "account_sector", - "name": "sector", - "key": "account_sector_code" - }, - { - "attributes": [ - { - "name": "id", - "label": "id" - }, - { - "name": "ico", - "label": "organisation ID" - }, - { - "name": "name", - "label": "name" - }, - { - "name": "region", - "label": "region" - }, - { - "name": "address", - "label": "address" - }, - { - "name": "legal_form", - "label": "legal form" - }, - { - "name": "offer_count_avg", - "label": "average number of offers" - }, - { - "name": "competitiveness", - "label": "competitiveness" - } - ], - "order_attribute": "id", - "label_attribute": "name", - "name": "procurer", - "key": "id" - } - ], - "name": "procurer", - "label": "Procurer" -} \ No newline at end of file diff --git a/procurements/procurements.cubesmodel/dim_supplier.json b/procurements/procurements.cubesmodel/dim_supplier.json deleted file mode 100644 index 287ede5..0000000 --- a/procurements/procurements.cubesmodel/dim_supplier.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "hierarchies": [ - { - "levels": [ - "supplier" - ], - "name": "default" - } - ], - "levels": [ - { - "attributes": [ - { - "name": "id" - }, - { - "name": "ico", - "label": "company ID" - }, - { - "name": "name", - "label": "name" - }, - { - "name": "address", - "label": "address" - }, - { - "name": "country", - "label": "country" - }, - { - "name": "date_start", - "label": "operating since" - }, - { - "name": "date_end", - "label": "company closed date" - }, - { - "name": "legal_form", - "label": "legal form" - }, - { - "name": "ownership", - "label": "ownership" - }, - { - "name": "offer_count_avg", - "label": "average number of offers" - }, - { - "name": "competitiveness", - "label": "competitiveness" - } - ], - "order_attribute": "id", - "label_attribute": "name", - "name": "supplier", - "key": "id" - } - ], - "name": "supplier", - "label": "Supplier" -} \ No newline at end of file diff --git a/procurements/procurements.cubesmodel/model.json b/procurements/procurements.cubesmodel/model.json deleted file mode 100644 index 7f9e4d9..0000000 --- a/procurements/procurements.cubesmodel/model.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "vvo" -} \ No newline at end of file diff --git a/procurements/slicer.ini b/procurements/slicer.ini deleted file mode 100644 index 9631b32..0000000 --- a/procurements/slicer.ini +++ /dev/null @@ -1,32 +0,0 @@ -# Slicer OLAP server configuration -# -# replace VVO_ROOT with absolute path to VVO files -# - -[workspace] -log_level: debug - -[server] -# Set writeable path for logging slicer info -prettyprint: true -allow_cors_origin: * -reload: true - -[store] -type: sql -url: sqlite:///vvo_data.sqlite -fact_prefix: ft_ -dimension_prefix: dm_ -debug: true - -[models] -main: procurements.cubesmodel - -[translation-sk] -main: vvo_model-sk.json - -[translations] -main: vvo_model-sk.json - -[translation-main] -sk: vvo_model-sk.json diff --git a/procurements/static/bootstrap-responsive.min.css b/procurements/static/bootstrap-responsive.min.css deleted file mode 100644 index bc3f2ab..0000000 --- a/procurements/static/bootstrap-responsive.min.css +++ /dev/null @@ -1,3 +0,0 @@ - -.hidden{display:none;visibility:hidden;} -@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:768px){.container{width:auto;padding:0 20px;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;}}@media (min-width:768px) and (max-width:980px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .span1{width:42px;} .span2{width:104px;} .span3{width:166px;} .span4{width:228px;} .span5{width:290px;} .span6{width:352px;} .span7{width:414px;} .span8{width:476px;} .span9{width:538px;} .span10{width:600px;} .span11{width:662px;} .span12,.container{width:724px;} .offset1{margin-left:82px;} .offset2{margin-left:144px;} .offset3{margin-left:206px;} .offset4{margin-left:268px;} .offset5{margin-left:330px;} .offset6{margin-left:392px;} .offset7{margin-left:454px;} .offset8{margin-left:516px;} .offset9{margin-left:578px;} .offset10{margin-left:640px;} .offset11{margin-left:702px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid .span1{width:5.801104972%;} .row-fluid .span2{width:14.364640883%;} .row-fluid .span3{width:22.928176794%;} .row-fluid .span4{width:31.491712705%;} .row-fluid .span5{width:40.055248616%;} .row-fluid .span6{width:48.618784527%;} .row-fluid .span7{width:57.182320438000005%;} .row-fluid .span8{width:65.74585634900001%;} .row-fluid .span9{width:74.30939226%;} .row-fluid .span10{width:82.87292817100001%;} .row-fluid .span11{width:91.436464082%;} .row-fluid .span12{width:99.999999993%;} input.span1,textarea.span1,.uneditable-input.span1{width:32px;} input.span2,textarea.span2,.uneditable-input.span2{width:94px;} input.span3,textarea.span3,.uneditable-input.span3{width:156px;} input.span4,textarea.span4,.uneditable-input.span4{width:218px;} input.span5,textarea.span5,.uneditable-input.span5{width:280px;} input.span6,textarea.span6,.uneditable-input.span6{width:342px;} input.span7,textarea.span7,.uneditable-input.span7{width:404px;} input.span8,textarea.span8,.uneditable-input.span8{width:466px;} input.span9,textarea.span9,.uneditable-input.span9{width:528px;} input.span10,textarea.span10,.uneditable-input.span10{width:590px;} input.span11,textarea.span11,.uneditable-input.span11{width:652px;} input.span12,textarea.span12,.uneditable-input.span12{width:714px;}}@media (max-width:980px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .span1{width:70px;} .span2{width:170px;} .span3{width:270px;} .span4{width:370px;} .span5{width:470px;} .span6{width:570px;} .span7{width:670px;} .span8{width:770px;} .span9{width:870px;} .span10{width:970px;} .span11{width:1070px;} .span12,.container{width:1170px;} .offset1{margin-left:130px;} .offset2{margin-left:230px;} .offset3{margin-left:330px;} .offset4{margin-left:430px;} .offset5{margin-left:530px;} .offset6{margin-left:630px;} .offset7{margin-left:730px;} .offset8{margin-left:830px;} .offset9{margin-left:930px;} .offset10{margin-left:1030px;} .offset11{margin-left:1130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid .span1{width:5.982905983%;} .row-fluid .span2{width:14.529914530000001%;} .row-fluid .span3{width:23.076923077%;} .row-fluid .span4{width:31.623931624%;} .row-fluid .span5{width:40.170940171000005%;} .row-fluid .span6{width:48.717948718%;} .row-fluid .span7{width:57.264957265%;} .row-fluid .span8{width:65.81196581200001%;} .row-fluid .span9{width:74.358974359%;} .row-fluid .span10{width:82.905982906%;} .row-fluid .span11{width:91.45299145300001%;} .row-fluid .span12{width:100%;} input.span1,textarea.span1,.uneditable-input.span1{width:60px;} input.span2,textarea.span2,.uneditable-input.span2{width:160px;} input.span3,textarea.span3,.uneditable-input.span3{width:260px;} input.span4,textarea.span4,.uneditable-input.span4{width:360px;} input.span5,textarea.span5,.uneditable-input.span5{width:460px;} input.span6,textarea.span6,.uneditable-input.span6{width:560px;} input.span7,textarea.span7,.uneditable-input.span7{width:660px;} input.span8,textarea.span8,.uneditable-input.span8{width:760px;} input.span9,textarea.span9,.uneditable-input.span9{width:860px;} input.span10,textarea.span10,.uneditable-input.span10{width:960px;} input.span11,textarea.span11,.uneditable-input.span11{width:1060px;} input.span12,textarea.span12,.uneditable-input.span12{width:1160px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}} diff --git a/procurements/static/bootstrap.min.css b/procurements/static/bootstrap.min.css deleted file mode 100644 index b01f92e..0000000 --- a/procurements/static/bootstrap.min.css +++ /dev/null @@ -1,610 +0,0 @@ -article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} -audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} -audio:not([controls]){display:none;} -html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -a:hover,a:active{outline:0;} -sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} -sup{top:-0.5em;} -sub{bottom:-0.25em;} -img{max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;} -button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} -button,input{*overflow:visible;line-height:normal;} -button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} -button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} -input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} -input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} -textarea{overflow:auto;vertical-align:top;} -body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;} -a{color:#0088cc;text-decoration:none;} -a:hover{color:#005580;text-decoration:underline;} -.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} -.row:after{clear:both;} -[class*="span"]{float:left;margin-left:20px;} -.span1{width:60px;} -.span2{width:140px;} -.span3{width:220px;} -.span4{width:300px;} -.span5{width:380px;} -.span6{width:460px;} -.span7{width:540px;} -.span8{width:620px;} -.span9{width:700px;} -.span10{width:780px;} -.span11{width:860px;} -.span12,.container{width:940px;} -.offset1{margin-left:100px;} -.offset2{margin-left:180px;} -.offset3{margin-left:260px;} -.offset4{margin-left:340px;} -.offset5{margin-left:420px;} -.offset6{margin-left:500px;} -.offset7{margin-left:580px;} -.offset8{margin-left:660px;} -.offset9{margin-left:740px;} -.offset10{margin-left:820px;} -.offset11{margin-left:900px;} -.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} -.row-fluid:after{clear:both;} -.row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;} -.row-fluid>[class*="span"]:first-child{margin-left:0;} -.row-fluid .span1{width:6.382978723%;} -.row-fluid .span2{width:14.89361702%;} -.row-fluid .span3{width:23.404255317%;} -.row-fluid .span4{width:31.914893614%;} -.row-fluid .span5{width:40.425531911%;} -.row-fluid .span6{width:48.93617020799999%;} -.row-fluid .span7{width:57.446808505%;} -.row-fluid .span8{width:65.95744680199999%;} -.row-fluid .span9{width:74.468085099%;} -.row-fluid .span10{width:82.97872339599999%;} -.row-fluid .span11{width:91.489361693%;} -.row-fluid .span12{width:99.99999998999999%;} -.container{width:940px;margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} -.container:after{clear:both;} -.container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";} -.container-fluid:after{clear:both;} -p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;} -.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;} -h1,h2,h3,h4,h5,h6{margin:0;font-weight:bold;color:#333333;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} -h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;} -h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;} -h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;} -h4,h5,h6{line-height:18px;} -h4{font-size:14px;}h4 small{font-size:12px;} -h5{font-size:12px;} -h6{font-size:11px;color:#999999;text-transform:uppercase;} -.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;} -.page-header h1{line-height:1;} -ul,ol{padding:0;margin:0 0 9px 25px;} -ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} -ul{list-style:disc;} -ol{list-style:decimal;} -li{line-height:18px;} -ul.unstyled{margin-left:0;list-style:none;} -dl{margin-bottom:18px;} -dt,dd{line-height:18px;} -dt{font-weight:bold;} -dd{margin-left:9px;} -hr{margin:18px 0;border:0;border-top:1px solid #e5e5e5;border-bottom:1px solid #ffffff;} -strong{font-weight:bold;} -em{font-style:italic;} -.muted{color:#999999;} -abbr{font-size:90%;text-transform:uppercase;border-bottom:1px dotted #ddd;cursor:help;} -blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;} -blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} -blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} -q:before,q:after,blockquote:before,blockquote:after{content:"";} -address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;} -small{font-size:100%;} -cite{font-style:normal;} -code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{padding:3px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} -pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;}pre.prettyprint{margin-bottom:18px;} -pre code{padding:0;background-color:transparent;} -form{margin:0 0 18px;} -fieldset{padding:0;margin:0;border:0;} -legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;} -label,input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;} -label{display:block;margin-bottom:5px;color:#333333;} -input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.uneditable-textarea{width:auto;height:auto;} -label input,label textarea,label select{display:block;} -input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:0;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -input[type="file"]{padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;} -select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;} -select{width:220px;background-color:#ffffff;} -select[multiple],select[size]{height:auto;} -input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -textarea{height:auto;} -input[type="hidden"]{display:none;} -.radio,.checkbox{padding-left:18px;} -.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;} -.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} -.radio.inline,.checkbox.inline{display:inline-block;margin-bottom:0;vertical-align:middle;} -.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} -.controls>.radio.inline:first-child,.controls>.checkbox.inline:first-child{padding-top:0;} -input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;} -input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;} -input[type="file"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.input-mini{width:60px;} -.input-small{width:90px;} -.input-medium{width:150px;} -.input-large{width:210px;} -.input-xlarge{width:270px;} -.input-xxlarge{width:530px;} -input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;} -input.span1,textarea.span1,.uneditable-input.span1{width:50px;} -input.span2,textarea.span2,.uneditable-input.span2{width:130px;} -input.span3,textarea.span3,.uneditable-input.span3{width:210px;} -input.span4,textarea.span4,.uneditable-input.span4{width:290px;} -input.span5,textarea.span5,.uneditable-input.span5{width:370px;} -input.span6,textarea.span6,.uneditable-input.span6{width:450px;} -input.span7,textarea.span7,.uneditable-input.span7{width:530px;} -input.span8,textarea.span8,.uneditable-input.span8{width:610px;} -input.span9,textarea.span9,.uneditable-input.span9{width:690px;} -input.span10,textarea.span10,.uneditable-input.span10{width:770px;} -input.span11,textarea.span11,.uneditable-input.span11{width:850px;} -input.span12,textarea.span12,.uneditable-input.span12{width:930px;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;} -.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} -.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;} -.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} -.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} -.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;} -.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} -.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} -.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;} -.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} -input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;} -.uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} -:-moz-placeholder{color:#999999;} -::-webkit-input-placeholder{color:#999999;} -.help-block{margin-top:5px;margin-bottom:0;color:#999999;} -.help-inline{display:inline-block;*display:inline;*zoom:1;margin-bottom:9px;vertical-align:middle;padding-left:5px;} -.input-prepend,.input-append{margin-bottom:5px;*zoom:1;}.input-prepend:before,.input-append:before,.input-prepend:after,.input-append:after{display:table;content:"";} -.input-prepend:after,.input-append:after{clear:both;} -.input-prepend input,.input-append input,.input-prepend .uneditable-input,.input-append .uneditable-input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;} -.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;} -.input-prepend .add-on,.input-append .add-on{float:left;display:block;width:auto;min-width:16px;height:18px;margin-right:-1px;padding:4px 5px;font-weight:normal;line-height:18px;color:#999999;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#f5f5f5;border:1px solid #ccc;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;} -.input-prepend .add-on{*margin-top:1px;} -.input-append input,.input-append .uneditable-input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-append .uneditable-input{border-right-color:#ccc;} -.input-append .add-on{margin-right:0;margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.input-append input:first-child{*margin-left:-160px;}.input-append input:first-child+.add-on{*margin-left:-21px;} -.search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;} -.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input{display:inline-block;margin-bottom:0;} -.form-search label,.form-inline label,.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{display:inline-block;} -.form-search .input-append .add-on,.form-inline .input-prepend .add-on,.form-search .input-append .add-on,.form-inline .input-prepend .add-on{vertical-align:middle;} -.control-group{margin-bottom:9px;} -.form-horizontal legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} -.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";} -.form-horizontal .control-group:after{clear:both;} -.form-horizontal .control-group>label{float:left;width:140px;padding-top:5px;text-align:right;} -.form-horizontal .controls{margin-left:160px;} -.form-horizontal .form-actions{padding-left:160px;} -table{max-width:100%;border-collapse:collapse;border-spacing:0;} -.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;border-top:1px solid #ddd;} -.table th{font-weight:bold;vertical-align:bottom;} -.table td{vertical-align:top;} -.table thead:first-child tr th,.table thead:first-child tr td{border-top:0;} -.table tbody+tbody{border-top:2px solid #ddd;} -.table-condensed th,.table-condensed td{padding:4px 5px;} -.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th+th,.table-bordered td+td,.table-bordered th+td,.table-bordered td+th{border-left:1px solid #ddd;} -.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} -.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} -.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} -.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} -.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} -.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} -table .span1{float:none;width:44px;margin-left:0;} -table .span2{float:none;width:124px;margin-left:0;} -table .span3{float:none;width:204px;margin-left:0;} -table .span4{float:none;width:284px;margin-left:0;} -table .span5{float:none;width:364px;margin-left:0;} -table .span6{float:none;width:444px;margin-left:0;} -table .span7{float:none;width:524px;margin-left:0;} -table .span8{float:none;width:604px;margin-left:0;} -table .span9{float:none;width:684px;margin-left:0;} -table .span10{float:none;width:764px;margin-left:0;} -table .span11{float:none;width:844px;margin-left:0;} -table .span12{float:none;width:924px;margin-left:0;} -[class^="icon-"]{display:inline-block;width:14px;height:14px;vertical-align:text-top;background-image:url(../img/glyphicons-halflings.png);background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child{*margin-left:0;} -.icon-white{background-image:url(../img/glyphicons-halflings-white.png);} -.icon-glass{background-position:0 0;} -.icon-music{background-position:-24px 0;} -.icon-search{background-position:-48px 0;} -.icon-envelope{background-position:-72px 0;} -.icon-heart{background-position:-96px 0;} -.icon-star{background-position:-120px 0;} -.icon-star-empty{background-position:-144px 0;} -.icon-user{background-position:-168px 0;} -.icon-film{background-position:-192px 0;} -.icon-th-large{background-position:-216px 0;} -.icon-th{background-position:-240px 0;} -.icon-th-list{background-position:-264px 0;} -.icon-ok{background-position:-288px 0;} -.icon-remove{background-position:-312px 0;} -.icon-zoom-in{background-position:-336px 0;} -.icon-zoom-out{background-position:-360px 0;} -.icon-off{background-position:-384px 0;} -.icon-signal{background-position:-408px 0;} -.icon-cog{background-position:-432px 0;} -.icon-trash{background-position:-456px 0;} -.icon-home{background-position:0 -24px;} -.icon-file{background-position:-24px -24px;} -.icon-time{background-position:-48px -24px;} -.icon-road{background-position:-72px -24px;} -.icon-download-alt{background-position:-96px -24px;} -.icon-download{background-position:-120px -24px;} -.icon-upload{background-position:-144px -24px;} -.icon-inbox{background-position:-168px -24px;} -.icon-play-circle{background-position:-192px -24px;} -.icon-repeat{background-position:-216px -24px;} -.icon-refresh{background-position:-240px -24px;} -.icon-list-alt{background-position:-264px -24px;} -.icon-lock{background-position:-287px -24px;} -.icon-flag{background-position:-312px -24px;} -.icon-headphones{background-position:-336px -24px;} -.icon-volume-off{background-position:-360px -24px;} -.icon-volume-down{background-position:-384px -24px;} -.icon-volume-up{background-position:-408px -24px;} -.icon-qrcode{background-position:-432px -24px;} -.icon-barcode{background-position:-456px -24px;} -.icon-tag{background-position:0 -48px;} -.icon-tags{background-position:-25px -48px;} -.icon-book{background-position:-48px -48px;} -.icon-bookmark{background-position:-72px -48px;} -.icon-print{background-position:-96px -48px;} -.icon-camera{background-position:-120px -48px;} -.icon-font{background-position:-144px -48px;} -.icon-bold{background-position:-167px -48px;} -.icon-italic{background-position:-192px -48px;} -.icon-text-height{background-position:-216px -48px;} -.icon-text-width{background-position:-240px -48px;} -.icon-align-left{background-position:-264px -48px;} -.icon-align-center{background-position:-288px -48px;} -.icon-align-right{background-position:-312px -48px;} -.icon-align-justify{background-position:-336px -48px;} -.icon-list{background-position:-360px -48px;} -.icon-indent-left{background-position:-384px -48px;} -.icon-indent-right{background-position:-408px -48px;} -.icon-facetime-video{background-position:-432px -48px;} -.icon-picture{background-position:-456px -48px;} -.icon-pencil{background-position:0 -72px;} -.icon-map-marker{background-position:-24px -72px;} -.icon-adjust{background-position:-48px -72px;} -.icon-tint{background-position:-72px -72px;} -.icon-edit{background-position:-96px -72px;} -.icon-share{background-position:-120px -72px;} -.icon-check{background-position:-144px -72px;} -.icon-move{background-position:-168px -72px;} -.icon-step-backward{background-position:-192px -72px;} -.icon-fast-backward{background-position:-216px -72px;} -.icon-backward{background-position:-240px -72px;} -.icon-play{background-position:-264px -72px;} -.icon-pause{background-position:-288px -72px;} -.icon-stop{background-position:-312px -72px;} -.icon-forward{background-position:-336px -72px;} -.icon-fast-forward{background-position:-360px -72px;} -.icon-step-forward{background-position:-384px -72px;} -.icon-eject{background-position:-408px -72px;} -.icon-chevron-left{background-position:-432px -72px;} -.icon-chevron-right{background-position:-456px -72px;} -.icon-plus-sign{background-position:0 -96px;} -.icon-minus-sign{background-position:-24px -96px;} -.icon-remove-sign{background-position:-48px -96px;} -.icon-ok-sign{background-position:-72px -96px;} -.icon-question-sign{background-position:-96px -96px;} -.icon-info-sign{background-position:-120px -96px;} -.icon-screenshot{background-position:-144px -96px;} -.icon-remove-circle{background-position:-168px -96px;} -.icon-ok-circle{background-position:-192px -96px;} -.icon-ban-circle{background-position:-216px -96px;} -.icon-arrow-left{background-position:-240px -96px;} -.icon-arrow-right{background-position:-264px -96px;} -.icon-arrow-up{background-position:-289px -96px;} -.icon-arrow-down{background-position:-312px -96px;} -.icon-share-alt{background-position:-336px -96px;} -.icon-resize-full{background-position:-360px -96px;} -.icon-resize-small{background-position:-384px -96px;} -.icon-plus{background-position:-408px -96px;} -.icon-minus{background-position:-433px -96px;} -.icon-asterisk{background-position:-456px -96px;} -.icon-exclamation-sign{background-position:0 -120px;} -.icon-gift{background-position:-24px -120px;} -.icon-leaf{background-position:-48px -120px;} -.icon-fire{background-position:-72px -120px;} -.icon-eye-open{background-position:-96px -120px;} -.icon-eye-close{background-position:-120px -120px;} -.icon-warning-sign{background-position:-144px -120px;} -.icon-plane{background-position:-168px -120px;} -.icon-calendar{background-position:-192px -120px;} -.icon-random{background-position:-216px -120px;} -.icon-comment{background-position:-240px -120px;} -.icon-magnet{background-position:-264px -120px;} -.icon-chevron-up{background-position:-288px -120px;} -.icon-chevron-down{background-position:-313px -119px;} -.icon-retweet{background-position:-336px -120px;} -.icon-shopping-cart{background-position:-360px -120px;} -.icon-folder-close{background-position:-384px -120px;} -.icon-folder-open{background-position:-408px -120px;} -.icon-resize-vertical{background-position:-432px -119px;} -.icon-resize-horizontal{background-position:-456px -118px;} -.dropdown{position:relative;} -.dropdown-toggle{*margin-bottom:-3px;} -.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} -.caret{display:inline-block;width:0;height:0;text-indent:-99999px;*text-indent:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"\2193";} -.dropdown .caret{margin-top:8px;margin-left:2px;} -.dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);} -.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;max-width:220px;_width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.bottom-up{top:auto;bottom:100%;margin-bottom:2px;} -.dropdown-menu .divider{height:1px;margin:5px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} -.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#555555;white-space:nowrap;} -.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;} -.dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} -.dropdown.open .dropdown-menu{display:block;} -.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} -.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} -.collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;} -.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;} -.btn{display:inline-block;padding:4px 10px 4px;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:first-child{*margin-left:0;} -.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} -.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;color:rgba(0, 0, 0, 0.5);outline:0;} -.btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-large .icon{margin-top:1px;} -.btn-small{padding:5px 9px;font-size:11px;line-height:16px;} -.btn-small .icon{margin-top:-1px;} -.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;} -.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active{color:rgba(255, 255, 255, 0.75);} -.btn-primary{background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-ms-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(top, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0044cc;} -.btn-primary:active,.btn-primary.active{background-color:#003399 \9;} -.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;} -.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} -.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;} -.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} -.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;} -.btn-success:active,.btn-success.active{background-color:#408140 \9;} -.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;} -.btn-info:active,.btn-info.active{background-color:#24748c \9;} -button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} -button.btn.large,input[type="submit"].btn.large{*padding-top:7px;*padding-bottom:7px;} -button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom:3px;} -.btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";} -.btn-group:after{clear:both;} -.btn-group:first-child{*margin-left:0;} -.btn-group+.btn-group{margin-left:5px;} -.btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;} -.btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} -.btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} -.btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} -.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:5px;*padding-bottom:5px;} -.btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);} -.btn .caret{margin-top:7px;margin-left:0;} -.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);} -.btn-primary .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret{border-top-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} -.btn-small .caret{margin-top:4px;} -.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.alert,.alert-heading{color:#c09853;} -.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;} -.alert-success{background-color:#dff0d8;border-color:#d6e9c6;} -.alert-success,.alert-success .alert-heading{color:#468847;} -.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;} -.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading{color:#b94a48;} -.alert-info{background-color:#d9edf7;border-color:#bce8f1;} -.alert-info,.alert-info .alert-heading{color:#3a87ad;} -.alert-block{padding-top:14px;padding-bottom:14px;} -.alert-block>p,.alert-block>ul{margin-bottom:0;} -.alert-block p+p{margin-top:5px;} -.nav{margin-left:0;margin-bottom:18px;list-style:none;} -.nav>li>a{display:block;} -.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} -.nav-list{padding-left:14px;padding-right:14px;margin-bottom:0;} -.nav-list>li>a,.nav-list .nav-header{display:block;padding:3px 15px;margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.nav-list .nav-header{font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-transform:uppercase;} -.nav-list>li+.nav-header{margin-top:9px;} -.nav-list .active>a,.nav-list .active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} -.nav-list [class^="icon-"]{margin-right:2px;} -.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";} -.nav-tabs:after,.nav-pills:after{clear:both;} -.nav-tabs>li,.nav-pills>li{float:left;} -.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} -.nav-tabs{border-bottom:1px solid #ddd;} -.nav-tabs>li{margin-bottom:-1px;} -.nav-tabs>li>a{padding-top:9px;padding-bottom:9px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} -.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} -.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.nav-pills .active>a,.nav-pills .active>a:hover{color:#ffffff;background-color:#0088cc;} -.nav-stacked>li{float:none;} -.nav-stacked>li>a{margin-right:0;} -.nav-tabs.nav-stacked{border-bottom:0;} -.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} -.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} -.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} -.nav-pills.nav-stacked>li>a{margin-bottom:3px;} -.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} -.nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;} -.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;margin-top:6px;} -.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;} -.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;} -.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;} -.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} -.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;opacity:1;filter:alpha(opacity=100);} -.tabs-stacked .open>a:hover{border-color:#999999;} -.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";} -.tabbable:after{clear:both;} -.tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;} -.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} -.tab-content>.active,.pill-content>.active{display:block;} -.tabs-below .nav-tabs{border-top:1px solid #ddd;} -.tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;} -.tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} -.tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;} -.tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;} -.tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} -.tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} -.tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} -.tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} -.tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} -.tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} -.tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} -.navbar{overflow:visible;margin-bottom:18px;} -.navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} -.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;} -.btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;} -.btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} -.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} -.nav-collapse.collapse{height:auto;} -.navbar .brand:hover{text-decoration:none;} -.navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;} -.navbar .navbar-text{margin-bottom:0;line-height:40px;color:#999999;}.navbar .navbar-text a:hover{color:#ffffff;background-color:transparent;} -.navbar .btn,.navbar .btn-group{margin-top:5px;} -.navbar .btn-group .btn{margin-top:0;} -.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";} -.navbar-form:after{clear:both;} -.navbar-form input,.navbar-form select{display:inline-block;margin-top:5px;margin-bottom:0;} -.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} -.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} -.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;color:rgba(255, 255, 255, 0.75);background:#666;background:rgba(255, 255, 255, 0.3);border:1px solid #111;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query :-moz-placeholder{color:#eeeeee;} -.navbar-search .search-query::-webkit-input-placeholder{color:#eeeeee;} -.navbar-search .search-query:hover{color:#ffffff;background-color:#999999;background-color:rgba(255, 255, 255, 0.5);} -.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} -.navbar-fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;} -.navbar-fixed-top .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} -.navbar .nav.pull-right{float:right;} -.navbar .nav>li{display:block;float:left;} -.navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} -.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;} -.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;background-color:rgba(0, 0, 0, 0.5);} -.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;} -.navbar .nav.pull-right{margin-left:10px;margin-right:0;} -.navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} -.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} -.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;} -.navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);} -.navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;} -.navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;} -.navbar .nav.pull-right .dropdown-menu{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before{left:auto;right:12px;} -.navbar .nav.pull-right .dropdown-menu:after{left:auto;right:13px;} -.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;} -.breadcrumb .divider{padding:0 5px;color:#999999;} -.breadcrumb .active a{color:#333333;} -.pagination{height:36px;margin:18px 0;} -.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} -.pagination li{display:inline;} -.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;} -.pagination a:hover,.pagination .active a{background-color:#f5f5f5;} -.pagination .active a{color:#999999;cursor:default;} -.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} -.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.pagination-centered{text-align:center;} -.pagination-right{text-align:right;} -.pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";} -.pager:after{clear:both;} -.pager li{display:inline;} -.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.pager a:hover{text-decoration:none;background-color:#f5f5f5;} -.pager .next a{float:right;} -.pager .previous a{float:left;} -.modal-open .dropdown-menu{z-index:2050;} -.modal-open .dropdown.open{*z-index:2050;} -.modal-open .popover{z-index:2060;} -.modal-open .tooltip{z-index:2070;} -.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} -.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} -.modal{position:fixed;top:50%;left:50%;z-index:1050;max-height:500px;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} -.modal.fade.in{top:50%;} -.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} -.modal-body{padding:15px;} -.modal-footer{padding:14px 15px 15px;margin-bottom:0;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} -.modal-footer:after{clear:both;} -.modal-footer .btn{float:right;margin-left:5px;margin-bottom:0;} -.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} -.tooltip.top{margin-top:-2px;} -.tooltip.right{margin-left:2px;} -.tooltip.bottom{margin-top:2px;} -.tooltip.left{margin-left:-2px;} -.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.tooltip-arrow{position:absolute;width:0;height:0;} -.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;} -.popover.right{margin-left:5px;} -.popover.bottom{margin-top:5px;} -.popover.left{margin-left:-5px;} -.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.popover .arrow{position:absolute;width:0;height:0;} -.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} -.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;} -.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;} -.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";} -.thumbnails:after{clear:both;} -.thumbnails>li{float:left;margin:0 0 18px 20px;} -.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);} -a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} -.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} -.thumbnail .caption{padding:9px;} -.label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.label-important{background-color:#b94a48;} -.label-warning{background-color:#f89406;} -.label-success{background-color:#468847;} -.label-info{background-color:#3a87ad;} -@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} -.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} -.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} -.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);} -.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);} -.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);} -.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.accordion{margin-bottom:18px;} -.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion-heading{border-bottom:0;} -.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} -.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} -.carousel{position:relative;margin-bottom:18px;line-height:1;} -.carousel-inner{overflow:hidden;width:100%;position:relative;} -.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} -.carousel .item>img{display:block;line-height:1;} -.carousel .active,.carousel .next,.carousel .prev{display:block;} -.carousel .active{left:0;} -.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;} -.carousel .next{left:100%;} -.carousel .prev{left:-100%;} -.carousel .next.left,.carousel .prev.right{left:0;} -.carousel .active.left{left:-100%;} -.carousel .active.right{left:100%;} -.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} -.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} -.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);} -.carousel-caption h4,.carousel-caption p{color:#ffffff;} -.hero-unit{padding:60px;margin-bottom:30px;background-color:#f5f5f5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;} -.hero-unit p{font-size:18px;font-weight:200;line-height:27px;} -.pull-right{float:right;} -.pull-left{float:left;} -.hide{display:none;} -.show{display:block;} -.invisible{visibility:hidden;} diff --git a/procurements/table.html b/procurements/table.html deleted file mode 100644 index 2e5d4dc..0000000 --- a/procurements/table.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - -
20052006200720082009201020112012
unknown1249382766.21523332602150850991.27652978902055838577.60494494443680086936.3983817101379798253.0516998768248214732.9509002864163108850.045899808499238100.8806000054
negotiated procedure without publishing00001701276158.17716622351218175597.3571820259438649852.1232998967115417465.9816000313
restricted procedure00001598584314.63900017741612402458.9437992573534089119.1710001230162257717.4900000095
competitive dialogue00003465707.00000000004219722242.1999998093328000.00000000000
open procedure00004737217156.03904151921347635941.87819218641597818962.6989026070533230497.5934982300
\ No newline at end of file diff --git a/procurements/templates/report.html b/procurements/templates/report.html deleted file mode 100644 index e7b06c4..0000000 --- a/procurements/templates/report.html +++ /dev/null @@ -1,96 +0,0 @@ - - - Cubes - - - - - -
- -

Browse Dimensions

- - - -
- {% for dimension in dimensions %} - - {% endfor %} -
- -{% if dimension %} -

Dimension: {{dimension.label or dimension.name}}

- -
- -
- - - - - - - - - {% for row in result.table_rows(dimension) %} - - - - - - {% endfor %} - - - - - -
{{next_level.label or next_level.name}}CountAmount
- {% if is_last %} - {{row.label}} - {% else %} - {{row.label}} - {% endif %} - {{row.record.record_count}}{{row.record.contract_amount_sum}}
Total{{result.summary.record_count}}{{result.summary.amount_sum}}
- -{% endif %} -
- \ No newline at end of file diff --git a/procurements/vvo_data.sqlite b/procurements/vvo_data.sqlite deleted file mode 100644 index 6100058..0000000 Binary files a/procurements/vvo_data.sqlite and /dev/null differ diff --git a/procurements/vvo_model-sk.json b/procurements/vvo_model-sk.json deleted file mode 100644 index 009fa26..0000000 --- a/procurements/vvo_model-sk.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "locale": "sk", - "dimensions" : { - "cpv" : { - "attributes" : { - "detail" : {"label": "detail"}, - "id" : {}, - "detail_label" : {"label": "detail"}, - "code" : {"label": "CPV kod"}, - "detail_compet": {"label": "Koeficient súťaživosti"}, - "group" : {"label": "skupina"}, - "group_label" : {"label": "skupina"}, - "group_compet": {"label": "Koeficient súťaživosti skupiny"}, - "division" : {"label": "oddiel"}, - "division_label" : {"label": "oddiel"}, - "division_compet": {"label": "Koeficient súťaživosti oddielu"}, - "class_label" : {"label": "trieda"}, - "class" : {"label": "trieda"}, - "class_compet": {"label": "Koeficient súťaživosti triedy"}, - "category" : {"label": "kategória"}, - "category_label" : {"label": "kategória"}, - "category_compet": {"label": "Koeficient súťaživosti kategorie"} - }, - - "levels" : { - "detail" : { - "label" : "detail" - }, - "group" : { - "label" : "skupina" - }, - "division" : { - "label" : "oddiel" - }, - "class" : { - "label" : "trieda" - }, - "category" : { - "label" : "kategória" - } - }, - "label" : "Common Procurement Vocabulary", - "hierarchies" : { - "default" : {} - } - }, - "procurer" : { - "levels" : { - "sector": { - "account_sector" : {"label": "sektor"}, - "account_sector_code" : {"label": "sektor (kód)"} - }, - "procurer" : { - "attributes" : { - "ico" : {"label": "IČO"}, - "region" : {"label": "región"}, - "name" : {"label": "názov"}, - "legal_form" : {"label": "právna forma"}, - "address" : {"label": "adresa"}, - "id" : {"label": "id"}, - "offer_count_avg": { "label": "priemerný počet ponúk na zmluvu"}, - "competitiveness": { "label": "koeficient súťaživosti"} - } - } - }, - "label" : "Obstarávateľ", - "hierarchies" : {} - }, - "geography" : { - "attributes" : { - "okres" : {"label": "okres"}, - "okres_code" : {"label": "kód okresu"}, - "kraj_code" : {"label": "kód kraja"}, - "kraj" : {"label": "kraj"} - }, - "levels" : { - "okres" : { }, - "kraj" : { } - }, - "label" : "Región", - "hierarchies" : { "default" : {} } - }, - "date" : { - "attributes" : { - "month_sname" : {"label": "mesiac"}, - "month_name" : {"label": "mesiac"}, - "month" : {}, - "day" : {"label": "deň"}, - "id" : {}, - "year" : {"label": "rok"} - }, - "levels" : { - "month" : { "label" : "Mesiac" }, - "day" : { "label" : "Deň" }, - "year" : { "label" : "Rok" } - }, - "label" : "dátum", - "hierarchies" : { - "default" : {} - } - }, - "supplier" : { - "attributes" : { - "country" : {"label": "krajina"}, - "date_end" : {"label": "dátum ukončenia činnosti"}, - "ico" : {"label": "IČO"}, - "name" : {"label": "názov"}, - "legal_form" : {"label": "právna forma"}, - "date_start" : {"label": "dátum začatia činnosti"}, - "address" : {"label": "adresa"}, - "id" : {"label": "id"}, - "ownership" : {"label": "druh vlastníctva"}, - "offer_count_avg": { "label": "priemerný počet ponúk na zmluvu"}, - "competitiveness": { "label": "koeficient súťaživosti"} - }, - "levels" : { - "supplier" : { - } - }, - "label" : "Dodávateľ", - "hierarchies" : {} - }, - "criteria" : { - "attributes" : { - "sdesc" : {"label": "kritéria vyhodnotenia"}, - "id" : {}, - "description" : {"label": "kritéria vyhodnotenia"}, - "code" : {"label": "kritéria vyhodnotenia (kód)"} - }, - "levels" : { - "criteria" : { - } - }, - "label" : "Kriteria vyhodnotenia", - "hierarchies" : {} - }, - "process_type" : { - "attributes" : { - "sdesc" : {"label": "druh postupu"}, - "id" : {}, - "description" : {"label": "druh postupu"}, - "code" : {"label": "druh postupu (kód)"} - }, - "levels" : { - "process_type" : { - } - }, - "label" : "Druh postupu", - "hierarchies" : {} - } - }, - "cubes" : { - "contracts" : { - "measures" : { - "contract_amount" : {"label": "hodnota zmluvy"} - }, - "details" : { - "zakazka_nazov" : {"label": "Názov zákazky"}, - "vestnik_cislo" : {"label": "Číslo vestníka"}, - "source_url" : {"label": "Odkaz na pôvodný dokument"} - } - } - } -} diff --git a/procurements/vvo_model.json b/procurements/vvo_model.json deleted file mode 100644 index aa7210f..0000000 --- a/procurements/vvo_model.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "name" : "vvo", - "locale":"en", - "cubes": [ - { - "name": "contracts", - "name": "contracts", - "measures": { - "contract_amount": {"label": "Contract amount"} - }, - "details": [ - { - "name": "contract_name", - "label": "Contract name" - }, - { - "name": "bulletin_number", - "label": "Bulletin number" - }, - { - "name": "source_url", - "label": "Source URL" - } - ], - "dimensions": [ - "date", - "cpv", - "procurer", - "supplier", - "process_type", - "criteria", - "geography" - ], - "joins": [ - { - "master": "bulletin_date_id", - "detail": "dm_date.id" - }, - { - "master": "cpv_id", - "detail": "dm_cpv.id" - }, - { - "master": "procurer_id", - "detail": "dm_procurer.id" - }, - { - "master": "supplier_id", - "detail": "dm_supplier.id" - }, - { - "master": "process_type_id", - "detail": "dm_process_type.id" - }, - { - "master": "criteria_id", - "detail": "dm_criteria.id" - }, - { - "master": "geography_id", - "detail": "dm_geography.id" - } - ], - "mappings": - { - "zmluva_hodnota":"zmluva_hodnota", - "fact.date_id":"bulletin_date_id" - } - } - ], - - "dimensions": { - "cpv" : { - "name": "cpv", - "label": "Common Procurement Vocabulary", - "key": "cpv_id", - "levels": [ - { - "name": "division", - "label": "division", - "label_attribute": "division_label", - "attributes": [ - {"name":"division"}, - {"name": "division_label", "locales": ["en", "sk"]}, - {"name":"division_compet", "label": "competitiveness in division"} - ] - }, - { - "name": "group", - "label": "group", - "label_attribute": "group_label", - "attributes": [ - {"name":"group", "label": "Group code"}, - {"name":"group_label", "label": "Group", "locales": ["en", "sk"]}, - {"name":"group_compet", "label": "competitiveness in grouop"} - ] - }, - { - "name": "class", - "label": "class", - "label_attribute": "class_label", - "attributes": [ - {"name":"class"}, - {"name":"class_label", "locales": ["en", "sk"]}, - {"name":"class_compet", "label": "competitiveness in class"} - ] - }, - { - "name":"category", - "label": "category", - "label_attribute": "category_label", - "attributes": [ - {"name":"category", "label":"category code"}, - {"name":"category_label", "label": "category", "locales": ["en", "sk"]}, - {"name":"category_compet", "label": "competitiveness in category"} - ] - }, - { - "name": "detail", - "label": "detail", - "label_attribute": "detail_label", - "attributes": [ - {"name":"id"}, - {"name":"detail", "label": "detail code"}, - {"name":"detail_label", "label": "detail", "locales": ["en", "sk"]}, - {"name":"code", "label": "CPV Code"}, - {"name":"detail_compet", "label": "competitiveness"} - ] - } - ], - "hierarchy": ["division", "group", "class", "category", "detail"] - }, - "date" : { - "label" : "Date", - "info": { - "cv-datefilter": true - }, - "levels" : [ - { - "name": "year", - "name": "year", - "label": "Year", - "attributes": [ - {"name":"year"} - ], - "info": { "cv-datefilter-field": "year" } - }, - { - "name": "month", - "name": "month", - "label" : "Month", - "attributes": [ - {"name":"month"}, - {"name":"month_name", "locales": ["en", "sk"]}, - {"name":"month_sname", "locales": ["en", "sk"]} - ], - "info": { "cv-datefilter-field": "month" } - }, - { - "name": "day", - "name": "day", - "label" : "Day", - "attributes": [ - {"name":"id"}, - {"name":"day"}], - "info": { "cv-datefilter-field": "day" } - } - ], - "hierarchy" : ["year", "month", "day"] - }, - "procurer" : { - "label": "Procurer", - "levels" : [ - { - "name": "sector", - "attributes":[ - {"name":"account_sector_code", "label": "account sector code"}, - {"name":"account_sector", "label": "account sector"} - ] - }, - { - "name": "procurer", - "label_attribute": "name", - "attributes": [ - {"name":"id", "label": "id"}, - {"name":"ico", "label": "organisation ID"}, - {"name":"name", "label": "name"}, - {"name":"region", "label": "region"}, - {"name":"address", "label": "address"}, - {"name":"legal_form", "label": "legal form"}, - {"name":"offer_count_avg", "label": "average number of offers"}, - {"name":"competitiveness", "label": "competitiveness"} - ] - } - ], - "hierarchy": ["sector", "procurer"] - }, - "supplier" : { - "label": "Supplier", - "levels" : [ - { - "name":"supplier", - "key": "id", - "label_attribute": "name", - "attributes": [ - {"name":"id"}, - {"name":"ico", "label": "company ID"}, - {"name":"name", "label": "name"}, - {"name":"address", "label": "address"}, - {"name":"country", "label": "country"}, - {"name":"date_start", "label": "operating since"}, - {"name":"date_end", "label": "company closed date"}, - {"name":"legal_form", "label": "legal form"}, - {"name":"ownership", "label": "ownership"}, - {"name":"offer_count_avg", "label": "average number of offers"}, - {"name":"competitiveness", "label": "competitiveness"} - ] - } - ] - }, - "process_type" : { - "label": "Procurement type", - "levels": [ - { - "name": "process_type", - "label_attribute": "description", - "attributes" : [ - {"name":"id"}, - {"name":"code"}, - {"name":"description", "locales": ["en", "sk"]}, - {"name":"sdesc", "locales": ["en", "sk"]}] - } - ] - }, - "criteria" : { - "label": "Evalutaion criteria", - "levels": [ - { - "name":"criteria", - "label_attribute": "description", - "attributes" : [ - {"name":"code"}, - {"name":"description", "locales": ["en", "sk"]}, - {"name":"sdesc", "locales": ["en", "sk"]}, - {"name":"id"}] - } - ] - }, - "geography": { - "label": "Region", - "levels": [ - { - "name":"okres", - "attributes": [ - {"name":"okres_code", "label": "county code"}, - {"name":"okres", "label": "county"} - ] - }, - { - "name":"kraj", - "attributes": [ - {"name":"kraj_code", "label": "region code"}, - {"name":"kraj", "label": "region"} - ] - } - ], - "hierarchy": ["kraj", "okres"] - - } - } -} diff --git a/requirements.pip b/requirements.pip deleted file mode 100644 index 0456274..0000000 --- a/requirements.pip +++ /dev/null @@ -1,6 +0,0 @@ -Flask==0.9 -Jinja2==2.6 -SQLAlchemy==0.7.9 -Werkzeug==0.8.3 -cubes==0.10 -wsgiref==0.1.2 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..9abddab --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +cubes==1.0.1 +Flask==0.10.1 +SQLAlchemy==1.0.13 diff --git a/webshop/README.md b/webshop/README.md index 10a6d48..0fb94b2 100644 --- a/webshop/README.md +++ b/webshop/README.md @@ -3,15 +3,21 @@ Webshop (Online shop example) Example includes: -* data sql -* SQLite database -* model -* some sample screenshots using cubesviewer +* Model (model.json) +* Cubes server config (slicer.ini) +* Loaded SQLite database (webshop.sqlite) + + +Version +------- + +This sample is tested with cubes-1.0.1. + Description ----------- -This sample includes a simple model and sample data about a fictional +This sample includes a simple model and sample data from a fictional online shop. It contains a fact table "sales" with information about product sales, @@ -20,8 +26,12 @@ customer country, product and product category, and invoice amount. It also contains a fact table "webvisits" with information about fictional web visits (country of visitor, page views, browser...). -Slicer Use ----------- + +Slicer Usage +------------ + +Make sure you've installed Cubes 1.0.x and that the `slicer` command +is available (either globally or within a *virtualenv*). Execute: @@ -29,6 +39,9 @@ Execute: Documentation: http://packages.python.org/cubes/server.html +If you are on Windows you may need to remove the `processes: 6` line +from the `slicer.ini` file. + CubesViewer ----------- @@ -39,4 +52,22 @@ Live example: http://jjmontesl.github.io/cubesviewer/ Documentation: https://github.com/jjmontesl/cubesviewer/ +You can find a tutorial for CubesViewer and Cubes using this +data at https://github.com/jjmontesl/cubesviewer/blob/master/doc/guide/cubesviewer-quickstart.md . + + +Generating the data +------------------- + +This sample data was generated using an (experimental) tool called +CubETL, which is able to insert data into OLAP schemas and +generates Cubes model automatically. + +If you are interested in the topic, check it out and get in touch: + +CubETL: https://github.com/jjmontesl/cubetl +WebShop ETL Source: https://github.com/jjmontesl/cubetl/blob/master/examples/webshop.yaml + +(Note you are in the wild, there is little to no documentation, but there are +a bunch of examples and I'm happy to provide assistance and fix bugs). diff --git a/webshop/cubes-wsgi.py b/webshop/cubes-wsgi.py new file mode 100644 index 0000000..aeb4c28 --- /dev/null +++ b/webshop/cubes-wsgi.py @@ -0,0 +1,28 @@ +# Sample file to deploy Cubes slicer as a WSGI application, +# using a virtual environment. + +import sys +import os +import site + +# Add the site-packages of the chosen virtualenv to work with +site.addsitedir('/srv/cubes/env/lib/python3.4/site-packages') + +# Add the app's directory to the PYTHONPATH +sys.path.append('/srv/cubes') + +# Activate virtual env +activate_env=os.path.expanduser("/srv/cubes/env/bin/activate_this.py") +execfile(activate_env, dict(__file__=activate_env)) + +os.chdir('/srv/cubes-examples/webshop') + +CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) +CONFIG_PATH = os.path.join(CURRENT_DIR, "slicer.ini") + +from cubes.server.base import create_server +application = create_server(CONFIG_PATH) + + + + diff --git a/webshop/import_webshop.py b/webshop/import_webshop.py deleted file mode 100644 index f29c0c8..0000000 --- a/webshop/import_webshop.py +++ /dev/null @@ -1,195 +0,0 @@ -# -# - -import sys -from sqlalchemy.engine import create_engine -import re -import datetime -import csv -import random - -cache = {} -connection = None - -def main(): - - global connection - - # Open source - engine = create_engine("sqlite:///webshop.sqlite") - connection = engine.connect() - - # Cleanup - connection.execute("DELETE FROM dates"); - connection.execute("DELETE FROM customers"); - connection.execute("DELETE FROM countries"); - connection.execute("DELETE FROM products"); - connection.execute("DELETE FROM sales"); - connection.execute("DELETE FROM webvisits") - - # Import facts and dimension data - import_sales() - # Generate all dates - generate_dates() - # Generate site visits - generate_webvisits() - - # Add extra dimensions for left joins - insert_product ("Books", "200 ways of slicing a cube") - -def save_object(table, row): - - if (table in cache): - if (row["id"] in cache[table]): - return row["id"] - else: - cache[table] = {} - - keys = row.keys(); - sql = "INSERT INTO " + table + " (" - sql = sql + ", ".join(keys) - sql = sql + ") VALUES (" - sql = sql + ", ".join([ ("'" + str(row[key]) + "'") for key in keys]) - sql = sql + ")" - - print "Inserting - Table: %-14s Id: %s" % (table, row["id"]) - #print sql - - connection.execute(sql); - cache[table][row["id"]] = row - - return row["id"] - -def sanitize(value): - - if (value == ""): - value = "(BLANK)" - elif (value == None): - value = "(NULL)" - else: - value = re.sub('[^\w]', "_", value.strip()) - return value - -def insert_country (continent, country): - - row = { - "id": sanitize (continent + "/" + country), - "continent_id": sanitize(continent), - "continent_label": continent, - "country_id": sanitize(country), - "country_label": country, - } - return save_object ("countries", row) - -def insert_product (category, product): - - row = { - "id": sanitize (category + "/" + product), - "category_id": sanitize(category), - "category_label": category, - "product_id": sanitize(product), - "product_label": product, - } - return save_object ("products", row) - -def insert_customer (customer_name): - - row = { - "id": sanitize(customer_name), - "name": customer_name - } - return save_object ("customers", row) - -def insert_date (year, month, day): - - row = { } - prefix = "date" - - date = datetime.date(int(year), int(month), int(day)); - - if date != None: - row["id"] = sanitize(datetime.datetime.strftime(date, "%d/%b/%Y")) - row[prefix + "_year"] = date.year - row[prefix + "_quarter"] = ((date.month - 1) / 3) + 1 - row[prefix + "_month"] = date.month - row[prefix + "_day"] = date.day - row[prefix + "_week"] = date.isocalendar()[1] - - if row[prefix + "_month"] == 12 and row[prefix + "_week"] <= 1: - row[prefix + "_week"] = 52 - if row[prefix + "_month"] == 1 and row[prefix + "_week"] >= 52: - row[prefix + "_week"] = 1 - - return save_object ("dates", row) - -def insert_sale(fact): - return save_object ("sales", fact) - -def insert_webvisit(fact): - return save_object ("webvisits", fact) - -def generate_dates(): - - start_date = datetime.datetime.strptime("2012-01-01", "%Y-%m-%d") - end_date = datetime.datetime.strptime("2013-12-31", "%Y-%m-%d") - - cur_date = start_date - while (cur_date <= end_date): - insert_date (cur_date.year, cur_date.month, cur_date.day) - cur_date = cur_date + datetime.timedelta(days = +1) - -def import_sales(): - - count = 0 - header = None - with open('webshop-facts.csv', 'rb') as f: - reader = csv.reader(f) - for row in reader: - - count = count + 1 - fact = { "id" : count } - - if (header == None): - header = row - continue - - arow = {} - for header_index in range (0, len(header)): - arow[(header[header_index])] = row[header_index] - - # Process row - fact["date_id"] = insert_date(arow["date_created.year"], arow["date_created.month"], arow["date_created.day"]) - fact["country_id"] = insert_country(arow["country.region"], arow["country.country"]) - fact["customer_id"] = insert_customer(arow["customer.name"]) - fact["product_id"] = insert_product(arow["product.category"], arow["product.name"]) - - # Import figures (quick hack for localization issues): - fact["quantity"] = float(str(arow["quantity"]).replace(",", ".")) - fact["price_total"] = float(str(arow["price_total"]).replace(",", ".")) - - insert_sale(fact) - - print "Imported %d facts " % (count) - -def generate_webvisits(): - - for i in range (1, 1079): - - fact = { "id" : i } - - fact["country_id"] = random.choice (cache["countries"].keys()) - fact["date_id"] = random.choice (cache["dates"].keys()) - - fact["browser"] = random.choice (["Lynx", "Firefox", "Firefox", "Chrome", "Chrome", "Chrome"]) - fact["newsletter"] = random.choice(["Yes", "No", "No", "No"]) - - fact["source_label"] = random.choice(["Web search", "Web search", "Direct link", "Unknown"]) - fact["source_id"] = sanitize(fact["source_label"]) - - fact["pageviews"] = abs(int (random.gauss (7, 6))) + 1 - - insert_webvisit(fact) - -if __name__ == "__main__": - main() - diff --git a/webshop/model.json b/webshop/model.json index da1042e..ef3f287 100644 --- a/webshop/model.json +++ b/webshop/model.json @@ -1,225 +1,549 @@ { - "dimensions": [ - + "cubes": [ { - "comment": "This is used as a template for other date dimensions.", - - "name": "date_base", - "label": "Date Base", - "info": { - "cv-datefilter": true, - "cv-datefilter-hierarchy": "weekly" - }, - "levels": [ + "_comment": "Generated by CubETL", + "aggregates": [ + { + "function": "sum", + "label": "Quantity Sum", + "measure": "quantity", + "name": "quantity_sum" + }, + { + "function": "avg", + "label": "Quantity Avg", + "measure": "quantity", + "name": "quantity_avg" + }, + { + "function": "max", + "label": "Quantity Max", + "measure": "quantity", + "name": "quantity_max" + }, + { + "function": "min", + "label": "Quantity Min", + "measure": "quantity", + "name": "quantity_min" + }, + { + "function": "sum", + "label": "Price Total Sum", + "measure": "price_total", + "name": "price_total_sum" + }, + { + "function": "avg", + "label": "Price Total Avg", + "measure": "price_total", + "name": "price_total_avg" + }, + { + "function": "max", + "label": "Price Total Max", + "measure": "price_total", + "name": "price_total_max" + }, + { + "function": "min", + "label": "Price Total Min", + "measure": "price_total", + "name": "price_total_min" + }, + { + "function": "sum", + "label": "Delivery Days Sum", + "measure": "delivery_days", + "name": "delivery_days_sum" + }, { - "name":"year", - "label":"Year", - "info": { "cv-datefilter-field": "year" } - }, + "function": "avg", + "label": "Delivery Days Avg", + "measure": "delivery_days", + "name": "delivery_days_avg" + }, { - "name":"quarter", - "label":"Quarter" - }, + "function": "max", + "label": "Delivery Days Max", + "measure": "delivery_days", + "name": "delivery_days_max" + }, { - "name":"month", - "label":"Month" - }, + "function": "min", + "label": "Delivery Days Min", + "measure": "delivery_days", + "name": "delivery_days_min" + }, { - "name":"week", - "label":"Week", - "info": { "cv-datefilter-field": "week" } + "function": "count", + "label": "Record Count", + "name": "record_count" } - ], - "hierarchies": [ + ], + "details": [], + "dimensions": [ + "date_sale", + "customer", + "product", + "country" + ], + "joins": [ + { + "alias": "country", + "detail": "country.country_code", + "master": "webshop_sales.country_id" + }, { - "name": "weekly", - "label": "Weekly", - "levels": [ "year", "week"] - }, + "alias": "product", + "detail": "product.id", + "master": "webshop_sales.product_id" + }, { - "name": "monthly", - "label": "Monthly", - "levels": [ "year", "quarter", "month"] + "alias": "customer", + "detail": "customer.id", + "master": "webshop_sales.customer_id" + }, + { + "alias": "date_sale", + "detail": "dates.id", + "master": "webshop_sales.date_sale_id" } - ] - }, - - { - "name": "date_sale", - "label": "Sale Date", - "template": "date_base" - }, - - { - "name": "date_visit", - "label": "View Date", - "template": "date_base" - }, - + ], + "key": "id", + "label": "Webshop / Sales", + "mappings": { + "country.continent_code": "country.continent_code", + "country.continent_name": "country.continent_name", + "country.country_code": "country.country_code", + "country.country_name": "country.country_name", + "customer.id": "customer.id", + "customer.name": "customer.name", + "date_sale.day": "date_sale.day", + "date_sale.dow": "date_sale.dow", + "date_sale.id": "date_sale.id", + "date_sale.month": "date_sale.month", + "date_sale.quarter": "date_sale.quarter", + "date_sale.week": "date_sale.week", + "date_sale.year": "date_sale.year", + "product.category_label": "product.category_label", + "product.id": "product.id", + "product.product_label": "product.product_label" + }, + "measures": [ + { + "label": "Quantity", + "name": "quantity" + }, + { + "label": "Price Total", + "name": "price_total" + }, + { + "label": "Delivery Days", + "name": "delivery_days" + } + ], + "name": "webshop_sales" + }, { - "name": "customer", - "label": "Customer" , - "levels": [ { - "name": "customer", - "label": "Customer", - "attributes": [ "id", "name" ], - "label_attribute": "name" - } ] - }, - + "_comment": "Generated by CubETL", + "aggregates": [ + { + "function": "sum", + "label": "Page Views Sum", + "measure": "pageviews", + "name": "pageviews_sum" + }, + { + "function": "avg", + "label": "Page Views Avg", + "measure": "pageviews", + "name": "pageviews_avg" + }, + { + "function": "max", + "label": "Page Views Max", + "measure": "pageviews", + "name": "pageviews_max" + }, + { + "function": "min", + "label": "Page Views Min", + "measure": "pageviews", + "name": "pageviews_min" + }, + { + "function": "sum", + "label": "Session Time Sum", + "measure": "time", + "name": "time_sum" + }, + { + "function": "avg", + "label": "Session Time Avg", + "measure": "time", + "name": "time_avg" + }, + { + "function": "max", + "label": "Session Time Max", + "measure": "time", + "name": "time_max" + }, + { + "function": "min", + "label": "Session Time Min", + "measure": "time", + "name": "time_min" + }, + { + "function": "count", + "label": "Record Count", + "name": "record_count" + } + ], + "details": [], + "dimensions": [ + "date_visit", + "country", + "browser", + "newsletter" + ], + "joins": [ + { + "alias": "browser", + "detail": "browser.id", + "master": "webshop_visits.browser_id" + }, + { + "alias": "country", + "detail": "country.country_code", + "master": "webshop_visits.country_id" + }, + { + "alias": "date_visit", + "detail": "dates.id", + "master": "webshop_visits.date_visit_id" + } + ], + "key": "visit_id", + "label": "Webshop / Visits", + "mappings": { + "browser.id": "browser.id", + "browser.name": "browser.name", + "country.continent_code": "country.continent_code", + "country.continent_name": "country.continent_name", + "country.country_code": "country.country_code", + "country.country_name": "country.country_name", + "date_visit.day": "date_visit.day", + "date_visit.dow": "date_visit.dow", + "date_visit.id": "date_visit.id", + "date_visit.month": "date_visit.month", + "date_visit.quarter": "date_visit.quarter", + "date_visit.week": "date_visit.week", + "date_visit.year": "date_visit.year", + "newsletter.newsletter": "webshop_visits.newsletter" + }, + "measures": [ + { + "label": "Page Views", + "name": "pageviews" + }, + { + "label": "Session Time", + "name": "time" + } + ], + "name": "webshop_visits" + } + ], + "dimensions": [ { - "name": "product", - "label": "Product", + "_comment": "Generated by CubETL", + "hierarchies": [ + { + "label": "Daily", + "levels": [ + "year", + "quarter", + "month", + "day" + ], + "name": "daily" + }, + { + "label": "Weekly", + "levels": [ + "year", + "week" + ], + "name": "weekly" + } + ], + "info": { + "cv-datefilter": true, + "cv-datefilter-hierarchy": "daily" + }, + "label": "Sale Date", "levels": [ { - "name":"category", - "label":"Category", - "attributes": [ "category_id", "category_label" ], - "key": "category_id", - "label_attribute": "category_label" - }, - { - "name":"product", - "label":"Product", - "attributes": [ "product_id", "product_label" ], - "key": "product_id", - "label_attribute": "product_label" - } - ] - }, - + "attributes": [ + "year" + ], + "key": "year", + "label": "Year", + "label_attribute": "year", + "name": "year", + "role": "year" + }, + { + "attributes": [ + "quarter" + ], + "key": "quarter", + "label": "Quarter", + "label_attribute": "quarter", + "name": "quarter", + "role": "quarter" + }, + { + "attributes": [ + "month" + ], + "key": "month", + "label": "Month", + "label_attribute": "month", + "name": "month", + "role": "month" + }, + { + "attributes": [ + "week" + ], + "key": "week", + "label": "Week", + "label_attribute": "week", + "name": "week", + "role": "week" + }, + { + "attributes": [ + "day" + ], + "key": "day", + "label": "Day", + "label_attribute": "day", + "name": "day", + "role": "day" + } + ], + "name": "date_sale", + "role": "time" + }, { - "name": "country", - "label": "Country", + "_comment": "Generated by CubETL", + "label": "Customer", "levels": [ { - "name":"region", - "label":"Region", - "attributes": [ "region_id", "region_label" ], - "key": "region_id", - "label_attribute": "region_label" - }, - { - "name":"country", - "label":"Country", - "attributes": [ "country_id", "country_label" ], - "key": "country_id", - "label_attribute": "country_label" - } - ] - }, - + "attributes": [ + "id", + "name" + ], + "key": "id", + "label": "Customer", + "label_attribute": "name", + "name": "customer" + } + ], + "name": "customer" + }, { - "name": "source", - "label": "Source", - "levels": [ { - "name": "source", - "label": "Source", - "attributes": [ "source_id", "source_label" ], - "label_attribute": "source_label" - } ] - }, - + "_comment": "Generated by CubETL", + "hierarchies": [ + { + "label": "Product", + "levels": [ + "product_category", + "product_product" + ], + "name": "product" + } + ], + "label": "Product", + "levels": [ + { + "attributes": [ + "category_label" + ], + "key": "category_label", + "label": "Product Category", + "label_attribute": "category_label", + "name": "product_category" + }, + { + "attributes": [ + "product_label" + ], + "key": "product_label", + "label": "Product", + "label_attribute": "product_label", + "name": "product_product" + } + ], + "name": "product" + }, { - "name": "browser", - "label": "Browser" - }, - + "_comment": "Generated by CubETL", + "hierarchies": [ + { + "label": "Country", + "levels": [ + "continent", + "country" + ], + "name": "contcountry" + } + ], + "label": "Country", + "levels": [ + { + "attributes": [ + "continent_code", + "continent_name" + ], + "key": "continent_code", + "label": "Continent", + "label_attribute": "continent_name", + "name": "continent" + }, + { + "attributes": [ + "country_code", + "country_name" + ], + "key": "country_code", + "label": "Country", + "label_attribute": "country_name", + "name": "country" + } + ], + "name": "country" + }, { - "name": "newsletter", - "label": "Newsletter" - } - - ], - - "cubes": [ - + "_comment": "Generated by CubETL", + "hierarchies": [ + { + "label": "Daily", + "levels": [ + "year", + "quarter", + "month", + "day" + ], + "name": "daily" + }, + { + "label": "Weekly", + "levels": [ + "year", + "week" + ], + "name": "weekly" + } + ], + "info": { + "cv-datefilter": true, + "cv-datefilter-hierarchy": "daily" + }, + "label": "Visit Date", + "levels": [ + { + "attributes": [ + "year" + ], + "key": "year", + "label": "Year", + "label_attribute": "year", + "name": "year", + "role": "year" + }, + { + "attributes": [ + "quarter" + ], + "key": "quarter", + "label": "Quarter", + "label_attribute": "quarter", + "name": "quarter", + "role": "quarter" + }, + { + "attributes": [ + "month" + ], + "key": "month", + "label": "Month", + "label_attribute": "month", + "name": "month", + "role": "month" + }, + { + "attributes": [ + "week" + ], + "key": "week", + "label": "Week", + "label_attribute": "week", + "name": "week", + "role": "week" + }, + { + "attributes": [ + "day" + ], + "key": "day", + "label": "Day", + "label_attribute": "day", + "name": "day", + "role": "day" + } + ], + "name": "date_visit", + "role": "time" + }, { - "name": "sales", - "label": "Webshop / Sales", - "dimensions": ["date_sale", "customer", "product", "country" ], - "measures": [ - {"name": "quantity", "aggregations": ["sum", "avg", "max"] }, - {"name": "price_total", "aggregations": ["sum", "avg", "max", "min"] } - ], - - "joins": [ - { - "master": "sales.date_id", - "detail": "dates.id" - }, - { - "master": "sales.customer_id", - "detail": "customers.id" - }, - { - "master": "sales.product_id", - "detail": "products.id" - }, - { - "master": "sales.country_id", - "detail": "countries.id" - } - ], - - "mappings": { - "date_sale.year": "dates.date_year", - "date_sale.quarter": "dates.date_quarter", - "date_sale.month": "dates.date_month", - "date_sale.week": "dates.date_week", - - "customer.id": "customers.id", - "customer.name": "customers.name", - - "product.category_id": "products.category_id", - "product.category_label": "products.category_label", - "product.product_id": "products.product_id", - "product.product_label": "products.product_label", - - "country.region_id": "countries.continent_id", - "country.region_label": "countries.continent_label", - "country.country_id": "countries.country_id", - "country.country_label": "countries.country_label" - } - }, - + "_comment": "Generated by CubETL", + "label": "Browser", + "levels": [ + { + "attributes": [ + "id", + "name" + ], + "key": "id", + "label": "Browser", + "label_attribute": "name", + "name": "browser" + } + ], + "name": "browser" + }, { - "name": "webvisits", - "label": "Website / Visits", - "dimensions": ["date_visit", "country", "source", "newsletter", "browser" ], - "measures": [ - {"name": "pageviews", "aggregations": ["sum", "avg", "max"] } - ], - - "joins": [ - { - "master": "webvisits.date_id", - "detail": "dates.id" - }, - { - "master": "webvisits.country_id", - "detail": "countries.id" - } - ], - - "mappings": { - "date_visit.year": "dates.date_year", - "date_visit.quarter": "dates.date_quarter", - "date_visit.month": "dates.date_month", - "date_visit.week": "dates.date_week", - - "country.region_id": "countries.continent_id", - "country.region_label": "countries.continent_label", - "country.country_id": "countries.country_id", - "country.country_label": "countries.country_label", - - "source.source_id": "webvisits.source_id", - "source.source_label": "webvisits.source_label", - - "browser.browser": "browser.browser", - "newsletter.newsletter": "newsletter.newsletter" - } + "_comment": "Generated by CubETL", + "label": "Newsletter", + "levels": [ + { + "attributes": [ + "newsletter" + ], + "key": "newsletter", + "label": "Newsletter", + "label_attribute": "newsletter", + "name": "newsletter" + } + ], + "name": "newsletter" } - ] } diff --git a/webshop/slicer.ini b/webshop/slicer.ini index 38d6f4c..64557cc 100644 --- a/webshop/slicer.ini +++ b/webshop/slicer.ini @@ -1,5 +1,9 @@ # Slicer OLAP server configuration + +[workspace] +log_level: debug + [server] host: localhost port: 5000 @@ -7,11 +11,13 @@ reload: yes prettyprint: yes json_record_limit: 5000 allow_cors_origin: * +processes: 6 [store] type: sql url: sqlite:///webshop.sqlite -[workspace] -model: model.json -log_level: info +[models] +main: model.json + + diff --git a/webshop/webshop-facts.csv b/webshop/webshop-facts.csv deleted file mode 100644 index e0c09f7..0000000 --- a/webshop/webshop-facts.csv +++ /dev/null @@ -1,176 +0,0 @@ -"price_total","quantity","date_created.year","date_created.month","date_created.day","customer.name","country.region","country.country","product.category","product.name" -"190,05",3,2012,7,13,"Wayne Enterprises","Europe","Spain","Sports","Tent for extreme weather" -"261,9",1,2013,5,24,"Flowers By Irene","Europe","Denmark","Sports","Snowboard table" -"257,75",1,2013,12,18,"Mammoth Pictures","South America","Ecuador","Sports","Mountain Bike" -"242,1",1,2013,2,14,"Transworld Consortium","North America","United States of America","Sports","Mountain Bike" -"241,5",2,2012,2,5,"Demo Company","South America","Uruguay","Sports","Snowboard table" -"236,5",1,2012,3,23,"Powell Motors","Europe","Spain","Sports","Mountain Bike" -"236,5",1,2012,9,27,"Industrial Automation","Europe","Spain","Sports","Mountain Bike" -"242,5",1,2012,6,20,"Wentworth Industries","Europe","Ireland","Various","Various" -"217",1,2013,1,15,"Acme, inc.","Europe","Spain","Sports","Mountain Bike" -"197,29",1,2012,5,16,"Ankh-Sto Associates","Europe","Spain","Sports","Mountain Bike" -"168,38",1,2013,6,16,"ABC Telecom","South America","Guatemala","Sports","Snowboard boots" -"167,24",1,2013,7,17,"ZiffCorp","North America","United States of America","Sports","Snowboard boots" -"209,45",1,2013,12,12,"Omni Consimer Products","Europe","Germany","Sports","Mountain Bike" -"209,45",1,2012,2,16,"Keedsler Motors","Europe","Netherlands","Sports","Mountain Bike" -"157,8",1,2013,9,8,"Strickland Propane","South America","Brazil","Videos","Repair your own cross bike (2011)" -"162,71",1,2012,9,4,"Transworld Consortium","North America","United States of America","Sports","Mountain Bike" -"52,5",1,2012,12,30,"Acme, inc.","Europe","Spain","Sports","Snowboard boots" -"105,75",1,2013,8,17,"Incom Corporation","Europe","Spain","Sports","Snowboard table" -"50,5325",1,2012,4,16,"Allied Biscuit","North America","United States of America","Books","Bicycle Wheel" -"50,2403",1,2013,7,28,"Corellian Engineering Corporation","Europe","Spain","Books","Build your own bicycle" -"50,2396",1,2013,10,14,"Leeding Engines Ltd.","Europe","Spain","Books","Build your own bicycle" -"193,609",1,2013,3,8,"Industrial Automation","Europe","Spain","Sports","Climbing equipment" -"193,421",1,2013,2,16,"Gringotts","South America","Ecuador","Sports","Climbing equipment" -"49,95",1,2012,9,1,"Smith and Co.","Europe","Spain","Books","Build your own bicycle" -"49,95",1,2013,2,14,"Allied Biscuit","North America","United States of America","Books","Bicycle Wheel" -"49,95",1,2013,3,14,"Ankh-Sto Associates","Europe","Spain","Books","Build your own bicycle" -"49,95",1,2013,7,5,"Mr. Sparkle","Europe","United Kingdom of Great Britain & Northern Ireland","Books","Bicycle Wheel" -"49,95",1,2013,8,5,"Globex Corporation","Europe","Slovakia (Slovak Republic)","Books","Bicycle Wheel" -"49,95",1,2013,6,27,"Flowers By Irene","Europe","Denmark","Books","Bicycle Wheel" -"49,95",1,2012,8,5,"Osato Chemicals","North America","United States of America","Books","Bicycle Wheel" -"49,95",1,2013,3,23,"Demo Company","South America","Uruguay","Books","Bicycle Wheel" -"49,95",1,2012,2,8,"Ankh-Sto Associates","Europe","Spain","Books","Build your own bicycle" -"49,95",1,2012,4,15,"Galaxy Corp","Africa","South Africa","Books","Bicycle Wheel" -"49,95",1,2012,5,16,"Globo-Chem","North America","Canada","Books","Bicycle Wheel" -"49,95",1,2013,3,20,"Gringotts","South America","Ecuador","Books","Build your own bicycle" -"49,95",1,2013,4,5,"United Fried Chicken","South America","Brazil","Books","Bicycle Wheel" -"49,95",1,2013,1,4,"Keedsler Motors","Europe","Netherlands","Books","Build your own bicycle" -"49,95",1,2012,9,15,"Sample Company","Europe","Switzerland","Books","Bicycle Wheel" -"49,95",1,2012,6,11,"Globex Corporation","Europe","Slovakia (Slovak Republic)","Books","Bicycle Wheel" -"49,95",1,2013,5,5,"ZiffCorp","North America","United States of America","Books","Bicycle Wheel" -"49,95",1,2012,4,8,"Kumatsu Motors","South America","Brazil","Books","Build your own bicycle" -"49,95",1,2013,7,23,"Incom Corporation","Europe","Spain","Books","Bicycle Wheel" -"49,95",1,2013,8,18,"General Products","Europe","Spain","Books","Bicycle Wheel" -"49,5",1,2012,9,19,"QWERTY Logistics","Europe","Portugal","Sports","Trial Bike" -"49,5",1,2012,11,27,"Tessier-Ashpool","Europe","Portugal","Sports","Trial Bike" -"49,5",1,2013,7,16,"Fake Brothers","North America","United States of America","Sports","Trial Bike" -"49,5",1,2012,1,10,"123 Warehousing","North America","United States of America","Sports","Trial Bike" -"49,3507",1,2013,6,5,"Globo-Chem","North America","Canada","Books","Bicycle Wheel" -"47,9592",1,2012,4,1,"Demo Company","South America","Uruguay","Books","Build your own bicycle" -"155,4",1,2012,2,18,"Sample, inc","Europe","Switzerland","Sports","Snowboard table" -"45,99",1,2013,12,14,"Widget Corp","Europe","United Kingdom of Great Britain & Northern Ireland","Sports","Trial Bike" -"45,83",1,2012,3,12,"Extensive Enterprise","South America","Brazil","Sports","Trial Bike" -"45,75",1,2012,5,12,"Keedsler Motors","Europe","Netherlands","Sports","Trial Bike" -"45,52",1,2012,4,14,"Flowers By Irene","Europe","Denmark","Sports","Trial Bike" -"45,37",1,2013,12,4,"Sombra Corporation","Europe","France","Sports","Trial Bike" -"45,3",1,2013,5,18,"Foo Bars","South America","Brazil","Sports","Trial Bike" -"45,27",1,2013,8,9,"LuthorCorp","Europe","Hungary","Sports","Trial Bike" -"45,2676",1,2013,7,9,"LexCorp","South America","Brazil","Sports","Trial Bike" -"149,57",1,2013,9,4,"LexCorp","South America","Brazil","Sports","Snowboard table" -"145,5",1,2012,5,8,"Sto Plains Holdings","Europe","France","Sports","Tent for extreme weather" -"44,8709",1,2013,5,5,"Virtucon","South America","Brazil","Sports","Trial Bike" -"44,87",1,2013,12,5,"Kumatsu Motors","South America","Brazil","Sports","Trial Bike" -"44,08",1,2012,12,26,"Fake Brothers","North America","United States of America","Sports","Trial Bike" -"44,03",1,2013,3,10,"123 Warehousing","North America","United States of America","Sports","Trial Bike" -"44,0279",1,2013,2,10,"Widget Corp","Europe","United Kingdom of Great Britain & Northern Ireland","Sports","Trial Bike" -"120,75",1,2012,11,20,"U.S. Robotics and Mechanical Men","South America","Brazil","Sports","Snowboard table" -"120,75",1,2013,1,18,"Mammoth Pictures","South America","Ecuador","Sports","Snowboard table" -"120,75",1,2013,5,12,"Three Waters","South America","Ecuador","Sports","Snowboard table" -"42,07",1,2012,12,12,"Virtucon","South America","Brazil","Sports","Trial Bike" -"115,8",1,2013,8,13,"QWERTY Logistics","Europe","Portugal","Sports","Tent for extreme weather" -"41,32",1,2013,11,8,"North Central Positronics","Europe","Spain","Various","Various" -"41,32",1,2012,1,15,"Praxis Corporation","Europe","Spain","Various","Various" -"41,32",1,2012,12,27,"Wayne Enterprises","Europe","Spain","Various","Various" -"171,25",1,2013,9,25,"ZiffCorp","North America","United States of America","Sports","Mountain Bike" -"171,25",1,2012,3,5,"Smith and Co.","Europe","Spain","Sports","Tent for extreme weather" -"160,77",1,2013,5,10,"Galaxy Corp","Africa","South Africa","Sports","Snowboard table" -"155,8",1,2013,10,5,"Thatherton Fuels","South America","Ecuador","Sports","Rafting Boat" -"155,8",1,2013,12,6,"Water and Power","South America","Ecuador","Sports","Rafting Boat" -"155,8",1,2013,9,8,"Western Gas & Electric","South America","Ecuador","Sports","Rafting Boat" -"155,8",1,2013,10,12,"Mammoth Pictures","South America","Ecuador","Sports","Rafting Boat" -"155,8",1,2013,11,15,"Mooby Corp","South America","Ecuador","Sports","Rafting Boat" -"155,8",1,2013,12,16,"Gringotts","South America","Ecuador","Sports","Rafting Boat" -"155,8",1,2013,5,23,"Thrift Bank","South America","Ecuador","Sports","Rafting Boat" -"146,5",1,2012,10,27,"Sirius Cybernetics Corporation","Europe","Spain","Sports","Snowboard table" -"146,5",1,2012,5,10,"The Legitimate Businessmens Club","South America","Brazil","Sports","Snowboard table" -"34,65",1,2013,3,10,"Universal Export","South America","Brazil","Sports","Trial Bike" -"94,52",1,2013,8,8,"Bluth Company","South America","Brazil","Sports","Snowboard table" -"91,67",1,2013,1,27,"Widget Corp","Europe","United Kingdom of Great Britain & Northern Ireland","Sports","Snowboard table" -"80,01",3,2013,8,27,"Wentworth Industries","Europe","Ireland","Sports","Termic Jacket " -"73,687",1,2013,12,4,"Acme Corp","Europe","Netherlands","Sports","Snowboard table" -"26,95",2,2013,2,4,"Bluth Company","South America","Brazil","Videos","Communicate your skills (2009)" -"152,45",1,2013,3,5,"Wayne Enterprises","Europe","Spain","Sports","Snowboard table" -"140,1",1,2012,3,18,"Acme Corp","Europe","Netherlands","Videos","Climb higher, faster, better (2010)" -"108,25",1,2013,4,8,"Thatherton Fuels","South America","Ecuador","Videos","Climb higher, faster, better (2010)" -"108,25",1,2012,6,5,"Osato Chemicals","North America","United States of America","Videos","Climb higher, faster, better (2010)" -"155,3",1,2013,6,14,"The Legitimate Businessmens Club","South America","Brazil","Sports","Mountain Bike" -"92,233",1,2013,1,6,"Allied Biscuit","North America","United States of America","Videos","Climb higher, faster, better (2010)" -"137,751",1,2013,4,12,"Sirius Cybernetics Corporation","Europe","Spain","Sports","Climbing boots" -"137,699",1,2013,1,16,"Mooby Corp","South America","Ecuador","Sports","Climbing boots" -"155,51",1,2013,6,28,"Colonial Movers","Europe","Spain","Sports","Mountain Bike" -"115,54",1,2013,11,14,"Acme, inc.","Europe","Spain","Sports","Snowboard boots" -"115,24",1,2012,3,14,"Galaxy Corp","Africa","South Africa","Sports","Snowboard boots" -"144,1",1,2013,5,15,"U.S. Robotics and Mechanical Men","South America","Brazil","Sports","Mountain Bike" -"114,18",1,2013,4,18,"Smith and Co.","Europe","Spain","Sports","Snowboard boots" -"110,37",1,2012,11,19,"ABC Telecom","South America","Guatemala","Sports","Snowboard boots" -"110,37",1,2012,10,19,"Demo, inc.","South America","Brazil","Sports","Snowboard boots" -"75,5",1,2013,2,25,"123 Warehousing","North America","United States of America","Sports","Mountain Bike" -"39,96",1,2013,9,24,"General Products","Europe","Spain","Sports","Mountain Bike" -"101,58",1,2012,1,15,"Kumatsu Motors","South America","Brazil","Sports","Snowboard boots" -50,1,2013,7,14,"Osato Chemicals","North America","United States of America","Various","Various" -270,1,2013,11,7,"Praxis Corporation","Europe","Spain","Various","Various" -195,1,2013,12,17,"Sample, inc","Europe","Switzerland","Sports","Mountain Bike" -195,1,2013,4,5,"Wentworth Industries","Europe","Ireland","Sports","Mountain Bike" -90,2,2012,5,4,"ABC Telecom","South America","Guatemala","Sports","Tent for extreme weather" -80,5,2013,11,17,"Sample Company","Europe","Switzerland","Videos","Living on a windsurf table (2010)" -71,1,2012,2,14,"Extensive Enterprise","South America","Brazil","Sports","Mountain Bike" -59,1,2013,11,4,"Three Waters","South America","Ecuador","Sports","Mountain Bike" -49,1,2012,10,21,"Foo Bars","South America","Brazil","Sports","Snowboard table" -49,1,2013,1,24,"Acme Corp","Europe","Netherlands","Sports","Snowboard table" -49,1,2013,10,13,"Sample Company","Europe","Switzerland","Sports","Tent for extreme weather" -49,1,2013,11,20,"Strickland Propane","South America","Brazil","Sports","Snowboard table" -49,1,2013,2,13,"Mooby Corp","South America","Ecuador","Sports","Snowboard table" -49,1,2013,2,6,"Powell Motors","Europe","Spain","Sports","Tent for extreme weather" -49,1,2012,7,8,"QWERTY Logistics","Europe","Portugal","Sports","Tent for extreme weather" -49,1,2013,9,7,"North Central Positronics","Europe","Spain","Sports","Tent for extreme weather" -49,1,2013,2,10,"Tessier-Ashpool","Europe","Portugal","Sports","Tent for extreme weather" -49,1,2013,10,15,"Water and Power","South America","Ecuador","Sports","Climbing equipment" -49,1,2012,2,4,"United Fried Chicken","South America","Brazil","Sports","Tent for extreme weather" -49,1,2012,1,15,"Powell Motors","Europe","Spain","Sports","Snowboard table" -49,1,2012,2,18,"Industrial Automation","Europe","Spain","Sports","Mountain Bike" -49,5,2013,6,14,"Corellian Engineering Corporation","Europe","Spain","Videos","Extreme mountain bike sessions (2012)" -47,1,2012,4,14,"Globo-Chem","North America","Canada","Sports","Mountain Bike" -47,1,2012,5,14,"Mr. Sparkle","Europe","United Kingdom of Great Britain & Northern Ireland","Sports","Mountain Bike" -36,3,2013,4,17,"Thrift Bank","South America","Ecuador","Sports","Paddle Tennis Set" -28,2,2012,6,6,"Fake Brothers","North America","United States of America","Sports","Termic Jacket " -25,1,2012,8,8,"Corellian Engineering Corporation","Europe","Spain","Sports","Trial Bike" -25,1,2012,9,8,"Incom Corporation","Europe","Spain","Sports","Trial Bike" -22,11,2013,3,6,"Strickland Propane","South America","Brazil","Videos","Best windsurf Videos of the year (2013)" -14,1,2013,9,13,"Demo, inc.","South America","Brazil","Sports","Termic Jacket " -14,1,2013,11,5,"Sample, inc","Europe","Switzerland","Sports","Termic Jacket " -14,1,2013,12,20,"Thatherton Fuels","South America","Ecuador","Sports","Termic Jacket " -14,1,2012,4,5,"Foo Bars","South America","Brazil","Sports","Termic Jacket " -14,1,2012,8,12,"Demo, inc.","South America","Brazil","Sports","Termic Jacket " -14,1,2013,10,7,"Omni Consimer Products","Europe","Germany","Sports","Termic Jacket " -14,1,2013,1,14,"Sto Plains Holdings","Europe","France","Sports","Termic Jacket " -14,1,2013,11,18,"Western Gas & Electric","South America","Ecuador","Sports","Climbing boots" -14,1,2012,3,6,"Virtucon","South America","Brazil","Sports","Termic Jacket " -14,1,2013,3,18,"Sirius Cybernetics Corporation","Europe","Spain","Sports","Mountain Bike" -14,1,2013,4,16,"U.S. Robotics and Mechanical Men","South America","Brazil","Sports","Mountain Bike" -14,1,2013,5,16,"Colonial Movers","Europe","Spain","Sports","Mountain Bike" -126,1,2012,6,8,"Tessier-Ashpool","Europe","Portugal","Sports","Termic Jacket " -70,1,2012,12,17,"Colonial Movers","Europe","Spain","Sports","Snowboard boots" -70,1,2012,10,30,"General Products","Europe","Spain","Sports","Snowboard boots" -68,1,2013,10,6,"LuthorCorp","Europe","Hungary","Videos","Living on a windsurf table (2010)" -60,7,2013,4,14,"Chasers","South America","Brazil","Videos","Extreme mountain bike sessions (2012)" -60,7,2013,7,27,"Gizmonic Institute","South America","Brazil","Videos","Extreme mountain bike sessions (2012)" -42,1,2012,11,30,"Initrode","Europe","Spain","Sports","Snowboard boots" -29,1,2012,7,5,"Taggart Transcontinental","North America","United States of America","Sports","Trial Bike" -29,1,2012,8,5,"Atlantic Northern","South America","Brazil","Sports","Trial Bike" -20,1,2012,9,16,"Niagular","Europe","France","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,10,23,"Plow King","Europe","France","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,6,23,"Big Kahuna Burger","Europe","United Kingdom of Great Britain & Northern Ireland","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,7,27,"Big T Burgers and Fries","Europe","Slovakia (Slovak Republic)","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,8,27,"Chez Quis","South America","Brazil","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,9,20,"Chotchkies","Europe","Hungary","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,10,17,"The Frying Dutchman","Europe","Spain","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,11,8,"Klimpys","South America","Brazil","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,2,8,"The Krusty Krab","Europe","Hungary","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,3,27,"Monks Diner","Europe","Spain","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,4,27,"Milliways","Europe","Germany","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,5,20,"Minuteman Cafe","Europe","Spain","Videos","Best windsurf Videos of the year (2013)" -20,1,2012,4,17,"Taco Grande","Europe","France","Videos","Best windsurf Videos of the year (2013)" -10,1,2012,10,6,"Tip Top Cafe","South America","Brazil","Sports","Snowboard boots" -10,1,2012,11,8,"Moes Tavern","South America","Brazil","Sports","Snowboard boots" -10,1,2013,3,14,"Central Perk","South America","Ecuador","Sports","Snowboard boots" diff --git a/webshop/webshop-structure.sql b/webshop/webshop-structure.sql deleted file mode 100644 index 4949f83..0000000 --- a/webshop/webshop-structure.sql +++ /dev/null @@ -1,62 +0,0 @@ - -drop table if exists dates; -create table dates ( - id varchar(128) unique, - date_year integer, - date_quarter integer, - date_month integer, - date_day integer, - date_week integer -); - -drop table if exists customers; -create table customers ( - id varchar(200) unique, - name varchar(200) -); - -drop table if exists products; -create table products ( - id varchar(200) unique, - category_id varchar(200), - category_label varchar(200), - product_id varchar(200), - product_label varchar(200) -); - -drop table if exists countries; -create table countries ( - id varchar(200) unique, - continent_id varchar(200), - continent_label varchar(200), - country_id varchar(200), - country_label varchar(200) -); - -drop table if exists sales; -create table sales ( - id varchar(128) unique, - - date_id integer, - customer_id integer, - product_id integer, - country_id integer, - - quantity real, - price_total real -); - -drop table if exists webvisits; -create table webvisits ( - id varchar(128) unique, - - date_id integer, - country_id integer, - - browser varchar(200), - newsletter varchar(200), - source_id varchar(200), - source_label varchar(200), - - pageviews integer -); diff --git a/webshop/webshop.sqlite b/webshop/webshop.sqlite index 9177226..70965bf 100644 Binary files a/webshop/webshop.sqlite and b/webshop/webshop.sqlite differ