Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 369cadb27c | |||
| 017333f379 | |||
| 6919a77852 | |||
| c2adf169aa | |||
| 582f1cbb63 | |||
| 45c50845d7 | |||
| ca365b4d7f | |||
| d36b74b4d4 | |||
| 393940c2a2 | |||
| a98eeb1272 | |||
| 72c915294a | |||
| 17f3cc5244 | |||
| 55babc362e | |||
| d817eafe48 |
@@ -0,0 +1 @@
|
|||||||
|
*.db
|
||||||
@@ -4,13 +4,26 @@ Outil d'exploration et de téléchargement des données essentielles de la comma
|
|||||||
|
|
||||||
=> https://decp.info
|
=> https://decp.info
|
||||||
|
|
||||||
Dépôts de code connexe :
|
Dépôts de code connexes :
|
||||||
|
|
||||||
- [decp-table-schema-utils](https://github.com/ColinMaudry/decp-table-schema-utils) (traitement et publication des données)
|
- [decp-table-schema-utils](https://github.com/ColinMaudry/decp-table-schema-utils) (traitement et publication des données)
|
||||||
- [decp-table-schema](https://github.com/ColinMaudry/decp-table-schema) (schéma de données tabulaire)
|
- [decp-table-schema](https://github.com/ColinMaudry/decp-table-schema) (schéma de données tabulaire)
|
||||||
|
|
||||||
## Notes de version
|
## Notes de version
|
||||||
|
|
||||||
|
### 1.4.0 (14/06/2021)
|
||||||
|
|
||||||
|
- traduction des opérations de filtrage (ex : contains => contient)
|
||||||
|
- élargissement des menus de filtrage
|
||||||
|
- correction du titre de la page des notes de versions
|
||||||
|
|
||||||
|
### 1.3.0 (03/06/2021)
|
||||||
|
|
||||||
|
- utilisation de noms de colonnes plus lisibles dans l'application
|
||||||
|
- suppression des références à la licence et aux données source sur la page d'accueil
|
||||||
|
- correction des liens vers le code source
|
||||||
|
- correction de l'indentation des puces dans les notes de version
|
||||||
|
|
||||||
### 1.2.0 (28/05/2021)
|
### 1.2.0 (28/05/2021)
|
||||||
|
|
||||||
- ajout d'une page "Notes de version"
|
- ajout d'une page "Notes de version"
|
||||||
|
|||||||
+92
-1
@@ -19,13 +19,104 @@ databases:
|
|||||||
Marché publics et leurs titulaires, données équivalentes au <a href="https://139bercy.github.io/decp-docs/schemas/">format réglementaire</a>. Une ligne = un titulaire de marché, donc ces données ne sont pas adaptées pour travailler avec les montants de marché ou compter les marchés.
|
Marché publics et leurs titulaires, données équivalentes au <a href="https://139bercy.github.io/decp-docs/schemas/">format réglementaire</a>. Une ligne = un titulaire de marché, donc ces données ne sont pas adaptées pour travailler avec les montants de marché ou compter les marchés.
|
||||||
size: 40
|
size: 40
|
||||||
download: https://www.data.gouv.fr/fr/datasets/r/8587fe77-fb31-4155-8753-f6a3c5e0f5c9
|
download: https://www.data.gouv.fr/fr/datasets/r/8587fe77-fb31-4155-8753-f6a3c5e0f5c9
|
||||||
|
column_labels:
|
||||||
|
id: Identifiant
|
||||||
|
uid: Identifiant unique
|
||||||
|
acheteur.id: SIRET acheteur
|
||||||
|
acheteur.nom: Nom de l'acheteur
|
||||||
|
procedure: Procédure d'achat
|
||||||
|
nature: Nature
|
||||||
|
dureeMois: Durée du marché (mois)
|
||||||
|
dateNotification: Date de notification
|
||||||
|
datePublicationDonnees: Date de publication des données
|
||||||
|
montant: Montant
|
||||||
|
objet: Objet
|
||||||
|
codeCPV: Code CPV
|
||||||
|
formePrix: Forme du prix
|
||||||
|
lieuExecution.code: Code du lieu d'exécution
|
||||||
|
lieuExecution.typeCode: Code du lieu d'exécution (type)
|
||||||
|
lieuExecution.nom: Nom du lieu d'exécution
|
||||||
|
titulaire.id: Identifiant du titulaire
|
||||||
|
titulaire.typeIdentifiant: Identifiant du titulaire (type)
|
||||||
|
titulaire.denominationSociale: Nom du titulaire
|
||||||
|
objetModification: Objet de la modification
|
||||||
|
source: Source des données
|
||||||
|
donneesActuelles: Données actuelles ?
|
||||||
|
anomalies: Anomalies
|
||||||
|
operation_labels:
|
||||||
|
exact: est égal à
|
||||||
|
not: est différent de
|
||||||
|
contains: contient
|
||||||
|
endswith: finit par
|
||||||
|
startswith: commence par
|
||||||
|
gt: est supérieur à (>)
|
||||||
|
lt: est inférieur à (<)
|
||||||
|
lte: est inférieur ou égal à (<=)
|
||||||
|
gte: est supérieur ou égal à (>=)
|
||||||
|
isnull__1: est vide
|
||||||
|
notnull__1: n'est pas vide
|
||||||
decp-sans-titulaires:
|
decp-sans-titulaires:
|
||||||
title: Marchés publics sans leurs titulaires
|
title: Marchés publics sans leurs titulaires
|
||||||
description_html: Marchés publics sans les titulaires (pas de colonnes titulaire). Une ligne = un marché, donc ces données sont adaptées pour travailler avec les montants de marchés et compter les marchés.
|
description_html: Marchés publics sans les titulaires (pas de colonnes titulaire). Une ligne = un marché, donc ces données sont adaptées pour travailler avec les montants de marchés et compter les marchés.
|
||||||
size: 40
|
size: 40
|
||||||
download: https://www.data.gouv.fr/fr/datasets/r/834c14dd-037c-4825-958d-0a841c4777ae
|
download: https://www.data.gouv.fr/fr/datasets/r/834c14dd-037c-4825-958d-0a841c4777ae
|
||||||
|
column_labels:
|
||||||
|
id: Identifiant
|
||||||
|
uid: Identifiant unique
|
||||||
|
acheteur.id: SIRET acheteur
|
||||||
|
acheteur.nom: Nom de l'acheteur
|
||||||
|
procedure: Procédure d'achat
|
||||||
|
nature: Nature
|
||||||
|
dureeMois: Durée du marché (mois)
|
||||||
|
dateNotification: Date de notification
|
||||||
|
datePublicationDonnees: Date de publication des données
|
||||||
|
montant: Montant
|
||||||
|
objet: Objet
|
||||||
|
codeCPV: Code CPV
|
||||||
|
formePrix: Forme du prix
|
||||||
|
lieuExecution.code: Code du lieu d'exécution
|
||||||
|
lieuExecution.typeCode: Code du lieu d'exécution (type)
|
||||||
|
lieuExecution.nom: Nom du lieu d'exécution
|
||||||
|
objetModification: Objet de la modification
|
||||||
|
source: Source des données
|
||||||
|
donneesActuelles: Données actuelles ?
|
||||||
|
anomalies: Anomalies
|
||||||
decp-titulaires:
|
decp-titulaires:
|
||||||
title: Données sur les titulaires et géolocalisation
|
title: Données sur les titulaires et géolocalisation
|
||||||
description_html: Données détaillées sur les titulaires, dont leur géolocalisation. Les colonnes <tt>formePrix</tt>, <tt>procedure</tt>, <tt>objetModification</tt> et <tt>datePublicationDonnees</tt> sont absentes. Une ligne = un titulaire de marché, donc ces données ne sont pas adaptées pour travailler avec les montants de marché ou compter les marchés.
|
description_html: Données détaillées sur les titulaires ayant un numéro SIRET, dont leur géolocalisation. Les colonnes <tt>formePrix</tt>, <tt>procedure</tt>, <tt>objetModification</tt> et <tt>datePublicationDonnees</tt> sont absentes. Une ligne = un titulaire de marché, donc ces données ne sont pas adaptées pour travailler avec les montants de marché ou compter les marchés.
|
||||||
size: 40
|
size: 40
|
||||||
download: https://www.data.gouv.fr/fr/datasets/r/25fcd9e6-ce5a-41a7-b6c0-f140abb2a060
|
download: https://www.data.gouv.fr/fr/datasets/r/25fcd9e6-ce5a-41a7-b6c0-f140abb2a060
|
||||||
|
column_labels:
|
||||||
|
id: Identifiant
|
||||||
|
uid: Identifiant unique
|
||||||
|
acheteur.id: SIRET acheteur
|
||||||
|
acheteur.nom: Nom de l'acheteur
|
||||||
|
procedure: Procédure d'achat
|
||||||
|
nature: Nature
|
||||||
|
dureeMois: Durée du marché (mois)
|
||||||
|
dateNotification: Date de notification
|
||||||
|
datePublicationDonnees: Date de publication des données
|
||||||
|
montant: Montant
|
||||||
|
objet: Objet
|
||||||
|
codeCPV: Code CPV
|
||||||
|
formePrix: Forme du prix
|
||||||
|
lieuExecution.code: Code du lieu d'exécution
|
||||||
|
lieuExecution.typeCode: Code du lieu d'exécution (type)
|
||||||
|
lieuExecution.nom: Nom du lieu d'exécution
|
||||||
|
objetModification: Objet de la modification
|
||||||
|
source: Source des données
|
||||||
|
donneesActuelles: Données actuelles ?
|
||||||
|
anomalies: Anomalies
|
||||||
|
codeAPE: Code APE
|
||||||
|
departement: Département
|
||||||
|
categorie: Catégorie
|
||||||
|
categorieJuridique: Catégorie juridique
|
||||||
|
categorieJuridiqueLibelle1: Catégorie juridique niveau 1
|
||||||
|
categorieJuridiqueLibelle2: Catégorie juridique niveau 2
|
||||||
|
etatEtablissement: État établissement
|
||||||
|
etatEntreprise: État entreprise
|
||||||
|
longitude: Longitude
|
||||||
|
latitude: Latitude
|
||||||
|
titulaire.id: Identifiant du titulaire
|
||||||
|
titulaire.typeIdentifiant: Identifiant du titulaire (type)
|
||||||
|
titulaire.denominationSociale: Nom du titulaire
|
||||||
@@ -81,6 +81,18 @@ td.col-longitude,th.col-longitude,td.col-latitude,th.col-latitude {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.versions ul ul {
|
||||||
|
margin-left: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.select-wrapper {
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.select-wrapper.filter-op {
|
||||||
|
width: 160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Flaticon icon font: Flaticon
|
Flaticon icon font: Flaticon
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ Propulsé par <a href="https://datasette.io/" title="Datasette v{{ datasette_ver
|
|||||||
<a href="{{ metadata.source_url }}">
|
<a href="{{ metadata.source_url }}">
|
||||||
{% endif %}{{ metadata.source or metadata.source_url }}{% if metadata.source_url %}</a>{% endif %}
|
{% endif %}{{ metadata.source or metadata.source_url }}{% if metadata.source_url %}</a>{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
· Code source : <a href="https://github.com/ColinMaudry/decp-table-schema-utils">Github</a>
|
· Code source : <a href="https://github.com/ColinMaudry/decp.info">Github</a>
|
||||||
{% if metadata.about or metadata.about_url %}·
|
{% if metadata.about or metadata.about_url %}·
|
||||||
Plus d'informations : {% if metadata.about_url %}
|
Plus d'informations : {% if metadata.about_url %}
|
||||||
<a href="{{ metadata.about_url }}">
|
<a href="{{ metadata.about_url }}">
|
||||||
|
|||||||
@@ -6,12 +6,12 @@
|
|||||||
{% for column in display_columns %}
|
{% for column in display_columns %}
|
||||||
<th class="col-{{ column.name|to_css_class }}" scope="col" data-column="{{ column.name }}" data-column-type="{{ column.type }}" data-column-not-null="{{ column.notnull }}" data-is-pk="{% if column.is_pk %}1{% else %}0{% endif %}">
|
<th class="col-{{ column.name|to_css_class }}" scope="col" data-column="{{ column.name }}" data-column-type="{{ column.type }}" data-column-not-null="{{ column.notnull }}" data-is-pk="{% if column.is_pk %}1{% else %}0{% endif %}">
|
||||||
{% if not column.sortable %}
|
{% if not column.sortable %}
|
||||||
{{ column.name }}
|
{{ metadata.column_labels[column.name] }}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if column.name == sort %}
|
{% if column.name == sort %}
|
||||||
<a href="{{ path_with_replaced_args(request, {'_sort_desc': column.name, '_sort': None, '_next': None}) }}" rel="nofollow">{{ column.name }} ▼</a>
|
<a href="{{ path_with_replaced_args(request, {'_sort_desc': column.name, '_sort': None, '_next': None}) }}" rel="nofollow">{{ metadata.column_labels[column.name] }} ▼</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="{{ path_with_replaced_args(request, {'_sort': column.name, '_sort_desc': None, '_next': None}) }}" rel="nofollow">{{ column.name }}{% if column.name == sort_desc %} ▲{% endif %}</a>
|
<a href="{{ path_with_replaced_args(request, {'_sort': column.name, '_sort_desc': None, '_next': None}) }}" rel="nofollow">{{ metadata.column_labels[column.name] }}{% if column.name == sort_desc %} ▲{% endif %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</th>
|
</th>
|
||||||
|
|||||||
@@ -13,6 +13,15 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% block extra_head %}{% endblock %}
|
{% block extra_head %}{% endblock %}
|
||||||
|
|
||||||
|
<meta name="twitter:card" content="summary"></meta>
|
||||||
|
<meta name="twitter:creator" content="@col1m" />
|
||||||
|
<meta name="author" content="Colin Maudry" />
|
||||||
|
|
||||||
|
<meta property="og:type" content="website"/>
|
||||||
|
<meta property="og:title" content="decp.info : exploration et téléchargement des données des marchés publics" />
|
||||||
|
<meta name="description" property="og:description" content="decp.info vous permet de filtrer et trier les données sur les marchés publics français et de télécharger le résultat sous la forme d'un fichier que vous pourrez ouvrir dans un logiciel de tableur. Outil gratuit et libre." />
|
||||||
|
<meta name="image" property="og:image" content="https://decp.info/static/images/capture.png" />
|
||||||
|
|
||||||
<link rel="shortcut icon" href="/static/icons/icon-192x192.png" />
|
<link rel="shortcut icon" href="/static/icons/icon-192x192.png" />
|
||||||
|
|
||||||
<!-- Matomo -->
|
<!-- Matomo -->
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>{{ metadata.title or "Datasette" }}{% if private %} 🔒{% endif %}</h1>
|
<h1>{{ metadata.title or "Datasette" }}{% if private %} 🔒{% endif %}</h1>
|
||||||
|
|
||||||
{% block description_source_license %}{% include "_description_source_license.html" %}{% endblock %}
|
<!-- {% block description_source_license %}{% include "_description_source_license.html" %}{% endblock %}
|
||||||
|
-->
|
||||||
<p><a class="explore nodec" href="/db"><i class="flaticon-magnifying-glass"></i></a> <a class="explore" href="/db">Explorer les données</a></p>
|
<p><a class="explore nodec" href="/db"><i class="flaticon-magnifying-glass"></i></a> <a class="explore" href="/db">Explorer les données</a></p>
|
||||||
|
|
||||||
<p><a class="explore nodec" href="https://teamopendata.org/t/decp-info-les-donnees-de-la-commande-publique-pour-tous-questions-reponses-discussions/2948"><i class="flaticon-chat-2"></i></a> <a href="https://teamopendata.org/t/decp-info-les-donnees-de-la-commande-publique-pour-tous-questions-reponses-discussions/2948">Présentation / FAQ / discussions</a></p>
|
<p><a class="explore nodec" href="https://teamopendata.org/t/decp-info-les-donnees-de-la-commande-publique-pour-tous-questions-reponses-discussions/2948"><i class="flaticon-chat-2"></i></a> <a href="https://teamopendata.org/t/decp-info-les-donnees-de-la-commande-publique-pour-tous-questions-reponses-discussions/2948">Présentation / FAQ / discussions</a></p>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}Mentions légales{% endblock %}
|
{% block title %}Notes de version{% endblock %}
|
||||||
{% block nav %}
|
{% block nav %}
|
||||||
<p class="crumbs">
|
<p class="crumbs">
|
||||||
<a href="{{ urls.instance() }}">accueil</a>
|
<a href="{{ urls.instance() }}">accueil</a>
|
||||||
@@ -8,8 +8,32 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div style="max-width: 700px;margin:auto">
|
<div style="max-width: 700px;margin:auto" class="versions">
|
||||||
<h1>Notes de version</h1>
|
<h1>Notes de version</h1>
|
||||||
|
|
||||||
|
<h3 id="14014062021">1.4.0 (14/06/2021)</h3>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>traduction des opérations de filtrage (ex : contains => contient)</li>
|
||||||
|
|
||||||
|
<li>élargissement des menus de filtrage</li>
|
||||||
|
|
||||||
|
<li>correction du titre de la page des notes de versions</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3 id="13003062021">1.3.0 (03/06/2021)</h3>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>utilisation de noms de colonnes plus lisibles dans l'application</li>
|
||||||
|
|
||||||
|
<li>suppression des références à la licence et aux données source sur la page d'accueil</li>
|
||||||
|
|
||||||
|
<li>correction des liens vers le code source</li>
|
||||||
|
|
||||||
|
<li>correction de l'indentation des puces dans les notes de version</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="12028052021">1.2.0 (28/05/2021)</h3>
|
<h3 id="12028052021">1.2.0 (28/05/2021)</h3>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
{% if filtered_table_rows_count or human_description_en %}
|
{% if filtered_table_rows_count or human_description_en %}
|
||||||
<h4>{% if filtered_table_rows_count or filtered_table_rows_count == 0 %}{{ "{:,}".format(filtered_table_rows_count) }} ligne{% if filtered_table_rows_count == 1 %}{% else %}s{% endif %}{% endif %}
|
<h4>{% if filtered_table_rows_count or filtered_table_rows_count == 0 %}{{ "{:,}".format(filtered_table_rows_count) }} ligne{% if filtered_table_rows_count == 1 %}{% else %}s{% endif %}{% endif %}
|
||||||
{% if human_description_en %}{{ human_description_en }}{% endif %}
|
<!-- {% if human_description_en %}{{ human_description_en }}{% endif %} -->
|
||||||
</h4>
|
</h4>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@@ -68,13 +68,15 @@
|
|||||||
<select name="_filter_column_{{ loop.index }}">
|
<select name="_filter_column_{{ loop.index }}">
|
||||||
<option value="">- supprimer le filtre -</option>
|
<option value="">- supprimer le filtre -</option>
|
||||||
{% for c in filter_columns %}
|
{% for c in filter_columns %}
|
||||||
<option{% if c == column %} selected{% endif %}>{{ c }}</option>
|
<option{% if c == column %} selected{% endif %} value="{{ c }}">{{ metadata.column_labels[c] }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div><div class="select-wrapper filter-op">
|
</div><div class="select-wrapper filter-op">
|
||||||
<select name="_filter_op_{{ loop.index }}">
|
<select name="_filter_op_{{ loop.index }}">
|
||||||
{% for key, display, no_argument in filters.lookups() %}
|
{% for key, display, no_argument in filters.lookups() %}
|
||||||
<option value="{{ key }}{% if no_argument %}__1{% endif %}"{% if key == lookup %} selected{% endif %}>{{ display }}</option>
|
{% if metadata.operation_labels[key] %}
|
||||||
|
<option value="{{ key }}{% if no_argument %}__1{% endif %}"{% if key == lookup %} selected{% endif %}>{{ metadata.operation_labels[key] }}</option>
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div><input type="text" name="_filter_value_{{ loop.index }}" class="filter-value" value="{{ value }}">
|
</div><input type="text" name="_filter_value_{{ loop.index }}" class="filter-value" value="{{ value }}">
|
||||||
@@ -85,13 +87,15 @@
|
|||||||
<select name="_filter_column">
|
<select name="_filter_column">
|
||||||
<option value="">- colonne -</option>
|
<option value="">- colonne -</option>
|
||||||
{% for column in filter_columns %}
|
{% for column in filter_columns %}
|
||||||
<option>{{ column }}</option>
|
<option value="{{ column }}">{{ metadata.column_labels[column] }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div><div class="select-wrapper filter-op">
|
</div><div class="select-wrapper filter-op">
|
||||||
<select name="_filter_op">
|
<select name="_filter_op">
|
||||||
{% for key, display, no_argument in filters.lookups() %}
|
{% for key, display, no_argument in filters.lookups() %}
|
||||||
<option value="{{ key }}{% if no_argument %}__1{% endif %}"{% if key == lookup %} selected{% endif %}>{{ display }}</option>
|
{% if metadata.operation_labels[key] %}
|
||||||
|
<option value="{{ key }}{% if no_argument %}__1{% endif %}"{% if key == lookup %} selected{% endif %}>{{ metadata.operation_labels[key] }}</option>
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div><input type="text" name="_filter_value" class="filter-value">
|
</div><input type="text" name="_filter_value" class="filter-value">
|
||||||
|
|||||||
Reference in New Issue
Block a user