129 Commits

Author SHA1 Message Date
thienan
7a436e2218 migration new_home + ajout tableaux devis et factures 2021-07-06 10:37:34 +02:00
thienan
0161c72cd4 bug fix upload 2021-07-01 14:54:44 +02:00
thienan
2dc9a019d5 ajout autres groupes dans ca_groupes 2021-06-30 16:25:19 +02:00
thienan
560cd29f16 ajout page demandes devis 2021-06-30 16:10:00 +02:00
4f52ff8afe corrections infobox + stats 2021-06-30 12:28:02 +02:00
thienan
dc595b8f5d Merge branch 'caota_test' 2021-06-29 14:30:43 +02:00
thienan
77054b62eb finition infobox 2021-06-29 14:30:14 +02:00
thienan
b612a7f135 retrait sidebar 2021-06-29 14:19:48 +02:00
thienan
90fa9af74a tentative d'ajout sidebar 2021-06-29 14:10:09 +02:00
thienan
85c3bbaa5c correction couleurs et ajout liens infobox 2021-06-28 16:36:47 +02:00
thienan
485e0d3462 developpement.ini fix 2021-06-28 10:40:27 +02:00
thienan
acdab93cba ajout prototype page d'accueil dans paramètres 2021-06-28 10:37:45 +02:00
thienan
1777d2ac4f Merge branch 'master' of https://bitbucket.org/caotek/dumas_gestion 2021-06-24 11:16:49 +02:00
091b51e592 added AdminLTE plugins 2021-06-24 11:15:34 +02:00
thienan
6ccf206c0c ajout changement statut devis 2021-06-23 15:46:49 +02:00
3cb7664a08 fixed get status table 2021-06-23 14:05:27 +02:00
thienan
35def60078 bug fix 2021-06-23 10:51:30 +02:00
thienan
a63855576b bug fix 2021-06-23 10:51:04 +02:00
thienan
df8753b1b7 ajout bouton changement de statut pour dossier 2021-06-23 10:43:43 +02:00
thienan
c7f30b1555 début ajout statut clôture 2021-06-22 09:40:13 +02:00
thienan
c87263d5a6 Ajout libellé clients + retrait CA internes 2021-06-17 11:24:10 +02:00
thienan
16af3ebb73 fix 2021-06-17 11:13:29 +02:00
thienan
66766268a6 fix setup.py 2021-06-17 11:12:19 +02:00
thienan
8dbdf19436 fix setup.py 2021-06-17 11:09:50 +02:00
15031342e7 added some new packages in setup.py 2021-06-17 11:05:03 +02:00
thienan
31a42c9bc5 Ajout graphes pourcentage délais 2021-06-17 10:33:04 +02:00
thienan
ad9650098b bugfix 2021-06-16 10:46:50 +02:00
thienan
4e3e2f9a36 Ajout graphes CA par clients 2021-06-16 10:45:08 +02:00
thienan
6902e04e54 Ajout graphiques CA par groupes 2021-06-15 15:40:25 +02:00
thienan
19cc99d7ff initial commit in branch caota_test 2021-06-15 10:51:42 +02:00
0601815ec0 ca_groupe 2021-06-15 10:30:48 +02:00
1356fc2255 retouche get tarifs 2021-06-04 12:26:13 +02:00
83860d3c21 added tarifs_import with xlrd 2021-05-31 19:12:26 +02:00
39b2c03de9 ajouter couleur pour la societe PO 2021-04-30 16:35:01 +02:00
b2733270b2 ajouter la societe PO dans la génération des demandes 2021-04-30 16:30:01 +02:00
9a7cad7c4d fix cloturer dossier + add societe PO dans générer 2021-04-30 15:48:39 +02:00
b725b98e06 test 2021-03-25 16:11:58 +01:00
85e5b6b10f test batch de test 2021-03-25 12:28:06 +01:00
cb3035d72c added societes.pt and societe_edit.pt 2021-03-24 16:28:06 +01:00
6ab266be48 stats délais sur un an de M à M-11 2021-03-20 11:45:49 +01:00
ff2c6375f2 affiche stats avec le mois courant 2021-03-20 11:20:14 +01:00
2398c50437 affiche stats avec le mois courant 2021-03-20 11:07:56 +01:00
71e2a1b55a afficher remote client IP 2021-03-17 16:49:04 +01:00
48fe805295 enlever commentaires 2021-03-15 06:20:03 +01:00
7ba5cea241 bug today.day 2021-03-15 06:14:57 +01:00
6c74c73157 batch_test prêt pour la prod 2021-03-14 17:44:40 +01:00
567e58a8b0 élément de moins 10 and 2021-03-14 15:07:26 +01:00
49de5aa0e9 tuning purge mensuelle 2021-03-14 14:41:25 +01:00
c410e1df05 stats delais -> indices de performances 2021-03-10 16:06:05 +01:00
47f03f78df ajout stats sur les délais de traitements dossier 2021-03-09 14:26:40 +01:00
e8782369b1 batch_jour : ne pas afficher le message OK 2021-02-23 07:24:12 +01:00
9792dfcf28 ne lancer delete_orphan_attached_files que le samedi 2021-02-17 18:39:30 +01:00
b434aada89 correction nom repertoire DOCS_ATTACHES 2021-02-16 15:26:25 +01:00
6212692b19 stats 2021-02-16 14:35:26 +01:00
3915b0e59b bug generer rapport to pdf 2021-02-03 08:45:15 +01:00
ed30afb3e7 correction visualiser rapport 2021-02-02 12:21:23 +01:00
dc05f11d69 amail en html 2021-02-02 11:56:46 +01:00
2e41da37c4 tester si envoi email OK 2021-02-02 09:56:51 +01:00
db6cddb94e changer SMTP pour SFR 2021-02-02 09:46:03 +01:00
d702ba570d correction générartion pdf 2021-02-01 16:23:48 +01:00
df58a1e84b change admin email 2021-02-01 07:25:06 +01:00
ef81220d85 correction admin email 2021-02-01 07:00:15 +01:00
6489954028 correction erreur de syntaxe 2021-01-30 09:51:59 +01:00
c5875e52ee envoi email tous les 6 secondes 2021-01-30 09:47:20 +01:00
ac3c7bfbc6 delete import pdb 2021-01-30 08:19:28 +01:00
af1d268bf3 envoi rapport de nuit 2021-01-27 14:53:47 +01:00
793a62cc2d migrer rappels de rdv vers gestion 2021-01-24 16:10:29 +01:00
af2315bad2 rename last_emailing to rappels_rdv 2021-01-22 16:44:32 +01:00
b3fb088d9f finaliser tests cabinet + expet 2021-01-16 17:12:25 +01:00
9873197d42 correction génération rapport RDF 2021-01-11 09:46:22 +01:00
28de1ce541 ajout popup confirmation de suppression photo 2021-01-08 16:22:24 +01:00
99d1c240d9 refonte gestion image + rotation +/-90 2021-01-08 11:32:01 +01:00
4af57cb876 possibilité d'annoter les téléphones 2021-01-03 11:31:21 +01:00
aaa80ff002 remplacer mail.user 2020-12-17 17:04:11 +01:00
01b73cc1d4 bug generer rapport RDF 2020-12-17 17:01:58 +01:00
0f3141c17c mise en prod PDF -> DOSSIER 2020-12-17 16:47:09 +01:00
1e75053d49 mise en prod PDF2Dossier 2020-12-17 16:38:01 +01:00
c538e387ca correction SMTP 2020-12-17 15:02:28 +01:00
ca04eb551b ajout cabinet+experts 2020-12-17 12:13:22 +01:00
154264fbad ajout batch_nuit 2020-12-13 09:19:49 +01:00
ef9e56a272 change raw message to email.message_from_bytes 2020-12-11 13:17:25 +01:00
862d90657e correction bouton download 2020-12-11 07:57:24 +01:00
c743cce59a correction annulation mission domus 2020-12-11 07:38:55 +01:00
908e15a80f Générer les dossiers par email un à un et non en lot 2020-12-10 20:39:51 +01:00
7840087bb0 ajout upload ordre de mission AXA 2020-12-09 11:09:18 +01:00
879546e166 correction affichage facture 2020-12-06 08:03:37 +01:00
ab0d4997eb correction filename = none 2020-11-25 11:58:07 +01:00
d03e90b7b8 ajout Doc techniques dans dossier_view.pt et articles.pt 2020-11-20 09:47:20 +01:00
dab24387a2 genere devis en pdf 2020-11-11 15:05:59 +01:00
6bc9d34fde use locale to format currency 2020-10-17 08:25:56 +02:00
71305e8002 move line up and down 2020-10-16 16:39:47 +02:00
50fea4710e ajout devis_preview.pt 2020-10-16 10:27:05 +02:00
9b6f016c32 ajout ajax_article pour remplir le formulaire 2020-10-05 17:30:43 +02:00
9aa6c8985e creation ligne devis article 2020-10-04 16:44:57 +02:00
500e07c810 supprime link devfac 2020-09-23 17:12:16 +02:00
ec19e2db35 ajout module devis 2020-09-23 17:11:07 +02:00
64b049251e manque os dans dossier models 2020-09-18 10:08:33 +02:00
189cd8fd78 enlever set_trace() 2020-09-17 12:28:47 +02:00
aae410f574 bug générer demande MAIF + suppression photo 2020-09-17 12:24:49 +02:00
7d81e0be71 possibilité au manager de modifier date_inter et auteur du rdf 2020-09-11 11:38:15 +02:00
aa298d613b trier le rapport de génération des dossiers par datemaj 2020-08-23 15:43:53 +02:00
534eb6bf15 trier le rapport de génération des dossiers 2020-08-23 15:20:02 +02:00
6ab71bb412 améliorer le rapport de génération des dossiers 2020-08-23 14:46:10 +02:00
74cd9bab55 mettre expunge() à la fin 2020-08-15 14:40:15 +02:00
6210b436b0 enlever set_trace() 2020-08-15 08:49:20 +02:00
756fa75f4f consultation des devis et doc achachés interdits aux ouvriers 2020-08-06 15:09:53 +02:00
ae498a9bc4 selection multiple des photos à uploader 2020-08-06 11:03:04 +02:00
aa19d3f936 autoriser access >= 8 à modifié un RDF facturé 2020-07-27 08:52:12 +02:00
ba89518ba2 bug suppression email traité 2020-07-24 10:17:29 +02:00
00f7d289b2 bug deleted old emails 2020-07-24 09:45:25 +02:00
677bda260b bug suppression email traité 2020-07-23 16:41:48 +02:00
a31d2241bc enlever set_trace() 2020-07-23 16:15:29 +02:00
681c9ebfbd bug creation rdv 2020-07-23 15:50:33 +02:00
1de6184877 menu plus restrictif pour les access=0 2020-07-23 09:17:50 +02:00
5088b9a1ff ne lire que les messages undeleted 2020-07-23 00:24:19 +02:00
7a7a2e2cfa cacher certains menus pour les access = 0 2020-07-22 20:28:34 +02:00
793cbc3206 mise en prod Emails -> Dossiers 2020-07-22 18:47:59 +02:00
78a8d46322 récupérer l'email de la demande d'intervention 2020-07-14 17:59:13 +02:00
7c3e484bb0 lister les 100 derniers rapports 2020-07-02 09:41:45 +02:00
13fdabaf86 interdire de modifier un rapport déjà facturé 2020-07-02 09:19:29 +02:00
ae08fbfd0b bug nom chantier lors conversion email to dossier 2020-06-05 16:29:23 +02:00
c62f1c85c6 controles mots de passe identiques 2020-05-20 14:45:53 +02:00
9178682733 bug changer_mdp.pt 2020-05-16 09:04:36 +02:00
94fcaaa995 c/assureur/change 2020-05-13 20:47:07 +02:00
5ddbc49fec ajout changement de client d'un rdf 2020-05-13 15:40:29 +02:00
bbd462cd54 remplacer PENEL par Responseble technique dans les RDF 2020-04-24 17:58:23 +02:00
ee577697ce changer la connexion BDD prod 2020-04-24 17:48:27 +02:00
122710b3e4 change Commercial -> Production 2020-04-24 17:27:12 +02:00
2e0abbdff2 modif port 2020-04-24 14:41:48 +02:00
156 changed files with 25541 additions and 3454 deletions

1
.gitignore vendored
View File

@@ -4,4 +4,3 @@
*.pyc *.pyc
*.pid *.pid
*.log *.log

Binary file not shown.

34
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,34 @@
{
// 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": "/Users/Thien-An/AppData/Local/Programs/Python/Python37",
"program": "/pyramid/Scripts/pserve",
"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
View File

@@ -0,0 +1,5 @@
{
"html.validate.scripts": false,
"editor.minimap.enabled": false,
"python.pythonPath": "C:\\Users\\Thien-An\\AppData\\Local\\Programs\\Python\\Python37\\python.exe"
}

View File

@@ -19,11 +19,12 @@ pyramid.includes =
pyramid_tm pyramid_tm
sqlalchemy.url = mysql://phuoc:phuoc!@localhost/bddevfac?charset=utf8 #sqlalchemy.url = mysql://phuoc:phuoc!@localhost/bddevfac?charset=utf8
# sqlalchemy.url = mysql://root:cni/@srvbd/bddevfac?charset=utf8 sqlalchemy.url = mysql://phuoc:phuoc!@192.168.1.17/bddevfac?charset=utf8
# sqlalchemy.url = mysql://phuoc:phuoc!@192.168.0.31/bddevfac?charset=utf8
mondumas.admin_email = cao.thien-phuoc@orange.fr mondumas.admin_email = cao.thien-phuoc@orange.fr
mondumas.devfac_url = mondumas:static/DEVFAC/ mondumas.devfac_url = mondumas:static/DEVFAC/DOCS_ATTACHES/
mondumas.devfac_dir = /DEVFAC14/DOCS_ATTACHES mondumas.devfac_dir = /DEVFAC14/DOCS_ATTACHES
# Mailer configuration # Mailer configuration

0
diff.txt Normal file
View File

View File

@@ -6,21 +6,49 @@ Home-page: UNKNOWN
Author: Author:
Author-email: Author-email:
License: UNKNOWN License: UNKNOWN
Description: # README # Keywords: web wsgi bfg pylons pyramid
Platform: UNKNOWN
Classifier: Programming Language :: Python
Classifier: Framework :: Pyramid
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
Provides-Extra: testing
# README #
Cette application web permet aux collaborateurs de l'entreprise Dumas :
- 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
Elle est développée avec les composants open source suivants :
## Backend
- [Python](https://www.python.org/downloads/) 3.7
- [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)
## Frontend
- [Bootstrap framework](https://getbootstrap.com/) for CSS 3.3.7
- [Jquery](https://jquery.com/download/) for JavaScript 3.2.1
- Chameleon templates
- [FormValidation](https://formvalidation.io/) form validator 0.7.0
## 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
Application web permettant aux personnels de l'entreprise Dumas d'accéder aux dossiers des clients [Learn Markdown](https://bitbucket.org/tutorials/markdowndemo)
Développé avec :
- Pyramid Framework
- MySQL
- Chameleon
* [Exemple d'une comptabilité simple] (http://perso.numericable.fr/assoc1901/droit/comptabilite1.htm)
* [Learn Markdown](https://bitbucket.org/tutorials/markdowndemo)
@@ -29,10 +57,4 @@ Description: # README #
- Initial version - Initial version
Keywords: web wsgi bfg pylons pyramid
Platform: UNKNOWN
Classifier: Programming Language :: Python
Classifier: Framework :: Pyramid
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
Provides-Extra: testing

View File

@@ -2,6 +2,7 @@ CHANGES.txt
MANIFEST.in MANIFEST.in
README.md README.md
development.ini development.ini
diff.txt
production.ini production.ini
pytest.ini pytest.ini
setup.py setup.py
@@ -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

View File

@@ -6,13 +6,16 @@ pyramid_mailer
pyramid_tm pyramid_tm
SQLAlchemy SQLAlchemy
transaction transaction
zope.sqlalchemy zope.sqlalchemy==1.1
waitress waitress
mysqlclient mysqlclient
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

View File

@@ -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

View File

@@ -26,11 +26,6 @@ def get_userAccess(request, logged_in):
else: else:
return 0 return 0
def get_codespostaux(request, code):
query = "SELECT * FROM p_codespostaux WHERE code_postal like :code;"
results = request.dbsession.execute(query, {'code': code + "%"})
return results.fetchall()
def get_member_by_mdp_oublie(request, lien): def get_member_by_mdp_oublie(request, lien):
query = "SELECT * FROM p_users WHERE mdp_oublie=:lien;" query = "SELECT * FROM p_users WHERE mdp_oublie=:lien;"
results = request.dbsession.execute(query, {'lien':lien}).first() results = request.dbsession.execute(query, {'lien':lien}).first()
@@ -57,7 +52,7 @@ def get_member_info(request, logged_in):
elif results.access == 5: elif results.access == 5:
fonction = 'Gestion' fonction = 'Gestion'
else: else:
fonction = 'Commercial' fonction = 'Production'
return { return {
'nom': results.nom, 'nom': results.nom,
@@ -113,3 +108,57 @@ def delete_membre(request, cd_uti):
query = "DELETE FROM p_users WHERE cd_uti = :cd_uti ;" query = "DELETE FROM p_users WHERE cd_uti = :cd_uti ;"
execute_query(request, query, {'cd_uti': cd_uti}) execute_query(request, query, {'cd_uti': cd_uti})
def get_article(request, type, groupe, libelle):
if type == 'LIB':
if groupe == 'TEXTE':
# lire tous les textes dont le libelle commençe par
query = "SELECT * FROM tarifs WHERE groupe='TEXTE' and libelle like :libelle;"
results = request.dbsession.execute(query, {'libelle': libelle + "%"}).fetchall()
else:
# lire tous les tarifs du grupe dont le ref commençe par libelle
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 SUM(IF(societe='PE',1,0)) AS nb_PE,
SUM(IF(societe='ME',1,0)) AS nb_ME,
SUM(IF(societe='PL',1,0)) AS nb_PL
FROM dem_devis WHERE STATUS=0;"""
results = request.dbsession.execute(query).first()
return results
def get_de_restant(request):
query = """SELECT SUM(IF(societe='PE',1,0)) AS nb_PE,
SUM(IF(societe='ME',1,0)) AS nb_ME,
SUM(IF(societe='PL',1,0)) AS nb_PL
FROM devis WHERE STATUS<4;"""
results = request.dbsession.execute(query).first()
return results
def get_fa_restant(request):
query = """SELECT SUM(IF(societe='PE',1,0)) AS nb_PE,
SUM(IF(societe='ME',1,0)) AS nb_ME,
SUM(IF(societe='PL',1,0)) AS nb_PL
FROM facture WHERE STATUS<8;"""
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
def get_rdf_null(request):
query = """SELECT COUNT(*) AS nb_rdf FROM bddevfac.dem_rdf WHERE date_relu IS NULL;"""
results = request.dbsession.execute(query).first()
return results

236
mondumas/models/devis.py Normal file
View File

@@ -0,0 +1,236 @@
# -*- 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_devis_byName(request, societe, name):
numero = to_int(name)
if numero > 0:
query = """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, nopol, nochantier, web
FROM devis WHERE societe=:societe AND no_id >=:name AND web = 'W' LIMIT 300;;""" % (societe, name)
elif len(name) == 0:
query = """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, nopol, nochantier, web
FROM devis WHERE societe=:societe AND web = 'W' ORDER BY no_id DESC LIMIT 300;"""
else:
query = """(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, nopol , nochantier, web
FROM devis WHERE societe=:societe AND c_nom LIKE ':name%' AND web = 'W' LIMIT 500)"""
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})

View File

@@ -12,6 +12,7 @@ from zope.sqlalchemy import (
from datetime import * from datetime import *
import transaction import transaction
import os
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"""
@@ -29,13 +30,14 @@ def get_dossier_by_no(request,nodossier):
societe = nodossier[0:2] societe = nodossier[0:2]
no_id = nodossier[3:] no_id = nodossier[3:]
query = """ query = """
SELECT d.*, a.NOM as nom_cabinet, e.NOM as nom_expert, SELECT d.*, s.libelle, a.NOM as nom_cabinet, e.NOM as nom_expert,
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, 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,
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.TEL1 AS cli_TEL1, c.TEL2 AS cli_TEL2, c.TELP AS cli_TELP, c.FAX AS cli_FAX, c.NOMRESP AS cli_NOMRESP
FROM dem_devis d FROM dem_devis d
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli 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_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_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 = '%s' and d.no_id=%s;""" % (societe, no_id); where d.societe = '%s' and d.no_id=%s;""" % (societe, no_id);
results = request.dbsession.execute(query).first() results = request.dbsession.execute(query).first()
return results return results
@@ -45,37 +47,18 @@ def get_dossier_by_sinistre(request,societe, nosin):
results = request.dbsession.execute(query).first() results = request.dbsession.execute(query).first()
return results return results
def get_dossiers_traites(request):
def get_devis_by_no(request,nodossier): query = "SELECT d.*, s.libelle FROM dem_devis d JOIN p_statuts s ON d.STATUS = s.CODE WHERE d.STATUS < 2 ORDER BY d.societe, d.STATUS, d.nomcli";
societe = nodossier[0:2] results = request.dbsession.execute(query).fetchall()
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 return results
def get_clients_byName(request, societe, nom):
query = "SELECT * FROM clients WHERE societe = '%s' and nom LIKE '%s';" % (societe, nom + '%');
results = request.dbsession.execute(query).fetchall()
return results
def get_dossier_rdv_by_no(request,nodossier, nolig): def get_dossier_rdv_by_no(request,nodossier, nolig):
societe = nodossier[0:2] societe = nodossier[0:2]
no_id = nodossier[3:] no_id = nodossier[3:]
@@ -124,11 +107,12 @@ def insert_suivi(request, nodossier, comment):
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, USERMAJ) VALUES (:societe, :no_id, CURRENT_DATE(), :comment, 'EMAIL');"
INSERT INTO dem_lig (societe, NO_ID, DATE, COMMENT, USERMAJ) VALUES
(:societe, :no_id, CURRENT_DATE(), :comment, 'MAIL');"""
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'comment': comment}) execute_query(request, query, {'societe': societe, 'no_id': no_id, 'comment': comment})
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})
def get_similaires_byChantier(request, societe, C_NOM, C_ADR, C_CP, C_VILLE): def get_similaires_byChantier(request, societe, C_NOM, C_ADR, C_CP, C_VILLE):
query = """ query = """
@@ -138,49 +122,51 @@ WHERE societe<>:societe AND C_NOM=:C_NOM AND C_ADR=:C_ADR AND C_CP=:C_CP AND C_V
return results return results
def get_devis_lig_by_no(request,nodossier): def get_docs_attaches(request, nodossier, norapport, origine, filename):
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_docs_attaches(request, nodossier, norapport, nosection, filename):
societe = nodossier[0:2] societe = nodossier[0:2]
nochantier = int(nodossier[3:]) nochantier = int(nodossier[3:])
if filename == '': if filename == '':
query = "SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier AND nodossier=0 ORDER BY cree_le;" query = "SELECT * FROM dossier_attaches WHERE societe = :societe AND nochantier = :nochantier AND nodossier=0 AND origine = :origine ORDER BY cree_le;"
else: else:
query = """SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier query = """SELECT * FROM dossier_attaches WHERE societe = :societe AND nochantier = :nochantier
AND nodossier = :norapport AND nomfichier = :filename ORDER BY cree_le;""" AND nodossier = :norapport AND origine = :origine AND nomfichier = :filename ORDER BY cree_le;"""
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'filename': filename}).fetchall() results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier,
'norapport': norapport, 'origine': origine, 'filename': filename}).fetchall()
return results return results
def get_photos(request, nodossier, norapport, nosection): def get_photos(request, nodossier, norapport, origine):
societe = nodossier[0:2] societe = nodossier[0:2]
nochantier = int(nodossier[3:]) nochantier = int(nodossier[3:])
query = """SELECT * FROM dossier_attaches WHERE nomrep = 'DOCS_ATTACHES' AND societe = :societe AND nochantier = :nochantier query = """SELECT * FROM dossier_attaches WHERE societe = :societe AND nochantier = :nochantier
AND nodossier = :norapport AND nosection = :nosection AND UPPER(RIGHT(nomfichier,3)) <> 'PDF' ORDER BY cree_le;""" AND nodossier = :norapport AND origine = :origine AND UPPER(RIGHT(nomfichier,3)) <> 'PDF' ORDER BY cree_le;"""
results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection}).fetchall() results = request.dbsession.execute(query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'origine': origine}).fetchall()
return results return results
def delete_photos(request, nodossier, norapport, nosection, nomfic): def delete_photos(request, nodossier, norapport, origine, nomfic):
societe = nodossier[0:2] societe = nodossier[0:2]
nochantier = int(nodossier[3:]) nochantier = int(nodossier[3:])
query = "DELETE FROM dossier_attaches WHERE nomrep='DOCS_ATTACHES' AND societe=:societe AND nochantier=:nochantier AND nodossier=:norapport AND nosection=:nosection AND nomfichier=:nomfic;" # supprimer d'abord le fichier
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection, 'nomfic': nomfic}) if len(origine) > 1:
file_path = '%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, nomfic)
else:
file_path = '%s/%s/%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier, norapport, nomfic)
if os.path.exists(file_path):
os.remove(file_path)
query = "DELETE FROM dossier_attaches WHERE societe=:societe AND nochantier=:nochantier AND nodossier=:norapport AND origine=:origine AND nomfichier=:nomfic;"
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'origine': origine, 'nomfic': nomfic})
def rename_photos(request, nodossier, norapport, origine, nomfic, new_nomfic):
societe = nodossier[0:2]
nochantier = int(nodossier[3:])
query = """
UPDATE dossier_attaches SET nomfichier = :new_nomfic
WHERE societe=:societe AND nochantier=:nochantier AND nodossier=:norapport AND origine=:origine AND nomfichier=:nomfic;
"""
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport,
'origine': origine, 'nomfic': nomfic, 'new_nomfic': new_nomfic})
def update_dossier(request, nodossier, new_values): def update_dossier(request, nodossier, new_values):
societe = nodossier[0:2] societe = nodossier[0:2]
@@ -203,18 +189,26 @@ def update_dossier(request, nodossier, new_values):
query = "CALL spUPD_CHANTIER_COORD(:societe, :nochantier);" query = "CALL spUPD_CHANTIER_COORD(:societe, :nochantier);"
execute_query(request, query, {'societe': societe, 'nochantier': nochantier}) execute_query(request, query, {'societe': societe, 'nochantier': nochantier})
def insert_dossier_attaches(request, nodossier, norapport, nosection, filename, filesize, user): def update_dossier_cloture(request, nodossier, status, logged_in):
societe = nodossier[0:2]
nochantier = int(nodossier[3:])
# met le montant regle à 1 centime pour terminé le dossier
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})
def insert_dossier_attaches(request, nodossier, norapport, origine, filename, filesize, user):
societe = nodossier[0:2] societe = nodossier[0:2]
nochantier = int(nodossier[3:]) nochantier = int(nodossier[3:])
# fichier existe ? # fichier existe ?
item = get_docs_attaches(request, nodossier, norapport, nosection, filename) item = get_docs_attaches(request, nodossier, norapport, origine, filename)
if item: if item:
return return
# enregistrer dans la table dossier_attaches # enregistrer dans la table dossier_attaches
query = """INSERT INTO dossier_attaches (nomrep, societe, nochantier, nodossier, nosection, nomfichier, taillefichier, cree_le, usermaj) query = """INSERT INTO dossier_attaches (societe, nochantier, nodossier, origine, nomfichier, taillefichier, cree_le, usermaj)
VALUES('DOCS_ATTACHES',:societe,:nochantier,:norapport,:nosection,:filename,:filesize,NOW(),:user);""" VALUES(:societe,:nochantier,:norapport,:origine,:filename,:filesize,NOW(),:user);"""
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport, 'nosection': nosection, 'filename': filename, 'filesize': filesize, 'user': user}) execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'norapport': norapport,
'origine': origine, 'filename': filename, 'filesize': filesize, 'user': user})
def get_rapport_by_no(request,nodossier,date_inter): def get_rapport_by_no(request,nodossier,date_inter):
societe = nodossier[0:2] societe = nodossier[0:2]
@@ -232,14 +226,14 @@ def get_rapport_by_no_id(request,no_id):
results = request.dbsession.execute(query, {'no_id': no_id}).first() results = request.dbsession.execute(query, {'no_id': no_id}).first()
return results return results
def get_articles_by_fam(request, fam): def get_articles_rdf(request):
query = "SELECT * FROM articles WHERE FAM = :fam;" query = "SELECT * FROM articles WHERE REF LIKE 'RDF%';"
results = request.dbsession.execute(query, {'fam': fam}).fetchall() results = request.dbsession.execute(query).fetchall()
return results return results
def get_rapport_rdf(request): def get_rapport_rdf(request):
# les rapports de RDF encours (non encore facturés) # les rapports de RDF (100 derniers)
query = "SELECT * FROM dem_rdf where date_facture IS NULL;" query = "SELECT * FROM dem_rdf ORDER BY societe, no_id DESC LIMIT 100;"
results = request.dbsession.execute(query, ).fetchall() results = request.dbsession.execute(query, ).fetchall()
return results return results
@@ -256,7 +250,7 @@ def get_rdf_causes(request, code):
results = request.dbsession.execute(query, {'code': code + '%'}).fetchall() results = request.dbsession.execute(query, {'code': code + '%'}).fetchall()
return results return results
def update_rapport(request, nodossier, date_inter, new_values): def update_rapport(request, nodossier, dateinter, new_values):
societe = nodossier[0:2] societe = nodossier[0:2]
nochantier = int(nodossier[3:]) nochantier = int(nodossier[3:])
@@ -268,8 +262,9 @@ def update_rapport(request, nodossier, date_inter, new_values):
s = "%s=:%s" % (param, param) s = "%s=:%s" % (param, param)
new_values['societe'] = societe new_values['societe'] = societe
new_values['nochantier'] = nochantier new_values['nochantier'] = nochantier
new_values['date_inter'] = date_inter new_values['dateinter'] = dateinter
query = "UPDATE dem_rdf SET %s WHERE societe=:societe AND nochantier=:nochantier AND date_inter=:date_inter;" % s
query = "UPDATE dem_rdf SET %s WHERE societe=:societe AND nochantier=:nochantier AND date_inter=:dateinter;" % s
execute_query(request, query, new_values) execute_query(request, query, new_values)
def delete_rapport(request, no_id): def delete_rapport(request, no_id):
@@ -277,20 +272,30 @@ def delete_rapport(request, no_id):
query = "DELETE FROM dem_rdf WHERE no_id = :no_id" query = "DELETE FROM dem_rdf WHERE no_id = :no_id"
execute_query(request, query, {'no_id': no_id}) execute_query(request, query, {'no_id': no_id})
def validate_rapport(request, no_id): def update_rapport_validate(request, no_id):
query = "UPDATE dem_rdf SET date_relu=CURRENT_DATE WHERE no_id = :no_id" query = "UPDATE dem_rdf SET date_relu=CURRENT_DATE WHERE no_id = :no_id"
execute_query(request, query, {'no_id': no_id}) execute_query(request, query, {'no_id': no_id})
def insert_facture_rdf(request, societe, nochantier, user, ref, date_rapport): def update_rapport_facture(request, no_id):
# créer une facture vierge à partir du dossier query = "UPDATE dem_rdf SET date_facture=CURRENT_DATE WHERE no_id = :no_id"
query = "CALL spINS_FACTURE_RDF(:societe, :nochantier, :user, :ref, :date_rapport)" execute_query(request, query, {'no_id': no_id})
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'user': user, 'ref': ref, 'date_rapport': date_rapport})
def insert_dossier(request, societe, cd_cli, c_nom, c_adr, c_adr2, c_cp, c_ville, c_telp, nosin, c_obs, tx_trav): def update_rapport_client(request, norapport, nomClient, codeClient):
societe = codeClient[0:2]
cd_cli = int(codeClient[3:])
query = "UPDATE dem_rdf SET CD_CLI = :cd_cli, NOMCLI = :nomClient WHERE no_id = :norapport"
execute_query(request, query, {'norapport': norapport, 'cd_cli': cd_cli, 'nomClient': nomClient})
def insert_facture_rdf(request, societe, nochantier, cd_cli, nomcli, user, ref, date_rapport):
# créer une facture vierge à partir du dossier
query = "CALL spINS_FACTURE_RDF(:societe, :nochantier, :cd_cli, :nomcli, :user, :ref, :date_rapport)"
execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'cd_cli': cd_cli, 'nomcli': nomcli, 'user': user, 'ref': ref, 'date_rapport': date_rapport})
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):
# créer une dem_devis selon l'email de l'OS # 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);""" 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');"""
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, 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,
'c_ville': c_ville,'c_telp': c_telp, 'nosin': nosin, 'c_obs': c_obs, 'tx_trav': tx_trav, 'logged_in': 'EMAIL'}) 'c_ville': c_ville,'c_telp': c_telp, 'nosin': nosin, 'nopol': nopol, 'c_obs': c_obs, 'tx_trav': tx_trav, 'c_email': c_email})
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;" 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() results = request.dbsession.execute(query, {'societe': societe, 'cd_cli': cd_cli}).first()
@@ -310,12 +315,35 @@ def get_experts(request, code_cab, code_exp):
results = request.dbsession.execute(query, {'code_cab': code_cab, 'code_exp': code_exp}).first() results = request.dbsession.execute(query, {'code_cab': code_cab, 'code_exp': code_exp}).first()
return results return results
def insert_log_nuit(request, proc, msg): def insert_log_nuit(request, proc, msg, nodossier):
query = "INSERT INTO t_log_nuit (proc,msg) VALUES (:proc, :msg);" query = "INSERT INTO t_log_nuit (proc,msg, nodossier) VALUES (:proc, :msg, :nodossier);"
execute_query(request, query, {'proc': proc, 'msg': msg}) execute_query(request, query, {'proc': proc, 'msg': msg, 'nodossier': nodossier})
def get_log_demandes(request, ): def get_log_demandes(request, ):
# lire le log de nuit # lire le log de nuit
query = """SELECT * FROM t_log_nuit WHERE proc = 'GENERER';""" 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, ) results = request.dbsession.execute(query, )
return results.fetchall() 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_devis_en_att(request):
query = "SELECT d.*, s.libelle FROM devis d JOIN p_statuts s ON d.STATUS = s.CODE WHERE d.STATUS < 4 ORDER BY d.societe, d.STATUS, d.nomcli;"
results = request.dbsession.execute(query).fetchall()
return results
def get_factures_en_att(request):
query = "SELECT f.*, s.libelle FROM facture f JOIN p_statuts s ON f.STATUS = s.CODE WHERE f.STATUS < 8 ORDER BY f.societe, f.STATUS, f.nomcli;"
results = request.dbsession.execute(query).fetchall()
return results

View File

@@ -26,24 +26,38 @@ def get_log_nuit(request, ):
results = request.dbsession.execute(query, ) results = request.dbsession.execute(query, )
return results.fetchall() return results.fetchall()
def get_last_emailing(request): def get_rappels_rdv(request):
"""Lire les 200 derniers envois d'emails""" """Lire les 200 derniers envois d'emails"""
query = "SELECT * FROM email_rappels ORDER BY no_id DESC LIMIT 400;" query = "SELECT * FROM email_rappels ORDER BY no_id DESC LIMIT 400;"
results = request.dbsession.execute(query, {}) results = request.dbsession.execute(query, {})
return results.fetchall() return results.fetchall()
def get_orphans_DE(request, societe):
query = "SELECT * FROM devis WHERE societe = '%s' AND nochantier = 0 ORDER BY date desc LIMIT 50 ;" % (societe)
results = request.dbsession.execute(query).first()
return results
def get_dossiers_byChantier(request, societe, name): def get_dossiers_byChantier(request, societe, name):
query = "CALL spGET_DOSSIERS_byChantier('%s','%s','%s');" % (societe, 'DE', name.replace("'","''")) query = "CALL spGET_DOSSIERS_byChantier('%s','%s','%s');" % (societe, 'DE', name.replace("'","''"))
results = request.dbsession.execute(query).fetchall() results = request.dbsession.execute(query).fetchall()
return results return results
def get_cabinets_by_id(request, code):
# lire les cabinets
if code == '0':
query = """SELECT * FROM P_CABINET ORDER BY nom;"""
results = request.dbsession.execute(query).fetchall()
else:
query = """SELECT * FROM P_CABINET WHERE code=:code;"""
results = request.dbsession.execute(query, {'code': code}).first()
return results
def get_experts_by_id(request, code_cab, code_exp):
# lire les experts du cabinet
if code_exp == '0':
query = """SELECT * FROM P_EXPERTS WHERE code_cab=:code_cab ORDER BY nom;"""
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 get_rdf_causes_by_id(request, code): def get_rdf_causes_by_id(request, code):
# lire les rdf_causes # lire les rdf_causes
if code == '0': if code == '0':
@@ -54,24 +68,6 @@ def get_rdf_causes_by_id(request, code):
results = request.dbsession.execute(query, {'code': code}).first() results = request.dbsession.execute(query, {'code': code}).first()
return results return results
def get_emails_sent(request, societe, nolig):
d = datetime.now()
d = d - dateutil.relativedelta.relativedelta(months=1)
# début du mois M-3
datedeb = d.strftime('%Y-%m-%d')
if nolig == 0:
query = """SELECT CONCAT(l.societe,"-",l.no_id) as nodossier, l.datemaj, l.comment, l.nolig, l.usermaj, e.nomcli FROM dem_lig l
INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id
WHERE l.societe = :societe AND l.date >= :datedeb AND l.comment LIKE 'Envoi email -> %' ORDER BY l.datemaj LIMIT 250;"""
results = request.dbsession.execute(query, {'societe': societe, 'datedeb': datedeb}).fetchall()
else:
query = """SELECT * FROM dem_lig WHERE nolig=:nolig;"""
results = request.dbsession.execute(query, {'nolig': nolig}).first()
return results
def delete_rdf_cause(request, old_code): def delete_rdf_cause(request, old_code):
query = "DELETE FROM rdf_causes WHERE code = :old_code;" query = "DELETE FROM rdf_causes WHERE code = :old_code;"
execute_query(request, query, {'old_code': old_code}) execute_query(request, query, {'old_code': old_code})
@@ -109,3 +105,125 @@ def delete_text(request, text_id):
"""supprimer la text""" """supprimer la text"""
query = "delete from p_texts where text_id = :text_id;" query = "delete from p_texts where text_id = :text_id;"
execute_query(request, query, {'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 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

129
mondumas/models/stats.py Normal file
View File

@@ -0,0 +1,129 @@
# -*- 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_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()

207
mondumas/models/utils.py Normal file
View File

@@ -0,0 +1,207 @@
# -*- 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érieure à 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 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 DEVIS
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 factures
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_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()) - 2;"
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})

View File

@@ -5,10 +5,13 @@ def includeme(config):
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('new_home', '/')
config.add_route('affiche_message','/affiche_message/{login}') config.add_route('affiche_message','/affiche_message/{login}')
config.add_route('ajax_article', '/ajax_article')
config.add_route('ajax_client', '/ajax_client')
config.add_route('ajax_codepostal', '/ajax_codepostal') config.add_route('ajax_codepostal', '/ajax_codepostal')
config.add_route('ajax_lookup', '/ajax_lookup') config.add_route('ajax_lookup', '/ajax_lookup')
config.add_route('ajax_texte', '/ajax_texte')
config.add_route('changer_mdp', '/changer_mdp') config.add_route('changer_mdp', '/changer_mdp')
config.add_route('envoyer_mdp', '/envoyer_mdp') config.add_route('envoyer_mdp', '/envoyer_mdp')
config.add_route('login', '/login') config.add_route('login', '/login')
@@ -16,37 +19,72 @@ def includeme(config):
config.add_route('logout', '/logout') config.add_route('logout', '/logout')
config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}') config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}')
config.add_route('init_mdp', '/init_mdp/{user}/{lien}') config.add_route('init_mdp', '/init_mdp/{user}/{lien}')
# devis
config.add_route('devis_ligne', '/devis_ligne/{type_ligne}/{nodevis}/{nolig}')
config.add_route('devis_lig_mv', '/devis_lig_mv/{move}/{nodevis}/{nolig}')
config.add_route('devis_list', '/devis_list')
config.add_route('devis_create', '/devis_create/{nodossier}')
config.add_route('devis_web', '/devis_web/{nodevis}')
config.add_route('devis_view', '/devis_view/{nodevis}')
config.add_route('devis_preview', '/devis_preview/{nodevis}')
# dossier # dossier
config.add_route('demandes','/demandes') config.add_route('demandes','/demandes')
config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{nosection}/{nomfic}') config.add_route('demandes_dl','/demandes_dl/{societe}/{email_from}/{email_uid}')
config.add_route('devis_view', '/devis_view/{nodossier}') config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{origine}/{nomfic}')
config.add_route('dossier_edit', '/dossier_edit/{nodossier}') config.add_route('dossier_edit', '/dossier_edit/{nodossier}')
config.add_route('dossier_lookup', '/dossier_lookup') config.add_route('dossier_lookup', '/dossier_lookup')
config.add_route('dossier_select', '/dossier_select/{date}') config.add_route('dossier_select', '/dossier_select/{date}')
config.add_route('dossier_selected', '/dossier_selected/{goto}/{date}/{nodossier}') config.add_route('dossier_selected', '/dossier_selected/{goto}/{date}/{nodossier}')
config.add_route('dossier_view', '/dossier_view/{nodossier}') config.add_route('dossier_view', '/dossier_view/{nodossier}')
config.add_route('rdf_bill','/rdf_bill/{no_id}') config.add_route('rdf_bill','/rdf_bill/{no_id}')
config.add_route('rdf_client','/rdf_client/{no_id}')
config.add_route('rdf_edit','/rdf_edit/{nodossier}/{date_inter}') config.add_route('rdf_edit','/rdf_edit/{nodossier}/{date_inter}')
config.add_route('rdf_list','/rdf_list') config.add_route('rdf_list','/rdf_list')
config.add_route('rdf_rapport','/rdf_rapport/{no_id}') config.add_route('rdf_rapport','/rdf_rapport/{no_id}')
config.add_route('rdf_view','/rdf_view/{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('suivi_edit','/suivi_edit/{nodossier}/{nolig}')
config.add_route('upload_doc', '/upload_doc/{nodossier}') config.add_route('upload_doc', '/upload_doc/{nodossier}/{origine}')
config.add_route('upload_img', '/upload_img/{norapport}/{nosection}') config.add_route('upload_img', '/upload_img/{norapport}/{origine}')
config.add_route('upload_om', '/upload_om')
config.add_route('dem_devis','/dem_devis')
config.add_route('devis_en_att','/devis_en_att')
config.add_route('factures_en_att','/factures_en_att')
# parametres # parametres
config.add_route('parametres', '/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('connecter_a', '/connecter_a/{login}')
config.add_route('dashboard', '/dashboard') config.add_route('dashboard', '/dashboard')
config.add_route('emails_msg', '/emails_msg/{nolig}') config.add_route('emails_msg', '/emails_msg/{nolig}')
config.add_route('emails_sent', '/emails_sent') config.add_route('expert_edit', '/expert_edit/{code_cab}/{code_exp}')
config.add_route('infrastructure', '/infrastructure') config.add_route('infrastructure', '/infrastructure')
config.add_route('last_emailing', '/last_emailing') config.add_route('rappels_rdv', '/rappels_rdv')
config.add_route('orphans_de', '/orphans_de/{societe}')
config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}') config.add_route('rdf_cause_edit', '/rdf_cause_edit/{code}')
config.add_route('rdf_causes_list', '/rdf_causes_list') 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_edit', '/text_edit/{text_id}')
config.add_route('text_list', '/text_list') config.add_route('text_list', '/text_list')
config.add_route('text_view', '/text_view/{text_id}') 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('user_edit', '/user_edit/{cd_uti}')
config.add_route('users_list', '/users_list') config.add_route('users', '/users')
config.add_route('users_ua', '/users_ua') config.add_route('users_ua', '/users_ua')
config.add_route('home', '/new_home')
# 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}')
# utils
config.add_route('batch_nuit', '/batch_nuit/{param}')
config.add_route('batch_test', '/batch_test/{param}')

View File

@@ -88,6 +88,12 @@
.modal-dialog { .modal-dialog {
top:7%; top:7%;
} }
.type-ligne-panel {
padding-left: 25px;
margin-top: 5px;
margin-bottom: 20px;
display: none;
}
.footer { .footer {
background-color: #2f2f2f; background-color: #2f2f2f;
@@ -171,6 +177,51 @@
color: black; color: black;
} }
.bg-compta {
background-color: SlateBlue !important;
color: white;
}
.bg-gest {
background-color: Coral !important;
color: white;
}
.bg-prod {
background-color: SkyBlue !important;
color: white;
}
.bg-0, .bg-1 {
background-color: khaki !important;
color: black;
}
.bg-2, .bg-3 {
background-color: orange !important;
color: black;
}
.bg-4, .bg-5 {
background-color: lightcoral !important;
color: black;
}
.bg-6, .bg-7 {
background-color: CornflowerBlue !important;
color: black;
}
.bg-8 {
background-color: LawnGreen !important;
color: black;
}
.bg-10, .bg-11, .bg-12 {
background-color: gray !important;
color: black;
}
.new-page { .new-page {
page-break-before: always; page-break-before: always;
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View 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);
}

View 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)}

View 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;
}

View 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}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View 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;
}
}

View 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}}

View 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;
}

View 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}

View 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;
}

View 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}

View 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;
}

View 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}

View 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;
}
}

View 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}}

View 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;
}

View 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}

View 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;
}
}

View 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}}

View 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;
}

View 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}

View 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;
}
}

View 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}}

View 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;
}

View 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}

View 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;
}
}

View 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}}

View 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;
}

View 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}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View 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()
})

View 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');
}
});
});

View 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')
});
});
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -0,0 +1,2 @@
<hr>
<p claas="text-center">© 2017&nbsp;-&nbsp;Entreprise Dumas, 49 Chemin du Bois 69140 RILLIEUX LA PAPE</p>

View File

@@ -65,7 +65,7 @@
<div class="form-group"> <div class="form-group">
<label class="col-xs-3 control-label">Nom ou numéro</label> <label class="col-xs-3 control-label">Nom ou numéro</label>
<div class="col-xs-8"> <div class="col-xs-8">
<input type="text" class="form-control" id="name" name="name" placeholder="3 caractères minimum" /> <input type="text" class="form-control" id="name" name="name" placeholder="4 caractères minimum" />
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">

View File

@@ -59,7 +59,6 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-3 col-sm-9"> <div class="col-sm-offset-3 col-sm-9">
<div class="form-group">
<a class="btn btn-default" href="/agenda/${rdv.rdv_debut.strftime('%Y-%m-%d')}"> <a class="btn btn-default" href="/agenda/${rdv.rdv_debut.strftime('%Y-%m-%d')}">
<span class="glyphicon glyphicon-arrow-left"></span> Annuler</a> <span class="glyphicon glyphicon-arrow-left"></span> Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted"> <button class="btn btn-primary" type="submit" name="form.submitted">
@@ -69,7 +68,6 @@
<span class="glyphicon glyphicon-remove"></span> Supprimer</button> <span class="glyphicon glyphicon-remove"></span> Supprimer</button>
</div> </div>
</div> </div>
</div>
</form> </form>
<br /> <br />

View File

@@ -22,7 +22,6 @@
<input class="form-control" type="password" size="10" name="new_password1" <input class="form-control" type="password" size="10" name="new_password1"
data-fv-notempty="true" data-fv-notempty="true"
data-fv-notempty-message="Le mot de passe est obligatoire" data-fv-notempty-message="Le mot de passe est obligatoire"
data-fv-stringlength="true" data-fv-stringlength="true"
data-fv-stringlength-min="6" data-fv-stringlength-min="6"
data-fv-stringlength-message="Le mot de passe doit avoir au moins 6 charactères" /> data-fv-stringlength-message="Le mot de passe doit avoir au moins 6 charactères" />

View File

@@ -3,7 +3,7 @@
<div class="container-fluid text-center"> <div class="container-fluid text-center">
<br /> <br />
<!-- row 1 --> <!-- row 1 : MENU GENERAL -->
<div class="row"> <div class="row">
<div class="col-sm-3"> <div class="col-sm-3">
<a href="${request.application_url}/agenda/today"> <a href="${request.application_url}/agenda/today">
@@ -11,9 +11,14 @@
<h4>MON AGENDA</h4></a> <h4>MON AGENDA</h4></a>
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<a href="${request.application_url}/planning/today"> <a href="${request.application_url}/rdf_list">
<span class="glyphicon glyphicon-calendar logo-small"></span><br /> <span class="glyphicon glyphicon-tint logo-success"></span>
<h4>PLANNING</h4></a> <h4>RAPPORTS RDF</h4></a>
</div>
<div class="col-sm-3" tal:condition="logged_in=='CAO'">
<a href="${request.application_url}/devis_list">
<span class="glyphicon glyphicon-text-height logo-small"></span>
<h4>E-DEVIS</h4></a>
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<a href="${request.application_url}/dossier_lookup"> <a href="${request.application_url}/dossier_lookup">
@@ -22,22 +27,27 @@
</div> </div>
</div> </div>
<br /> <br />
<!-- row 2 --> <!-- row 2 : MENU GESTIONNAIRE -->
<div class="row"> <div class="row" tal:condition="access >= 5">
<div class="col-sm-3"> <div class="col-sm-3">
<a href="${request.application_url}/rdf_list"> <a href="${request.application_url}/planning/today">
<span class="glyphicon glyphicon-tint logo-success"></span> <span class="glyphicon glyphicon-calendar logo-small"></span><br />
<h4>RAPPORTS RDF</h4></a> <h4>PLANNING</h4></a>
</div> </div>
<div class="col-sm-3" tal:condition="logged_in=='CAO'"> <div class="col-sm-3">
<a href="${request.application_url}/demandes"> <a href="${request.application_url}/demandes" tal:condition="access > 0">
<span class="glyphicon glyphicon-download-alt logo-warning"></span> <span class="glyphicon glyphicon-download-alt logo-warning"></span>
<h4>EMAILS <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</h4></a> <h4>EMAILS <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</h4></a>
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<a href="${request.application_url}/emails_sent"> <a href="${request.application_url}/upload_om" tal:condition="access > 0">
<span class="glyphicon glyphicon-send logo-small"></span> <span class="glyphicon glyphicon-download-alt logo-warning"></span>
<h4>EMAILS ENVOYES</h4></a> <h4>PDF <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</h4></a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/stats" tal:condition="access > 6">
<span class="glyphicon glyphicon-stats logo-warning"></span>
<h4>STATISTIQUES</h4></a>
</div> </div>
</div> </div>
<br /> <br />

View File

@@ -0,0 +1,155 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="container-fluid">
<br />
<div class="row">
<div class="col-sm-3">
<a href="${request.application_url}/agenda/today">
<div class="info-box bg-prod">
<span class="info-box-icon"><i class="glyphicon glyphicon-calendar"></i></span>
<div class="info-box-content">
<span class="info-box-number">AGENDA</span>
<span class="info-box-text">Rendez-vous : </span>
<span class="info-box-number"><span class="badge bg-red">${nb_rdv.nb_rdv}</span></span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/rdf_list">
<div class="info-box bg-green">
<span class="info-box-icon"><i class="glyphicon glyphicon-tint"></i></span>
<div class="info-box-content">
<span class="info-box-number">RDF</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-red">${nb_rdf.nb_rdf}</span></span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/devis_list">
<div class="info-box bg-prod">
<span class="info-box-icon"><i class="glyphicon glyphicon-text-height"></i></span>
<div class="info-box-content">
<span class="info-box-number">E-DEVIS</span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/dossier_lookup" tal:condition="access > 6">
<div class="info-box bg-prod">
<span class="info-box-icon"><i class="glyphicon glyphicon-search"></i></span>
<div class="info-box-content">
<span class="info-box-number">RECHERCHE</span>
</div>
</div>
</a>
</div>
</div>
<br>
<div class="row" tal:condition="access >= 5">
<div class="col-sm-3">
<a href="${request.application_url}/planning/today">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-calendar"></i></span>
<div class="info-box-content">
<span class="info-box-number">PLANNING</span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/demandes" tal:condition="access > 0">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-envelope"></i></span>
<div class="info-box-content">
<span class="info-box-number">EMAILS</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-purple">${nb_mails}</span></span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/upload_om" tal:condition="access > 0">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-download-alt"></i></span>
<div class="info-box-content">
<span class="info-box-number">PDF <span class="glyphicon glyphicon-arrow-right"></span> DOSSIERS</span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
</div>
</div>
<br />
<div class="row">
<div class="col-sm-3">
<a href="${request.application_url}/dem_devis" tal:condition="access > 0">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-folder-open"></i></span>
<div class="info-box-content">
<span class="info-box-number">DEM. DEVIS</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-PE">${nb_dd_restants.nb_PE}</span>
<span class="badge bg-ME">${nb_dd_restants.nb_ME}</span>
<span class="badge bg-PL">${nb_dd_restants.nb_PL}</span></span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/devis_en_att" tal:condition="access > 0">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-file"></i></span>
<div class="info-box-content">
<span class="info-box-number">DEVIS</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-PE">${nb_de_restants.nb_PE}</span>
<span class="badge bg-ME">${nb_de_restants.nb_ME}</span>
<span class="badge bg-PL">${nb_de_restants.nb_PL}</span></span>
</div>
</div>
</a>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/factures_en_att" tal:condition="access > 0">
<div class="info-box bg-gest">
<span class="info-box-icon"><i class="glyphicon glyphicon-inbox"></i></span>
<div class="info-box-content">
<span class="info-box-number">FACTURES</span>
<span class="info-box-text">A traiter : </span>
<span class="info-box-number"><span class="badge bg-PE">${nb_fa_restants.nb_PE}</span>
<span class="badge bg-ME">${nb_fa_restants.nb_ME}</span>
<span class="badge bg-PL">${nb_fa_restants.nb_PL}</span></span>
</div>
</div>
</a>
</div>
</div>
<br />
<div class="row">
<div class="col-sm-3">
<a href="${request.application_url}/stats" tal:condition="access > 6">
<div class="info-box bg-compta">
<span class="info-box-icon"><i class="glyphicon glyphicon-stats"></i></span>
<div class="info-box-content">
<span class="info-box-number">STATS</span>
</div>
</div>
</a>
</div>
</div>
<br />
<br />
<br />
</div>
</div><!-- content -->
</metal:block>

View File

@@ -19,13 +19,20 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label" for="new_password1">Nouveau mot de passe</label> <label class="control-label" for="new_password1">Nouveau mot de passe</label>
<input class="form-control" type="password" size="10" id="new_password1" name="new_password1" /> <input class="form-control" type="password" size="10" id="new_password1" name="new_password1"
data-fv-notempty="true"
data-fv-notempty-message="Le mot de passe est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-min="6"
data-fv-stringlength-message="Le mot de passe doit avoir au moins 6 charactères" />
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label" for="new_password2">Confirmer le mot de passe</label> <label class="control-label" for="new_password2">Confirmer le mot de passe</label>
<input class="form-control" type="password" size="10" id="new_password2" name="new_password2" <input class="form-control" type="password" size="10" id="new_password2" name="new_password2"
value="" /> data-fv-identical="true"
data-fv-identical-field="new_password1"
data-fv-identical-message="Le mot de passe et sa confirmation ne sont pas identiques" />
</div> </div>
<button class="btn btn-primary" type="submit" name="form.submitted" value="Changer le mot de passe">Envoyer</button> <button class="btn btn-primary" type="submit" name="form.submitted" value="Changer le mot de passe">Envoyer</button>

View File

@@ -0,0 +1,213 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
<br />
<form id="devis_ligne-form" class="form-horizontal" action="${url}" method="post"
data-fv-framework="bootstrap"
data-fv-icon-valid="glyphicon glyphicon-ok"
data-fv-icon-invalid="glyphicon glyphicon-remove"
data-fv-icon-validating="glyphicon glyphicon-refresh">
<!-- *** TEXTE *** -->
<div id="TX" tal:condition="type_ligne=='TX'">
<div class="form-group">
<label class="control-label col-sm-2">Type de texte</label>
<div class="col-sm-10">
<label class="radio-inline"><input type="radio" name="ref" value="T1"
tal:attributes="checked ligne.ref=='T1'">Titre</label>
<label class="radio-inline"><input type="radio" name="ref" value="T2"
tal:attributes="checked ligne.ref=='T2'">Sous-titre</label>
<label class="radio-inline"><input type="radio" name="ref" value="TX"
tal:attributes="checked ligne.ref=='TX'">Texte libre</label>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Texte</label>
<div class="col-sm-10">
<input class="form-control" type="text" id="libelle" name="libelle" value="${ligne.libelle}">
</div>
</div>
</div>
<!-- *** ARTICLE *** -->
<div id="AR" tal:condition="type_ligne=='AR'">
<div class="form-group">
<label class="control-label col-sm-2">Référence</label>
<div class="col-sm-10">
<input class="form-control" type="text" id="ref" name="ref" value="${ligne.ref}" >
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Désignation</label>
<div class="col-sm-10">
<textarea class="form-control monospace-font" rows="3" cols="40" id="libelle" name="libelle">${ligne.libelle}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Quantité</label>
<div class="col-sm-10">
<input class="form-control" type="text" id="qte" name="qte" value="${ligne.qte}">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Prix HT</label>
<div class="col-sm-10">
<div class="input-group">
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-euro"></span>
</span>
<input class="form-control" type="text" id="prixht" name="prixht" value="${ligne.prixht}">
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="metrage">Métrage</label>
<div class="col-sm-10">
<input class="form-control monospace-font" type="text" id="metrage" name="metrage" value="${ligne.metrage}">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="deduction">déduction</label>
<div class="col-sm-10">
<input class="form-control monospace-font" type="text" id="deduction" name="deduction" value="${ligne.deduction}">
</div>
</div>
</div>
<!-- *** SOUS-TOTAL *** -->
<div tal:condition="type_ligne=='ST'">
<div class="form-group">
<label class="control-label col-sm-2">Référence</label>
<div class="col-sm-10">
<p class="form-control-static">${ligne.ref}</p>
</div>
<label class="control-label col-sm-2">Désignation</label>
<div class="col-sm-10">
<p class="form-control-static">${ligne.libelle}</p>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">Dern. modif le</label>
<div class="col-sm-10">
<p class="form-control-static">${ligne.datemaj.strftime('%d-%m-%Y %H:%M')} par ${ligne.usermaj}</p>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<div class="form-group">
<button class="btn btn-primary" type="submit" name="form.submited">
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
<button class="btn btn-danger" type="submit" name="form.deleted" tal:condition="nolig != '0'">
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
<a class="btn btn-default" href="${request.route_url('devis_web', nodevis=nodevis)}">
<span class="glyphicon glyphicon-arrow-left"></span> Annuler</a>
</div>
</div>
</div>
</form>
<br />
<br />
<br />
<!-- https://makitweb.com/autocomplete-data-on-multiple-fields-with-jquery-and-ajax/ -->
</div>
<div metal:fill-slot="additional_scripts">
<!-- autocomplete plugin -->
<link href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet">
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$(document).ready(function() {
groupe = "${dossier.groupe}"
// validate the form
$('#devis_ligne-form').formValidation({
framework: 'bootstrap',
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
type_ligne: {
validators: {
notEmpty: {
message: 'Veuillez sélectionner un type de ligne.'
}
}
},
}
})
$("input[name=type_ligne]").change(function() {
var cas = $(this).val();
$(".type-ligne-panel").hide();
$("#"+cas).show();
});
$('#libelle').autocomplete({
minLength: 3,
appendTo: "#TX",
source: function (request, response) {
$.ajax({
url:'/ajax_texte',
dataType: 'json',
data: {
groupe: 'TEXTE',
libelle: request.term,
},
success: function (data) {
response( data );
},
});
},
});
$('#ref').autocomplete({
minLength: 3,
appendTo: "#AR",
source: function (request, response) {
$.ajax({
url:'/ajax_texte',
dataType: 'json',
data: {
groupe: groupe,
libelle: request.term,
},
success: function (data) {
response( data );
},
});
},
select: function(event, ui) {
var ref = ui.item.value.split(" ")[0]; // selected ref
// lecture de l'article
$.ajax({
url: '/ajax_article',
data: {
groupe: groupe,
ref:ref
},
dataType: 'json',
success:function(response){
var len = response.length;
if(len > 0){
var ref = response[0]['ref'];
var libelle = response[0]['libelle'];
var prixht = response[0]['prixht'];
// Set value to textboxes
document.getElementById('ref').value = ref;
document.getElementById('libelle').value = libelle;
document.getElementById('prixht').value = prixht;
}
}
});
return false;
}
});
});
</script>
</div>
</metal:block>

View File

@@ -0,0 +1,100 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="alert alert-danger" tal:condition="message" tal:content="message" />
<div class="row">
<form id="devis-search-form" class="form-horizontal" role="form" action="${url}" method="post"
data-fv-framework="bootstrap"
data-fv-icon-valid="glyphicon glyphicon-ok"
data-fv-icon-invalid="glyphicon glyphicon-remove"
data-fv-icon-validating="glyphicon glyphicon-refresh">
<div class="form-group">
<label class="col-sm-4 control-label">Société</label>
<div class="col-xs-8">
<label class="radio-inline"><input type="radio" name="societe" value="PE"
tal:attributes="checked societe=='PE'">PE</label>
<label class="radio-inline"><input type="radio" name="societe" value="ME"
tal:attributes="checked societe=='ME'">ME</label>
<label class="radio-inline"><input type="radio" name="societe" value="PL"
tal:attributes="checked societe=='PL'">PL</label>
<label class="radio-inline"><input type="radio" name="societe" value="PO"
tal:attributes="checked societe=='PO'">PO</label>
<label class="radio-inline"><input type="radio" name="societe" value="CD"
tal:attributes="checked societe=='CD'">CD</label>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label">Nom ou numéro du chantier</label>
<div class="col-sm-8">
<input type="text" class="form-control" name="name" value="${name}"
placeholder="Le nom ou le numéro doit avoir de 2 à 30 caractères de long" >
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<button id="submitButton" class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-search"></span>&nbsp;Rechercher</button>
</div>
</div>
</form>
</div><!-- row -->
<div class="row">
<table class="table table-bordered">
<thead>
<tr>
<th>Numéro</th>
<th>Date</th>
<th>Client</th>
<th>Chantier</th>
<th class="text-right">Montant</th>
<th>Sinistre</th>
<th class="text-center">Statut</th>
</tr>
<tr tal:repeat="detail devis">
<td>
<a href="/devis_web/${societe}-DE${detail.numero}">${societe}-${detail.numero}-W</a>
</td>
<td>${detail.date.strftime('%d-%m-%Y')}</td>
<td>${detail.nomcli}</td>
<td>${detail.chantier}</td>
<td class="text-right">${layout.to_euro(detail.montant)}</td>
<td>${detail.nosin}</td>
<td class="text-center">${detail.status}</td>
</tr>
</thead>
</table>
<br />
<br />
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#devis-search-form').formValidation({
framework: 'bootstrap',
message: 'This value is not valid',
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
});
$('form input').on('keypress', function(e) {
var code = e.keyCode || e.which;
if (code === 13) {
e.preventDefault();
// simuler clic bouton submit
document.getElementById("submitButton").click();
}
});
</script>
</div>
</metal:block>

View File

@@ -0,0 +1,113 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<!-- ENTETE -->
<img src="${logo_url}" width="100%" />
<br />
<table style="width:100%">
<tr>
<td style="width:55%">
<p tal:condition="devis.no_agrement">N° Agrément : ${devis.no_agrement}</p>
<br/><br/>
<p tal:condition="devis.NOSIN">N° sinistre : ${devis.NOSIN}</p>
<p tal:condition="devis.NOPOL">N° sinistre : ${devis.NOPOL}</p>
<p tal:condition="devis.REF_EXPERT">Réf. expert : ${devis.REF_EXPERT}</p>
<p tal:condition="devis.VREF">V/Référence : ${devis.VREF}</p>
<br />
<p>${devis.LIBCOMPL}</p>
<br/><br/>
<p>N° dossier : ${devis.nochantier}</p>
<br/><br/>
<H3>DEVIS N° ${devis.societe}-${devis.NO_ID}<h/H3>
</td>
<td style="width:45%">
<br/><br/>
<h4>${devis.QUALITE} ${devis.NOM}</h4>
<h4>${devis.ADRESSE}</h4>
<h4 tal:condition="devis.ADRESSE2">${devis.ADRESSE2}<br /></h4>
<h4>${devis.CP} ${devis.VILLE}</h4>
<br />
<br />
<p>Rilieux-la-Pape, le ${devis.DATE.strftime('%d-%m-%Y')}</p>
<br />
<h4>${devis.C_QUALITE} ${devis.C_NOM}</h4>
<h4>${devis.C_ADR}</h4>
<h4 tal:condition="devis.C_ADR2">${devis.C_ADR2}<br /></h4>
<h4>${devis.C_CP} ${devis.C_VILLE}</h4>
</td>
</tr>
</table> <!-- row : entête-->
<br/>
<br/>
<!-- row : entête tableau-->
<table style="width:100%">
<tr>
<td style="width:15%"></td>
<td style="width:41%"></td>
<td style="width:8%; text-align:right">Surf./ Qté</td>
<td style="width:18%; text-align:right">P.U. HT</td>
<td style="width:18%; text-align:right">Montant HT</td>
</tr>
<tr>
<td colspan="4"><hr></td>
</tr>
<!-- clignes de détail du devis -->
<div tal:replace="structure dt_html">Les lignes du devis ici</div>
<tr>
<td colspan="4"></td>
</tr>
<tr>
<td colspan="3"></td>
<td>Total HT</td>
<td style="text-align:right">${layout.to_euro(devis.TOTALHT)}</td>
</tr>
<tr>
<td colspan="3"></td>
<td>TVA ${layout.to_percent(devis.TAUXTVA)}</td>
<td style="text-align:right">${layout.to_euro(devis.TOTALTVA)}</td>
</tr>
<tr>
<td colspan="3"></td>
<td><b>Total TTC</b></td>
<td style="text-align:right"><b>${layout.to_euro(devis.TOTALTTC)}</b></td>
</tr>
<tr>
<td colspan="5">&nbsp;</td>
</tr>
<tr>
<td colspan="5">
Si vous acceptez ce devis, veuillez nous en retourner un exemplaire signé et précédé de la mention "Bon pour Accord".
</td>
</tr>
<tr>
<td colspan="4">&nbsp;</td>
</tr>
<!-- row : bas de devis-->
<tr>
<td colspan="2">
<p tal:condition="devis.TYPECLI == 'P'">
<b>Conditions de réglement :</b><br />
Acompte de 30 % à la commande, Le solde à réception de la facture.
</p>
<p tal:condition="devis.CODETVA == 4">
NOTA : Pour bénéficier du taux réduit de T.V.A. à 7%, vous devez nous fournir en même temps que l'acceptation du devis, une attestation sur papier libre, stipulant que votre habitation est construite depuis plus de deux ans.
</p>
</td>
<td></td>
<td colspan="2">
<p>
Le <br/>
Nom et Signature du Client<br/>
BON POUR ACCORD
</p>
</td>
</tr>
</table>
<br />
<br />
</div>
<div metal:fill-slot="additional_scripts">
</div>
</metal:block>

Some files were not shown because too many files have changed in this diff Show More