Compare commits
214 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 15d9ce3b77 | |||
| 86889f33ce | |||
| 58371d3b84 | |||
| 76e46da8f2 | |||
| 26e131ca22 | |||
| 556b49e002 | |||
| 0615cccc06 | |||
| 07011002f3 | |||
| b0f25625ee | |||
| 2efeb53cec | |||
| 1c4fb6d701 | |||
| 7dfc0064d1 | |||
| 80ca84804e | |||
| bb249c873a | |||
| 25212af64f | |||
| 98efbe2c2e | |||
| 86d72a507a | |||
| 240684b574 | |||
| 35c06a9c5e | |||
| a304f35be8 | |||
| 0e0d56de07 | |||
| d84f30287a | |||
| d22b219432 | |||
| e99eb82222 | |||
| c908a21433 | |||
| cc21ae1559 | |||
| 94027e396e | |||
| 0f28596721 | |||
| 47a85b66f4 | |||
| 123230b8c9 | |||
| 13144ca430 | |||
| afd6906667 | |||
| eceb08fb7f | |||
| 8f7ef2d2ba | |||
| d5ee75bcf7 | |||
| cdb85e6eb2 | |||
| 4f22d9da41 | |||
| cd8a69210d | |||
| 1fdd9bda91 | |||
| 35922aed85 | |||
| b3e733888b | |||
| ed897c728f | |||
| 4865576862 | |||
| c8883bda11 | |||
| 3c23bf36ea | |||
| 2305f4761e | |||
| 7afcb9b8b1 | |||
| e346440748 | |||
| 08ef4dcb07 | |||
| cc12a9baa3 | |||
| 9e0679d4c8 | |||
| 9bcd435f6c | |||
| c0f911efc2 | |||
| 175a53080a | |||
| 9532f09cdd | |||
| bb83650b92 | |||
| 398b5ab56b | |||
| 4a0810acb3 | |||
| 0f37a80263 | |||
| 049f06604a | |||
| 52b30b5660 | |||
| 8efd6589bc | |||
|
|
15dc6603ba | ||
|
|
cbcdd3e19f | ||
|
|
c74f60de09 | ||
| dfbc1ea083 | |||
| c0a7f5bd9b | |||
| 5e933151ed | |||
| 59d42f81ac | |||
|
|
0e77614b89 | ||
|
|
63105f5c67 | ||
|
|
2917fd4159 | ||
|
|
d47e2a2378 | ||
| 5b8c73caea | |||
|
|
9cd021f474 | ||
|
|
1d1b8b29a7 | ||
| a6eeb30b82 | |||
| 7a706ba9f2 | |||
|
|
c142e0ccb6 | ||
|
|
fe2c58f65f | ||
|
|
e83c5f2d53 | ||
|
|
839b913b02 | ||
|
|
f742176c1e | ||
| 31ed53f0f1 | |||
| 02fdd57538 | |||
|
|
7a436e2218 | ||
|
|
0161c72cd4 | ||
|
|
2dc9a019d5 | ||
|
|
560cd29f16 | ||
| 4f52ff8afe | |||
|
|
dc595b8f5d | ||
|
|
77054b62eb | ||
|
|
b612a7f135 | ||
|
|
90fa9af74a | ||
|
|
85c3bbaa5c | ||
|
|
485e0d3462 | ||
|
|
acdab93cba | ||
|
|
1777d2ac4f | ||
| 091b51e592 | |||
|
|
6ccf206c0c | ||
| 3cb7664a08 | |||
|
|
35def60078 | ||
|
|
a63855576b | ||
|
|
df8753b1b7 | ||
|
|
c7f30b1555 | ||
|
|
c87263d5a6 | ||
|
|
16af3ebb73 | ||
|
|
66766268a6 | ||
|
|
8dbdf19436 | ||
| 15031342e7 | |||
|
|
31a42c9bc5 | ||
|
|
ad9650098b | ||
|
|
4e3e2f9a36 | ||
|
|
6902e04e54 | ||
|
|
19cc99d7ff | ||
| 0601815ec0 | |||
| 1356fc2255 | |||
| 83860d3c21 | |||
| 39b2c03de9 | |||
| b2733270b2 | |||
| 9a7cad7c4d | |||
| b725b98e06 | |||
| 85e5b6b10f | |||
| cb3035d72c | |||
| 6ab266be48 | |||
| ff2c6375f2 | |||
| 2398c50437 | |||
| 71e2a1b55a | |||
| 48fe805295 | |||
| 7ba5cea241 | |||
| 6c74c73157 | |||
| 567e58a8b0 | |||
| 49de5aa0e9 | |||
| c410e1df05 | |||
| 47f03f78df | |||
| e8782369b1 | |||
| 9792dfcf28 | |||
| b434aada89 | |||
| 6212692b19 | |||
| 3915b0e59b | |||
| ed30afb3e7 | |||
| dc05f11d69 | |||
| 2e41da37c4 | |||
| db6cddb94e | |||
| d702ba570d | |||
| df58a1e84b | |||
| ef81220d85 | |||
| 6489954028 | |||
| c5875e52ee | |||
| ac3c7bfbc6 | |||
| af1d268bf3 | |||
| 793a62cc2d | |||
| af2315bad2 | |||
| b3fb088d9f | |||
| 9873197d42 | |||
| 28de1ce541 | |||
| 99d1c240d9 | |||
| 4af57cb876 | |||
| aaa80ff002 | |||
| 01b73cc1d4 | |||
| 0f3141c17c | |||
| 1e75053d49 | |||
| c538e387ca | |||
| ca04eb551b | |||
| 154264fbad | |||
| ef9e56a272 | |||
| 862d90657e | |||
| c743cce59a | |||
| 908e15a80f | |||
| 7840087bb0 | |||
| 879546e166 | |||
| ab0d4997eb | |||
| d03e90b7b8 | |||
| dab24387a2 | |||
| 6bc9d34fde | |||
| 71305e8002 | |||
| 50fea4710e | |||
| 9b6f016c32 | |||
| 9aa6c8985e | |||
| 500e07c810 | |||
| ec19e2db35 | |||
| 64b049251e | |||
| 189cd8fd78 | |||
| aae410f574 | |||
| 7d81e0be71 | |||
| aa298d613b | |||
| 534eb6bf15 | |||
| 6ab71bb412 | |||
| 74cd9bab55 | |||
| 6210b436b0 | |||
| 756fa75f4f | |||
| ae498a9bc4 | |||
| aa19d3f936 | |||
| ba89518ba2 | |||
| 00f7d289b2 | |||
| 677bda260b | |||
| a31d2241bc | |||
| 681c9ebfbd | |||
| 1de6184877 | |||
| 5088b9a1ff | |||
| 7a7a2e2cfa | |||
| 793cbc3206 | |||
| 78a8d46322 | |||
| 7c3e484bb0 | |||
| 13fdabaf86 | |||
| ae08fbfd0b | |||
| c62f1c85c6 | |||
| 9178682733 | |||
| 94fcaaa995 | |||
| 5ddbc49fec | |||
| bbd462cd54 | |||
| ee577697ce | |||
| 122710b3e4 | |||
| 2e0abbdff2 |
13
.gitignore
vendored
@@ -1,7 +1,6 @@
|
|||||||
# Fichiers temporaires #
|
# Fichiers temporaires #
|
||||||
########################
|
########################
|
||||||
*~
|
*~
|
||||||
*.pyc
|
*.pyc
|
||||||
*.pid
|
*.pid
|
||||||
*.log
|
*.log
|
||||||
|
|
||||||
|
|||||||
BIN
.temp_TARIF AXA 2021-converti.xlsx
Normal file
35
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "python",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Pserve",
|
||||||
|
"python": "C:/pyramid10/Scripts/python.exe",
|
||||||
|
"program": "/pyramid10/Scripts/pserve.exe",
|
||||||
|
"args": [
|
||||||
|
"-v",
|
||||||
|
"development.ini",
|
||||||
|
],
|
||||||
|
"console": "integratedTerminal",
|
||||||
|
"debugOptions": [
|
||||||
|
"RedirectOutput",
|
||||||
|
"WaitOnAbnormalExit",
|
||||||
|
"WaitOnNormalExit"
|
||||||
|
],
|
||||||
|
"python.unitTest.promptToConfigure":false,
|
||||||
|
"files.exclude": {
|
||||||
|
"**/.git": true,
|
||||||
|
"**/.svn": true,
|
||||||
|
"**/.hg": true,
|
||||||
|
"**/.DS_Store": true,
|
||||||
|
".idea": true,
|
||||||
|
"**/*.pyc": true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
5
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"html.validate.scripts": false,
|
||||||
|
"editor.minimap.enabled": false,
|
||||||
|
"python.pythonPath": "C:\\pyramid10\\Scripts\\python.exe"
|
||||||
|
}
|
||||||
1
bitbucket app password.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
9HMYPQ7Yz8emdBwGpbg3
|
||||||
@@ -18,19 +18,28 @@ pyramid.includes =
|
|||||||
pyramid_mailer
|
pyramid_mailer
|
||||||
pyramid_tm
|
pyramid_tm
|
||||||
|
|
||||||
|
|
||||||
sqlalchemy.url = mysql://phuoc:phuoc!@localhost/bddevfac?charset=utf8
|
|
||||||
# sqlalchemy.url = mysql://root:cni/@srvbd/bddevfac?charset=utf8
|
|
||||||
|
|
||||||
mondumas.admin_email = cao.thien-phuoc@orange.fr
|
# sqlalchemy.url = mysql://dumas_ro:dumas_RO!@localhost/bddevfac?charset=utf8
|
||||||
mondumas.devfac_url = mondumas:static/DEVFAC/
|
sqlalchemy.url = mysql://phuoc:phuoc!@localhost/bddevfac?charset=utf8
|
||||||
|
# sqlalchemy.url = mysql://phuoc:phuoc!@192.168.0.31/bddevfac?charset=utf8
|
||||||
|
|
||||||
|
mondumas.admin_email = peinture-dumas@entreprise-dumas.com
|
||||||
|
mondumas.devfac_url = mondumas:static/DEVFAC/DOCS_ATTACHES/
|
||||||
mondumas.devfac_dir = /DEVFAC14/DOCS_ATTACHES
|
mondumas.devfac_dir = /DEVFAC14/DOCS_ATTACHES
|
||||||
|
|
||||||
# Mailer configuration
|
# Mailer configuration
|
||||||
mail.host = smtp.orange.fr
|
mail.host = smtp.office365.com
|
||||||
mail.port = 25
|
mail.port = 587
|
||||||
mail.username = cao.thien-phuoc@orange.fr
|
mail.tls = True
|
||||||
|
mail.username = peinture-dumas@entreprise-dumas.com
|
||||||
|
mail.password = Nar50611
|
||||||
|
|
||||||
|
# SMTP RELAY alinto
|
||||||
|
# mail.host = gatewayxl.alinto.net
|
||||||
|
# mail.port = 465
|
||||||
|
# mail.ssl = True
|
||||||
|
# mail.username = smtpsasdumas@entreprise-dumas.com
|
||||||
|
|
||||||
[server:main]
|
[server:main]
|
||||||
use = egg:waitress#main
|
use = egg:waitress#main
|
||||||
host = 0.0.0.0
|
host = 0.0.0.0
|
||||||
|
|||||||
49
imap-over-tls-example.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import imaplib
|
||||||
|
import msal
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
conf = {
|
||||||
|
"authority": "https://login.microsoftonline.com/47f02128-acf0-47a7-a3bf-27a3619d4a4f",
|
||||||
|
"client_id": "4fdf2634-a260-4576-a442-684998f0187b", #AppID
|
||||||
|
"scope": ['https://outlook.office365.com/.default'],
|
||||||
|
"secret": "dZD8Q~GmG_PFi.t_uRiyBEzwLeMZeemQGHUFta~J", #Key-Value
|
||||||
|
"secret-id": "5cae3249-0fc0-43e2-bc0e-d78f41964970", #Key-ID
|
||||||
|
}
|
||||||
|
|
||||||
|
def generate_auth_string(user, token):
|
||||||
|
return f"user={user}\x01auth=Bearer {token}\x01\x01"
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = msal.ConfidentialClientApplication(conf['client_id'], authority=conf['authority'],
|
||||||
|
client_credential=conf['secret'])
|
||||||
|
|
||||||
|
result = app.acquire_token_silent(conf['scope'], account=None)
|
||||||
|
|
||||||
|
if not result:
|
||||||
|
print("No suitable token in cache. Get new one.")
|
||||||
|
result = app.acquire_token_for_client(scopes=conf['scope'])
|
||||||
|
|
||||||
|
if "access_token" in result:
|
||||||
|
print(result['token_type'])
|
||||||
|
pprint.pprint(result)
|
||||||
|
else:
|
||||||
|
print(result.get("error"))
|
||||||
|
print(result.get("error_description"))
|
||||||
|
print(result.get("correlation_id"))
|
||||||
|
|
||||||
|
|
||||||
|
# imap = imaplib.IMAP4('outlook.office365.com')
|
||||||
|
# imap.starttls()
|
||||||
|
imap = imaplib.IMAP4_SSL('outlook.office365.com', 993)
|
||||||
|
imap.authenticate("XOAUTH2", lambda x: generate_auth_string("polynet-dumas@entreprise-dumas.com",
|
||||||
|
result['access_token']).encode("utf-8"))
|
||||||
|
|
||||||
|
# Print list of mailboxes on server
|
||||||
|
code, mailboxes = imap.list()
|
||||||
|
for mailbox in mailboxes:
|
||||||
|
print(mailbox.decode("utf-8"))
|
||||||
|
# Select mailbox
|
||||||
|
imap.select("INBOX")
|
||||||
|
# Cleanup
|
||||||
|
imap.close()
|
||||||
@@ -1,38 +1,56 @@
|
|||||||
Metadata-Version: 2.1
|
Metadata-Version: 2.1
|
||||||
Name: mondumas
|
Name: mondumas
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Summary: mondumas
|
Summary: mondumas
|
||||||
Home-page: UNKNOWN
|
Home-page:
|
||||||
Author:
|
Author:
|
||||||
Author-email:
|
Author-email:
|
||||||
License: UNKNOWN
|
Keywords: web wsgi bfg pylons pyramid
|
||||||
Description: # README #
|
Classifier: Programming Language :: Python
|
||||||
|
Classifier: Framework :: Pyramid
|
||||||
|
Classifier: Topic :: Internet :: WWW/HTTP
|
||||||
Application web permettant aux personnels de l'entreprise Dumas d'accéder aux dossiers des clients
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
|
||||||
|
Provides-Extra: testing
|
||||||
|
|
||||||
|
# README #
|
||||||
Développé avec :
|
|
||||||
- Pyramid Framework
|
Cette application web permet aux collaborateurs de l'entreprise Dumas :
|
||||||
- MySQL
|
|
||||||
- Chameleon
|
- de consulter et de gérer les dossiers des clients depuis leur tablette
|
||||||
|
- de créer un rapport de fuite et le faire signer par le client
|
||||||
* [Exemple d'une comptabilité simple] (http://perso.numericable.fr/assoc1901/droit/comptabilite1.htm)
|
|
||||||
|
Elle est développée avec les composants open source suivants :
|
||||||
* [Learn Markdown](https://bitbucket.org/tutorials/markdowndemo)
|
|
||||||
|
## Backend
|
||||||
|
|
||||||
|
- [Python](https://www.python.org/downloads/) 3.7
|
||||||
0.0
|
- [Pyramid web framework](https://trypyramid.com/) 1.10
|
||||||
---
|
- [MySQL server](https://mysql.com/) 5.7 sur Windows Server 2008 R2 Standard
|
||||||
|
- [Apache web server](https://apache.org/) 2.4 sur Debian GNU/Linux 9 (stretch)
|
||||||
- Initial version
|
|
||||||
|
## Frontend
|
||||||
Keywords: web wsgi bfg pylons pyramid
|
|
||||||
Platform: UNKNOWN
|
- [Bootstrap framework](https://getbootstrap.com/) for CSS 3.3.7
|
||||||
Classifier: Programming Language :: Python
|
- [Jquery](https://jquery.com/download/) for JavaScript 3.2.1
|
||||||
Classifier: Framework :: Pyramid
|
- Chameleon templates
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP
|
- [FormValidation](https://formvalidation.io/) form validator 0.7.0
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
|
|
||||||
Provides-Extra: testing
|
## Jquery Plugins
|
||||||
|
|
||||||
|
- [DataTables](https://datatables.net/) 1.10.20
|
||||||
|
- [Fullcalendar](https://fullcalendar.io/) 3.9.0
|
||||||
|
- [fullcalendar Scheduler](https://fullcalendar.io/) 1.9.4
|
||||||
|
- [Jquery-ui et jquery-ui-themes](https://jqueryui.com/) 1.12.1
|
||||||
|
- [jSignature](https://willowsystems.github.io/jSignature)
|
||||||
|
- [less.js](http://lesscss.org/) 3.11.1
|
||||||
|
- [moment.js](https://momentjs.com/) with-locales.min.js
|
||||||
|
|
||||||
|
|
||||||
|
[Learn Markdown](https://bitbucket.org/tutorials/markdowndemo)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
0.0
|
||||||
|
---
|
||||||
|
|
||||||
|
- Initial version
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
CHANGES.txt
|
CHANGES.txt
|
||||||
MANIFEST.in
|
MANIFEST.in
|
||||||
README.md
|
README.md
|
||||||
|
bitbucket app password.txt
|
||||||
development.ini
|
development.ini
|
||||||
production.ini
|
production.ini
|
||||||
pytest.ini
|
pytest.ini
|
||||||
@@ -21,12 +22,18 @@ mondumas.egg-info/top_level.txt
|
|||||||
mondumas/models/__init__.py
|
mondumas/models/__init__.py
|
||||||
mondumas/models/agenda.py
|
mondumas/models/agenda.py
|
||||||
mondumas/models/default.py
|
mondumas/models/default.py
|
||||||
|
mondumas/models/devis.py
|
||||||
mondumas/models/dossier.py
|
mondumas/models/dossier.py
|
||||||
mondumas/models/parametres.py
|
mondumas/models/parametres.py
|
||||||
|
mondumas/models/stats.py
|
||||||
|
mondumas/models/utils.py
|
||||||
mondumas/scripts/__init__.py
|
mondumas/scripts/__init__.py
|
||||||
mondumas/views/__init__.py
|
mondumas/views/__init__.py
|
||||||
mondumas/views/agenda.py
|
mondumas/views/agenda.py
|
||||||
mondumas/views/default.py
|
mondumas/views/default.py
|
||||||
|
mondumas/views/devis.py
|
||||||
mondumas/views/dossier.py
|
mondumas/views/dossier.py
|
||||||
mondumas/views/notfound.py
|
mondumas/views/notfound.py
|
||||||
mondumas/views/parametres.py
|
mondumas/views/parametres.py
|
||||||
|
mondumas/views/stats.py
|
||||||
|
mondumas/views/utils.py
|
||||||
@@ -1,4 +1,2 @@
|
|||||||
[paste.app_factory]
|
[paste.app_factory]
|
||||||
main = mondumas:main
|
main = mondumas:main
|
||||||
[console_scripts]
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,21 @@
|
|||||||
pyramid
|
pyramid==1.10
|
||||||
pyramid_chameleon
|
pyramid_chameleon
|
||||||
pyramid_debugtoolbar
|
pyramid_debugtoolbar
|
||||||
pyramid_layout
|
pyramid_layout
|
||||||
pyramid_mailer
|
pyramid_mailer
|
||||||
pyramid_tm
|
pyramid_tm
|
||||||
SQLAlchemy
|
SQLAlchemy==1.2.19
|
||||||
transaction
|
transaction
|
||||||
zope.sqlalchemy
|
zope.sqlalchemy==1.1
|
||||||
waitress
|
waitress
|
||||||
mysqlclient
|
mysqlclient==1.4
|
||||||
|
docutils
|
||||||
pdfkit
|
pdfkit
|
||||||
python-dateutil
|
python-dateutil
|
||||||
docutils
|
|
||||||
user-agents
|
user-agents
|
||||||
|
xlrd
|
||||||
|
pdfminer3
|
||||||
|
Pillow==6.1.0
|
||||||
|
|
||||||
[testing]
|
[testing]
|
||||||
WebTest>=1.3.1
|
WebTest>=1.3.1
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from .views.default import (
|
|||||||
to_decz,
|
to_decz,
|
||||||
)
|
)
|
||||||
|
|
||||||
@layout_config(template='templates/layouts/global_layout.pt')
|
@layout_config(template='templates/global_layout.pt')
|
||||||
class GlobalLayout(object):
|
class GlobalLayout(object):
|
||||||
# page_title = "Pagode Tinh-Do"
|
# page_title = "Pagode Tinh-Do"
|
||||||
|
|
||||||
@@ -33,6 +33,14 @@ class GlobalLayout(object):
|
|||||||
def to_percent(self, x):
|
def to_percent(self, x):
|
||||||
return to_percent(x)
|
return to_percent(x)
|
||||||
|
|
||||||
|
def date2dmy(self, ddate):
|
||||||
|
if ddate:
|
||||||
|
# si date, convertir en dd-mm-yyyy
|
||||||
|
madate = ddate.strftime('%d-%m-%Y')
|
||||||
|
else:
|
||||||
|
madate = ''
|
||||||
|
return madate
|
||||||
|
|
||||||
def isAnonymous(self):
|
def isAnonymous(self):
|
||||||
user = self.request.authenticated_userid
|
user = self.request.authenticated_userid
|
||||||
return user is None
|
return user is None
|
||||||
@@ -50,7 +58,7 @@ class GlobalLayout(object):
|
|||||||
def isWebPage(self):
|
def isWebPage(self):
|
||||||
# test view name
|
# test view name
|
||||||
if self.request.matched_route:
|
if self.request.matched_route:
|
||||||
if self.request.matched_route.name == 'rdf_rapport':
|
if self.request.matched_route.name in ['rdf_rapport', 'devis_preview']:
|
||||||
# oui, page PDF
|
# oui, page PDF
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
@@ -59,3 +67,4 @@ class GlobalLayout(object):
|
|||||||
else:
|
else:
|
||||||
# non, page web
|
# non, page web
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
@@ -1,96 +1,96 @@
|
|||||||
# -*- coding: utf8 -*-
|
# -*- coding: utf8 -*-
|
||||||
from sqlalchemy import text
|
from sqlalchemy import text
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from sqlalchemy.orm import (
|
from sqlalchemy.orm import (
|
||||||
scoped_session,
|
scoped_session,
|
||||||
sessionmaker,
|
sessionmaker,
|
||||||
)
|
)
|
||||||
from zope.sqlalchemy import (
|
from zope.sqlalchemy import (
|
||||||
ZopeTransactionExtension,
|
ZopeTransactionExtension,
|
||||||
mark_changed
|
mark_changed
|
||||||
)
|
)
|
||||||
|
|
||||||
from datetime import *
|
from datetime import *
|
||||||
import dateutil.relativedelta
|
import dateutil.relativedelta
|
||||||
import transaction
|
import transaction
|
||||||
|
|
||||||
def execute_query(request, query, params):
|
def execute_query(request, query, params):
|
||||||
"""Execute query and mark session as changed"""
|
"""Execute query and mark session as changed"""
|
||||||
request.dbsession.execute(query, params)
|
request.dbsession.execute(query, params)
|
||||||
mark_changed(request.dbsession)
|
mark_changed(request.dbsession)
|
||||||
transaction.commit()
|
transaction.commit()
|
||||||
|
|
||||||
def get_users_agenda(request, user):
|
def get_users_agenda(request, user):
|
||||||
if user == '':
|
if user == '':
|
||||||
""" lire la liste des users ayant un agenda"""
|
""" lire la liste des users ayant un agenda"""
|
||||||
query = "SELECT * FROM p_users WHERE cd_uti != 'N' and cd_uti = agenda AND actif != 0 ORDER BY nom;"
|
query = "SELECT * FROM p_users WHERE cd_uti = agenda AND actif != 0 ORDER BY nom;"
|
||||||
results = request.dbsession.execute(query).fetchall()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
else:
|
else:
|
||||||
""" lire le user ayant un agenda"""
|
""" lire le user ayant un agenda"""
|
||||||
query = "SELECT * FROM p_users WHERE cd_uti = :user;"
|
query = "SELECT * FROM p_users WHERE cd_uti = :user;"
|
||||||
results = request.dbsession.execute(query, {'user': user}).first()
|
results = request.dbsession.execute(query, {'user': user}).first()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def get_types_rdv(request):
|
def get_types_rdv(request):
|
||||||
""" lire la liste des types de rendez-vous"""
|
""" lire la liste des types de rendez-vous"""
|
||||||
query = "SELECT * FROM p_types_rdv ORDER BY LIB;"
|
query = "SELECT * FROM p_types_rdv ORDER BY LIB;"
|
||||||
results = request.dbsession.execute(query).fetchall()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def get_rendez_vous(request, itc):
|
def get_rendez_vous(request, itc):
|
||||||
d = datetime.now()
|
d = datetime.now()
|
||||||
d = d - dateutil.relativedelta.relativedelta(months=3)
|
d = d - dateutil.relativedelta.relativedelta(months=3)
|
||||||
# début du mois M-2
|
# début du mois M-2
|
||||||
datedeb = d.strftime('%Y-%m-01')
|
datedeb = d.strftime('%Y-%m-01')
|
||||||
|
|
||||||
# lire les rdv de l'ITC
|
# lire les rdv de l'ITC
|
||||||
query = """SELECT CONCAT(l.societe,"-",l.no_id) as nodossier, l.nolig, l.rdv_debut, l.rdv_fin, e.c_qualite, e.c_nom, e.c_ville, e.c_cp FROM dem_lig l
|
query = """SELECT CONCAT(l.societe,"-",l.no_id) as nodossier, l.nolig, l.rdv_debut, l.rdv_fin, e.c_qualite, e.c_nom, e.c_ville, e.c_cp FROM dem_lig l
|
||||||
INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id
|
INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id
|
||||||
WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi
|
WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi
|
||||||
"""
|
"""
|
||||||
results = request.dbsession.execute(query, {'datedeb': datedeb, 'itc': itc}).fetchall()
|
results = request.dbsession.execute(query, {'datedeb': datedeb, 'itc': itc}).fetchall()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def delete_rdv(request, nodossier, nolig):
|
def delete_rdv(request, nodossier, nolig):
|
||||||
societe = nodossier[0:2]
|
societe = nodossier[0:2]
|
||||||
no_id = nodossier[3:]
|
no_id = nodossier[3:]
|
||||||
|
|
||||||
query = "DELETE FROM dem_lig where societe = '%s' and no_id=%s and nolig=%s;" % (societe, no_id, nolig)
|
query = "DELETE FROM dem_lig where societe = '%s' and no_id=%s and nolig=%s;" % (societe, no_id, nolig)
|
||||||
execute_query(request, query, {})
|
execute_query(request, query, {})
|
||||||
|
|
||||||
def update_rdv(request, nodossier, nolig, new_values):
|
def update_rdv(request, nodossier, nolig, new_values):
|
||||||
societe = nodossier[0:2]
|
societe = nodossier[0:2]
|
||||||
no_id = nodossier[3:]
|
no_id = nodossier[3:]
|
||||||
|
|
||||||
# formater date et heure de visite
|
# formater date et heure de visite
|
||||||
if new_values['rdv_debut']:
|
if new_values['rdv_debut']:
|
||||||
ddate = datetime.strptime(new_values['rdv_debut'], '%d-%m-%Y %H:%M')
|
ddate = datetime.strptime(new_values['rdv_debut'], '%d-%m-%Y %H:%M')
|
||||||
new_values['DATEVI'] = ddate.strftime("%Y-%m-%d")
|
new_values['DATEVI'] = ddate.strftime("%Y-%m-%d")
|
||||||
new_values['HEUREVI'] = ddate.strftime("%H:%M")
|
new_values['HEUREVI'] = ddate.strftime("%H:%M")
|
||||||
|
|
||||||
del new_values['rdv_debut']
|
del new_values['rdv_debut']
|
||||||
s = ''
|
s = ''
|
||||||
for param in new_values.keys():
|
for param in new_values.keys():
|
||||||
if s:
|
if s:
|
||||||
s += ",%s=:%s" % (param, param)
|
s += ",%s=:%s" % (param, param)
|
||||||
else:
|
else:
|
||||||
s = "%s=:%s" % (param, param)
|
s = "%s=:%s" % (param, param)
|
||||||
|
|
||||||
if nolig == '0':
|
if nolig == '0':
|
||||||
create_rdv(request, nodossier, new_values['DATEVI'], new_values['HEUREVI'], new_values['COMMENT'], new_values['LISTE'], new_values['USERMAJ'])
|
create_rdv(request, nodossier, new_values['DATEVI'], new_values['HEUREVI'], new_values['COMMENT'], new_values['LISTE'], new_values['USERMAJ'])
|
||||||
else:
|
else:
|
||||||
new_values['societe'] = societe
|
new_values['societe'] = societe
|
||||||
new_values['no_id'] = no_id
|
new_values['no_id'] = no_id
|
||||||
new_values['nolig'] = nolig
|
new_values['nolig'] = nolig
|
||||||
query = "UPDATE dem_lig SET %s WHERE societe = :societe AND NO_ID = :no_id AND NOLIG = :nolig ;" % s
|
query = "UPDATE dem_lig SET %s WHERE societe = :societe AND NO_ID = :no_id AND NOLIG = :nolig ;" % s
|
||||||
execute_query(request, query, new_values)
|
execute_query(request, query, new_values)
|
||||||
|
|
||||||
def create_rdv(request, nodossier, dateRDV, heureRDV, type_rdv, agenda, logged_in):
|
def create_rdv(request, nodossier, dateRDV, heureRDV, type_rdv, agenda, logged_in):
|
||||||
societe = nodossier[0:2]
|
societe = nodossier[0:2]
|
||||||
no_id = nodossier[3:]
|
no_id = nodossier[3:]
|
||||||
|
|
||||||
query = """
|
query = """
|
||||||
INSERT INTO dem_lig (societe, NO_ID, DATE, COMMENT, DATEVI, HEUREVI, LISTE, USERMAJ) VALUES
|
INSERT INTO dem_lig (societe, NO_ID, DATE, COMMENT, DATEVI, HEUREVI, LISTE, USERMAJ) VALUES
|
||||||
(:societe, :no_id, CURRENT_DATE, :type_rdv, :dateRDV, :heureRDV, :agenda, :logged_in) ;"""
|
(:societe, :no_id, CURRENT_DATE, :type_rdv, :dateRDV, :heureRDV, :agenda, :logged_in) ;"""
|
||||||
execute_query(request, query, {'societe': societe, 'no_id' :no_id, 'dateRDV': dateRDV, 'heureRDV': heureRDV, 'type_rdv': type_rdv, 'agenda': agenda, 'logged_in':logged_in})
|
execute_query(request, query, {'societe': societe, 'no_id' :no_id, 'dateRDV': dateRDV, 'heureRDV': heureRDV, 'type_rdv': type_rdv, 'agenda': agenda, 'logged_in':logged_in})
|
||||||
|
|
||||||
|
|||||||
@@ -1,115 +1,159 @@
|
|||||||
# -*- coding: utf8 -*-
|
# -*- coding: utf8 -*-
|
||||||
from sqlalchemy import text
|
from sqlalchemy import text
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from sqlalchemy.orm import (
|
from sqlalchemy.orm import (
|
||||||
scoped_session,
|
scoped_session,
|
||||||
sessionmaker,
|
sessionmaker,
|
||||||
)
|
)
|
||||||
from zope.sqlalchemy import (
|
from zope.sqlalchemy import (
|
||||||
ZopeTransactionExtension,
|
ZopeTransactionExtension,
|
||||||
mark_changed
|
mark_changed
|
||||||
)
|
)
|
||||||
|
|
||||||
from datetime import *
|
from datetime import *
|
||||||
import transaction
|
import transaction
|
||||||
|
|
||||||
def execute_query(request, query, params):
|
def execute_query(request, query, params):
|
||||||
"""Execute query and mark session as changed"""
|
"""Execute query and mark session as changed"""
|
||||||
request.dbsession.execute(query, params)
|
request.dbsession.execute(query, params)
|
||||||
mark_changed(request.dbsession)
|
mark_changed(request.dbsession)
|
||||||
transaction.commit()
|
transaction.commit()
|
||||||
|
|
||||||
def get_userAccess(request, logged_in):
|
def get_userAccess(request, logged_in):
|
||||||
member = get_member_by_id(request, logged_in)
|
member = get_member_by_id(request, logged_in)
|
||||||
if member:
|
if member:
|
||||||
return member.access
|
return member.access
|
||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def get_codespostaux(request, code):
|
def get_member_by_mdp_oublie(request, lien):
|
||||||
query = "SELECT * FROM p_codespostaux WHERE code_postal like :code;"
|
query = "SELECT * FROM p_users WHERE mdp_oublie=:lien;"
|
||||||
results = request.dbsession.execute(query, {'code': code + "%"})
|
results = request.dbsession.execute(query, {'lien':lien}).first()
|
||||||
return results.fetchall()
|
return results
|
||||||
|
|
||||||
def get_member_by_mdp_oublie(request, lien):
|
def get_member_by_id(request, mbr_id):
|
||||||
query = "SELECT * FROM p_users WHERE mdp_oublie=:lien;"
|
if mbr_id == '0':
|
||||||
results = request.dbsession.execute(query, {'lien':lien}).first()
|
query = """SELECT p_users.*, p_acces.libelle FROM p_users
|
||||||
return results
|
INNER JOIN p_acces ON p_acces.code = p_users.access
|
||||||
|
ORDER BY cd_uti"""
|
||||||
def get_member_by_id(request, mbr_id):
|
results = request.dbsession.execute(query).fetchall()
|
||||||
if mbr_id == '0':
|
else:
|
||||||
query = "SELECT * FROM p_users ORDER BY cd_uti"
|
# lire le membres par son identifianr
|
||||||
results = request.dbsession.execute(query).fetchall()
|
query = """SELECT p_users.*, p_acces.libelle FROM p_users
|
||||||
else:
|
INNER JOIN p_acces ON p_acces.code = p_users.access
|
||||||
# lire le membres par son identifianr
|
WHERE CD_UTI=:mbr_id;"""
|
||||||
query = """SELECT * FROM p_users WHERE CD_UTI=:mbr_id;"""
|
results = request.dbsession.execute(query, {'mbr_id': mbr_id}).first()
|
||||||
results = request.dbsession.execute(query, {'mbr_id': mbr_id}).first()
|
return results
|
||||||
return results
|
|
||||||
|
def get_member_info(request, logged_in):
|
||||||
def get_member_info(request, logged_in):
|
# lire le membres par son identifianr
|
||||||
# lire le membres par son identifianr
|
query = """SELECT u.nom, u.email, u.access, u.societe, p_acces.libelle FROM p_users u
|
||||||
query = """SELECT nom, email, access, societe FROM p_users WHERE CD_UTI=:logged_in;"""
|
INNER JOIN p_acces ON p_acces.code = u.access
|
||||||
results = request.dbsession.execute(query, {'logged_in': logged_in}).first()
|
WHERE CD_UTI=:logged_in;"""
|
||||||
if results.access == 9:
|
results = request.dbsession.execute(query, {'logged_in': logged_in}).first()
|
||||||
fonction = 'Administrateur'
|
|
||||||
elif results.access == 8:
|
return {
|
||||||
fonction = 'Comptabilité'
|
'nom': results.nom,
|
||||||
elif results.access == 5:
|
'email': results.email,
|
||||||
fonction = 'Gestion'
|
'fonction': results.libelle,
|
||||||
else:
|
'societe': results.societe,
|
||||||
fonction = 'Commercial'
|
}
|
||||||
|
|
||||||
return {
|
def update_membre_mdp_oublie(request, login):
|
||||||
'nom': results.nom,
|
import uuid, base64
|
||||||
'email': results.email,
|
# get a UUID - URL safe, Base64
|
||||||
'fonction': fonction,
|
|
||||||
'societe': results.societe,
|
uid = uuid.uuid1()
|
||||||
}
|
urlslug = base64.urlsafe_b64encode(uid.bytes).decode("utf-8").rstrip('=\n').replace('/', '_')
|
||||||
|
query = "UPDATE p_users SET mdp_oublie=:urlslug, mdp_oublie_date=now() WHERE CD_UTI=:login;"
|
||||||
def update_membre_mdp_oublie(request, login):
|
execute_query(request, query, {'urlslug':urlslug, 'login':login})
|
||||||
import uuid, base64
|
|
||||||
# get a UUID - URL safe, Base64
|
return urlslug
|
||||||
|
|
||||||
uid = uuid.uuid1()
|
def update_membre_mdp(request, login, password):
|
||||||
urlslug = base64.urlsafe_b64encode(uid.bytes).decode("utf-8").rstrip('=\n').replace('/', '_')
|
"""Update password for member login"""
|
||||||
query = "UPDATE p_users SET mdp_oublie=:urlslug, mdp_oublie_date=now() WHERE CD_UTI=:login;"
|
query = "UPDATE p_users SET mdp = SHA1(:password), mdp_oublie=NULL, mdp_oublie_date=NULL WHERE cd_uti=:login;"
|
||||||
execute_query(request, query, {'urlslug':urlslug, 'login':login})
|
execute_query(request, query, {'login': login, 'password': password})
|
||||||
|
|
||||||
return urlslug
|
def update_last_connection(request, login, ua_string):
|
||||||
|
"""Update last connection for login """
|
||||||
def update_membre_mdp(request, login, password):
|
query = "UPDATE p_users SET dern_cnx_le=NOW(), ua_string=:ua_string WHERE cd_uti=:login;"
|
||||||
"""Update password for member login"""
|
execute_query(request, query, {'login': login, 'ua_string': ua_string})
|
||||||
query = "UPDATE p_users SET mdp = SHA1(:password), mdp_oublie=NULL, mdp_oublie_date=NULL WHERE cd_uti=:login;"
|
|
||||||
execute_query(request, query, {'login': login, 'password': password})
|
def update_membre(request, cd_uti, new_values):
|
||||||
|
# formater les champs
|
||||||
def update_last_connection(request, login, ua_string):
|
s = ''
|
||||||
"""Update last connection for login """
|
for param in new_values.keys():
|
||||||
query = "UPDATE p_users SET dern_cnx_le=NOW(), ua_string=:ua_string WHERE cd_uti=:login;"
|
if param == 'nom':
|
||||||
execute_query(request, query, {'login': login, 'ua_string': ua_string})
|
new_values['nom'] = new_values['nom'].upper()
|
||||||
|
|
||||||
def update_membre(request, cd_uti, new_values):
|
if s:
|
||||||
# formater les champs
|
s += ",%s=:%s" % (param, param)
|
||||||
s = ''
|
else:
|
||||||
for param in new_values.keys():
|
s = "%s=:%s" % (param, param)
|
||||||
if param == 'nom':
|
|
||||||
new_values['nom'] = new_values['nom'].upper()
|
if cd_uti == '0':
|
||||||
if param == 'access':
|
query = "INSERT INTO p_users SET %s" % s
|
||||||
' ne prend que le 1er caractère'
|
else:
|
||||||
new_values['access'] = new_values['access'][0]
|
new_values['cd_uti'] = cd_uti
|
||||||
|
query = "UPDATE p_users SET %s WHERE cd_uti = :cd_uti;" % s
|
||||||
if s:
|
execute_query(request, query, new_values)
|
||||||
s += ",%s=:%s" % (param, param)
|
|
||||||
else:
|
def delete_membre(request, cd_uti):
|
||||||
s = "%s=:%s" % (param, param)
|
query = "DELETE FROM p_users WHERE cd_uti = :cd_uti ;"
|
||||||
|
execute_query(request, query, {'cd_uti': cd_uti})
|
||||||
if cd_uti == '0':
|
|
||||||
query = "INSERT INTO p_users SET %s" % s
|
def get_tarif_ajax(request, type, groupe, libelle):
|
||||||
else:
|
if type == 'LIB':
|
||||||
new_values['cd_uti'] = cd_uti
|
if groupe == 'TEXTE':
|
||||||
query = "UPDATE p_users SET %s WHERE cd_uti = :cd_uti;" % s
|
# lire tous les textes dont le libelle commençe par
|
||||||
execute_query(request, query, new_values)
|
query = "SELECT * FROM tarifs WHERE groupe='TEXTE' and libelle like :libelle;"
|
||||||
|
results = request.dbsession.execute(query, {'libelle': libelle + "%"}).fetchall()
|
||||||
def delete_membre(request, cd_uti):
|
else:
|
||||||
query = "DELETE FROM p_users WHERE cd_uti = :cd_uti ;"
|
# lire tous les tarifs du grupe dont le ref commençe par libelle
|
||||||
execute_query(request, query, {'cd_uti': cd_uti})
|
query = "SELECT * FROM tarifs WHERE groupe=:groupe and ref like :libelle;"
|
||||||
|
results = request.dbsession.execute(query, {'groupe': groupe, 'libelle': libelle + "%"}).fetchall()
|
||||||
|
else:
|
||||||
|
# lire tous les tarif du grupe dont le ref est égale à
|
||||||
|
query = "SELECT * FROM tarifs WHERE groupe=:groupe and ref = :libelle;"
|
||||||
|
results = request.dbsession.execute(query, {'groupe': groupe, 'libelle': libelle}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_codespostaux(request, codep):
|
||||||
|
query = "SELECT * FROM p_codespostaux WHERE code_postal LIKE :code;"
|
||||||
|
results = request.dbsession.execute(query, {'code': codep+"%"}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_dd_restant(request):
|
||||||
|
query = """SELECT (SELECT count(*) FROM dem_devis WHERE societe='PE' AND STATUS=0) AS nb_PE,
|
||||||
|
(SELECT count(*) FROM dem_devis WHERE societe='ME' AND STATUS=0) AS nb_ME,
|
||||||
|
(SELECT count(*) FROM dem_devis WHERE societe='PL' AND STATUS=0) AS nb_PL;"""
|
||||||
|
results = request.dbsession.execute(query).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_de_restant(request):
|
||||||
|
# les suivis des attachés commerciaux dnas les 4 derniers jours
|
||||||
|
query = """SELECT
|
||||||
|
(SELECT count(*) FROM dem_lig WHERE societe='PE' AND DATEDIFF(CURDATE(), date) <= 7 AND usermaj in ('CG','MP','RV','VD')) AS nb_PE,
|
||||||
|
(SELECT count(*) FROM dem_lig WHERE societe='ME' AND DATEDIFF(CURDATE(), date) <= 7 AND usermaj in ('CG','MP','RV','VD')) AS nb_ME,
|
||||||
|
(SELECT count(*) FROM dem_lig WHERE societe='PL' AND DATEDIFF(CURDATE(), date) <= 7 AND usermaj in ('CG','MP','RV','VD')) AS nb_PL;"""
|
||||||
|
results = request.dbsession.execute(query).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_fa_restant(request):
|
||||||
|
query = """SELECT (SELECT count(*) FROM facture WHERE societe='PE' AND STATUS < 8) AS nb_PE,
|
||||||
|
(SELECT count(*) FROM facture WHERE societe='ME' AND STATUS < 8) AS nb_ME,
|
||||||
|
(SELECT count(*) FROM facture WHERE societe='PL' AND STATUS < 8) AS nb_PL;"""
|
||||||
|
results = request.dbsession.execute(query).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_rdv_by_date(request, date, agenda):
|
||||||
|
query = """SELECT COUNT(*) AS nb_rdv FROM bddevfac.dem_lig WHERE DATEVI=:date AND LISTE=:agenda;"""
|
||||||
|
results = request.dbsession.execute(query, {'date': date, 'agenda': agenda}).first()
|
||||||
|
return results.nb_rdv
|
||||||
|
|
||||||
|
def get_rdf_null(request):
|
||||||
|
# lire les RDF non validés depuis moins d'un an
|
||||||
|
query = """SELECT COUNT(*) AS nb_rdf FROM bddevfac.dem_rdf WHERE date_relu IS NULL AND year(date_inter) > 2021;"""
|
||||||
|
results = request.dbsession.execute(query).first()
|
||||||
|
return results.nb_rdf
|
||||||
|
|||||||
252
mondumas/models/devis.py
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
# -*- coding: utf8 -*-
|
||||||
|
from sqlalchemy import text
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
from sqlalchemy.orm import (
|
||||||
|
scoped_session,
|
||||||
|
sessionmaker,
|
||||||
|
)
|
||||||
|
from zope.sqlalchemy import (
|
||||||
|
ZopeTransactionExtension,
|
||||||
|
mark_changed
|
||||||
|
)
|
||||||
|
|
||||||
|
from datetime import *
|
||||||
|
import transaction
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ..views.default import (
|
||||||
|
to_int,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def execute_query(request, query, params):
|
||||||
|
"""Execute query and mark session as changed"""
|
||||||
|
request.dbsession.execute(query, params)
|
||||||
|
mark_changed(request.dbsession)
|
||||||
|
transaction.commit()
|
||||||
|
|
||||||
|
|
||||||
|
def get_dossiers_byName(request, societe, name):
|
||||||
|
# lires tous les dossiers d'un chantier
|
||||||
|
|
||||||
|
query = """select * from (
|
||||||
|
SELECT date,'DD' AS TYPE, LPAD(no_id,6,'0') AS numero, nomcli, CONCAT(c_nom,'; ',c_adr,'; ',c_ville) AS chantier, 0 AS montant, status, nosin, societe , no_id as nochantier
|
||||||
|
FROM dem_devis WHERE societe=:societe AND c_nom LIKE :name
|
||||||
|
UNION
|
||||||
|
SELECT date,'DE' AS TYPE, LPAD(no_id,6,'0') AS numero, nomcli, CONCAT(c_nom,'; ',c_adr,'; ',c_ville) AS chantier, COALESCE(totalht,0) AS montant, status, nosin, societe , nochantier
|
||||||
|
FROM devis WHERE societe=:societe AND c_nom LIKE :name
|
||||||
|
UNION
|
||||||
|
SELECT date,'FA' AS TYPE, LPAD(no_id,6,'0') AS numero, nomcli, CONCAT(c_nom,'; ',c_adr,'; ',c_ville) AS chantier, COALESCE(totalht,0) AS montant, status, nosin, societe , nochantier
|
||||||
|
FROM facture WHERE societe=:societe AND c_nom LIKE :name
|
||||||
|
) a
|
||||||
|
order by date, TYPE
|
||||||
|
"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'name': name+'%'}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_devfac_by_no(request,nodossier):
|
||||||
|
# lire devis, facture ou proforma
|
||||||
|
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
type_doc = nodossier[3:5]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
if type_doc == 'DE':
|
||||||
|
query = """
|
||||||
|
SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM devis d
|
||||||
|
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
||||||
|
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
||||||
|
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
||||||
|
WHERE d.societe = :societe and d.no_id=:no_id;"""
|
||||||
|
elif type_doc == 'FA':
|
||||||
|
query = """
|
||||||
|
SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM facture d
|
||||||
|
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
||||||
|
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
||||||
|
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
||||||
|
WHERE d.societe = :societe and d.no_id=:no_id;"""
|
||||||
|
else:
|
||||||
|
query = """
|
||||||
|
SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM proforma d
|
||||||
|
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
||||||
|
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
||||||
|
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
||||||
|
WHERE d.societe = :societe and d.no_id=:no_id;"""
|
||||||
|
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_devis_lig_by_no(request,nodossier):
|
||||||
|
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
type_doc = nodossier[3:5]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
if type_doc == 'DE':
|
||||||
|
query = "SELECT * FROM devis_lig WHERE societe = :societe and no_id=:no_id;"
|
||||||
|
elif type_doc == 'FA':
|
||||||
|
query = "SELECT * FROM facture_lig WHERE societe = :societe and no_id=:no_id;"
|
||||||
|
else:
|
||||||
|
query = "SELECT * FROM proforma_lig WHERE societe = :societe and no_id=:no_id;"
|
||||||
|
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_devis_lignes_by_no(request, nodossier, nolig):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
type_doc = nodossier[3:5]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
if nolig == '0':
|
||||||
|
query = "SELECT * FROM devis_lignes WHERE societe = :societe and no_id=:no_id;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall()
|
||||||
|
else:
|
||||||
|
query = "SELECT * FROM devis_lignes WHERE societe = :societe and no_id=:no_id and nolig=:nolig;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id, 'nolig': nolig}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def insert_devis_from_dossier(request, nodossier, logged_in):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[3:]
|
||||||
|
|
||||||
|
query = "CALL spINS_DEVIS_FROM_DOSSIER(:societe, 'DDW', :no_id, :logged_in);"
|
||||||
|
results = request.dbsession.execute(query,{'societe': societe, 'no_id': no_id, 'logged_in': logged_in}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_devis_by_no(request,nodossier):
|
||||||
|
# lire devis, facture ou proforma
|
||||||
|
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
query = """
|
||||||
|
SELECT d.*, c.*, s.libelle, a.NOM as nom_cabinet, e.NOM as nom_expert FROM devis d
|
||||||
|
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
||||||
|
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
||||||
|
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
||||||
|
INNER JOIN p_statuts s ON d.STATUS = s.code
|
||||||
|
WHERE d.societe = :societe and d.no_id=:no_id;"""
|
||||||
|
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_facture_by_no(request,nodossier):
|
||||||
|
# lire facture
|
||||||
|
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
query = """
|
||||||
|
SELECT d.*, c.*, s.libelle, a.NOM as nom_cabinet, e.NOM as nom_expert FROM facture d
|
||||||
|
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
||||||
|
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
||||||
|
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
||||||
|
INNER JOIN p_statuts s ON d.STATUS = s.code
|
||||||
|
WHERE d.societe = :societe and d.no_id=:no_id;"""
|
||||||
|
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_proforma_by_no(request,nodossier):
|
||||||
|
# lire facture
|
||||||
|
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
query = """
|
||||||
|
SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM proforma d
|
||||||
|
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
||||||
|
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
||||||
|
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
||||||
|
WHERE d.societe = :societe and d.no_id=:no_id;"""
|
||||||
|
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def update_devis_ligne(request, nodossier, nolig, new_values):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
# formater les champs
|
||||||
|
s = ''
|
||||||
|
for param in new_values.keys():
|
||||||
|
if s:
|
||||||
|
s += ",%s=:%s" % (param, param)
|
||||||
|
else:
|
||||||
|
s = "%s=:%s" % (param, param)
|
||||||
|
|
||||||
|
if nolig == '0':
|
||||||
|
query = "INSERT INTO devis_lignes SET %s" % s
|
||||||
|
else:
|
||||||
|
new_values['societe'] = societe
|
||||||
|
new_values['no_id'] = no_id
|
||||||
|
new_values['nolig'] = nolig
|
||||||
|
query = "UPDATE devis_lignes SET %s WHERE societe = :societe and no_id=:no_id and nolig = :nolig;" % s
|
||||||
|
# import pdb;pdb.set_trace()
|
||||||
|
execute_query(request, query, new_values)
|
||||||
|
|
||||||
|
def sum_devis_totaux(request, nodossier):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
query = """UPDATE devis SET totalht = (SELECT SUM(mtht) FROM devis_lignes WHERE societe=:societe AND no_id=:no_id),
|
||||||
|
totaltva = ROUND(totalht * tauxtva / 100,2),
|
||||||
|
totalttc = totalht + totaltva
|
||||||
|
WHERE societe=:societe AND no_id=:no_id;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id})
|
||||||
|
|
||||||
|
def delete_devis_ligne(request, nodossier, nolig):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
query = "DELETE FROM devis_lignes WHERE societe = :societe and no_id=:no_id and nolig=%s;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id})
|
||||||
|
|
||||||
|
def move_devis_ligne(request, nodossier, nolig, move):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
# get max no ligne du devis
|
||||||
|
query = "SELECT count(*) AS max_no FROM devis_lignes WHERE societe = :societe and no_id=:no_id;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
|
||||||
|
max_no = results.max_no + 1
|
||||||
|
|
||||||
|
step = 0
|
||||||
|
if move == 'up':
|
||||||
|
# déplacement vers le haut
|
||||||
|
if nolig > 1:
|
||||||
|
step = -1
|
||||||
|
else:
|
||||||
|
# déplacement vers le haut
|
||||||
|
if nolig < max_no:
|
||||||
|
step = +1
|
||||||
|
|
||||||
|
if step != 0:
|
||||||
|
# déplacer le suivant ou précédent vers la fin
|
||||||
|
query = """UPDATE devis_lignes SET nolig = :max_no WHERE societe = :societe and no_id=:no_id and nolig = :nolig + :step;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nolig': nolig, 'max_no': max_no, 'step': step})
|
||||||
|
# permuter avec le suivant ou précédent
|
||||||
|
query = """UPDATE devis_lignes SET nolig = nolig + :step WHERE societe = :societe and no_id=:no_id and nolig = :nolig;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nolig': nolig, 'step': step})
|
||||||
|
# remettre le précédent ou suivant à la place de la ligne déplacée
|
||||||
|
query = """UPDATE devis_lignes SET nolig = :nolig WHERE societe = :societe and no_id=:no_id and nolig = :max_no;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nolig': nolig, 'max_no': max_no})
|
||||||
|
|
||||||
|
def update_devis_cloture(request, nodevis, status, logged_in):
|
||||||
|
societe = nodevis[0:2]
|
||||||
|
nochantier = int(nodevis[5:])
|
||||||
|
# met le montant regle à 1 centime pour terminé le dossier
|
||||||
|
query = "UPDATE devis SET STATUS = :status, USERMAJ = :logged_in WHERE societe=:societe AND no_id=:nochantier;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'status': status, 'logged_in': logged_in})
|
||||||
|
|
||||||
|
def update_devis_nochantier(request, societe, no_devis, nochantier):
|
||||||
|
# extraire type de doc et no de doc à mettre à jour
|
||||||
|
type = no_devis[0:2]
|
||||||
|
no_id = no_devis[3:]
|
||||||
|
if type == 'DE':
|
||||||
|
# maj le numero du dossier du devis
|
||||||
|
query = "UPDATE devis SET nochantier = :nochantier WHERE societe=:societe AND no_id=:no_id;"
|
||||||
|
else:
|
||||||
|
# maj le numero du dossier de la facture
|
||||||
|
query = "UPDATE facture SET nochantier = :nochantier WHERE societe=:societe AND no_id=:no_id;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'no_id': no_id})
|
||||||
@@ -1,321 +1,410 @@
|
|||||||
# -*- coding: utf8 -*-
|
# -*- coding: utf8 -*-
|
||||||
from sqlalchemy import text
|
from sqlalchemy import text
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from sqlalchemy.orm import (
|
from sqlalchemy.orm import (
|
||||||
scoped_session,
|
scoped_session,
|
||||||
sessionmaker,
|
sessionmaker,
|
||||||
)
|
)
|
||||||
from zope.sqlalchemy import (
|
from zope.sqlalchemy import (
|
||||||
ZopeTransactionExtension,
|
ZopeTransactionExtension,
|
||||||
mark_changed
|
mark_changed
|
||||||
)
|
)
|
||||||
|
|
||||||
from datetime import *
|
from datetime import *
|
||||||
import transaction
|
import transaction
|
||||||
|
import os
|
||||||
def execute_query(request, query, params):
|
|
||||||
"""Execute query and mark session as changed"""
|
def execute_query(request, query, params):
|
||||||
request.dbsession.execute(query, params)
|
"""Execute query and mark session as changed"""
|
||||||
mark_changed(request.dbsession)
|
request.dbsession.execute(query, params)
|
||||||
transaction.commit()
|
mark_changed(request.dbsession)
|
||||||
|
transaction.commit()
|
||||||
def get_chantiers_byName(request, societe, name):
|
|
||||||
|
def get_chantiers_byName(request, societe, name):
|
||||||
query = "CALL spGET_CHANTIERS_byName('%s','%s');" % (societe, name)
|
|
||||||
results = request.dbsession.execute(query).fetchall()
|
query = "CALL spGET_CHANTIERS_byName('%s','%s');" % (societe, name)
|
||||||
return results
|
results = request.dbsession.execute(query).fetchall()
|
||||||
|
return results
|
||||||
def get_dossier_by_no(request,nodossier):
|
|
||||||
societe = nodossier[0:2]
|
def get_dossier_by_no(request,nodossier):
|
||||||
no_id = nodossier[3:]
|
societe = nodossier[0:2]
|
||||||
query = """
|
no_id = nodossier[3:]
|
||||||
SELECT d.*, a.NOM as nom_cabinet, e.NOM as nom_expert,
|
query = """
|
||||||
c.QUALITE AS cli_QUALITE, c.NOM AS cli_NOM, c.ADRESSE AS cli_ADRESSE, c.ADRESSE2 AS cli_ADRESSE2, c.CP AS cli_CP, c.VILLE AS cli_VILLE,
|
SELECT d.*, s.libelle, a.NOM as nom_cabinet, e.NOM as nom_expert,
|
||||||
c.TEL1 AS cli_TEL1, c.TEL2 AS cli_TEL2, c.TELP AS cli_TELP, c.FAX AS cli_FAX, c.NOMRESP AS cli_NOMRESP
|
c.QUALITE AS cli_QUALITE, c.NOM AS cli_NOM, c.ADRESSE AS cli_ADRESSE, c.ADRESSE2 AS cli_ADRESSE2, c.CP AS cli_CP, c.VILLE AS cli_VILLE,
|
||||||
FROM dem_devis d
|
c.TEL1 AS cli_TEL1, c.TEL2 AS cli_TEL2, c.TELP AS cli_TELP, c.FAX AS cli_FAX, c.NOMRESP AS cli_NOMRESP
|
||||||
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
FROM dem_devis d
|
||||||
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
||||||
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
||||||
where d.societe = '%s' and d.no_id=%s;""" % (societe, no_id);
|
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
||||||
results = request.dbsession.execute(query).first()
|
INNER JOIN p_statuts s ON d.STATUS = s.code
|
||||||
return results
|
where d.societe = '%s' and d.no_id=%s;""" % (societe, no_id);
|
||||||
|
results = request.dbsession.execute(query).first()
|
||||||
def get_dossier_by_sinistre(request,societe, nosin):
|
return results
|
||||||
query = "SELECT * FROM dem_devis WHERE societe = '%s' and LEFT(REPLACE(nosin,' ', ''),11) = LEFT(REPLACE('%s',' ', ''),11);" % (societe, nosin);
|
|
||||||
results = request.dbsession.execute(query).first()
|
def get_dossier_by_sinistre(request,societe, nosin):
|
||||||
return results
|
query = "SELECT * FROM dem_devis WHERE societe = '%s' and LEFT(REPLACE(nosin,' ', ''),11) = LEFT(REPLACE('%s',' ', ''),11);" % (societe, nosin);
|
||||||
|
results = request.dbsession.execute(query).first()
|
||||||
|
return results
|
||||||
def get_devis_by_no(request,nodossier):
|
|
||||||
societe = nodossier[0:2]
|
def get_dossiers_traites(request, societe):
|
||||||
type_doc = nodossier[3:5]
|
query = """SELECT d.date, LPAD(d.no_id,6,'0') AS numero, d.nomcli, CONCAT(d.c_nom,'; ',d.c_adr,'; ',d.c_ville) AS chantier, d.mttrav AS montant, status, s.libelle, d.nosin, d.nopol, d.humidite, d.usermaj
|
||||||
no_id = nodossier[5:]
|
FROM dem_devis d JOIN p_statuts s ON d.STATUS = s.CODE WHERE d.societe = :societe AND d.status < 2 ORDER BY d.status, d.nomcli""";
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
||||||
if type_doc == 'DE':
|
return results
|
||||||
query = """
|
|
||||||
SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM devis d
|
def get_dossiers_importes(request):
|
||||||
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
query = "SELECT * FROM dem_devis WHERE usermaj='EMAIL' and status=0 ORDER BY DATEMAJ";
|
||||||
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
results = request.dbsession.execute(query).fetchall()
|
||||||
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
return results
|
||||||
WHERE d.societe = :societe and d.no_id=:no_id;"""
|
|
||||||
elif type_doc == 'FA':
|
def get_clients_byName(request, societe, nom):
|
||||||
query = """
|
query = "SELECT * FROM clients WHERE societe = '%s' and nom LIKE '%s';" % (societe, nom + '%');
|
||||||
SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM facture d
|
results = request.dbsession.execute(query).fetchall()
|
||||||
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
return results
|
||||||
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
|
||||||
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
def get_derniers_suivis(request):
|
||||||
WHERE d.societe = :societe and d.no_id=:no_id;"""
|
query = """SELECT l.*, CONCAT(l.societe,'-',l.no_id) AS nodossier, d.C_NOM FROM dem_lig l
|
||||||
else:
|
INNER JOIN dem_devis d ON l.societe=d.societe AND l.no_id=d.no_id
|
||||||
query = """
|
WHERE DATEDIFF(CURDATE(), l.date) <= 7 AND l.usermaj in ('CG','MP','RV','VD') ORDER BY l.date, l.societe DESC;"""
|
||||||
SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM proforma d
|
results = request.dbsession.execute(query, ).fetchall()
|
||||||
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
|
return results
|
||||||
INNER JOIN p_cabinet a ON d.cabinet = a.code
|
|
||||||
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
|
|
||||||
WHERE d.societe = :societe and d.no_id=:no_id;"""
|
def get_dossier_rdv_by_no(request,nodossier, nolig):
|
||||||
|
societe = nodossier[0:2]
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
|
no_id = nodossier[3:]
|
||||||
return results
|
|
||||||
|
if nolig == '0':
|
||||||
def get_dossier_rdv_by_no(request,nodossier, nolig):
|
query = "SELECT * FROM dem_lig WHERE societe = :societe AND no_id = :no_id;"
|
||||||
societe = nodossier[0:2]
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall()
|
||||||
no_id = nodossier[3:]
|
else:
|
||||||
|
query = """
|
||||||
if nolig == '0':
|
SELECT l.*, d.C_QUALITE, d.C_NOM FROM dem_lig l INNER JOIN dem_devis d ON l.societe = d.societe and l.no_id = d.no_id
|
||||||
query = "SELECT * FROM dem_lig WHERE societe = :societe AND no_id = :no_id;"
|
where l.societe = '%s' and l.no_id=%s and l.nolig=%s;""" % (societe, no_id, nolig)
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall()
|
results = request.dbsession.execute(query).first()
|
||||||
else:
|
|
||||||
query = """
|
return results
|
||||||
SELECT l.*, d.C_QUALITE, d.C_NOM FROM dem_lig l INNER JOIN dem_devis d ON l.societe = d.societe and l.no_id = d.no_id
|
|
||||||
where l.societe = '%s' and l.no_id=%s and l.nolig=%s;""" % (societe, no_id, nolig)
|
def get_documents_byChantier(request,nodossier):
|
||||||
results = request.dbsession.execute(query).first()
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[3:]
|
||||||
return results
|
|
||||||
|
query = "CALL spGET_DOSSIERS_byNumeo('%s',%s);" % (societe, no_id)
|
||||||
def get_documents_byChantier(request,nodossier):
|
results = request.dbsession.execute(query).fetchall()
|
||||||
societe = nodossier[0:2]
|
return results
|
||||||
no_id = nodossier[3:]
|
|
||||||
|
def update_suivi(request, nodossier, nolig, new_values):
|
||||||
query = "CALL spGET_DOSSIERS_byNumeo('%s',%s);" % (societe, no_id)
|
societe = nodossier[0:2]
|
||||||
results = request.dbsession.execute(query).fetchall()
|
no_id = nodossier[3:]
|
||||||
return results
|
|
||||||
|
new_values['societe'] = societe
|
||||||
def update_suivi(request, nodossier, nolig, new_values):
|
new_values['no_id'] = no_id
|
||||||
societe = nodossier[0:2]
|
s = ''
|
||||||
no_id = nodossier[3:]
|
for param in new_values.keys():
|
||||||
|
if s:
|
||||||
new_values['societe'] = societe
|
s += ",%s=:%s" % (param, param)
|
||||||
new_values['no_id'] = no_id
|
else:
|
||||||
s = ''
|
s = "%s=:%s" % (param, param)
|
||||||
for param in new_values.keys():
|
|
||||||
if s:
|
if nolig == '0':
|
||||||
s += ",%s=:%s" % (param, param)
|
query = "INSERT INTO dem_lig SET %s" % s
|
||||||
else:
|
else:
|
||||||
s = "%s=:%s" % (param, param)
|
new_values['nolig'] = nolig
|
||||||
|
query = "UPDATE dem_lig SET %s WHERE societe = :societe AND NO_ID = :no_id AND NOLIG = :nolig ;" % s
|
||||||
if nolig == '0':
|
|
||||||
query = "INSERT INTO dem_lig SET %s" % s
|
execute_query(request, query, new_values)
|
||||||
else:
|
|
||||||
new_values['nolig'] = nolig
|
def insert_suivi(request, nodossier, comment):
|
||||||
query = "UPDATE dem_lig SET %s WHERE societe = :societe AND NO_ID = :no_id AND NOLIG = :nolig ;" % s
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[3:]
|
||||||
execute_query(request, query, new_values)
|
|
||||||
|
query = "INSERT INTO dem_lig (societe, NO_ID, DATE, COMMENT, USERMAJ) VALUES (:societe, :no_id, CURRENT_DATE(), :comment, 'EMAIL');"
|
||||||
def insert_suivi(request, nodossier, comment):
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'comment': comment})
|
||||||
societe = nodossier[0:2]
|
|
||||||
no_id = nodossier[3:]
|
query = "UPDATE dem_devis SET usermaj = 'EMAIL' WHERE SOCIETE=:societe AND NO_ID=:no_id;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id})
|
||||||
query = """
|
|
||||||
INSERT INTO dem_lig (societe, NO_ID, DATE, COMMENT, USERMAJ) VALUES
|
def get_similaires_byChantier(request, societe, C_NOM, C_ADR, C_CP, C_VILLE):
|
||||||
(:societe, :no_id, CURRENT_DATE(), :comment, 'MAIL');"""
|
|
||||||
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'comment': comment})
|
query = """
|
||||||
|
SELECT CONCAT(societe,'-',NO_ID) AS nodossier, dem_devis.* FROM dem_devis
|
||||||
def get_similaires_byChantier(request, societe, C_NOM, C_ADR, C_CP, C_VILLE):
|
WHERE societe<>:societe AND C_NOM=:C_NOM AND C_ADR=:C_ADR AND C_CP=:C_CP AND C_VILLE=:C_VILLE;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'C_NOM': C_NOM, 'C_ADR': C_ADR, 'C_CP': C_CP, 'C_VILLE': C_VILLE}).fetchall()
|
||||||
query = """
|
|
||||||
SELECT CONCAT(societe,'-',NO_ID) AS nodossier, dem_devis.* FROM dem_devis
|
return results
|
||||||
WHERE societe<>:societe AND C_NOM=:C_NOM AND C_ADR=:C_ADR AND C_CP=:C_CP AND C_VILLE=:C_VILLE;"""
|
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'C_NOM': C_NOM, 'C_ADR': C_ADR, 'C_CP': C_CP, 'C_VILLE': C_VILLE}).fetchall()
|
def get_docs_attaches(request, nodossier, norapport, origine, filename):
|
||||||
|
societe = nodossier[0:2]
|
||||||
return results
|
nochantier = int(nodossier[3:])
|
||||||
|
|
||||||
def get_devis_lig_by_no(request,nodossier):
|
if filename == '':
|
||||||
|
query = "SELECT * FROM dossier_attaches WHERE societe = :societe AND nochantier = :nochantier AND nodossier=0 AND origine = :origine ORDER BY cree_le;"
|
||||||
societe = nodossier[0:2]
|
else:
|
||||||
type_doc = nodossier[3:5]
|
query = """SELECT * FROM dossier_attaches WHERE societe = :societe AND nochantier = :nochantier
|
||||||
no_id = nodossier[5:]
|
AND nodossier = :norapport AND origine = :origine AND nomfichier = :filename ORDER BY cree_le;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier,
|
||||||
if type_doc == 'DE':
|
'norapport': norapport, 'origine': origine, 'filename': filename}).fetchall()
|
||||||
query = "SELECT * FROM devis_lig WHERE societe = :societe and no_id=:no_id;"
|
return results
|
||||||
elif type_doc == 'FA':
|
|
||||||
query = "SELECT * FROM facture_lig WHERE societe = :societe and no_id=:no_id;"
|
def get_photos(request, nodossier, norapport, origine):
|
||||||
else:
|
societe = nodossier[0:2]
|
||||||
query = "SELECT * FROM proforma_lig WHERE societe = :societe and no_id=:no_id;"
|
nochantier = int(nodossier[3:])
|
||||||
|
query = """SELECT * FROM dossier_attaches WHERE societe = :societe AND nochantier = :nochantier
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall()
|
AND nodossier = :norapport AND origine = :origine AND UPPER(RIGHT(nomfichier,3)) <> 'PDF' ORDER BY cree_le;"""
|
||||||
return results
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'origine': origine}).fetchall()
|
||||||
|
return results
|
||||||
def get_docs_attaches(request, nodossier, norapport, nosection, filename):
|
|
||||||
societe = nodossier[0:2]
|
def delete_photos(request, nodossier, norapport, origine, nomfic):
|
||||||
nochantier = int(nodossier[3:])
|
societe = nodossier[0:2]
|
||||||
|
nochantier = int(nodossier[3:])
|
||||||
if filename == '':
|
# supprimer d'abord le fichier
|
||||||
query = "SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier AND nodossier=0 ORDER BY cree_le;"
|
if len(origine) > 1:
|
||||||
else:
|
file_path = '%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, nomfic)
|
||||||
query = """SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier
|
else:
|
||||||
AND nodossier = :norapport AND nomfichier = :filename ORDER BY cree_le;"""
|
file_path = '%s/%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, norapport, nomfic)
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'filename': filename}).fetchall()
|
if os.path.exists(file_path):
|
||||||
|
os.remove(file_path)
|
||||||
return results
|
|
||||||
|
query = "DELETE FROM dossier_attaches WHERE societe=:societe AND nochantier=:nochantier AND nodossier=:norapport AND origine=:origine AND nomfichier=:nomfic;"
|
||||||
def get_photos(request, nodossier, norapport, nosection):
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'origine': origine, 'nomfic': nomfic})
|
||||||
societe = nodossier[0:2]
|
|
||||||
nochantier = int(nodossier[3:])
|
def rename_photos(request, nodossier, norapport, origine, nomfic, new_nomfic):
|
||||||
query = """SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier
|
societe = nodossier[0:2]
|
||||||
AND nodossier = :norapport AND nosection = :nosection AND UPPER(RIGHT(nomfichier,3)) <> 'PDF' ORDER BY cree_le;"""
|
nochantier = int(nodossier[3:])
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection}).fetchall()
|
|
||||||
return results
|
query = """
|
||||||
|
UPDATE dossier_attaches SET nomfichier = :new_nomfic
|
||||||
def delete_photos(request, nodossier, norapport, nosection, nomfic):
|
WHERE societe=:societe AND nochantier=:nochantier AND nodossier=:norapport AND origine=:origine AND nomfichier=:nomfic;
|
||||||
societe = nodossier[0:2]
|
"""
|
||||||
nochantier = int(nodossier[3:])
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport,
|
||||||
query = "DELETE FROM dossier_attaches WHERE nomrep='DOCS_ATTACHES' AND societe=:societe AND nochantier=:nochantier AND nodossier=:norapport AND nosection=:nosection AND nomfichier=:nomfic;"
|
'origine': origine, 'nomfic': nomfic, 'new_nomfic': new_nomfic})
|
||||||
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection, 'nomfic': nomfic})
|
|
||||||
|
def update_dossier(request, nodossier, new_values):
|
||||||
|
societe = nodossier[0:2]
|
||||||
def update_dossier(request, nodossier, new_values):
|
nochantier = int(nodossier[3:])
|
||||||
societe = nodossier[0:2]
|
|
||||||
nochantier = int(nodossier[3:])
|
s = ''
|
||||||
|
for param in new_values.keys():
|
||||||
s = ''
|
if param == 'C_VILLE':
|
||||||
for param in new_values.keys():
|
new_values['C_VILLE'] = new_values['C_VILLE'].upper()
|
||||||
if param == 'C_VILLE':
|
|
||||||
new_values['C_VILLE'] = new_values['C_VILLE'].upper()
|
if s:
|
||||||
|
s += ",%s=:%s" % (param, param)
|
||||||
if s:
|
else:
|
||||||
s += ",%s=:%s" % (param, param)
|
s = "%s=:%s" % (param, param)
|
||||||
else:
|
new_values['societe'] = societe
|
||||||
s = "%s=:%s" % (param, param)
|
new_values['nochantier'] = nochantier
|
||||||
new_values['societe'] = societe
|
query = "UPDATE dem_devis SET %s WHERE societe=:societe AND no_id=:nochantier" % s
|
||||||
new_values['nochantier'] = nochantier
|
execute_query(request, query, new_values)
|
||||||
query = "UPDATE dem_devis SET %s WHERE societe=:societe AND no_id=:nochantier" % s
|
|
||||||
execute_query(request, query, new_values)
|
query = "CALL spUPD_CHANTIER_COORD(:societe, :nochantier);"
|
||||||
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier})
|
||||||
query = "CALL spUPD_CHANTIER_COORD(:societe, :nochantier);"
|
|
||||||
execute_query(request, query, {'societe': societe, 'nochantier': nochantier})
|
def update_dossier_cloture(request, nodossier, status, logged_in):
|
||||||
|
societe = nodossier[0:2]
|
||||||
def insert_dossier_attaches(request, nodossier, norapport, nosection, filename, filesize, user):
|
nochantier = int(nodossier[3:])
|
||||||
societe = nodossier[0:2]
|
# met le montant regle à 1 centime pour terminé le dossier
|
||||||
nochantier = int(nodossier[3:])
|
query = "UPDATE dem_devis SET STATUS = :status, USERMAJ = :logged_in WHERE societe=:societe AND no_id=:nochantier"
|
||||||
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'status': status, 'logged_in': logged_in})
|
||||||
# fichier existe ?
|
|
||||||
item = get_docs_attaches(request, nodossier, norapport, nosection, filename)
|
def insert_dossier_attaches(request, nodossier, norapport, origine, filename, filesize, user):
|
||||||
if item:
|
societe = nodossier[0:2]
|
||||||
return
|
nochantier = int(nodossier[3:])
|
||||||
# enregistrer dans la table dossier_attaches
|
|
||||||
query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nodossier, nosection, nomfichier, taillefichier, cree_le, usermaj)
|
# fichier existe ?
|
||||||
VALUES('DOCS_ATTACHES',:societe,:nochantier,:norapport,:nosection,:filename,:filesize,NOW(),:user);"""
|
item = get_docs_attaches(request, nodossier, norapport, origine, filename)
|
||||||
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection, 'filename': filename, 'filesize': filesize, 'user': user})
|
if item:
|
||||||
|
return
|
||||||
def get_rapport_by_no(request,nodossier,date_inter):
|
# enregistrer dans la table dossier_attaches
|
||||||
societe = nodossier[0:2]
|
query = """INSERT INTO dossier_attaches (societe, nochantier, nodossier, origine, nomfichier, taillefichier, cree_le, usermaj)
|
||||||
nochantier = nodossier[3:]
|
VALUES(:societe,:nochantier,:norapport,:origine,:filename,:filesize,NOW(),:user);"""
|
||||||
if date_inter == '':
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport,
|
||||||
query = "SELECT * FROM dem_rdf WHERE societe = :societe AND nochantier = :nochantier;"
|
'origine': origine, 'filename': filename, 'filesize': filesize, 'user': user})
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).fetchall()
|
|
||||||
else:
|
def get_rapport_by_no(request,nodossier,date_inter):
|
||||||
query = "SELECT * FROM dem_rdf WHERE societe = :societe AND nochantier = :nochantier AND date_inter=:date_inter;"
|
societe = nodossier[0:2]
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'date_inter': date_inter}).first()
|
nochantier = nodossier[3:]
|
||||||
return results
|
if date_inter == '':
|
||||||
|
query = "SELECT * FROM dem_rdf WHERE societe = :societe AND nochantier = :nochantier;"
|
||||||
def get_rapport_by_no_id(request,no_id):
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).fetchall()
|
||||||
query = "SELECT * FROM dem_rdf WHERE no_id = :no_id;"
|
else:
|
||||||
results = request.dbsession.execute(query, {'no_id': no_id}).first()
|
query = "SELECT * FROM dem_rdf WHERE societe = :societe AND nochantier = :nochantier AND date_inter=:date_inter;"
|
||||||
return results
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'date_inter': date_inter}).first()
|
||||||
|
return results
|
||||||
def get_articles_by_fam(request, fam):
|
|
||||||
query = "SELECT * FROM articles WHERE FAM = :fam;"
|
def get_rapport_by_no_id(request,no_id):
|
||||||
results = request.dbsession.execute(query, {'fam': fam}).fetchall()
|
query = "SELECT * FROM dem_rdf WHERE no_id = :no_id;"
|
||||||
return results
|
results = request.dbsession.execute(query, {'no_id': no_id}).first()
|
||||||
|
return results
|
||||||
def get_rapport_rdf(request):
|
|
||||||
# les rapports de RDF encours (non encore facturés)
|
def get_articles_rdf(request):
|
||||||
query = "SELECT * FROM dem_rdf where date_facture IS NULL;"
|
query = "SELECT * FROM articles WHERE REF LIKE 'RDF%';"
|
||||||
results = request.dbsession.execute(query, ).fetchall()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def insert_rapport(request,nodossier,logged_in):
|
def get_rapport_rdf(request):
|
||||||
societe = nodossier[0:2]
|
# les rapports de RDF (100 derniers)
|
||||||
nochantier = nodossier[3:]
|
query = "SELECT * FROM dem_rdf ORDER BY societe, no_id DESC LIMIT 100;"
|
||||||
|
results = request.dbsession.execute(query, ).fetchall()
|
||||||
query = """INSERT INTO dem_rdf (societe, nochantier, cd_cli, nomcli, c_qualite, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, c_telp, nosin, auteur_code)
|
return results
|
||||||
SELECT societe, no_id, cd_cli, nomcli, c_qualite, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, c_telp, nosin, :auteur_code FROM dem_devis WHERE societe = :societe AND no_id = :nochantier;"""
|
|
||||||
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'auteur_code': logged_in})
|
def insert_rapport(request,nodossier,logged_in):
|
||||||
|
societe = nodossier[0:2]
|
||||||
def get_rdf_causes(request, code):
|
nochantier = nodossier[3:]
|
||||||
query = "SELECT libelle FROM rdf_causes where code LIKE :code;"
|
|
||||||
results = request.dbsession.execute(query, {'code': code + '%'}).fetchall()
|
query = """INSERT INTO dem_rdf (societe, nochantier, cd_cli, nomcli, c_qualite, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, c_telp, nosin, auteur_code)
|
||||||
return results
|
SELECT societe, no_id, cd_cli, nomcli, c_qualite, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, c_telp, nosin, :auteur_code FROM dem_devis WHERE societe = :societe AND no_id = :nochantier;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'auteur_code': logged_in})
|
||||||
def update_rapport(request, nodossier, date_inter, new_values):
|
|
||||||
societe = nodossier[0:2]
|
def get_rdf_causes(request, code):
|
||||||
nochantier = int(nodossier[3:])
|
query = "SELECT libelle FROM rdf_causes where code LIKE :code;"
|
||||||
|
results = request.dbsession.execute(query, {'code': code + '%'}).fetchall()
|
||||||
s = ''
|
return results
|
||||||
for param in new_values.keys():
|
|
||||||
if s:
|
def update_rapport(request, nodossier, dateinter, new_values):
|
||||||
s += ",%s=:%s" % (param, param)
|
societe = nodossier[0:2]
|
||||||
else:
|
nochantier = int(nodossier[3:])
|
||||||
s = "%s=:%s" % (param, param)
|
|
||||||
new_values['societe'] = societe
|
s = ''
|
||||||
new_values['nochantier'] = nochantier
|
for param in new_values.keys():
|
||||||
new_values['date_inter'] = date_inter
|
if s:
|
||||||
query = "UPDATE dem_rdf SET %s WHERE societe=:societe AND nochantier=:nochantier AND date_inter=:date_inter;" % s
|
s += ",%s=:%s" % (param, param)
|
||||||
execute_query(request, query, new_values)
|
else:
|
||||||
|
s = "%s=:%s" % (param, param)
|
||||||
def delete_rapport(request, no_id):
|
new_values['societe'] = societe
|
||||||
|
new_values['nochantier'] = nochantier
|
||||||
query = "DELETE FROM dem_rdf WHERE no_id = :no_id"
|
new_values['dateinter'] = dateinter
|
||||||
execute_query(request, query, {'no_id': no_id})
|
|
||||||
|
query = "UPDATE dem_rdf SET %s WHERE societe=:societe AND nochantier=:nochantier AND date_inter=:dateinter;" % s
|
||||||
def validate_rapport(request, no_id):
|
execute_query(request, query, new_values)
|
||||||
query = "UPDATE dem_rdf SET date_relu=CURRENT_DATE WHERE no_id = :no_id"
|
|
||||||
execute_query(request, query, {'no_id': no_id})
|
def delete_rapport(request, no_id):
|
||||||
|
|
||||||
def insert_facture_rdf(request, societe, nochantier, user, ref, date_rapport):
|
query = "DELETE FROM dem_rdf WHERE no_id = :no_id"
|
||||||
# créer une facture vierge à partir du dossier
|
execute_query(request, query, {'no_id': no_id})
|
||||||
query = "CALL spINS_FACTURE_RDF(:societe, :nochantier, :user, :ref, :date_rapport)"
|
|
||||||
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'user': user, 'ref': ref, 'date_rapport': date_rapport})
|
def update_rapport_validate(request, no_id):
|
||||||
|
query = "UPDATE dem_rdf SET date_relu=CURRENT_DATE WHERE no_id = :no_id"
|
||||||
def insert_dossier(request, societe, cd_cli, c_nom, c_adr, c_adr2, c_cp, c_ville, c_telp, nosin, c_obs, tx_trav):
|
execute_query(request, query, {'no_id': no_id})
|
||||||
# créer une dem_devis selon l'email de l'OS
|
|
||||||
query = """CALL spINS_DEMANDES(:societe, :cd_cli, :c_nom, :c_adr, :c_adr2, :c_cp, :c_ville, :c_telp, 'MR', 6, :nosin, :c_obs, :tx_trav, :logged_in);"""
|
def update_rapport_facture(request, no_id):
|
||||||
execute_query(request, query, {'societe': societe, 'cd_cli': cd_cli, 'c_nom': c_nom, 'c_adr': c_adr, 'c_adr2': c_adr2, 'c_cp': c_cp,
|
query = "UPDATE dem_rdf SET date_facture=CURRENT_DATE WHERE no_id = :no_id"
|
||||||
'c_ville': c_ville,'c_telp': c_telp, 'nosin': nosin, 'c_obs': c_obs, 'tx_trav': tx_trav, 'logged_in': 'EMAIL'})
|
execute_query(request, query, {'no_id': no_id})
|
||||||
|
|
||||||
query = "SELECT no_id FROM dem_devis WHERE societe = :societe AND date = curdate() AND cd_cli = :cd_cli ORDER BY no_id desc LIMIT 1;"
|
def update_rapport_client(request, norapport, nomClient, codeClient):
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
societe = codeClient[0:2]
|
||||||
return results.no_id
|
cd_cli = int(codeClient[3:])
|
||||||
|
query = "UPDATE dem_rdf SET CD_CLI = :cd_cli, NOMCLI = :nomClient WHERE no_id = :norapport"
|
||||||
def get_cabinet(request, code):
|
execute_query(request, query, {'norapport': norapport, 'cd_cli': cd_cli, 'nomClient': nomClient})
|
||||||
query = "SELECT * FROM p_cabinet where code = :code;"
|
|
||||||
results = request.dbsession.execute(query, {'code': code}).first()
|
def update_rapport_nochantier(request, norapport, new_nochantier):
|
||||||
return results
|
# controler que le no du nouveau dossier existe
|
||||||
|
dossier = get_dossier_by_no(request,'PL-' + new_nochantier)
|
||||||
def get_experts(request, code_cab, code_exp):
|
if dossier:
|
||||||
if code_exp == 0:
|
query = "UPDATE dem_rdf SET nochantier = :new_nochantier WHERE no_id = :norapport"
|
||||||
query = "SELECT * FROM p_experts where code_cab = :code_cab;"
|
execute_query(request, query, {'norapport': norapport, 'new_nochantier': new_nochantier})
|
||||||
results = request.dbsession.execute(query, {'code_cab': code_cab}).fetchall()
|
return "OK"
|
||||||
else:
|
else:
|
||||||
query = "SELECT * FROM p_experts where code_cab = :code_cab AND code_exp = :code_exp;"
|
return "NOK"
|
||||||
results = request.dbsession.execute(query, {'code_cab': code_cab, 'code_exp': code_exp}).first()
|
|
||||||
return results
|
def insert_facture_rdf(request, societe, nochantier, cd_cli, nomcli, user, ref, date_rapport):
|
||||||
|
# créer une facture vierge à partir du dossier
|
||||||
def insert_log_nuit(request, proc, msg):
|
query = "CALL spINS_FACTURE_RDF(:societe, :nochantier, :cd_cli, :nomcli, :user, :ref, :date_rapport)"
|
||||||
query = "INSERT INTO t_log_nuit (proc,msg) VALUES (:proc, :msg);"
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'cd_cli': cd_cli, 'nomcli': nomcli, 'user': user, 'ref': ref, 'date_rapport': date_rapport})
|
||||||
execute_query(request, query, {'proc': proc, 'msg': msg})
|
|
||||||
|
def insert_dossier(request, societe, cd_cli, c_nom, c_adr, c_adr2, c_cp, c_ville, c_telp, c_email, nosin, nopol, c_obs, tx_trav):
|
||||||
def get_log_demandes(request, ):
|
# créer une dem_devis selon l'email de l'OS
|
||||||
# lire le log de nuit
|
query = """CALL spINS_DEMANDES(:societe, :cd_cli, :c_nom, :c_adr, :c_adr2, :c_cp, :c_ville, :c_telp, :c_email, 'MR', 6, :nosin, :nopol, :c_obs, :tx_trav, 'EMAIL');"""
|
||||||
query = """SELECT * FROM t_log_nuit WHERE proc = 'GENERER';"""
|
execute_query(request, query, {'societe': societe, 'cd_cli': cd_cli, 'c_nom': c_nom, 'c_adr': c_adr, 'c_adr2': c_adr2, 'c_cp': c_cp,
|
||||||
results = request.dbsession.execute(query, )
|
'c_ville': c_ville,'c_telp': c_telp, 'nosin': nosin, 'nopol': nopol, 'c_obs': c_obs, 'tx_trav': tx_trav, 'c_email': c_email})
|
||||||
return results.fetchall()
|
|
||||||
|
query = "SELECT no_id FROM dem_devis WHERE societe = :societe AND date = curdate() AND cd_cli = :cd_cli ORDER BY no_id desc LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
||||||
|
return results.no_id
|
||||||
|
|
||||||
|
def get_cabinet(request, code):
|
||||||
|
query = "SELECT * FROM p_cabinet where code = :code;"
|
||||||
|
results = request.dbsession.execute(query, {'code': code}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_experts(request, code_cab, code_exp):
|
||||||
|
if code_exp == 0:
|
||||||
|
query = "SELECT * FROM p_experts where code_cab = :code_cab;"
|
||||||
|
results = request.dbsession.execute(query, {'code_cab': code_cab}).fetchall()
|
||||||
|
else:
|
||||||
|
query = "SELECT * FROM p_experts where code_cab = :code_cab AND code_exp = :code_exp;"
|
||||||
|
results = request.dbsession.execute(query, {'code_cab': code_cab, 'code_exp': code_exp}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def insert_log_nuit(request, proc, msg, nodossier):
|
||||||
|
query = "INSERT INTO t_log_nuit (proc,msg, nodossier) VALUES (:proc, :msg, :nodossier);"
|
||||||
|
execute_query(request, query, {'proc': proc, 'msg': msg, 'nodossier': nodossier})
|
||||||
|
|
||||||
|
def get_log_demandes(request, ):
|
||||||
|
# lire le log de nuit
|
||||||
|
query = """SELECT *, (SELECT usermaj FROM dem_devis WHERE societe=LEFT(nodossier,2) AND no_id=RIGHT(nodossier,6)) AS user
|
||||||
|
FROM t_log_nuit WHERE proc = 'GENERER';"""
|
||||||
|
results = request.dbsession.execute(query, )
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_status_by_id(request, code):
|
||||||
|
if code == '':
|
||||||
|
query = """SELECT * FROM p_statuts;"""
|
||||||
|
results = request.dbsession.execute(query,).fetchall()
|
||||||
|
elif code == 'DE':
|
||||||
|
query = """SELECT * FROM p_statuts WHERE code >= 3;"""
|
||||||
|
results = request.dbsession.execute(query,).fetchall()
|
||||||
|
else:
|
||||||
|
query = """SELECT * FROM p_statuts WHERE code = :code;"""
|
||||||
|
results = request.dbsession.execute(query, {'code': code}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_motifs(request):
|
||||||
|
query = """SELECT * FROM p_motifs;"""
|
||||||
|
results = request.dbsession.execute(query,).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_factures_en_att(request, societe):
|
||||||
|
query = """SELECT f.date, LPAD(f.no_id,6,'0') AS numero, f.nomcli, CONCAT(f.c_nom,'; ',f.c_adr,'; ',f.c_ville) AS chantier, f.totalht AS montant, f.status, s.libelle, f.nosin, f.nopol, f.usermaj
|
||||||
|
FROM facture f JOIN p_statuts s ON f.STATUS = s.CODE WHERE f.societe=:societe AND f.STATUS < 8 ORDER BY f.societe, f.STATUS, f.nomcli;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_dem_notes(request, nodossier, noligne):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
nochantier = int(nodossier[3:])
|
||||||
|
|
||||||
|
if noligne == '0':
|
||||||
|
query = "SELECT societe, nochantier, noligne, libelle FROM dem_notes WHERE societe = :societe AND nochantier = :nochantier ORDER BY libelle;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'noligne': noligne}).fetchall()
|
||||||
|
else:
|
||||||
|
query = "SELECT * FROM dem_notes WHERE societe = :societe AND nochantier = :nochantier AND noligne = :noligne;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'noligne': noligne}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def delete_dem_note(request, nodossier, noligne):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
nochantier = int(nodossier[3:])
|
||||||
|
# une note ou dessin
|
||||||
|
query = "DELETE FROM dem_notes WHERE societe=:societe AND nochantier=:nochantier AND noligne=:noligne;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'noligne': noligne})
|
||||||
|
|
||||||
|
def update_dem_note(request, nodossier, noligne, notes, logged_in):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
nochantier = int(nodossier[3:])
|
||||||
|
# création ou modif ?
|
||||||
|
if noligne == '0':
|
||||||
|
query = "INSERT INTO dem_notes (societe, nochantier, notes, usermaj) VALUES (:societe, :nochantier, :notes, :logged_in);"
|
||||||
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'notes': notes, 'logged_in': logged_in})
|
||||||
|
else:
|
||||||
|
query = "UPDATE dem_notes SET notes=:notes, logged_in=:logged_in WHERE societe=:societe AND nochantier=:nochantier AND noligne=:noligne;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'noligne': noligne, 'notes': notes, 'logged_in': logged_in})
|
||||||
|
|
||||||
|
def get_nb_dessins(request, nodossier):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
nochantier = nodossier[3:]
|
||||||
|
|
||||||
|
query = "SELECT count(*) AS nb FROM dossier_attaches WHERE societe=:societe AND nochantier=:nochantier AND origine='FRN' AND nomfichier LIKE '%DESSIN No %';"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
|
return results.nb
|
||||||
|
|||||||
@@ -1,111 +1,248 @@
|
|||||||
# -*- coding: utf8 -*-
|
# -*- coding: utf8 -*-
|
||||||
from sqlalchemy import text
|
from zope.sqlalchemy import (
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
mark_changed
|
||||||
from sqlalchemy.orm import (
|
)
|
||||||
scoped_session,
|
|
||||||
sessionmaker,
|
import transaction
|
||||||
)
|
|
||||||
from zope.sqlalchemy import (
|
def execute_query(request, query, params):
|
||||||
ZopeTransactionExtension,
|
"""Execute query and mark session as changed"""
|
||||||
mark_changed
|
request.dbsession.execute(query, params)
|
||||||
)
|
mark_changed(request.dbsession)
|
||||||
|
transaction.commit()
|
||||||
from datetime import *
|
|
||||||
import dateutil.relativedelta
|
def get_log_nuit(request, ):
|
||||||
import transaction
|
# lire le log de nuit
|
||||||
|
query = """SELECT * FROM t_log_nuit;"""
|
||||||
def execute_query(request, query, params):
|
results = request.dbsession.execute(query, )
|
||||||
"""Execute query and mark session as changed"""
|
return results.fetchall()
|
||||||
request.dbsession.execute(query, params)
|
|
||||||
mark_changed(request.dbsession)
|
def get_last_modified(request,):
|
||||||
transaction.commit()
|
query = """
|
||||||
|
SELECT 'DEMANDES' as nomtable, societe, no_id, datemaj, usermaj FROM bddevfac.dem_devis where date(datemaj)=CURDATE()
|
||||||
def get_log_nuit(request, ):
|
UNION
|
||||||
# lire le log de nuit
|
SELECT 'DEM_LIGNE' as nomtable, societe, no_id, datemaj, usermaj FROM bddevfac.dem_lig where date(datemaj)=CURDATE()
|
||||||
query = """SELECT * FROM t_log_nuit;"""
|
UNION
|
||||||
results = request.dbsession.execute(query, )
|
SELECT 'DEVIS' as nomtable, societe, no_id, datemaj, usermaj FROM bddevfac.devis where date(datemaj)=CURDATE()
|
||||||
return results.fetchall()
|
UNION
|
||||||
|
SELECT 'DEVIS_LIG' as nomtable, societe, no_id, datemaj, usermaj FROM bddevfac.devis_lig where date(datemaj)=CURDATE()
|
||||||
def get_last_emailing(request):
|
UNION
|
||||||
"""Lire les 200 derniers envois d'emails"""
|
SELECT 'FACTURES' as nomtable, societe, no_id, datemaj, usermaj FROM bddevfac.facture where date(datemaj)=CURDATE()
|
||||||
query = "SELECT * FROM email_rappels ORDER BY no_id DESC LIMIT 400;"
|
UNION
|
||||||
results = request.dbsession.execute(query, {})
|
SELECT 'FACT_LIG' as nomtable, societe, no_id, datemaj, usermaj FROM bddevfac.facture_lig where date(datemaj)=CURDATE()
|
||||||
return results.fetchall()
|
UNION
|
||||||
|
SELECT 'FAC_REGL' as nomtable, societe, cod_bnq, date as datemaj, JST FROM bddevfac.facture_reg where date(date)=CURDATE()
|
||||||
def get_orphans_DE(request, societe):
|
order by datemaj desc limit 10; """
|
||||||
|
results = request.dbsession.execute(query, )
|
||||||
query = "SELECT * FROM devis WHERE societe = '%s' AND nochantier = 0 ORDER BY date desc LIMIT 50 ;" % (societe)
|
return results.fetchall()
|
||||||
results = request.dbsession.execute(query).first()
|
|
||||||
return results
|
def get_rappels_rdv(request):
|
||||||
|
"""Lire les 200 derniers envois d'emails"""
|
||||||
def get_dossiers_byChantier(request, societe, name):
|
query = "SELECT * FROM email_rappels ORDER BY no_id DESC LIMIT 400;"
|
||||||
|
results = request.dbsession.execute(query, {})
|
||||||
query = "CALL spGET_DOSSIERS_byChantier('%s','%s','%s');" % (societe, 'DE', name.replace("'","''"))
|
return results.fetchall()
|
||||||
results = request.dbsession.execute(query).fetchall()
|
|
||||||
return results
|
def get_dossiers_byChantier(request, societe, name):
|
||||||
|
query = "CALL spGET_DOSSIERS_byChantier('%s','%s','%s');" % (societe, 'DE', name.replace("'","''"))
|
||||||
def get_rdf_causes_by_id(request, code):
|
results = request.dbsession.execute(query).fetchall()
|
||||||
# lire les rdf_causes
|
return results
|
||||||
if code == '0':
|
|
||||||
query = """SELECT * FROM rdf_causes;"""
|
def get_cabinets_by_id(request, code):
|
||||||
results = request.dbsession.execute(query).fetchall()
|
# lire les cabinets
|
||||||
else:
|
if code == '0':
|
||||||
query = """SELECT * FROM rdf_causes WHERE code=:code;"""
|
query = """SELECT * FROM P_CABINET ORDER BY nom;"""
|
||||||
results = request.dbsession.execute(query, {'code': code}).first()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
return results
|
else:
|
||||||
|
query = """SELECT * FROM P_CABINET WHERE code=:code;"""
|
||||||
def get_emails_sent(request, societe, nolig):
|
results = request.dbsession.execute(query, {'code': code}).first()
|
||||||
d = datetime.now()
|
return results
|
||||||
d = d - dateutil.relativedelta.relativedelta(months=1)
|
|
||||||
# début du mois M-3
|
def get_experts_by_id(request, code_cab, code_exp):
|
||||||
datedeb = d.strftime('%Y-%m-%d')
|
# lire les experts du cabinet
|
||||||
|
if code_exp == '0':
|
||||||
if nolig == 0:
|
query = """SELECT * FROM P_EXPERTS WHERE code_cab=:code_cab ORDER BY nom;"""
|
||||||
query = """SELECT CONCAT(l.societe,"-",l.no_id) as nodossier, l.datemaj, l.comment, l.nolig, l.usermaj, e.nomcli FROM dem_lig l
|
results = request.dbsession.execute(query, {'code_cab': code_cab}).fetchall()
|
||||||
INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id
|
else:
|
||||||
WHERE l.societe = :societe AND l.date >= :datedeb AND l.comment LIKE 'Envoi email -> %' ORDER BY l.datemaj LIMIT 250;"""
|
query = """SELECT * FROM P_EXPERTS WHERE code_cab=:code_cab AND code_exp=:code_exp;"""
|
||||||
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb}).fetchall()
|
results = request.dbsession.execute(query, {'code_cab': code_cab, 'code_exp': code_exp}).first()
|
||||||
else:
|
return results
|
||||||
query = """SELECT * FROM dem_lig WHERE nolig=:nolig;"""
|
|
||||||
results = request.dbsession.execute(query, {'nolig': nolig}).first()
|
def get_rdf_causes_by_id(request, code):
|
||||||
|
# lire les rdf_causes
|
||||||
return results
|
if code == '0':
|
||||||
|
query = """SELECT * FROM rdf_causes;"""
|
||||||
|
results = request.dbsession.execute(query).fetchall()
|
||||||
def delete_rdf_cause(request, old_code):
|
else:
|
||||||
query = "DELETE FROM rdf_causes WHERE code = :old_code;"
|
query = """SELECT * FROM rdf_causes WHERE code=:code;"""
|
||||||
execute_query(request, query, {'old_code': old_code})
|
results = request.dbsession.execute(query, {'code': code}).first()
|
||||||
|
return results
|
||||||
def update_rdf_cause(request, old_code, code, libelle):
|
|
||||||
if old_code == '0':
|
def delete_rdf_cause(request, old_code):
|
||||||
query = "INSERT rdf_causes (code, libelle) values (:code, :libelle);"
|
query = "DELETE FROM rdf_causes WHERE code = :old_code;"
|
||||||
else:
|
execute_query(request, query, {'old_code': old_code})
|
||||||
query = "UPDATE rdf_causes SET code = :code, libelle = :libelle WHERE code = :old_code;"
|
|
||||||
execute_query(request, query, {'old_code': old_code, 'code': code, 'libelle': libelle})
|
def update_rdf_cause(request, old_code, code, libelle):
|
||||||
|
if old_code == '0':
|
||||||
def get_texts(request, text_id):
|
query = "INSERT rdf_causes (code, libelle) values (:code, :libelle);"
|
||||||
"""Lire les textes"""
|
else:
|
||||||
if text_id == 0:
|
query = "UPDATE rdf_causes SET code = :code, libelle = :libelle WHERE code = :old_code;"
|
||||||
query = "SELECT * FROM p_texts ORDER BY theme, intitule;"
|
execute_query(request, query, {'old_code': old_code, 'code': code, 'libelle': libelle})
|
||||||
results = request.dbsession.execute(query).fetchall()
|
|
||||||
elif text_id == -1:
|
def get_texts(request, text_id):
|
||||||
query = "SELECT * FROM p_texts where theme != 'INTERNE' ORDER BY theme, intitule;"
|
"""Lire les textes"""
|
||||||
results = request.dbsession.execute(query).fetchall()
|
if text_id == 0:
|
||||||
else:
|
query = "SELECT * FROM p_texts ORDER BY theme, intitule;"
|
||||||
query = "SELECT * FROM p_texts where text_id = :text_id;"
|
results = request.dbsession.execute(query).fetchall()
|
||||||
results = request.dbsession.execute(query, {'text_id': text_id}).first()
|
elif text_id == -1:
|
||||||
return results
|
query = "SELECT * FROM p_texts where theme != 'INTERNE' ORDER BY theme, intitule;"
|
||||||
|
results = request.dbsession.execute(query).fetchall()
|
||||||
def update_text(request, text_id, intitule, texte, theme):
|
else:
|
||||||
"""créér ou modifier la text"""
|
query = "SELECT * FROM p_texts where text_id = :text_id;"
|
||||||
if text_id == '0':
|
results = request.dbsession.execute(query, {'text_id': text_id}).first()
|
||||||
query = "INSERT INTO p_texts (intitule, texte, theme) VALUES(:intitule, :texte, :theme);"
|
return results
|
||||||
execute_query(request, query, {'intitule': intitule, 'texte': texte, 'theme': theme})
|
|
||||||
else:
|
def update_text(request, text_id, intitule, texte, theme):
|
||||||
query = "update p_texts set intitule=:intitule, texte=:texte, theme=:theme where text_id = :text_id;"
|
"""créér ou modifier la text"""
|
||||||
execute_query(request, query, {'text_id': text_id, 'intitule': intitule, 'texte': texte, 'theme': theme})
|
if text_id == '0':
|
||||||
|
query = "INSERT INTO p_texts (intitule, texte, theme) VALUES(:intitule, :texte, :theme);"
|
||||||
def delete_text(request, text_id):
|
execute_query(request, query, {'intitule': intitule, 'texte': texte, 'theme': theme})
|
||||||
"""supprimer la text"""
|
else:
|
||||||
query = "delete from p_texts where text_id = :text_id;"
|
query = "update p_texts set intitule=:intitule, texte=:texte, theme=:theme where text_id = :text_id;"
|
||||||
execute_query(request, query, {'text_id': text_id})
|
execute_query(request, query, {'text_id': text_id, 'intitule': intitule, 'texte': texte, 'theme': theme})
|
||||||
|
|
||||||
|
def delete_text(request, text_id):
|
||||||
|
"""supprimer la text"""
|
||||||
|
query = "delete from p_texts where text_id = :text_id;"
|
||||||
|
execute_query(request, query, {'text_id': text_id})
|
||||||
|
|
||||||
|
def get_articles_byFam(request, fam):
|
||||||
|
if fam == 'T':
|
||||||
|
query = "SELECT * FROM articles WHERE FAM = 'T';"
|
||||||
|
else:
|
||||||
|
query = "SELECT * FROM articles WHERE FAM != 'T';"
|
||||||
|
results = request.dbsession.execute(query, ).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_article(request, ref):
|
||||||
|
query = "SELECT * FROM articles WHERE REF = ref;"
|
||||||
|
results = request.dbsession.execute(query, ).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def update_article(request, ref, new_values):
|
||||||
|
# formater les champs
|
||||||
|
s = ''
|
||||||
|
for param in new_values.keys():
|
||||||
|
if param == 'FAM':
|
||||||
|
' ne prend que 2 premiers caractères'
|
||||||
|
new_values['FAM'] = new_values['FAM'][0:2].upper()
|
||||||
|
|
||||||
|
if s:
|
||||||
|
s += ",%s=:%s" % (param, param)
|
||||||
|
else:
|
||||||
|
s = "%s=:%s" % (param, param)
|
||||||
|
|
||||||
|
if ref == '0':
|
||||||
|
query = "INSERT INTO articles SET %s" % s
|
||||||
|
else:
|
||||||
|
new_values['ref'] = ref
|
||||||
|
query = "UPDATE articles SET %s WHERE ref = :ref;" % s
|
||||||
|
execute_query(request, query, new_values)
|
||||||
|
|
||||||
|
def delete_article(request, ref):
|
||||||
|
query = "DELETE FROM articles WHERE ref = :ref ;"
|
||||||
|
execute_query(request, query, {'ref': ref})
|
||||||
|
|
||||||
|
def update_cabinet(request, code, new_values):
|
||||||
|
# formater les champs
|
||||||
|
s = ''
|
||||||
|
for param in new_values.keys():
|
||||||
|
if s:
|
||||||
|
s += ",%s=:%s" % (param, param)
|
||||||
|
else:
|
||||||
|
s = "%s=:%s" % (param, param)
|
||||||
|
|
||||||
|
if code == '0':
|
||||||
|
query = "CALL spINS_P_CABINET(:nom);"
|
||||||
|
results = request.dbsession.execute(query, {'nom': new_values['NOM']}).first()
|
||||||
|
# recupère lenouveau code créé
|
||||||
|
code = results.newligne
|
||||||
|
|
||||||
|
new_values['code'] = code
|
||||||
|
query = "UPDATE p_cabinet SET %s WHERE code = :code;" % s
|
||||||
|
execute_query(request, query, new_values)
|
||||||
|
|
||||||
|
def delete_cabinet(request, code):
|
||||||
|
query = "DELETE FROM p_cabinet WHERE code = :code ;"
|
||||||
|
execute_query(request, query, {'code': code})
|
||||||
|
|
||||||
|
def update_expert(request, code_cab, code_exp, new_values):
|
||||||
|
# formater les champs
|
||||||
|
s = ''
|
||||||
|
for param in new_values.keys():
|
||||||
|
if s:
|
||||||
|
s += ",%s=:%s" % (param, param)
|
||||||
|
else:
|
||||||
|
s = "%s=:%s" % (param, param)
|
||||||
|
|
||||||
|
if code_exp == '0':
|
||||||
|
query = "CALL spINS_P_EXPERT(:code_cab, :nom);"
|
||||||
|
results = request.dbsession.execute(query, {'code_cab': code_cab, 'nom': new_values['NOM']}).first()
|
||||||
|
# recupère lenouveau code créé
|
||||||
|
code_exp = results.newligne
|
||||||
|
|
||||||
|
new_values['code_cab'] = code_cab
|
||||||
|
new_values['code_exp'] = code_exp
|
||||||
|
query = "UPDATE p_experts SET %s WHERE code_cab = :code_cab AND code_exp = :code_exp;" % s
|
||||||
|
execute_query(request, query, new_values)
|
||||||
|
|
||||||
|
def delete_expert(request, code_cab, code_exp):
|
||||||
|
query = "DELETE FROM p_experts WHERE code_cab = :code_cab AND code_exp = :code_exp;"
|
||||||
|
execute_query(request, query, {'code_cab': code_cab, 'code_exp': code_exp})
|
||||||
|
|
||||||
|
def update_societe(request, code, new_values):
|
||||||
|
# formater les champs
|
||||||
|
s = ''
|
||||||
|
for param in new_values.keys():
|
||||||
|
if s:
|
||||||
|
s += ",%s=:%s" % (param, param)
|
||||||
|
else:
|
||||||
|
s = "%s=:%s" % (param, param)
|
||||||
|
|
||||||
|
new_values['societe'] = code
|
||||||
|
query = "UPDATE p_societe SET %s WHERE societe = :societe;" % s
|
||||||
|
execute_query(request, query, new_values)
|
||||||
|
|
||||||
|
def update_tarif(request, ref, new_values):
|
||||||
|
# formater les champs
|
||||||
|
s = ''
|
||||||
|
for param in new_values.keys():
|
||||||
|
if s:
|
||||||
|
s += ",%s=:%s" % (param, param)
|
||||||
|
else:
|
||||||
|
s = "%s=:%s" % (param, param)
|
||||||
|
|
||||||
|
if ref == '0':
|
||||||
|
query = "INSERT INTO tarifs SET %s" % s
|
||||||
|
else:
|
||||||
|
new_values['ref'] = ref
|
||||||
|
query = "UPDATE tarifs SET %s WHERE ref = :ref;" % s
|
||||||
|
execute_query(request, query, new_values)
|
||||||
|
|
||||||
|
def delete_tarif(request, ref):
|
||||||
|
query = "DELETE FROM tarifs WHERE ref = :ref ;"
|
||||||
|
execute_query(request, query, {'ref': ref})
|
||||||
|
|
||||||
|
def get_tarifs_byGroupe(request, groupe):
|
||||||
|
query = "SELECT * FROM tarifs WHERE groupe = :groupe;"
|
||||||
|
results = request.dbsession.execute(query, {'groupe': groupe}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_tarif(request, groupe, ref):
|
||||||
|
query = "SELECT * FROM tarifs WHERE groupe = :groupe and ref = :ref;"
|
||||||
|
results = request.dbsession.execute(query, {'groupe': groupe, 'ref': ref}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_p_acces(request):
|
||||||
|
query = """SELECT * FROM p_acces ORDER BY code;"""
|
||||||
|
results = request.dbsession.execute(query).fetchall()
|
||||||
|
return results
|
||||||
|
|||||||
172
mondumas/models/stats.py
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
# -*- coding: utf8 -*-
|
||||||
|
from sqlalchemy import text
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
from sqlalchemy.orm import (
|
||||||
|
scoped_session,
|
||||||
|
sessionmaker,
|
||||||
|
)
|
||||||
|
from zope.sqlalchemy import (
|
||||||
|
ZopeTransactionExtension,
|
||||||
|
mark_changed
|
||||||
|
)
|
||||||
|
|
||||||
|
from datetime import *
|
||||||
|
from dateutil.relativedelta import *
|
||||||
|
import dateutil.relativedelta
|
||||||
|
import transaction
|
||||||
|
|
||||||
|
def execute_query(request, query, params):
|
||||||
|
"""Execute query and mark session as changed"""
|
||||||
|
request.dbsession.execute(query, params)
|
||||||
|
mark_changed(request.dbsession)
|
||||||
|
transaction.commit()
|
||||||
|
|
||||||
|
def get_stats_dd(request, societe):
|
||||||
|
|
||||||
|
query = """SELECT societe, year(date) as Annee, COUNT(*) as Total,
|
||||||
|
SUM(IF(status = '', 1, 0)) AS A_traiter,
|
||||||
|
SUM(IF(status = 'Devis', 1, 0)) AS Devis,
|
||||||
|
SUM(IF(status = 'Commandé', 1, 0)) AS Commande,
|
||||||
|
SUM(IF(status = 'Facturé', 1, 0)) AS Facture,
|
||||||
|
SUM(IF(status = 'Régl part.', 1, 0)) AS ReglePart,
|
||||||
|
SUM(IF(status = 'Réglée', 1, 0)) AS Regle
|
||||||
|
FROM dem_devis where societe=:societe group by societe, year(date) order by year(date) desc;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_stats_delais(request, societe, datedeb, datefin, groupe, id_chart):
|
||||||
|
# lire les examens sur 12 mois glissants par moniteur
|
||||||
|
query = """SELECT * FROM stats_delais
|
||||||
|
WHERE societe=:societe AND id=:id_chart AND group1 >= :datedeb AND group1 <= :datefin AND group2=:groupe order by group1;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'id_chart': id_chart, 'datedeb': datedeb.strftime("%Y%m"),
|
||||||
|
'datefin': datefin.strftime("%Y%m"), 'groupe': groupe})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_stats_delai_groupe(request, societe, datedeb, datefin):
|
||||||
|
query = """SELECT group2, group2_lib FROM stats_delais
|
||||||
|
WHERE societe=:societe AND group1 >= :datedeb AND group1 <= :datefin GROUP BY group2 ORDER BY group2_lib;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y%m"), 'datefin': datefin.strftime("%Y%m")})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_ca_groupe_12m(request, societe, datedeb, datefin):
|
||||||
|
|
||||||
|
query = """SELECT DATE_FORMAT(date, "%Y%m") as yymm,
|
||||||
|
DATE_FORMAT(date, "%M") as mois,
|
||||||
|
DATE_FORMAT(date, "%M %Y") as date,
|
||||||
|
SUM(IF(groupe = 'AXA', totalht, 0)) AS AXA_ca,
|
||||||
|
SUM(IF(groupe = 'AXA', 1, 0)) AS AXA_nb,
|
||||||
|
SUM(IF(groupe = 'MAIF', totalht, 0)) AS MAIF_ca,
|
||||||
|
SUM(IF(groupe = 'MAIF', 1, 0)) AS MAIF_nb,
|
||||||
|
SUM(IF(groupe = 'DOMUS', totalht, 0)) AS DOMUS_ca,
|
||||||
|
SUM(IF(groupe = 'DOMUS', 1, 0)) AS DOMUS_nb,
|
||||||
|
SUM(IF(groupe = 'GMF', totalht, 0)) AS GMF_ca,
|
||||||
|
SUM(IF(groupe = 'GMF', 1, 0)) AS GMF_nb,
|
||||||
|
SUM(IF(groupe = 'MACIF', totalht, 0)) AS MACIF_ca,
|
||||||
|
SUM(IF(groupe = 'MACIF', 1, 0)) AS MACIF_nb
|
||||||
|
FROM bddevfac.facture
|
||||||
|
WHERE societe=:societe and date >= :datedeb and date <= :datefin GROUP BY yymm;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y-%m"), 'datefin': datefin.strftime("%Y-%m")})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_ca_groupe_3y(request, societe, year):
|
||||||
|
|
||||||
|
query = """SELECT groupe,
|
||||||
|
SUM(IF (year(date) = :year - 2, TOTALHT, 0)) as Annee1,
|
||||||
|
SUM(IF (year(date) = :year - 2, 1, 0)) as Count1,
|
||||||
|
SUM(IF (year(date) = :year - 1, TOTALHT, 0)) as Annee2,
|
||||||
|
SUM(IF (year(date) = :year - 1, 1, 0)) as Count2,
|
||||||
|
SUM(IF (year(date) = :year, TOTALHT, 0)) as Annee3,
|
||||||
|
SUM(IF (year(date) = :year, 1, 0)) as Count3
|
||||||
|
FROM bddevfac.facture
|
||||||
|
WHERE societe=:societe AND groupe <> 'X' GROUP BY groupe;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_ca_groupe_3y_with_others(request, societe, year):
|
||||||
|
|
||||||
|
query = """SELECT groupe,
|
||||||
|
SUM(IF (year(date) = :year - 2, TOTALHT, 0)) as Annee1,
|
||||||
|
SUM(IF (year(date) = :year - 2, 1, 0)) as Count1,
|
||||||
|
SUM(IF (year(date) = :year - 1, TOTALHT, 0)) as Annee2,
|
||||||
|
SUM(IF (year(date) = :year - 1, 1, 0)) as Count2,
|
||||||
|
SUM(IF (year(date) = :year, TOTALHT, 0)) as Annee3,
|
||||||
|
SUM(IF (year(date) = :year, 1, 0)) as Count3
|
||||||
|
FROM bddevfac.facture
|
||||||
|
WHERE societe=:societe AND year(date) >= :year - 2 AND typecli <> 'I' GROUP BY groupe;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_ca_clients_12m(request, societe, datedeb, datefin):
|
||||||
|
|
||||||
|
query = """SELECT DATE_FORMAT(date, "%Y%m") as yymm,
|
||||||
|
DATE_FORMAT(date, "%M") as mois,
|
||||||
|
DATE_FORMAT(date, "%M %Y") as date,
|
||||||
|
SUM(IF(typecli = 'A', totalht, 0)) AS A_ca,
|
||||||
|
SUM(IF(typecli = 'A', 1, 0)) AS A_nb,
|
||||||
|
SUM(IF(typecli = 'E', totalht, 0)) AS E_ca,
|
||||||
|
SUM(IF(typecli = 'E', 1, 0)) AS E_nb,
|
||||||
|
SUM(IF(typecli = 'G', totalht, 0)) AS G_ca,
|
||||||
|
SUM(IF(typecli = 'G', 1, 0)) AS G_nb,
|
||||||
|
SUM(IF(typecli = 'P', totalht, 0)) AS P_ca,
|
||||||
|
SUM(IF(typecli = 'P', 1, 0)) AS P_nb,
|
||||||
|
SUM(IF(typecli = 'R', totalht, 0)) AS R_ca,
|
||||||
|
SUM(IF(typecli = 'R', 1, 0)) AS R_nb,
|
||||||
|
SUM(IF(typecli = 'S', totalht, 0)) AS S_ca,
|
||||||
|
SUM(IF(typecli = 'S', 1, 0)) AS S_nb
|
||||||
|
FROM bddevfac.facture
|
||||||
|
WHERE societe=:societe and date >= :datedeb and date <= :datefin GROUP BY yymm;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb.strftime("%Y-%m"), 'datefin': datefin.strftime("%Y-%m")})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_ca_clients_3y(request, societe, year):
|
||||||
|
|
||||||
|
query = """SELECT LIB,
|
||||||
|
SUM(IF (year(date) = :year - 2, TOTALHT, 0)) as Annee1,
|
||||||
|
SUM(IF (year(date) = :year - 2, 1, 0)) as Count1,
|
||||||
|
SUM(IF (year(date) = :year - 1, TOTALHT, 0)) as Annee2,
|
||||||
|
SUM(IF (year(date) = :year - 1, 1, 0)) as Count2,
|
||||||
|
SUM(IF (year(date) = :year, TOTALHT, 0)) as Annee3,
|
||||||
|
SUM(IF (year(date) = :year, 1, 0)) as Count3
|
||||||
|
FROM bddevfac.facture JOIN bddevfac.p_type ON bddevfac.facture.typecli = bddevfac.p_type.CODE
|
||||||
|
WHERE societe=:societe AND year(date) >= :year - 2 AND typecli <> 'I' GROUP BY typecli;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_delais_pourcent(request, societe, groupe, datedeb):
|
||||||
|
|
||||||
|
query = """SELECT
|
||||||
|
SUM(IF (delai_contact <= 2, 1, 0)) AS delais_inf,
|
||||||
|
SUM(IF (delai_contact > 2, 1, 0)) AS delais_sup
|
||||||
|
FROM bddevfac.dem_devis
|
||||||
|
WHERE societe = :societe AND GROUPE = :groupe AND date >= :datedeb;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'groupe': groupe, 'datedeb': datedeb.strftime("%Y-%m")})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_nb_devis_fact(request, societe, year):
|
||||||
|
|
||||||
|
query = """SELECT
|
||||||
|
SUM(IF (NOFACT > 0 AND year(date) = :year - 2, 1, 0)) AS devis_fact_y1,
|
||||||
|
SUM(IF (NOFACT <= 0 AND year(date) = :year - 2, 1, 0)) AS devis_non_fact_y1,
|
||||||
|
SUM(IF (NOFACT > 0 AND year(date) = :year - 1, 1, 0)) AS devis_fact_y2,
|
||||||
|
SUM(IF (NOFACT <= 0 AND year(date) = :year - 1, 1, 0)) AS devis_non_fact_y2,
|
||||||
|
SUM(IF (NOFACT > 0 AND year(date) = :year, 1, 0)) AS devis_fact_y3,
|
||||||
|
SUM(IF (NOFACT <= 0 AND year(date) = :year, 1, 0)) AS devis_non_fact_y3
|
||||||
|
FROM bddevfac.devis
|
||||||
|
WHERE societe = :societe;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_nb_fact_with_devis(request, societe, year):
|
||||||
|
|
||||||
|
query = """SELECT
|
||||||
|
SUM(IF (NODEVIS > 0 AND year(date) = :year - 2, 1, 0)) AS fact_w_devis_y1,
|
||||||
|
SUM(IF (NODEVIS <= 0 AND year(date) = :year - 2, 1, 0)) AS fact_wo_devis_y1,
|
||||||
|
SUM(IF (NODEVIS > 0 AND year(date) = :year - 1, 1, 0)) AS fact_w_devis_y2,
|
||||||
|
SUM(IF (NODEVIS <= 0 AND year(date) = :year - 1, 1, 0)) AS fact_wo_devis_y2,
|
||||||
|
SUM(IF (NODEVIS > 0 AND year(date) = :year, 1, 0)) AS fact_w_devis_y3,
|
||||||
|
SUM(IF (NODEVIS <= 0 AND year(date) = :year, 1, 0)) AS fact_wo_devis_y3
|
||||||
|
FROM bddevfac.facture
|
||||||
|
WHERE societe = :societe;"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'year': year})
|
||||||
|
return results.fetchall()
|
||||||
|
|
||||||
232
mondumas/models/utils.py
Normal file
@@ -0,0 +1,232 @@
|
|||||||
|
# -*- coding: utf8 -*-
|
||||||
|
from sqlalchemy import text
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
from sqlalchemy.orm import (
|
||||||
|
scoped_session,
|
||||||
|
sessionmaker,
|
||||||
|
)
|
||||||
|
from zope.sqlalchemy import (
|
||||||
|
ZopeTransactionExtension,
|
||||||
|
mark_changed
|
||||||
|
)
|
||||||
|
|
||||||
|
from datetime import *
|
||||||
|
import dateutil.relativedelta
|
||||||
|
import transaction
|
||||||
|
|
||||||
|
def execute_query(request, query, params):
|
||||||
|
"""Execute query and mark session as changed"""
|
||||||
|
request.dbsession.execute(query, params)
|
||||||
|
mark_changed(request.dbsession)
|
||||||
|
transaction.commit()
|
||||||
|
|
||||||
|
def insert_log(request, proc, msg):
|
||||||
|
query = "INSERT t_log_nuit (proc,msg) VALUES (:proc,:msg);"
|
||||||
|
execute_query(request, query, {'proc': proc, 'msg' :msg})
|
||||||
|
|
||||||
|
def truncate_log(request):
|
||||||
|
query = "TRUNCATE t_log_nuit;"
|
||||||
|
execute_query(request, query, {})
|
||||||
|
|
||||||
|
def get_log(request):
|
||||||
|
# lire les rappels non envoyés
|
||||||
|
query = "SELECT * FROM t_log_nuit;"
|
||||||
|
results = request.dbsession.execute(query, {}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_email_rappels(request):
|
||||||
|
# lire les rappels non envoyés
|
||||||
|
query = """ SELECT r.*, e.c_qualite, e.c_nom, e.c_adr, e.c_adr2, e.c_ville, e.c_email, s.tel, s.nom as nom_societe
|
||||||
|
FROM email_rappels r
|
||||||
|
INNER JOIN dem_devis e ON r.societe = e.societe AND r.nochantier = e.no_id
|
||||||
|
INNER JOIN p_societe s ON r.societe = s.societe
|
||||||
|
WHERE ISNULL(envoye_le) ORDER BY no_id;"""
|
||||||
|
results = request.dbsession.execute(query, {}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def update_rappels(request):
|
||||||
|
query = "CALL spUPD_RAPPELS();"
|
||||||
|
execute_query(request, query, {})
|
||||||
|
|
||||||
|
def update_email_rappels(request, no_id):
|
||||||
|
query = "UPDATE email_rappels SET envoye_le = NOW() WHERE no_id = :no_id;"
|
||||||
|
execute_query(request, query, {'no_id': no_id})
|
||||||
|
|
||||||
|
def get_societes(request, societe):
|
||||||
|
|
||||||
|
if societe == '0':
|
||||||
|
query = "SELECT * FROM p_societe;"
|
||||||
|
results = request.dbsession.execute(query,).fetchall()
|
||||||
|
else:
|
||||||
|
query = "SELECT * FROM p_societe WHERE societe = :societe;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def chantierExiste(request,societe, no_id):
|
||||||
|
query = "SELECT no_id FROM dem_devis WHERE societe = :societe and no_id = :no_id;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
|
||||||
|
if results:
|
||||||
|
return len(results) > 0
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_all_chantiers(request,societe):
|
||||||
|
query = "SELECT * FROM dem_devis WHERE societe = :societe;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_chantiers_month(request, societe, date_sel):
|
||||||
|
# lire les chantiers du mois
|
||||||
|
query = """SELECT * FROM dem_devis WHERE societe = :societe AND YEAR(date)=YEAR(:date_sel) AND MONTH(date)=MONTH(:date_sel)
|
||||||
|
AND delai_facture = 0 AND nomcli NOT IN ('DUMAS JEAN MICHEL','DUMAS MENUISERIE','DUMAS PEINTURE');
|
||||||
|
"""
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'date_sel': date_sel}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_facture(request, societe, nochantier):
|
||||||
|
query = "SELECT * FROM facture WHERE societe = :societe AND nochantier = :nochantier order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_devis(request, societe, nochantier):
|
||||||
|
query = "SELECT * FROM devis WHERE societe = :societe AND nochantier = :nochantier order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def update_chantier_status(request, societe, no_id, status):
|
||||||
|
query = "UPDATE dem_devis SET status = :status, DATEMAJ = DATEMAJ WHERE societe = :societe AND no_id = :no_id AND status <> :status;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'status': status})
|
||||||
|
|
||||||
|
def update_chantier_delais(request, societe, no_id, delai_contact, delai_rdv, delai_devis, delai_facture):
|
||||||
|
query = """UPDATE dem_devis SET delai_contact = :delai_contact, delai_rdv = :delai_rdv, delai_devis = :delai_devis,
|
||||||
|
delai_facture = :delai_facture, DATEMAJ = DATEMAJ
|
||||||
|
WHERE societe = :societe AND no_id = :no_id;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'delai_contact': delai_contact, 'delai_rdv': delai_rdv,
|
||||||
|
'delai_devis': delai_devis, 'delai_facture': delai_facture})
|
||||||
|
|
||||||
|
def get_chantiers_dates(request, societe, nochantier):
|
||||||
|
# lire 1er contact du chantier
|
||||||
|
query = "SELECT date, datevi FROM dem_lig WHERE societe = :societe AND no_id = :nochantier AND datevi IS NOT NULL;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
|
if results:
|
||||||
|
date_contact = results.date
|
||||||
|
date_rdv = results.datevi
|
||||||
|
else:
|
||||||
|
date_contact = None
|
||||||
|
date_rdv = None
|
||||||
|
|
||||||
|
# lire 1er devis du chantier
|
||||||
|
query = "SELECT date FROM devis WHERE societe = :societe AND nochantier = :nochantier order by date LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
|
if results:
|
||||||
|
date_devis = results.date
|
||||||
|
else:
|
||||||
|
date_devis = None
|
||||||
|
|
||||||
|
# lire 1ere facture du chantier
|
||||||
|
query = "SELECT date FROM facture WHERE societe = :societe AND nochantier = :nochantier order by date LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier}).first()
|
||||||
|
if results:
|
||||||
|
date_facture = results.date
|
||||||
|
else:
|
||||||
|
date_facture = None
|
||||||
|
return date_contact, date_rdv, date_devis, date_facture
|
||||||
|
|
||||||
|
def purge_mensuelle(request, until_date):
|
||||||
|
|
||||||
|
# ----- Purger les DEVIS dont la facture est réglée antérieure à until_date
|
||||||
|
query = """DELETE devis.* FROM devis INNER JOIN facture ON devis.societe = facture.societe and devis.no_id = facture.nodevis
|
||||||
|
WHERE facture.date < :until_date AND ABS(facture.totalttc - facture.mtregl) < 1;"""
|
||||||
|
execute_query(request, query, {'until_date': until_date})
|
||||||
|
|
||||||
|
# ----- Purger les FACTURES réglées antérieures à until_date
|
||||||
|
query = """DELETE FROM facture WHERE facture.date < :until_date AND ABS(facture.totalttc - facture.mtregl) < 1;"""
|
||||||
|
execute_query(request, query, {'until_date': until_date})
|
||||||
|
# ---- Purger les VERSEMENTS inutilisés et antérieurs à until_date
|
||||||
|
query = "DELETE FROM liv_bnq WHERE date < :until_date AND ABS(MontantRegl - MontantDebit) < 1;"
|
||||||
|
execute_query(request, query, {'until_date': until_date})
|
||||||
|
|
||||||
|
# ----- Purger les DEVIS n'ayant pas de facture antérieure à until_date
|
||||||
|
query = """DELETE FROM devis WHERE devis.date < :until_date AND nofact=0;"""
|
||||||
|
execute_query(request, query, {'until_date': until_date})
|
||||||
|
|
||||||
|
# -- RAZ les liens FACTURE et DEVIS
|
||||||
|
query = "UPDATE dem_devis SET nodevis = 0, nofact = 0, datemaj=datemaj WHERE dem_devis.date < :until_date;"
|
||||||
|
execute_query(request, query, {'until_date': until_date})
|
||||||
|
# -- recreer les lien factures
|
||||||
|
query = """UPDATE dem_devis INNER JOIN facture ON dem_devis.societe = facture.societe and dem_devis.no_id = facture.nochantier
|
||||||
|
SET dem_devis.nofact = facture.no_id, dem_devis.datemaj=dem_devis.datemaj WHERE dem_devis.date < :until_date;"""
|
||||||
|
execute_query(request, query, {'until_date': until_date})
|
||||||
|
# -- recreer les lien DEVIS
|
||||||
|
query = """UPDATE dem_devis INNER JOIN devis ON dem_devis.societe = devis.societe and dem_devis.no_id = devis.nochantier
|
||||||
|
SET dem_devis.nodevis = devis.no_id, dem_devis.datemaj=dem_devis.datemaj WHERE dem_devis.date < :until_date"""
|
||||||
|
execute_query(request, query, {'until_date': until_date})
|
||||||
|
# ---- Purger les DEM_DEVIS n'ayant aucun DEVIS ni FACTURE
|
||||||
|
query = "DELETE FROM dem_devis WHERE date < :until_date AND nodevis = 0 AND nofact = 0;"
|
||||||
|
execute_query(request, query, {'until_date': until_date})
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_clients(request):
|
||||||
|
query = "SELECT * FROM clients;"
|
||||||
|
results = request.dbsession.execute(query, {}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_facture_client(request, societe, cd_cli):
|
||||||
|
query = "SELECT * FROM facture WHERE societe = :societe AND cd_cli = :cd_cli order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_payment_client(request, societe, cd_cli):
|
||||||
|
query = "SELECT * FROM liv_bnq WHERE societe = :societe AND cd_cli = :cd_cli order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_devis_client(request, societe, cd_cli):
|
||||||
|
query = "SELECT * FROM devis WHERE societe = :societe AND cd_cli = :cd_cli order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_proforma_client(request, societe, cd_cli):
|
||||||
|
query = "SELECT * FROM proforma WHERE societe = :societe AND cd_cli = :cd_cli order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_last_chantier_client(request, societe, cd_cli):
|
||||||
|
query = "SELECT * FROM dem_devis WHERE societe = :societe AND cd_cli = :cd_cli order by date DESC LIMIT 1;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def update_client_dern_operation(request, societe, cd_cli, dern_operation):
|
||||||
|
if dern_operation != None:
|
||||||
|
d_operation = dern_operation.strftime('%Y/%m/%d')
|
||||||
|
query = "UPDATE clients SET dern_operation = :dern_operation, modif_le = modif_le WHERE societe=:societe AND cd_cli=:cd_cli;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'cd_cli': cd_cli, 'dern_operation': d_operation})
|
||||||
|
else:
|
||||||
|
query = "UPDATE clients SET dern_operation = NULL, modif_le = modif_le WHERE societe=:societe AND cd_cli=:cd_cli;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'cd_cli': cd_cli})
|
||||||
|
|
||||||
|
def delete_client_unused(request):
|
||||||
|
query = "DELETE FROM clients WHERE cd_cli <> 1 AND dern_operation IS NULL AND YEAR(cree_le) < YEAR(CURRENT_DATE()) - 5;"
|
||||||
|
execute_query(request, query, {})
|
||||||
|
|
||||||
|
def update_stats_delais(request, societe, date, groupe):
|
||||||
|
query = "CALL spUPD_STATS_DELAIS(:societe, :date, :groupe);"
|
||||||
|
execute_query(request, query, {'societe': societe, 'date': date, 'groupe': groupe})
|
||||||
|
|
||||||
|
def update_devis_statut_4(request):
|
||||||
|
# lire tutes les lignes de dem_devis mentionnant la commande
|
||||||
|
query = "SELECT * FROM dem_lig where comment like '% est COMMANDE %';"
|
||||||
|
devis_cdes = request.dbsession.execute(query, {}).fetchall()
|
||||||
|
|
||||||
|
for item in devis_cdes:
|
||||||
|
if item.COMMENT.find('!! DE') == 0:
|
||||||
|
# recupère le no de devis commandé
|
||||||
|
nodevis = item.COMMENT[5:11]
|
||||||
|
|
||||||
|
# maj status de dem_devis concernée
|
||||||
|
query = "UPDATE dem_devis SET status = 4, DATEMAJ = DATEMAJ WHERE societe = :societe AND no_id = :no_id AND status < 4;"
|
||||||
|
execute_query(request, query, {'societe': item.societe, 'no_id': item.NO_ID})
|
||||||
|
|
||||||
|
# maj status de devis concerné
|
||||||
|
query = "UPDATE devis SET status = 4, DATEMAJ = DATEMAJ WHERE societe = :societe AND no_id = :no_id AND status < 4;"
|
||||||
|
execute_query(request, query, {'societe': item.societe, 'no_id': nodevis})
|
||||||
@@ -1,52 +1,97 @@
|
|||||||
def includeme(config):
|
def includeme(config):
|
||||||
config.add_static_view('static', 'static', cache_max_age=3600)
|
config.add_static_view('static', 'static', cache_max_age=3600)
|
||||||
# agenda
|
# agenda
|
||||||
config.add_route('agenda', '/agenda/{date}')
|
config.add_route('agenda', '/agenda/{date}')
|
||||||
config.add_route('planning', '/planning/{date}')
|
config.add_route('planning', '/planning/{date}')
|
||||||
config.add_route('rdv_edit','/rdv_edit/{nodossier}/{nolig}')
|
config.add_route('rdv_edit','/rdv_edit/{nodossier}/{nolig}')
|
||||||
# default
|
# default
|
||||||
config.add_route('home', '/')
|
config.add_route('home', '/')
|
||||||
config.add_route('affiche_message','/affiche_message/{login}')
|
config.add_route('affiche_message','/affiche_message/{login}')
|
||||||
config.add_route('ajax_codepostal', '/ajax_codepostal')
|
config.add_route('ajax_article', '/ajax_article')
|
||||||
config.add_route('ajax_lookup', '/ajax_lookup')
|
config.add_route('ajax_client', '/ajax_client')
|
||||||
config.add_route('changer_mdp', '/changer_mdp')
|
config.add_route('ajax_codepostal', '/ajax_codepostal')
|
||||||
config.add_route('envoyer_mdp', '/envoyer_mdp')
|
config.add_route('ajax_lookup', '/ajax_lookup')
|
||||||
config.add_route('login', '/login')
|
config.add_route('ajax_texte', '/ajax_texte')
|
||||||
config.add_route('login_as', '/login_as/{login}')
|
config.add_route('changer_mdp', '/changer_mdp')
|
||||||
config.add_route('logout', '/logout')
|
config.add_route('envoyer_mdp', '/envoyer_mdp')
|
||||||
config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}')
|
config.add_route('login', '/login')
|
||||||
config.add_route('init_mdp', '/init_mdp/{user}/{lien}')
|
config.add_route('login_as', '/login_as/{login}')
|
||||||
# dossier
|
config.add_route('logout', '/logout')
|
||||||
config.add_route('demandes','/demandes')
|
config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}')
|
||||||
config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{nosection}/{nomfic}')
|
config.add_route('init_mdp', '/init_mdp/{user}/{lien}')
|
||||||
config.add_route('devis_view', '/devis_view/{nodossier}')
|
# devis
|
||||||
config.add_route('dossier_edit', '/dossier_edit/{nodossier}')
|
config.add_route('devis_ligne', '/devis_ligne/{type_ligne}/{nodevis}/{nolig}')
|
||||||
config.add_route('dossier_lookup', '/dossier_lookup')
|
config.add_route('devis_lig_mv', '/devis_lig_mv/{move}/{nodevis}/{nolig}')
|
||||||
config.add_route('dossier_select', '/dossier_select/{date}')
|
config.add_route('devis_list', '/devis_list/{societe}/{nodevis}')
|
||||||
config.add_route('dossier_selected', '/dossier_selected/{goto}/{date}/{nodossier}')
|
config.add_route('devis_create', '/devis_create/{nodossier}')
|
||||||
config.add_route('dossier_view', '/dossier_view/{nodossier}')
|
config.add_route('devis_nochantier', '/devis_nochantier/{societe}/{nodevis}/{nochantier}')
|
||||||
config.add_route('rdf_bill','/rdf_bill/{no_id}')
|
config.add_route('devis_web', '/devis_web/{nodevis}')
|
||||||
config.add_route('rdf_edit','/rdf_edit/{nodossier}/{date_inter}')
|
config.add_route('devis_view', '/devis_view/{nodevis}')
|
||||||
config.add_route('rdf_list','/rdf_list')
|
config.add_route('devis_preview', '/devis_preview/{nodevis}')
|
||||||
config.add_route('rdf_rapport','/rdf_rapport/{no_id}')
|
config.add_route('devis_select', '/devis_select/{date}')
|
||||||
config.add_route('rdf_view','/rdf_view/{no_id}')
|
config.add_route('devis_selected', '/devis_selected/{goto}/{date}/{nodevis}')
|
||||||
config.add_route('suivi_edit','/suivi_edit/{nodossier}/{nolig}')
|
config.add_route('factures_en_att','/factures_en_att')
|
||||||
config.add_route('upload_doc', '/upload_doc/{nodossier}')
|
config.add_route('facture_select', '/facture_select/{date}')
|
||||||
config.add_route('upload_img', '/upload_img/{norapport}/{nosection}')
|
config.add_route('facture_selected', '/facture_selected/{goto}/{date}/{nofacture}')
|
||||||
# parametres
|
# dossier
|
||||||
config.add_route('parametres', '/parametres')
|
config.add_route('demandes','/demandes')
|
||||||
config.add_route('connecter_a', '/connecter_a/{login}')
|
config.add_route('demandes_dl','/demandes_dl/{societe}/{email_from}/{email_uid}')
|
||||||
config.add_route('dashboard', '/dashboard')
|
config.add_route('dem_devis','/dem_devis')
|
||||||
config.add_route('emails_msg', '/emails_msg/{nolig}')
|
config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{origine}/{nomfic}')
|
||||||
config.add_route('emails_sent', '/emails_sent')
|
config.add_route('dern_suivis','/dern_suivis')
|
||||||
config.add_route('infrastructure', '/infrastructure')
|
config.add_route('dessin_edit','/dessin_edit/{nodossier}/{noligne}')
|
||||||
config.add_route('last_emailing', '/last_emailing')
|
config.add_route('dossier_edit', '/dossier_edit/{nodossier}')
|
||||||
config.add_route('orphans_de', '/orphans_de/{societe}')
|
config.add_route('dossier_lookup', '/dossier_lookup')
|
||||||
config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}')
|
config.add_route('dossier_select', '/dossier_select/{date}')
|
||||||
config.add_route('rdf_causes_list', '/rdf_causes_list')
|
config.add_route('dossier_selected', '/dossier_selected/{goto}/{date}/{nodossier}')
|
||||||
config.add_route('text_edit', '/text_edit/{text_id}')
|
config.add_route('dossier_view', '/dossier_view/{nodossier}')
|
||||||
config.add_route('text_list', '/text_list')
|
config.add_route('note_edit','/note_edit/{nodossier}/{noligne}')
|
||||||
config.add_route('text_view', '/text_view/{text_id}')
|
config.add_route('rdf_bill','/rdf_bill/{no_id}')
|
||||||
config.add_route('user_edit', '/user_edit/{cd_uti}')
|
config.add_route('rdf_client','/rdf_client/{no_id}')
|
||||||
config.add_route('users_list', '/users_list')
|
config.add_route('rdf_edit','/rdf_edit/{nodossier}/{date_inter}')
|
||||||
config.add_route('users_ua', '/users_ua')
|
config.add_route('rdf_list','/rdf_list')
|
||||||
|
config.add_route('rdf_nochantier','/rdf_nodossier/{no_id}')
|
||||||
|
config.add_route('rdf_rapport','/rdf_rapport/{no_id}')
|
||||||
|
config.add_route('rdf_view','/rdf_view/{no_id}')
|
||||||
|
config.add_route('rotate_img','/rotate_img/{nodossier}/{norapport}/{origine}/{nomfic}/{angle}')
|
||||||
|
config.add_route('suivi_edit','/suivi_edit/{nodossier}/{nolig}')
|
||||||
|
config.add_route('upload_doc', '/upload_doc/{nodossier}/{origine}')
|
||||||
|
config.add_route('upload_img', '/upload_img/{norapport}/{origine}')
|
||||||
|
config.add_route('upload_om', '/upload_om')
|
||||||
|
# parametres
|
||||||
|
config.add_route('parametres', '/parametres')
|
||||||
|
config.add_route('article_edit', '/article_edit/{ref}')
|
||||||
|
config.add_route('articles', '/articles')
|
||||||
|
config.add_route('cabinet_edit', '/cabinet_edit/{code}')
|
||||||
|
config.add_route('cabinets', '/cabinets')
|
||||||
|
config.add_route('connecter_a', '/connecter_a/{login}')
|
||||||
|
config.add_route('dashboard', '/dashboard')
|
||||||
|
config.add_route('emails_msg', '/emails_msg/{nolig}')
|
||||||
|
config.add_route('expert_edit', '/expert_edit/{code_cab}/{code_exp}')
|
||||||
|
config.add_route('rappels_rdv', '/rappels_rdv')
|
||||||
|
config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}')
|
||||||
|
config.add_route('rdf_causes', '/rdf_causes')
|
||||||
|
config.add_route('societe_edit', '/societe_edit/{societe}')
|
||||||
|
config.add_route('societes', '/societes')
|
||||||
|
config.add_route('text_edit', '/text_edit/{text_id}')
|
||||||
|
config.add_route('text_list', '/text_list')
|
||||||
|
config.add_route('text_view', '/text_view/{text_id}')
|
||||||
|
config.add_route('tarif_edit', '/tarif_edit/{groupe}/{ref}')
|
||||||
|
config.add_route('tarifs', '/tarifs/{groupe}')
|
||||||
|
config.add_route('tarifs_import', '/tarifs_import')
|
||||||
|
config.add_route('user_edit', '/user_edit/{cd_uti}')
|
||||||
|
config.add_route('users', '/users')
|
||||||
|
config.add_route('users_ua', '/users_ua')
|
||||||
|
|
||||||
|
# stats
|
||||||
|
config.add_route('stats', '/stats')
|
||||||
|
config.add_route('stats_dossiers', '/stats_dossiers/{societe}')
|
||||||
|
config.add_route('stats_delais', '/stats_delais/{societe}')
|
||||||
|
config.add_route('ca_groupes', '/ca_groupes/{societe}')
|
||||||
|
config.add_route('ca_clients', '/ca_clients/{societe}')
|
||||||
|
config.add_route('delais_pourcentage', '/delais_pourcentage/{societe}')
|
||||||
|
config.add_route('pourcentage_devis', '/pourcentage_devis/{societe}')
|
||||||
|
|
||||||
|
# utils
|
||||||
|
config.add_route('batch_nuit', '/batch_nuit/{param}')
|
||||||
|
config.add_route('batch_test', '/batch_test/{param}')
|
||||||
|
|||||||
@@ -1,234 +1,317 @@
|
|||||||
/* style.less */
|
/* style.less */
|
||||||
@error: #b94a48;
|
@error: #b94a48;
|
||||||
|
|
||||||
/* ajout pour Nicola */
|
/* ajout pour Nicola */
|
||||||
@media (max-width: 992px) {
|
@media (max-width: 992px) {
|
||||||
.navbar-header {
|
.navbar-header {
|
||||||
float: none;
|
float: none;
|
||||||
}
|
}
|
||||||
.navbar-left,.navbar-right {
|
.navbar-left,.navbar-right {
|
||||||
float: none !important;
|
float: none !important;
|
||||||
}
|
}
|
||||||
.navbar-toggle {
|
.navbar-toggle {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.navbar-collapse {
|
.navbar-collapse {
|
||||||
border-top: 1px solid transparent;
|
border-top: 1px solid transparent;
|
||||||
box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
|
box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
|
||||||
}
|
}
|
||||||
.navbar-fixed-top {
|
.navbar-fixed-top {
|
||||||
top: 0;
|
top: 0;
|
||||||
border-width: 0 0 1px;
|
border-width: 0 0 1px;
|
||||||
}
|
}
|
||||||
.navbar-collapse.collapse {
|
.navbar-collapse.collapse {
|
||||||
display: none!important;
|
display: none!important;
|
||||||
}
|
}
|
||||||
.navbar-nav {
|
.navbar-nav {
|
||||||
float: none!important;
|
float: none!important;
|
||||||
margin-top: 7.5px;
|
margin-top: 7.5px;
|
||||||
}
|
}
|
||||||
.navbar-nav>li {
|
.navbar-nav>li {
|
||||||
float: none;
|
float: none;
|
||||||
}
|
}
|
||||||
.navbar-nav>li>a {
|
.navbar-nav>li>a {
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
}
|
}
|
||||||
.collapse.in{
|
.collapse.in{
|
||||||
display:block !important;
|
display:block !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar {
|
.navbar {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
background-color: #fe9900;
|
background-color: #fe9900;
|
||||||
color: #404040 !important;
|
color: #404040 !important;
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
border: 0;
|
border: 0;
|
||||||
font-size: 20px !important;
|
font-size: 20px !important;
|
||||||
line-height: 1.42857143 !important;
|
line-height: 1.42857143 !important;
|
||||||
letter-spacing: 4px;
|
letter-spacing: 4px;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar li a, .navbar .navbar-brand {
|
.navbar li a, .navbar .navbar-brand {
|
||||||
color: #404040 !important;
|
color: #404040 !important;
|
||||||
font-size: 14px !important;
|
font-size: 14px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-nav li a:hover, .navbar-nav li.active a {
|
.navbar-nav li a:hover, .navbar-nav li.active a {
|
||||||
color: #f4511e !important;
|
color: #f4511e !important;
|
||||||
font-size: 14px !important;
|
font-size: 14px !important;
|
||||||
background-color: #fff !important;
|
background-color: #fff !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-default .navbar-toggle {
|
.navbar-default .navbar-toggle {
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
color: #fff !important;
|
color: #fff !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dropdown */
|
/* Dropdown */
|
||||||
.open .dropdown-toggle {
|
.open .dropdown-toggle {
|
||||||
color: #000000 ;
|
color: #000000 ;
|
||||||
background-color: #555 !important;
|
background-color: #555 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dropdown links */
|
/* Dropdown links */
|
||||||
.dropdown-menu li a {
|
.dropdown-menu li a {
|
||||||
color: #000000 !important;
|
color: #000000 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* On hover, the dropdown links will turn red */
|
/* On hover, the dropdown links will turn red */
|
||||||
.dropdown-menu li a:hover {
|
.dropdown-menu li a:hover {
|
||||||
background-color: #f4511e !important;
|
background-color: #f4511e !important;
|
||||||
color: #000000 !important;
|
color: #000000 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* push modal dialog down the viewport */
|
/* push modal dialog down the viewport */
|
||||||
.modal-dialog {
|
.modal-dialog {
|
||||||
top:7%;
|
top:7%;
|
||||||
}
|
}
|
||||||
|
.type-ligne-panel {
|
||||||
.footer {
|
padding-left: 25px;
|
||||||
background-color: #2f2f2f;
|
margin-top: 5px;
|
||||||
color: #ffffff;
|
margin-bottom: 20px;
|
||||||
padding-top: 2em;
|
display: none;
|
||||||
padding-bottom: 1em;
|
}
|
||||||
}
|
|
||||||
|
.footer {
|
||||||
.form-group {
|
background-color: #2f2f2f;
|
||||||
label.error {
|
color: #ffffff;
|
||||||
color: @error;
|
padding-top: 2em;
|
||||||
}
|
padding-bottom: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.gly-spin {
|
.form-group {
|
||||||
-webkit-animation: spin 2s infinite linear;
|
label.error {
|
||||||
-moz-animation: spin 2s infinite linear;
|
color: @error;
|
||||||
-o-animation: spin 2s infinite linear;
|
}
|
||||||
animation: spin 2s infinite linear;
|
}
|
||||||
}
|
|
||||||
|
.gly-spin {
|
||||||
#bg {
|
-webkit-animation: spin 2s infinite linear;
|
||||||
position: fixed;
|
-moz-animation: spin 2s infinite linear;
|
||||||
top: 0;
|
-o-animation: spin 2s infinite linear;
|
||||||
left: 0;
|
animation: spin 2s infinite linear;
|
||||||
|
}
|
||||||
/* Set up proportionate scaling */
|
|
||||||
width: 100%;
|
#bg {
|
||||||
height: auto;
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
/* Set rules to fill background */
|
left: 0;
|
||||||
min-width: 100%;
|
|
||||||
min-height: 100%;
|
/* Set up proportionate scaling */
|
||||||
}
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
.logo {
|
|
||||||
height: 60px;
|
/* Set rules to fill background */
|
||||||
}
|
min-width: 100%;
|
||||||
|
min-height: 100%;
|
||||||
.logo-primary {
|
}
|
||||||
color: #337ab7;
|
|
||||||
font-size: 50px;
|
.logo {
|
||||||
}
|
height: 60px;
|
||||||
.logo-info {
|
}
|
||||||
color: #5BC0DE;
|
|
||||||
font-size: 50px;
|
.logo-primary {
|
||||||
}
|
color: #337ab7;
|
||||||
.logo-success {
|
font-size: 50px;
|
||||||
color: #5CB85C;
|
}
|
||||||
font-size: 50px;
|
.logo-info {
|
||||||
}
|
color: #5BC0DE;
|
||||||
.logo-danger {
|
font-size: 50px;
|
||||||
color: #D9534F;
|
}
|
||||||
font-size: 50px;
|
.logo-success {
|
||||||
}
|
color: #5CB85C;
|
||||||
.logo-warning {
|
font-size: 50px;
|
||||||
color: #F0AD4E;
|
}
|
||||||
font-size: 50px;
|
.logo-danger {
|
||||||
}
|
color: #D9534F;
|
||||||
.logo-small {
|
font-size: 50px;
|
||||||
font-size: 50px;
|
}
|
||||||
}
|
.logo-warning {
|
||||||
.bg-PE {
|
color: #F0AD4E;
|
||||||
background-color: #ffffb3 !important;
|
font-size: 50px;
|
||||||
color: black;
|
}
|
||||||
}
|
.logo-small {
|
||||||
.bg-ME {
|
font-size: 50px;
|
||||||
background-color: #ffe44d !important;
|
}
|
||||||
color: black;
|
.bg-PE {
|
||||||
}
|
background-color: #ffffb3 !important;
|
||||||
.bg-PL {
|
color: black;
|
||||||
background-color: #b3ff66 !important;
|
}
|
||||||
color: black;
|
.bg-ME {
|
||||||
}
|
background-color: #ffe44d !important;
|
||||||
.bg-PO {
|
color: black;
|
||||||
background-color: #b1dae7 !important;
|
}
|
||||||
color: black;
|
.bg-PL {
|
||||||
}
|
background-color: #b3ff66 !important;
|
||||||
.bg-CD {
|
color: black;
|
||||||
background-color: #ffb3cc !important;
|
}
|
||||||
color: black;
|
.bg-PO {
|
||||||
}
|
background-color: #b1dae7 !important;
|
||||||
|
color: black;
|
||||||
.new-page {
|
}
|
||||||
page-break-before: always;
|
.bg-CD {
|
||||||
}
|
background-color: #ffb3cc !important;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
#signature_img {
|
.bg-compta {
|
||||||
width: 350px;
|
background-color: SlateBlue !important;
|
||||||
height: 150px;
|
color: white;
|
||||||
padding: 20px;
|
}
|
||||||
}
|
|
||||||
|
.bg-gest {
|
||||||
.gly-spin {
|
background-color: Coral !important;
|
||||||
-webkit-animation: spin 2s infinite linear;
|
color: white;
|
||||||
-moz-animation: spin 2s infinite linear;
|
}
|
||||||
-o-animation: spin 2s infinite linear;
|
|
||||||
animation: spin 2s infinite linear;
|
.bg-prod {
|
||||||
}
|
background-color: SkyBlue !important;
|
||||||
|
color: white;
|
||||||
@-moz-keyframes spin {
|
}
|
||||||
0% {
|
|
||||||
-moz-transform: rotate(0deg);
|
.bg-0, .bg-1 {
|
||||||
}
|
background-color: khaki !important;
|
||||||
100% {
|
color: black;
|
||||||
-moz-transform: rotate(359deg);
|
}
|
||||||
}
|
|
||||||
}
|
.bg-2, .bg-3 {
|
||||||
@-webkit-keyframes spin {
|
background-color: orange !important;
|
||||||
0% {
|
color: black;
|
||||||
-webkit-transform: rotate(0deg);
|
}
|
||||||
}
|
|
||||||
100% {
|
.bg-4, .bg-5 {
|
||||||
-webkit-transform: rotate(359deg);
|
background-color: lightcoral !important;
|
||||||
}
|
color: black;
|
||||||
}
|
}
|
||||||
@-o-keyframes spin {
|
|
||||||
0% {
|
.bg-6, .bg-7 {
|
||||||
-o-transform: rotate(0deg);
|
background-color: CornflowerBlue !important;
|
||||||
}
|
color: black;
|
||||||
100% {
|
}
|
||||||
-o-transform: rotate(359deg);
|
|
||||||
}
|
.bg-8 {
|
||||||
}
|
background-color: LawnGreen !important;
|
||||||
@keyframes spin {
|
color: black;
|
||||||
0% {
|
}
|
||||||
-webkit-transform: rotate(0deg);
|
|
||||||
transform: rotate(0deg);
|
.bg-10, .bg-11, .bg-12 {
|
||||||
}
|
background-color: gray !important;
|
||||||
100% {
|
color: black;
|
||||||
-webkit-transform: rotate(359deg);
|
}
|
||||||
transform: rotate(359deg);
|
|
||||||
}
|
.new-page {
|
||||||
}
|
page-break-before: always;
|
||||||
|
}
|
||||||
|
|
||||||
/* ne pas affichier l'url after the link */
|
|
||||||
@media print {
|
|
||||||
a[href]:after {
|
#signature_img {
|
||||||
content: none !important;
|
width: 350px;
|
||||||
}
|
height: 150px;
|
||||||
}
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gly-spin {
|
||||||
|
-webkit-animation: spin 2s infinite linear;
|
||||||
|
-moz-animation: spin 2s infinite linear;
|
||||||
|
-o-animation: spin 2s infinite linear;
|
||||||
|
animation: spin 2s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-moz-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-moz-transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-o-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-o-transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-o-transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#dessin {
|
||||||
|
width: 1140px;
|
||||||
|
height: 1140px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ne pas affichier l'url after the link */
|
||||||
|
@media print {
|
||||||
|
a[href]:after {
|
||||||
|
content: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box {
|
||||||
|
display: block;
|
||||||
|
min-height: 70px;
|
||||||
|
background: #fff;
|
||||||
|
width: 100%;
|
||||||
|
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: 2px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
.info-box-icon {
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
height: 70px;
|
||||||
|
width: 70px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 40px;
|
||||||
|
line-height: 70px;
|
||||||
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
.info-box-content {
|
||||||
|
padding: 5px 5px;
|
||||||
|
margin-left: 80px;
|
||||||
|
}
|
||||||
5558
mondumas/static/dist/AdminLTE-2.4.18/css/AdminLTE.css
vendored
Normal file
8
mondumas/static/dist/AdminLTE-2.4.18/css/AdminLTE.min.css
vendored
Normal file
1260
mondumas/static/dist/AdminLTE-2.4.18/css/alt/AdminLTE-bootstrap-social.css
vendored
Normal file
1
mondumas/static/dist/AdminLTE-2.4.18/css/alt/AdminLTE-bootstrap-social.min.css
vendored
Normal file
93
mondumas/static/dist/AdminLTE-2.4.18/css/alt/AdminLTE-fullcalendar.css
vendored
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Plugin: Full Calendar
|
||||||
|
* ---------------------
|
||||||
|
*/
|
||||||
|
.fc-button {
|
||||||
|
background: #f4f4f4;
|
||||||
|
background-image: none;
|
||||||
|
color: #444;
|
||||||
|
border-color: #ddd;
|
||||||
|
border-bottom-color: #ddd;
|
||||||
|
}
|
||||||
|
.fc-button:hover,
|
||||||
|
.fc-button:active,
|
||||||
|
.fc-button.hover {
|
||||||
|
background-color: #e9e9e9;
|
||||||
|
}
|
||||||
|
.fc-header-title h2 {
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 1.6em;
|
||||||
|
color: #666;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
.fc-header-right {
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
.fc-header-left {
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
.fc-widget-header {
|
||||||
|
background: #fafafa;
|
||||||
|
}
|
||||||
|
.fc-grid {
|
||||||
|
width: 100%;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
.fc-widget-header:first-of-type,
|
||||||
|
.fc-widget-content:first-of-type {
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 0;
|
||||||
|
}
|
||||||
|
.fc-widget-header:last-of-type,
|
||||||
|
.fc-widget-content:last-of-type {
|
||||||
|
border-right: 0;
|
||||||
|
}
|
||||||
|
.fc-toolbar {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.fc-day-number {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 300;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
.fc-color-picker {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.fc-color-picker > li {
|
||||||
|
float: left;
|
||||||
|
font-size: 30px;
|
||||||
|
margin-right: 5px;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
.fc-color-picker > li .fa {
|
||||||
|
-webkit-transition: -webkit-transform linear 0.3s;
|
||||||
|
-moz-transition: -moz-transform linear 0.3s;
|
||||||
|
-o-transition: -o-transform linear 0.3s;
|
||||||
|
transition: transform linear 0.3s;
|
||||||
|
}
|
||||||
|
.fc-color-picker > li .fa:hover {
|
||||||
|
-webkit-transform: rotate(30deg);
|
||||||
|
-ms-transform: rotate(30deg);
|
||||||
|
-o-transform: rotate(30deg);
|
||||||
|
transform: rotate(30deg);
|
||||||
|
}
|
||||||
|
#add-new-event {
|
||||||
|
-webkit-transition: all linear 0.3s;
|
||||||
|
-o-transition: all linear 0.3s;
|
||||||
|
transition: all linear 0.3s;
|
||||||
|
}
|
||||||
|
.external-event {
|
||||||
|
padding: 5px 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
|
||||||
|
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: move;
|
||||||
|
}
|
||||||
|
.external-event:hover {
|
||||||
|
box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/alt/AdminLTE-fullcalendar.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;-moz-transition:-moz-transform linear .3s;-o-transition:-o-transform linear .3s;transition:transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;-o-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}
|
||||||
100
mondumas/static/dist/AdminLTE-2.4.18/css/alt/AdminLTE-select2.css
vendored
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Plugin: Select2
|
||||||
|
* ---------------
|
||||||
|
*/
|
||||||
|
.select2-container--default.select2-container--focus,
|
||||||
|
.select2-selection.select2-container--focus,
|
||||||
|
.select2-container--default:focus,
|
||||||
|
.select2-selection:focus,
|
||||||
|
.select2-container--default:active,
|
||||||
|
.select2-selection:active {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single,
|
||||||
|
.select2-selection .select2-selection--single {
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
border-radius: 0;
|
||||||
|
padding: 6px 12px;
|
||||||
|
height: 34px;
|
||||||
|
}
|
||||||
|
.select2-container--default.select2-container--open {
|
||||||
|
border-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.select2-dropdown {
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-results__option--highlighted[aria-selected] {
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.select2-results__option {
|
||||||
|
padding: 6px 12px;
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
}
|
||||||
|
.select2-container .select2-selection--single .select2-selection__rendered {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
height: auto;
|
||||||
|
margin-top: -4px;
|
||||||
|
}
|
||||||
|
.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
|
||||||
|
padding-right: 6px;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow {
|
||||||
|
height: 28px;
|
||||||
|
right: 3px;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__arrow b {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.select2-dropdown .select2-search__field,
|
||||||
|
.select2-search--inline .select2-search__field {
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.select2-dropdown .select2-search__field:focus,
|
||||||
|
.select2-search--inline .select2-search__field:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
.select2-container--default.select2-container--focus .select2-selection--multiple,
|
||||||
|
.select2-container--default .select2-search--dropdown .select2-search__field {
|
||||||
|
border-color: #3c8dbc !important;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-results__option[aria-disabled=true] {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-results__option[aria-selected=true] {
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-results__option[aria-selected=true],
|
||||||
|
.select2-container--default .select2-results__option[aria-selected=true]:hover {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--multiple {
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--multiple:focus {
|
||||||
|
border-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.select2-container--default.select2-container--focus .select2-selection--multiple {
|
||||||
|
border-color: #d2d6de;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
border-color: #367fa9;
|
||||||
|
padding: 1px 10px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
|
||||||
|
margin-right: 5px;
|
||||||
|
color: rgba(255, 255, 255, 0.7);
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.select2-container .select2-selection--single .select2-selection__rendered {
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/alt/AdminLTE-select2.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc !important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}
|
||||||
4084
mondumas/static/dist/AdminLTE-2.4.18/css/alt/AdminLTE-without-plugins.css
vendored
Normal file
9
mondumas/static/dist/AdminLTE-2.4.18/css/alt/AdminLTE-without-plugins.min.css
vendored
Normal file
1782
mondumas/static/dist/AdminLTE-2.4.18/css/skins/_all-skins.css
vendored
Normal file
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/_all-skins.min.css
vendored
Normal file
172
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-black-light.css
vendored
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Black
|
||||||
|
* -----------
|
||||||
|
*/
|
||||||
|
/* skin-black navbar */
|
||||||
|
.skin-black-light .main-header {
|
||||||
|
-webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
|
||||||
|
box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar-toggle {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar-brand {
|
||||||
|
color: #333;
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar {
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar .nav > li > a {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-black-light .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-black-light .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-black-light .main-header .navbar .nav .open > a,
|
||||||
|
.skin-black-light .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-black-light .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-black-light .main-header .navbar .nav > .active > a {
|
||||||
|
background: #ffffff;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #999999;
|
||||||
|
background: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar > .sidebar-toggle {
|
||||||
|
color: #333;
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar .navbar-nav > li > a {
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav > li > a,
|
||||||
|
.skin-black-light .main-header .navbar .navbar-right > li > a {
|
||||||
|
border-left: 1px solid #d2d6de;
|
||||||
|
border-right-width: 0;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .logo {
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: #333333;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .logo:hover {
|
||||||
|
background-color: #fcfcfc;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-black-light .main-header .logo {
|
||||||
|
background-color: #222222;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header .logo:hover {
|
||||||
|
background-color: #1f1f1f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-black-light .main-header li.user-header {
|
||||||
|
background-color: #222;
|
||||||
|
}
|
||||||
|
.skin-black-light .content-header {
|
||||||
|
background: transparent;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
.skin-black-light .wrapper,
|
||||||
|
.skin-black-light .main-sidebar,
|
||||||
|
.skin-black-light .left-side {
|
||||||
|
background-color: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-black-light .main-sidebar {
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-black-light .user-panel > .info,
|
||||||
|
.skin-black-light .user-panel > .info > a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu > li {
|
||||||
|
-webkit-transition: border-left-color 0.3s ease;
|
||||||
|
-o-transition: border-left-color 0.3s ease;
|
||||||
|
transition: border-left-color 0.3s ease;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu > li.header {
|
||||||
|
color: #848484;
|
||||||
|
background: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu > li:hover > a,
|
||||||
|
.skin-black-light .sidebar-menu > li.active > a {
|
||||||
|
color: #000000;
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu > li.active {
|
||||||
|
border-left-color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu > li > .treeview-menu {
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #777777;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-black-light .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-menu .treeview-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-form input[type="text"],
|
||||||
|
.skin-black-light .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-black-light .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
|
||||||
|
border-left: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-black-light.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-black-light .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header .logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||||
161
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-black.css
vendored
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Black
|
||||||
|
* -----------
|
||||||
|
*/
|
||||||
|
/* skin-black navbar */
|
||||||
|
.skin-black .main-header {
|
||||||
|
-webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
|
||||||
|
box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar-toggle {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar-brand {
|
||||||
|
color: #333;
|
||||||
|
border-right: 1px solid #eee;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar {
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar .nav > li > a {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-black .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-black .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-black .main-header .navbar .nav .open > a,
|
||||||
|
.skin-black .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-black .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-black .main-header .navbar .nav > .active > a {
|
||||||
|
background: #ffffff;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #999999;
|
||||||
|
background: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar > .sidebar-toggle {
|
||||||
|
color: #333;
|
||||||
|
border-right: 1px solid #eee;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar .navbar-nav > li > a {
|
||||||
|
border-right: 1px solid #eee;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav > li > a,
|
||||||
|
.skin-black .main-header .navbar .navbar-right > li > a {
|
||||||
|
border-left: 1px solid #eee;
|
||||||
|
border-right-width: 0;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .logo {
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: #333333;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
border-right: 1px solid #eee;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .logo:hover {
|
||||||
|
background-color: #fcfcfc;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-black .main-header .logo {
|
||||||
|
background-color: #222222;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
.skin-black .main-header .logo:hover {
|
||||||
|
background-color: #1f1f1f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-black .main-header li.user-header {
|
||||||
|
background-color: #222;
|
||||||
|
}
|
||||||
|
.skin-black .content-header {
|
||||||
|
background: transparent;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
.skin-black .wrapper,
|
||||||
|
.skin-black .main-sidebar,
|
||||||
|
.skin-black .left-side {
|
||||||
|
background-color: #222d32;
|
||||||
|
}
|
||||||
|
.skin-black .user-panel > .info,
|
||||||
|
.skin-black .user-panel > .info > a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-menu > li.header {
|
||||||
|
color: #4b646f;
|
||||||
|
background: #1a2226;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-menu > li:hover > a,
|
||||||
|
.skin-black .sidebar-menu > li.active > a,
|
||||||
|
.skin-black .sidebar-menu > li.menu-open > a {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #1e282c;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-menu > li.active > a {
|
||||||
|
border-left-color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-menu > li > .treeview-menu {
|
||||||
|
margin: 0 1px;
|
||||||
|
background: #2c3b41;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar a {
|
||||||
|
color: #b8c7ce;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #8aa4af;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-black .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #374850;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-form input[type="text"],
|
||||||
|
.skin-black .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #374850;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-black .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
.skin-black .pace .pace-progress {
|
||||||
|
background: #222;
|
||||||
|
}
|
||||||
|
.skin-black .pace .pace-activity {
|
||||||
|
border-top-color: #222;
|
||||||
|
border-left-color: #222;
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-black.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header .logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}
|
||||||
163
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-blue-light.css
vendored
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Blue
|
||||||
|
* ----------
|
||||||
|
*/
|
||||||
|
.skin-blue-light .main-header .navbar {
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-blue-light .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-blue-light .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-blue-light .main-header .navbar .nav .open > a,
|
||||||
|
.skin-blue-light .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-blue-light .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-blue-light .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #367fa9;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-blue-light .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #367fa9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .logo {
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header .logo:hover {
|
||||||
|
background-color: #3b8ab8;
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-header li.user-header {
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.skin-blue-light .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-blue-light .wrapper,
|
||||||
|
.skin-blue-light .main-sidebar,
|
||||||
|
.skin-blue-light .left-side {
|
||||||
|
background-color: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-sidebar {
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-blue-light .user-panel > .info,
|
||||||
|
.skin-blue-light .user-panel > .info > a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu > li {
|
||||||
|
-webkit-transition: border-left-color 0.3s ease;
|
||||||
|
-o-transition: border-left-color 0.3s ease;
|
||||||
|
transition: border-left-color 0.3s ease;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu > li.header {
|
||||||
|
color: #848484;
|
||||||
|
background: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu > li:hover > a,
|
||||||
|
.skin-blue-light .sidebar-menu > li.active > a {
|
||||||
|
color: #000000;
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu > li.active {
|
||||||
|
border-left-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu > li > .treeview-menu {
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #777777;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-blue-light .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-menu .treeview-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-form input[type="text"],
|
||||||
|
.skin-blue-light .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-blue-light .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
|
||||||
|
border-left: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-blue-light .main-footer {
|
||||||
|
border-top-color: #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-blue.layout-top-nav .main-header > .logo {
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-blue.layout-top-nav .main-header > .logo:hover {
|
||||||
|
background-color: #3b8ab8;
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-blue-light.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}
|
||||||
142
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-blue.css
vendored
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Blue
|
||||||
|
* ----------
|
||||||
|
*/
|
||||||
|
.skin-blue .main-header .navbar {
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-blue .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-blue .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-blue .main-header .navbar .nav .open > a,
|
||||||
|
.skin-blue .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-blue .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-blue .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #367fa9;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-blue .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #367fa9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .logo {
|
||||||
|
background-color: #367fa9;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-blue .main-header .logo:hover {
|
||||||
|
background-color: #357ca5;
|
||||||
|
}
|
||||||
|
.skin-blue .main-header li.user-header {
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.skin-blue .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-blue .wrapper,
|
||||||
|
.skin-blue .main-sidebar,
|
||||||
|
.skin-blue .left-side {
|
||||||
|
background-color: #222d32;
|
||||||
|
}
|
||||||
|
.skin-blue .user-panel > .info,
|
||||||
|
.skin-blue .user-panel > .info > a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-menu > li.header {
|
||||||
|
color: #4b646f;
|
||||||
|
background: #1a2226;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-menu > li:hover > a,
|
||||||
|
.skin-blue .sidebar-menu > li.active > a,
|
||||||
|
.skin-blue .sidebar-menu > li.menu-open > a {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #1e282c;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-menu > li.active > a {
|
||||||
|
border-left-color: #3c8dbc;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-menu > li > .treeview-menu {
|
||||||
|
margin: 0 1px;
|
||||||
|
background: #2c3b41;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar a {
|
||||||
|
color: #b8c7ce;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #8aa4af;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-blue .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #374850;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-form input[type="text"],
|
||||||
|
.skin-blue .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #374850;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-blue .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
.skin-blue.layout-top-nav .main-header > .logo {
|
||||||
|
background-color: #3c8dbc;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-blue.layout-top-nav .main-header > .logo:hover {
|
||||||
|
background-color: #3b8ab8;
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-blue.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}
|
||||||
152
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-green-light.css
vendored
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Green
|
||||||
|
* -----------
|
||||||
|
*/
|
||||||
|
.skin-green-light .main-header .navbar {
|
||||||
|
background-color: #00a65a;
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-green-light .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-green-light .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-green-light .main-header .navbar .nav .open > a,
|
||||||
|
.skin-green-light .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-green-light .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-green-light .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #008d4c;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-green-light .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #008d4c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .logo {
|
||||||
|
background-color: #00a65a;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header .logo:hover {
|
||||||
|
background-color: #00a157;
|
||||||
|
}
|
||||||
|
.skin-green-light .main-header li.user-header {
|
||||||
|
background-color: #00a65a;
|
||||||
|
}
|
||||||
|
.skin-green-light .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-green-light .wrapper,
|
||||||
|
.skin-green-light .main-sidebar,
|
||||||
|
.skin-green-light .left-side {
|
||||||
|
background-color: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-green-light .main-sidebar {
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-green-light .user-panel > .info,
|
||||||
|
.skin-green-light .user-panel > .info > a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu > li {
|
||||||
|
-webkit-transition: border-left-color 0.3s ease;
|
||||||
|
-o-transition: border-left-color 0.3s ease;
|
||||||
|
transition: border-left-color 0.3s ease;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu > li.header {
|
||||||
|
color: #848484;
|
||||||
|
background: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu > li:hover > a,
|
||||||
|
.skin-green-light .sidebar-menu > li.active > a {
|
||||||
|
color: #000000;
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu > li.active {
|
||||||
|
border-left-color: #00a65a;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu > li > .treeview-menu {
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #777777;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-green-light .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-menu .treeview-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-form input[type="text"],
|
||||||
|
.skin-green-light .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-green-light .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
|
||||||
|
border-left: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-green-light.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||||
134
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-green.css
vendored
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Green
|
||||||
|
* -----------
|
||||||
|
*/
|
||||||
|
.skin-green .main-header .navbar {
|
||||||
|
background-color: #00a65a;
|
||||||
|
}
|
||||||
|
.skin-green .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-green .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-green .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-green .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-green .main-header .navbar .nav .open > a,
|
||||||
|
.skin-green .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-green .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-green .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-green .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-green .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-green .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-green .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #008d4c;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-green .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-green .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-green .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #008d4c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-green .main-header .logo {
|
||||||
|
background-color: #008d4c;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-green .main-header .logo:hover {
|
||||||
|
background-color: #008749;
|
||||||
|
}
|
||||||
|
.skin-green .main-header li.user-header {
|
||||||
|
background-color: #00a65a;
|
||||||
|
}
|
||||||
|
.skin-green .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-green .wrapper,
|
||||||
|
.skin-green .main-sidebar,
|
||||||
|
.skin-green .left-side {
|
||||||
|
background-color: #222d32;
|
||||||
|
}
|
||||||
|
.skin-green .user-panel > .info,
|
||||||
|
.skin-green .user-panel > .info > a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-menu > li.header {
|
||||||
|
color: #4b646f;
|
||||||
|
background: #1a2226;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-menu > li:hover > a,
|
||||||
|
.skin-green .sidebar-menu > li.active > a,
|
||||||
|
.skin-green .sidebar-menu > li.menu-open > a {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #1e282c;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-menu > li.active > a {
|
||||||
|
border-left-color: #00a65a;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-menu > li > .treeview-menu {
|
||||||
|
margin: 0 1px;
|
||||||
|
background: #2c3b41;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar a {
|
||||||
|
color: #b8c7ce;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #8aa4af;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-green .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #374850;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-form input[type="text"],
|
||||||
|
.skin-green .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #374850;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-green .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-green.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}
|
||||||
152
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-purple-light.css
vendored
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Purple
|
||||||
|
* ------------
|
||||||
|
*/
|
||||||
|
.skin-purple-light .main-header .navbar {
|
||||||
|
background-color: #605ca8;
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-purple-light .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-purple-light .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-purple-light .main-header .navbar .nav .open > a,
|
||||||
|
.skin-purple-light .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-purple-light .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-purple-light .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #555299;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-purple-light .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #555299;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .logo {
|
||||||
|
background-color: #605ca8;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header .logo:hover {
|
||||||
|
background-color: #5d59a6;
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-header li.user-header {
|
||||||
|
background-color: #605ca8;
|
||||||
|
}
|
||||||
|
.skin-purple-light .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-purple-light .wrapper,
|
||||||
|
.skin-purple-light .main-sidebar,
|
||||||
|
.skin-purple-light .left-side {
|
||||||
|
background-color: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-purple-light .main-sidebar {
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-purple-light .user-panel > .info,
|
||||||
|
.skin-purple-light .user-panel > .info > a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu > li {
|
||||||
|
-webkit-transition: border-left-color 0.3s ease;
|
||||||
|
-o-transition: border-left-color 0.3s ease;
|
||||||
|
transition: border-left-color 0.3s ease;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu > li.header {
|
||||||
|
color: #848484;
|
||||||
|
background: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu > li:hover > a,
|
||||||
|
.skin-purple-light .sidebar-menu > li.active > a {
|
||||||
|
color: #000000;
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu > li.active {
|
||||||
|
border-left-color: #605ca8;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu > li > .treeview-menu {
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #777777;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-purple-light .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-menu .treeview-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-form input[type="text"],
|
||||||
|
.skin-purple-light .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-purple-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-purple-light .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
|
||||||
|
border-left: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-purple-light.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||||
134
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-purple.css
vendored
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Purple
|
||||||
|
* ------------
|
||||||
|
*/
|
||||||
|
.skin-purple .main-header .navbar {
|
||||||
|
background-color: #605ca8;
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-purple .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-purple .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-purple .main-header .navbar .nav .open > a,
|
||||||
|
.skin-purple .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-purple .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-purple .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #555299;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-purple .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #555299;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .logo {
|
||||||
|
background-color: #555299;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-purple .main-header .logo:hover {
|
||||||
|
background-color: #545096;
|
||||||
|
}
|
||||||
|
.skin-purple .main-header li.user-header {
|
||||||
|
background-color: #605ca8;
|
||||||
|
}
|
||||||
|
.skin-purple .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-purple .wrapper,
|
||||||
|
.skin-purple .main-sidebar,
|
||||||
|
.skin-purple .left-side {
|
||||||
|
background-color: #222d32;
|
||||||
|
}
|
||||||
|
.skin-purple .user-panel > .info,
|
||||||
|
.skin-purple .user-panel > .info > a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-menu > li.header {
|
||||||
|
color: #4b646f;
|
||||||
|
background: #1a2226;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-menu > li:hover > a,
|
||||||
|
.skin-purple .sidebar-menu > li.active > a,
|
||||||
|
.skin-purple .sidebar-menu > li.menu-open > a {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #1e282c;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-menu > li.active > a {
|
||||||
|
border-left-color: #605ca8;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-menu > li > .treeview-menu {
|
||||||
|
margin: 0 1px;
|
||||||
|
background: #2c3b41;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar a {
|
||||||
|
color: #b8c7ce;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #8aa4af;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-purple .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #374850;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-form input[type="text"],
|
||||||
|
.skin-purple .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #374850;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-purple .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-purple.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}
|
||||||
152
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-red-light.css
vendored
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Red
|
||||||
|
* ---------
|
||||||
|
*/
|
||||||
|
.skin-red-light .main-header .navbar {
|
||||||
|
background-color: #dd4b39;
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-red-light .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-red-light .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-red-light .main-header .navbar .nav .open > a,
|
||||||
|
.skin-red-light .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-red-light .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-red-light .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #d73925;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-red-light .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #d73925;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .logo {
|
||||||
|
background-color: #dd4b39;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header .logo:hover {
|
||||||
|
background-color: #dc4735;
|
||||||
|
}
|
||||||
|
.skin-red-light .main-header li.user-header {
|
||||||
|
background-color: #dd4b39;
|
||||||
|
}
|
||||||
|
.skin-red-light .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-red-light .wrapper,
|
||||||
|
.skin-red-light .main-sidebar,
|
||||||
|
.skin-red-light .left-side {
|
||||||
|
background-color: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-red-light .main-sidebar {
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-red-light .user-panel > .info,
|
||||||
|
.skin-red-light .user-panel > .info > a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu > li {
|
||||||
|
-webkit-transition: border-left-color 0.3s ease;
|
||||||
|
-o-transition: border-left-color 0.3s ease;
|
||||||
|
transition: border-left-color 0.3s ease;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu > li.header {
|
||||||
|
color: #848484;
|
||||||
|
background: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu > li:hover > a,
|
||||||
|
.skin-red-light .sidebar-menu > li.active > a {
|
||||||
|
color: #000000;
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu > li.active {
|
||||||
|
border-left-color: #dd4b39;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu > li > .treeview-menu {
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #777777;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-red-light .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-menu .treeview-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-form input[type="text"],
|
||||||
|
.skin-red-light .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-red-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-red-light .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
|
||||||
|
border-left: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-red-light.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||||
134
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-red.css
vendored
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Red
|
||||||
|
* ---------
|
||||||
|
*/
|
||||||
|
.skin-red .main-header .navbar {
|
||||||
|
background-color: #dd4b39;
|
||||||
|
}
|
||||||
|
.skin-red .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-red .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-red .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-red .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-red .main-header .navbar .nav .open > a,
|
||||||
|
.skin-red .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-red .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-red .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-red .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-red .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-red .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-red .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #d73925;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-red .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-red .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-red .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #d73925;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-red .main-header .logo {
|
||||||
|
background-color: #d73925;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-red .main-header .logo:hover {
|
||||||
|
background-color: #d33724;
|
||||||
|
}
|
||||||
|
.skin-red .main-header li.user-header {
|
||||||
|
background-color: #dd4b39;
|
||||||
|
}
|
||||||
|
.skin-red .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-red .wrapper,
|
||||||
|
.skin-red .main-sidebar,
|
||||||
|
.skin-red .left-side {
|
||||||
|
background-color: #222d32;
|
||||||
|
}
|
||||||
|
.skin-red .user-panel > .info,
|
||||||
|
.skin-red .user-panel > .info > a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-menu > li.header {
|
||||||
|
color: #4b646f;
|
||||||
|
background: #1a2226;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-menu > li:hover > a,
|
||||||
|
.skin-red .sidebar-menu > li.active > a,
|
||||||
|
.skin-red .sidebar-menu > li.menu-open > a {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #1e282c;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-menu > li.active > a {
|
||||||
|
border-left-color: #dd4b39;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-menu > li > .treeview-menu {
|
||||||
|
margin: 0 1px;
|
||||||
|
background: #2c3b41;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar a {
|
||||||
|
color: #b8c7ce;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #8aa4af;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-red .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #374850;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-form input[type="text"],
|
||||||
|
.skin-red .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #374850;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-red .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-red.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}
|
||||||
152
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-yellow-light.css
vendored
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Yellow
|
||||||
|
* ------------
|
||||||
|
*/
|
||||||
|
.skin-yellow-light .main-header .navbar {
|
||||||
|
background-color: #f39c12;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-yellow-light .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-yellow-light .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-yellow-light .main-header .navbar .nav .open > a,
|
||||||
|
.skin-yellow-light .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-yellow-light .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-yellow-light .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #e08e0b;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-yellow-light .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #e08e0b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .logo {
|
||||||
|
background-color: #f39c12;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header .logo:hover {
|
||||||
|
background-color: #f39a0d;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-header li.user-header {
|
||||||
|
background-color: #f39c12;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .wrapper,
|
||||||
|
.skin-yellow-light .main-sidebar,
|
||||||
|
.skin-yellow-light .left-side {
|
||||||
|
background-color: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .main-sidebar {
|
||||||
|
border-right: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .user-panel > .info,
|
||||||
|
.skin-yellow-light .user-panel > .info > a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu > li {
|
||||||
|
-webkit-transition: border-left-color 0.3s ease;
|
||||||
|
-o-transition: border-left-color 0.3s ease;
|
||||||
|
transition: border-left-color 0.3s ease;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu > li.header {
|
||||||
|
color: #848484;
|
||||||
|
background: #f9fafc;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu > li:hover > a,
|
||||||
|
.skin-yellow-light .sidebar-menu > li.active > a {
|
||||||
|
color: #000000;
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu > li.active {
|
||||||
|
border-left-color: #f39c12;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu > li > .treeview-menu {
|
||||||
|
background: #f4f4f5;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar a {
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #777777;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-yellow-light .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-menu .treeview-menu > li.active > a {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #d2d6de;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-form input[type="text"],
|
||||||
|
.skin-yellow-light .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-yellow-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-yellow-light .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
|
||||||
|
border-left: 1px solid #d2d6de;
|
||||||
|
}
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-yellow-light.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}
|
||||||
134
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-yellow.css
vendored
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* Skin: Yellow
|
||||||
|
* ------------
|
||||||
|
*/
|
||||||
|
.skin-yellow .main-header .navbar {
|
||||||
|
background-color: #f39c12;
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .navbar .nav > li > a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .navbar .nav > li > a:hover,
|
||||||
|
.skin-yellow .main-header .navbar .nav > li > a:active,
|
||||||
|
.skin-yellow .main-header .navbar .nav > li > a:focus,
|
||||||
|
.skin-yellow .main-header .navbar .nav .open > a,
|
||||||
|
.skin-yellow .main-header .navbar .nav .open > a:hover,
|
||||||
|
.skin-yellow .main-header .navbar .nav .open > a:focus,
|
||||||
|
.skin-yellow .main-header .navbar .nav > .active > a {
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
color: #f6f6f6;
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
color: #f6f6f6;
|
||||||
|
background: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .navbar .sidebar-toggle {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
|
||||||
|
background-color: #e08e0b;
|
||||||
|
}
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.skin-yellow .main-header .navbar .dropdown-menu li.divider {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .navbar .dropdown-menu li a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .navbar .dropdown-menu li a:hover {
|
||||||
|
background: #e08e0b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .logo {
|
||||||
|
background-color: #e08e0b;
|
||||||
|
color: #ffffff;
|
||||||
|
border-bottom: 0 solid transparent;
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header .logo:hover {
|
||||||
|
background-color: #db8b0b;
|
||||||
|
}
|
||||||
|
.skin-yellow .main-header li.user-header {
|
||||||
|
background-color: #f39c12;
|
||||||
|
}
|
||||||
|
.skin-yellow .content-header {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.skin-yellow .wrapper,
|
||||||
|
.skin-yellow .main-sidebar,
|
||||||
|
.skin-yellow .left-side {
|
||||||
|
background-color: #222d32;
|
||||||
|
}
|
||||||
|
.skin-yellow .user-panel > .info,
|
||||||
|
.skin-yellow .user-panel > .info > a {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-menu > li.header {
|
||||||
|
color: #4b646f;
|
||||||
|
background: #1a2226;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-menu > li > a {
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-menu > li:hover > a,
|
||||||
|
.skin-yellow .sidebar-menu > li.active > a,
|
||||||
|
.skin-yellow .sidebar-menu > li.menu-open > a {
|
||||||
|
color: #ffffff;
|
||||||
|
background: #1e282c;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-menu > li.active > a {
|
||||||
|
border-left-color: #f39c12;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-menu > li > .treeview-menu {
|
||||||
|
margin: 0 1px;
|
||||||
|
background: #2c3b41;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar a {
|
||||||
|
color: #b8c7ce;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-menu .treeview-menu > li > a {
|
||||||
|
color: #8aa4af;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-menu .treeview-menu > li.active > a,
|
||||||
|
.skin-yellow .sidebar-menu .treeview-menu > li > a:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-form {
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid #374850;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-form input[type="text"],
|
||||||
|
.skin-yellow .sidebar-form .btn {
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: #374850;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
height: 35px;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-form input[type="text"] {
|
||||||
|
color: #666;
|
||||||
|
border-top-left-radius: 2px;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 2px;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-form input[type="text"]:focus,
|
||||||
|
.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
||||||
|
border-left-color: #fff;
|
||||||
|
}
|
||||||
|
.skin-yellow .sidebar-form .btn {
|
||||||
|
color: #999;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 2px;
|
||||||
|
border-bottom-right-radius: 2px;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
1
mondumas/static/dist/AdminLTE-2.4.18/css/skins/skin-yellow.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}
|
||||||
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/avatar.png
vendored
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/avatar04.png
vendored
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/avatar2.png
vendored
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/avatar3.png
vendored
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/avatar5.png
vendored
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/credit/american-express.png
vendored
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/credit/cirrus.png
vendored
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/credit/mastercard.png
vendored
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/credit/mestro.png
vendored
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/credit/paypal.png
vendored
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/credit/paypal2.png
vendored
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/credit/visa.png
vendored
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/default-50x50.gif
vendored
Normal file
|
After Width: | Height: | Size: 184 B |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/icons.png
vendored
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/photo1.png
vendored
Normal file
|
After Width: | Height: | Size: 656 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/photo2.png
vendored
Normal file
|
After Width: | Height: | Size: 412 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/photo3.jpg
vendored
Normal file
|
After Width: | Height: | Size: 383 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/photo4.jpg
vendored
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/user1-128x128.jpg
vendored
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/user2-160x160.jpg
vendored
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/user3-128x128.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/user4-128x128.jpg
vendored
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/user5-128x128.jpg
vendored
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/user6-128x128.jpg
vendored
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/user7-128x128.jpg
vendored
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
mondumas/static/dist/AdminLTE-2.4.18/img/user8-128x128.jpg
vendored
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
1160
mondumas/static/dist/AdminLTE-2.4.18/js/adminlte.js
vendored
Normal file
13
mondumas/static/dist/AdminLTE-2.4.18/js/adminlte.min.js
vendored
Normal file
354
mondumas/static/dist/AdminLTE-2.4.18/js/demo.js
vendored
Normal file
@@ -0,0 +1,354 @@
|
|||||||
|
/**
|
||||||
|
* AdminLTE Demo Menu
|
||||||
|
* ------------------
|
||||||
|
* You should not use this file in production.
|
||||||
|
* This file is for demo purposes only.
|
||||||
|
*/
|
||||||
|
$(function () {
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get access to plugins
|
||||||
|
*/
|
||||||
|
|
||||||
|
$('[data-toggle="control-sidebar"]').controlSidebar()
|
||||||
|
$('[data-toggle="push-menu"]').pushMenu()
|
||||||
|
var $pushMenu = $('[data-toggle="push-menu"]').data('lte.pushmenu')
|
||||||
|
var $controlSidebar = $('[data-toggle="control-sidebar"]').data('lte.controlsidebar')
|
||||||
|
var $layout = $('body').data('lte.layout')
|
||||||
|
$(window).on('load', function() {
|
||||||
|
// Reinitialize variables on load
|
||||||
|
$pushMenu = $('[data-toggle="push-menu"]').data('lte.pushmenu')
|
||||||
|
$controlSidebar = $('[data-toggle="control-sidebar"]').data('lte.controlsidebar')
|
||||||
|
$layout = $('body').data('lte.layout')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of all the available skins
|
||||||
|
*
|
||||||
|
* @type Array
|
||||||
|
*/
|
||||||
|
var mySkins = [
|
||||||
|
'skin-blue',
|
||||||
|
'skin-black',
|
||||||
|
'skin-red',
|
||||||
|
'skin-yellow',
|
||||||
|
'skin-purple',
|
||||||
|
'skin-green',
|
||||||
|
'skin-blue-light',
|
||||||
|
'skin-black-light',
|
||||||
|
'skin-red-light',
|
||||||
|
'skin-yellow-light',
|
||||||
|
'skin-purple-light',
|
||||||
|
'skin-green-light'
|
||||||
|
]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a prestored setting
|
||||||
|
*
|
||||||
|
* @param String name Name of of the setting
|
||||||
|
* @returns String The value of the setting | null
|
||||||
|
*/
|
||||||
|
function get(name) {
|
||||||
|
if (typeof (Storage) !== 'undefined') {
|
||||||
|
return localStorage.getItem(name)
|
||||||
|
} else {
|
||||||
|
window.alert('Please use a modern browser to properly view this template!')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a new settings in the browser
|
||||||
|
*
|
||||||
|
* @param String name Name of the setting
|
||||||
|
* @param String val Value of the setting
|
||||||
|
* @returns void
|
||||||
|
*/
|
||||||
|
function store(name, val) {
|
||||||
|
if (typeof (Storage) !== 'undefined') {
|
||||||
|
localStorage.setItem(name, val)
|
||||||
|
} else {
|
||||||
|
window.alert('Please use a modern browser to properly view this template!')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggles layout classes
|
||||||
|
*
|
||||||
|
* @param String cls the layout class to toggle
|
||||||
|
* @returns void
|
||||||
|
*/
|
||||||
|
function changeLayout(cls) {
|
||||||
|
$('body').toggleClass(cls)
|
||||||
|
$layout.fixSidebar()
|
||||||
|
if ($('body').hasClass('fixed') && cls == 'fixed') {
|
||||||
|
$pushMenu.expandOnHover()
|
||||||
|
$layout.activate()
|
||||||
|
}
|
||||||
|
$controlSidebar.fix()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces the old skin with the new skin
|
||||||
|
* @param String cls the new skin class
|
||||||
|
* @returns Boolean false to prevent link's default action
|
||||||
|
*/
|
||||||
|
function changeSkin(cls) {
|
||||||
|
$.each(mySkins, function (i) {
|
||||||
|
$('body').removeClass(mySkins[i])
|
||||||
|
})
|
||||||
|
|
||||||
|
$('body').addClass(cls)
|
||||||
|
store('skin', cls)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve default settings and apply them to the template
|
||||||
|
*
|
||||||
|
* @returns void
|
||||||
|
*/
|
||||||
|
function setup() {
|
||||||
|
var tmp = get('skin')
|
||||||
|
if (tmp && $.inArray(tmp, mySkins))
|
||||||
|
changeSkin(tmp)
|
||||||
|
|
||||||
|
// Add the change skin listener
|
||||||
|
$('[data-skin]').on('click', function (e) {
|
||||||
|
if ($(this).hasClass('knob'))
|
||||||
|
return
|
||||||
|
e.preventDefault()
|
||||||
|
changeSkin($(this).data('skin'))
|
||||||
|
})
|
||||||
|
|
||||||
|
// Add the layout manager
|
||||||
|
$('[data-layout]').on('click', function () {
|
||||||
|
changeLayout($(this).data('layout'))
|
||||||
|
})
|
||||||
|
|
||||||
|
$('[data-controlsidebar]').on('click', function () {
|
||||||
|
changeLayout($(this).data('controlsidebar'))
|
||||||
|
var slide = !$controlSidebar.options.slide
|
||||||
|
|
||||||
|
$controlSidebar.options.slide = slide
|
||||||
|
if (!slide)
|
||||||
|
$('.control-sidebar').removeClass('control-sidebar-open')
|
||||||
|
})
|
||||||
|
|
||||||
|
$('[data-sidebarskin="toggle"]').on('click', function () {
|
||||||
|
var $sidebar = $('.control-sidebar')
|
||||||
|
if ($sidebar.hasClass('control-sidebar-dark')) {
|
||||||
|
$sidebar.removeClass('control-sidebar-dark')
|
||||||
|
$sidebar.addClass('control-sidebar-light')
|
||||||
|
} else {
|
||||||
|
$sidebar.removeClass('control-sidebar-light')
|
||||||
|
$sidebar.addClass('control-sidebar-dark')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
$('[data-enable="expandOnHover"]').on('click', function () {
|
||||||
|
$(this).attr('disabled', true)
|
||||||
|
$pushMenu.expandOnHover()
|
||||||
|
if (!$('body').hasClass('sidebar-collapse'))
|
||||||
|
$('[data-layout="sidebar-collapse"]').click()
|
||||||
|
})
|
||||||
|
|
||||||
|
// Reset options
|
||||||
|
if ($('body').hasClass('fixed')) {
|
||||||
|
$('[data-layout="fixed"]').attr('checked', 'checked')
|
||||||
|
}
|
||||||
|
if ($('body').hasClass('layout-boxed')) {
|
||||||
|
$('[data-layout="layout-boxed"]').attr('checked', 'checked')
|
||||||
|
}
|
||||||
|
if ($('body').hasClass('sidebar-collapse')) {
|
||||||
|
$('[data-layout="sidebar-collapse"]').attr('checked', 'checked')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the new tab
|
||||||
|
var $tabPane = $('<div />', {
|
||||||
|
'id': 'control-sidebar-theme-demo-options-tab',
|
||||||
|
'class': 'tab-pane active'
|
||||||
|
})
|
||||||
|
|
||||||
|
// Create the tab button
|
||||||
|
var $tabButton = $('<li />', {'class': 'active'})
|
||||||
|
.html('<a href=\'#control-sidebar-theme-demo-options-tab\' data-toggle=\'tab\'>'
|
||||||
|
+ '<i class="fa fa-wrench"></i>'
|
||||||
|
+ '</a>')
|
||||||
|
|
||||||
|
// Add the tab button to the right sidebar tabs
|
||||||
|
$('[href="#control-sidebar-home-tab"]')
|
||||||
|
.parent()
|
||||||
|
.before($tabButton)
|
||||||
|
|
||||||
|
// Create the menu
|
||||||
|
var $demoSettings = $('<div />')
|
||||||
|
|
||||||
|
// Layout options
|
||||||
|
$demoSettings.append(
|
||||||
|
'<h4 class="control-sidebar-heading">'
|
||||||
|
+ 'Layout Options'
|
||||||
|
+ '</h4>'
|
||||||
|
// Fixed layout
|
||||||
|
+ '<div class="form-group">'
|
||||||
|
+ '<label class="control-sidebar-subheading">'
|
||||||
|
+ '<input type="checkbox"data-layout="fixed"class="pull-right"/> '
|
||||||
|
+ 'Fixed layout'
|
||||||
|
+ '</label>'
|
||||||
|
+ '<p>Activate the fixed layout. You can\'t use fixed and boxed layouts together</p>'
|
||||||
|
+ '</div>'
|
||||||
|
// Boxed layout
|
||||||
|
+ '<div class="form-group">'
|
||||||
|
+ '<label class="control-sidebar-subheading">'
|
||||||
|
+ '<input type="checkbox"data-layout="layout-boxed" class="pull-right"/> '
|
||||||
|
+ 'Boxed Layout'
|
||||||
|
+ '</label>'
|
||||||
|
+ '<p>Activate the boxed layout</p>'
|
||||||
|
+ '</div>'
|
||||||
|
// Sidebar Toggle
|
||||||
|
+ '<div class="form-group">'
|
||||||
|
+ '<label class="control-sidebar-subheading">'
|
||||||
|
+ '<input type="checkbox"data-layout="sidebar-collapse"class="pull-right"/> '
|
||||||
|
+ 'Toggle Sidebar'
|
||||||
|
+ '</label>'
|
||||||
|
+ '<p>Toggle the left sidebar\'s state (open or collapse)</p>'
|
||||||
|
+ '</div>'
|
||||||
|
// Sidebar mini expand on hover toggle
|
||||||
|
+ '<div class="form-group">'
|
||||||
|
+ '<label class="control-sidebar-subheading">'
|
||||||
|
+ '<input type="checkbox"data-enable="expandOnHover"class="pull-right"/> '
|
||||||
|
+ 'Sidebar Expand on Hover'
|
||||||
|
+ '</label>'
|
||||||
|
+ '<p>Let the sidebar mini expand on hover</p>'
|
||||||
|
+ '</div>'
|
||||||
|
// Control Sidebar Toggle
|
||||||
|
+ '<div class="form-group">'
|
||||||
|
+ '<label class="control-sidebar-subheading">'
|
||||||
|
+ '<input type="checkbox"data-controlsidebar="control-sidebar-open"class="pull-right"/> '
|
||||||
|
+ 'Toggle Right Sidebar Slide'
|
||||||
|
+ '</label>'
|
||||||
|
+ '<p>Toggle between slide over content and push content effects</p>'
|
||||||
|
+ '</div>'
|
||||||
|
// Control Sidebar Skin Toggle
|
||||||
|
+ '<div class="form-group">'
|
||||||
|
+ '<label class="control-sidebar-subheading">'
|
||||||
|
+ '<input type="checkbox"data-sidebarskin="toggle"class="pull-right"/> '
|
||||||
|
+ 'Toggle Right Sidebar Skin'
|
||||||
|
+ '</label>'
|
||||||
|
+ '<p>Toggle between dark and light skins for the right sidebar</p>'
|
||||||
|
+ '</div>'
|
||||||
|
)
|
||||||
|
var $skinsList = $('<ul />', {'class': 'list-unstyled clearfix'})
|
||||||
|
|
||||||
|
// Dark sidebar skins
|
||||||
|
var $skinBlue =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-blue" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin">Blue</p>')
|
||||||
|
$skinsList.append($skinBlue)
|
||||||
|
var $skinBlack =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-black" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div style="box-shadow: 0 0 2px rgba(0,0,0,0.1)" class="clearfix"><span style="display:block; width: 20%; float: left; height: 7px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 7px; background: #fefefe"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin">Black</p>')
|
||||||
|
$skinsList.append($skinBlack)
|
||||||
|
var $skinPurple =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-purple" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin">Purple</p>')
|
||||||
|
$skinsList.append($skinPurple)
|
||||||
|
var $skinGreen =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-green" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin">Green</p>')
|
||||||
|
$skinsList.append($skinGreen)
|
||||||
|
var $skinRed =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-red" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin">Red</p>')
|
||||||
|
$skinsList.append($skinRed)
|
||||||
|
var $skinYellow =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-yellow" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin">Yellow</p>')
|
||||||
|
$skinsList.append($skinYellow)
|
||||||
|
|
||||||
|
// Light sidebar skins
|
||||||
|
var $skinBlueLight =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-blue-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin" style="font-size: 12px">Blue Light</p>')
|
||||||
|
$skinsList.append($skinBlueLight)
|
||||||
|
var $skinBlackLight =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-black-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div style="box-shadow: 0 0 2px rgba(0,0,0,0.1)" class="clearfix"><span style="display:block; width: 20%; float: left; height: 7px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 7px; background: #fefefe"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin" style="font-size: 12px">Black Light</p>')
|
||||||
|
$skinsList.append($skinBlackLight)
|
||||||
|
var $skinPurpleLight =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-purple-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin" style="font-size: 12px">Purple Light</p>')
|
||||||
|
$skinsList.append($skinPurpleLight)
|
||||||
|
var $skinGreenLight =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-green-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin" style="font-size: 12px">Green Light</p>')
|
||||||
|
$skinsList.append($skinGreenLight)
|
||||||
|
var $skinRedLight =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-red-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin" style="font-size: 12px">Red Light</p>')
|
||||||
|
$skinsList.append($skinRedLight)
|
||||||
|
var $skinYellowLight =
|
||||||
|
$('<li />', {style: 'float:left; width: 33.33333%; padding: 5px;'})
|
||||||
|
.append('<a href="javascript:void(0)" data-skin="skin-yellow-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
|
||||||
|
+ '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
|
||||||
|
+ '</a>'
|
||||||
|
+ '<p class="text-center no-margin" style="font-size: 12px">Yellow Light</p>')
|
||||||
|
$skinsList.append($skinYellowLight)
|
||||||
|
|
||||||
|
$demoSettings.append('<h4 class="control-sidebar-heading">Skins</h4>')
|
||||||
|
$demoSettings.append($skinsList)
|
||||||
|
|
||||||
|
$tabPane.append($demoSettings)
|
||||||
|
$('#control-sidebar-home-tab').after($tabPane)
|
||||||
|
|
||||||
|
setup()
|
||||||
|
|
||||||
|
$('[data-toggle="tooltip"]').tooltip()
|
||||||
|
})
|
||||||
211
mondumas/static/dist/AdminLTE-2.4.18/js/pages/dashboard.js
vendored
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
/*
|
||||||
|
* Author: Abdullah A Almsaeed
|
||||||
|
* Date: 4 Jan 2014
|
||||||
|
* Description:
|
||||||
|
* This is a demo file used only for the main dashboard (index.html)
|
||||||
|
**/
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Make the dashboard widgets sortable Using jquery UI
|
||||||
|
$('.connectedSortable').sortable({
|
||||||
|
containment : $('section.content'),
|
||||||
|
placeholder : 'sort-highlight',
|
||||||
|
connectWith : '.connectedSortable',
|
||||||
|
handle : '.box-header, .nav-tabs',
|
||||||
|
forcePlaceholderSize: true,
|
||||||
|
zIndex : 999999
|
||||||
|
});
|
||||||
|
$('.connectedSortable .box-header, .connectedSortable .nav-tabs-custom').css('cursor', 'move');
|
||||||
|
|
||||||
|
// jQuery UI sortable for the todo list
|
||||||
|
$('.todo-list').sortable({
|
||||||
|
placeholder : 'sort-highlight',
|
||||||
|
handle : '.handle',
|
||||||
|
forcePlaceholderSize: true,
|
||||||
|
zIndex : 999999
|
||||||
|
});
|
||||||
|
|
||||||
|
// bootstrap WYSIHTML5 - text editor
|
||||||
|
$('.textarea').wysihtml5();
|
||||||
|
|
||||||
|
$('.daterange').daterangepicker({
|
||||||
|
ranges : {
|
||||||
|
'Today' : [moment(), moment()],
|
||||||
|
'Yesterday' : [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
|
||||||
|
'Last 7 Days' : [moment().subtract(6, 'days'), moment()],
|
||||||
|
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
|
||||||
|
'This Month' : [moment().startOf('month'), moment().endOf('month')],
|
||||||
|
'Last Month' : [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
|
||||||
|
},
|
||||||
|
startDate: moment().subtract(29, 'days'),
|
||||||
|
endDate : moment()
|
||||||
|
}, function (start, end) {
|
||||||
|
window.alert('You chose: ' + start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
|
||||||
|
});
|
||||||
|
|
||||||
|
/* jQueryKnob */
|
||||||
|
$('.knob').knob();
|
||||||
|
|
||||||
|
// jvectormap data
|
||||||
|
var visitorsData = {
|
||||||
|
US: 398, // USA
|
||||||
|
SA: 400, // Saudi Arabia
|
||||||
|
CA: 1000, // Canada
|
||||||
|
DE: 500, // Germany
|
||||||
|
FR: 760, // France
|
||||||
|
CN: 300, // China
|
||||||
|
AU: 700, // Australia
|
||||||
|
BR: 600, // Brazil
|
||||||
|
IN: 800, // India
|
||||||
|
GB: 320, // Great Britain
|
||||||
|
RU: 3000 // Russia
|
||||||
|
};
|
||||||
|
// World map by jvectormap
|
||||||
|
$('#world-map').vectorMap({
|
||||||
|
map : 'world_mill_en',
|
||||||
|
backgroundColor : 'transparent',
|
||||||
|
regionStyle : {
|
||||||
|
initial: {
|
||||||
|
fill : '#e4e4e4',
|
||||||
|
'fill-opacity' : 1,
|
||||||
|
stroke : 'none',
|
||||||
|
'stroke-width' : 0,
|
||||||
|
'stroke-opacity': 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
series : {
|
||||||
|
regions: [
|
||||||
|
{
|
||||||
|
values : visitorsData,
|
||||||
|
scale : ['#92c1dc', '#ebf4f9'],
|
||||||
|
normalizeFunction: 'polynomial'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
onRegionLabelShow: function (e, el, code) {
|
||||||
|
if (typeof visitorsData[code] != 'undefined')
|
||||||
|
el.html(el.html() + ': ' + visitorsData[code] + ' new visitors');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Sparkline charts
|
||||||
|
var myvalues = [1000, 1200, 920, 927, 931, 1027, 819, 930, 1021];
|
||||||
|
$('#sparkline-1').sparkline(myvalues, {
|
||||||
|
type : 'line',
|
||||||
|
lineColor: '#92c1dc',
|
||||||
|
fillColor: '#ebf4f9',
|
||||||
|
height : '50',
|
||||||
|
width : '80'
|
||||||
|
});
|
||||||
|
myvalues = [515, 519, 520, 522, 652, 810, 370, 627, 319, 630, 921];
|
||||||
|
$('#sparkline-2').sparkline(myvalues, {
|
||||||
|
type : 'line',
|
||||||
|
lineColor: '#92c1dc',
|
||||||
|
fillColor: '#ebf4f9',
|
||||||
|
height : '50',
|
||||||
|
width : '80'
|
||||||
|
});
|
||||||
|
myvalues = [15, 19, 20, 22, 33, 27, 31, 27, 19, 30, 21];
|
||||||
|
$('#sparkline-3').sparkline(myvalues, {
|
||||||
|
type : 'line',
|
||||||
|
lineColor: '#92c1dc',
|
||||||
|
fillColor: '#ebf4f9',
|
||||||
|
height : '50',
|
||||||
|
width : '80'
|
||||||
|
});
|
||||||
|
|
||||||
|
// The Calender
|
||||||
|
$('#calendar').datepicker();
|
||||||
|
|
||||||
|
// SLIMSCROLL FOR CHAT WIDGET
|
||||||
|
$('#chat-box').slimScroll({
|
||||||
|
height: '250px'
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Morris.js Charts */
|
||||||
|
// Sales chart
|
||||||
|
var area = new Morris.Area({
|
||||||
|
element : 'revenue-chart',
|
||||||
|
resize : true,
|
||||||
|
data : [
|
||||||
|
{ y: '2011 Q1', item1: 2666, item2: 2666 },
|
||||||
|
{ y: '2011 Q2', item1: 2778, item2: 2294 },
|
||||||
|
{ y: '2011 Q3', item1: 4912, item2: 1969 },
|
||||||
|
{ y: '2011 Q4', item1: 3767, item2: 3597 },
|
||||||
|
{ y: '2012 Q1', item1: 6810, item2: 1914 },
|
||||||
|
{ y: '2012 Q2', item1: 5670, item2: 4293 },
|
||||||
|
{ y: '2012 Q3', item1: 4820, item2: 3795 },
|
||||||
|
{ y: '2012 Q4', item1: 15073, item2: 5967 },
|
||||||
|
{ y: '2013 Q1', item1: 10687, item2: 4460 },
|
||||||
|
{ y: '2013 Q2', item1: 8432, item2: 5713 }
|
||||||
|
],
|
||||||
|
xkey : 'y',
|
||||||
|
ykeys : ['item1', 'item2'],
|
||||||
|
labels : ['Item 1', 'Item 2'],
|
||||||
|
lineColors: ['#a0d0e0', '#3c8dbc'],
|
||||||
|
hideHover : 'auto'
|
||||||
|
});
|
||||||
|
var line = new Morris.Line({
|
||||||
|
element : 'line-chart',
|
||||||
|
resize : true,
|
||||||
|
data : [
|
||||||
|
{ y: '2011 Q1', item1: 2666 },
|
||||||
|
{ y: '2011 Q2', item1: 2778 },
|
||||||
|
{ y: '2011 Q3', item1: 4912 },
|
||||||
|
{ y: '2011 Q4', item1: 3767 },
|
||||||
|
{ y: '2012 Q1', item1: 6810 },
|
||||||
|
{ y: '2012 Q2', item1: 5670 },
|
||||||
|
{ y: '2012 Q3', item1: 4820 },
|
||||||
|
{ y: '2012 Q4', item1: 15073 },
|
||||||
|
{ y: '2013 Q1', item1: 10687 },
|
||||||
|
{ y: '2013 Q2', item1: 8432 }
|
||||||
|
],
|
||||||
|
xkey : 'y',
|
||||||
|
ykeys : ['item1'],
|
||||||
|
labels : ['Item 1'],
|
||||||
|
lineColors : ['#efefef'],
|
||||||
|
lineWidth : 2,
|
||||||
|
hideHover : 'auto',
|
||||||
|
gridTextColor : '#fff',
|
||||||
|
gridStrokeWidth : 0.4,
|
||||||
|
pointSize : 4,
|
||||||
|
pointStrokeColors: ['#efefef'],
|
||||||
|
gridLineColor : '#efefef',
|
||||||
|
gridTextFamily : 'Open Sans',
|
||||||
|
gridTextSize : 10
|
||||||
|
});
|
||||||
|
|
||||||
|
// Donut Chart
|
||||||
|
var donut = new Morris.Donut({
|
||||||
|
element : 'sales-chart',
|
||||||
|
resize : true,
|
||||||
|
colors : ['#3c8dbc', '#f56954', '#00a65a'],
|
||||||
|
data : [
|
||||||
|
{ label: 'Download Sales', value: 12 },
|
||||||
|
{ label: 'In-Store Sales', value: 30 },
|
||||||
|
{ label: 'Mail-Order Sales', value: 20 }
|
||||||
|
],
|
||||||
|
hideHover: 'auto'
|
||||||
|
});
|
||||||
|
|
||||||
|
// Fix for charts under tabs
|
||||||
|
$('.box ul.nav a').on('shown.bs.tab', function () {
|
||||||
|
area.redraw();
|
||||||
|
donut.redraw();
|
||||||
|
line.redraw();
|
||||||
|
});
|
||||||
|
|
||||||
|
/* The todo list plugin */
|
||||||
|
$('.todo-list').todoList({
|
||||||
|
onCheck : function () {
|
||||||
|
window.console.log($(this), 'The element has been checked');
|
||||||
|
},
|
||||||
|
onUnCheck: function () {
|
||||||
|
window.console.log($(this), 'The element has been unchecked');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
274
mondumas/static/dist/AdminLTE-2.4.18/js/pages/dashboard2.js
vendored
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
$(function () {
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/* ChartJS
|
||||||
|
* -------
|
||||||
|
* Here we will create a few charts using ChartJS
|
||||||
|
*/
|
||||||
|
|
||||||
|
// -----------------------
|
||||||
|
// - MONTHLY SALES CHART -
|
||||||
|
// -----------------------
|
||||||
|
|
||||||
|
// Get context with jQuery - using jQuery's .get() method.
|
||||||
|
var salesChartCanvas = $('#salesChart').get(0).getContext('2d');
|
||||||
|
// This will get the first returned node in the jQuery collection.
|
||||||
|
var salesChart = new Chart(salesChartCanvas);
|
||||||
|
|
||||||
|
var salesChartData = {
|
||||||
|
labels : ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
label : 'Electronics',
|
||||||
|
fillColor : 'rgb(210, 214, 222)',
|
||||||
|
strokeColor : 'rgb(210, 214, 222)',
|
||||||
|
pointColor : 'rgb(210, 214, 222)',
|
||||||
|
pointStrokeColor : '#c1c7d1',
|
||||||
|
pointHighlightFill : '#fff',
|
||||||
|
pointHighlightStroke: 'rgb(220,220,220)',
|
||||||
|
data : [65, 59, 80, 81, 56, 55, 40]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label : 'Digital Goods',
|
||||||
|
fillColor : 'rgba(60,141,188,0.9)',
|
||||||
|
strokeColor : 'rgba(60,141,188,0.8)',
|
||||||
|
pointColor : '#3b8bba',
|
||||||
|
pointStrokeColor : 'rgba(60,141,188,1)',
|
||||||
|
pointHighlightFill : '#fff',
|
||||||
|
pointHighlightStroke: 'rgba(60,141,188,1)',
|
||||||
|
data : [28, 48, 40, 19, 86, 27, 90]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
var salesChartOptions = {
|
||||||
|
// Boolean - If we should show the scale at all
|
||||||
|
showScale : true,
|
||||||
|
// Boolean - Whether grid lines are shown across the chart
|
||||||
|
scaleShowGridLines : false,
|
||||||
|
// String - Colour of the grid lines
|
||||||
|
scaleGridLineColor : 'rgba(0,0,0,.05)',
|
||||||
|
// Number - Width of the grid lines
|
||||||
|
scaleGridLineWidth : 1,
|
||||||
|
// Boolean - Whether to show horizontal lines (except X axis)
|
||||||
|
scaleShowHorizontalLines: true,
|
||||||
|
// Boolean - Whether to show vertical lines (except Y axis)
|
||||||
|
scaleShowVerticalLines : true,
|
||||||
|
// Boolean - Whether the line is curved between points
|
||||||
|
bezierCurve : true,
|
||||||
|
// Number - Tension of the bezier curve between points
|
||||||
|
bezierCurveTension : 0.3,
|
||||||
|
// Boolean - Whether to show a dot for each point
|
||||||
|
pointDot : false,
|
||||||
|
// Number - Radius of each point dot in pixels
|
||||||
|
pointDotRadius : 4,
|
||||||
|
// Number - Pixel width of point dot stroke
|
||||||
|
pointDotStrokeWidth : 1,
|
||||||
|
// Number - amount extra to add to the radius to cater for hit detection outside the drawn point
|
||||||
|
pointHitDetectionRadius : 20,
|
||||||
|
// Boolean - Whether to show a stroke for datasets
|
||||||
|
datasetStroke : true,
|
||||||
|
// Number - Pixel width of dataset stroke
|
||||||
|
datasetStrokeWidth : 2,
|
||||||
|
// Boolean - Whether to fill the dataset with a color
|
||||||
|
datasetFill : true,
|
||||||
|
// String - A legend template
|
||||||
|
legendTemplate : '<ul class=\'<%=name.toLowerCase()%>-legend\'><% for (var i=0; i<datasets.length; i++){%><li><span style=\'background-color:<%=datasets[i].lineColor%>\'></span><%=datasets[i].label%></li><%}%></ul>',
|
||||||
|
// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
|
||||||
|
maintainAspectRatio : true,
|
||||||
|
// Boolean - whether to make the chart responsive to window resizing
|
||||||
|
responsive : true
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create the line chart
|
||||||
|
salesChart.Line(salesChartData, salesChartOptions);
|
||||||
|
|
||||||
|
// ---------------------------
|
||||||
|
// - END MONTHLY SALES CHART -
|
||||||
|
// ---------------------------
|
||||||
|
|
||||||
|
// -------------
|
||||||
|
// - PIE CHART -
|
||||||
|
// -------------
|
||||||
|
// Get context with jQuery - using jQuery's .get() method.
|
||||||
|
var pieChartCanvas = $('#pieChart').get(0).getContext('2d');
|
||||||
|
var pieChart = new Chart(pieChartCanvas);
|
||||||
|
var PieData = [
|
||||||
|
{
|
||||||
|
value : 700,
|
||||||
|
color : '#f56954',
|
||||||
|
highlight: '#f56954',
|
||||||
|
label : 'Chrome'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value : 500,
|
||||||
|
color : '#00a65a',
|
||||||
|
highlight: '#00a65a',
|
||||||
|
label : 'IE'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value : 400,
|
||||||
|
color : '#f39c12',
|
||||||
|
highlight: '#f39c12',
|
||||||
|
label : 'FireFox'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value : 600,
|
||||||
|
color : '#00c0ef',
|
||||||
|
highlight: '#00c0ef',
|
||||||
|
label : 'Safari'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value : 300,
|
||||||
|
color : '#3c8dbc',
|
||||||
|
highlight: '#3c8dbc',
|
||||||
|
label : 'Opera'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value : 100,
|
||||||
|
color : '#d2d6de',
|
||||||
|
highlight: '#d2d6de',
|
||||||
|
label : 'Navigator'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
var pieOptions = {
|
||||||
|
// Boolean - Whether we should show a stroke on each segment
|
||||||
|
segmentShowStroke : true,
|
||||||
|
// String - The colour of each segment stroke
|
||||||
|
segmentStrokeColor : '#fff',
|
||||||
|
// Number - The width of each segment stroke
|
||||||
|
segmentStrokeWidth : 1,
|
||||||
|
// Number - The percentage of the chart that we cut out of the middle
|
||||||
|
percentageInnerCutout: 50, // This is 0 for Pie charts
|
||||||
|
// Number - Amount of animation steps
|
||||||
|
animationSteps : 100,
|
||||||
|
// String - Animation easing effect
|
||||||
|
animationEasing : 'easeOutBounce',
|
||||||
|
// Boolean - Whether we animate the rotation of the Doughnut
|
||||||
|
animateRotate : true,
|
||||||
|
// Boolean - Whether we animate scaling the Doughnut from the centre
|
||||||
|
animateScale : false,
|
||||||
|
// Boolean - whether to make the chart responsive to window resizing
|
||||||
|
responsive : true,
|
||||||
|
// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
|
||||||
|
maintainAspectRatio : false,
|
||||||
|
// String - A legend template
|
||||||
|
legendTemplate : '<ul class=\'<%=name.toLowerCase()%>-legend\'><% for (var i=0; i<segments.length; i++){%><li><span style=\'background-color:<%=segments[i].fillColor%>\'></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>',
|
||||||
|
// String - A tooltip template
|
||||||
|
tooltipTemplate : '<%=value %> <%=label%> users'
|
||||||
|
};
|
||||||
|
// Create pie or douhnut chart
|
||||||
|
// You can switch between pie and douhnut using the method below.
|
||||||
|
pieChart.Doughnut(PieData, pieOptions);
|
||||||
|
// -----------------
|
||||||
|
// - END PIE CHART -
|
||||||
|
// -----------------
|
||||||
|
|
||||||
|
/* jVector Maps
|
||||||
|
* ------------
|
||||||
|
* Create a world map with markers
|
||||||
|
*/
|
||||||
|
$('#world-map-markers').vectorMap({
|
||||||
|
map : 'world_mill_en',
|
||||||
|
normalizeFunction: 'polynomial',
|
||||||
|
hoverOpacity : 0.7,
|
||||||
|
hoverColor : false,
|
||||||
|
backgroundColor : 'transparent',
|
||||||
|
regionStyle : {
|
||||||
|
initial : {
|
||||||
|
fill : 'rgba(210, 214, 222, 1)',
|
||||||
|
'fill-opacity' : 1,
|
||||||
|
stroke : 'none',
|
||||||
|
'stroke-width' : 0,
|
||||||
|
'stroke-opacity': 1
|
||||||
|
},
|
||||||
|
hover : {
|
||||||
|
'fill-opacity': 0.7,
|
||||||
|
cursor : 'pointer'
|
||||||
|
},
|
||||||
|
selected : {
|
||||||
|
fill: 'yellow'
|
||||||
|
},
|
||||||
|
selectedHover: {}
|
||||||
|
},
|
||||||
|
markerStyle : {
|
||||||
|
initial: {
|
||||||
|
fill : '#00a65a',
|
||||||
|
stroke: '#111'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
markers : [
|
||||||
|
{ latLng: [41.90, 12.45], name: 'Vatican City' },
|
||||||
|
{ latLng: [43.73, 7.41], name: 'Monaco' },
|
||||||
|
{ latLng: [-0.52, 166.93], name: 'Nauru' },
|
||||||
|
{ latLng: [-8.51, 179.21], name: 'Tuvalu' },
|
||||||
|
{ latLng: [43.93, 12.46], name: 'San Marino' },
|
||||||
|
{ latLng: [47.14, 9.52], name: 'Liechtenstein' },
|
||||||
|
{ latLng: [7.11, 171.06], name: 'Marshall Islands' },
|
||||||
|
{ latLng: [17.3, -62.73], name: 'Saint Kitts and Nevis' },
|
||||||
|
{ latLng: [3.2, 73.22], name: 'Maldives' },
|
||||||
|
{ latLng: [35.88, 14.5], name: 'Malta' },
|
||||||
|
{ latLng: [12.05, -61.75], name: 'Grenada' },
|
||||||
|
{ latLng: [13.16, -61.23], name: 'Saint Vincent and the Grenadines' },
|
||||||
|
{ latLng: [13.16, -59.55], name: 'Barbados' },
|
||||||
|
{ latLng: [17.11, -61.85], name: 'Antigua and Barbuda' },
|
||||||
|
{ latLng: [-4.61, 55.45], name: 'Seychelles' },
|
||||||
|
{ latLng: [7.35, 134.46], name: 'Palau' },
|
||||||
|
{ latLng: [42.5, 1.51], name: 'Andorra' },
|
||||||
|
{ latLng: [14.01, -60.98], name: 'Saint Lucia' },
|
||||||
|
{ latLng: [6.91, 158.18], name: 'Federated States of Micronesia' },
|
||||||
|
{ latLng: [1.3, 103.8], name: 'Singapore' },
|
||||||
|
{ latLng: [1.46, 173.03], name: 'Kiribati' },
|
||||||
|
{ latLng: [-21.13, -175.2], name: 'Tonga' },
|
||||||
|
{ latLng: [15.3, -61.38], name: 'Dominica' },
|
||||||
|
{ latLng: [-20.2, 57.5], name: 'Mauritius' },
|
||||||
|
{ latLng: [26.02, 50.55], name: 'Bahrain' },
|
||||||
|
{ latLng: [0.33, 6.73], name: 'São Tomé and Príncipe' }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
/* SPARKLINE CHARTS
|
||||||
|
* ----------------
|
||||||
|
* Create a inline charts with spark line
|
||||||
|
*/
|
||||||
|
|
||||||
|
// -----------------
|
||||||
|
// - SPARKLINE BAR -
|
||||||
|
// -----------------
|
||||||
|
$('.sparkbar').each(function () {
|
||||||
|
var $this = $(this);
|
||||||
|
$this.sparkline('html', {
|
||||||
|
type : 'bar',
|
||||||
|
height : $this.data('height') ? $this.data('height') : '30',
|
||||||
|
barColor: $this.data('color')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// -----------------
|
||||||
|
// - SPARKLINE PIE -
|
||||||
|
// -----------------
|
||||||
|
$('.sparkpie').each(function () {
|
||||||
|
var $this = $(this);
|
||||||
|
$this.sparkline('html', {
|
||||||
|
type : 'pie',
|
||||||
|
height : $this.data('height') ? $this.data('height') : '90',
|
||||||
|
sliceColors: $this.data('color')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// ------------------
|
||||||
|
// - SPARKLINE LINE -
|
||||||
|
// ------------------
|
||||||
|
$('.sparkline').each(function () {
|
||||||
|
var $this = $(this);
|
||||||
|
$this.sparkline('html', {
|
||||||
|
type : 'line',
|
||||||
|
height : $this.data('height') ? $this.data('height') : '90',
|
||||||
|
width : '100%',
|
||||||
|
lineColor: $this.data('linecolor'),
|
||||||
|
fillColor: $this.data('fillcolor'),
|
||||||
|
spotColor: $this.data('spotcolor')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
88
mondumas/static/dist/drawingboard/drawingboard.css
vendored
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/* drawingboard.js v0.4.6 - https://github.com/Leimi/drawingboard.js
|
||||||
|
* Copyright (c) 2015 Emmanuel Pelletier
|
||||||
|
* Licensed MIT */
|
||||||
|
.drawing-board, .drawing-board * { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; }
|
||||||
|
|
||||||
|
.drawing-board-utils-hidden, .drawing-board-controls-hidden { display: none !important; }
|
||||||
|
|
||||||
|
.drawing-board { position: relative; display: block; }
|
||||||
|
|
||||||
|
.drawing-board-canvas-wrapper { position: relative; margin: 0; border: 1px solid #ddd; }
|
||||||
|
|
||||||
|
.drawing-board-canvas { position: absolute; top: 0; left: 0; z-index: 10; width: auto; }
|
||||||
|
|
||||||
|
.drawing-board-canvas { cursor: crosshair; z-index: 20; }
|
||||||
|
|
||||||
|
.drawing-board-cursor { position: absolute; top: 0; left: 0; pointer-events: none; border-radius: 50%; background: #ccc; background: rgba(0, 0, 0, 0.2); z-index: 30; }
|
||||||
|
|
||||||
|
.drawing-board-control > button, .drawing-board-control-colors-rainbows, .drawing-board-control-size .drawing-board-control-inner, .drawing-board-control-size-dropdown { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; overflow: hidden; border: none; background-color: #eee; padding: 2px 4px; border: 1px solid #ccc; box-shadow: 0 1px 3px -2px #121212, inset 0 2px 5px 0 rgba(255, 255, 255, 0.3); -webkit-box-shadow: 0 1px 3px -2px #121212, inset 0 2px 5px 0 rgba(255, 255, 255, 0.3); height: 28px; }
|
||||||
|
|
||||||
|
.drawing-board-control > button { cursor: pointer; min-width: 28px; line-height: 14px; }
|
||||||
|
.drawing-board-control > button:hover, .drawing-board-control > button:focus { background-color: #ddd; }
|
||||||
|
.drawing-board-control > button:active, .drawing-board-control > button.active { box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.2); background-color: #ddd; }
|
||||||
|
.drawing-board-control > button[disabled] { color: gray; }
|
||||||
|
.drawing-board-control > button[disabled]:hover, .drawing-board-control > button[disabled]:focus, .drawing-board-control > button[disabled]:active, .drawing-board-control > button[disabled].active { background-color: #eee; box-shadow: 0 1px 3px -2px #121212, inset 0 2px 5px 0 rgba(255, 255, 255, 0.3); -webkit-box-shadow: 0 1px 3px -2px #121212, inset 0 2px 5px 0 rgba(255, 255, 255, 0.3); cursor: default; }
|
||||||
|
|
||||||
|
.drawing-board-controls { margin: 0 auto; text-align: center; font-size: 0; display: table; border-spacing: 9.33333px 0; position: relative; min-height: 28px; }
|
||||||
|
.drawing-board-controls[data-align="left"] { margin: 0; left: -9.33333px; }
|
||||||
|
.drawing-board-controls[data-align="right"] { margin: 0 0 0 auto; right: -9.33333px; }
|
||||||
|
.drawing-board-canvas-wrapper + .drawing-board-controls, .drawing-board-controls + .drawing-board-canvas-wrapper { margin-top: 5px; }
|
||||||
|
|
||||||
|
.drawing-board-controls-hidden { height: 0; min-height: 0; padding: 0; margin: 0; border: 0; }
|
||||||
|
|
||||||
|
.drawing-board-control { display: table-cell; border-collapse: separate; vertical-align: middle; font-size: 16px; height: 100%; }
|
||||||
|
|
||||||
|
.drawing-board-control-inner { position: relative; height: 100%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
|
||||||
|
|
||||||
|
.drawing-board-control > button { margin: 0; vertical-align: middle; }
|
||||||
|
|
||||||
|
.drawing-board-control-colors { font-size: 0; line-height: 0; }
|
||||||
|
|
||||||
|
.drawing-board-control-colors-current { border: 1px solid #ccc; cursor: pointer; display: inline-block; width: 26px; height: 26px; }
|
||||||
|
|
||||||
|
.drawing-board-control-colors-rainbows { display: inline-block; margin-left: 5px; position: absolute; left: 0; top: 33px; margin-left: 0; z-index: 100; width: 250px; height: auto; padding: 4px; }
|
||||||
|
|
||||||
|
.drawing-board-control-colors-rainbow { height: 18px; }
|
||||||
|
|
||||||
|
.drawing-board-control-colors-picker:first-child { margin-right: 5px; }
|
||||||
|
|
||||||
|
.drawing-board-control-colors-picker { display: inline-block; width: 18px; height: 18px; cursor: pointer; }
|
||||||
|
|
||||||
|
.drawing-board-control-colors-picker[data-color="rgba(255, 255, 255, 1)"] { width: 16px; height: 17px; border: 1px solid #ccc; border-bottom: none; }
|
||||||
|
|
||||||
|
.drawing-board-control-colors-picker:hover { width: 16px; height: 16px; border: 1px solid #555; }
|
||||||
|
|
||||||
|
.drawing-board-control-drawingmode > button { margin-right: 2px; }
|
||||||
|
.drawing-board-control-drawingmode > button:last-child { margin-right: 0; }
|
||||||
|
|
||||||
|
.drawing-board-control-drawingmode-pencil-button { overflow: hidden; *text-indent: -9999px; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe9JREFUeNpiZAACVlFRBhYREQZcQPnbNwa3N28YlL5+ZfgLFfvPwGD9m4FhIgsDHuAO0gTUDNKIBvyBmqt/MTDMY8Gl0f31azD7L6oUIxCnAzWmAPHBfwwM01AMUAV6JfPQIVwOYgVqqPnFyOjz6///O38YGKpAgmAD1OXlGdTk5PD5hgeouZudj8/uy9evP/78/dsFFPsJNiAoKIiBABAHap4oLi9v8fTNm48//v7NBwbgWZgkE7rqt8DY+A8JZRBW+cfIuEDT0NDlzadP3z98/doPFDuCrB7TAGFhBqCNIGwM9OcKUzs7+xdv3355+f79VqDYAiTDwZgJh7ONgYpnOvn4GL949erT7UePdgL5JVCD4fgBLBBxaX74+PG789evnwby0/8jKXgExIeB+CG6Af///1e9Ki9vFSAkZPzoyZPPJy9evA9MB77/sWiEARZkzV+/fvXYtGnTpG3btj28EBT0BqjZ5D8OjXCwPksUhA1Wpggf/PHjx/9169Y9EBERaUlgZmaIAcrLE4rk5sIqBqDmlefnRPzfWGX5EaSZm5ubgRloADGA5QZ3RgK7gESY4PMNn9ZtObPpzZvfU4DiYkiB/RcHG+S7fyxAMH/lFU2GOZd2bLx18/cEUMoD4j9I+DcS/RtJHGTYf4AAAwAxaOMYHjxKFwAAAABJRU5ErkJggg=='); background-position: 50% 50%; background-repeat: no-repeat; }
|
||||||
|
.drawing-board-control-drawingmode-pencil-button:before { content: ""; display: block; width: 0; height: 100%; }
|
||||||
|
|
||||||
|
.drawing-board-control-drawingmode-eraser-button { overflow: hidden; *text-indent: -9999px; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkpJREFUeNp0kk+IElEcx39vFBc9+OfQRTAwzFt4CaYOKStj6MoeculStzoIQSB4kCVckmDx4iGCXWYJIqjoVOzO1l4qT1F7WfBWHvxzDPyTB3XUmXn93suRybUffHmP997n9/cRsFgwGARJkiAcDsPlwgEIeEZQAhCRAkgAlOD6SQP4rgMFDWVnYCAQgFgsBqFQCBwOByzZNQOotPHx1RNCCCipu6bfb+zSnslkeOQVILPrBkAirbws9btdTEWAzZPXpfepOzaeGMBXwe/3w3+MwTc3Dl+UeghTiskbBvR6Pbh18mZHB0jjmxvCKhIfR37s3r+Sevf8ca/T4TBF2HTSODuDxP7uNjrZFFbBk8lEzOVyspa4ykGYw2zfbTb/7ilvok1YhlVVFfP5vDydTkHXdXDdlhZOOnPY4/HA0YPtp3h6LFjh8XgsFgoFGTPgsKm1zDr8ajTQh8Fh5eGjZzjGI8yjKlgjF4tFGdd/YKYmRja24hw+zu3sYe2HiH3hYzQjl8tleTQanWtou93G6Qngdrth6+1+9h6hTULJZ/PeziJXKhV5OByeg1ut1gJOp9NZTdNOcQ419ot+ggp1qoLdBFmqVmNpm3A8Huewy+Wq1RH8QH9zmBlJJpMRdCIqiiIPBgN+2MCGsW/r8/kgGo1m0fmpzWarseayHlmNeL1eFiWC0cRqtSr3+/3FpSiKHMZtjU1glbFyfKgLTqfzEka9OJvNeDnzz1JnCaFmqOl8ZdJY1SiDOXCiXKg1NtG5DIt0y6ov3dE/AgwAENFWYYLj4mYAAAAASUVORK5CYII='); background-position: 50% 50%; background-repeat: no-repeat; }
|
||||||
|
.drawing-board-control-drawingmode-eraser-button:before { content: ""; display: block; width: 0; height: 100%; }
|
||||||
|
|
||||||
|
.drawing-board-control-drawingmode-filler-button { overflow: hidden; *text-indent: -9999px; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnNJREFUeNp0k0trE1EUx89MJpNJooYYXBgDNtCKdRPwlbqoCKUtaNVNA0Uo7UbMxoVPEARTXEi+QWfnwn6DEAlEkrSLttTGRiULEQlJ8yChmbzI++E50yTUJA78uMy953/u/557LmOz2WDEZ2m1WrckSRJSqdR2tVrdHQyYebwHtVoNuFHqTqczhQnWKaBYLDoKhcIuzgHDMKBSqeD20qd+LNdsNocSoFhRr9ctpVLJigl4xIIJQizLAmG4cAPa7bYcy9Iug5TL5UYikbD6/X7Rbre/IUcYe3WUW5ZsnQQzW9LpNOPz+UQc5aBM5mgdh7vI9FCCAesW2tnr9YqZTAby+bw8f3AQRP6853n+Ph5hemSCntjj8YjZbFYWx2IxeS2RSEMwuA87O79eqdXquVolK+GxnP0EPbHb7RZJSGABIR6PA11zJHKIR2MhHA5DIPDj7eH3j95KpfK60Wg8Yntil8slkqgnpioLghacTidoNDpEC3q9HnheCc3s1jZeLcW943pirPw/4lKpBkqlDubnl/riycnLsLy88EKj0fhzuRyZv8RFo1E6wpBYkiqy7Z54YmIcVlYeyOKC4mYwJ0nHRaQuM5vNT6hB/iceG7sIq6sPnwmC4MerDkby40AOCCoiddie1Wp92W7zQ2KTyQSLizNP8T0EsPLBbxEDnCj0GkM2qIEwyZRCobizsfH5A1ZXFhuN52F29vpz3HkL574mk8lj24Y5wsHkvjjoX0BOIWc5jruHzbK2ufmzEwpFO3jnDhQv4JoROYdoERVyGjEgZ8iBDlF3FzXo4go6utZ9lftY4N/dXisjR0i1G0ublv8KMAA0ZoUlicxrhwAAAABJRU5ErkJggg=='); background-position: 50% 50%; background-repeat: no-repeat; }
|
||||||
|
.drawing-board-control-drawingmode-filler-button:before { content: ""; display: block; width: 0; height: 100%; }
|
||||||
|
|
||||||
|
.drawing-board-control-navigation > button { font-family: Helvetica, Arial, sans-serif; font-size: 14px; font-weight: bold; margin-right: 2px; }
|
||||||
|
.drawing-board-control-navigation > button:last-child { margin-right: 0; }
|
||||||
|
|
||||||
|
.drawing-board-control-size[data-drawing-board-type="range"] .drawing-board-control-inner { width: 75px; }
|
||||||
|
.drawing-board-control-size[data-drawing-board-type="dropdown"] .drawing-board-control-inner { overflow: visible; }
|
||||||
|
|
||||||
|
.drawing-board-control-size-range-input { position: relative; width: 100%; z-index: 100; margin: 0; padding: 0; border: 0; }
|
||||||
|
|
||||||
|
.drawing-board-control-size-range-current, .drawing-board-control-size-dropdown-current span, .drawing-board-control-size-dropdown span { display: block; background: #333; opacity: .8; }
|
||||||
|
|
||||||
|
.drawing-board-control-size-range-current { display: inline-block; opacity: .15; position: absolute; pointer-events: none; left: 50%; top: 50%; z-index: 50; }
|
||||||
|
|
||||||
|
.drawing-board-control-size-dropdown-current { display: block; height: 100%; width: 40px; overflow: hidden; position: relative; }
|
||||||
|
.drawing-board-control-size-dropdown-current span { position: absolute; left: 50%; top: 50%; }
|
||||||
|
|
||||||
|
.drawing-board-control-size-dropdown { position: absolute; left: -6px; top: 33px; height: auto; list-style-type: none; margin: 0; padding: 0; z-index: 100; }
|
||||||
|
.drawing-board-control-size-dropdown li { display: block; padding: 4px; margin: 3px 0; min-height: 16px; }
|
||||||
|
.drawing-board-control-size-dropdown li:hover { background: #ccc; }
|
||||||
|
.drawing-board-control-size-dropdown span { margin: 0 auto; }
|
||||||
|
|
||||||
|
.drawing-board-control-download-button { overflow: hidden; *text-indent: -9999px; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoBJREFUeNqMkr9PU1EUx7/vR1tQ3yu10hAmTawtBSYSy2YccFOcnDQm/gewOLnj5GYMg4sdXFxkMca4OBAwdUBe/ZkIGFp+9tHXvh/3/fTcAm01aLzJybnn3nM+95tzrnDl6Tb+sibuTmWUWj3C6/Juk+LySUmyvt0FCKKA02ryOCy6LBiu15ngMbZ5DDCNBqIw6gKM+n4nECUJru3glKry8CpjQaHVYmC2rVH82DIMMMdGGARdwJ+SPNdFS9chx+MXDNMp/NzagWNatk/nQU/hiYAoih6FYTBCBs9zUXMCbAhx2OYOv351lPOJ3EwH4LteL6Dcp/Rfu3FrstDyIizt+agpaYxNDU0M9gl4v7Ck+TYrCYLQqZHUyTtdQBiutPSGUflczSXHs5lVKwZdSOBMvwztxVvN0RtzsiyXBFHsAvL5PBSnCpXV2getILFiE2SjspYbuZzPiDSZ2vOXmlvX5yQqTmMfg9ZXqtls1wnT09OHEyAq0aFLg/gSXsSWq9wWk+p9PrCoYTwcijdLOfE7UsEufN9HGIYnT4EnTGIXe1KqtNNIvuNnGamxfi7SgQD/nIJCTbzOPQ/SQh1pud7T4M6W/8qFIw/5WAr5m7Ozsw9UVc069Fls2yJzSC5/lnc9RhaHZVnfSqUnEgXP2oBqtYqBgYG2+mKxmOVADnAcB4yxHgD1RzehKKns/LyV4gUHBweQy+UyRkdH6UKJ6fQDFxcXoWkaXJeRuTgUGCdLQJ9bx72lGZimGWs2m+083oN+2iiFQiGxvLy8RrDzudyltgrG3N8U2G8CrPz4sGYYRqJSqWR4H/jNWbJhUjAWi8XG8R/L87yPpGCVttVfAgwAVpZR+8tZC08AAAAASUVORK5CYII='); background-position: 50% 50%; background-repeat: no-repeat; }
|
||||||
|
.drawing-board-control-download-button:before { content: ""; display: block; width: 0; height: 100%; }
|
||||||
1374
mondumas/static/dist/drawingboard/drawingboard.js
vendored
Normal file
5
mondumas/static/dist/drawingboard/drawingboard.min.css
vendored
Normal file
4
mondumas/static/dist/drawingboard/drawingboard.min.js
vendored
Normal file
16
mondumas/static/dist/drawingboard/drawingboard.nocontrol.css
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/* drawingboard.js v0.4.6 - https://github.com/Leimi/drawingboard.js
|
||||||
|
* Copyright (c) 2015 Emmanuel Pelletier
|
||||||
|
* Licensed MIT */
|
||||||
|
.drawing-board, .drawing-board * { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; }
|
||||||
|
|
||||||
|
.drawing-board-utils-hidden { display: none !important; }
|
||||||
|
|
||||||
|
.drawing-board { position: relative; display: block; }
|
||||||
|
|
||||||
|
.drawing-board-canvas-wrapper { position: relative; margin: 0; border: 1px solid #ddd; }
|
||||||
|
|
||||||
|
.drawing-board-canvas { position: absolute; top: 0; left: 0; z-index: 10; width: auto; }
|
||||||
|
|
||||||
|
.drawing-board-canvas { cursor: crosshair; z-index: 20; }
|
||||||
|
|
||||||
|
.drawing-board-cursor { position: absolute; top: 0; left: 0; pointer-events: none; border-radius: 50%; background: #ccc; background: rgba(0, 0, 0, 0.2); z-index: 30; }
|
||||||
971
mondumas/static/dist/drawingboard/drawingboard.nocontrol.js
vendored
Normal file
@@ -0,0 +1,971 @@
|
|||||||
|
/* drawingboard.js v0.4.6 - https://github.com/Leimi/drawingboard.js
|
||||||
|
* Copyright (c) 2015 Emmanuel Pelletier
|
||||||
|
* Licensed MIT */
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SimpleUndo is a very basic javascript undo/redo stack for managing histories of basically anything.
|
||||||
|
*
|
||||||
|
* options are: {
|
||||||
|
* * `provider` : required. a function to call on `save`, which should provide the current state of the historized object through the given "done" callback
|
||||||
|
* * `maxLength` : the maximum number of items in history
|
||||||
|
* * `opUpdate` : a function to call to notify of changes in history. Will be called on `save`, `undo`, `redo` and `clear`
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
var SimpleUndo = function(options) {
|
||||||
|
|
||||||
|
var settings = options ? options : {};
|
||||||
|
var defaultOptions = {
|
||||||
|
provider: function() {
|
||||||
|
throw new Error("No provider!");
|
||||||
|
},
|
||||||
|
maxLength: 30,
|
||||||
|
onUpdate: function() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.provider = (typeof settings.provider != 'undefined') ? settings.provider : defaultOptions.provider;
|
||||||
|
this.maxLength = (typeof settings.maxLength != 'undefined') ? settings.maxLength : defaultOptions.maxLength;
|
||||||
|
this.onUpdate = (typeof settings.onUpdate != 'undefined') ? settings.onUpdate : defaultOptions.onUpdate;
|
||||||
|
|
||||||
|
this.initialItem = null;
|
||||||
|
this.clear();
|
||||||
|
};
|
||||||
|
|
||||||
|
function truncate (stack, limit) {
|
||||||
|
while (stack.length > limit) {
|
||||||
|
stack.shift();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SimpleUndo.prototype.initialize = function(initialItem) {
|
||||||
|
this.stack[0] = initialItem;
|
||||||
|
this.initialItem = initialItem;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
SimpleUndo.prototype.clear = function() {
|
||||||
|
this.stack = [this.initialItem];
|
||||||
|
this.position = 0;
|
||||||
|
this.onUpdate();
|
||||||
|
};
|
||||||
|
|
||||||
|
SimpleUndo.prototype.save = function() {
|
||||||
|
this.provider(function(current) {
|
||||||
|
truncate(this.stack, this.maxLength);
|
||||||
|
this.position = Math.min(this.position,this.stack.length - 1);
|
||||||
|
|
||||||
|
this.stack = this.stack.slice(0, this.position + 1);
|
||||||
|
this.stack.push(current);
|
||||||
|
this.position++;
|
||||||
|
this.onUpdate();
|
||||||
|
}.bind(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
SimpleUndo.prototype.undo = function(callback) {
|
||||||
|
if (this.canUndo()) {
|
||||||
|
var item = this.stack[--this.position];
|
||||||
|
this.onUpdate();
|
||||||
|
|
||||||
|
if (callback) {
|
||||||
|
callback(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SimpleUndo.prototype.redo = function(callback) {
|
||||||
|
if (this.canRedo()) {
|
||||||
|
var item = this.stack[++this.position];
|
||||||
|
this.onUpdate();
|
||||||
|
|
||||||
|
if (callback) {
|
||||||
|
callback(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SimpleUndo.prototype.canUndo = function() {
|
||||||
|
return this.position > 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
SimpleUndo.prototype.canRedo = function() {
|
||||||
|
return this.position < this.count();
|
||||||
|
};
|
||||||
|
|
||||||
|
SimpleUndo.prototype.count = function() {
|
||||||
|
return this.stack.length - 1; // -1 because of initial item
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//exports
|
||||||
|
// node module
|
||||||
|
if (typeof module != 'undefined') {
|
||||||
|
module.exports = SimpleUndo;
|
||||||
|
}
|
||||||
|
|
||||||
|
// browser global
|
||||||
|
if (typeof window != 'undefined') {
|
||||||
|
window.SimpleUndo = SimpleUndo;
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
||||||
|
window.DrawingBoard = typeof DrawingBoard !== "undefined" ? DrawingBoard : {};
|
||||||
|
|
||||||
|
|
||||||
|
DrawingBoard.Utils = {};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Tim (lite)
|
||||||
|
* github.com/premasagar/tim
|
||||||
|
*//*
|
||||||
|
A tiny, secure JavaScript micro-templating script.
|
||||||
|
*/
|
||||||
|
DrawingBoard.Utils.tpl = (function(){
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var start = "{{",
|
||||||
|
end = "}}",
|
||||||
|
path = "[a-z0-9_][\\.a-z0-9_]*", // e.g. config.person.name
|
||||||
|
pattern = new RegExp(start + "\\s*("+ path +")\\s*" + end, "gi"),
|
||||||
|
undef;
|
||||||
|
|
||||||
|
return function(template, data){
|
||||||
|
// Merge data into the template string
|
||||||
|
return template.replace(pattern, function(tag, token){
|
||||||
|
var path = token.split("."),
|
||||||
|
len = path.length,
|
||||||
|
lookup = data,
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
for (; i < len; i++){
|
||||||
|
lookup = lookup[path[i]];
|
||||||
|
|
||||||
|
// Property not found
|
||||||
|
if (lookup === undef){
|
||||||
|
throw "tim: '" + path[i] + "' not found in " + tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the required value
|
||||||
|
if (i === len - 1){
|
||||||
|
return lookup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* https://github.com/jeromeetienne/microevent.js
|
||||||
|
* MicroEvent - to make any js object an event emitter (server or browser)
|
||||||
|
*
|
||||||
|
* - pure javascript - server compatible, browser compatible
|
||||||
|
* - dont rely on the browser doms
|
||||||
|
* - super simple - you get it immediatly, no mistery, no magic involved
|
||||||
|
*
|
||||||
|
* - create a MicroEventDebug with goodies to debug
|
||||||
|
* - make it safer to use
|
||||||
|
*/
|
||||||
|
DrawingBoard.Utils.MicroEvent = function(){};
|
||||||
|
|
||||||
|
DrawingBoard.Utils.MicroEvent.prototype = {
|
||||||
|
bind : function(event, fct){
|
||||||
|
this._events = this._events || {};
|
||||||
|
this._events[event] = this._events[event] || [];
|
||||||
|
this._events[event].push(fct);
|
||||||
|
},
|
||||||
|
unbind : function(event, fct){
|
||||||
|
this._events = this._events || {};
|
||||||
|
if( event in this._events === false ) return;
|
||||||
|
this._events[event].splice(this._events[event].indexOf(fct), 1);
|
||||||
|
},
|
||||||
|
trigger : function(event /* , args... */){
|
||||||
|
this._events = this._events || {};
|
||||||
|
if( event in this._events === false ) return;
|
||||||
|
for(var i = 0; i < this._events[event].length; i++){
|
||||||
|
this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//I know.
|
||||||
|
DrawingBoard.Utils._boxBorderSize = function($el, withPadding, withMargin, direction) {
|
||||||
|
withPadding = !!withPadding || true;
|
||||||
|
withMargin = !!withMargin || false;
|
||||||
|
var width = 0,
|
||||||
|
props;
|
||||||
|
if (direction == "width") {
|
||||||
|
props = ['border-left-width', 'border-right-width'];
|
||||||
|
if (withPadding) props.push('padding-left', 'padding-right');
|
||||||
|
if (withMargin) props.push('margin-left', 'margin-right');
|
||||||
|
} else {
|
||||||
|
props = ['border-top-width', 'border-bottom-width'];
|
||||||
|
if (withPadding) props.push('padding-top', 'padding-bottom');
|
||||||
|
if (withMargin) props.push('margin-top', 'margin-bottom');
|
||||||
|
}
|
||||||
|
for (var i = props.length - 1; i >= 0; i--)
|
||||||
|
width += parseInt($el.css(props[i]).replace('px', ''), 10);
|
||||||
|
return width;
|
||||||
|
};
|
||||||
|
|
||||||
|
DrawingBoard.Utils.boxBorderWidth = function($el, withPadding, withMargin) {
|
||||||
|
return DrawingBoard.Utils._boxBorderSize($el, withPadding, withMargin, 'width');
|
||||||
|
};
|
||||||
|
|
||||||
|
DrawingBoard.Utils.boxBorderHeight = function($el, withPadding, withMargin) {
|
||||||
|
return DrawingBoard.Utils._boxBorderSize($el, withPadding, withMargin, 'height');
|
||||||
|
};
|
||||||
|
|
||||||
|
DrawingBoard.Utils.isColor = function(string) {
|
||||||
|
if (!string || !string.length) return false;
|
||||||
|
return (/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i).test(string) || $.inArray(string.substring(0, 3), ['rgb', 'hsl']) !== -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packs an RGB color into a single integer.
|
||||||
|
*/
|
||||||
|
DrawingBoard.Utils.RGBToInt = function(r, g, b) {
|
||||||
|
var c = 0;
|
||||||
|
c |= (r & 255) << 16;
|
||||||
|
c |= (g & 255) << 8;
|
||||||
|
c |= (b & 255);
|
||||||
|
return c;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns informations on the pixel located at (x,y).
|
||||||
|
*/
|
||||||
|
DrawingBoard.Utils.pixelAt = function(image, x, y) {
|
||||||
|
var i = (y * image.width + x) * 4;
|
||||||
|
var c = DrawingBoard.Utils.RGBToInt(
|
||||||
|
image.data[i],
|
||||||
|
image.data[i + 1],
|
||||||
|
image.data[i + 2]
|
||||||
|
);
|
||||||
|
|
||||||
|
return [
|
||||||
|
i, // INDEX
|
||||||
|
x, // X
|
||||||
|
y, // Y
|
||||||
|
c // COLOR
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares two colors with the given tolerance (between 0 and 255).
|
||||||
|
*/
|
||||||
|
DrawingBoard.Utils.compareColors = function(a, b, tolerance) {
|
||||||
|
if (tolerance === 0) {
|
||||||
|
return (a === b);
|
||||||
|
}
|
||||||
|
|
||||||
|
var ra = (a >> 16) & 255, rb = (b >> 16) & 255,
|
||||||
|
ga = (a >> 8) & 255, gb = (b >> 8) & 255,
|
||||||
|
ba = a & 255, bb = b & 255;
|
||||||
|
|
||||||
|
return (Math.abs(ra - rb) <= tolerance)
|
||||||
|
&& (Math.abs(ga - gb) <= tolerance)
|
||||||
|
&& (Math.abs(ba - bb) <= tolerance);
|
||||||
|
};
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var lastTime = 0;
|
||||||
|
var vendors = ['ms', 'moz', 'webkit', 'o'];
|
||||||
|
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
||||||
|
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
|
||||||
|
window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
window.DrawingBoard = typeof DrawingBoard !== "undefined" ? DrawingBoard : {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pass the id of the html element to put the drawing board into
|
||||||
|
* and some options : {
|
||||||
|
* controls: array of controls to initialize with the drawingboard. 'Colors', 'Size', and 'Navigation' by default
|
||||||
|
* instead of simple strings, you can pass an object to define a control opts
|
||||||
|
* ie ['Color', { Navigation: { reset: false }}]
|
||||||
|
* controlsPosition: "top left" by default. Define where to put the controls: at the "top" or "bottom" of the canvas, aligned to "left"/"right"/"center"
|
||||||
|
* background: background of the drawing board. Give a hex color or an image url "#ffffff" (white) by default
|
||||||
|
* color: pencil color ("#000000" by default)
|
||||||
|
* size: pencil size (3 by default)
|
||||||
|
* webStorage: 'session', 'local' or false ('session' by default). store the current drawing in session or local storage and restore it when you come back
|
||||||
|
* droppable: true or false (false by default). If true, dropping an image on the canvas will include it and allow you to draw on it,
|
||||||
|
* errorMessage: html string to put in the board's element on browsers that don't support canvas.
|
||||||
|
* stretchImg: default behavior of image setting on the canvas: set to the canvas width/height or not? false by default
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
DrawingBoard.Board = function(id, opts) {
|
||||||
|
this.opts = this.mergeOptions(opts);
|
||||||
|
|
||||||
|
this.ev = new DrawingBoard.Utils.MicroEvent();
|
||||||
|
|
||||||
|
this.id = id;
|
||||||
|
this.$el = $(document.getElementById(id));
|
||||||
|
if (!this.$el.length)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var tpl = '<div class="drawing-board-canvas-wrapper"></canvas><canvas class="drawing-board-canvas"></canvas><div class="drawing-board-cursor drawing-board-utils-hidden"></div></div>';
|
||||||
|
if (this.opts.controlsPosition.indexOf("bottom") > -1) tpl += '<div class="drawing-board-controls"></div>';
|
||||||
|
else tpl = '<div class="drawing-board-controls"></div>' + tpl;
|
||||||
|
|
||||||
|
this.$el.addClass('drawing-board').append(tpl);
|
||||||
|
this.dom = {
|
||||||
|
$canvasWrapper: this.$el.find('.drawing-board-canvas-wrapper'),
|
||||||
|
$canvas: this.$el.find('.drawing-board-canvas'),
|
||||||
|
$cursor: this.$el.find('.drawing-board-cursor'),
|
||||||
|
$controls: this.$el.find('.drawing-board-controls')
|
||||||
|
};
|
||||||
|
|
||||||
|
$.each(['left', 'right', 'center'], $.proxy(function(n, val) {
|
||||||
|
if (this.opts.controlsPosition.indexOf(val) > -1) {
|
||||||
|
this.dom.$controls.attr('data-align', val);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
this.canvas = this.dom.$canvas.get(0);
|
||||||
|
this.ctx = this.canvas && this.canvas.getContext && this.canvas.getContext('2d') ? this.canvas.getContext('2d') : null;
|
||||||
|
this.color = this.opts.color;
|
||||||
|
|
||||||
|
if (!this.ctx) {
|
||||||
|
if (this.opts.errorMessage)
|
||||||
|
this.$el.html(this.opts.errorMessage);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.storage = this._getStorage();
|
||||||
|
|
||||||
|
this.initHistory();
|
||||||
|
//init default board values before controls are added (mostly pencil color and size)
|
||||||
|
this.reset({ webStorage: false, history: false, background: false });
|
||||||
|
//init controls (they will need the default board values to work like pencil color and size)
|
||||||
|
this.initControls();
|
||||||
|
//set board's size after the controls div is added
|
||||||
|
this.resize();
|
||||||
|
//reset the board to take all resized space
|
||||||
|
this.reset({ webStorage: false, history: false, background: true });
|
||||||
|
this.restoreWebStorage();
|
||||||
|
this.initDropEvents();
|
||||||
|
this.initDrawEvents();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DrawingBoard.Board.defaultOpts = {
|
||||||
|
controls: ['Color', 'DrawingMode', 'Size', 'Navigation'],
|
||||||
|
controlsPosition: "top left",
|
||||||
|
color: "#000000",
|
||||||
|
size: 1,
|
||||||
|
background: "#fff",
|
||||||
|
eraserColor: "background",
|
||||||
|
fillTolerance: 100,
|
||||||
|
fillHack: true, //try to prevent issues with anti-aliasing with a little hack by default
|
||||||
|
webStorage: 'session',
|
||||||
|
droppable: false,
|
||||||
|
enlargeYourContainer: false,
|
||||||
|
errorMessage: "<p>It seems you use an obsolete browser. <a href=\"http://browsehappy.com/\" target=\"_blank\">Update it</a> to start drawing.</p>",
|
||||||
|
stretchImg: false //when setting the canvas img, strech the image at the whole canvas size when this opt is true
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DrawingBoard.Board.prototype = {
|
||||||
|
|
||||||
|
mergeOptions: function(opts) {
|
||||||
|
opts = $.extend({}, DrawingBoard.Board.defaultOpts, opts);
|
||||||
|
if (!opts.background && opts.eraserColor === "background")
|
||||||
|
opts.eraserColor = "transparent";
|
||||||
|
return opts;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Canvas reset/resize methods: put back the canvas to its default values
|
||||||
|
*
|
||||||
|
* depending on options, can set color, size, background back to default values
|
||||||
|
* and store the reseted canvas in webstorage and history queue
|
||||||
|
*
|
||||||
|
* resize values depend on the `enlargeYourContainer` option
|
||||||
|
*/
|
||||||
|
|
||||||
|
reset: function(opts) {
|
||||||
|
opts = $.extend({
|
||||||
|
color: this.opts.color,
|
||||||
|
size: this.opts.size,
|
||||||
|
webStorage: true,
|
||||||
|
history: true,
|
||||||
|
background: false
|
||||||
|
}, opts);
|
||||||
|
|
||||||
|
this.setMode('pencil');
|
||||||
|
|
||||||
|
if (opts.background) {
|
||||||
|
this.resetBackground(this.opts.background, $.proxy(function() {
|
||||||
|
if (opts.history) this.saveHistory();
|
||||||
|
}, this));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.color) this.setColor(opts.color);
|
||||||
|
if (opts.size) this.ctx.lineWidth = opts.size;
|
||||||
|
|
||||||
|
this.ctx.lineCap = "round";
|
||||||
|
this.ctx.lineJoin = "round";
|
||||||
|
// this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.width);
|
||||||
|
|
||||||
|
if (opts.webStorage) this.saveWebStorage();
|
||||||
|
|
||||||
|
// if opts.background we already dealt with the history
|
||||||
|
if (opts.history && !opts.background) this.saveHistory();
|
||||||
|
|
||||||
|
this.blankCanvas = this.getImg();
|
||||||
|
|
||||||
|
this.ev.trigger('board:reset', opts);
|
||||||
|
},
|
||||||
|
|
||||||
|
resetBackground: function(background, callback) {
|
||||||
|
background = background || this.opts.background;
|
||||||
|
|
||||||
|
var bgIsColor = DrawingBoard.Utils.isColor(background);
|
||||||
|
var prevMode = this.getMode();
|
||||||
|
this.setMode('pencil');
|
||||||
|
this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
|
||||||
|
if (bgIsColor) {
|
||||||
|
this.ctx.fillStyle = background;
|
||||||
|
this.ctx.fillRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
|
||||||
|
this.history.initialize(this.getImg());
|
||||||
|
if (callback) callback();
|
||||||
|
} else if (background)
|
||||||
|
this.setImg(background, {
|
||||||
|
callback: $.proxy(function() {
|
||||||
|
this.history.initialize(this.getImg());
|
||||||
|
if (callback) callback();
|
||||||
|
}, this)
|
||||||
|
});
|
||||||
|
this.setMode(prevMode);
|
||||||
|
},
|
||||||
|
|
||||||
|
resize: function() {
|
||||||
|
this.dom.$controls.toggleClass('drawing-board-controls-hidden', (!this.controls || !this.controls.length));
|
||||||
|
|
||||||
|
var canvasWidth, canvasHeight;
|
||||||
|
var widths = [
|
||||||
|
this.$el.width(),
|
||||||
|
DrawingBoard.Utils.boxBorderWidth(this.$el),
|
||||||
|
DrawingBoard.Utils.boxBorderWidth(this.dom.$canvasWrapper, true, true)
|
||||||
|
];
|
||||||
|
var heights = [
|
||||||
|
this.$el.height(),
|
||||||
|
DrawingBoard.Utils.boxBorderHeight(this.$el),
|
||||||
|
this.dom.$controls.height(),
|
||||||
|
DrawingBoard.Utils.boxBorderHeight(this.dom.$controls, false, true),
|
||||||
|
DrawingBoard.Utils.boxBorderHeight(this.dom.$canvasWrapper, true, true)
|
||||||
|
];
|
||||||
|
var that = this;
|
||||||
|
var sum = function(values, multiplier) { //make the sum of all array values
|
||||||
|
multiplier = multiplier || 1;
|
||||||
|
var res = values[0];
|
||||||
|
for (var i = 1; i < values.length; i++) {
|
||||||
|
res = res + (values[i]*multiplier);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
var sub = function(values) { return sum(values, -1); }; //substract all array values from the first one
|
||||||
|
|
||||||
|
if (this.opts.enlargeYourContainer) {
|
||||||
|
canvasWidth = this.$el.width();
|
||||||
|
canvasHeight = this.$el.height();
|
||||||
|
|
||||||
|
this.$el.width( sum(widths) );
|
||||||
|
this.$el.height( sum(heights) );
|
||||||
|
} else {
|
||||||
|
canvasWidth = sub(widths);
|
||||||
|
canvasHeight = sub(heights);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dom.$canvasWrapper.css('width', canvasWidth + 'px');
|
||||||
|
this.dom.$canvasWrapper.css('height', canvasHeight + 'px');
|
||||||
|
|
||||||
|
this.dom.$canvas.css('width', canvasWidth + 'px');
|
||||||
|
this.dom.$canvas.css('height', canvasHeight + 'px');
|
||||||
|
|
||||||
|
this.canvas.width = canvasWidth;
|
||||||
|
this.canvas.height = canvasHeight;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls:
|
||||||
|
* the drawing board can has various UI elements to control it.
|
||||||
|
* one control is represented by a class in the namespace DrawingBoard.Control
|
||||||
|
* it must have a $el property (jQuery object), representing the html element to append on the drawing board at initialization.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
initControls: function() {
|
||||||
|
this.controls = [];
|
||||||
|
if (!this.opts.controls.length || !DrawingBoard.Control) return false;
|
||||||
|
for (var i = 0; i < this.opts.controls.length; i++) {
|
||||||
|
var c = null;
|
||||||
|
if (typeof this.opts.controls[i] == "string")
|
||||||
|
c = new window['DrawingBoard']['Control'][this.opts.controls[i]](this);
|
||||||
|
else if (typeof this.opts.controls[i] == "object") {
|
||||||
|
for (var controlName in this.opts.controls[i]) break;
|
||||||
|
c = new window['DrawingBoard']['Control'][controlName](this, this.opts.controls[i][controlName]);
|
||||||
|
}
|
||||||
|
if (c) {
|
||||||
|
this.addControl(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
//add a new control or an existing one at the position you want in the UI
|
||||||
|
//to add a totally new control, you can pass a string with the js class as 1st parameter and control options as 2nd ie "addControl('Navigation', { reset: false }"
|
||||||
|
//the last parameter (2nd or 3rd depending on the situation) is always the position you want to place the control at
|
||||||
|
addControl: function(control, optsOrPos, pos) {
|
||||||
|
if (typeof control !== "string" && (typeof control !== "object" || !control instanceof DrawingBoard.Control))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var opts = typeof optsOrPos == "object" ? optsOrPos : {};
|
||||||
|
pos = pos ? pos*1 : (typeof optsOrPos == "number" ? optsOrPos : null);
|
||||||
|
|
||||||
|
if (typeof control == "string")
|
||||||
|
control = new window['DrawingBoard']['Control'][control](this, opts);
|
||||||
|
|
||||||
|
if (pos)
|
||||||
|
this.dom.$controls.children().eq(pos).before(control.$el);
|
||||||
|
else
|
||||||
|
this.dom.$controls.append(control.$el);
|
||||||
|
|
||||||
|
if (!this.controls)
|
||||||
|
this.controls = [];
|
||||||
|
this.controls.push(control);
|
||||||
|
this.dom.$controls.removeClass('drawing-board-controls-hidden');
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* History methods: undo and redo drawed lines
|
||||||
|
*/
|
||||||
|
|
||||||
|
initHistory: function() {
|
||||||
|
this.history = new SimpleUndo({
|
||||||
|
maxLength: 30,
|
||||||
|
provider: $.proxy(function(done) {
|
||||||
|
done(this.getImg());
|
||||||
|
}, this),
|
||||||
|
onUpdate: $.proxy(function() {
|
||||||
|
this.ev.trigger('historyNavigation');
|
||||||
|
}, this)
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
saveHistory: function() {
|
||||||
|
this.history.save();
|
||||||
|
},
|
||||||
|
|
||||||
|
restoreHistory: function(image) {
|
||||||
|
this.setImg(image, {
|
||||||
|
callback: $.proxy(function() {
|
||||||
|
this.saveWebStorage();
|
||||||
|
}, this)
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
goBackInHistory: function() {
|
||||||
|
this.history.undo($.proxy(this.restoreHistory, this));
|
||||||
|
},
|
||||||
|
|
||||||
|
goForthInHistory: function() {
|
||||||
|
this.history.redo($.proxy(this.restoreHistory, this));
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Image methods: you can directly put an image on the canvas, get it in base64 data url or start a download
|
||||||
|
*/
|
||||||
|
|
||||||
|
setImg: function(src, opts) {
|
||||||
|
opts = $.extend({
|
||||||
|
stretch: this.opts.stretchImg,
|
||||||
|
callback: null
|
||||||
|
}, opts);
|
||||||
|
|
||||||
|
var ctx = this.ctx;
|
||||||
|
var img = new Image();
|
||||||
|
var oldGCO = ctx.globalCompositeOperation;
|
||||||
|
img.onload = function() {
|
||||||
|
ctx.globalCompositeOperation = "source-over";
|
||||||
|
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
|
||||||
|
|
||||||
|
if (opts.stretch) {
|
||||||
|
ctx.drawImage(img, 0, 0, ctx.canvas.width, ctx.canvas.height);
|
||||||
|
} else {
|
||||||
|
ctx.drawImage(img, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.globalCompositeOperation = oldGCO;
|
||||||
|
|
||||||
|
if (opts.callback) {
|
||||||
|
opts.callback();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
img.src = src;
|
||||||
|
},
|
||||||
|
|
||||||
|
getImg: function() {
|
||||||
|
return this.canvas.toDataURL("image/png");
|
||||||
|
},
|
||||||
|
|
||||||
|
downloadImg: function() {
|
||||||
|
var img = this.getImg();
|
||||||
|
img = img.replace("image/png", "image/octet-stream");
|
||||||
|
window.location.href = img;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WebStorage handling : save and restore to local or session storage
|
||||||
|
*/
|
||||||
|
|
||||||
|
saveWebStorage: function() {
|
||||||
|
if (window[this.storage]) {
|
||||||
|
window[this.storage].setItem('drawing-board-' + this.id, this.getImg());
|
||||||
|
this.ev.trigger('board:save' + this.storage.charAt(0).toUpperCase() + this.storage.slice(1), this.getImg());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
restoreWebStorage: function() {
|
||||||
|
if (window[this.storage] && window[this.storage].getItem('drawing-board-' + this.id) !== null) {
|
||||||
|
this.setImg(window[this.storage].getItem('drawing-board-' + this.id));
|
||||||
|
this.ev.trigger('board:restore' + this.storage.charAt(0).toUpperCase() + this.storage.slice(1), window[this.storage].getItem('drawing-board-' + this.id));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
clearWebStorage: function() {
|
||||||
|
if (window[this.storage] && window[this.storage].getItem('drawing-board-' + this.id) !== null) {
|
||||||
|
window[this.storage].removeItem('drawing-board-' + this.id);
|
||||||
|
this.ev.trigger('board:clear' + this.storage.charAt(0).toUpperCase() + this.storage.slice(1));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_getStorage: function() {
|
||||||
|
if (!this.opts.webStorage || !(this.opts.webStorage === 'session' || this.opts.webStorage === 'local')) return false;
|
||||||
|
return this.opts.webStorage + 'Storage';
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Drop an image on the canvas to draw on it
|
||||||
|
*/
|
||||||
|
|
||||||
|
initDropEvents: function() {
|
||||||
|
if (!this.opts.droppable)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
this.dom.$canvas.on('dragover dragenter drop', function(e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.dom.$canvas.on('drop', $.proxy(this._onCanvasDrop, this));
|
||||||
|
},
|
||||||
|
|
||||||
|
_onCanvasDrop: function(e) {
|
||||||
|
e = e.originalEvent ? e.originalEvent : e;
|
||||||
|
var files = e.dataTransfer.files;
|
||||||
|
if (!files || !files.length || files[0].type.indexOf('image') == -1 || !window.FileReader)
|
||||||
|
return false;
|
||||||
|
var fr = new FileReader();
|
||||||
|
fr.readAsDataURL(files[0]);
|
||||||
|
fr.onload = $.proxy(function(ev) {
|
||||||
|
this.setImg(ev.target.result, {
|
||||||
|
callback: $.proxy(function() {
|
||||||
|
this.saveHistory();
|
||||||
|
}, this)
|
||||||
|
});
|
||||||
|
this.ev.trigger('board:imageDropped', ev.target.result);
|
||||||
|
this.ev.trigger('board:userAction');
|
||||||
|
}, this);
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set and get current drawing mode
|
||||||
|
*
|
||||||
|
* possible modes are "pencil" (draw normally), "eraser" (draw transparent, like, erase, you know), "filler" (paint can)
|
||||||
|
*/
|
||||||
|
|
||||||
|
setMode: function(newMode, silent) {
|
||||||
|
silent = silent || false;
|
||||||
|
newMode = newMode || 'pencil';
|
||||||
|
|
||||||
|
this.ev.unbind('board:startDrawing', $.proxy(this.fill, this));
|
||||||
|
|
||||||
|
if (this.opts.eraserColor === "transparent")
|
||||||
|
this.ctx.globalCompositeOperation = newMode === "eraser" ? "destination-out" : "source-over";
|
||||||
|
else {
|
||||||
|
if (newMode === "eraser") {
|
||||||
|
if (this.opts.eraserColor === "background" && DrawingBoard.Utils.isColor(this.opts.background))
|
||||||
|
this.ctx.strokeStyle = this.opts.background;
|
||||||
|
else if (DrawingBoard.Utils.isColor(this.opts.eraserColor))
|
||||||
|
this.ctx.strokeStyle = this.opts.eraserColor;
|
||||||
|
} else if (!this.mode || this.mode === "eraser") {
|
||||||
|
this.ctx.strokeStyle = this.color;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newMode === "filler")
|
||||||
|
this.ev.bind('board:startDrawing', $.proxy(this.fill, this));
|
||||||
|
}
|
||||||
|
this.mode = newMode;
|
||||||
|
if (!silent)
|
||||||
|
this.ev.trigger('board:mode', this.mode);
|
||||||
|
},
|
||||||
|
|
||||||
|
getMode: function() {
|
||||||
|
return this.mode || "pencil";
|
||||||
|
},
|
||||||
|
|
||||||
|
setColor: function(color) {
|
||||||
|
var that = this;
|
||||||
|
color = color || this.color;
|
||||||
|
if (!DrawingBoard.Utils.isColor(color))
|
||||||
|
return false;
|
||||||
|
this.color = color;
|
||||||
|
if (this.opts.eraserColor !== "transparent" && this.mode === "eraser") {
|
||||||
|
var setStrokeStyle = function(mode) {
|
||||||
|
if (mode !== "eraser")
|
||||||
|
that.strokeStyle = that.color;
|
||||||
|
that.ev.unbind('board:mode', setStrokeStyle);
|
||||||
|
};
|
||||||
|
this.ev.bind('board:mode', setStrokeStyle);
|
||||||
|
} else
|
||||||
|
this.ctx.strokeStyle = this.color;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fills an area with the current stroke color.
|
||||||
|
*/
|
||||||
|
fill: function(e) {
|
||||||
|
if (this.getImg() === this.blankCanvas) {
|
||||||
|
this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
|
||||||
|
this.ctx.fillStyle = this.color;
|
||||||
|
this.ctx.fillRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var img = this.ctx.getImageData(0, 0, this.canvas.width, this.canvas.height);
|
||||||
|
|
||||||
|
// constants identifying pixels components
|
||||||
|
var INDEX = 0, X = 1, Y = 2, COLOR = 3;
|
||||||
|
|
||||||
|
// target color components
|
||||||
|
var stroke = this.ctx.strokeStyle;
|
||||||
|
var r = parseInt(stroke.substr(1, 2), 16);
|
||||||
|
var g = parseInt(stroke.substr(3, 2), 16);
|
||||||
|
var b = parseInt(stroke.substr(5, 2), 16);
|
||||||
|
|
||||||
|
// starting point
|
||||||
|
var start = DrawingBoard.Utils.pixelAt(img, parseInt(e.coords.x, 10), parseInt(e.coords.y, 10));
|
||||||
|
var startColor = start[COLOR];
|
||||||
|
var tolerance = this.opts.fillTolerance;
|
||||||
|
var useHack = this.opts.fillHack; //see https://github.com/Leimi/drawingboard.js/pull/38
|
||||||
|
|
||||||
|
// no need to continue if starting and target colors are the same
|
||||||
|
if (DrawingBoard.Utils.compareColors(startColor, DrawingBoard.Utils.RGBToInt(r, g, b), tolerance))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// pixels to evaluate
|
||||||
|
var queue = [start];
|
||||||
|
|
||||||
|
// loop vars
|
||||||
|
var pixel, x, y;
|
||||||
|
var maxX = img.width - 1;
|
||||||
|
var maxY = img.height - 1;
|
||||||
|
|
||||||
|
function updatePixelColor(pixel) {
|
||||||
|
img.data[pixel[INDEX]] = r;
|
||||||
|
img.data[pixel[INDEX] + 1] = g;
|
||||||
|
img.data[pixel[INDEX] + 2] = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((pixel = queue.pop())) {
|
||||||
|
if (useHack)
|
||||||
|
updatePixelColor(pixel);
|
||||||
|
|
||||||
|
if (DrawingBoard.Utils.compareColors(pixel[COLOR], startColor, tolerance)) {
|
||||||
|
if (!useHack)
|
||||||
|
updatePixelColor(pixel);
|
||||||
|
if (pixel[X] > 0) // west
|
||||||
|
queue.push(DrawingBoard.Utils.pixelAt(img, pixel[X] - 1, pixel[Y]));
|
||||||
|
if (pixel[X] < maxX) // east
|
||||||
|
queue.push(DrawingBoard.Utils.pixelAt(img, pixel[X] + 1, pixel[Y]));
|
||||||
|
if (pixel[Y] > 0) // north
|
||||||
|
queue.push(DrawingBoard.Utils.pixelAt(img, pixel[X], pixel[Y] - 1));
|
||||||
|
if (pixel[Y] < maxY) // south
|
||||||
|
queue.push(DrawingBoard.Utils.pixelAt(img, pixel[X], pixel[Y] + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ctx.putImageData(img, 0, 0);
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Drawing handling, with mouse or touch
|
||||||
|
*/
|
||||||
|
|
||||||
|
initDrawEvents: function() {
|
||||||
|
this.isDrawing = false;
|
||||||
|
this.isMouseHovering = false;
|
||||||
|
this.coords = {};
|
||||||
|
this.coords.old = this.coords.current = this.coords.oldMid = { x: 0, y: 0 };
|
||||||
|
|
||||||
|
this.dom.$canvas.on('mousedown touchstart', $.proxy(function(e) {
|
||||||
|
this._onInputStart(e, this._getInputCoords(e) );
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
this.dom.$canvas.on('mousemove touchmove', $.proxy(function(e) {
|
||||||
|
this._onInputMove(e, this._getInputCoords(e) );
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
this.dom.$canvas.on('mousemove', $.proxy(function(e) {
|
||||||
|
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
this.dom.$canvas.on('mouseup touchend', $.proxy(function(e) {
|
||||||
|
this._onInputStop(e, this._getInputCoords(e) );
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
this.dom.$canvas.on('mouseover', $.proxy(function(e) {
|
||||||
|
this._onMouseOver(e, this._getInputCoords(e) );
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
this.dom.$canvas.on('mouseout', $.proxy(function(e) {
|
||||||
|
this._onMouseOut(e, this._getInputCoords(e) );
|
||||||
|
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
$('body').on('mouseup touchend', $.proxy(function(e) {
|
||||||
|
this.isDrawing = false;
|
||||||
|
}, this));
|
||||||
|
|
||||||
|
if (window.requestAnimationFrame) requestAnimationFrame( $.proxy(this.draw, this) );
|
||||||
|
},
|
||||||
|
|
||||||
|
draw: function() {
|
||||||
|
//if the pencil size is big (>10), the small crosshair makes a friend: a circle of the size of the pencil
|
||||||
|
//todo: have the circle works on every browser - it currently should be added only when CSS pointer-events are supported
|
||||||
|
//we assume that if requestAnimationFrame is supported, pointer-events is too, but this is terribad.
|
||||||
|
if (window.requestAnimationFrame && this.ctx.lineWidth > 10 && this.isMouseHovering) {
|
||||||
|
this.dom.$cursor.css({ width: this.ctx.lineWidth + 'px', height: this.ctx.lineWidth + 'px' });
|
||||||
|
var transform = DrawingBoard.Utils.tpl("translateX({{x}}px) translateY({{y}}px)", { x: this.coords.current.x-(this.ctx.lineWidth/2), y: this.coords.current.y-(this.ctx.lineWidth/2) });
|
||||||
|
this.dom.$cursor.css({ 'transform': transform, '-webkit-transform': transform, '-ms-transform': transform });
|
||||||
|
this.dom.$cursor.removeClass('drawing-board-utils-hidden');
|
||||||
|
} else {
|
||||||
|
this.dom.$cursor.addClass('drawing-board-utils-hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isDrawing) {
|
||||||
|
var currentMid = this._getMidInputCoords(this.coords.current);
|
||||||
|
this.ctx.beginPath();
|
||||||
|
this.ctx.moveTo(currentMid.x, currentMid.y);
|
||||||
|
this.ctx.quadraticCurveTo(this.coords.old.x, this.coords.old.y, this.coords.oldMid.x, this.coords.oldMid.y);
|
||||||
|
this.ctx.stroke();
|
||||||
|
|
||||||
|
this.coords.old = this.coords.current;
|
||||||
|
this.coords.oldMid = currentMid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (window.requestAnimationFrame) requestAnimationFrame( $.proxy(function() { this.draw(); }, this) );
|
||||||
|
},
|
||||||
|
|
||||||
|
_onInputStart: function(e, coords) {
|
||||||
|
this.coords.current = this.coords.old = coords;
|
||||||
|
this.coords.oldMid = this._getMidInputCoords(coords);
|
||||||
|
this.isDrawing = true;
|
||||||
|
|
||||||
|
if (!window.requestAnimationFrame) this.draw();
|
||||||
|
|
||||||
|
this.ev.trigger('board:startDrawing', {e: e, coords: coords});
|
||||||
|
e.stopPropagation();
|
||||||
|
e.preventDefault();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onInputMove: function(e, coords) {
|
||||||
|
this.coords.current = coords;
|
||||||
|
this.ev.trigger('board:drawing', {e: e, coords: coords});
|
||||||
|
|
||||||
|
if (!window.requestAnimationFrame) this.draw();
|
||||||
|
|
||||||
|
e.stopPropagation();
|
||||||
|
e.preventDefault();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onInputStop: function(e, coords) {
|
||||||
|
if (this.isDrawing && (!e.touches || e.touches.length === 0)) {
|
||||||
|
this.isDrawing = false;
|
||||||
|
|
||||||
|
this.saveWebStorage();
|
||||||
|
this.saveHistory();
|
||||||
|
|
||||||
|
this.ev.trigger('board:stopDrawing', {e: e, coords: coords});
|
||||||
|
this.ev.trigger('board:userAction');
|
||||||
|
e.stopPropagation();
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onMouseOver: function(e, coords) {
|
||||||
|
this.isMouseHovering = true;
|
||||||
|
this.coords.old = this._getInputCoords(e);
|
||||||
|
this.coords.oldMid = this._getMidInputCoords(this.coords.old);
|
||||||
|
|
||||||
|
this.ev.trigger('board:mouseOver', {e: e, coords: coords});
|
||||||
|
},
|
||||||
|
|
||||||
|
_onMouseOut: function(e, coords) {
|
||||||
|
this.isMouseHovering = false;
|
||||||
|
|
||||||
|
this.ev.trigger('board:mouseOut', {e: e, coords: coords});
|
||||||
|
},
|
||||||
|
|
||||||
|
_getInputCoords: function(e) {
|
||||||
|
e = e.originalEvent ? e.originalEvent : e;
|
||||||
|
var
|
||||||
|
rect = this.canvas.getBoundingClientRect(),
|
||||||
|
width = this.dom.$canvas.width(),
|
||||||
|
height = this.dom.$canvas.height()
|
||||||
|
;
|
||||||
|
var x, y;
|
||||||
|
if (e.touches && e.touches.length == 1) {
|
||||||
|
x = e.touches[0].pageX;
|
||||||
|
y = e.touches[0].pageY;
|
||||||
|
} else {
|
||||||
|
x = e.pageX;
|
||||||
|
y = e.pageY;
|
||||||
|
}
|
||||||
|
x = x - this.dom.$canvas.offset().left;
|
||||||
|
y = y - this.dom.$canvas.offset().top;
|
||||||
|
x *= (width / rect.width);
|
||||||
|
y *= (height / rect.height);
|
||||||
|
return {
|
||||||
|
x: x,
|
||||||
|
y: y
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
_getMidInputCoords: function(coords) {
|
||||||
|
return {
|
||||||
|
x: this.coords.old.x + coords.x>>1,
|
||||||
|
y: this.coords.old.y + coords.y>>1
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
5
mondumas/static/dist/drawingboard/drawingboard.nocontrol.min.css
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
/* drawingboard.js v0.4.6 - https://github.com/Leimi/drawingboard.js
|
||||||
|
* Copyright (c) 2015 Emmanuel Pelletier
|
||||||
|
* Licensed MIT */
|
||||||
|
|
||||||
|
.drawing-board,.drawing-board *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.drawing-board-utils-hidden{display:none!important}.drawing-board{position:relative;display:block}.drawing-board-canvas-wrapper{position:relative;margin:0;border:1px solid #ddd}.drawing-board-canvas{position:absolute;top:0;left:0;width:auto;cursor:crosshair;z-index:20}.drawing-board-cursor{position:absolute;top:0;left:0;pointer-events:none;border-radius:50%;background:#ccc;background:rgba(0,0,0,.2);z-index:30}
|
||||||
4
mondumas/static/dist/drawingboard/drawingboard.nocontrol.min.js
vendored
Normal file
BIN
mondumas/static/img/Logo-CD.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
mondumas/static/img/Logo-ME.jpg
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
mondumas/static/img/Logo-PE.jpg
Normal file
|
After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |