Compare commits

..
20 Commits
Author SHA1 Message Date
pvincent 5116f6b60d tagged as 1.11.7 2022-08-23 21:56:32 +04:00
pvincent 9edfa4f40e package.json 2022-08-23 21:54:01 +04:00
pvincent 4b9fd45d92 tagged as 1.11.6 2022-08-23 21:49:31 +04:00
pvincent 42b07fea6a lang owend by www-data 2022-08-23 21:49:19 +04:00
pvincent 04a526e728 tagged as 1.11.5 2022-08-22 10:59:40 +04:00
pvincent e28efeab7e re-enable config.xml 2022-08-22 10:59:30 +04:00
pvincent bc939a5bdb tagged as 1.11.4 2022-08-22 10:48:54 +04:00
pvincent 4a052ea707 no more config.xml first time 2022-08-22 10:48:41 +04:00
pvincent f139fcfefb Update 'README.md' 2021-12-03 20:18:54 +04:00
pvincent 347a81dc66 Update 'README.md' 2021-08-31 21:34:26 +04:00
pvincent d142fc1eac Update 'README.md' 2021-08-31 21:22:59 +04:00
pvincent e039ed4fe5 better readme 2021-08-31 20:04:52 +04:00
pvincent 44d2248ba5 screenshot 2021-08-31 19:54:35 +04:00
pvincent 34e7527442 screenshot 2021-08-31 19:15:28 +04:00
pvincent ecffe9bb4e tagged as 1.11.3 2021-08-30 23:22:46 +04:00
pvincent 6e7382633f css footer margin 0 2021-08-30 23:22:19 +04:00
pvincent bb50c92230 tagged as 1.11.2 2021-08-30 22:49:49 +04:00
pvincent 98dffaebed fix config missing key 2021-08-30 22:49:34 +04:00
pvincent ca6aceffbc tagged as 1.11.1 2021-08-30 21:48:13 +04:00
pvincent c4ea83cca9 better README 2021-08-30 21:47:25 +04:00
8 changed files with 788 additions and 900 deletions
+1 -1
View File
@@ -1 +1 @@
1.11.0
1.11.7
+4 -2
View File
@@ -69,12 +69,14 @@ i18n:
#compile templates in each language, required for production env.
templates:
mkdir -p lang/master/tmp
haxe cagette.hxml -D i18n_generation
@make LANG=fr ctemplates
msgfmt www/lang/texts_fr.po -o www/lang/texts_fr.mo
mkdir -p lang/master/tmp
chown www-data:www-data -R www
chown www-data:www-data -R lang/fr
chown www-data:www-data -R lang
ctemplates:
(cd lang/$(LANG)/tpl; temploc2 -macros macros.mtt -output ../tmp/ *.mtt */*.mtt */*/*.mtt)
+60 -44
View File
@@ -1,67 +1,80 @@
CAGETTE PEI
===========
Fourche du logiciel [Cagette.net](https://github.com/CagetteNet) à partir de la version 0.9.2 Novembre 2018
Cagette Péi est un logiciel libre qui favorise les circuits courts.
Il a été adapté pour les besoins des AMAPs sur le marché réunionnais.
Certaines portions du code source de Cagette.net n'étant plus disponibles en téléchargement,
j'ai repris sur la base d'un existant pour adapter au marché local réunionnais et leurs AMAPéi.
> <french>
> Fourche du logiciel [Cagette.net](https://github.com/CagetteNet) à partir de la version 0.9.2 Novembre 2018. Certaines portions de code n'étant plus disponibles en téléchargement à partir de cette date, le logiciel a été repris, adapté puis réactualisé. Pour plus d'information, contact@artcode.re
> </french>
## INSTALL FROM SCRATCH (debian-buster)
![Screenshot](www/img/screenshot.png)
* apt install -y curl
* curl -L https://deb.nodesource.com/setup_8.x | bash -
* apt install -y nodejs=8.17.0-1nodesource1
* apt install -y sudo haxe apache2 make git imagemagick gettext libapache2-mod-neko mariadb-server
* mysql -u root <<EOF
## PREREQUISITE MARIADB
```bash
apt install -y mariadb-server
mysql -u root <<EOF
CREATE DATABASE cagettepei;
GRANT ALL ON cagettepei.* TO 'cagettepei'@'%' IDENTIFIED BY 'cagettepei';
EOF
* cd /var/www
* git clone https://git.artcode.re/cagetters/cagettepei.git
* cd cagettepei
* make install ENV=dev # first time
* make compile # classes
* make templates # templates + i18n
* vim /etc/apache2/sites-available/cagettepei.conf
```
## INSTALL FROM SCRATCH
Rk: Works on any Debian (>=Buster) compatible server!
```
apt install -y curl
curl -L https://deb.nodesource.com/setup_8.x | bash -
apt install -y nodejs=8.17.0-1nodesource1
apt install -y sudo haxe apache2 make git imagemagick gettext libapache2-mod-neko mariadb-server sendemail libio-socket-ssl-perl libnet-ssleay-perl
cd /var/www
git clone https://git.artcode.re/cagetters/cagettepei.git
cd cagettepei
make install ENV=dev
vim /etc/apache2/sites-available/cagettepei.conf
```
```
<VirtualHost *:80>
ServerName cagettepei
DocumentRoot /var/www/cagettepei/www
DirectoryIndex index.n
DocumentRoot /var/www/cagettepei/www/
CustomLog ${APACHE_LOG_DIR}/cagettepei/access.log combined
</VirtualHost>
```
* sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
* a2dissite 000-default.conf
* a2ensite cagettepei.conf
* a2enmod neko rewrite
* systemctl restart apache2
```bash
sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
a2dissite 000-default.conf
a2ensite cagettepei.conf
a2enmod rewrite
mkdir -p /var/log/apache2/cagettepei
systemctl restart apache2
```
## CONFIGURATION
* cd /var/www/cagettepei
* vim config.xml
```bash
cd /var/www/cagettepei
vim config.xml
```
```
<config
host = "<DOMAIN.TLD>"
database = "mysql://cagettepei:cagettepei@localhost/cagettepei"
key = "<SECRET_PHRASE>"
name = "CagettePéi"
default_email = "<EMAIL>"
webmaster_email = "<EMAIL>"
database="mysql://cagettepei:cagettepei@localhost/cagettepei"
smtp_host="localhost"
smtp_port="25"
smtp_user=""
smtp_pass=""
lang="fr"
langs="fr"
langnames="Français"
maintain="0"
debug = "0"
sqllog = "0"
maintain = "0"
cache = "1"
cachetpl = "0"
/>
@@ -72,16 +85,19 @@ ADMIN RESET PASSWORD
go to http://localhost for ERROR + table regeneration, then
* cd /var/www/cagettepei
* SECRET=$(grep key= config.xml | cut -d= -f2 | cut -d'"' -f2)
* echo "insert into User values (1,'fr',MD5('${SECRET}cagettepei'),1,'Administrateur','Cagette Péi', 'admin', null, null, null, null, null, null, null, null, null, now(), now(),6,null, null)" | mysql -h localhost -u cagettepei -pcagettepei cagettepei
```
cd /var/www/cagettepei
SECRET=$(grep key config.xml | cut -d= -f2 | cut -d'"' -f2)
echo "insert into User values (1,'fr',MD5('${SECRET}cagettepei'),1,'Administrateur','Cagette Péi', 'admin', null, null, null, null, null, null, null, null, null, now(), now(),6,null, null)" | mysql -h localhost -u cagettepei -pcagettepei cagettepei
```
then, connect with admin / cagettepei
### change admin password
* echo "update User set pass=MD5('${SECRET}cagettepei') where id=1" | mysql -h localhost -u cagettepei -pcagettepei cagettepei
```
echo "update User set pass=MD5('${SECRET}cagettepei') where id=1" | mysql -h localhost -u cagettepei -pcagettepei cagettepei
```
SYSTEMD-TIMERS
--------------
@@ -98,7 +114,7 @@ SYSTEMD-TIMERS
SELECTOR=$1
for i in /var/www/cagettepei-* ; do
for i in /var/www/cagettepei* ; do
if [[ -d $i ]]; then
cd $i/www
echo "cron-$SELECTOR in: $i"
+1 -51
View File
@@ -1,51 +1 @@
{
"name": "cagette-pei",
"description": "le logiciel libre du circuit court",
"license": "AGPL-3.0",
"dependencies": {
"bootstrap": "^3.3.4",
"eonasdan-bootstrap-datetimepicker": "^4.7.14",
"geolib": "^2.0.24",
"haxe-modular": "^0.7.0",
"jquery": "^2.2.4",
"leaflet": "^1.3.1",
"react": "^15.6.1",
"react-bootstrap-typeahead": "1.4.2",
"react-datetime": "^2.9.0",
"react-dom": "^15.6.1",
"react-leaflet": "^1.8.0",
"react-places-autocomplete": "^6.0.2",
"react-router": "^4.2.0",
"react-router-dom": "^4.2.2"
},
"devDependencies": {
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babelify": "^7.3.0",
"browserify": "^14.4.0",
"cross-env": "^5.1.1",
"node-sass": "^4.5.3",
"npm-run-all": "^4.1.2",
"uglify-js": "^3.1.9",
"watchify": "^3.9.0"
},
"scripts": {
"build": "npm-run-all --parallel build:*",
"build:js": "haxe cagetteJs.hxml",
"build:sass": "node-sass www/css -o www/css",
"watch:sass": "npm run build:sass -- --watch",
"build2": "babel src -d lib",
"libs:dev": "browserify js/libs/libs.js -o www/js/libs.js -d",
"libs:prod": "cross-env NODE_ENV=production browserify js/libs/libs.js | uglifyjs -c -m > www/js/libs.js",
"test": "haxe testsJS.hxml && node js/test/tests.js",
"prepush": "npm test"
},
"repository": {
"type": "git",
"url": "git+https://github.com/bablukid/cagette.git"
},
"bugs": {
"url": "https://github.com/bablukid/cagette/issues"
},
"version": "1.11.0"
}
{"name": "cagette-pei", "description": "le logiciel libre du circuit court", "license": "AGPL-3.0", "dependencies": {"bootstrap": "^3.3.4", "eonasdan-bootstrap-datetimepicker": "^4.7.14", "geolib": "^2.0.24", "haxe-modular": "^0.7.0", "jquery": "^2.2.4", "leaflet": "^1.3.1", "react": "^15.6.1", "react-bootstrap-typeahead": "1.4.2", "react-datetime": "^2.9.0", "react-dom": "^15.6.1", "react-leaflet": "^1.8.0", "react-places-autocomplete": "^6.0.2", "react-router": "^4.2.0", "react-router-dom": "^4.2.2"}, "devDependencies": {"babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", "babelify": "^7.3.0", "browserify": "^14.4.0", "cross-env": "^5.1.1", "node-sass": "^4.5.3", "npm-run-all": "^4.1.2", "uglify-js": "^3.1.9", "watchify": "^3.9.0"}, "scripts": {"build": "npm-run-all --parallel build:*", "build:js": "haxe cagetteJs.hxml", "build:sass": "node-sass www/css -o www/css", "watch:sass": "npm run build:sass -- --watch", "build2": "babel src -d lib", "libs:dev": "browserify js/libs/libs.js -o www/js/libs.js -d", "libs:prod": "cross-env NODE_ENV=production browserify js/libs/libs.js | uglifyjs -c -m > www/js/libs.js", "test": "haxe testsJS.hxml && node js/test/tests.js", "prepush": "npm test"}, "repository": {"type": "git", "url": "git+https://github.com/bablukid/cagette.git"}, "bugs": {"url": "https://github.com/bablukid/cagette/issues"}, "version": "1.11.7"}
+1 -1
View File
@@ -30,7 +30,7 @@ class Contract extends Controller {
@tpl("contract/default.mtt")
function doDefault() {
// Create the list of links to change the language
var langs = App.config.get("langs").split(";");
var langs = App.config.get("langs", "fr").split(";");
var langNames = App.config.get("langnames", "Français").split(";");
var i = 0;
var langLinks = "";
+20 -51
View File
@@ -1,9 +1,9 @@
package controller.admin;
import haxe.web.Dispatch;
import Common;
class Admin extends Controller {
public function new() {
super();
view.category = 'admin';
@@ -13,7 +13,6 @@ class Admin extends Controller {
var e = Nav(nav, "admin");
app.event(e);
view.nav = e.getParameters()[0];
}
@tpl("admin/default.mtt")
@@ -30,24 +29,18 @@ class Admin extends Controller {
var count = sugoi.db.BufferedMail.manager.count($sdate == null);
view.browser = new sugoi.tools.ResultsBrowser(count, 10, browse);
view.num = count;
}
@tpl("form.mtt")
function doSmtp() {
var f = new sugoi.form.Form("emails");
var data = [
{label:"SMTP",value:"smtp"},
{label:"Mandrill API",value:"mandrill"},
];
var data = [{label: "SMTP", value: "smtp"}, {label: "Mandrill API", value: "mandrill"},];
var mailer = sugoi.db.Variable.get("mailer") == null ? "smtp" : sugoi.db.Variable.get("mailer");
var host = sugoi.db.Variable.get("smtp_host")==null ? App.config.get("smtp_host") : sugoi.db.Variable.get("smtp_host");
var port = sugoi.db.Variable.get("smtp_port")==null ? App.config.get("smtp_port") : sugoi.db.Variable.get("smtp_port");
var user = sugoi.db.Variable.get("smtp_user")==null ? App.config.get("smtp_user") : sugoi.db.Variable.get("smtp_user");
var pass = sugoi.db.Variable.get("smtp_pass")==null ? App.config.get("smtp_pass") : sugoi.db.Variable.get("smtp_pass");
var host = sugoi.db.Variable.get("smtp_host") == null ? "<SMTP_SERVER>" : sugoi.db.Variable.get("smtp_host");
var port = sugoi.db.Variable.get("smtp_port") == null ? "587" : sugoi.db.Variable.get("smtp_port");
var user = sugoi.db.Variable.get("smtp_user") == null ? "" : sugoi.db.Variable.get("smtp_user");
var pass = sugoi.db.Variable.get("smtp_pass") == null ? "" : sugoi.db.Variable.get("smtp_pass");
f.addElement(new sugoi.form.elements.StringSelect("mailer", "Mailer", data, mailer));
f.addElement(new sugoi.form.elements.StringInput("smtp_host", "host", host));
@@ -55,13 +48,11 @@ class Admin extends Controller {
f.addElement(new sugoi.form.elements.StringInput("smtp_user", "user", user));
f.addElement(new sugoi.form.elements.StringInput("smtp_pass", "pass", pass));
if (f.isValid()) {
for (k in ["mailer", "smtp_host", "smtp_port", "smtp_user", "smtp_pass"]) {
sugoi.db.Variable.set(k, f.getValueOf(k));
}
throw Ok("/admin/emails", t._("Configuration updated"));
}
view.title = t._("Email service configuration");
@@ -72,12 +63,9 @@ class Admin extends Controller {
d.dispatch(new controller.admin.Plugins());
}
@tpl("admin/taxo.mtt")
function doTaxo() {
view.categ = db.TxpCategory.manager.all();
}
/**
@@ -91,31 +79,31 @@ class Admin extends Controller {
view.like = args.like != null ? args.like : "";
var sql = "";
if( args.user!=null ) sql += " AND uid="+args.user;
if (args.user != null)
sql += " AND uid=" + args.user;
// if( args.like!=null && args.like != "" ) sql += " AND error like "+sys.db.Manager.cnx.quote("%"+args.like+"%");
if (args.empty) {
sys.db.Manager.cnx.request("truncate table Error");
}
var errorsStats = sys.db.Manager.cnx.request("select count(id) as c, DATE_FORMAT(date,'%y-%m-%d') as day from Error where date > NOW()- INTERVAL 1 MONTH "+sql+" group by day order by day").results();
var errorsStats = sys.db.Manager.cnx.request("select count(id) as c, DATE_FORMAT(date,'%y-%m-%d') as day from Error where date > NOW()- INTERVAL 1 MONTH "
+ sql
+ " group by day order by day")
.results();
view.errorsStats = errorsStats;
view.browser = new sugoi.tools.ResultsBrowser(
sugoi.db.Error.manager.unsafeCount("SELECT count(*) FROM Error WHERE 1 "+sql),
20,
function(start, limit) { return sugoi.db.Error.manager.unsafeObjects("SELECT * FROM Error WHERE 1 "+sql+" ORDER BY date DESC LIMIT "+start+","+limit,false); }
);
view.browser = new sugoi.tools.ResultsBrowser(sugoi.db.Error.manager.unsafeCount("SELECT count(*) FROM Error WHERE 1 " + sql), 20,
function(start, limit) {
return sugoi.db.Error.manager.unsafeObjects("SELECT * FROM Error WHERE 1 " + sql + " ORDER BY date DESC LIMIT " + start + "," + limit, false);
});
}
@tpl("admin/graph.mtt")
function doGraph(?key:String, ?year:Int, ?month:Int) {
var from = new Date(year, month, 1, 0, 0, 0);
var to = new Date(year, month + 1, 0, 23, 59, 59);
if (app.params.exists("recompute")) {
switch (key) {
case "basket":
for (d in 1...to.getDate()) {
@@ -124,12 +112,8 @@ class Admin extends Controller {
var value = db.Basket.manager.count($cdate >= _from && $cdate <= _to);
var g = db.Graph.record(key, value, _from);
// trace(value,_from,g);
}
}
}
var data = db.Graph.getRange(key, from, to);
@@ -140,18 +124,14 @@ class Admin extends Controller {
var averageValue = 0.0;
var total = 0.0;
for( d in data) total += d.value;
for (d in data)
total += d.value;
averageValue = total / data.length;
view.total = total;
view.averageValue = averageValue;
}
function doFixDistribValidation() {
Sys.println("===== Liste des distributions ayant été re-validées ====<br>");
// Get the current group
@@ -161,18 +141,14 @@ class Admin extends Controller {
// Get all the validated distributions for this given group
var validatedDistribs = db.Distribution.manager.search(($contractId in contractIds) && $validated == true, {orderBy: date}, false);
for (distrib in validatedDistribs) {
service.PaymentService.validateDistribution(distrib);
Sys.println(distrib.toString() + "<br>");
}
Sys.println("===== Fin de la liste ====");
}
function doCheckDistribValidation() {
Sys.println("===== Liste des distributions validées ayant des opérations/paiements non validés ====<br>");
// Get the current group
@@ -182,11 +158,10 @@ class Admin extends Controller {
// Get all the validated distributions for this given group
var validatedDistribs = db.Distribution.manager.search(($contractId in contractIds) && $validated == true, {orderBy: date}, false);
for (distrib in validatedDistribs) {
for (user in distrib.getUsers()) {
var basket = db.Basket.get(user, distrib.place, distrib.date);
if (basket == null || basket.isValidated()) continue;
if (basket == null || basket.isValidated())
continue;
for (order in basket.getOrders()) {
if (!order.paid) {
@@ -197,27 +172,21 @@ class Admin extends Controller {
var operation = basket.getOrderOperation(false);
if (operation != null) {
if (operation.pending) {
Sys.println(distrib.toString() + "<br>");
Sys.println(operation.toString() + "<br>");
}
for (payment in basket.getPayments()) {
if (payment.pending) {
Sys.println(distrib.toString() + "<br>");
Sys.println(payment.toString() + "<br>");
}
}
}
}
}
Sys.println("===== Fin de la liste ====");
}
}
+89 -138
View File
@@ -1,4 +1,3 @@
/**
Cagette.net SASS stylesheet
@@ -6,15 +5,18 @@
**/
@import url('https://fonts.googleapis.com/css?family=Cabin:400,400i,700');
@import url("https://fonts.googleapis.com/css?family=Cabin:400,400i,700");
//@import '_shop';
@import '_map';
@import "_map";
/*body{
background-color:#F8F4E5 !important;
}*/
h1,h2,h3,h4{
h1,
h2,
h3,
h4 {
margin-top: 4px !important;
margin-bottom: 8px !important;
font-style: italic;
@@ -66,9 +68,11 @@ ul.nav li {
/* Footer */
#footer {
background: #84BD55;
background: #84bd55;
border-radius: 8px;
padding: 20px;
margin: 0;
ul > li > a {
color: #333;
}
@@ -98,21 +102,19 @@ ul.nav li {
.cagsocialmedia li {
display: inline-block;
text-align: center;
}
.cagfb {
background-color : #4267B2;
background-color: #4267b2;
}
.cagtwitter {
background-color : #1DA1F2;
background-color: #1da1f2;
}
.cagyoutube {
background-color : #FF0000;
background-color: #ff0000;
}
}
#subfooter {
@@ -130,12 +132,14 @@ ul.nav li {
.sqlLog {
margin-top: 24px;
font-size: 10px;
background:#AAA;
a{ color:#666; }
background: #aaa;
a {
color: #666;
}
}
.contact {
border:2px solid #CCC ;
border: 2px solid #ccc;
border-radius: 8px;
margin: 8px;
padding: 8px;
@@ -145,13 +149,12 @@ ul.nav li {
.homeBlock {
margin-bottom: 32px;
background:#FFF;
background: #fff;
border-radius: 8px;
position: relative;
padding: 8px;
.content {
margin: 8px 8px 8px 90px;
}
}
@@ -164,16 +167,15 @@ span.panel-title{
.article {
margin-bottom: 16px;
background:#FFF;
background: #fff;
border-radius: 8px;
position: relative;
padding: 8px;
}
.white {
margin-bottom: 16px;
background:#FFF;
background: #fff;
border-radius: 4px;
position: relative;
}
@@ -185,7 +187,7 @@ span.panel-title{
/* block marron */
.block {
margin-bottom: 12px;
background : #FFF;
background: #fff;
border-radius: 8px;
position: relative;
padding: 8px;
@@ -194,11 +196,11 @@ span.panel-title{
/* block marron + contours */
.block2 {
margin-bottom: 32px;
background : #F0D277;
background: #f0d277;
border-radius: 8px;
position: relative;
padding: 8px;
border: 2px solid #C3A04C;
border: 2px solid #c3a04c;
}
/* product in shop */
@@ -224,13 +226,12 @@ table.product{
}
}
/* GLOBAL TABLE SKINNING */
//separator between rows
table.table tr.head > td {
//border-top: 1px solid #BBB;
border-top: 3px solid #DDD;
border-top: 3px solid #ddd;
height: 30px;
font-size: 120%;
vertical-align: bottom;
@@ -238,7 +239,7 @@ table.table tr.head>td{
//sub-row, darker bg
table.table tr.subrow {
background-color:#EEE;
background-color: #eee;
}
//listing have no overflow
@@ -247,22 +248,20 @@ table.listing tr td{
overflow-x: hidden;
}
table.table tr.disabled td,table.table tr.inactive td{
table.table tr.disabled td,
table.table tr.inactive td {
opacity: 0.4;
}
/* DIV TABLE */
// used in UserOrder react comp
div.tableHeader {
font-weight: bold;
color: #AAA;
border-bottom: 1px solid #DDD;
color: #aaa;
border-bottom: 1px solid #ddd;
margin-bottom: 12px;
}
/*table.table>tbody>tr>th{
background-color:white;
color:#BBB;
@@ -270,31 +269,22 @@ div.tableHeader{
}*/
div.reportHeader {
background-color:#DDD;
background-color: #ddd;
}
/* a product order in a table style */
.productOrder {
border-bottom:1px solid #DDD;
border-bottom: 1px solid #ddd;
margin-bottom: 6px;
.infos {
color:#AAA;
color: #aaa;
font-size: 0.8em;
}
}
/* A product reference */
.ref {
color:#AAA;
color: #aaa;
font-family: monospace;
font-size: 0.9em;
}
@@ -303,7 +293,7 @@ div.reportHeader{
.linkToShare {
font-family: Monospace;
padding: 12px;
border: 1px solid #DDD;
border: 1px solid #ddd;
border-radius: 6px;
background-color: #f5f5f5;
}
@@ -311,7 +301,7 @@ div.reportHeader{
/* make <a> like clickable divs */
.clickable {
display: block;
border:1px solid #CCC;
border: 1px solid #ccc;
border-radius: 8px;
color: inherit;
background-color: white;
@@ -320,16 +310,16 @@ div.reportHeader{
&:hover {
cursor: pointer;
background-color:lighten(#F0D277,10%);
border-color:darken(#F0D277,10%);
background-color: lighten(#f0d277, 10%);
border-color: darken(#f0d277, 10%);
text-decoration: none;
transition: all 0.15s ease;
}
&:active {
cursor: pointer;
background-color:#F0D277;
border-color:darken(#F0D277,10%);
background-color: #f0d277;
border-color: darken(#f0d277, 10%);
text-decoration: none;
transform: scale(0.95);
}
@@ -338,7 +328,6 @@ div.reportHeader{
background-color: lightgray;
cursor: not-allowed;
}
}
/* a cagette group block (use it with .clickable ) */
@@ -387,18 +376,15 @@ div.reportHeader{
a {
color: #777;
}
}
}
/*
SHOP v1
*/
.shop {
.header {
background-color:#749E3C;
background-color: #749e3c;
display: inline-block;
width: 100%;
@@ -410,10 +396,13 @@ div.reportHeader{
line-height: 22px;
color: white;
a{ color:white; }
.info{ font-weight: bold; }
a {
color: white;
}
.info {
font-weight: bold;
}
}
.body {
background: white;
@@ -425,14 +414,12 @@ div.reportHeader{
font-weight: bold;
font-size: 1.2em;
color: #583816;
border-bottom:1px solid #CCC;
border-bottom: 1px solid #ccc;
width: 100%;
}
}
.product {
display: inline-block;
.name {
@@ -444,12 +431,9 @@ div.reportHeader{
color: #900;
font-weight: bold;
}
}
}
.price {
font-weight: bold;
font-size: 1.3em;
@@ -463,13 +447,11 @@ div.reportHeader{
.detail {
color: #999999;
font-size: 90%;
}
//in shop page
#cartContainer.scrolled {
position: fixed;
top: 125px;
}
@@ -492,10 +474,8 @@ div.reportHeader{
}
#cart {
margin-bottom: 12px;
div.order {
margin-bottom: 8px;
@@ -508,12 +488,10 @@ div.reportHeader{
//font-weight:bold;
margin-bottom: 12px;
margin-top: 12px;
border-top:1px solid #FFF;
}
border-top: 1px solid #fff;
}
}
}
.place {
color: #666;
@@ -521,11 +499,11 @@ div.reportHeader{
margin-top: 13px;
padding: 8px;
font-size: 13px;
border-top:1px solid #CCC ;
border-top: 1px solid #ccc;
}
.distribMessage {
color:#FFF;
color: #fff;
font-weight: bold;
padding: 4px;
margin-top: 13px;
@@ -535,7 +513,6 @@ div.reportHeader{
/*border-top:1px solid #333 ;*/
}
.dateBoxOffset {
position: absolute;
top: -16px;
@@ -543,10 +520,9 @@ div.reportHeader{
display: block;
}
.dateBox {
border-radius: 8px;
background-color: #c59654;
color:#FFF;
color: #fff;
font-size: 13px;
line-height: 13px;
@@ -560,7 +536,7 @@ div.reportHeader{
.box {
line-height: 22px;
background-color:#FFFFFF;
background-color: #ffffff;
color: #666;
font-size: 14px;
font-weight: bold;
@@ -571,15 +547,13 @@ div.reportHeader{
/* place link */
a {
color: #FFFFFF !important;
color: #ffffff !important;
}
a:hover {
color: #FFFFFF !important;
color: #ffffff !important;
}
}
/* categories */
span.tag {
color: white;
@@ -596,45 +570,42 @@ span.tag.active{
line-height: 45px;
}
/**
Popovers for help and tutorials
**/
.popover {
color: white;
font-size: 14px;
//font-family:'Arial','sans-serif' !important;
h3.popover-title {
padding: 4px;
color:#BB9931 !important;
border-bottom:1px solid #BB9931 !important;
color: #bb9931 !important;
border-bottom: 1px solid #bb9931 !important;
background-color: none;
}
.popover-content {
font-size: 16px;
b{ color:#FC0; font-weight:normal; }
b {
color: #fc0;
font-weight: normal;
}
}
.footer {
border-top: 1px solid #BB9931;
border-top: 1px solid #bb9931;
height: 45px;
padding: 12px 0;
.pull-left .btn {
background-color: #583816;
color: white;
border: 1px solid white;
}
.pull-right .btn {
background-color:#FC0;
background-color: #fc0;
color: #583816;
border: 1px solid #583816;
}
@@ -643,11 +614,10 @@ span.tag.active{
/* skin a modal like a tuto popover */
.modal.help {
.modal-header {
font-size: 1.3em;
color:#BB9931 !important;
border-bottom:1px solid #BB9931 !important;
color: #bb9931 !important;
border-bottom: 1px solid #bb9931 !important;
font-weight: bold !important;
//font-family:'Arial','sans-serif' !important;
background-color: #583816 !important;
@@ -656,13 +626,11 @@ span.tag.active{
.modal-content {
background-color: #583816 !important;
color: white;
}
.modal-footer {
border-top:1px solid #BB9931 !important;
border-top: 1px solid #bb9931 !important;
}
}
/* hightlight a zone for tutos */
.highlight {
@@ -670,23 +638,19 @@ span.tag.active{
border-radius: 16px;
}
/* Distribution box for the homepage */
.distrib {
margin: 0px 0px 28px 0px;
position: relative;
.header {
display: block;
height: 72px;
overflow: hidden;
border-top-left-radius: 8px;
border-top-right-radius: 8px;
color:#FFF;
background-color:#749E3C;
color: #fff;
background-color: #749e3c;
vertical-align: middle;
margin: 0;
padding: 6px 6px 6px 90px;
@@ -696,7 +660,7 @@ span.tag.active{
opacity: 1;
}
&.orders {
background-color:#B2823F;
background-color: #b2823f;
}
.info {
@@ -704,24 +668,26 @@ span.tag.active{
line-height: 22px;
/* place link */
a {
color: #FFFFFF !important;
&:hover{ color: #FFFFFF !important; }
color: #ffffff !important;
&:hover {
color: #ffffff !important;
}
}
}
.date {
line-height: 23px;
background-color:#FFFFFF;
background-color: #ffffff;
color: #666;
font-size: 14px;
text-align: center;
margin: 0 8px 0 0;
border-radius: 6px;
border: 4px solid #C6C6C6;
border: 4px solid #c6c6c6;
}
.address, .closing{
.address,
.closing {
font-weight: normal;
font-size: 0.9em;
line-height: 16px;
@@ -737,30 +703,28 @@ span.tag.active{
.content {
padding: 6px 6px 6px 6px;
background-color:#85B14D;
background-color: #85b14d;
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
&.disabled {
background:#AAA;
background: #aaa;
opacity: 1;
}
&.orders {
background:#FFF;
background: #fff;
padding-left: 50px;
}
.footer {
color: #999;
a{color:#999;}
a {
color: #999;
}
font-size: 0.9em;
}
}
}
div.groupImg {
@@ -788,7 +752,6 @@ div.product{
margin-right: 12px;
vertical-align: middle;
}
}
//Product in ProductSelect React component
@@ -811,14 +774,10 @@ div.productSelect{
div.product {
display: inline-block;
}
}
// Cagette Pro Catalogs
div.productBox {
div.productImg {
background-size: cover;
height: 220px;
@@ -842,7 +801,6 @@ div.productBox{
}
}
// typeahead ( autocomplete js lib )
.tt-menu {
background-color: #f5e3ac;
@@ -851,7 +809,7 @@ div.productBox{
.tt-suggestion {
background-color: #f5e3ac;
padding: 8px;
border-top:1px solid #CCC;
border-top: 1px solid #ccc;
color: darken(#f5e3ac, 60%);
cursor: pointer;
font-style: italic;
@@ -862,9 +820,8 @@ div.productBox{
//txp product input
#pInput {
.txpProduct {
color:#AAA;
color: #aaa;
font-weight: bold;
font-size: 0.8em;
margin: 4px 0;
@@ -876,7 +833,6 @@ div.productBox{
}
}
//Product composer
/*
div.ProductComp{
@@ -894,15 +850,13 @@ div.ProductComp{
//basket
div.basketNumber {
display: inline-block;
background-color: #333;
border-radius: 10px;
padding: 6px;
font-weight: bold;
color:#CCC;
color: #ccc;
}
tr.success td div.basketNumber {
@@ -924,13 +878,10 @@ tr.danger td div.basketNumber{
width: 100%;
margin: 0;
padding: 8px;
border-top: 3px solid #CCC;
border-top: 3px solid #ccc;
z-index: 99;
}
/*!
* https://github.com/YouCanBookMe/react-datetime
*/
@@ -945,7 +896,7 @@ tr.danger td div.basketNumber{
margin-top: 1px;
z-index: 99999 !important;
background: #fff;
box-shadow: 0 1px 3px rgba(0,0,0,.1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
border: 1px solid #f9f9f9;
}
.rdtOpen .rdtPicker {
@@ -988,7 +939,7 @@ tr.danger td div.basketNumber{
position: relative;
}
.rdtPicker td.rdtToday:before {
content: '';
content: "";
display: inline-block;
border-left: 7px solid transparent;
border-bottom: 7px solid #428bca;
Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB