Commit 8452c697 by François C.

Merge branch 'dev_principale' into 'dev_cooperatic'

# Conflicts:
#   coops_configurations/config_lacagette.py
parents e7104477 dfda5d22
# Scripts
*.sh text eol=lf
\ No newline at end of file
...@@ -16,3 +16,4 @@ db.sqlite3 ...@@ -16,3 +16,4 @@ db.sqlite3
.gitlab-ci.yml .gitlab-ci.yml
shop/shop_admin_settings.json shop/shop_admin_settings.json
shop/errors.log shop/errors.log
.idea
This diff is collapsed. Click to expand it.
...@@ -102,4 +102,8 @@ ENTRANCE_COME_FOR_SHOPING_MSG = "Hey coucou toi ! Cet été nous sommes plus de ...@@ -102,4 +102,8 @@ ENTRANCE_COME_FOR_SHOPING_MSG = "Hey coucou toi ! Cet été nous sommes plus de
UNSUBSCRIBED_MSG = 'Vous êtes désincrit·e, merci de remplir <a href="https://docs.google.com/forms/d/e/1FAIpQLSfPiC2PkSem9x_B5M7LKpoFNLDIz0k0V5I2W3Mra9AnqnQunw/viewform">ce formulaire</a> pour vous réinscrire sur un créneau.<br />Vous pouvez également contacter le Bureau des Membres en remplissant <a href="https://docs.google.com/forms/d/e/1FAIpQLSeZP0m5-EXPVJxEKJk6EjwSyZJtnbiGdYDuAeFI3ENsHAOikg/viewform">ce formulaire</a>' UNSUBSCRIBED_MSG = 'Vous êtes désincrit·e, merci de remplir <a href="https://docs.google.com/forms/d/e/1FAIpQLSfPiC2PkSem9x_B5M7LKpoFNLDIz0k0V5I2W3Mra9AnqnQunw/viewform">ce formulaire</a> pour vous réinscrire sur un créneau.<br />Vous pouvez également contacter le Bureau des Membres en remplissant <a href="https://docs.google.com/forms/d/e/1FAIpQLSeZP0m5-EXPVJxEKJk6EjwSyZJtnbiGdYDuAeFI3ENsHAOikg/viewform">ce formulaire</a>'
CONFIRME_PRESENT_BTN = 'Clique ici pour valider ta présence' CONFIRME_PRESENT_BTN = 'Clique ici pour valider ta présence'
RECEPTION_PB = "Ici, vous pouvez signaler toute anomalie lors d'une réception, les produits non commandés, cassés ou pourris. \
Merci d'indiquer un maximum d'informations, le nom du produit et son code barre. \
Dans le cas de produits déteriorés, merci d'envoyer une photo avec votre téléphone à [Adresse_email]"
{
"views": {
"by_fp": {
"map": "function(doc){emit(doc.fingerprint);}"
},
"by_completed": {
"map": "function(doc){emit(doc.completed);}"
},
"by_odoo_id": {
"map": "function(doc){emit(doc.odoo_id);}"
}
}
}
{
"views": {
"by_type": {
"map": "function(doc){emit(doc.type);}"
}
}
}
#!/usr/bin/env sh
sleep 3
curl -X PUT http://admin:123abc@couchdb:5984/coops
curl -X PUT http://admin:123abc@couchdb:5984/inventory
curl -X PUT http://admin:123abc@couchdb:5984/envelop
curl -X PUT http://admin:123abc@couchdb:5984/shopping_carts
curl -X PUT http://admin:123abc@couchdb:5984/coops/_design/index \
-d @couchdb-coops-init.json
curl -X PUT http://admin:123abc@couchdb:5984/envelop/_design/index \
-d @couchdb-envelop-init.json
do_shelf_inventory received data are beeing stored in this directory, to help for data recovery and analysis
\ No newline at end of file
Emplacements pour stocker les fichiers utiliser par des tâches programmées (par ex)
Les fichiers seront traités lors de l'appel à /reception/po_process_picking
...@@ -27,17 +27,6 @@ services: ...@@ -27,17 +27,6 @@ services:
volumes: volumes:
- "couchdb-data:/opt/couchdb/data" - "couchdb-data:/opt/couchdb/data"
initializer:
image: curlimages/curl
deploy:
restart_policy:
condition: on-failure
depends_on:
- couchdb
command: ["sh", "-c", "cd /tmp && ./couchdb-setup.sh"]
volumes:
- "./:/tmp"
database: database:
image: "postgres:10" image: "postgres:10"
env_file: .env env_file: .env
......
FROM python:3-slim FROM python:3
# Virtual env: ENV PYTHONUNBUFFERED=1
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV # Add french locale
ENV PATH="$VIRTUAL_ENV/bin:$PATH" RUN apt update && \
apt install -y --no-install-recommends locales && \
rm -rf /var/lib/apt/lists/* && \
sed -i '/^#.* fr_FR.UTF-8 /s/^#//' /etc/locale.gen && \
locale-gen
WORKDIR /home/app WORKDIR /home/app
# Install dependencies: RUN pip install --upgrade pip
COPY requirements.txt /home/app/ COPY requirements.txt /home/app/
RUN pip install -r requirements.txt RUN pip install -r requirements.txt
# Setup volume to be able to dev application locally # Setup volume to be able to dev application locally
VOLUME /home/app VOLUME /home/app
COPY . /home/app
# Run the application: # Run the application:
EXPOSE 8080 EXPOSE 8080
......
[couchdb] [couchdb]
single_node=true single_node=true
users_db_security_editable = true
[httpd] [httpd]
enable_cors = true enable_cors = true
[cors] [cors]
credentials = true credentials = true
origins = http://127.0.0.1:8080 origins = *
[replicator] [replicator]
db = _replicator db = _replicator
......
#! /bin/sh #!/usr/bin/env bash
port=34001 port=34001
ip=127.0.0.1 ip=127.0.0.1
if [ ! -z "$1" ]
then
ip=$1
fi
if [ ! -z "$2" ] if [ -n "$1" ]
then then
port=$2 ip=$1
fi
if [ -n "$2" ]
then
port=$2
fi fi
current_path=$(pwd) current_path=$(pwd)
export PYTHONPATH="$current_path:$current_path/lib:$PYTHONPATH" export PYTHONPATH="$current_path:$current_path/lib:$PYTHONPATH"
echo yes | django-admin collectstatic --settings=outils.settings export DJANGO_SETTINGS_MODULE=outils.settings
django-admin runserver $ip:$port --settings=outils.settings # Collect static files
echo yes | django-admin collectstatic
# Make sure couchdb databases exist
python manage.py couchdb
# Run server
django-admin runserver "$ip:$port"
Destination directory for logging files (defines in 'handlers' part of LOGGING definition)
https://docs.djangoproject.com/fr/2.2/topics/logging/
from django.core.management.base import BaseCommand, CommandError
from django.conf import settings
import couchdb
class Command(BaseCommand):
help = 'Initialize needed couchDB databases'
def handle(self, *args, **options):
if 'admin' not in settings.COUCHDB:
raise CommandError('''
Veuillez définir les accès d'admin à CouchDB dans votre fichier settings_secret.py
Vérifiez le fichier settings_secret_example.py pour un exemple.''')
url = settings.COUCHDB['admin']['url'] % (settings.COUCHDB['admin']['user'], settings.COUCHDB['admin']['password'])
dbnames = settings.COUCHDB['dbs']
couchserver = couchdb.Server(url)
for dbname in dbnames.values():
if dbname not in couchserver:
self.stdout.write(self.style.WARNING("Missing database %s" % dbname))
db = couchserver.create(dbname)
self.stdout.write(self.style.SUCCESS("✓ created db"))
if dbname == 'coops':
self.createCoopsViews(db)
elif dbname == 'envelop':
self.createEnvelopViews(db)
# db.security
self.createPublicAccess(db)
def createCoopsViews(self, dbConn):
byFpMapFunction = '''function(doc) {
emit(doc.fingerprint);
}'''
byCompletedMapFunction = '''function(doc) {
emit(doc.completed);
}'''
byOdooMapFunction = '''function(doc) {
emit(doc.odoo_id);
}'''
views = {
"by_fp": {
"map": byFpMapFunction
},
"by_completed": {
"map": byCompletedMapFunction
},
"by_odoo_id": {
"map": byOdooMapFunction
},
}
self.createView(dbConn, "index", views)
def createEnvelopViews(self, dbConn):
byTypeMapFunction = '''function(doc) {
emit(doc.type);
}'''
views = {
"by_type": {
"map": byTypeMapFunction
}
}
self.createView(dbConn, "index", views)
def createView(self, dbConn, designDoc, views):
self.stdout.write(self.style.SUCCESS("✓ created view %s" % designDoc))
data = {
"_id": "_design/%s" % designDoc,
"views": views,
"language": "javascript",
"options": {"partitioned": False }
}
dbConn.save(data)
def createPublicAccess(self, dbConn):
self.stdout.write(self.style.SUCCESS("✓ created security rule"))
security_doc = dbConn.resource.get_json("_security")[2]
dbConn.resource.put("_security", {})
...@@ -77,7 +77,10 @@ class OdooAPI: ...@@ -77,7 +77,10 @@ class OdooAPI:
class CouchDB: class CouchDB:
"""Class to handle interactions with CouchDB""" """Class to handle interactions with CouchDB"""
url = settings.COUCHDB['url'] if 'private_url' in settings.COUCHDB:
url = settings.COUCHDB['private_url']
else:
url = settings.COUCHDB['url']
dbs = settings.COUCHDB['dbs'] dbs = settings.COUCHDB['dbs']
db = None db = None
dbc = None dbc = None
......
...@@ -8,7 +8,13 @@ ODOO = { ...@@ -8,7 +8,13 @@ ODOO = {
} }
COUCHDB = { COUCHDB = {
'private_url': 'http://couchdb:5984',
'url': 'http://127.0.0.1:5984', 'url': 'http://127.0.0.1:5984',
'admin': {
'url': 'http://%s:%s@couchdb:5984',
'user': 'admin',
'password': '123abc',
},
'dbs': { 'dbs': {
'member': 'coops', 'member': 'coops',
'inventory': 'inventory', 'inventory': 'inventory',
......
...@@ -1347,7 +1347,7 @@ function openErrorReport() { ...@@ -1347,7 +1347,7 @@ function openErrorReport() {
var textarea = document.getElementById("error_report"); var textarea = document.getElementById("error_report");
textarea.value = user_comments; textarea.value = (user_comments != undefined) ? user_comments : "";
textarea.focus(); textarea.focus();
textarea.setSelectionRange(textarea.value.length, textarea.value.length); textarea.setSelectionRange(textarea.value.length, textarea.value.length);
} }
......
Utilisé pour stocker de façon temporaire des données par plusieurs modules
...@@ -120,9 +120,7 @@ ...@@ -120,9 +120,7 @@
<hr /> <hr />
<p class="txtleft"> <p class="txtleft">
Ici, vous pouvez signaler toute anomalie lors d'une réception, les produits non commandés, cassés ou pourris. {{RECEPTION_PB}}
Merci d'indiquer un maximum d'informations, le nom du produit et son code barre.
Dans le cas de produits déteriorés, merci d'envoyer une photo avec votre téléphone à <strong>{{RECEPTION_PB_EMAIL}}</strong>
</p> </p>
<br> <br>
<textarea id="error_report"></textarea> <textarea id="error_report"></textarea>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment