From 6612b0b81bcd265259bd12db16b8a0e05bec6688 Mon Sep 17 00:00:00 2001 From: Phuoc Cao Date: Fri, 10 Mar 2017 15:23:47 +0100 Subject: [PATCH] ajouter agenda.pt en fullcalendar --- development.ini | 2 +- mondumas/models/agenda.py | 151 ++++++++++++ mondumas/models/default.py | 126 +--------- mondumas/panels.py | 10 +- mondumas/routes.py | 13 +- mondumas/security.py | 20 +- mondumas/static/dist/fullcalendar/fr.js | 1 + mondumas/templates/agenda/agenda.pt | 53 +++++ .../dossier_view.pt} | 0 mondumas/templates/changer_mdp.pt | 57 +++++ mondumas/templates/envoyer_mdp.pt | 8 +- mondumas/templates/home.pt | 6 +- mondumas/templates/layouts/global_layout.pt | 12 +- mondumas/templates/login.pt | 16 +- mondumas/templates/member_edit.pt | 163 ------------- mondumas/templates/members.pt | 83 ------- mondumas/templates/members_adr.pt | 29 --- .../templates/panels/dropdown_menu_panel.pt | 7 +- mondumas/templates/redefinir_mdp.pt | 13 +- mondumas/views/agenda.py | 168 +++++++++++++ mondumas/views/default.py | 223 ++++-------------- 21 files changed, 534 insertions(+), 627 deletions(-) create mode 100644 mondumas/models/agenda.py create mode 100644 mondumas/static/dist/fullcalendar/fr.js create mode 100644 mondumas/templates/agenda/agenda.pt rename mondumas/templates/{member_view.pt => agenda/dossier_view.pt} (100%) create mode 100644 mondumas/templates/changer_mdp.pt delete mode 100644 mondumas/templates/member_edit.pt delete mode 100644 mondumas/templates/members.pt delete mode 100644 mondumas/templates/members_adr.pt create mode 100644 mondumas/views/agenda.py diff --git a/development.ini b/development.ini index bd5964c..10c05cd 100644 --- a/development.ini +++ b/development.ini @@ -18,7 +18,7 @@ pyramid.includes = pyramid_mailer pyramid_tm -sqlalchemy.url = mysql://root:phuoc@localhost/bd_tinhdo?charset=utf8 +sqlalchemy.url = mysql://root:phuoc@localhost/bddevfac?charset=utf8 mondumas.admin_email = ctphuoc@bbox.fr diff --git a/mondumas/models/agenda.py b/mondumas/models/agenda.py new file mode 100644 index 0000000..489aa04 --- /dev/null +++ b/mondumas/models/agenda.py @@ -0,0 +1,151 @@ +# -*- 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 +) + +import datetime +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_agendas(request,code): + if code =='': + query = "SELECT * FROM p_agenda where actif = 1 order by code;" + results = request.dbsession.execute(query).fetchall() + else: + query = "SELECT * FROM p_agenda where code = :code;" + results = request.dbsession.execute(query, {'code': code}).first() + return results + +def get_rendez_vous(request, itc): + d = datetime.datetime.today() + d = d - dateutil.relativedelta.relativedelta(months=2) + # début du mois M-2 + datedeb = d.strftime('%Y-%m-01') + + # lire les rdv de l'ITC + query = """ + (SELECT CONCAT(l.societe,"-OS-",l.no_id) as nodossier, l.rdv_debut, l.rdv_fin, e.c_nom FROM ordres_lig l + INNER JOIN ordres e ON l.societe=e.societe AND l.no_id=e.no_id + WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi) + UNION + (SELECT CONCAT(l.societe,"-DD-",l.no_id) as nodossier, l.rdv_debut, l.rdv_fin, e.c_nom FROM dem_lig l + INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id + WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi) + UNION + (SELECT CONCAT(l.societe,"-RD-",l.no_id) as nodossier, l.rdv_debut, l.rdv_fin, e.c_nom FROM rdvous_lig l + INNER JOIN rdvous e ON l.societe=e.societe AND l.no_id=e.no_id + WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi); +""" + results = request.dbsession.execute(query, {'datedeb': datedeb, 'itc': itc}).fetchall() + return results + +def delete_don(request, mbr_id, don_id): + query = "DELETE FROM mbr_dons WHERE mbr_id = :mbr_id and don_id = :don_id;" + execute_query(request, query, {'mbr_id': mbr_id, 'don_id': don_id}) + +def update_don(request, mbr_id, don_id, new_values): + # formater les champs + s = '' + for param in new_values.keys(): + if param == 'date': + ddate = datetime.strptime(new_values['date'], '%d/%m/%Y') + new_values['date'] = ddate.strftime("%Y/%m/%d") + if s: + s += ",%s=:%s" % (param, param) + else: + s = "%s=:%s" % (param, param) + + if don_id == '0': + new_values['mbr_id'] = mbr_id + query = "INSERT INTO mbr_dons SET %s" % s + else: + new_values['mbr_id'] = mbr_id + new_values['don_id'] = don_id + query = "UPDATE mbr_dons SET %s WHERE mbr_id = :mbr_id and don_id = :don_id;" % s + execute_query(request, query, new_values) + +def update_journal(request, jnl, no_id, new_values): + # formater les champs + s = '' + for param in new_values.keys(): + if param == 'date': + ddate = datetime.strptime(new_values['date'], '%d/%m/%Y') + new_values['date'] = ddate.strftime("%Y/%m/%d") + if s: + s += ",%s=:%s" % (param, param) + else: + s = "%s=:%s" % (param, param) + + if no_id == '0': + if jnl == 'C': + query = "INSERT INTO jnl_caisse SET %s" % s + else: + query = "INSERT INTO jnl_caisse SET %s" % s + else: + new_values['no_id'] = no_id + if jnl == 'C': + query = "UPDATE jnl_caisse SET %s WHERE no_id = :no_id;" % s + else: + query = "UPDATE jnl_banque SET %s WHERE no_id = :no_id;" % s + + execute_query(request, query, new_values) + +def delete_membre(request, mbr_id): + query = "DELETE FROM membres WHERE mbr_id = :mbr_id ;" + execute_query(request, query, {'mbr_id': mbr_id}) + +def insert_gift_to_account(request, libelle_esp, libelle_chq): + import pdb;pdb.set_trace() + # genere une écriture dans le journal de caisse pour les espèces + query = "SELECT sum(montant) as total FROM mbr_dons where valide_le IS NULL and mode='ESPECE';" + result = request.dbsession.execute(query).first() + if result.total > 0: + query = """INSERT INTO jnl_caisse (date, compte, libelle, recette, valide_le) + VALUES (CURRENT_DATE, '7540', :libelle_esp, :total_esp, CURRENT_DATE);""" + execute_query(request, query, {'libelle_esp': libelle_esp, 'total_esp': result.total}) + + # genere une écriture dans le journal de banque pour les chèques + query = "SELECT sum(montant) as total FROM mbr_dons where valide_le IS NULL and mode='CHEQUE';" + result = request.dbsession.execute(query).first() + if result.total > 0: + query = """INSERT INTO jnl_banque (date, compte, libelle, recette, valide_le) + VALUES (CURRENT_DATE, '7540', :libelle_chq, :total_chq, CURRENT_DATE);""" + execute_query(request, query, {'libelle_chq': libelle_chq, 'total_chq': result.total}) + + # valider les dons + query = "UPDATE mbr_dons SET valide_le = CURRENT_DATE WHERE valide_le IS NULL;" + execute_query(request, query, {}) + +def update_membre(request, mbr_id, new_values): + # formater les champs + s = '' + for param in new_values.keys(): + if param == 'nom': + new_values['nom'] = new_values['nom'].upper() + if param == 'ville': + new_values['ville'] = new_values['ville'].upper() + if s: + s += ",%s=:%s" % (param, param) + else: + s = "%s=:%s" % (param, param) + + if mbr_id == '0': + query = "INSERT INTO membres SET %s" % s + else: + new_values['mbr_id'] = mbr_id + query = "UPDATE membres SET %s WHERE mbr_id = :mbr_id;" % s + execute_query(request, query, new_values) + diff --git a/mondumas/models/default.py b/mondumas/models/default.py index 26458bc..281ca08 100644 --- a/mondumas/models/default.py +++ b/mondumas/models/default.py @@ -19,135 +19,17 @@ def execute_query(request, query, params): mark_changed(request.dbsession) transaction.commit() -def get_comptes(request, type): - if type == 'recette': - query = "SELECT * FROM p_comptes where no_compte like '7%' order by no_compte;" - else: - query = "SELECT * FROM p_comptes where no_compte like '6%' order by no_compte;" - results = request.dbsession.execute(query).fetchall() - return results - def get_member_by_mdp_oublie(request, lien): - query = "SELECT * FROM membres WHERE mdp_oublie=:lien;" + query = "SELECT * FROM p_users WHERE mdp_oublie=:lien;" results = request.dbsession.execute(query, {'lien':lien}).first() return results -def get_member_by_email(request, email): - # lire le membres par son email - query = """SELECT * FROM membres WHERE email=:email;""" - results = request.dbsession.execute(query, {'email': email}).first() - return results - - def get_member_by_id(request, mbr_id): # lire le membres par son identifianr - query = """SELECT * FROM membres WHERE mbr_id=:mbr_id;""" + query = """SELECT * FROM p_users WHERE CD_UTI=:mbr_id;""" results = request.dbsession.execute(query, {'mbr_id': mbr_id}).first() return results -def get_membres(request): - # lire les membres - query = """SELECT * FROM membres order by nom, prenom;""" - results = request.dbsession.execute(query).fetchall() - return results - -def delete_don(request, mbr_id, don_id): - query = "DELETE FROM mbr_dons WHERE mbr_id = :mbr_id and don_id = :don_id;" - execute_query(request, query, {'mbr_id': mbr_id, 'don_id': don_id}) - -def update_don(request, mbr_id, don_id, new_values): - # formater les champs - s = '' - for param in new_values.keys(): - if param == 'date': - ddate = datetime.strptime(new_values['date'], '%d/%m/%Y') - new_values['date'] = ddate.strftime("%Y/%m/%d") - if s: - s += ",%s=:%s" % (param, param) - else: - s = "%s=:%s" % (param, param) - - if don_id == '0': - new_values['mbr_id'] = mbr_id - query = "INSERT INTO mbr_dons SET %s" % s - else: - new_values['mbr_id'] = mbr_id - new_values['don_id'] = don_id - query = "UPDATE mbr_dons SET %s WHERE mbr_id = :mbr_id and don_id = :don_id;" % s - execute_query(request, query, new_values) - -def update_journal(request, jnl, no_id, new_values): - # formater les champs - s = '' - for param in new_values.keys(): - if param == 'date': - ddate = datetime.strptime(new_values['date'], '%d/%m/%Y') - new_values['date'] = ddate.strftime("%Y/%m/%d") - if s: - s += ",%s=:%s" % (param, param) - else: - s = "%s=:%s" % (param, param) - - if no_id == '0': - if jnl == 'C': - query = "INSERT INTO jnl_caisse SET %s" % s - else: - query = "INSERT INTO jnl_caisse SET %s" % s - else: - new_values['no_id'] = no_id - if jnl == 'C': - query = "UPDATE jnl_caisse SET %s WHERE no_id = :no_id;" % s - else: - query = "UPDATE jnl_banque SET %s WHERE no_id = :no_id;" % s - - execute_query(request, query, new_values) - -def delete_membre(request, mbr_id): - query = "DELETE FROM membres WHERE mbr_id = :mbr_id ;" - execute_query(request, query, {'mbr_id': mbr_id}) - -def insert_gift_to_account(request, libelle_esp, libelle_chq): - import pdb;pdb.set_trace() - # genere une écriture dans le journal de caisse pour les espèces - query = "SELECT sum(montant) as total FROM mbr_dons where valide_le IS NULL and mode='ESPECE';" - result = request.dbsession.execute(query).first() - if result.total > 0: - query = """INSERT INTO jnl_caisse (date, compte, libelle, recette, valide_le) - VALUES (CURRENT_DATE, '7540', :libelle_esp, :total_esp, CURRENT_DATE);""" - execute_query(request, query, {'libelle_esp': libelle_esp, 'total_esp': result.total}) - - # genere une écriture dans le journal de banque pour les chèques - query = "SELECT sum(montant) as total FROM mbr_dons where valide_le IS NULL and mode='CHEQUE';" - result = request.dbsession.execute(query).first() - if result.total > 0: - query = """INSERT INTO jnl_banque (date, compte, libelle, recette, valide_le) - VALUES (CURRENT_DATE, '7540', :libelle_chq, :total_chq, CURRENT_DATE);""" - execute_query(request, query, {'libelle_chq': libelle_chq, 'total_chq': result.total}) - - # valider les dons - query = "UPDATE mbr_dons SET valide_le = CURRENT_DATE WHERE valide_le IS NULL;" - execute_query(request, query, {}) - -def update_membre(request, mbr_id, new_values): - # formater les champs - s = '' - for param in new_values.keys(): - if param == 'nom': - new_values['nom'] = new_values['nom'].upper() - if param == 'ville': - new_values['ville'] = new_values['ville'].upper() - if s: - s += ",%s=:%s" % (param, param) - else: - s = "%s=:%s" % (param, param) - - if mbr_id == '0': - query = "INSERT INTO membres SET %s" % s - else: - new_values['mbr_id'] = mbr_id - query = "UPDATE membres SET %s WHERE mbr_id = :mbr_id;" % s - execute_query(request, query, new_values) - def update_membre_mdp_oublie(request, login): import base64 import uuid @@ -155,12 +37,12 @@ def update_membre_mdp_oublie(request, login): # get a UUID - URL safe, Base64 r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes) r_uuid = r_uuid.replace('=', '') - query = "UPDATE membres SET mdp_oublie=:r_uuid, mdp_oublie_date=now() WHERE email=:login;" + query = "UPDATE p_users SET mdp_oublie=:r_uuid, mdp_oublie_date=now() WHERE CD_UTI=:login;" execute_query(request, query, {'r_uuid':r_uuid, 'login':login}) return r_uuid def update_membre_mdp(request, login, password): """Update password for member login""" - query = "UPDATE membres SET mdp = SHA1(:password), mdp_oublie=NULL, mdp_oublie_date=NULL WHERE email=:login;" + query = "UPDATE p_users SET mdp = SHA1(:password), mdp_oublie=NULL, mdp_oublie_date=NULL WHERE CD_UTI=:login;" execute_query(request, query, {'login': login, 'password': password}) diff --git a/mondumas/panels.py b/mondumas/panels.py index 9681c78..dfc90fb 100644 --- a/mondumas/panels.py +++ b/mondumas/panels.py @@ -3,7 +3,7 @@ from pyramid_layout.panel import panel_config from pyramid.security import authenticated_userid from .security import groupfinder -from .models.default import get_member_by_email +from .models.default import get_member_by_id @panel_config(name='dropdown_menu_panel', renderer='templates/panels/dropdown_menu_panel.pt') def dropdown_menu_panel(context, request): @@ -11,14 +11,14 @@ def dropdown_menu_panel(context, request): if logged_in is None: return { 'logged_in': '' } else: - member = get_member_by_email(request, logged_in) - fullname = '%s %s' % (member.nom, member.prenom) - no_id = member.mbr_id + member = get_member_by_id(request, logged_in) + fullname = member.NOM + email = member.email return { 'logged_in': logged_in, 'logged_in_name': fullname, - 'logged_in_id': no_id, + 'logged_in_email': email, } diff --git a/mondumas/routes.py b/mondumas/routes.py index f13b48b..f8e76c6 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -1,18 +1,11 @@ def includeme(config): config.add_static_view('static', 'static', cache_max_age=3600) config.add_route('home', '/') - config.add_route('jnl_banque', '/banque_jnl') - config.add_route('jnl_caisse', '/caisse_jnl') - config.add_route('jnl_credit', '/jnl_credit/{jnl}/{no_id}') - config.add_route('jnl_debit', '/jnl_debit/{jnl}/{no_id}') + config.add_route('agenda', '/agenda') + config.add_route('changer_mdp', '/changer_mdp') + config.add_route('dossier_view', '/dossier_view/{mbr_id}') config.add_route('envoyer_mdp', '/envoyer_mdp') - config.add_route('gift_edit', '/gift_edit/{mbr_id}/{don_id}') - config.add_route('gift_list', '/gift_list') config.add_route('login', '/login') config.add_route('logout', '/logout') - config.add_route('member_edit', '/member_edit/{mbr_id}') - config.add_route('member_view', '/member_view/{mbr_id}') - config.add_route('members', '/members') - config.add_route('members_adr', '/members_adr') config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}') diff --git a/mondumas/security.py b/mondumas/security.py index b0ac426..c7d8c01 100644 --- a/mondumas/security.py +++ b/mondumas/security.py @@ -1,12 +1,12 @@ -from .models.default import get_member_by_email +from .models.default import get_member_by_id def groupfinder(userid, request): - member = get_member_by_email(request, userid) - - if member: - mbr_id = member.mbr_id - # Chi hay Phuoc ? - if mbr_id == 8 or mbr_id == 9: - return ['group:administrators'] - else: - return [] # it means that userid is logged in (it returns None if userid isn't logged in) + member = get_member_by_id(request, userid) + + if member: + mbr_id = member.CD_UTI + # Chi hay Phuoc ? + if mbr_id == 8 or mbr_id == 9: + return ['group:administrators'] + else: + return [] # it means that userid is logged in (it returns None if userid isn't logged in) diff --git a/mondumas/static/dist/fullcalendar/fr.js b/mondumas/static/dist/fullcalendar/fr.js new file mode 100644 index 0000000..0c7af85 --- /dev/null +++ b/mondumas/static/dist/fullcalendar/fr.js @@ -0,0 +1 @@ +!function(e){"function"==typeof define&&define.amd?define(["jquery","moment"],e):"object"==typeof exports?module.exports=e(require("jquery"),require("moment")):e(jQuery,moment)}(function(e,r){!function(){var e=r.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|)/,ordinal:function(e){return e+(1===e?"er":"")},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("fr","fr",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("fr",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la
journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})}); \ No newline at end of file diff --git a/mondumas/templates/agenda/agenda.pt b/mondumas/templates/agenda/agenda.pt new file mode 100644 index 0000000..665a6ec --- /dev/null +++ b/mondumas/templates/agenda/agenda.pt @@ -0,0 +1,53 @@ + +
+
+ +
+
+ +
+
+ +
+
+
+

+ RDV Peinture RDV Menuiserie  + RDV Plomberiee RDV Polynet  +

+
+
+
+
+
+
+
+
+
+
+ + + +
+
+ + diff --git a/mondumas/templates/member_view.pt b/mondumas/templates/agenda/dossier_view.pt similarity index 100% rename from mondumas/templates/member_view.pt rename to mondumas/templates/agenda/dossier_view.pt diff --git a/mondumas/templates/changer_mdp.pt b/mondumas/templates/changer_mdp.pt new file mode 100644 index 0000000..e6c396f --- /dev/null +++ b/mondumas/templates/changer_mdp.pt @@ -0,0 +1,57 @@ + +
+ +
+ +
+
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+ + + +
+ \ No newline at end of file diff --git a/mondumas/templates/envoyer_mdp.pt b/mondumas/templates/envoyer_mdp.pt index e173ce7..b02c754 100644 --- a/mondumas/templates/envoyer_mdp.pt +++ b/mondumas/templates/envoyer_mdp.pt @@ -6,18 +6,18 @@

- Vì lý do an toàn, mật khẩu của bạn đã được mã hóa và không thể lấy lại. Hãy điền email vào bên phía dưới để tiến hành đặt lại mật khẩu mới. -

+ Pour des raisons de sécurité, nous gardons votre mot de passe chiffré, et nous ne pouvons pas vous l'envoyer. + Si vous souhaitez ré-initialiser votre mot de passe, remplissez le formulaire ci-dessous et nous vous enverrons un email pour démarrer la phase de ré-initialisation de votre mot de passe.


- +
- +
diff --git a/mondumas/templates/home.pt b/mondumas/templates/home.pt index 5eab1bb..0f1ac4f 100644 --- a/mondumas/templates/home.pt +++ b/mondumas/templates/home.pt @@ -5,9 +5,9 @@

diff --git a/mondumas/templates/layouts/global_layout.pt b/mondumas/templates/layouts/global_layout.pt index bfdf33f..b152bfc 100644 --- a/mondumas/templates/layouts/global_layout.pt +++ b/mondumas/templates/layouts/global_layout.pt @@ -10,7 +10,8 @@ - + + @@ -19,9 +20,14 @@ - + + + + + @@ -85,7 +91,7 @@ diff --git a/mondumas/templates/login.pt b/mondumas/templates/login.pt index 9d56adc..006e247 100644 --- a/mondumas/templates/login.pt +++ b/mondumas/templates/login.pt @@ -11,31 +11,29 @@ data-fv-icon-invalid="glyphicon glyphicon-remove" data-fv-icon-validating="glyphicon glyphicon-refresh"> -

Đăng nhập

+

Se connecter

+ data-fv-notempty-message="L'identifiant est obligatoire" />
+ data-fv-notempty-message="Le mot de passe est obligatoire">
- +   

- Quên mật khẩu ? + Mot de passe oublié ?

diff --git a/mondumas/templates/member_edit.pt b/mondumas/templates/member_edit.pt deleted file mode 100644 index 7f5eb18..0000000 --- a/mondumas/templates/member_edit.pt +++ /dev/null @@ -1,163 +0,0 @@ - -
- -
-
-
-
- -
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
- -
-
-
- -
- -
-
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
-
-
- - - Trở lại -
-
-
-
-
-
-
-
- - - -
- diff --git a/mondumas/templates/members.pt b/mondumas/templates/members.pt deleted file mode 100644 index 9dbff6d..0000000 --- a/mondumas/templates/members.pt +++ /dev/null @@ -1,83 +0,0 @@ - -
- -

- Thêm HV

- - - - - - - - - - - - - - -
Nom PrénomCiv.EmailVilleStatutPháp danhEtatNo ID
- - - -
-
- -
-
- diff --git a/mondumas/templates/members_adr.pt b/mondumas/templates/members_adr.pt deleted file mode 100644 index ae13659..0000000 --- a/mondumas/templates/members_adr.pt +++ /dev/null @@ -1,29 +0,0 @@ - -
- -
-
-
-
- -
-
-
-
- -
-

Tổng cộng : ${total}

- -
-
    - ${adr.email},
    -
- -
- - diff --git a/mondumas/templates/panels/dropdown_menu_panel.pt b/mondumas/templates/panels/dropdown_menu_panel.pt index 6c01860..36723c7 100644 --- a/mondumas/templates/panels/dropdown_menu_panel.pt +++ b/mondumas/templates/panels/dropdown_menu_panel.pt @@ -3,10 +3,13 @@
diff --git a/mondumas/views/agenda.py b/mondumas/views/agenda.py new file mode 100644 index 0000000..4c06eef --- /dev/null +++ b/mondumas/views/agenda.py @@ -0,0 +1,168 @@ +# -*- coding: utf8 -*- +from pyramid.response import Response +from pyramid.renderers import render, get_renderer +from pyramid.view import ( + view_config, + forbidden_view_config, +) +from pyramid.security import ( + authenticated_userid, + remember, + forget, +) +from pyramid.httpexceptions import ( + HTTPFound, + HTTPNotFound, + HTTPForbidden, +) +from pyramid_mailer import get_mailer +from pyramid_mailer.message import Message, Attachment +from datetime import * +import hashlib + +from sqlalchemy.exc import DBAPIError +from ..security import groupfinder + +import json + +from ..models.agenda import * +from ..models.default import * + + +@view_config(route_name='member_edit', renderer='../templates/agenda/member_edit.pt', permission='view') +def member_edit(request): + mbr_id = request.matchdict['mbr_id'] + url = request.route_url("member_edit", mbr_id=mbr_id) + + message = '' + civilites = ["M.","M.Mme","Mme"] + etats = [u"Actif",u"Décédé",u"NPAI"] + if mbr_id == '0': + # nouveau + membre = {} + membre['mbr_id'] = 0 + membre['civilite'] = 'Mme' + membre['nom'] = '' + membre['prenom'] = '' + membre['adresse'] = '' + membre['adresse2'] = '' + membre['cp'] = '' + membre['ville'] = '' + membre['email'] = '' + membre['tel_fixe'] = '' + membre['tel_mobile'] = '' + membre['phap_danh'] = '0' + membre['notes'] = '' + membre['etat'] = 'Actif' + membre['statut'] = 'HV' + page_title= 'Nouvelle Fiche' + else: + # lire la fiche de l'membre + membre = get_member_by_id(request, mbr_id) + if not membre: + request.session.flash(u"Membre non trouvé : %s" % id, 'warning') + return HTTPFound(location=request.route_url('members')) + page_title= u"Modification de la fiche no %s" %(membre.mbr_id) + + if 'form.submitted' in request.params: + new_values = {} + for param, db_value in membre.items(): + if param in request.params and request.params[param] != db_value: + new_values[param] = request.params[param] + + if new_values: + update_membre(request, mbr_id, new_values) + request.session.flash(u"La fiche a été mise à jour avec succès.", 'success') + if mbr_id == '0': + return HTTPFound(location=request.route_url('members')) + else: + return HTTPFound(location=request.route_url('member_view', mbr_id=mbr_id)) + + if 'form.deleted' in request.params: + delete_membre(request, mbr_id) + request.session.flash(u"La fiche a été supprimée avec succès.", 'success') + return HTTPFound(location=request.route_url('members')) + + return { + 'page_title': page_title, + 'url': url, + 'membre': membre, + 'etats': etats, + 'civilites': civilites, + 'message': message, + } + +@view_config(route_name='member_view', renderer='../templates/agenda/member_view.pt', permission='view') +def member_view(request): + mbr_id = request.matchdict['mbr_id'] + url = request.route_url("member_view", mbr_id=mbr_id) + + member = get_member_by_id(request, mbr_id) + if member is None: + request.session.flash(u"La fiche no %s est introuvable" % (mbr_id), 'danger') + return HTTPFound(location=request.route_url("members")) + # lire tous les dons du membre + dons = get_dons_by_mbr(request, mbr_id, 0) + + return { + 'page_title': u"[#%s] : %s %s" % (mbr_id, member.nom, member.prenom), + 'member': member, + 'dons': dons, + } + +@view_config(route_name='agenda', renderer='../templates/agenda/agenda.pt') +def agenda(request): + logged_in = authenticated_userid(request) + member = get_member_by_id(request, logged_in) + if member: + agenda = member.agenda + if not agenda: + agenda = 'J' + else: + agenda = 'J' + + # lire les différents AGENDAS + agendas = get_agendas(request,'') + # prendre en compte les paramètres de saisie + if 'agenda' in request.params: + agenda = request.params["agenda"] + + personne = get_agendas(request,agenda) + rows = get_rendez_vous(request, agenda) + page_title = u"Agenda de %s" % personne.nom + + # construire la liste des events + events = [] + for row in rows: + event_url = 'agenda_event/%s' % (row.nodossier) + event_title = row.c_nom + + # déterminer la couleur de l'event selon la societe + societe = row.nodossier[0:2] + if societe == "PE": + color = "#ff4444" # rouge danger + elif societe == "PL": + color = "#00C851" # vert success + elif societe == "PL": + color = "#33b5e5" # bleu info + else: + color = "#ffbb33" # orange warning + + json_event = { + 'title': event_title, + 'start': row.rdv_debut.strftime('%Y-%m-%d %H:%M:%S'), + 'end': row.rdv_fin.strftime('%Y-%m-%d %H:%M:%S'), + 'allDay': False, + 'color': color, + 'url': event_url, + } + events.append(json_event) + + + return { + 'page_title': page_title, + 'fullcalendar_events': json.dumps(events), + 'agendas': agendas, + 'agenda': agenda, + } + diff --git a/mondumas/views/default.py b/mondumas/views/default.py index 083eee2..75a1d3f 100644 --- a/mondumas/views/default.py +++ b/mondumas/views/default.py @@ -64,31 +64,56 @@ def envoyer_mdp(request): if 'form.submitted' in request.params: login = request.params['login'] - member = get_member_by_email(request, login) + member = get_member_by_id(request, login) if member: # Fabrication du corps du email_passwordMessage lien = update_membre_mdp_oublie(request, login) body = u""" -Liên kết này cho phép bạn đặt lại mật khẩu của mình tại : +Le lien suivant vous dirigera vers une page où vous pourrez ré-initialiser votre mot de passe d'accès à « mon.entreprise-dumas.com » : + %s -Liên kết này có hiệu lực trong vòng 7 ngày. +(Ce lien est valide pendant 168 heures.) """ % (request.route_url('redefinir_mdp', lien=lien)) - envoyerMail(request, member.email, u"Yêu cầu đặt lại mật khẩu", body) - request.session.flash(u"Xác nhận đặt lại mật khẩu đã được gửi đến : %s." % member.email) + envoyerMail(request, member.email, u"Demande de ré-initialisation du mot de passe", body) + request.session.flash(u"Votre demande de ré-initialisation de mot de passe vous a été envoyée à %s." % member.email) return HTTPFound(location=request.route_url('login')) else: - message = u"Email đăng nhập không tìm thấy." + message = u"Le mot de passe fourni est incorrect." + return { + 'page_title': u"Changer mon mot de passe", + 'url': url, + 'message': message, + } + +@view_config(route_name='changer_mdp', renderer='../templates/changer_mdp.pt', permission='view') +def changer_mdp(request): + url = request.route_url('changer_mdp') + logged_in = authenticated_userid(request) + message = '' + + member = get_member_by_id(request, logged_in) + if member: + if 'form.submitted' in request.params: + old_password = request.params['old_password'] + new_password = request.params['new_password1'] + if member.mdp == hashlib.sha1(old_password).hexdigest(): + update_membre_mdp(request, logged_in, new_password) + request.session.flash(u"Votre mot de passe a été mis à jour avec succès.") + return HTTPFound(location=request.route_url('home')) + else: + message = u"Le mot de passe actuel n'est pas correct." return { - 'page_title': u"Quên mật khẩu ?", - 'url': url, - 'message': message, - } + 'page_title': u"Changer mon mot de passe", + 'url': url, + 'member': member, + 'message': message, + } @view_config(route_name='redefinir_mdp', renderer='../templates/redefinir_mdp.pt') def redefinir_mdp(request): @@ -101,18 +126,18 @@ def redefinir_mdp(request): if 'form.submitted' in request.params: login = request.params["login"] mdp = request.params["new_password1"] - if login == membre.email: - update_membre_mdp(request, membre.email, mdp) - request.session.flash(u"Mật khẩu của bạn đã được thay đổi.", 'success') + if login == membre.CD_UTI: + update_membre_mdp(request, login, mdp) + request.session.flash(u"Votre mot de passe a été modifié avec succès.", 'success') return HTTPFound(location=request.route_url('login')) else: - request.session.flash(u"Email và liên kết không khớp với nhau.", 'danger') + request.session.flash(u"Identifiant incorrect.", 'danger') return HTTPFound(location=request.route_url('login')) else: - request.session.flash(u"Liên kết không còn giá trị.", 'danger') + request.session.flash(u"Le lien n'est plus valable.", 'warning') return HTTPFound(location=request.route_url('login')) return { - 'page_title': u"Đặt lại mật khẩu", + 'page_title': u"Définissez votre mot de passe", 'url': url, } @@ -135,14 +160,14 @@ def login(request): if 'form.submitted' in request.params: login = request.params['login'] password = request.params['password'] - record = get_member_by_email(request, login) + record = get_member_by_id(request, login) if record : - password_hash = hashlib.sha1(password).hexdigest() - if record.mdp == password_hash: + # mot de passe hash valide ? + if record.mdp == hashlib.sha1(password).hexdigest(): headers = remember(request, login) return HTTPFound(location=came_from, headers=headers) - message = u"Email và mật khẫu không ăn khớp. Đăng nhập không thành công." + message = u"Email et mot de passe invalides. La connexion a échoué." return { 'page_title': u"", @@ -152,61 +177,6 @@ def login(request): 'message': message, } -@view_config(route_name='gift_edit', renderer='../templates/gift_edit.pt', permission='view') -def gift_edit(request): - mbr_id = request.matchdict['mbr_id'] - don_id = request.matchdict['don_id'] - url = request.route_url("gift_edit", mbr_id=mbr_id, don_id=don_id) - - # lire la fiche de l'membre - membre = get_member_by_id(request, mbr_id) - message = '' - types = ["DON MANUEL","COTISATION"] - modes = [u"ESPECE",u"CHEQUE"] - if don_id == '0': - # nouveau - don = {} - don['mbr_id'] = str(mbr_id) - don['don_id'] = '0' - don['date'] = date.today() - don['type'] = 'DON MANUEL' - don['mode'] = 'ESPECE' - don['montant'] = 0 - don['valide_le'] = '' - page_title= 'Nouveau don' - else: - # lire le don - don = get_dons_by_mbr(request, mbr_id, don_id) - if not don: - request.session.flash(u"Don non trouvé : %s" % don_id, 'danger') - return HTTPFound(location=request.route_url('member_view', mbr_id=mbr_id)) - page_title= u"Modification du don no %s" % (don.don_id) - - if 'form.submitted' in request.params: - new_values = {} - for param, db_value in don.items(): - if param in request.params and request.params[param] != db_value: - new_values[param] = request.params[param] - - if new_values: - update_don(request, mbr_id, don_id, new_values) - request.session.flash(u"Le don a été mise à jour avec succès.", 'success') - return HTTPFound(location=request.route_url('member_view', mbr_id=mbr_id)) - - if 'form.deleted' in request.params: - delete_don(request, mbr_id, don_id) - request.session.flash(u"Le don a été supprimé avec succès.", 'success') - return HTTPFound(location=request.route_url('member_view', mbr_id=mbr_id)) - - return { - 'page_title': page_title, - 'url': url, - 'mbr_nom': '%s %s' % (membre.nom, membre.prenom), - 'don': don, - 'types': types, - 'modes': modes, - 'message': message, - } @view_config(route_name='logout') def logout(request): @@ -217,115 +187,18 @@ def logout(request): headers=headers) -@view_config(route_name='member_edit', renderer='../templates/member_edit.pt', permission='view') -def member_edit(request): - mbr_id = request.matchdict['mbr_id'] - url = request.route_url("member_edit", mbr_id=mbr_id) - - message = '' - civilites = ["M.","M.Mme","Mme"] - etats = [u"Actif",u"Décédé",u"NPAI"] - if mbr_id == '0': - # nouveau - membre = {} - membre['mbr_id'] = 0 - membre['civilite'] = 'Mme' - membre['nom'] = '' - membre['prenom'] = '' - membre['adresse'] = '' - membre['adresse2'] = '' - membre['cp'] = '' - membre['ville'] = '' - membre['email'] = '' - membre['tel_fixe'] = '' - membre['tel_mobile'] = '' - membre['phap_danh'] = '0' - membre['notes'] = '' - membre['etat'] = 'Actif' - membre['statut'] = 'HV' - page_title= 'Nouvelle Fiche' - else: - # lire la fiche de l'membre - membre = get_member_by_id(request, mbr_id) - if not membre: - request.session.flash(u"Membre non trouvé : %s" % id, 'warning') - return HTTPFound(location=request.route_url('members')) - page_title= u"Modification de la fiche no %s" %(membre.mbr_id) - - if 'form.submitted' in request.params: - new_values = {} - for param, db_value in membre.items(): - if param in request.params and request.params[param] != db_value: - new_values[param] = request.params[param] - - if new_values: - update_membre(request, mbr_id, new_values) - request.session.flash(u"La fiche a été mise à jour avec succès.", 'success') - if mbr_id == '0': - return HTTPFound(location=request.route_url('members')) - else: - return HTTPFound(location=request.route_url('member_view', mbr_id=mbr_id)) - - if 'form.deleted' in request.params: - delete_membre(request, mbr_id) - request.session.flash(u"La fiche a été supprimée avec succès.", 'success') - return HTTPFound(location=request.route_url('members')) - - return { - 'page_title': page_title, - 'url': url, - 'membre': membre, - 'etats': etats, - 'civilites': civilites, - 'message': message, - } - -@view_config(route_name='member_view', renderer='../templates/member_view.pt', permission='view') -def member_view(request): - mbr_id = request.matchdict['mbr_id'] - url = request.route_url("member_view", mbr_id=mbr_id) - - member = get_member_by_id(request, mbr_id) - if member is None: - request.session.flash(u"La fiche no %s est introuvable" % (mbr_id), 'danger') - return HTTPFound(location=request.route_url("members")) - # lire tous les dons du membre - dons = get_dons_by_mbr(request, mbr_id, 0) - - return { - 'page_title': u"[#%s] : %s %s" % (mbr_id, member.nom, member.prenom), - 'member': member, - 'dons': dons, - } - -@view_config(route_name='members', renderer='../templates/members.pt', permission='view') -def members(request): - - items = get_membres(request) - - liste=[] - for item in items: - full_name = u'%s, %s ' % (item.nom, item.prenom) - d = (full_name, item.civilite, item.email, item.ville, item.statut, item.phap_danh, item.etat, item.mbr_id) - liste.append(d) - - return { - "page_title": u"Danh sách", - 'dt_data': json.dumps(liste), - } - def envoyerMail(request, destinataire, objet, corps): body = u""" %s -Thân mến, -https://tinhdo.caotek.fr +Cordialement, +mon.entreprise-dumas.com """ % (corps) - message = Message(subject=u"[tinh-do] %s" % objet, + message = Message(subject=u"[Ent. Duams] %s" % objet, sender=request.registry.settings['mondumas.admin_email'], body=body) message.add_recipient(destinataire)