Commit e6d936db by Julien Jorry

DEV V1.1

- #145 - Pouvoir gérer plusieurs prestataires, groupes ou comptoirs
- #107 - A l'installation - rajout
- #104 - Modification du centre de la carte des prestataires/comptoirs possible via l'administration
- #113 - Améliorer la géolocalisation - avec le service de géoloc
- #110 - utilisateur avec plusieurs rôles - améliorer l'identification liés aux actions
- #130 - Exports filtrés de mails
- #120 - Prestataires et adhérents : Solde en billet à enlever
+ amélioration administration : filtres + corrections diverses flux
+ droits suivant rôle
+ ajout d'un hash pour vérifier l'intégrité d'un flux
+ ajout du role utilisé par l'utilisateur lors de l'ajout d'un flux
+ différentes corrections de typo
+ manuel d'installation mis à jour
parent c19beb4d
...@@ -11,6 +11,14 @@ ...@@ -11,6 +11,14 @@
border-right: 1px solid #eee; border-right: 1px solid #eee;
} }
.inputsuccess {
border: 1px solid #28B62C !important;
}
.inputerror {
border: 1px solid #FF4136 !important;
}
.card { .card {
position: relative; position: relative;
display: -webkit-box; display: -webkit-box;
...@@ -2093,4 +2101,26 @@ ...@@ -2093,4 +2101,26 @@
} }
.main-header .sidebar-toggle:before { .main-header .sidebar-toggle:before {
content: '' !important; content: '' !important;
}
.flash-messages .alert {
width: 200px;
background-color: black;
background-color: rgba(30, 30, 30, 0.9);
text-shadow: 1px 1px black;
color: #eee;
padding-left: 65px;
box-shadow: 4px 3px 15px rgba(0,0,0,0.9);
border: 0;
background-repeat: no-repeat;
background-position: 15px 50%;
display: none;
z-index: 1000;
}
.flash-messages .alert .close {
color: white;
color: rgba(255, 255, 255, 0.8);
text-shadow: 0 1px 0 #000;
opacity: 1;
} }
\ No newline at end of file
/** /**
* STYLES IMPORTES DE BOOTSTRAP * STYLES IMPORTES DE BOOTSTRAP ET BOOTSWATCH
*
* @import "~bootswatch/dist/[theme]/variables";
* @import "~bootswatch/dist/[theme]/bootswatch";
*
* Remplacer [theme] par un des thèmes possibles :
* cerulean, cosmo, cyborg, darkly, flatly, journal, litera, lumen, lux, materia, minty, pulse, sandstone, simplex, sketchy, slate, solar, spacelab, superhero, united, yeti
*/ */
@import "~bootswatch/dist/lumen/variables"; @import "~bootswatch/dist/lumen/variables";
@import "~bootstrap/scss/bootstrap"; @import "~bootstrap/scss/bootstrap";
......
...@@ -9,5 +9,84 @@ ...@@ -9,5 +9,84 @@
require('../css/admin.css'); require('../css/admin.css');
require('bootstrap'); require('bootstrap');
require('../js/flash-messages.js'); require('../js/flash-messages.js');
require('../leaflet/leaflet.js');
// require('../leaflet/leaflet.css');
// Need jQuery? Install it with "yarn add jquery", then uncomment to require it. // Need jQuery? Install it with "yarn add jquery", then uncomment to require it.
$('#flash-messages').flashNotification('init'); $('#flash-messages').flashNotification('init');
\ No newline at end of file
$(document).ready(function() {
var mapMarkers = [];
$('.searchLatLon').on('click', function (e) {
e.preventDefault();
var self = $(this);
$.ajax({
url : self.data('url'),
type: 'post',
data : {'adresse' : $('#'+(self.attr('id').replace('_geoloc_search', ''))+'_geoloc_adresse').val(), 'cpostal' : $('#'+(self.attr('id').replace('_geoloc_search', ''))+'_geoloc_cpostal').val(), 'ville' : $('#'+(self.attr('id').replace('_geoloc_search', ''))+'_geoloc_ville').val()},
success: function(response) {
var divid = self.attr('id').replace('_geoloc_search', '');
$('#'+divid+'_message').remove();
$('#'+divid+'_map').remove();
var marker_1 = null;
if(response.status == 'success' && response.data && response.data.lat != '' && response.data.lon != '') {
$('#'+divid+'_geoloc_lat').val(response.data.lat);
$('#'+divid+'_geoloc_lon').val(response.data.lon);
$('#'+divid+'_geoloc_lat').addClass('inputsuccess');
$('#'+divid+'_geoloc_lon').addClass('inputsuccess');
$('<p id="'+(divid+'_message')+'">Cliquez sur la carte si vous voulez affiner la géolocalisation</p><div id="'+(divid+'_map')+'" style="height: 250px;margin-top: 10px;"></div>').insertAfter('#'+self.attr('id'));
var latlon = L.latLng(parseFloat(response.data.lat), parseFloat(response.data.lon));
var mymap = L.map(divid+'_map').setView(latlon, 13);
L.tileLayer('https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', {maxZoom: 18, attribution: '&copy; Openstreetmap France | &copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'}).addTo(mymap);
var marker_1 = L.marker(latlon).addTo(mymap);
} else {
$(this).addClass('inputerror');
$('<p id="'+(divid+'_message')+'">ADRESSE INCONNUE : Cliquez sur la carte pour définir une adresse</p><div id="'+(divid+'_map')+'" style="height: 250px;margin-top: 10px;"></div>').insertAfter('#'+self.attr('id'));
var mymap = L.map(divid+'_map').setView(JSON.parse($('#koh_map_center').val()), parseInt($('#koh_map_zoom').val()));
L.tileLayer('https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', {maxZoom: 18, attribution: '&copy; Openstreetmap France | &copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'}).addTo(mymap);
}
mymap.on('click', function(e){
if (marker_1 != null) {
mymap.removeLayer(marker_1);
}
for(var i = 0; i < mapMarkers.length; i++){
mymap.removeLayer(mapMarkers[i]);
}
// Add marker to map at click location; add popup window
var newMarker = new L.marker(e.latlng);
newMarker.addTo(mymap);
mapMarkers.push(newMarker);
$('#'+divid+'_geoloc_lat').val(e.latlng.lat);
$('#'+divid+'_geoloc_lon').val(e.latlng.lng);
$('#'+divid+'_geoloc_lat').addClass('inputsuccess');
$('#'+divid+'_geoloc_lon').addClass('inputsuccess');
});
}
});
});
$('.editableboolean').on('click', function (e) {
e.preventDefault();
var self = $(this);
$.ajax({
url : self.data('url'),
type: 'post',
data : {'value' : (self.data('value') == 'true')},
success: function(data) {
if(data.status == 'success' && !data.messages) {
if (data.newvalue == 'false') {
self.text('non');
self.data('value', 'false');
self.addClass(' ');
self.removeClass('label-success');
} else {
self.data('value', 'true');
self.text('oui');
self.removeClass('label-danger');
self.addClass('label-success');
}
} else {
// $(this).addClass('error');
}
}
});
});
});
\ No newline at end of file
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
"ext-ctype": "*", "ext-ctype": "*",
"ext-iconv": "*", "ext-iconv": "*",
"api-platform/api-pack": "^1.2", "api-platform/api-pack": "^1.2",
"doctrine/annotations": "^1.8",
"friendsofsymfony/rest-bundle": "^2.4", "friendsofsymfony/rest-bundle": "^2.4",
"friendsofsymfony/user-bundle": "^2.1", "friendsofsymfony/user-bundle": "^2.1",
"geocoder-php/cache-provider": "^4.1", "geocoder-php/cache-provider": "^4.1",
...@@ -48,7 +49,7 @@ ...@@ -48,7 +49,7 @@
"symfony/twig-bundle": "4.3.*", "symfony/twig-bundle": "4.3.*",
"symfony/validator": "4.3.*", "symfony/validator": "4.3.*",
"symfony/web-link": "4.3.*", "symfony/web-link": "4.3.*",
"symfony/webpack-encore-bundle": "^1.0", "symfony/webpack-encore-bundle": "^1.7",
"symfony/yaml": "4.3.*", "symfony/yaml": "4.3.*",
"vich/uploader-bundle": "^1.8", "vich/uploader-bundle": "^1.8",
"willdurand/geocoder-bundle": "^5.0" "willdurand/geocoder-bundle": "^5.0"
......
...@@ -6,6 +6,8 @@ twig: ...@@ -6,6 +6,8 @@ twig:
fos_ck_editor: fos_ck_editor:
default_config: default default_config: default
base_path: "build/ckeditor"
js_path: "build/ckeditor/ckeditor.js"
configs: configs:
default: default:
language: fr language: fr
......
...@@ -3,6 +3,7 @@ framework: ...@@ -3,6 +3,7 @@ framework:
secret: '%env(APP_SECRET)%' secret: '%env(APP_SECRET)%'
#default_locale: en #default_locale: en
csrf_protection: true csrf_protection: true
validation: { enabled: true }
#http_method_override: true #http_method_override: true
# Enables session support. Note that the session will ONLY be started if you read or write from it. # Enables session support. Note that the session will ONLY be started if you read or write from it.
......
...@@ -5,7 +5,7 @@ sonata_user: ...@@ -5,7 +5,7 @@ sonata_user:
user: App\Entity\User user: App\Entity\User
group: App\Entity\Usergroup group: App\Entity\Usergroup
profile: profile:
default_avatar: 'images/admin/default_avatar.png' # Default avatar displayed if the user doesn't have one default_avatar: 'bundles/sonatauser/default_avatar.png' # Default avatar displayed if the user doesn't have one
admin: # Admin Classes admin: # Admin Classes
user: user:
class: App\Application\Sonata\UserBundle\Admin\UserAdmin class: App\Application\Sonata\UserBundle\Admin\UserAdmin
......
...@@ -5,6 +5,9 @@ sonata_admin: ...@@ -5,6 +5,9 @@ sonata_admin:
role_super_admin: ROLE_SUPER_ADMIN role_super_admin: ROLE_SUPER_ADMIN
title: 'MLC Admin' title: 'MLC Admin'
title_logo: /images/logo.png title_logo: /images/logo.png
# Pour modifier l'image par défaut sur la vue "Mosaique" de l'administration
# options:
# mosaic_background: '/path/to/image.png' # or use base64
templates: templates:
layout: '@SonataAdmin/standard_layout.html.twig' layout: '@SonataAdmin/standard_layout.html.twig'
#outer_list_rows_mosaic: '@SonataAdmin/list_outer_rows_mosaic.html.twig' #outer_list_rows_mosaic: '@SonataAdmin/list_outer_rows_mosaic.html.twig'
...@@ -172,7 +175,7 @@ sonata_admin: ...@@ -172,7 +175,7 @@ sonata_admin:
- sonata.media.admin.gallery - sonata.media.admin.gallery
sonata.admin.group.adherent: sonata.admin.group.adherent:
keep_open: false keep_open: false
label: Adhérents label: "Adhérents"
label_catalogue: SonataAdminBundle label_catalogue: SonataAdminBundle
icon: '<i class="fa fa-address-card"></i>' icon: '<i class="fa fa-address-card"></i>'
items: items:
...@@ -183,7 +186,7 @@ sonata_admin: ...@@ -183,7 +186,7 @@ sonata_admin:
- admin.adherent.cotisations - admin.adherent.cotisations
sonata.admin.group.prestataire: sonata.admin.group.prestataire:
keep_open: false keep_open: false
label: Prestataires label: "Prestataires"
label_catalogue: SonataAdminBundle label_catalogue: SonataAdminBundle
icon: '<i class="fa fa-user-tie"></i>' icon: '<i class="fa fa-user-tie"></i>'
items: items:
...@@ -195,7 +198,7 @@ sonata_admin: ...@@ -195,7 +198,7 @@ sonata_admin:
- admin.groupepresta.gerer - admin.groupepresta.gerer
sonata.admin.group.groupe: sonata.admin.group.groupe:
on_top: true on_top: true
label: Groupes locaux label: "Groupes locaux"
label_catalogue: SonataAdminBundle label_catalogue: SonataAdminBundle
icon: '<i class="fa fa-chess-rook"></i>' icon: '<i class="fa fa-chess-rook"></i>'
items: items:
...@@ -218,7 +221,7 @@ sonata_admin: ...@@ -218,7 +221,7 @@ sonata_admin:
sonata.admin.group.news: sonata.admin.group.news:
keep_open: false keep_open: false
on_top: true on_top: true
label: "News" label: "Actualités"
label_catalogue: SonataAdminBundle label_catalogue: SonataAdminBundle
icon: '<i class="fa fa-newspaper"></i>' icon: '<i class="fa fa-newspaper"></i>'
items: items:
...@@ -274,6 +277,14 @@ sonata_admin: ...@@ -274,6 +277,14 @@ sonata_admin:
- admin.transfert.gerer - admin.transfert.gerer
- admin.transaction.gerer - admin.transaction.gerer
- admin.reconversion.gerer - admin.reconversion.gerer
sonata.admin.group.menu_builder:
keep_open: false
on_top: true
label: config.label_menu
label_catalogue: ProdigiousSonataMenuBundle
icon: '<i class="fa fa-magic"></i>'
items:
- prodigious_sonata_menu.admin.menu
sonata.admin.import: sonata.admin.import:
keep_open: false keep_open: false
on_top: true on_top: true
...@@ -282,14 +293,14 @@ sonata_admin: ...@@ -282,14 +293,14 @@ sonata_admin:
icon: '<i class="fa fa-upload"></i>' icon: '<i class="fa fa-upload"></i>'
items: items:
- admin.import - admin.import
sonata.admin.group.menu_builder: sonata.admin.group.globalparameter:
keep_open: false keep_open: false
on_top: true on_top: true
label: config.label_menu label: "Configuration"
label_catalogue: ProdigiousSonataMenuBundle label_catalogue: SonataAdminBundle
icon: '<i class="fa fa-magic"></i>' icon: '<i class="fa fa-cogs"></i>'
items: items:
- prodigious_sonata_menu.admin.menu - admin.globalparameter.gerer
# Gérer l'affichage du menu de l'admin en fonction des roles # Gérer l'affichage du menu de l'admin en fonction des roles
# groups: # groups:
......
...@@ -10,16 +10,7 @@ parameters: ...@@ -10,16 +10,7 @@ parameters:
sonata.media.admin.media.class: 'App\Admin\MediaAdmin' sonata.media.admin.media.class: 'App\Admin\MediaAdmin'
sonata.media.admin.gallery.class: 'App\Admin\GalleryAdmin' sonata.media.admin.gallery.class: 'App\Admin\GalleryAdmin'
# PARAMETRES DE L'APPLICATION DE GESTION DE MONNAIE LOCALE COMPLEMENTAIRE # PARAMETRES DES IMPORTS POSSIBLE POUR L'APPLICATION DE GESTION DE MONNAIE LOCALE COMPLEMENTAIRE
app.mlc_title: 'Outil de gestion de monnaie locale complémentaire' # Nom complet (< 100 caractères)
app.mlc_name: 'Monnaie locale complémentaire' # Nom complet (< 100 caractères)
app.mlc_name_small: 'MLC' # Nom court (< 25 caractères)
app.mlc_notif_email: 'contact@mlc.com' # Email d'où sont envoyés les notifications
app.cotisation_montant: 10
app.map_center: '[45.7,3.2]'
app.map_zoom: 9
app.map_token: 'pk.eyJ1IjoianVqb3RlIiwiYSI6ImNqc3V3aGl6cTAwdDk0Y3Ftbzg0d2YwajkifQ.VWy1XWkuU9zfHAS7SkgbPA'
app.favicon_url: '/images/favicon.png'
app.import.separator: ';' app.import.separator: ';'
app.import.header: app.import.header:
groupe: groupe:
...@@ -93,7 +84,17 @@ services: ...@@ -93,7 +84,17 @@ services:
app.twig.main.extension: app.twig.main.extension:
class: App\Twig\AppExtension class: App\Twig\AppExtension
autowire: false autowire: false
arguments: ["@service_container", "@knp_paginator"] arguments: ["@service_container", "@doctrine.orm.entity_manager", "@knp_paginator", "@session", "@app.rolecheck"]
app.twig.mlc.globals.extension:
class: App\Twig\MlcGlobalsExtension
autowire: false
arguments: ["@doctrine.orm.entity_manager"]
app.listener.unitofwork:
class: App\Listener\UnitOfWorkListener
tags:
- { name: doctrine.event_subscriber, connection: default }
app.twig.form.extension: app.twig.form.extension:
class: App\Twig\FormExtension class: App\Twig\FormExtension
...@@ -205,6 +206,7 @@ services: ...@@ -205,6 +206,7 @@ services:
- [ setUserManager, ['@fos_user.user_manager']] - [ setUserManager, ['@fos_user.user_manager']]
- [ addChild, ['@sonata.user.admin.user', 'user']] - [ addChild, ['@sonata.user.admin.user', 'user']]
- [ setSecurity, ['@security.helper']] - [ setSecurity, ['@security.helper']]
- [ setPool, ['@sonata.media.pool']]
admin.prestataire.cotisations: admin.prestataire.cotisations:
class: App\Admin\CotisationPrestataireAdmin class: App\Admin\CotisationPrestataireAdmin
...@@ -257,7 +259,17 @@ services: ...@@ -257,7 +259,17 @@ services:
- name: sonata.admin - name: sonata.admin
manager_type: orm manager_type: orm
group: "Contenu" group: "Contenu"
label: "News" label: "Actualités"
public: true
admin.globalparameter.gerer:
class: App\Admin\GlobalParameterAdmin
arguments: [~, App\Entity\GlobalParameter, ~]
tags:
- name: sonata.admin
manager_type: orm
group: "Contenu"
label: "Configuration"
public: true public: true
admin.document.gerer: admin.document.gerer:
...@@ -316,6 +328,9 @@ services: ...@@ -316,6 +328,9 @@ services:
- [ setSubClasses, [{transaction: 'App\Entity\Transaction', transfert: 'App\Entity\Transfert', cotisation: 'App\Entity\Cotisation'}]] - [ setSubClasses, [{transaction: 'App\Entity\Transaction', transfert: 'App\Entity\Transfert', cotisation: 'App\Entity\Cotisation'}]]
- [ setSecurity, ['@security.helper']] - [ setSecurity, ['@security.helper']]
app.rolecheck:
class: App\Tools\RoleCheck
admin.transfert.gerer: admin.transfert.gerer:
class: App\Admin\TransfertAdmin class: App\Admin\TransfertAdmin
arguments: [~, App\Entity\Transfert, ~] arguments: [~, App\Entity\Transfert, ~]
...@@ -323,11 +338,13 @@ services: ...@@ -323,11 +338,13 @@ services:
- name: sonata.admin - name: sonata.admin
manager_type: orm manager_type: orm
group: "Flux" group: "Flux"
label: "Transfert" label: "Transferts"
pager_type: "simple" pager_type: "simple"
public: true public: true
calls: calls:
- [ setSecurity, ['@security.helper']] - [ setSecurity, ['@security.helper']]
- [ setSession, ['@session']]
- [ setRoleCheck, ['@app.rolecheck']]
admin.transaction.gerer: admin.transaction.gerer:
class: App\Admin\TransactionAdmin class: App\Admin\TransactionAdmin
...@@ -336,7 +353,7 @@ services: ...@@ -336,7 +353,7 @@ services:
- name: sonata.admin - name: sonata.admin
manager_type: orm manager_type: orm
group: "Flux" group: "Flux"
label: "Transaction" label: "Transactions"
pager_type: "simple" pager_type: "simple"
public: true public: true
calls: calls:
...@@ -349,7 +366,7 @@ services: ...@@ -349,7 +366,7 @@ services:
- name: sonata.admin - name: sonata.admin
manager_type: orm manager_type: orm
group: "Flux" group: "Flux"
label: "Reconversion" label: "Reconversions"
pager_type: "simple" pager_type: "simple"
public: true public: true
calls: calls:
...@@ -400,8 +417,8 @@ services: ...@@ -400,8 +417,8 @@ services:
# label: "Flux" # label: "Flux"
# public: true # public: true
# app.flash_messenger: app.flash_messenger:
# class: App\Listener\Flash class: App\Listener\Flash
# arguments: ["@session"] arguments: ["@session"]
# tags: tags:
# - { name: kernel.event_listener, event: kernel.response } - { name: kernel.event_listener, event: kernel.response }
\ No newline at end of file \ No newline at end of file
...@@ -4,7 +4,7 @@ App\Entity\TypePrestataire: ...@@ -4,7 +4,7 @@ App\Entity\TypePrestataire:
name: 'Prestataire' name: 'Prestataire'
typepresta2: typepresta2:
name: 'Partenaire' name: 'Partenaire'
App\Entity\Usergroup: App\Entity\Usergroup:
usergroup_adherent: usergroup_adherent:
__construct: ['Adherent', ['ROLE_ADHERENT']] __construct: ['Adherent', ['ROLE_ADHERENT']]
...@@ -18,6 +18,7 @@ App\Entity\Usergroup: ...@@ -18,6 +18,7 @@ App\Entity\Usergroup:
'ROLE_ADMIN_ADHERENT_GERER_ALL', 'ROLE_ADMIN_ADHERENT_GERER_ALL',
'ROLE_ADMIN_ALL_COTISATIONS_ALL', 'ROLE_ADMIN_ALL_COTISATIONS_ALL',
'ROLE_ADMIN_GROUPE_GERER_ALL', 'ROLE_ADMIN_GROUPE_GERER_ALL',
'ROLE_ADMIN_GLOBALPARAMETER_GERER_ALL',
'ROLE_ADMIN_TRANSFERT_GERER_ALL']] 'ROLE_ADMIN_TRANSFERT_GERER_ALL']]
usergroup_redacteur: usergroup_redacteur:
__construct: ['Rédacteur', [ __construct: ['Rédacteur', [
...@@ -27,7 +28,6 @@ App\Entity\Usergroup: ...@@ -27,7 +28,6 @@ App\Entity\Usergroup:
'ROLE_SONATA_MEDIA_ADMIN_GALLERY_HAS_MEDIA_ALL', 'ROLE_SONATA_MEDIA_ADMIN_GALLERY_HAS_MEDIA_ALL',
'ROLE_PRODIGIOUS_SONATA_MENU_ADMIN_MENU_ALL', 'ROLE_PRODIGIOUS_SONATA_MENU_ADMIN_MENU_ALL',
'ROLE_PRODIGIOUS_SONATA_MENU_ADMIN_MENU_ITEM_ALL', 'ROLE_PRODIGIOUS_SONATA_MENU_ADMIN_MENU_ITEM_ALL',
'ROLE_ADMIN_GROUPEPRESTA_GERER_ALL',
'ROLE_ADMIN_NEWS_GERER_ALL', 'ROLE_ADMIN_NEWS_GERER_ALL',
'ROLE_ADMIN_DOCUMENT_GERER_ALL', 'ROLE_ADMIN_DOCUMENT_GERER_ALL',
'ROLE_ADMIN_RUBRIQUE_GERER_ALL', 'ROLE_ADMIN_RUBRIQUE_GERER_ALL',
...@@ -42,10 +42,6 @@ App\Entity\Usergroup: ...@@ -42,10 +42,6 @@ App\Entity\Usergroup:
usergroup_tresorier: usergroup_tresorier:
__construct: ['Trésorier', [ __construct: ['Trésorier', [
'ROLE_TRESORIER', 'ROLE_TRESORIER',
'ROLE_ADMIN_ADHERENT_GERER_ALL',
'ROLE_ADMIN_ADHERENT_COTISATIONS_ALL',
'ROLE_ADMIN_PRESTATAIRE_GERER_ALL',
'ROLE_ADMIN_PRESTATAIRE_COTISATIONS_ALL',
'ROLE_ADMIN_ALL_COTISATIONS_ALL', 'ROLE_ADMIN_ALL_COTISATIONS_ALL',
'ROLE_ADMIN_RECONVERSION_GERER_ALL', 'ROLE_ADMIN_RECONVERSION_GERER_ALL',
'ROLE_ADMIN_TRANSFERT_GERER_ALL']] 'ROLE_ADMIN_TRANSFERT_GERER_ALL']]
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{ {
"devDependencies": { "devDependencies": {
"@symfony/webpack-encore": "^0.21.0", "@symfony/webpack-encore": "^0.28.2",
"node-sass": "^4.10.0", "node-sass": "^4.13.1",
"sass-loader": "^7.1.0", "sass-loader": "^7.1.0",
"webpack-notifier": "^1.6.0" "webpack-notifier": "^1.6.0"
}, },
...@@ -14,9 +14,10 @@ ...@@ -14,9 +14,10 @@
"build": "encore production --progress" "build": "encore production --progress"
}, },
"dependencies": { "dependencies": {
"bootstrap": "^4.2.1", "bootstrap": "^4.4.1",
"bootswatch": "^4.3.1", "bootswatch": "^4.3.1",
"ckeditor": "^4.0.0",
"jquery": "^3.3.1", "jquery": "^3.3.1",
"popper.js": "^1.14.7" "popper.js": "@^1.16.0"
} }
} }
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{"entrypoints":{"app":{"js":["build/runtime.d41d8cd9.js","build/app.cb3451b9.js"],"css":["build/app.8fae770e.css"]},"admin":{"js":["build/runtime.d41d8cd9.js","build/admin.b715fcc4.js"],"css":["build/admin.df5d17d8.css"]}}} {
\ No newline at end of file "entrypoints": {
"app": {
"js": [
"/build/runtime.6cf710cd.js",
"/build/app.43b7b3f6.js"
],
"css": [
"/build/app.0d65a23b.css"
]
},
"admin": {
"js": [
"/build/runtime.6cf710cd.js",
"/build/admin.62757d63.js"
],
"css": [
"/build/admin.48a381da.css"
]
}
}
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
!function(e){function r(r){for(var n,i,l=r[0],f=r[1],a=r[2],c=0,s=[];c<l.length;c++)i=l[c],o[i]&&s.push(o[i][0]),o[i]=0;for(n in f)Object.prototype.hasOwnProperty.call(f,n)&&(e[n]=f[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var f=t[l];0!==o[f]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={0:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="/build/";var l=window.webpackJsonp=window.webpackJsonp||[],f=l.push.bind(l);l.push=r,l=l.slice();for(var a=0;a<l.length;a++)r(l[a]);var p=f;t()}([]);
\ No newline at end of file
...@@ -9,6 +9,8 @@ use App\Entity\Groupe; ...@@ -9,6 +9,8 @@ use App\Entity\Groupe;
use App\Entity\User; use App\Entity\User;
use App\Entity\Usergroup; use App\Entity\Usergroup;
use App\Enum\MoyenEnum; use App\Enum\MoyenEnum;
use App\Form\Type\UserFormType;
use App\Form\Type\GeolocFormType;
use FOS\UserBundle\Event\FilterUserResponseEvent; use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\FOSUserEvents; use FOS\UserBundle\FOSUserEvents;
use Knp\Menu\ItemInterface as MenuItemInterface; use Knp\Menu\ItemInterface as MenuItemInterface;
...@@ -18,6 +20,7 @@ use Sonata\AdminBundle\Datagrid\DatagridMapper; ...@@ -18,6 +20,7 @@ use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper; use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollection; use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
use Sonata\UserBundle\Model\UserManagerInterface; use Sonata\UserBundle\Model\UserManagerInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
...@@ -34,7 +37,7 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface; ...@@ -34,7 +37,7 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface;
/** /**
* Administration des adhérents * Administration des adhérents
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class AdherentAdmin extends AbstractAdmin class AdherentAdmin extends AbstractAdmin
...@@ -74,13 +77,14 @@ class AdherentAdmin extends AbstractAdmin ...@@ -74,13 +77,14 @@ class AdherentAdmin extends AbstractAdmin
->addSelect('u') ->addSelect('u')
; ;
if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) { if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) {
if (empty($user->getGroupesgere())) { if (empty($user->getGroupesgeres())) {
$query->andWhere('false'); $query->andWhere('false');
} else { } else {
$groupe = $user->getGroupesgere(); $groupe = $user->getGroupesgeres();
$query $query
->andWhere($query->getRootAliases()[0] . '.groupe = :group') ->andWhere($query->expr()->in($query->getRootAliases()[0].'.groupe', ':group'))
->setParameter('group', $groupe) // ->andWhere($query->getRootAliases()[0] . '.groupe = :group')
->setParameter('group', $groupes)
; ;
} }
} }
...@@ -143,39 +147,52 @@ class AdherentAdmin extends AbstractAdmin ...@@ -143,39 +147,52 @@ class AdherentAdmin extends AbstractAdmin
$formMapper $formMapper
->tab('General') ->tab('General')
->with('Identité', ['class' => 'col-md-7']) ->with('Identité', ['class' => 'col-md-7'])
->add('user.firstname', TextType::class, array( ->add('user', UserFormType::class, array(
'label' => 'Prénom :', 'label' => false
'required' => true
)) ))
->add('user.lastname', TextType::class, array( ->end()
'label' => 'Nom :', ->with('Addresse', ['class' => 'col-md-5'])
'required' => true ->add('geoloc', GeolocFormType::class, array(
)); 'label' => false,
if (!$this->isCurrentRoute('create')) {
$formMapper
->add('user.username', TextType::class, array(
'label' => 'Username :',
'required' => true,
'disabled' => true
));
}
$formMapper
->add('user.phone', TextType::class, array(
'label' => 'Téléphone :',
'required' => false 'required' => false
)) ))
->add('user.email', TextType::class, array( ->end()
'label' => 'Email :', ->end()
'required' => true ;
)) // ->with('Identité', ['class' => 'col-md-7'])
->add('groupe', ChoiceType::class, array( // ->add('user.firstname', TextType::class, array(
'required' => true, // 'label' => 'Prénom :',
'label' => 'Groupe local :', // 'required' => true
'choices' => $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Groupe::class)->findAll(), // ))
'choice_label' => 'name', // ->add('user.lastname', TextType::class, array(
'placeholder' => 'Choisir un groupe', // 'label' => 'Nom :',
)) // 'required' => true
->end(); // ));
// if (!$this->isCurrentRoute('create')) {
// $formMapper
// ->add('user.username', TextType::class, array(
// 'label' => 'Username :',
// 'required' => true,
// 'disabled' => true
// ));
// }
// $formMapper
// ->add('user.phone', TextType::class, array(
// 'label' => 'Téléphone :',
// 'required' => false
// ))
// ->add('user.email', TextType::class, array(
// 'label' => 'Email :',
// 'required' => true
// ))
// ->add('groupe', ChoiceType::class, array(
// 'required' => true,
// 'label' => 'Groupe local :',
// 'choices' => $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Groupe::class)->findAll(),
// 'choice_label' => 'name',
// 'placeholder' => 'Choisir un groupe',
// ))
// ->end();
// ->with('Cotisation', ['class' => 'col-md-5']) // ->with('Cotisation', ['class' => 'col-md-5'])
// //@TODO : géré une ou plusieurs cotisations // //@TODO : géré une ou plusieurs cotisations
// ->add('user.cotisations.first.cotisationInfos.annee', TextType::class, array('label' => 'Année', 'data' => $now->format('Y'))) // ->add('user.cotisations.first.cotisationInfos.annee', TextType::class, array('label' => 'Année', 'data' => $now->format('Y')))
...@@ -212,23 +229,7 @@ class AdherentAdmin extends AbstractAdmin ...@@ -212,23 +229,7 @@ class AdherentAdmin extends AbstractAdmin
// )) // ))
// ->end(); // ->end();
// } // }
$formMapper
->with('Addresse', ['class' => 'col-md-7'])
->add('geoloc.adresse', TextType::class, array(
'label' => 'Addresse :',
'required' => true
))
->add('geoloc.cpostal', TextType::class, array(
'label' => 'Code postal :',
'required' => true
))
->add('geoloc.ville', TextType::class, array(
'label' => 'Ville :',
'required' => true
))
->end()
->end()
;
$em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getManager(); $em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getManager();
$formMapper->getFormBuilder()->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($em) { $formMapper->getFormBuilder()->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($em) {
$adherent = $event->getData(); $adherent = $event->getData();
...@@ -281,11 +282,40 @@ class AdherentAdmin extends AbstractAdmin ...@@ -281,11 +282,40 @@ class AdherentAdmin extends AbstractAdmin
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{ {
$datagridMapper $datagridMapper
->add('user.username', null, array('label' => 'Login')) ->add('full_text', CallbackFilter::class, [
->add('user.email', null, array('label' => 'Email')) 'callback' => [$this, 'getFullTextFilter'],
'field_type' => TextType::class,
'label' => "Recherche par nom",
'show_filter' => true,
'advanced_filter' => false
])
->add('groupe', null, [
'label' => "Groupe",
'show_filter' => true,
'advanced_filter' => false
])
->add('user.email', null, [
'label' => "Email"
])
; ;
} }
public function getFullTextFilter($queryBuilder, $alias, $field, $value)
{
if (!$value['value']) {
return;
}
// Use `andWhere` instead of `where` to prevent overriding existing `where` conditions
$queryBuilder->andWhere($queryBuilder->expr()->orX(
$queryBuilder->expr()->like('u.username', $queryBuilder->expr()->literal('%' . $value['value'] . '%')),
$queryBuilder->expr()->like('u.firstname', $queryBuilder->expr()->literal('%' . $value['value'] . '%')),
$queryBuilder->expr()->like('u.lastname', $queryBuilder->expr()->literal('%' . $value['value'] . '%'))
));
return true;
}
/** /**
* @param EventDispatcherInterface $userManager * @param EventDispatcherInterface $userManager
*/ */
...@@ -349,4 +379,19 @@ class AdherentAdmin extends AbstractAdmin ...@@ -349,4 +379,19 @@ class AdherentAdmin extends AbstractAdmin
return $actions; return $actions;
} }
public function getExportFields()
{
return [
'Id' => 'id',
'Nom' => 'user.lastname',
'Prénom' => 'user.firstname',
'username' => 'user.username',
'Email' => 'user.email',
'Groupe' => 'groupe.name',
'Téléphone' => 'user.phone',
'Mobile' => 'user.mobile',
'E-compte' => 'ecompte'
];
}
} }
...@@ -3,20 +3,25 @@ ...@@ -3,20 +3,25 @@
namespace App\Admin; namespace App\Admin;
use App\Entity\Geoloc; use App\Entity\Geoloc;
use App\Entity\Groupe;
use App\Form\Type\GeolocFormType; use App\Form\Type\GeolocFormType;
use Doctrine\ORM\EntityRepository;
use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper; use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollection; use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Show\ShowMapper; use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
use Symfony\Component\Form\Extension\Core\Type\TextType;
/** /**
* Administration des comptoirs * Administration des comptoirs
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class ComptoirAdmin extends AbstractAdmin class ComptoirAdmin extends AbstractAdmin
...@@ -40,13 +45,14 @@ class ComptoirAdmin extends AbstractAdmin ...@@ -40,13 +45,14 @@ class ComptoirAdmin extends AbstractAdmin
$query = parent::createQuery($context); $query = parent::createQuery($context);
$user = $this->security->getUser(); $user = $this->security->getUser();
if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) { if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) {
if (empty($user->getGroupesgere())) { if (empty($user->getGroupesgeres())) {
$query->andWhere('false'); $query->andWhere('false');
} else { } else {
$groupe = $user->getGroupesgere(); $groupes = $user->getGroupesgeres();
$query $query
->andWhere($query->getRootAliases()[0] . '.groupe = :group') ->andWhere($query->expr()->in($query->getRootAliases()[0].'.groupe', ':group'))
->setParameter('group', $groupe) // ->andWhere($query->getRootAliases()[0] . '.groupe = :group')
->setParameter('group', $groupes)
; ;
} }
} }
...@@ -59,16 +65,34 @@ class ComptoirAdmin extends AbstractAdmin ...@@ -59,16 +65,34 @@ class ComptoirAdmin extends AbstractAdmin
protected function configureFormFields(FormMapper $formMapper) protected function configureFormFields(FormMapper $formMapper)
{ {
$comptoir = $this->getSubject(); $comptoir = $this->getSubject();
$user = $this->security->getUser();
if ($this->isCurrentRoute('create')) { if ($this->isCurrentRoute('create')) {
$geoloc = new Geoloc(); $geoloc = new Geoloc();
$comptoir->setGeoloc($geoloc); $comptoir->setGeoloc($geoloc);
} }
$formMapper $formMapper
->with('Comptoir', ['class' => 'col-md-8']) ->with('Comptoir', ['class' => 'col-md-8']);
->add('groupe', null, array( if (($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) && !empty($user->getGroupesgeres())) {
$em = $this->modelManager->getEntityManager(Groupe::class);
$formMapper->add('groupe', null, array(
'label' => 'Groupe local', 'label' => 'Groupe local',
'required' => true, 'required' => true,
)) 'query_builder' => function (EntityRepository $repo) use ($user) {
return $repo->createQueryBuilder('g')
->select('g')
->join('g.gestionnaires', 'c')
->where('c.id = :user')
->setParameter('user', $user->getId());
},
));
} else {
$formMapper->add('groupe', null, array(
'label' => 'Groupe local',
'required' => true,
));
}
$formMapper
->add('name', null, array( ->add('name', null, array(
'label' => 'Nom', 'label' => 'Nom',
'required' => true, 'required' => true,
...@@ -97,11 +121,40 @@ class ComptoirAdmin extends AbstractAdmin ...@@ -97,11 +121,40 @@ class ComptoirAdmin extends AbstractAdmin
*/ */
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{ {
if ($this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_SUPER_ADMIN') || $this->isGranted('ROLE_ADMIN_SIEGE')) {
$datagridMapper
->add('groupe', null, [
'label' => "Groupe",
'show_filter' => true,
'advanced_filter' => false
])
;
}
$datagridMapper $datagridMapper
->add('enabled') ->add('full_text', CallbackFilter::class, [
'callback' => [$this, 'getFullTextFilter'],
'field_type' => TextType::class,
'label' => "Recherche par nom",
'show_filter' => true,
'advanced_filter' => false
])
; ;
} }
public function getFullTextFilter($queryBuilder, $alias, $field, $value)
{
if (!$value['value']) {
return;
}
// Use `andWhere` instead of `where` to prevent overriding existing `where` conditions
$queryBuilder->andWhere(
$queryBuilder->expr()->like($alias.'.name', $queryBuilder->expr()->literal('%' . $value['value'] . '%'))
);
return true;
}
protected function configureRoutes(RouteCollection $collection) protected function configureRoutes(RouteCollection $collection)
{ {
$collection->remove('delete'); $collection->remove('delete');
...@@ -117,8 +170,8 @@ class ComptoirAdmin extends AbstractAdmin ...@@ -117,8 +170,8 @@ class ComptoirAdmin extends AbstractAdmin
->addIdentifier('name') ->addIdentifier('name')
->addIdentifier('email') ->addIdentifier('email')
->addIdentifier('compte', null, array('label' => 'Solde')) ->addIdentifier('compte', null, array('label' => 'Solde'))
->addIdentifier('geoloc.adresse') ->addIdentifier('geoloc.adresse', null, array('label' => 'Adresse'))
->addIdentifier('tel') ->addIdentifier('tel', null, array('label' => 'Téléphone'))
->addIdentifier('enabled', null, array('label' => 'Activé', 'datatype' => 'App.Comptoir', 'template' => '@SonataAdmin/Boolean/editable_boolean.html.twig')) ->addIdentifier('enabled', null, array('label' => 'Activé', 'datatype' => 'App.Comptoir', 'template' => '@SonataAdmin/Boolean/editable_boolean.html.twig'))
; ;
} }
......
...@@ -15,7 +15,7 @@ use Symfony\Component\Form\Extension\Core\Type\HiddenType; ...@@ -15,7 +15,7 @@ use Symfony\Component\Form\Extension\Core\Type\HiddenType;
/** /**
* Administration des cotisations des adhérents * Administration des cotisations des adhérents
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class CotisationAdherentAdmin extends CotisationAdmin class CotisationAdherentAdmin extends CotisationAdmin
...@@ -40,13 +40,14 @@ class CotisationAdherentAdmin extends CotisationAdmin ...@@ -40,13 +40,14 @@ class CotisationAdherentAdmin extends CotisationAdmin
// ->andWhere('u.adherent IS NOT NULL') // ->andWhere('u.adherent IS NOT NULL')
; ;
if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) { if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) {
if (empty($user->getGroupesgere())) { if (empty($user->getGroupesgeres())) {
$query->andWhere('false'); $query->andWhere('false');
} else { } else {
$groupe = $user->getGroupesgere(); $groupe = $this->session->get('_groupegere');
$em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getEntityManager(); $em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getEntityManager();
$adhTable = $em->getMetadataFactory()->getMetadataFor(Adherent::class)->getTableName();
$connection = $em->getConnection(); $connection = $em->getConnection();
$statement = $connection->prepare('SELECT f.id FROM flux f INNER JOIN adherent a ON (a.id = f.adherent_id OR a.id = f.adherent_dest_id) WHERE a.groupe_id = '.$groupe->getId()); $statement = $connection->prepare('SELECT f.id FROM flux f INNER JOIN '.$adhTable.' a ON (a.id = f.adherent_id OR a.id = f.adherent_dest_id) WHERE a.groupe_id = '.$groupe->getId());
$statement->execute(); $statement->execute();
$ids = $statement->fetchAll(); $ids = $statement->fetchAll();
$query $query
...@@ -98,9 +99,6 @@ class CotisationAdherentAdmin extends CotisationAdmin ...@@ -98,9 +99,6 @@ class CotisationAdherentAdmin extends CotisationAdmin
->add('reference', HiddenType::class, array( ->add('reference', HiddenType::class, array(
'data' => 'cotisation_adherent' 'data' => 'cotisation_adherent'
)) ))
->add('type', HiddenType::class, array(
'data' => 'cotisation_adherent'
))
->add('expediteur', EntityType::class, $expediteurInfos) ->add('expediteur', EntityType::class, $expediteurInfos)
->add('operateur', HiddenType::class, array( ->add('operateur', HiddenType::class, array(
'data' => $this->security->getUser()->getId(), 'data' => $this->security->getUser()->getId(),
......
...@@ -3,9 +3,11 @@ ...@@ -3,9 +3,11 @@
namespace App\Admin; namespace App\Admin;
use App\Entity\Adherent; use App\Entity\Adherent;
use App\Entity\GlobalParameter;
use App\Entity\Prestataire; use App\Entity\Prestataire;
use App\Entity\Siege; use App\Entity\Siege;
use App\Enum\MoyenEnum; use App\Enum\MoyenEnum;
use Doctrine\ORM\EntityManagerInterface;
use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Datagrid\ListMapper;
...@@ -25,13 +27,14 @@ use Symfony\Component\Security\Core\Security; ...@@ -25,13 +27,14 @@ use Symfony\Component\Security\Core\Security;
/** /**
* Administration des cotisations * Administration des cotisations
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class CotisationAdmin extends AbstractAdmin class CotisationAdmin extends AbstractAdmin
{ {
protected $baseRouteName = 'cotisation'; protected $baseRouteName = 'cotisation';
protected $baseRoutePattern = 'cotisation'; protected $baseRoutePattern = 'cotisation';
protected $em;
protected $security; protected $security;
protected $container; protected $container;
...@@ -41,8 +44,9 @@ class CotisationAdmin extends AbstractAdmin ...@@ -41,8 +44,9 @@ class CotisationAdmin extends AbstractAdmin
'_sort_by' => 'createdAt', '_sort_by' => 'createdAt',
]; ];
public function setSecurity(Security $security, ContainerInterface $container) public function setSecurity(Security $security, ContainerInterface $container, EntityManagerInterface $em)
{ {
$this->em = $em;
$this->security = $security; $this->security = $security;
$this->container = $container; $this->container = $container;
} }
...@@ -82,7 +86,7 @@ class CotisationAdmin extends AbstractAdmin ...@@ -82,7 +86,7 @@ class CotisationAdmin extends AbstractAdmin
)) ))
->add('montant', MoneyType::class, array( ->add('montant', MoneyType::class, array(
'label' => 'Montant', 'label' => 'Montant',
'data' => ($cotisation->getMontant() != null)?$cotisation->getMontant():floatval($this->container->getParameter('app.cotisation_montant')) 'data' => ($cotisation->getMontant() != null)?$cotisation->getMontant():floatval($this->em->getRepository(GlobalParameter::class)->val(GlobalParameter::COTISATION_MONTANT))
)) ))
->add('moyen', ChoiceType::class, array( ->add('moyen', ChoiceType::class, array(
'required' => true, 'required' => true,
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace App\Admin; namespace App\Admin;
use App\Entity\Flux;
use App\Entity\Prestataire; use App\Entity\Prestataire;
use App\Entity\User; use App\Entity\User;
use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper;
...@@ -16,7 +17,7 @@ use Symfony\Component\Form\Extension\Core\Type\HiddenType; ...@@ -16,7 +17,7 @@ use Symfony\Component\Form\Extension\Core\Type\HiddenType;
/** /**
* Administration des cotisations des prestataires * Administration des cotisations des prestataires
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class CotisationPrestataireAdmin extends CotisationAdmin class CotisationPrestataireAdmin extends CotisationAdmin
...@@ -41,13 +42,15 @@ class CotisationPrestataireAdmin extends CotisationAdmin ...@@ -41,13 +42,15 @@ class CotisationPrestataireAdmin extends CotisationAdmin
// ->andWhere('u.prestataire IS NOT NULL') // ->andWhere('u.prestataire IS NOT NULL')
; ;
if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) { if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) {
if (empty($user->getGroupesgere())) { if (empty($user->getGroupesgeres())) {
$query->andWhere('false'); $query->andWhere('false');
} else { } else {
$groupe = $user->getGroupesgere(); $groupe = $this->session->get('_groupegere');
$em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getEntityManager(); $em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getEntityManager();
$fluxTable = $em->getMetadataFactory()->getMetadataFor(Flux::class)->getTableName();
$prestaTable = $em->getMetadataFactory()->getMetadataFor(Prestataire::class)->getTableName();
$connection = $em->getConnection(); $connection = $em->getConnection();
$statement = $connection->prepare('SELECT f.id FROM flux f INNER JOIN prestataire a ON (a.id = f.prestataire_id OR a.id = f.prestataire_dest_id) WHERE a.groupe_id = '.$groupe->getId()); $statement = $connection->prepare('SELECT f.id FROM '.$fluxTable.' f INNER JOIN '.$prestaTable.' a ON (a.id = f.prestataire_id OR a.id = f.prestataire_dest_id) WHERE a.groupe_id = '.$groupe->getId());
$statement->execute(); $statement->execute();
$ids = $statement->fetchAll(); $ids = $statement->fetchAll();
$query $query
...@@ -100,9 +103,6 @@ class CotisationPrestataireAdmin extends CotisationAdmin ...@@ -100,9 +103,6 @@ class CotisationPrestataireAdmin extends CotisationAdmin
->add('reference', HiddenType::class, array( ->add('reference', HiddenType::class, array(
'data' => 'cotisation_prestataire' 'data' => 'cotisation_prestataire'
)) ))
->add('type', HiddenType::class, array(
'data' => 'cotisation_prestataire'
))
->add('expediteur', EntityType::class, $expediteurInfos) ->add('expediteur', EntityType::class, $expediteurInfos)
->add('operateur', HiddenType::class, array( ->add('operateur', HiddenType::class, array(
'data' => $this->security->getUser()->getId(), 'data' => $this->security->getUser()->getId(),
......
...@@ -16,7 +16,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType; ...@@ -16,7 +16,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType;
/** /**
* Administration des documents * Administration des documents
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class DocumentAdmin extends AbstractAdmin class DocumentAdmin extends AbstractAdmin
......
...@@ -16,7 +16,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType; ...@@ -16,7 +16,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType;
/** /**
* Administration des FAQ * Administration des FAQ
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class FaqAdmin extends AbstractAdmin class FaqAdmin extends AbstractAdmin
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Admin; namespace App\Admin;
use App\Entity\User; use App\Entity\User;
use App\Entity\Flux;
use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Datagrid\ListMapper;
...@@ -17,7 +18,7 @@ use Symfony\Component\Translation\TranslatorInterface; ...@@ -17,7 +18,7 @@ use Symfony\Component\Translation\TranslatorInterface;
/** /**
* Administration des Flux * Administration des Flux
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class FluxAdmin extends AbstractAdmin class FluxAdmin extends AbstractAdmin
...@@ -42,6 +43,18 @@ class FluxAdmin extends AbstractAdmin ...@@ -42,6 +43,18 @@ class FluxAdmin extends AbstractAdmin
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
public function createQuery($context = 'list')
{
$query = $this->getModelManager()->createQuery(Flux::class);
foreach ($this->extensions as $extension) {
$extension->configureQuery($this, $query, $context);
}
return $query;
}
/**
* {@inheritdoc}
*/
protected function configureRoutes(RouteCollection $collection) protected function configureRoutes(RouteCollection $collection)
{ {
$collection->clearExcept(array('list', 'export')); $collection->clearExcept(array('list', 'export'));
...@@ -124,13 +137,14 @@ class FluxAdmin extends AbstractAdmin ...@@ -124,13 +137,14 @@ class FluxAdmin extends AbstractAdmin
{ {
unset($this->listModes['mosaic']); unset($this->listModes['mosaic']);
$listMapper $listMapper
->addIdentifier('createdAt', null, array('label' => 'Date')) ->addIdentifier('createdAt', 'datetime', array('label' => 'Date'))
->addIdentifier('type', null, array('label' => 'Type')) ->addIdentifier('type', null, array('label' => 'Type'))
->addIdentifier('operateur', User::class, array('label' => 'Operateur')) ->addIdentifier('montant', null, array('label' => 'Montant'))
->addIdentifier('expediteur', null, array('label' => 'Expediteur')) ->addIdentifier('expediteur', null, array('label' => 'Expediteur'))
->addIdentifier('destinataire', null, array('label' => 'Destinataire')) ->addIdentifier('destinataire', null, array('label' => 'Destinataire'))
->addIdentifier('montant', null, array('label' => 'Montant')) ->add('operateur', null, array('label' => 'Operateur'))
->addIdentifier('reference', null, array('label' => 'Reference')) ->addIdentifier('reference', null, array('label' => 'Reference'))
->addIdentifier('verify', null, array('label' => 'Vérifié'))
; ;
} }
} }
...@@ -8,7 +8,7 @@ use Sonata\MediaBundle\Provider\MediaProviderInterface; ...@@ -8,7 +8,7 @@ use Sonata\MediaBundle\Provider\MediaProviderInterface;
/** /**
* Administration des galleries de medias (image, document...) * Administration des galleries de medias (image, document...)
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class GalleryAdmin extends BaseGalleryAdmin class GalleryAdmin extends BaseGalleryAdmin
......
<?php
namespace App\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollection;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
/**
* Administration des paramètres généraux de l'outil de MLC
*
* KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com>
*/
class GlobalParameterAdmin extends AbstractAdmin
{
protected $translator;
protected $datagridValues = [
'_sort_order' => 'DESC',
'_sort_by' => 'createdAt',
];
/**
* {@inheritdoc}
*/
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('name', TextType::class, array(
'label' => 'Nom :',
'attr' => array( 'class' => 'text-uppercase' )
))
->add('value', TextType::class, array(
'label' => 'Valeur :'
))
->add('mandatory', HiddenType::class, array(
'empty_data' => false,
'data' => false
))
;
}
/**
* {@inheritdoc}
*/
protected function configureListFields(ListMapper $listMapper)
{
unset($this->listModes['mosaic']);
$listMapper
->add('name', null, array('label' => 'Nom'))
->add('value', null, array('editable' => true, 'truncate' => array('length' => 80), 'label' => 'Value'))
->add('_action', null, [
'label' => 'Action(s)',
'actions' => [
'edit' => ['template' => '@SonataAdmin/CRUD/list__action_edit_gp.html.twig'],
'delete' => ['template' => '@SonataAdmin/CRUD/list__action_delete_gp.html.twig'],
]
])
;
}
public function getBatchActions()
{
$actions = parent::getBatchActions();
unset($actions['delete']);
unset($actions['edit']);
return $actions;
}
}
...@@ -11,6 +11,7 @@ use Sonata\AdminBundle\Datagrid\ListMapper; ...@@ -11,6 +11,7 @@ use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper; use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollection; use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Show\ShowMapper; use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
use Sonata\FormatterBundle\Form\Type\SimpleFormatterType; use Sonata\FormatterBundle\Form\Type\SimpleFormatterType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
...@@ -21,7 +22,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType; ...@@ -21,7 +22,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType;
/** /**
* Administration des groupes locaux * Administration des groupes locaux
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class GroupeAdmin extends AbstractAdmin class GroupeAdmin extends AbstractAdmin
...@@ -31,6 +32,12 @@ class GroupeAdmin extends AbstractAdmin ...@@ -31,6 +32,12 @@ class GroupeAdmin extends AbstractAdmin
'_sort_by' => 'name', '_sort_by' => 'name',
]; ];
public function configure()
{
parent::configure();
$this->classnameLabel = "Groupes locaux";
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
...@@ -89,16 +96,47 @@ class GroupeAdmin extends AbstractAdmin ...@@ -89,16 +96,47 @@ class GroupeAdmin extends AbstractAdmin
; ;
} }
public function postPersist($object)
{
$this->addFlash(
'sonata_flash_success',
$this->trans(
"Après avoir créer le groupe %name%, il est conseiller d'ajouter un gestionnaire de groupe",
['%name%' => $this->escapeHtml($this->admin->toString($object))]
)
);
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{ {
$datagridMapper $datagridMapper
->add('enabled') ->add('full_text', CallbackFilter::class, [
'callback' => [$this, 'getFullTextFilter'],
'field_type' => TextType::class,
'label' => "Recherche par nom",
'show_filter' => true,
'advanced_filter' => false
])
; ;
} }
public function getFullTextFilter($queryBuilder, $alias, $field, $value)
{
if (!$value['value']) {
return;
}
// Use `andWhere` instead of `where` to prevent overriding existing `where` conditions
$queryBuilder->andWhere(
$queryBuilder->expr()->like($alias.'.name', $queryBuilder->expr()->literal('%' . $value['value'] . '%'))
);
return true;
}
protected function configureRoutes(RouteCollection $collection) protected function configureRoutes(RouteCollection $collection)
{ {
$collection->remove('delete'); $collection->remove('delete');
......
...@@ -22,7 +22,7 @@ use Symfony\Component\Security\Core\Security; ...@@ -22,7 +22,7 @@ use Symfony\Component\Security\Core\Security;
/** /**
* Administration des groupe de prestataires (amap, marche) * Administration des groupe de prestataires (amap, marche)
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class GroupeprestataireAdmin extends AbstractAdmin class GroupeprestataireAdmin extends AbstractAdmin
...@@ -53,17 +53,32 @@ class GroupeprestataireAdmin extends AbstractAdmin ...@@ -53,17 +53,32 @@ class GroupeprestataireAdmin extends AbstractAdmin
$user = $this->security->getUser(); $user = $this->security->getUser();
$query = parent::createQuery($context); $query = parent::createQuery($context);
if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) { if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) {
if (empty($user->getGroupesgere())) { if (empty($user->getGroupesgeres())) {
$query->andWhere('false'); $query->andWhere('false');
} else { } else {
$query $query
->andWhere($query->getRootAliases()[0].'.groupe = :groupe') ->andWhere($query->expr()->in($query->getRootAliases()[0].'.groupe', ':groupe'))
->setParameter('groupe', $user->getGroupesgere()) // ->andWhere($query->getRootAliases()[0].'.groupe = :groupe')
->setParameter('groupe', $user->getGroupesgeres())
; ;
} }
} }
// dump($query->getQuery()); // @TODO : NE FONCTIONNE PAS : pour pouvoir classer par nombre de prestataires !
// exit(); // voir https://github.com/sonata-project/SonataDoctrineORMAdminBundle/issues/297
if ('list' === $context) {
$rootAlias = $query->getRootAliases()[0];
$parameters = $this->getFilterParameters();
if ('getPrestatairesCount' === $parameters['_sort_by']) {
$query->setDistinct(true);
// $query->select('o', 'DISTINCT o');
// $query
// ->leftJoin($rootAlias.'.prestataires', 'gpr')
// // ->leftJoin('groupes_prestataires.prestataires', 'pr')
// ->groupBy($rootAlias.'.id')
// ->orderBy('COUNT(gpr.id)', $parameters['_sort_order'])
// ;
}
}
return $query; return $query;
} }
...@@ -76,9 +91,7 @@ class GroupeprestataireAdmin extends AbstractAdmin ...@@ -76,9 +91,7 @@ class GroupeprestataireAdmin extends AbstractAdmin
$user = $this->security->getUser(); $user = $this->security->getUser();
$prestataires = $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Prestataire::class)->findBy(array('enabled' => true), array('raison'=> 'ASC')); $prestataires = $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Prestataire::class)->findBy(array('enabled' => true), array('raison'=> 'ASC'));
$groupepresta = $this->getSubject(); $groupepresta = $this->getSubject();
if ($this->isCurrentRoute('create') && $user->getGroupesgere() != null) {
$groupepresta->setGroupe($user->getGroupesgere());
}
$formMapper $formMapper
->with('Informations', ['class' => 'col-md-7']) ->with('Informations', ['class' => 'col-md-7'])
->add('type', ChoiceType::class, array( ->add('type', ChoiceType::class, array(
...@@ -93,8 +106,9 @@ class GroupeprestataireAdmin extends AbstractAdmin ...@@ -93,8 +106,9 @@ class GroupeprestataireAdmin extends AbstractAdmin
'required' => true 'required' => true
)) ))
; ;
if (($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) && $this->security->getUser()->getGroupesgere() != null) { if (($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) && !empty($this->security->getUser()->getGroupesgeres())) {
$prestataires = $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Prestataire::class)->findBy(array('enabled' => true, 'groupe' => $this->security->getUser()->getGroupesgere()), array('raison'=> 'ASC')); //TODO : check request !
$prestataires = $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Prestataire::class)->findBy(array('enabled' => true, 'groupe' => $this->security->getUser()->getGroupesgeres()), array('raison'=> 'ASC'));
} }
if ($user->isGranted('ROLE_SUPER_ADMIN') || $user->isGranted('ROLE_ADMIN_SIEGE')) { if ($user->isGranted('ROLE_SUPER_ADMIN') || $user->isGranted('ROLE_ADMIN_SIEGE')) {
$formMapper $formMapper
...@@ -207,25 +221,4 @@ class GroupeprestataireAdmin extends AbstractAdmin ...@@ -207,25 +221,4 @@ class GroupeprestataireAdmin extends AbstractAdmin
unset($actions['list']); unset($actions['list']);
return $actions; return $actions;
} }
// @TODO : NE FONCTIONNE PAS : pour pouvoir classer par nombre de prestataires !
// voir https://github.com/sonata-project/SonataDoctrineORMAdminBundle/issues/297
// public function createQuery($context = 'list')
// {
// $query = parent::createQuery($context);
// if ('list' === $context) {
// $rootAlias = $query->getRootAliases()[0];
// $parameters = $this->getFilterParameters();
// if ('getPrestatairesCount' === $parameters['_sort_by']) {
// $query->select('o', 'DISTINCT o');
// $query
// ->leftJoin($rootAlias.'.prestataires', 'gpr')
// // ->leftJoin('groupes_prestataires.prestataires', 'pr')
// ->groupBy($rootAlias.'.id')
// ->orderBy('COUNT(gpr.id)', $parameters['_sort_order'])
// ;
// }
// }
// return $query;
// }
} }
...@@ -14,7 +14,7 @@ use Symfony\Component\Translation\TranslatorInterface; ...@@ -14,7 +14,7 @@ use Symfony\Component\Translation\TranslatorInterface;
/** /**
* Import de données * Import de données
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class ImportAdmin extends AbstractAdmin class ImportAdmin extends AbstractAdmin
......
...@@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\File\File; ...@@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\File\File;
/** /**
* Import provider * Import provider
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class ImportProvider extends FileProvider class ImportProvider extends FileProvider
...@@ -19,7 +19,7 @@ class ImportProvider extends FileProvider ...@@ -19,7 +19,7 @@ class ImportProvider extends FileProvider
*/ */
protected function doTransform(MediaInterface $media) protected function doTransform(MediaInterface $media)
{ {
// ... // ...
} }
/** /**
...@@ -43,4 +43,4 @@ class ImportProvider extends FileProvider ...@@ -43,4 +43,4 @@ class ImportProvider extends FileProvider
public function postUpdate(MediaInterface $media) public function postUpdate(MediaInterface $media)
{ {
} }
} }
\ No newline at end of file
...@@ -8,7 +8,7 @@ use Sonata\MediaBundle\Provider\MediaProviderInterface; ...@@ -8,7 +8,7 @@ use Sonata\MediaBundle\Provider\MediaProviderInterface;
/** /**
* Administration des medias (image, document...) * Administration des medias (image, document...)
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class MediaAdmin extends BaseMediaAdmin class MediaAdmin extends BaseMediaAdmin
......
...@@ -16,7 +16,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType; ...@@ -16,7 +16,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType;
/** /**
* Administration des news * Administration des news
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class NewsAdmin extends AbstractAdmin class NewsAdmin extends AbstractAdmin
......
...@@ -20,7 +20,7 @@ use Symfony\Component\Security\Core\Security; ...@@ -20,7 +20,7 @@ use Symfony\Component\Security\Core\Security;
/** /**
* Administration des pages * Administration des pages
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class PageAdmin extends AbstractAdmin class PageAdmin extends AbstractAdmin
......
...@@ -18,7 +18,7 @@ use Symfony\Component\Translation\TranslatorInterface; ...@@ -18,7 +18,7 @@ use Symfony\Component\Translation\TranslatorInterface;
/** /**
* Administration des reconversions (transfert d'un prestataire au siège) * Administration des reconversions (transfert d'un prestataire au siège)
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class ReconversionAdmin extends FluxAdmin class ReconversionAdmin extends FluxAdmin
......
...@@ -21,7 +21,7 @@ use Symfony\Component\Security\Core\Security; ...@@ -21,7 +21,7 @@ use Symfony\Component\Security\Core\Security;
/** /**
* Administration des rubriques * Administration des rubriques
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class RubriqueAdmin extends AbstractAdmin class RubriqueAdmin extends AbstractAdmin
...@@ -49,6 +49,7 @@ class RubriqueAdmin extends AbstractAdmin ...@@ -49,6 +49,7 @@ class RubriqueAdmin extends AbstractAdmin
{ {
$user = $this->security->getUser(); $user = $this->security->getUser();
$prestataires = $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Prestataire::class)->findBy(array('enabled' => true), array('raison'=> 'ASC')); $prestataires = $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Prestataire::class)->findBy(array('enabled' => true), array('raison'=> 'ASC'));
// TODO : ?
// if (($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) && $this->security->getUser()->getGroupesgere() != null) { // if (($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) && $this->security->getUser()->getGroupesgere() != null) {
// $prestataires = $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Prestataire::class)->findBy(array('enabled' => true, 'groupe' => $this->security->getUser()->getGroupesgere()), array('raison'=> 'ASC')); // $prestataires = $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository(Prestataire::class)->findBy(array('enabled' => true, 'groupe' => $this->security->getUser()->getGroupesgere()), array('raison'=> 'ASC'));
// } // }
......
...@@ -7,7 +7,7 @@ use Sonata\AdminBundle\Route\RouteCollection; ...@@ -7,7 +7,7 @@ use Sonata\AdminBundle\Route\RouteCollection;
/** /**
* Administration des traductions * Administration des traductions
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class TraductionAdmin extends AbstractAdmin class TraductionAdmin extends AbstractAdmin
......
...@@ -9,7 +9,7 @@ use Sonata\AdminBundle\Route\RouteCollection; ...@@ -9,7 +9,7 @@ use Sonata\AdminBundle\Route\RouteCollection;
/** /**
* Administration des transactions * Administration des transactions
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class TransactionAdmin extends FluxAdmin class TransactionAdmin extends FluxAdmin
......
...@@ -4,6 +4,9 @@ namespace App\Admin; ...@@ -4,6 +4,9 @@ namespace App\Admin;
use App\Admin\FluxAdmin; use App\Admin\FluxAdmin;
use App\Entity\User; use App\Entity\User;
use App\Entity\Flux;
use App\Entity\Prestataire;
use App\Tools\RoleCheck;
use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Datagrid\ListMapper;
...@@ -12,18 +15,21 @@ use Sonata\AdminBundle\Form\Type\Filter\ChoiceType; ...@@ -12,18 +15,21 @@ use Sonata\AdminBundle\Form\Type\Filter\ChoiceType;
use Sonata\AdminBundle\Route\RouteCollection; use Sonata\AdminBundle\Route\RouteCollection;
use Sonata\AdminBundle\Show\ShowMapper; use Sonata\AdminBundle\Show\ShowMapper;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType as SChoiceType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType as SChoiceType;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
use Symfony\Component\Translation\TranslatorInterface; use Symfony\Component\Translation\TranslatorInterface;
/** /**
* Administration des transferts * Administration des transferts
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class TransfertAdmin extends FluxAdmin class TransfertAdmin extends FluxAdmin
{ {
protected $security; protected $security;
protected $session;
protected $rolecheck;
protected $datagridValues = [ protected $datagridValues = [
'_sort_order' => 'DESC', '_sort_order' => 'DESC',
'_sort_by' => 'createdAt', '_sort_by' => 'createdAt',
...@@ -34,6 +40,16 @@ class TransfertAdmin extends FluxAdmin ...@@ -34,6 +40,16 @@ class TransfertAdmin extends FluxAdmin
$this->security = $security; $this->security = $security;
} }
public function setSession(SessionInterface $session)
{
$this->session = $session;
}
public function setRoleCheck(RoleCheck $rolecheck)
{
$this->rolecheck = $rolecheck;
}
protected function configureRoutes(RouteCollection $collection) protected function configureRoutes(RouteCollection $collection)
{ {
$collection->clearExcept(array('list', 'export')); $collection->clearExcept(array('list', 'export'));
...@@ -46,17 +62,19 @@ class TransfertAdmin extends FluxAdmin ...@@ -46,17 +62,19 @@ class TransfertAdmin extends FluxAdmin
{ {
$user = $this->security->getUser(); $user = $this->security->getUser();
$query = parent::createQuery($context); $query = parent::createQuery($context);
$query->andWhere($query->getRootAliases()[0].".parenttype = :type") // $query->andWhere($query->getRootAliases()[0].".parenttype = :type")
->setParameter('type', 'transfert'); // ->setParameter('type', 'transfert');
;
if ($user->isGranted('ROLE_GESTION_GROUPE') || $user->isGranted('ROLE_CONTACT')) { $em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getEntityManager();
if (empty($user->getGroupesgere())) { $fluxtable = $em->getMetadataFactory()->getMetadataFor(Flux::class)->getTableName();
if ($this->rolecheck->isGranted('ROLE_GESTION_GROUPE') || $this->rolecheck->isGranted('ROLE_CONTACT')) {
if (empty($user->getGroupesgeres())) {
$query->andWhere('false'); $query->andWhere('false');
} else { } else {
$groupe = $user->getGroupesgere(); $groupe = $this->session->get('_groupegere');
$em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getEntityManager();
$connection = $em->getConnection(); $connection = $em->getConnection();
$statement = $connection->prepare('SELECT f.id FROM flux f WHERE f.groupe_id = '.$groupe->getId().' OR (f.type = \'prestataire_siege\' AND f.prestataire_id IN (SELECT p.id FROM prestataire p WHERE p.groupe_id = '.$groupe->getId().'))'); $prestatable = $em->getMetadataFactory()->getMetadataFor(Prestataire::class)->getTableName();
$statement = $connection->prepare('SELECT f.id FROM '.$fluxtable.' f WHERE f.groupe_id = '.$groupe->getId().' OR (f.type = \'prestataire_siege\' AND f.prestataire_id IN (SELECT p.id FROM '.$fluxtable.' p WHERE p.groupe_id = '.$groupe->getId().'))');
$statement->execute(); $statement->execute();
$ids = $statement->fetchAll(); $ids = $statement->fetchAll();
$query $query
...@@ -64,14 +82,14 @@ class TransfertAdmin extends FluxAdmin ...@@ -64,14 +82,14 @@ class TransfertAdmin extends FluxAdmin
->setParameter('ids', $ids) ->setParameter('ids', $ids)
; ;
} }
} elseif ($user->isGranted('ROLE_COMPTOIR')) { } elseif ($this->rolecheck->isGranted('ROLE_COMPTOIR')) {
if (empty($user->getComptoirsgere())) { if (empty($user->getComptoirsgeres())) {
$query->andWhere('false'); $query->andWhere('false');
} else { } else {
$comptoir = $user->getComptoirsgere(); $comptoir = $this->session->get('_comptoirgere');
$em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getEntityManager(); $em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getEntityManager();
$connection = $em->getConnection(); $connection = $em->getConnection();
$statement = $connection->prepare('SELECT f.id FROM flux f WHERE f.comptoir_id = '.$comptoir->getId().' OR f.user_id = '.$user->getId()); $statement = $connection->prepare('SELECT f.id FROM '.$fluxtable.' f WHERE f.comptoir_id = '.$comptoir->getId().' OR f.user_id = '.$user->getId());
$statement->execute(); $statement->execute();
$ids = $statement->fetchAll(); $ids = $statement->fetchAll();
$query $query
......
...@@ -16,7 +16,7 @@ use Symfony\Component\Form\FormEvents; ...@@ -16,7 +16,7 @@ use Symfony\Component\Form\FormEvents;
/** /**
* Administration des utilisateurs * Administration des utilisateurs
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
class UserAdmin extends SonataUserAdmin class UserAdmin extends SonataUserAdmin
......
...@@ -135,8 +135,8 @@ class UserAdmin extends BaseUserAdmin ...@@ -135,8 +135,8 @@ class UserAdmin extends BaseUserAdmin
->with('General', ['class' => 'col-md-6'])->end() ->with('General', ['class' => 'col-md-6'])->end()
// ->with('Social', ['class' => 'col-md-6'])->end() // ->with('Social', ['class' => 'col-md-6'])->end()
->end(); ->end();
if (!($subject->isGranted('ROLE_SUPER_ADMIN') || $subject->isGranted('ROLE_ADMIN_SIEGE'))) { // if (!($subject->isGranted('ROLE_SUPER_ADMIN') || $subject->isGranted('ROLE_ADMIN_SIEGE'))) {
$formMapper $formMapper
->tab('Security') ->tab('Security')
->with('Groups', ['class' => 'col-md-8'])->end() ->with('Groups', ['class' => 'col-md-8'])->end()
->with('Status', ['class' => 'col-md-4'])->end() ->with('Status', ['class' => 'col-md-4'])->end()
...@@ -144,7 +144,7 @@ class UserAdmin extends BaseUserAdmin ...@@ -144,7 +144,7 @@ class UserAdmin extends BaseUserAdmin
// ->with('Roles', ['class' => 'col-md-12'])->end() // ->with('Roles', ['class' => 'col-md-12'])->end()
->end() ->end()
; ;
} // }
$now = new \DateTime(); $now = new \DateTime();
...@@ -198,39 +198,43 @@ class UserAdmin extends BaseUserAdmin ...@@ -198,39 +198,43 @@ class UserAdmin extends BaseUserAdmin
// ->add('gplusName', null, ['required' => false]) // ->add('gplusName', null, ['required' => false])
// ->end() // ->end()
->end(); ->end();
if (!($subject->isGranted('ROLE_SUPER_ADMIN') || $subject->isGranted('ROLE_ADMIN_SIEGE'))) { // if (!($subject->isGranted('ROLE_SUPER_ADMIN') || $subject->isGranted('ROLE_ADMIN_SIEGE'))) {
$formMapper $formMapper
->tab('Security') ->tab('Security')
->with('Status') ->with('Status')
->add('enabled', null, ['required' => false]) ->add('enabled', null, ['required' => false])
->end() ->end()
; ;
$hideOrShowGroupe = ['class' => 'hide']; $hideOrShowGroupe = ['class' => 'hide'];
$hideOrShowComptoir = ['class' => 'hide']; $hideOrShowComptoir = ['class' => 'hide'];
if (($subject->isGranted('ROLE_GESTION_GROUPE') || $subject->isGranted('ROLE_CONTACT')) && empty($subject->getGroupesgere())) { if (($subject->isGranted('ROLE_GESTION_GROUPE') || $subject->isGranted('ROLE_CONTACT') || $subject->isGranted('ROLE_TRESORIER'))) {
$hideOrShowGroupe = []; $hideOrShowGroupe = [];
} }
if ($subject->isGranted('ROLE_COMPTOIR') && empty($subject->getComptoirsgere())) { if ($subject->isGranted('ROLE_COMPTOIR')) {
$hideOrShowComptoir = []; $hideOrShowComptoir = [];
} }
$formMapper $formMapper
->with('Groups') ->with('Groups')
->add('groups', ModelType::class, [ ->add('groups', ModelType::class, [
'required' => false, 'required' => false,
'expanded' => true, 'expanded' => true,
'multiple' => true, 'multiple' => true,
]) ])
->add('groupesgere', null, [ ->add('groupesgeres', null, [
'required' => false, 'required' => false,
'label' => 'Groupe local géré (obligatoire)', 'label' => 'Groupe local géré (obligatoire)',
'attr' => $hideOrShowGroupe, 'attr' => $hideOrShowGroupe,
'label_attr' => $hideOrShowGroupe, 'label_attr' => $hideOrShowGroupe,
'multiple' => true,
'by_reference' => false
]) ])
->add('comptoirsgere', null, [ ->add('comptoirsgeres', null, [
'required' => false, 'required' => false,
'label' => 'Comptoir géré (obligatoire)', 'label' => 'Comptoir géré (obligatoire)',
'attr' => $hideOrShowComptoir, 'attr' => $hideOrShowComptoir,
'label_attr' => $hideOrShowComptoir, 'label_attr' => $hideOrShowComptoir,
'multiple' => true,
'by_reference' => false
]) ])
->end() ->end()
->with('Roles') ->with('Roles')
...@@ -243,7 +247,7 @@ class UserAdmin extends BaseUserAdmin ...@@ -243,7 +247,7 @@ class UserAdmin extends BaseUserAdmin
->end() ->end()
->end() ->end()
; ;
} // }
// ->with('Keys') // ->with('Keys')
// ->add('token', null, ['required' => false]) // ->add('token', null, ['required' => false])
// ->add('twoStepVerificationCode', null, ['required' => false]) // ->add('twoStepVerificationCode', null, ['required' => false])
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace App\Controller; namespace App\Controller;
use App\Entity\User;
use App\Entity\TransfertPrestataireSiege; use App\Entity\TransfertPrestataireSiege;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
...@@ -11,6 +12,8 @@ use Symfony\Component\HttpFoundation\Request; ...@@ -11,6 +12,8 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Geocoder\Provider\Nominatim\Nominatim;
use Geocoder\Query\GeocodeQuery;
class AdminController extends Controller class AdminController extends Controller
{ {
...@@ -42,17 +45,26 @@ class AdminController extends Controller ...@@ -42,17 +45,26 @@ class AdminController extends Controller
$this->em->flush(); $this->em->flush();
} else { } else {
$status = 'error'; $status = 'error';
$this->get('session')->getFlashBag()->add(
'notice',
'Erreur : veuillez recharger la page et réessayer !'
);
} }
} catch (\Exception $e) { } catch (\Exception $e) {
$status = 'error'; $status = 'error';
$this->get('session')->getFlashBag()->add(
'notice',
'Erreur : veuillez recharger la page et réessayer !'
);
} }
return new JsonResponse(array('status' => $status, 'newvalue' => ($object->isEnabled()?'true':'false'))); return new JsonResponse(array('status' => $status, 'newvalue' => ($object->isEnabled()?'true':'false')));
} }
/** /**
* @Route("/admin/setreconverti/{id}", name="setreconverti") * @Route("/admin/setreconverti/{id}", name="setreconverti")
* @IsGranted({"ROLE_TRESORIER", "ROLE_ADMIN_TRANSFERT_GERER_VIEW"})
*/ */
public function setReconvertiAction($id, Request $request) public function setReconvertiAction(TransfertPrestataireSiege $object, Request $request)
{ {
$referer = $request->headers->get('referer'); $referer = $request->headers->get('referer');
if ($referer && !$request->isXmlHttpRequest()) { if ($referer && !$request->isXmlHttpRequest()) {
...@@ -62,7 +74,6 @@ class AdminController extends Controller ...@@ -62,7 +74,6 @@ class AdminController extends Controller
} }
$status = 'success'; $status = 'success';
try { try {
$object = $this->em->getRepository(TransfertPrestataireSiege::class)->findOneById($id);
if ($object && method_exists($object, 'setReconverti')) { if ($object && method_exists($object, 'setReconverti')) {
$object->setReconverti(!$object->getReconverti()); $object->setReconverti(!$object->getReconverti());
$this->em->persist($object); $this->em->persist($object);
...@@ -78,6 +89,7 @@ class AdminController extends Controller ...@@ -78,6 +89,7 @@ class AdminController extends Controller
/** /**
* @Route("/admin/getcsv", name="getcsv") * @Route("/admin/getcsv", name="getcsv")
* @IsGranted({"ROLE_ADMIN_IMPORT_EDIT", "ROLE_ADMIN_IMPORT_LIST", "ROLE_ADMIN_IMPORT_CREATE", "ROLE_ADMIN_IMPORT_VIEW", "ROLE_ADMIN_IMPORT_DELETE", "ROLE_ADMIN_IMPORT_EXPORT", "ROLE_ADMIN_IMPORT_ALL"})
*/ */
public function getCsvAction(Request $request) public function getCsvAction(Request $request)
{ {
...@@ -102,4 +114,45 @@ class AdminController extends Controller ...@@ -102,4 +114,45 @@ class AdminController extends Controller
return $response; return $response;
} }
/**
* @Route("/admin/geoloc", name="geolocAdresse")
* @IsGranted("ROLE_ADMIN")
*/
public function geoLocAction(Request $request)
{
$referer = $request->headers->get('referer');
if ($referer && !$request->isXmlHttpRequest()) {
return $this->redirect($referer);
} elseif (!$request->isXmlHttpRequest()) {
return new Response('', Response::HTTP_BAD_REQUEST);
}
$status = 'success';
$return = null;
if (!empty($request->get('cpostal')) && !empty($request->get('ville'))) {
try {
// GEOCODING ADDRESS :
$httpClient = new \Http\Adapter\Guzzle6\Client();
$provider = Nominatim::withOpenStreetMapServer($httpClient, 'Mozilla/5.0');
$geocoder = new \Geocoder\StatefulGeocoder($provider, 'fr');
// Query geocoding from complete addresse
$result = $geocoder->geocodeQuery(GeocodeQuery::create($request->get('adresse').' '.$request->get('cpostal').' '.$request->get('ville')));
if (count($result) > 0) {
$coords = $result->first()->getCoordinates();
$return = ['lat' => $coords->getLatitude(), 'lon' => $coords->getLongitude()];
} else {
$result = $geocoder->geocodeQuery(GeocodeQuery::create($request->get('cpostal').' '.$request->get('ville')));
if (count($result) > 0) {
$coords = $result->first()->getCoordinates();
$return = ['lat' => $coords->getLatitude(), 'lon' => $coords->getLongitude()];
}
}
} catch (\Exception $e) {
$status = 'error';
}
} else {
$status = 'error';
}
return new JsonResponse(array('status' => $status, 'data' => $return));
}
} }
...@@ -11,6 +11,7 @@ use Symfony\Component\Form\AbstractType; ...@@ -11,6 +11,7 @@ use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Form; use Symfony\Component\Form\Form;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Translation\TranslatorInterface; use Symfony\Component\Translation\TranslatorInterface;
...@@ -38,12 +39,14 @@ class FluxController extends AbstractController ...@@ -38,12 +39,14 @@ class FluxController extends AbstractController
protected $em; protected $em;
protected $translator; protected $translator;
protected $eventDispatcher; protected $eventDispatcher;
protected $session;
public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, EventDispatcherInterface $eventDispatcher) public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, EventDispatcherInterface $eventDispatcher, SessionInterface $session)
{ {
$this->em = $em; $this->em = $em;
$this->translator = $translator; $this->translator = $translator;
$this->eventDispatcher = $eventDispatcher; $this->eventDispatcher = $eventDispatcher;
$this->session = $session;
} }
protected function manageFluxForm(Request $request, Form $form, $compte, $success, $title) protected function manageFluxForm(Request $request, Form $form, $compte, $success, $title)
......
...@@ -10,7 +10,7 @@ use Symfony\Component\HttpFoundation\Request; ...@@ -10,7 +10,7 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
/** /**
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* *
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
......
...@@ -98,24 +98,21 @@ class ImportController extends CRUDController ...@@ -98,24 +98,21 @@ class ImportController extends CRUDController
// Turning off doctrine default logs queries for saving memory // Turning off doctrine default logs queries for saving memory
$this->em->getConnection()->getConfiguration()->setSQLLogger(null); $this->em->getConnection()->getConfiguration()->setSQLLogger(null);
// // Get file provider // Get file provider
$provider = $this->container->get($media->getProviderName()); $provider = $this->container->get($media->getProviderName());
$csvRows = $this->parseCSV($provider->getFilesystem()->getAdapter()->getDirectory(), $provider->getReferenceImage($media)); $csvRows = $this->parseCSV($provider->getFilesystem()->getAdapter()->getDirectory(), $provider->getReferenceImage($media));
$this->header = implode(';', array_values($csvRows[0])); $this->header = implode(';', array_values($csvRows[0]));
// dump($csvRows);
// dump($header);
// exit();
$config = $this->getParameter('app.import.header'); $config = $this->getParameter('app.import.header');
if ($this->header == $config['adherent']['header']) { if ($this->header == $config['adherent']['header']) {
$result = $this->importAdherent($csvRows); $result = $this->importAdherent($csvRows);
} else if ($this->header == $config['prestataire']['header']) { } elseif ($this->header == $config['prestataire']['header']) {
$result = $this->importPrestataire($csvRows); $result = $this->importPrestataire($csvRows);
} else if ($this->header == $config['groupe']['header']) { } elseif ($this->header == $config['groupe']['header']) {
$result = $this->importGroupe($csvRows); $result = $this->importGroupe($csvRows);
} else if ($this->header == $config['comptoir']['header']) { } elseif ($this->header == $config['comptoir']['header']) {
$result = $this->importComptoir($csvRows); $result = $this->importComptoir($csvRows);
} else { } else {
$this->errors['error'] = $this->translator->trans('CSV invalide'); $this->errors['error'] = $this->translator->trans('CSV invalide');
...@@ -287,8 +284,7 @@ class ImportController extends CRUDController ...@@ -287,8 +284,7 @@ class ImportController extends CRUDController
$user->addRole('ROLE_PRESTATAIRE'); $user->addRole('ROLE_PRESTATAIRE');
$usergroupe = $this->em->getRepository(Usergroup::class)->findOneByName('Prestataire'); $usergroupe = $this->em->getRepository(Usergroup::class)->findOneByName('Prestataire');
$user->addGroup($usergroupe); $user->addGroup($usergroupe);
$user->setPrestataire($prestataire); $prestataire->addUser($user);
$prestataire->setUser($user);
if (!empty($raison)) { if (!empty($raison)) {
$prestataire->setRaison($raison); $prestataire->setRaison($raison);
...@@ -611,10 +607,10 @@ class ImportController extends CRUDController ...@@ -611,10 +607,10 @@ class ImportController extends CRUDController
if ($err == 'empty') { if ($err == 'empty') {
$errString = $this->translator->trans('Valeur vide !'); $errString = $this->translator->trans('Valeur vide !');
$this->warnings[$line][$key][$csvline] ='['.$errString.' ]'; $this->warnings[$line][$key][$csvline] ='['.$errString.' ]';
} else if ($err == 'invalid') { } elseif ($err == 'invalid') {
$errString = $this->translator->trans('Valeur invalide !'); $errString = $this->translator->trans('Valeur invalide !');
$this->warnings[$line][$key][$csvline] = '"'.(array_key_exists($key, $row)?$row[$key]:'').'" ['.$errString.']'; $this->warnings[$line][$key][$csvline] = '"'.(array_key_exists($key, $row)?$row[$key]:'').'" ['.$errString.']';
} else if ($err != '') { } elseif ($err != '') {
$this->warnings[$line][$key][$csvline] = '"'.(array_key_exists($key, $row)?$row[$key]:'').'" ['.$err.']'; $this->warnings[$line][$key][$csvline] = '"'.(array_key_exists($key, $row)?$row[$key]:'').'" ['.$err.']';
} }
} }
......
...@@ -4,9 +4,13 @@ namespace App\Controller; ...@@ -4,9 +4,13 @@ namespace App\Controller;
use App\Entity\Adherent; use App\Entity\Adherent;
use App\Entity\Cotisation; use App\Entity\Cotisation;
use App\Entity\Comptoir;
use App\Entity\Faq; use App\Entity\Faq;
use App\Entity\Geoloc; use App\Entity\Geoloc;
use App\Entity\Groupe;
use App\Entity\GlobalParameter;
use App\Entity\Page; use App\Entity\Page;
use App\Entity\Prestataire;
use App\Entity\Siege; use App\Entity\Siege;
use App\Entity\User; use App\Entity\User;
use App\Entity\Usergroup; use App\Entity\Usergroup;
...@@ -26,12 +30,15 @@ use Geocoder\Provider\Nominatim\Nominatim; ...@@ -26,12 +30,15 @@ use Geocoder\Provider\Nominatim\Nominatim;
use Geocoder\Query\GeocodeQuery; use Geocoder\Query\GeocodeQuery;
use Nelmio\ApiDocBundle\Annotation\Model; use Nelmio\ApiDocBundle\Annotation\Model;
use Nelmio\ApiDocBundle\Annotation\Security; use Nelmio\ApiDocBundle\Annotation\Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Swagger\Annotations as SWG; use Swagger\Annotations as SWG;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvent;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\AuthenticationException;
...@@ -46,14 +53,16 @@ class IndexController extends AbstractController ...@@ -46,14 +53,16 @@ class IndexController extends AbstractController
private $userManager; private $userManager;
private $tokenManager; private $tokenManager;
private $guard; private $guard;
private $session;
public function __construct(EventDispatcherInterface $eventDispatcher, EntityManagerInterface $em, UserManagerInterface $userManager, CsrfTokenManagerInterface $tokenManager = null, GuardAuthenticatorHandler $guard) public function __construct(EventDispatcherInterface $eventDispatcher, EntityManagerInterface $em, UserManagerInterface $userManager, CsrfTokenManagerInterface $tokenManager = null, GuardAuthenticatorHandler $guard, SessionInterface $session)
{ {
$this->eventDispatcher = $eventDispatcher; $this->eventDispatcher = $eventDispatcher;
$this->em = $em; $this->em = $em;
$this->userManager = $userManager; $this->userManager = $userManager;
$this->tokenManager = $tokenManager; $this->tokenManager = $tokenManager;
$this->guard = $guard; $this->guard = $guard;
$this->session = $session;
} }
/** /**
...@@ -98,12 +107,15 @@ class IndexController extends AbstractController ...@@ -98,12 +107,15 @@ class IndexController extends AbstractController
public function installationAction(Request $request) public function installationAction(Request $request)
{ {
$siege = $this->em->getRepository(Siege::class)->findOneById(1); $siege = $this->em->getRepository(Siege::class)->findOneById(1);
if (!empty($siege)) { // if (!empty($siege)) {
return $this->redirectToRoute('index'); // return $this->redirectToRoute('index');
} // }
$user = $this->userManager->createUser();
$repogroup = $this->em->getRepository(Usergroup::class); $repogroup = $this->em->getRepository(Usergroup::class);
$group = $repogroup->findOneBy(array('name' => 'Super Admin')); $group = $repogroup->findOneBy(array('name' => 'Super Admin'));
if (empty($group)) {
return new Response('ERREUR !<br><br>Avant de pouvoir installer le kohinos, il faut charger les fixtures : <br>Soit charger les fixtures standards :<br><em>php bin/console hautelook:fixtures:load --purge-with-truncate</em><br/><br/>Soit charger les fixtures de dev (pour tester le kohinos avec des données/comptes factices):<br/><em>php bin/console hautelook:fixtures:load --purge-with-truncate --env=test</em>', 200);
}
$user = $this->userManager->createUser();
$user->setEnabled(true); $user->setEnabled(true);
$user->addGroup($group); $user->addGroup($group);
$user->addRole('ROLE_SUPER_ADMIN'); $user->addRole('ROLE_SUPER_ADMIN');
...@@ -113,19 +125,43 @@ class IndexController extends AbstractController ...@@ -113,19 +125,43 @@ class IndexController extends AbstractController
if ($form->isSubmitted() && $form->isValid()) { if ($form->isSubmitted() && $form->isValid()) {
$siege = $form['siege']->getData(); $siege = $form['siege']->getData();
$user = $form['user']->getData(); $user = $form['user']->getData();
$groupe = $form['groupe']->getData();
$comptoir = $form['comptoir']->getData();
$configs = $form['config']->getData();
$groupe->setSiege($siege);
$comptoir->setGroupe($groupe);
//Création du prestataire recevant les cotisations
$presta = new Prestataire();
$presta->setMlc(true);
$presta->setRaison('Monnaie locale');
$presta->setDescription('Association gérant la monnaie locale et recevant les cotisations');
$presta->setEnabled(true);
$presta->setIban(' ');
$presta->setSiret(' ');
$user->addRole('ROLE_PRESTATAIRE');
$presta->addUser($user);
$presta->setGroupe($groupe);
$this->userManager->updateUser($user); $this->userManager->updateUser($user);
$this->em->persist($siege); $this->em->persist($siege);
$this->em->persist($groupe);
$this->em->persist($comptoir);
$this->em->persist($user); $this->em->persist($user);
// TODO : send mail $this->em->persist($presta);
foreach ($configs as $config) {
$this->em->persist($config);
}
$this->em->flush();
$this->addFlash( $this->addFlash(
'success', 'success',
'BRAVO ! Vous avez créer le siège et le premier utilisateur' 'BRAVO ! Vous avez créer le siège et le premier utilisateur'
); );
// if (null === $response = $event->getResponse()) {
$url = $this->generateUrl('fos_user_registration_confirmed'); $url = $this->generateUrl('fos_user_registration_confirmed');
$response = new RedirectResponse($url); $response = new RedirectResponse($url);
// }
// TODO : send mail with this event catch !
$this->eventDispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response)); $this->eventDispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));
$referer = $request->headers->get('referer'); $referer = $request->headers->get('referer');
if ($referer && !$request->isXmlHttpRequest()) { if ($referer && !$request->isXmlHttpRequest()) {
...@@ -157,7 +193,7 @@ class IndexController extends AbstractController ...@@ -157,7 +193,7 @@ class IndexController extends AbstractController
$adherent->setUser($user); $adherent->setUser($user);
if (count($adherent->getUser()->getCotisations()) <= 0) { if (count($adherent->getUser()->getCotisations()) <= 0) {
$cotisation = new Cotisation(); $cotisation = new Cotisation();
$cotisation->setMontant(floatval($this->getParameter('app.cotisation_montant'))); $cotisation->setMontant(floatval($this->em->getRepository(GlobalParameter::class)->val(GlobalParameter::COTISATION_MONTANT)));
$cotisation->setOperateur($adherent->getUser()); $cotisation->setOperateur($adherent->getUser());
$cotisation->setExpediteur($adherent); $cotisation->setExpediteur($adherent);
$cotisation->setMoyen(MoyenEnum::MOYEN_AUTRE); $cotisation->setMoyen(MoyenEnum::MOYEN_AUTRE);
...@@ -175,10 +211,7 @@ class IndexController extends AbstractController ...@@ -175,10 +211,7 @@ class IndexController extends AbstractController
if ($form->isValid()) { if ($form->isValid()) {
$adherentNew = $form->getData(); $adherentNew = $form->getData();
$cotisationNew = $form['cotisation']->getData(); $cotisationNew = $form['cotisation']->getData();
// dump($adherentNew);
// dump($cotisationNew);
// exit();
// $adherentNew->getUser()->removeCotisation($cotisation);
$this->em->persist($cotisationNew); $this->em->persist($cotisationNew);
$adherentNew->getUser()->addCotisation($cotisationNew); $adherentNew->getUser()->addCotisation($cotisationNew);
$this->em->persist($adherentNew); $this->em->persist($adherentNew);
...@@ -202,14 +235,75 @@ class IndexController extends AbstractController ...@@ -202,14 +235,75 @@ class IndexController extends AbstractController
)); ));
} }
private function removeOldSessionParams()
{
$this->session->remove('_choixGroup');
$this->session->remove('_groupId');
$this->session->remove('_groupegere');
$this->session->remove('_comptoirgere');
$this->session->remove('_prestagere');
}
/**
* Choix du groupe local géré
* @Route("/login/groupe/choice/{usergrpid}/{grpid}", name="groupe_choice")
* @ParamConverter("group", class="App:Usergroup", options={"mapping": {"usergrpid": "id"}})
* @ParamConverter("groupe", class="App:Groupe", options={"mapping": {"grpid": "id"}})
*/
public function groupeChoiceAction(Usergroup $group, Groupe $groupe, Request $request)
{
$this->removeOldSessionParams();
// On enregistre le rôle choisit en session
$this->session->set('_groupId', $group);
$this->session->set('_groupegere', $groupe);
// @TODO : On redirige sur l'index (ou en fonction du rôle?)
return $this->redirectToRoute('index');
}
/**
* Choix du comptoir géré
* @Route("/login/comptoir/choice/{usergrpid}/{cptid}", name="comptoir_choice")
* @ParamConverter("group", class="App:Usergroup", options={"mapping": {"usergrpid": "id"}})
* @ParamConverter("comptoir", class="App:Comptoir", options={"mapping": {"cptid": "id"}})
*/
public function comptoirChoiceAction(Usergroup $group, Comptoir $comptoir, Request $request)
{
$this->removeOldSessionParams();
// On enregistre le rôle choisit en session
$this->session->set('_groupId', $group);
$this->session->set('_comptoirgere', $comptoir);
// @TODO : On redirige sur l'index (ou en fonction du rôle?)
return $this->redirectToRoute('index');
}
/**
* Choix du presta géré
* @Route("/login/presta/choice/{usergrpid}/{prestaid}", name="presta_choice")
* @ParamConverter("group", class="App:Usergroup", options={"mapping": {"usergrpid": "id"}})
* @ParamConverter("prestataire", class="App:Prestataire", options={"mapping": {"prestaid": "id"}})
*/
public function prestaChoiceAction(Usergroup $group, Prestataire $prestataire, Request $request)
{
$this->removeOldSessionParams();
// On enregistre le rôle choisit en session
$this->session->set('_groupId', $group);
$this->session->set('_prestagere', $prestataire);
// @TODO : On redirige sur l'index (ou en fonction du rôle?)
return $this->redirectToRoute('index');
}
/** /**
* @Route("/group/choice/{id}", name="group_choice") * @Route("/login/group/choice/{id}", name="usergroup_choice")
*/ */
public function groupChoiceAction(Usergroup $group, Request $request) public function groupChoiceAction(Usergroup $group, Request $request)
{ {
$request->getSession()->remove('_choixGroup'); $this->removeOldSessionParams();
$this->session->remove('_choixGroup');
// On enregistre le rôle choisit en session // On enregistre le rôle choisit en session
$request->getSession()->set('_groupId', $group); $this->session->set('_groupId', $group);
// @TODO : On redirige sur l'index (ou en fonction du rôle?) // @TODO : On redirige sur l'index (ou en fonction du rôle?)
return $this->redirectToRoute('index'); return $this->redirectToRoute('index');
......
...@@ -38,7 +38,7 @@ class UserComptoirController extends FluxController ...@@ -38,7 +38,7 @@ class UserComptoirController extends FluxController
*/ */
public function groupeInfosAction(Request $request) public function groupeInfosAction(Request $request)
{ {
$form = $this->createForm(ComptoirInfosFormType::class, $this->getUser()->getComptoirsgere()); $form = $this->createForm(ComptoirInfosFormType::class, $this->session->get('_comptoirgere'));
$form->handleRequest($request); $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) { if ($form->isSubmitted() && $form->isValid()) {
...@@ -72,7 +72,7 @@ class UserComptoirController extends FluxController ...@@ -72,7 +72,7 @@ class UserComptoirController extends FluxController
// return $this->manageFluxForm( // return $this->manageFluxForm(
// $request, // $request,
// $form, // $form,
// $this->getUser()->getComptoirsgere()->getCompte(), // $this->session->get('_comptoirgere')->getCompte(),
// $this->translator->trans('Transfert à un adhérent bien effectuée !'), // $this->translator->trans('Transfert à un adhérent bien effectuée !'),
// $this->translator->trans('Transfert à un adhérent') // $this->translator->trans('Transfert à un adhérent')
// ); // );
...@@ -90,7 +90,7 @@ class UserComptoirController extends FluxController ...@@ -90,7 +90,7 @@ class UserComptoirController extends FluxController
// return $this->manageFluxForm( // return $this->manageFluxForm(
// $request, // $request,
// $form, // $form,
// $this->getUser()->getComptoirsgere()->getCompte(), // $this->session->get('_comptoirgere')->getCompte(),
// $this->translator->trans('Transfert à un prestataire bien effectuée !'), // $this->translator->trans('Transfert à un prestataire bien effectuée !'),
// $this->translator->trans('Transfert à un prestataire') // $this->translator->trans('Transfert à un prestataire')
// ); // );
...@@ -108,7 +108,7 @@ class UserComptoirController extends FluxController ...@@ -108,7 +108,7 @@ class UserComptoirController extends FluxController
return $this->manageFluxForm( return $this->manageFluxForm(
$request, $request,
$form, $form,
$this->getUser()->getComptoirsgere()->getCompte(), $this->session->get('_comptoirgere')->getCompte(),
$this->translator->trans('Vente à un adhérent bien effectuée !'), $this->translator->trans('Vente à un adhérent bien effectuée !'),
$this->translator->trans('Vente à un adhérent') $this->translator->trans('Vente à un adhérent')
); );
...@@ -126,7 +126,7 @@ class UserComptoirController extends FluxController ...@@ -126,7 +126,7 @@ class UserComptoirController extends FluxController
return $this->manageFluxForm( return $this->manageFluxForm(
$request, $request,
$form, $form,
$this->getUser()->getComptoirsgere()->getCompte(), $this->session->get('_comptoirgere')->getCompte(),
$this->translator->trans('Vente à un prestataire bien effectuée !'), $this->translator->trans('Vente à un prestataire bien effectuée !'),
$this->translator->trans('Vente à un prestataire') $this->translator->trans('Vente à un prestataire')
); );
...@@ -144,7 +144,7 @@ class UserComptoirController extends FluxController ...@@ -144,7 +144,7 @@ class UserComptoirController extends FluxController
return $this->manageFluxForm( return $this->manageFluxForm(
$request, $request,
$form, $form,
$this->getUser()->getComptoirsgere()->getCompte(), $this->session->get('_comptoirgere')->getCompte(),
$this->translator->trans("Retrait d'un adhérent bien effectuée !"), $this->translator->trans("Retrait d'un adhérent bien effectuée !"),
$this->translator->trans("Retrait d'un adhérent") $this->translator->trans("Retrait d'un adhérent")
); );
...@@ -162,7 +162,7 @@ class UserComptoirController extends FluxController ...@@ -162,7 +162,7 @@ class UserComptoirController extends FluxController
return $this->manageFluxForm( return $this->manageFluxForm(
$request, $request,
$form, $form,
$this->getUser()->getComptoirsgere()->getCompte(), $this->session->get('_comptoirgere')->getCompte(),
$this->translator->trans("Retrait d'un prestataire bien effectuée !"), $this->translator->trans("Retrait d'un prestataire bien effectuée !"),
$this->translator->trans("Retrait d'un prestataire") $this->translator->trans("Retrait d'un prestataire")
); );
...@@ -180,7 +180,7 @@ class UserComptoirController extends FluxController ...@@ -180,7 +180,7 @@ class UserComptoirController extends FluxController
return $this->manageFluxForm( return $this->manageFluxForm(
$request, $request,
$form, $form,
$this->getUser()->getComptoirsgere()->getCompte(), $this->session->get('_comptoirgere')->getCompte(),
$this->translator->trans('Reconversion bien effectuée !'), $this->translator->trans('Reconversion bien effectuée !'),
$this->translator->trans("Reconversion d'un prestataire") $this->translator->trans("Reconversion d'un prestataire")
); );
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Controller; namespace App\Controller;
use App\Entity\User; use App\Entity\User;
use App\Form\Type\CotiserFormType;
use App\Form\Type\UserInfosFormType; use App\Form\Type\UserInfosFormType;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
...@@ -23,6 +24,32 @@ class UserController extends AbstractController ...@@ -23,6 +24,32 @@ class UserController extends AbstractController
$this->translator = $translator; $this->translator = $translator;
} }
/**
* @Route("/cotiser", name="cotiser")
* @IsGranted("ROLE_USER")
*/
public function cotiserAction(Request $request)
{
$form = $this->createForm(CotiserFormType::class, $adherent);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$adherentNew = $form->getData();
} else {
$this->addFlash(
'error',
'Problème avec l\'adhésion !'
);
}
}
return $this->render('cotiser.html.twig', array(
'form' => $form->createView()
));
}
/** /**
* @Route("/userinfos", name="user_infos") * @Route("/userinfos", name="user_infos")
* @IsGranted("ROLE_USER") * @IsGranted("ROLE_USER")
......
...@@ -34,7 +34,8 @@ class UserGestionnaireGroupeController extends FluxController ...@@ -34,7 +34,8 @@ class UserGestionnaireGroupeController extends FluxController
*/ */
public function groupeInfosAction(Request $request) public function groupeInfosAction(Request $request)
{ {
$form = $this->createForm(GroupeInfosFormType::class, $this->getUser()->getGroupesgere()); // TODO : récupérer groupe gere en session
$form = $this->createForm(GroupeInfosFormType::class, $this->session->get('_groupegere'));
$form->handleRequest($request); $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) { if ($form->isSubmitted() && $form->isValid()) {
...@@ -68,13 +69,13 @@ class UserGestionnaireGroupeController extends FluxController ...@@ -68,13 +69,13 @@ class UserGestionnaireGroupeController extends FluxController
return $this->manageFluxForm( return $this->manageFluxForm(
$request, $request,
$form, $form,
$this->getUser()->getGroupesgere()->getCompte(), $this->session->get('_groupegere')->getCompte(),
$this->translator->trans('Transfert bien effectué !'), $this->translator->trans('Transfert bien effectué !'),
$this->translator->trans('Transfert à un comptoir') $this->translator->trans('Transfert à un comptoir')
); );
} }
/** /**
* @Route("/user/groupe/retour/comptoir/", name="transfertComptoirGroupe") * @Route("/user/groupe/retour/comptoir/", name="transfertComptoirGroupe")
* @IsGranted("ROLE_GESTION_GROUPE") * @IsGranted("ROLE_GESTION_GROUPE")
*/ */
...@@ -86,10 +87,9 @@ class UserGestionnaireGroupeController extends FluxController ...@@ -86,10 +87,9 @@ class UserGestionnaireGroupeController extends FluxController
return $this->manageFluxForm( return $this->manageFluxForm(
$request, $request,
$form, $form,
$this->getUser()->getGroupesgere()->getCompte(), $this->session->get('_groupegere')->getCompte(),
$this->translator->trans('Retour bien effectuée !'), $this->translator->trans('Retour bien effectuée !'),
$this->translator->trans('Retour au groupe') $this->translator->trans('Retour au groupe')
); );
} }
} }
...@@ -30,7 +30,7 @@ class UserPrestataireController extends FluxController ...@@ -30,7 +30,7 @@ class UserPrestataireController extends FluxController
*/ */
public function prestataireInfosAction(Request $request) public function prestataireInfosAction(Request $request)
{ {
$form = $this->createForm(PrestataireInfosFormType::class, $this->getUser()->getPrestataire()); $form = $this->createForm(PrestataireInfosFormType::class, $this->session->get('_prestagere'));
$form->handleRequest($request); $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) { if ($form->isSubmitted() && $form->isValid()) {
...@@ -57,7 +57,7 @@ class UserPrestataireController extends FluxController ...@@ -57,7 +57,7 @@ class UserPrestataireController extends FluxController
*/ */
public function groupePrestataireInscriptionAction(Request $request) public function groupePrestataireInscriptionAction(Request $request)
{ {
$form = $this->createForm(GroupePrestataireInscriptionFormType::class, $this->getUser()->getPrestataire()); $form = $this->createForm(GroupePrestataireInscriptionFormType::class, $this->session->get('_prestagere'));
$form->handleRequest($request); $form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) { if ($form->isSubmitted() && $form->isValid()) {
...@@ -93,12 +93,12 @@ class UserPrestataireController extends FluxController ...@@ -93,12 +93,12 @@ class UserPrestataireController extends FluxController
$entityName = 'App\Entity\TransactionPrestataire'.ucwords($type); $entityName = 'App\Entity\TransactionPrestataire'.ucwords($type);
$entity = new $entityName(); $entity = new $entityName();
$entity->setOperateur($this->getUser()); $entity->setOperateur($this->getUser());
$entity->setExpediteur($this->getUser()->getPrestataire()); $entity->setExpediteur($this->session->get('_prestagere'));
$form = $this->createForm('App\Form\Type\TransactionPrestataire'.ucwords($type).'FormType', $entity); $form = $this->createForm('App\Form\Type\TransactionPrestataire'.ucwords($type).'FormType', $entity);
return $this->manageFluxForm( return $this->manageFluxForm(
$request, $request,
$form, $form,
$this->getUser()->getPrestataire()->getCompte(), $this->session->get('_prestagere')->getCompte(),
$this->translator->trans('Transaction bien effectuée !'), $this->translator->trans('Transaction bien effectuée !'),
$this->translator->trans('Transaction à un ').$type $this->translator->trans('Transaction à un ').$type
); );
...@@ -113,12 +113,12 @@ class UserPrestataireController extends FluxController ...@@ -113,12 +113,12 @@ class UserPrestataireController extends FluxController
{ {
$entity = new TransfertPrestataireSiege(); $entity = new TransfertPrestataireSiege();
$entity->setOperateur($this->getUser()); $entity->setOperateur($this->getUser());
$entity->setExpediteur($this->getUser()->getPrestataire()); $entity->setExpediteur($this->session->get('_prestagere'));
$form = $this->createForm(TransfertPrestataireSiegeFormType::class, $entity); $form = $this->createForm(TransfertPrestataireSiegeFormType::class, $entity);
return $this->manageFluxForm( return $this->manageFluxForm(
$request, $request,
$form, $form,
$this->getUser()->getPrestataire()->getCompte(), $this->session->get('_prestagere')->getCompte(),
$this->translator->trans('Reconversion envoyée, elle sera validée lorsque le virement sera effectué !'), $this->translator->trans('Reconversion envoyée, elle sera validée lorsque le virement sera effectué !'),
$this->translator->trans('Reconversion de monnaie au siège') $this->translator->trans('Reconversion de monnaie au siège')
); );
...@@ -135,7 +135,7 @@ class UserPrestataireController extends FluxController ...@@ -135,7 +135,7 @@ class UserPrestataireController extends FluxController
public function exportFluxAction(Request $request, $format = 'csv') public function exportFluxAction(Request $request, $format = 'csv')
{ {
// Prepare the data source // Prepare the data source
$query = $this->em->getRepository(Flux::class)->getQueryByPrestataire($this->getUser()->getPrestataire()); $query = $this->em->getRepository(Flux::class)->getQueryByPrestataire($this->session->get('_prestagere'));
$fields = ['expediteur', 'destinataire', 'type', 'parenttype', 'montant', 'moyen', 'operateur']; $fields = ['expediteur', 'destinataire', 'type', 'parenttype', 'montant', 'moyen', 'operateur'];
$source = new DoctrineORMQuerySourceIterator($query, $fields); $source = new DoctrineORMQuerySourceIterator($query, $fields);
......
...@@ -7,6 +7,7 @@ use App\Entity\EntityTrait\EnablableEntityTrait; ...@@ -7,6 +7,7 @@ use App\Entity\EntityTrait\EnablableEntityTrait;
use App\Entity\EntityTrait\GeolocEntityTrait; use App\Entity\EntityTrait\GeolocEntityTrait;
use App\Entity\EntityTrait\HasCompteEntity; use App\Entity\EntityTrait\HasCompteEntity;
use App\Entity\EntityTrait\NameSlugContentEntityTrait; use App\Entity\EntityTrait\NameSlugContentEntityTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity; use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
...@@ -52,11 +53,17 @@ class Comptoir ...@@ -52,11 +53,17 @@ class Comptoir
private $groupe; private $groupe;
/** /**
* @var ArrayCollection|User[] * @var ArrayCollection|User[]
* @ORM\OneToMany(targetEntity="User", mappedBy="comptoirsgere", fetch="EXTRA_LAZY") *
*/ * @ORM\ManyToMany(targetEntity="User", inversedBy="comptoirsgeres", fetch="EXTRA_LAZY")
*/
private $gestionnaires; private $gestionnaires;
public function __construct()
{
$this->gestionnaires = new ArrayCollection();
}
/** /**
* @return int * @return int
*/ */
...@@ -78,7 +85,7 @@ class Comptoir ...@@ -78,7 +85,7 @@ class Comptoir
* Set media * Set media
* @return $this * @return $this
*/ */
public function setMedia($media) public function setMedia($media): self
{ {
$this->media = $media; $this->media = $media;
return $this; return $this;
...@@ -88,7 +95,7 @@ class Comptoir ...@@ -88,7 +95,7 @@ class Comptoir
* @param null|Groupe $groupes * @param null|Groupe $groupes
* @return $this * @return $this
*/ */
public function setGroupe(?Groupe $groupe) public function setGroupe(?Groupe $groupe): self
{ {
$this->groupe = $groupe; $this->groupe = $groupe;
return $this; return $this;
...@@ -114,11 +121,10 @@ class Comptoir ...@@ -114,11 +121,10 @@ class Comptoir
* @param User $gestionnaire * @param User $gestionnaire
* @return $this * @return $this
*/ */
public function addGestionnaire(User $gestionnaire) public function addGestionnaire(User $gestionnaire): self
{ {
if (!$this->gestionnaires->contains($gestionnaire)) { if (!$this->gestionnaires->contains($gestionnaire)) {
$this->gestionnaires[] = $gestionnaire; $this->gestionnaires[] = $gestionnaire;
$gestionnaire->setGestionnaireComptoir($this);
} }
return $this; return $this;
} }
...@@ -127,11 +133,10 @@ class Comptoir ...@@ -127,11 +133,10 @@ class Comptoir
* @param User $gestionnaire * @param User $gestionnaire
* @return $this * @return $this
*/ */
public function removeGestionnaire(User $gestionnaire) public function removeGestionnaire(User $gestionnaire): self
{ {
if ($this->gestionnaires->contains($gestionnaire)) { if ($this->gestionnaires->contains($gestionnaire)) {
$this->gestionnaires->removeElement($gestionnaire); $this->gestionnaires->removeElement($gestionnaire);
$gestionnaire->setGestionnaireComptoir(null);
} }
return $this; return $this;
} }
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Entity; namespace App\Entity;
use App\Entity\CotisationInfos; use App\Entity\CotisationInfos;
use App\Enum\MoyenEnum;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
...@@ -39,7 +40,7 @@ class Cotisation extends Flux ...@@ -39,7 +40,7 @@ class Cotisation extends Flux
$compteExp = $this->getExpediteur()->getEcompte() - $this->getMontant(); $compteExp = $this->getExpediteur()->getEcompte() - $this->getMontant();
if ($this->getMoyen() == MoyenEnum::MOYEN_MLC) { if ($this->getMoyen() == MoyenEnum::MOYEN_MLC) {
if ($compteExp < 0) { if ($compteExp < 0) {
throw new \Exception("[FLUX] Opération impossible ! Montant supérieur au solde de l'expéditeur !"); throw new \Exception("[FLUX] Opération impossible ! Montant supérieur au solde de monnaie éléctronique !");
} else { } else {
$this->getExpediteur()->removeEcompte($this->getMontant()); $this->getExpediteur()->removeEcompte($this->getMontant());
$this->getDestinataire()->addEcompte($this->getMontant()); $this->getDestinataire()->addEcompte($this->getMontant());
......
...@@ -8,6 +8,7 @@ use Doctrine\ORM\Event\LifecycleEventArgs; ...@@ -8,6 +8,7 @@ use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity; use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
/** /**
* FLUX = TRANSFERT ou TRANSACTION ou COTISATIONS * FLUX = TRANSFERT ou TRANSACTION ou COTISATIONS
...@@ -43,6 +44,15 @@ abstract class Flux ...@@ -43,6 +44,15 @@ abstract class Flux
protected $operateur; protected $operateur;
/** /**
* Role en cours de l'utilisateur
* @var string
*
* @ORM\Column(name="role", type="string", length=200)
* @Assert\NotBlank
*/
protected $role;
/**
* Type de transfert / transaction : exemple : Prestataire à Adhérent * Type de transfert / transaction : exemple : Prestataire à Adhérent
* @var string * @var string
* *
...@@ -64,7 +74,8 @@ abstract class Flux ...@@ -64,7 +74,8 @@ abstract class Flux
* @var float * @var float
* *
* @ORM\Column(name="montant", type="decimal", precision=7, scale=2) * @ORM\Column(name="montant", type="decimal", precision=7, scale=2)
* @Assert\Type("float") * @Assert\NotBlank
* @Assert\Type("numeric")
* @Assert\GreaterThan( * @Assert\GreaterThan(
* value = 0 * value = 0
* ) * )
...@@ -87,6 +98,14 @@ abstract class Flux ...@@ -87,6 +98,14 @@ abstract class Flux
*/ */
protected $reference; protected $reference;
/**
* Hash => permet de vérifier l'intégrité des données
* @var text
*
* @ORM\Column(name="hash", type="text")
*/
protected $hash;
protected $expediteur = null; protected $expediteur = null;
protected $destinataire = null; protected $destinataire = null;
protected $cotisationInfos = null; protected $cotisationInfos = null;
...@@ -202,6 +221,24 @@ abstract class Flux ...@@ -202,6 +221,24 @@ abstract class Flux
} }
/** /**
* @return string
*/
public function getRole(): ?string
{
return $this->role;
}
/**
* @param string $role
* @return Transaction
*/
public function setRole(?string $role)
{
$this->role = $role;
return $this;
}
/**
* @return float * @return float
*/ */
public function getMontant(): ?float public function getMontant(): ?float
...@@ -238,6 +275,25 @@ abstract class Flux ...@@ -238,6 +275,25 @@ abstract class Flux
} }
/** /**
* Get hash
* @return text
*/
public function getHash()
{
return $this->hash;
}
/**
* Set hash
* @return $this
*/
public function setHash($hash)
{
$this->hash = $hash;
return $this;
}
/**
* @return string * @return string
*/ */
public function getMoyen(): ?string public function getMoyen(): ?string
...@@ -260,6 +316,25 @@ abstract class Flux ...@@ -260,6 +316,25 @@ abstract class Flux
return false; return false;
} }
public function getVerify()
{
if ($this->getHash() == null) {
return 'Vide';
}
return (password_verify($this->getAllInfosUncrypted(), $this->getHash()) === true)?'Oui':'Non';
}
/**
* @ORM\PrePersist
* @param LifecycleEventArgs $event
*/
public function prePersist(LifecycleEventArgs $event)
{
$flux = $event->getEntity();
$tmphash = password_hash($flux->getAllInfosUncrypted(), PASSWORD_BCRYPT, ['cost' => 12]);
$flux->setHash($tmphash);
}
/** /**
* @ORM\PostPersist * @ORM\PostPersist
* @param LifecycleEventArgs $event * @param LifecycleEventArgs $event
...@@ -276,6 +351,22 @@ abstract class Flux ...@@ -276,6 +351,22 @@ abstract class Flux
if ($flux->getExpediteur() == $flux->getDestinataire()) { if ($flux->getExpediteur() == $flux->getDestinataire()) {
throw new \Exception("[FLUX] Opération impossible ! Expéditeur et Destinataire ne peuvent pas être les mêmes !"); throw new \Exception("[FLUX] Opération impossible ! Expéditeur et Destinataire ne peuvent pas être les mêmes !");
} }
$hash = password_hash($flux->getAllInfosUncrypted(), PASSWORD_BCRYPT, ['cost' => 12]);
$flux->setHash($hash);
$event->getEntityManager()->persist($flux);
$event->getEntityManager()->flush();
}
/**
* @Assert\Callback
* @param ExecutionContextInterface $context [description]
* @return [type] [description]
*/
public function validateConstraint(ExecutionContextInterface $context)
{
if ($this->getMoyen() == MoyenEnum::MOYEN_MLC && $this->getParenttype() == self::TYPE_COTISATION) {
$context->addViolation('Montant supérieur au solde de monnaie éléctronique.');
}
} }
public function toHtmlArray(): string public function toHtmlArray(): string
...@@ -293,6 +384,11 @@ abstract class Flux ...@@ -293,6 +384,11 @@ abstract class Flux
return $return; return $return;
} }
public function getAllInfosUncrypted(): string
{
return $_ENV['APP_SECRET'].$this->id.$this->operateur->getId().$this->role.$this->type.$this->montant.$this->moyen.$this->reference.$this->destinataire->getId().$this->expediteur->getId();
}
public function __toString(): string public function __toString(): string
{ {
if (empty($this->getDestinataire()) || empty($this->getExpediteur()) || empty($this->getMontant())) { if (empty($this->getDestinataire()) || empty($this->getExpediteur()) || empty($this->getMontant())) {
......
...@@ -34,7 +34,7 @@ class Geoloc ...@@ -34,7 +34,7 @@ class Geoloc
/** /**
* @var null|int * @var null|int
* *
* @ORM\Column(name="cpostal", type="integer", length=5, nullable=true) * @ORM\Column(name="cpostal", type="string", length=10, nullable=true)
*/ */
private $cpostal; private $cpostal;
...@@ -87,18 +87,18 @@ class Geoloc ...@@ -87,18 +87,18 @@ class Geoloc
} }
/** /**
* @return int|null * @return string|null
*/ */
public function getCpostal(): ?int public function getCpostal(): ?string
{ {
return $this->cpostal; return $this->cpostal;
} }
/** /**
* @param int|null $cpostal * @param string|null $cpostal
* @return Geoloc * @return Geoloc
*/ */
public function setCpostal(?int $cpostal) public function setCpostal(?string $cpostal)
{ {
$this->cpostal = $cpostal; $this->cpostal = $cpostal;
return $this; return $this;
......
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\GlobalParameterRepository")
*/
class GlobalParameter
{
// Default global parameters for MLC
const MLC_TITLE = 'MLC_TITLE';
const MLC_DESCRIPTION = 'MLC_DESCRIPTION';
const MLC_KEYWORDS = 'MLC_KEYWORDS';
const MLC_NAME = 'MLC_NAME';
const MLC_NAME_SMALL = 'MLC_NAME_SMALL';
const MLC_NOTIF_EMAIL = 'MLC_NOTIF_EMAIL';
const COTISATION_MONTANT= 'COTISATION_MONTANT';
const MAP_CENTER = 'MAP_CENTER';
const MAP_ZOOM = 'MAP_ZOOM';
const FAVICON_URL = 'FAVICON_URL';
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="text")
*/
private $value;
/**
* @ORM\Column(type="boolean")
*/
private $mandatory;
public function __toString()
{
return $this->getName(). ' => '.$this->getValue();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getValue(): ?string
{
return $this->value;
}
public function setValue(string $value): self
{
$this->value = $value;
return $this;
}
/**
* Get mandatory
* @return
*/
public function getMandatory()
{
return $this->mandatory;
}
/**
* Set mandatory
* @return $this
*/
public function setMandatory($mandatory)
{
$this->mandatory = $mandatory;
return $this;
}
}
...@@ -34,7 +34,7 @@ class Groupe ...@@ -34,7 +34,7 @@ class Groupe
/** /**
* @var Siege * @var Siege
* *
* @ORM\ManyToOne(targetEntity="Siege", inversedBy="groupes") * @ORM\ManyToOne(targetEntity="Siege", inversedBy="groupes", cascade={"persist"})
* @ORM\JoinColumn(name="siege_id", referencedColumnName="id", nullable=false) * @ORM\JoinColumn(name="siege_id", referencedColumnName="id", nullable=false)
*/ */
private $siege; private $siege;
...@@ -69,7 +69,7 @@ class Groupe ...@@ -69,7 +69,7 @@ class Groupe
/** /**
* @var ArrayCollection|User[] * @var ArrayCollection|User[]
* @ORM\OneToMany(targetEntity="User", mappedBy="groupesgere", fetch="EXTRA_LAZY") * @ORM\ManyToMany(targetEntity="User", inversedBy="groupesgeres", fetch="EXTRA_LAZY")
*/ */
private $gestionnaires; private $gestionnaires;
...@@ -79,6 +79,7 @@ class Groupe ...@@ -79,6 +79,7 @@ class Groupe
$this->prestataires = new ArrayCollection(); $this->prestataires = new ArrayCollection();
$this->adherents = new ArrayCollection(); $this->adherents = new ArrayCollection();
$this->groupeprestataires = new ArrayCollection(); $this->groupeprestataires = new ArrayCollection();
$this->gestionnaires = new ArrayCollection();
} }
/** /**
...@@ -130,7 +131,7 @@ class Groupe ...@@ -130,7 +131,7 @@ class Groupe
* @param Comptoir $comptoir * @param Comptoir $comptoir
* @return $this * @return $this
*/ */
public function addComptoir(Comptoir $comptoir) public function addComptoir(Comptoir $comptoir): self
{ {
if (!$this->comptoirs->contains($comptoir)) { if (!$this->comptoirs->contains($comptoir)) {
$this->comptoirs[] = $comptoir; $this->comptoirs[] = $comptoir;
...@@ -143,7 +144,7 @@ class Groupe ...@@ -143,7 +144,7 @@ class Groupe
* @param Comptoir $comptoir * @param Comptoir $comptoir
* @return $this * @return $this
*/ */
public function removeComptoir(Comptoir $comptoir) public function removeComptoir(Comptoir $comptoir): self
{ {
if ($this->comptoirs->contains($comptoir)) { if ($this->comptoirs->contains($comptoir)) {
$this->comptoirs->removeElement($comptoir); $this->comptoirs->removeElement($comptoir);
...@@ -164,11 +165,10 @@ class Groupe ...@@ -164,11 +165,10 @@ class Groupe
* @param Prestataire $prestataire * @param Prestataire $prestataire
* @return $this * @return $this
*/ */
public function addPrestataire(Prestataire $prestataire) public function addPrestataire(Prestataire $prestataire): self
{ {
if (!$this->prestataires->contains($prestataire)) { if (!$this->prestataires->contains($prestataire)) {
$this->prestataires[] = $prestataire; $this->prestataires[] = $prestataire;
$prestataire->setGroupe($this);
} }
return $this; return $this;
} }
...@@ -177,11 +177,10 @@ class Groupe ...@@ -177,11 +177,10 @@ class Groupe
* @param Prestataire $prestataire * @param Prestataire $prestataire
* @return $this * @return $this
*/ */
public function removePrestataire(Prestataire $prestataire) public function removePrestataire(Prestataire $prestataire): self
{ {
if ($this->prestataires->contains($prestataire)) { if ($this->prestataires->contains($prestataire)) {
$this->prestataires->removeElement($prestataire); $this->prestataires->removeElement($prestataire);
$prestataire->setGroupe(null);
} }
return $this; return $this;
} }
...@@ -198,7 +197,7 @@ class Groupe ...@@ -198,7 +197,7 @@ class Groupe
* @param Adherent $adherent * @param Adherent $adherent
* @return $this * @return $this
*/ */
public function addAdherent(Adherent $adherent) public function addAdherent(Adherent $adherent): self
{ {
if (!$this->adherents->contains($adherent)) { if (!$this->adherents->contains($adherent)) {
$this->adherents[] = $adherent; $this->adherents[] = $adherent;
...@@ -211,7 +210,7 @@ class Groupe ...@@ -211,7 +210,7 @@ class Groupe
* @param Adherent $adherent * @param Adherent $adherent
* @return $this * @return $this
*/ */
public function removeAdherent(Adherent $adherent) public function removeAdherent(Adherent $adherent): self
{ {
if ($this->adherents->contains($adherent)) { if ($this->adherents->contains($adherent)) {
$this->adherents->removeElement($adherent); $this->adherents->removeElement($adherent);
...@@ -229,14 +228,23 @@ class Groupe ...@@ -229,14 +228,23 @@ class Groupe
} }
/** /**
* @param User[]|ArrayCollection
* @return $this
*/
public function setGestionnaires($gestionnaires): self
{
$this->gestionnaires = $gestionnaires;
return $this;
}
/**
* @param User $gestionnaire * @param User $gestionnaire
* @return $this * @return $this
*/ */
public function addGestionnaire(User $gestionnaire) public function addGestionnaire(User $gestionnaire): self
{ {
if (!$this->gestionnaires->contains($gestionnaire)) { if (!$this->gestionnaires->contains($gestionnaire)) {
$this->gestionnaires[] = $gestionnaire; $this->gestionnaires[] = $gestionnaire;
$gestionnaire->setGestionnaireGroupe($this);
} }
return $this; return $this;
} }
...@@ -245,11 +253,10 @@ class Groupe ...@@ -245,11 +253,10 @@ class Groupe
* @param User $gestionnaire * @param User $gestionnaire
* @return $this * @return $this
*/ */
public function removeGestionnaire(User $gestionnaire) public function removeGestionnaire(User $gestionnaire): self
{ {
if ($this->gestionnaires->contains($gestionnaire)) { if ($this->gestionnaires->contains($gestionnaire)) {
$this->gestionnaires->removeElement($gestionnaire); $this->gestionnaires->removeElement($gestionnaire);
$gestionnaire->setGestionnaireGroupe(null);
} }
return $this; return $this;
} }
...@@ -266,7 +273,7 @@ class Groupe ...@@ -266,7 +273,7 @@ class Groupe
* @param Amap $amap * @param Amap $amap
* @return $this * @return $this
*/ */
public function addGroupeprestataire(Groupeprestataire $groupeprestataire) public function addGroupeprestataire(Groupeprestataire $groupeprestataire): self
{ {
if (!$this->groupeprestataires->contains($groupeprestataire)) { if (!$this->groupeprestataires->contains($groupeprestataire)) {
$this->groupeprestataires[] = $groupeprestataire; $this->groupeprestataires[] = $groupeprestataire;
...@@ -279,7 +286,7 @@ class Groupe ...@@ -279,7 +286,7 @@ class Groupe
* @param Amap $amap * @param Amap $amap
* @return $this * @return $this
*/ */
public function removeGroupeprestataire(Groupeprestataire $groupeprestataires) public function removeGroupeprestataire(Groupeprestataire $groupeprestataires): self
{ {
if ($this->groupeprestataires->contains($groupeprestataire)) { if ($this->groupeprestataires->contains($groupeprestataire)) {
$this->groupeprestataires->removeElement($groupeprestataire); $this->groupeprestataires->removeElement($groupeprestataire);
......
...@@ -80,9 +80,8 @@ class Prestataire ...@@ -80,9 +80,8 @@ class Prestataire
private $responsable; private $responsable;
/** /**
* @var string * @ORM\Column(name="iban", type="string", length=100, nullable=true)
* * @Assert\Iban(message="L'IBAN(International Bank Account Number) est invalide.")
* @ORM\Column(name="iban", type="string", length=100)
*/ */
private $iban; private $iban;
...@@ -97,15 +96,18 @@ class Prestataire ...@@ -97,15 +96,18 @@ class Prestataire
* @var null|string * @var null|string
* *
* @ORM\Column(name="web", type="string", length=255, nullable=true) * @ORM\Column(name="web", type="string", length=255, nullable=true)
* @Assert\Url(message = "L'adresse : '{{ value }}' est invalide.")
*/ */
private $web; private $web;
/** /**
* Le prestataire peut recevoir des cotisations (En règle générale, l'association gérant la monnaie locale)
* Ce prestataire est normalement crée à l'installation du kohinos
* @var bool * @var bool
* *
* @ORM\Column(name="accept", type="boolean", nullable=false) * @ORM\Column(name="mlc", type="boolean", nullable=false, options={"default" : false})
*/ */
private $accept = false; private $mlc = false;
/** /**
* @var null|string (champ libre) * @var null|string (champ libre)
...@@ -136,16 +138,16 @@ class Prestataire ...@@ -136,16 +138,16 @@ class Prestataire
protected $media; protected $media;
/** /**
* @var User * @var ArrayCollection|User[]
* *
* @ORM\OneToOne(targetEntity="User", cascade={"all"}, mappedBy="prestataire", fetch="LAZY") * @ORM\ManyToMany(targetEntity="User", inversedBy="prestataires", cascade={"persist"})
*/ */
protected $user; protected $users;
/** /**
* @var Groupe $groupe * @var Groupe $groupe
* *
* @ORM\ManyToOne(targetEntity="Groupe", inversedBy="prestataires") * @ORM\ManyToOne(targetEntity="Groupe", inversedBy="prestataires", cascade={"persist"})
* @Assert\NotBlank * @Assert\NotBlank
*/ */
private $groupe; private $groupe;
...@@ -279,7 +281,7 @@ class Prestataire ...@@ -279,7 +281,7 @@ class Prestataire
* @param string $iban * @param string $iban
* @return Prestataire * @return Prestataire
*/ */
public function setIban(string $iban) public function setIban(?string $iban)
{ {
$this->iban = $iban; $this->iban = $iban;
return $this; return $this;
...@@ -297,7 +299,7 @@ class Prestataire ...@@ -297,7 +299,7 @@ class Prestataire
* @param string $siret * @param string $siret
* @return Prestataire * @return Prestataire
*/ */
public function setSiret(string $siret) public function setSiret(?string $siret)
{ {
$this->siret = $siret; $this->siret = $siret;
return $this; return $this;
...@@ -324,36 +326,62 @@ class Prestataire ...@@ -324,36 +326,62 @@ class Prestataire
/** /**
* @return bool * @return bool
*/ */
public function isAccept(): bool public function isMlc(): bool
{ {
return $this->accept; return $this->mlc;
} }
/** /**
* @param bool $accept * @param bool $mlc
* @return Prestataire * @return Prestataire
*/ */
public function setAccept(bool $accept) public function setMlc(bool $mlc)
{ {
$this->accept = $accept; $this->mlc = $mlc;
return $this; return $this;
} }
/** /**
* @return User * @return ArrayCollection[]|User
*/ */
public function getUser(): ?User public function getUsers()
{ {
return $this->user; return $this->users;
} }
/** /**
* @param User $user * @param User $user
* @return $this
*/
public function addUser(User $user)
{
if (!$this->users->contains($user)) {
$this->users[] = $user;
$user->addPrestataire($this);
}
return $this;
}
/**
* @param User $user
* @return $this
*/
public function removeUser(User $users)
{
if ($this->users->contains($user)) {
$this->users->removeElement($user);
$user->removePrestataire($this);
}
return $this;
}
/**
* @param ArrayCollection[]|User $users
* @return Prestataire * @return Prestataire
*/ */
public function setUser(User $user): self public function setUsers($users): self
{ {
$this->user = $user; $this->users = $users;
return $this; return $this;
} }
...@@ -512,6 +540,6 @@ class Prestataire ...@@ -512,6 +540,6 @@ class Prestataire
public function __toString(): string public function __toString(): string
{ {
return ($this->raison?$this->raison:($this->getUser()?$this->getUser()->getFullname():'Prestataire')); return ($this->raison?$this->raison:'Prestataire');
} }
} }
...@@ -44,9 +44,4 @@ abstract class Retrait extends Flux ...@@ -44,9 +44,4 @@ abstract class Retrait extends Flux
} }
return []; return [];
} }
public function getUsersToNotify()
{
return array_merge($this->getExpediteur()->getGestionnaires()->toArray(), [$this->getDestinataire()->getUser()]);
}
} }
...@@ -25,4 +25,9 @@ class RetraitComptoirAdherent extends Retrait ...@@ -25,4 +25,9 @@ class RetraitComptoirAdherent extends Retrait
{ {
return 'retrait_adherent'; return 'retrait_adherent';
} }
public function getUsersToNotify()
{
return array_merge($this->getExpediteur()->getGestionnaires()->toArray(), [$this->getDestinataire()->getUser()]);
}
} }
...@@ -25,4 +25,9 @@ class RetraitComptoirPrestataire extends Retrait ...@@ -25,4 +25,9 @@ class RetraitComptoirPrestataire extends Retrait
{ {
return 'retrait_prestataire'; return 'retrait_prestataire';
} }
public function getUsersToNotify()
{
return array_merge($this->getExpediteur()->getGestionnaires()->toArray(), $this->getDestinataire()->getUsers()->toArray());
}
} }
...@@ -43,6 +43,6 @@ class TransfertPrestataireComptoir extends Transfert ...@@ -43,6 +43,6 @@ class TransfertPrestataireComptoir extends Transfert
public function getUsersToNotify() public function getUsersToNotify()
{ {
return array_merge($this->getDestinataire()->getGestionnaires()->toArray(), [$this->getExpediteur()->getUser()]); return array_merge($this->getDestinataire()->getGestionnaires()->toArray(), $this->getExpediteur()->getUsers()->toArray());
} }
} }
...@@ -59,8 +59,8 @@ class TransfertPrestataireSiege extends Transfert ...@@ -59,8 +59,8 @@ class TransfertPrestataireSiege extends Transfert
public function operate() public function operate()
{ {
$flux->getExpediteur()->removeEcompte($this->getMontant()); $this->getExpediteur()->removeEcompte($this->getMontant());
$flux->getDestinataire()->addCompte($this->getMontant()); $this->getDestinataire()->addCompte($this->getMontant());
$this->getDestinataire()->removeCompteNantie($this->getMontant()); $this->getDestinataire()->removeCompteNantie($this->getMontant());
return [$this->getExpediteur(), $this->getDestinataire()]; return [$this->getExpediteur(), $this->getDestinataire()];
...@@ -69,6 +69,6 @@ class TransfertPrestataireSiege extends Transfert ...@@ -69,6 +69,6 @@ class TransfertPrestataireSiege extends Transfert
public function getUsersToNotify() public function getUsersToNotify()
{ {
// @TODO : notify siege ? // @TODO : notify siege ?
return [$this->getExpediteur()->getUser()]; return $this->getExpediteur()->getUsers()->toArray();
} }
} }
...@@ -12,7 +12,7 @@ use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; ...@@ -12,7 +12,7 @@ use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
/** /**
* @ORM\Entity() * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @ORM\Table(name="user") * @ORM\Table(name="user")
* @UniqueEntity( * @UniqueEntity(
* fields={"firstname", "lastname", "email"}, * fields={"firstname", "lastname", "email"},
...@@ -42,18 +42,6 @@ class User extends BaseUser ...@@ -42,18 +42,6 @@ class User extends BaseUser
protected $mobile; protected $mobile;
/** /**
* @ORM\OneToOne(targetEntity="Adherent", inversedBy="user", cascade={"all"})
* @ORM\JoinColumn(name="adherent_id", referencedColumnName="id", nullable=true)
*/
protected $adherent;
/**
* @ORM\OneToOne(targetEntity="Prestataire", inversedBy="user", cascade={"all"})
* @ORM\JoinColumn(name="prestataire_id", referencedColumnName="id", nullable=true)
*/
protected $prestataire;
/**
* @var ArrayCollection|Document[] * @var ArrayCollection|Document[]
* *
* @ORM\OneToMany(targetEntity="Document", mappedBy="user", cascade={"persist"}) * @ORM\OneToMany(targetEntity="Document", mappedBy="user", cascade={"persist"})
...@@ -87,16 +75,37 @@ class User extends BaseUser ...@@ -87,16 +75,37 @@ class User extends BaseUser
private $emailTokens; private $emailTokens;
/** /**
* @TODO : changer en manytomany pour qu'un user puisse géré plusieurs groupes ? * @ORM\OneToOne(targetEntity="Adherent", inversedBy="user", cascade={"all"}, fetch="EXTRA_LAZY")
* @ORM\ManyToOne(targetEntity="Groupe", inversedBy="gestionnaires", cascade={"all"}) * @ORM\JoinColumn(name="adherent_id", referencedColumnName="id", nullable=true)
*/
protected $adherent;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Prestataire", mappedBy="users", cascade={"persist"})
* @ORM\JoinTable(name="user_prestataire",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="prestataire_id", referencedColumnName="id")}
* )
*/ */
private $groupesgere; protected $prestataires;
/** /**
* @TODO : changer en manytomany pour qu'un user puisse géré plusieurs comptoirs ? * @ORM\ManyToMany(targetEntity="App\Entity\Groupe", mappedBy="gestionnaires", cascade={"persist"}, fetch="LAZY")
* @ORM\ManyToOne(targetEntity="Comptoir", inversedBy="gestionnaires", cascade={"all"}) * @ORM\JoinTable(name="user_groupe",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="groupe_id", referencedColumnName="id")}
* )
*/ */
private $comptoirsgere; private $groupesgeres;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Comptoir", mappedBy="gestionnaires", cascade={"persist"}, fetch="LAZY")
* @ORM\JoinTable(name="user_comptoir",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="comptoir_id", referencedColumnName="id")}
* )
*/
private $comptoirsgeres;
/** /**
* @ORM\Column(name="apiKey", type="string", length=255, nullable=true) * @ORM\Column(name="apiKey", type="string", length=255, nullable=true)
...@@ -128,9 +137,9 @@ class User extends BaseUser ...@@ -128,9 +137,9 @@ class User extends BaseUser
* Alerte email à chaque transaction concernant l'utilisateur * Alerte email à chaque transaction concernant l'utilisateur
* @var bool * @var bool
* *
* @ORM\Column(name="alertemailflux", type="boolean", nullable=false) * @ORM\Column(name="alertemailflux", type="boolean", options={"default" : true})
*/ */
protected $alertemailflux; protected $alertemailflux = true;
public function __construct() public function __construct()
{ {
...@@ -138,6 +147,9 @@ class User extends BaseUser ...@@ -138,6 +147,9 @@ class User extends BaseUser
$this->cotisations = new ArrayCollection(); $this->cotisations = new ArrayCollection();
$this->flux = new ArrayCollection(); $this->flux = new ArrayCollection();
$this->emailTokens = new ArrayCollection(); $this->emailTokens = new ArrayCollection();
$this->prestataires = new ArrayCollection();
$this->groupesgeres = new ArrayCollection();
$this->comptoirsgeres = new ArrayCollection();
$this->faqs = new ArrayCollection(); $this->faqs = new ArrayCollection();
$this->news = new ArrayCollection(); $this->news = new ArrayCollection();
$this->alertemailflux = true; $this->alertemailflux = true;
...@@ -177,7 +189,7 @@ class User extends BaseUser ...@@ -177,7 +189,7 @@ class User extends BaseUser
* @param null|string $etat * @param null|string $etat
* @return Prestataire * @return Prestataire
*/ */
public function setEtat(?string $etat) public function setEtat(?string $etat): self
{ {
$this->etat = $etat; $this->etat = $etat;
return $this; return $this;
...@@ -261,21 +273,45 @@ class User extends BaseUser ...@@ -261,21 +273,45 @@ class User extends BaseUser
} }
/** /**
* Get prestataire * Get prestataires
* @return * @return
*/ */
public function getPrestataire() public function getPrestataires()
{ {
return $this->prestataire; return $this->prestataires;
}
/**
* @param Prestataire $prestataire
* @return $this
*/
public function addPrestataire(Prestataire $prestataire): self
{
if (!$this->prestataires->contains($prestataire)) {
$this->prestataires[] = $prestataire;
}
return $this;
}
/**
* @param Prestataire $prestataire
* @return $this
*/
public function removePrestataire(Prestataire $prestataires): self
{
if ($this->prestataires->contains($prestataire)) {
$this->prestataires->removeElement($prestataire);
}
return $this;
} }
/** /**
* Set prestataire * Set prestataire
* @return $this * @return $this
*/ */
public function setPrestataire($prestataire): self public function setPrestataires($prestataires): self
{ {
$this->prestataire = $prestataire; $this->prestataires = $prestataires;
return $this; return $this;
} }
...@@ -300,7 +336,7 @@ class User extends BaseUser ...@@ -300,7 +336,7 @@ class User extends BaseUser
* @param $cotisation * @param $cotisation
* @return $this * @return $this
*/ */
public function addCotisation($cotisation) public function addCotisation($cotisation): self
{ {
if (!$this->flux->contains($cotisation)) { if (!$this->flux->contains($cotisation)) {
$cotisation->setOperateur($this); $cotisation->setOperateur($this);
...@@ -313,7 +349,7 @@ class User extends BaseUser ...@@ -313,7 +349,7 @@ class User extends BaseUser
* @param Cotisation $cotisation * @param Cotisation $cotisation
* @return $this * @return $this
*/ */
public function removeCotisation(Cotisation $cotisation) public function removeCotisation(Cotisation $cotisation): self
{ {
throw new \LogicException('User::removeCotisation : This code should not be reached!'); throw new \LogicException('User::removeCotisation : This code should not be reached!');
// if ($this->cotisations->contains($cotisation)) { // if ($this->cotisations->contains($cotisation)) {
...@@ -334,7 +370,7 @@ class User extends BaseUser ...@@ -334,7 +370,7 @@ class User extends BaseUser
* @param Flux $flux * @param Flux $flux
* @return $this * @return $this
*/ */
public function addFlux(Flux $flux) public function addFlux(Flux $flux): self
{ {
if (!$this->flux->contains($flux)) { if (!$this->flux->contains($flux)) {
$this->flux[] = $flux; $this->flux[] = $flux;
...@@ -347,7 +383,7 @@ class User extends BaseUser ...@@ -347,7 +383,7 @@ class User extends BaseUser
* @param Flux $flux * @param Flux $flux
* @return $this * @return $this
*/ */
public function removeFlux(Flux $flux) public function removeFlux(Flux $flux): self
{ {
throw new \LogicException('User::removeFlux : Ce code ne devrait jamais être atteint !'); throw new \LogicException('User::removeFlux : Ce code ne devrait jamais être atteint !');
// if ($this->flux->contains($flux)) { // if ($this->flux->contains($flux)) {
...@@ -357,39 +393,92 @@ class User extends BaseUser ...@@ -357,39 +393,92 @@ class User extends BaseUser
} }
/** /**
* @param null|Groupe $groupesgere * @return Groupesgere[]|ArrayCollection
*/
public function getGroupesgeres()
{
return $this->groupesgeres;
}
/**
* @param Groupesgere[]|ArrayCollection
* @return this
*/
public function setGroupesgeres($groupesgeres): self
{
$this->groupesgeres = $groupesgeres;
return $this;
}
/**
* @param Groupesgere $groupesgere
* @return $this
*/
public function addGroupesgere(Groupe $groupesgere): self
{
if (!$this->groupesgeres->contains($groupesgere)) {
$this->groupesgeres[] = $groupesgere;
$groupesgere->addGestionnaire($this);
}
return $this;
}
/**
* @param Groupesgere $groupesgere
* @return $this * @return $this
*/ */
public function setGroupesgere(?Groupe $groupesgere) public function removeGroupesgere(Groupe $groupesgeres): self
{ {
$this->groupesgere = $groupesgere; if ($this->groupesgeres->contains($groupesgere)) {
$this->groupesgeres->removeElement($groupesgere);
$groupesgere->removeGestionnaire($this);
}
return $this; return $this;
} }
/** /**
* @return null|Groupe * @return Comptoirsgere[]|ArrayCollection
*/ */
public function getGroupesgere(): ?Groupe public function getComptoirsgeres()
{ {
return $this->groupesgere; return $this->comptoirsgeres;
} }
/** /**
* @param null|Comptoir $comptoirsgere * @param Comptoirsgere[]|ArrayCollection
* @return this
*/
public function setComptoirsgeres($comptoirsgeres): self
{
$this->comptoirsgeres = $comptoirsgeres;
return $this;
}
/**
* @param Comptoirsgere $comptoirsgere
* @return $this * @return $this
*/ */
public function setComptoirsgere(?Comptoir $comptoirsgere) public function addComptoirsgere(Comptoir $comptoirsgere): self
{ {
$this->comptoirsgere = $comptoirsgere; if (!$this->comptoirsgeres->contains($comptoirsgere)) {
$this->comptoirsgeres[] = $comptoirsgere;
$comptoirsgere->addGestionnaire($this);
}
return $this; return $this;
} }
/** /**
* @return null|Comptoir * @param Comptoirsgere $comptoirsgere
* @return $this
*/ */
public function getComptoirsgere(): ?Comptoir public function removeComptoirsgere(Comptoir $comptoirsgeres): self
{ {
return $this->comptoirsgere; if ($this->comptoirsgeres->contains($comptoirsgere)) {
$this->comptoirsgeres->removeElement($comptoirsgere);
$comptoirsgere->removeGestionnaire($this);
}
return $this;
} }
public function createEmailToken() public function createEmailToken()
...@@ -509,7 +598,7 @@ class User extends BaseUser ...@@ -509,7 +598,7 @@ class User extends BaseUser
* Set alertemailflux * Set alertemailflux
* @return $this * @return $this
*/ */
public function setAlertemailflux($alertemailflux) public function setAlertemailflux($alertemailflux): self
{ {
$this->alertemailflux = $alertemailflux; $this->alertemailflux = $alertemailflux;
return $this; return $this;
......
...@@ -43,9 +43,4 @@ abstract class Vente extends Flux ...@@ -43,9 +43,4 @@ abstract class Vente extends Flux
} }
return []; return [];
} }
public function getUsersToNotify()
{
return array_merge($this->getExpediteur()->getGestionnaires()->toArray(), [$this->getDestinataire()->getUser()]);
}
} }
...@@ -25,4 +25,9 @@ class VenteComptoirAdherent extends Vente ...@@ -25,4 +25,9 @@ class VenteComptoirAdherent extends Vente
{ {
return 'comptoir_adherent'; return 'comptoir_adherent';
} }
public function getUsersToNotify()
{
return array_merge($this->getExpediteur()->getGestionnaires()->toArray(), [$this->getDestinataire()->getUser()]);
}
} }
...@@ -25,4 +25,9 @@ class VenteComptoirPrestataire extends Vente ...@@ -25,4 +25,9 @@ class VenteComptoirPrestataire extends Vente
{ {
return 'comptoir_prestataire'; return 'comptoir_prestataire';
} }
public function getUsersToNotify()
{
return array_merge($this->getExpediteur()->getGestionnaires()->toArray(), $this->getDestinataire()->getUsers()->toArray());
}
} }
<?php <?php
namespace App\EventListener; namespace App\EventListener;
use App\Entity\Adherent;
use App\Entity\EntityTrait\GeolocEntityTrait;
use App\Entity\Geoloc; use App\Entity\Geoloc;
use App\Entity\Prestataire;
use App\Entity\User;
use Doctrine\Common\Persistence\Event\LifecycleEventArgs; use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs; use Doctrine\ORM\Event\PreUpdateEventArgs;
use Geocoder\Provider\Nominatim\Nominatim; use Geocoder\Provider\Nominatim\Nominatim;
......
...@@ -4,6 +4,7 @@ namespace App\EventListener; ...@@ -4,6 +4,7 @@ namespace App\EventListener;
use App\Events\MLCEvents; use App\Events\MLCEvents;
use App\Events\FluxEvent; use App\Events\FluxEvent;
use App\Entity\Flux; use App\Entity\Flux;
use App\Entity\GlobalParameter;
use App\Entity\User; use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use FOS\UserBundle\Event\FormEvent; use FOS\UserBundle\Event\FormEvent;
...@@ -75,9 +76,9 @@ class MLCEventListener implements EventSubscriberInterface ...@@ -75,9 +76,9 @@ class MLCEventListener implements EventSubscriberInterface
private function sendMail(User $user, Flux $flux) private function sendMail(User $user, Flux $flux)
{ {
$subject = $this->params->get('app.mlc_name_small').' : '.ucwords($flux->getParenttype()).' '.ucwords($flux->getType()); $subject = $this->em->getRepository(GlobalParameter::class)->val(GlobalParameter::MLC_NAME_SMALL).' : '.ucwords($flux->getParenttype()).' '.ucwords($flux->getType());
$mail = (new \Swift_Message($subject)) $mail = (new \Swift_Message($subject))
->setFrom($this->params->get('app.mlc_notif_email')) ->setFrom($this->em->getRepository(GlobalParameter::class)->val(GlobalParameter::MLC_NOTIF_EMAIL))
->setTo($user->getEmail()) ->setTo($user->getEmail())
->setBody( ->setBody(
$this->templating->render( $this->templating->render(
...@@ -103,8 +104,6 @@ class MLCEventListener implements EventSubscriberInterface ...@@ -103,8 +104,6 @@ class MLCEventListener implements EventSubscriberInterface
public function onTransfert(FluxEvent $event) public function onTransfert(FluxEvent $event)
{ {
if ($event->getUsers()) {
}
} }
public function onDepot(FluxEvent $event) public function onDepot(FluxEvent $event)
......
...@@ -23,24 +23,36 @@ class SwitchUserSubscriber implements EventSubscriberInterface ...@@ -23,24 +23,36 @@ class SwitchUserSubscriber implements EventSubscriberInterface
public function onSwitchUser(SwitchUserEvent $event) public function onSwitchUser(SwitchUserEvent $event)
{ {
// $request = $event->getRequest(); $request = $event->getRequest();
$token = $event->getToken();
$user = $event->getTargetUser();
// if ($request->hasSession() && $request->getSession()->has('_groupId')) { $request->getSession()->remove('_prestagere');
// $group = $request->getSession()->get('_groupId'); $request->getSession()->remove('_comptoirgere');
// if ($group->getRoles()->contains('ROLE_SUPER_ADMIN')) { $request->getSession()->remove('_groupegere');
// return new RedirectResponse($this->router->generate('sonata_admin_dashboard')); if ($request->hasSession() && $request->getSession()->has('_groupId') &&
// } !$user->getGroups()->contains($request->getSession()->get('_groupId'))) {
// } $request->getSession()->remove('_groupId');
}
// return new RedirectResponse($this->router->generate('index')); if (!$request->getSession()->has('_groupId')) {
if (count($user->getGroups()) > 1) {
// if ($request->hasSession() && ($session = $request->getSession)) { $request->getSession()->set('_choixGroup', 'true');
// $session->set( } else {
// '_locale', $request->getSession()->set('_groupId', $user->getGroups()[0]);
// // assuming your User has some getLocale() method foreach ($user->getGroups() as $groupe) {
// $event->getTargetUser()->getLocale() if (in_array('ROLE_SUPER_ADMIN', $groupe->getRoles())) {
// ); $request->getSession()->remove('_choixGroup');
// } }
if (in_array('ROLE_PRESTATAIRE', $groupe->getRoles()) && count($user->getPrestataires()) >= 1) {
$request->getSession()->set('_prestagere', $user->getPrestataires()[0]);
} elseif (in_array('ROLE_COMPTOIR', $groupe->getRoles()) && count($user->getComptoirsGeres()) >= 1) {
$request->getSession()->set('_comptoirgere', $user->getComptoirsGeres()[0]);
} elseif ((in_array('ROLE_TRESORIER', $groupe->getRoles()) || in_array('ROLE_CONTACT', $groupe->getRoles()) || in_array('ROLE_GESTION_GROUPE', $groupe->getRoles())) && count($user->getGroupesGeres()) >= 1) {
$request->getSession()->set('_groupegere', $user->getGroupesGeres()[0]);
}
}
}
}
} }
public static function getSubscribedEvents() public static function getSubscribedEvents()
......
...@@ -4,7 +4,7 @@ namespace App\Events; ...@@ -4,7 +4,7 @@ namespace App\Events;
/** /**
* Tous les évènements * Tous les évènements
* *
* LOCO : Outil de gestion de Monnaie Locale Complémentaire * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
* @author Julien Jorry <julien.jorry@gmail.com> * @author Julien Jorry <julien.jorry@gmail.com>
*/ */
final class MLCEvents final class MLCEvents
......
...@@ -44,17 +44,20 @@ use App\Form\Type\VenteComptoirPrestataireFormType; ...@@ -44,17 +44,20 @@ use App\Form\Type\VenteComptoirPrestataireFormType;
use App\Form\Type\UserInfosFormType; use App\Form\Type\UserInfosFormType;
use FOS\UserBundle\Form\Type\ChangePasswordFormType; use FOS\UserBundle\Form\Type\ChangePasswordFormType;
use Symfony\Component\Form\FormFactoryInterface as FormF; use Symfony\Component\Form\FormFactoryInterface as FormF;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Routing\RouterInterface;
class FormFactory class FormFactory
{ {
public $ff; public $ff;
public $router; public $router;
public $session;
public function __construct(FormF $ff, RouterInterface $router) public function __construct(FormF $ff, RouterInterface $router, SessionInterface $session)
{ {
$this->ff = $ff; $this->ff = $ff;
$this->router = $router; $this->router = $router;
$this->session = $session;
} }
public function getUserInfosForm(User $user) public function getUserInfosForm(User $user)
...@@ -79,30 +82,30 @@ class FormFactory ...@@ -79,30 +82,30 @@ class FormFactory
public function getGroupeInfosForm(User $user) public function getGroupeInfosForm(User $user)
{ {
if (empty($user) || empty($user->getGroupesgere())) { if (empty($user) || empty($this->session->get('_groupegere'))) {
throw new \Exception("[FORM 2] Opération impossible !"); throw new \Exception("[FORM 2] Opération impossible !");
} }
$form = $this->ff->create(GroupeInfosFormType::class, $user->getGroupesgere(), array('action' => $this->router->generate('groupe_infos'))); $form = $this->ff->create(GroupeInfosFormType::class, $this->session->get('_groupegere'), array('action' => $this->router->generate('groupe_infos')));
return $form->createView(); return $form->createView();
} }
public function getComptoirInfosForm(User $user) public function getComptoirInfosForm(User $user)
{ {
if (empty($user) || empty($user->getComptoirsgere())) { if (empty($user) || empty($this->session->get('_comptoirgere'))) {
throw new \Exception("[FORM 3] Opération impossible !"); throw new \Exception("[FORM 3] Opération impossible !");
} }
$form = $this->ff->create(ComptoirInfosFormType::class, $user->getComptoirsgere(), array('action' => $this->router->generate('comptoir_infos'))); $form = $this->ff->create(ComptoirInfosFormType::class, $this->session->get('_comptoirgere'), array('action' => $this->router->generate('comptoir_infos')));
return $form->createView(); return $form->createView();
} }
public function getPrestataireInfosForm(User $user) public function getPrestataireInfosForm(User $user)
{ {
if (empty($user) || empty($user->getPrestataire())) { if (empty($user) || empty($this->session->get('_prestagere'))) {
throw new \Exception("[FORM 4] Opération impossible !"); throw new \Exception("[FORM 4] Opération impossible !");
} }
$form = $this->ff->create(PrestataireInfosFormType::class, $user->getPrestataire(), array('action' => $this->router->generate('prestataire_infos'))); $form = $this->ff->create(PrestataireInfosFormType::class, $this->session->get('_prestagere'), array('action' => $this->router->generate('prestataire_infos')));
return $form->createView(); return $form->createView();
} }
...@@ -119,10 +122,10 @@ class FormFactory ...@@ -119,10 +122,10 @@ class FormFactory
public function getGroupePrestataireInscriptionForm(User $user) public function getGroupePrestataireInscriptionForm(User $user)
{ {
if (empty($user) || empty($user->getPrestataire())) { if (empty($user) || empty($this->session->get('_prestagere'))) {
throw new \Exception("[FORM 6] Opération impossible !"); throw new \Exception("[FORM 6] Opération impossible !");
} }
$form = $this->ff->create(GroupePrestataireInscriptionFormType::class, $user->getPrestataire(), array('action' => $this->router->generate('groupeprestataire_inscription'))); $form = $this->ff->create(GroupePrestataireInscriptionFormType::class, $this->session->get('_prestagere'), array('action' => $this->router->generate('groupeprestataire_inscription')));
return $form->createView(); return $form->createView();
} }
...@@ -155,12 +158,12 @@ class FormFactory ...@@ -155,12 +158,12 @@ class FormFactory
public function getTransactionPrestataireAdherentForm(User $user) public function getTransactionPrestataireAdherentForm(User $user)
{ {
if (empty($user) || empty($user->getPrestataire())) { if (empty($user) || empty($this->session->get('_prestagere'))) {
throw new \Exception("[FORM] Opération impossible !"); throw new \Exception("[FORM] Opération impossible !");
} }
$entity = new TransactionPrestataireAdherent(); $entity = new TransactionPrestataireAdherent();
$entity->setOperateur($user); $entity->setOperateur($user);
$entity->setExpediteur($user->getPrestataire()); $entity->setExpediteur($this->session->get('_prestagere'));
$form = $this->ff->create(TransactionPrestataireAdherentFormType::class, $entity, array('action' => $this->router->generate('transactionPrestataireAdherent'))); $form = $this->ff->create(TransactionPrestataireAdherentFormType::class, $entity, array('action' => $this->router->generate('transactionPrestataireAdherent')));
return $form->createView(); return $form->createView();
...@@ -168,12 +171,12 @@ class FormFactory ...@@ -168,12 +171,12 @@ class FormFactory
public function getTransactionPrestatairePrestataireForm(User $user) public function getTransactionPrestatairePrestataireForm(User $user)
{ {
if (empty($user) || empty($user->getPrestataire())) { if (empty($user) || empty($this->session->get('_prestagere'))) {
throw new \Exception("[FORM 9] Opération impossible !"); throw new \Exception("[FORM 9] Opération impossible !");
} }
$entity = new TransactionPrestatairePrestataire(); $entity = new TransactionPrestatairePrestataire();
$entity->setOperateur($user); $entity->setOperateur($user);
$entity->setExpediteur($user->getPrestataire()); $entity->setExpediteur($this->session->get('_prestagere'));
$form = $this->ff->create(TransactionPrestatairePrestataireFormType::class, $entity, array('action' => $this->router->generate('transactionPrestatairePrestataire'))); $form = $this->ff->create(TransactionPrestatairePrestataireFormType::class, $entity, array('action' => $this->router->generate('transactionPrestatairePrestataire')));
return $form->createView(); return $form->createView();
...@@ -181,11 +184,11 @@ class FormFactory ...@@ -181,11 +184,11 @@ class FormFactory
public function getTransfertPrestataireSiegeForm(User $user) public function getTransfertPrestataireSiegeForm(User $user)
{ {
if (empty($user) || empty($user->getPrestataire())) { if (empty($user) || empty($this->session->get('_prestagere'))) {
throw new \Exception("[FORM 10] Opération impossible !"); throw new \Exception("[FORM 10] Opération impossible !");
} }
$entity = new TransfertPrestataireSiege(); $entity = new TransfertPrestataireSiege();
$entity->setExpediteur($user->getPrestataire()); $entity->setExpediteur($this->session->get('_prestagere'));
$form = $this->ff->create(TransfertPrestataireSiegeFormType::class, $entity, array('action' => $this->router->generate('transactionPrestataireSiege'))); $form = $this->ff->create(TransfertPrestataireSiegeFormType::class, $entity, array('action' => $this->router->generate('transactionPrestataireSiege')));
return $form->createView(); return $form->createView();
...@@ -193,11 +196,11 @@ class FormFactory ...@@ -193,11 +196,11 @@ class FormFactory
public function getTransfertPrestataireComptoirForm(User $user) public function getTransfertPrestataireComptoirForm(User $user)
{ {
if (empty($user) || empty($user->getComptoirsgere())) { if (empty($user) || empty($this->session->get('_comptoirgere'))) {
throw new \Exception("[FORM 11] Opération impossible !"); throw new \Exception("[FORM 11] Opération impossible !");
} }
$entity = new TransfertPrestataireComptoir(); $entity = new TransfertPrestataireComptoir();
$entity->setDestinataire($user->getComptoirsgere()); $entity->setDestinataire($this->session->get('_comptoirgere'));
$form = $this->ff->create(TransfertPrestataireComptoirFormType::class, $entity, array('action' => $this->router->generate('transfertPrestataireComptoir'))); $form = $this->ff->create(TransfertPrestataireComptoirFormType::class, $entity, array('action' => $this->router->generate('transfertPrestataireComptoir')));
return $form->createView(); return $form->createView();
...@@ -206,13 +209,13 @@ class FormFactory ...@@ -206,13 +209,13 @@ class FormFactory
public function getRetraitComptoirToXForm(User $user, $type) public function getRetraitComptoirToXForm(User $user, $type)
{ {
$type = strtolower($type); $type = strtolower($type);
if (empty($user) || empty($user->getComptoirsgere()) || !($type == 'adherent' || $type == 'groupe' || $type == 'prestataire')) { if (empty($user) || empty($this->session->get('_comptoirgere')) || !($type == 'adherent' || $type == 'groupe' || $type == 'prestataire')) {
throw new \Exception("[FORM 12] Opération impossible !"); throw new \Exception("[FORM 12] Opération impossible !");
} }
$class = "App\Entity\RetraitComptoir".ucwords($type); $class = "App\Entity\RetraitComptoir".ucwords($type);
$entity = new $class(); $entity = new $class();
$entity->setOperateur($user); $entity->setOperateur($user);
$entity->setExpediteur($user->getComptoirsgere()); $entity->setExpediteur($this->session->get('_comptoirgere'));
$form = $this->ff->create('App\Form\Type\RetraitComptoir'.ucwords($type).'FormType', $entity, array('action' => $this->router->generate('retraitComptoir'.ucwords($type)))); $form = $this->ff->create('App\Form\Type\RetraitComptoir'.ucwords($type).'FormType', $entity, array('action' => $this->router->generate('retraitComptoir'.ucwords($type))));
return $form->createView(); return $form->createView();
...@@ -221,13 +224,13 @@ class FormFactory ...@@ -221,13 +224,13 @@ class FormFactory
public function getVenteComptoirToXForm(User $user, $type) public function getVenteComptoirToXForm(User $user, $type)
{ {
$type = strtolower($type); $type = strtolower($type);
if (empty($user) || empty($user->getComptoirsgere()) || !($type == 'adherent' || $type == 'groupe' || $type == 'prestataire')) { if (empty($user) || empty($this->session->get('_comptoirgere')) || !($type == 'adherent' || $type == 'groupe' || $type == 'prestataire')) {
throw new \Exception("[FORM 12] Opération impossible !"); throw new \Exception("[FORM 12] Opération impossible !");
} }
$class = "App\Entity\VenteComptoir".ucwords($type); $class = "App\Entity\VenteComptoir".ucwords($type);
$entity = new $class(); $entity = new $class();
$entity->setOperateur($user); $entity->setOperateur($user);
$entity->setExpediteur($user->getComptoirsgere()); $entity->setExpediteur($this->session->get('_comptoirgere'));
$form = $this->ff->create('App\Form\Type\VenteComptoir'.ucwords($type).'FormType', $entity, array('action' => $this->router->generate('venteComptoir'.ucwords($type)))); $form = $this->ff->create('App\Form\Type\VenteComptoir'.ucwords($type).'FormType', $entity, array('action' => $this->router->generate('venteComptoir'.ucwords($type))));
return $form->createView(); return $form->createView();
...@@ -235,12 +238,12 @@ class FormFactory ...@@ -235,12 +238,12 @@ class FormFactory
public function getTransfertComptoirGroupeForm(User $user) public function getTransfertComptoirGroupeForm(User $user)
{ {
if (empty($user) || empty($user->getGroupesgere())) { if (empty($user) || empty($this->session->get('_groupegere'))) {
throw new \Exception("[FORM 12] Opération impossible !"); throw new \Exception("[FORM 12] Opération impossible !");
} }
$entity = new TransfertComptoirGroupe(); $entity = new TransfertComptoirGroupe();
$entity->setOperateur($user); $entity->setOperateur($user);
$entity->setDestinataire($user->getGroupesgere()); $entity->setDestinataire($this->session->get('_groupegere'));
$form = $this->ff->create(TransfertComptoirGroupeFormType::class, $entity, array('action' => $this->router->generate('transfertComptoirGroupe'))); $form = $this->ff->create(TransfertComptoirGroupeFormType::class, $entity, array('action' => $this->router->generate('transfertComptoirGroupe')));
return $form->createView(); return $form->createView();
...@@ -248,12 +251,12 @@ class FormFactory ...@@ -248,12 +251,12 @@ class FormFactory
public function getTransfertGroupeComptoirForm(User $user) public function getTransfertGroupeComptoirForm(User $user)
{ {
if (empty($user) || empty($user->getGroupesgere())) { if (empty($user) || empty($this->session->get('_groupegere'))) {
throw new \Exception("[FORM 13] Opération impossible !"); throw new \Exception("[FORM 13] Opération impossible !");
} }
$entity = new TransfertGroupeComptoir(); $entity = new TransfertGroupeComptoir();
$entity->setOperateur($user); $entity->setOperateur($user);
$entity->setExpediteur($user->getGroupesgere()); $entity->setExpediteur($this->session->get('_groupegere'));
$form = $this->ff->create(TransfertGroupeComptoirFormType::class, $entity, array('action' => $this->router->generate('transfertGroupeComptoir'))); $form = $this->ff->create(TransfertGroupeComptoirFormType::class, $entity, array('action' => $this->router->generate('transfertGroupeComptoir')));
return $form->createView(); return $form->createView();
......
...@@ -31,16 +31,10 @@ class AddCotisationFormType extends AbstractType ...@@ -31,16 +31,10 @@ class AddCotisationFormType extends AbstractType
{ {
$now = new \DateTime(); $now = new \DateTime();
$flux = $options['data']; $flux = $options['data'];
// dump($flux);
// exit();
if (empty($this->security) && !empty($this->security->getUser())) { if (empty($this->security) && !empty($this->security->getUser())) {
throw new \Exception("Opération impossible ! Utilisateur non connecté !"); throw new \Exception("Opération impossible ! Utilisateur non connecté !");
} }
$builder $builder
->add('type', HiddenType::class, array(
'data' => 'cotisation',
'data_class' => null
))
->add('operateur', HiddenType::class, array( ->add('operateur', HiddenType::class, array(
'entity_class' => User::class, 'entity_class' => User::class,
'em' => $this->em, 'em' => $this->em,
......
<?php
namespace App\Form\Type;
use App\Entity\CotisationAdherent;
use App\Entity\Groupe;
use App\Entity\Prestataire;
use App\Entity\User;
use App\Enum\MoyenEnum;
use Doctrine\DBAL\Types\FloatType;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security;
class AdherentCotiserFormType extends CotiserFormType
{
protected $em;
protected $security;
public function __construct(EntityManagerInterface $em, Security $security)
{
$this->em = $em;
$this->security = $security;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$now = new \DateTime();
if (empty($this->security) && !empty($this->security->getUser())) {
throw new \Exception("Opération impossible ! Utilisateur non connecté !");
}
$builder
->add('operateur', HiddenType::class, array(
'entity_class' => User::class,
'em' => $this->em,
'data_class' => null,
'data' => $this->security->getUser()
))
->add('reference', HiddenType::class, array(
'label' => 'Reference :',
'required' => true,
'data' => 'Cotisation '.$now->format('Y')
))
->add('montant', HiddenType::class, array(
))
->add('moyen', HiddenType::class, array(
'data' => MoyenEnum::MOYEN_AUTRE,
))
;
;
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => CotisationAdherent::class,
'cascade_validation' => true
));
}
public function getBlockPrefix()
{
return 'formCotiser';
}
}
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Form\Type; namespace App\Form\Type;
use App\Entity\Cotisation; use App\Entity\Cotisation;
use App\Entity\GlobalParameter;
use App\Enum\MoyenEnum; use App\Enum\MoyenEnum;
use App\Form\Type\CotisationInfosFormType; use App\Form\Type\CotisationInfosFormType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
...@@ -19,13 +20,9 @@ class CotisationFormType extends FluxFormType ...@@ -19,13 +20,9 @@ class CotisationFormType extends FluxFormType
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
$builder $builder
->add('type', HiddenType::class, array(
'data' => 'cotisation',
'data_class' => null
))
->add('montant', MoneyType::class, array( ->add('montant', MoneyType::class, array(
'label' => 'Montant', 'label' => 'Montant',
'data' => floatval($this->container->getParameter('app.cotisation_montant')) 'data' => floatval($this->em->getRepository(GlobalParameter::class)->val(GlobalParameter::COTISATION_MONTANT))
)) ))
->add('moyen', ChoiceType::class, array( ->add('moyen', ChoiceType::class, array(
'required' => true, 'required' => true,
......
<?php
namespace App\Form\Type;
use App\Entity\Adherent;
use App\Entity\Groupe;
use App\Entity\Prestataire;
use App\Entity\User;
use App\Entity\GlobalParameter;
use App\Enum\MoyenEnum;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security;
class CotiserFormType extends AbstractType
{
protected $em;
protected $security;
public function __construct(EntityManagerInterface $em, Security $security)
{
$this->em = $em;
$this->security = $security;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$now = new \DateTime();
if (empty($this->security) && !empty($this->security->getUser())) {
throw new \Exception("Opération impossible ! Utilisateur non connecté !");
}
$builder
->add('operateur', HiddenType::class, array(
'entity_class' => User::class,
'em' => $this->em,
'data_class' => null,
'data' => $this->security->getUser()
))
->add('reference', HiddenType::class, array(
'label' => 'Reference :',
'required' => true,
'data' => 'Cotisation '.$now->format('Y')
))
->add('montant', HiddenType::class, array(
'data' => floatval($this->em->getRepository(GlobalParameter::class)->val(GlobalParameter::COTISATION_MONTANT)),
))
->add('moyen', HiddenType::class, array(
'data' => MoyenEnum::MOYEN_MLC,
))
;
;
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Cotisation::class,
'cascade_validation' => true
));
}
public function getBlockPrefix()
{
return 'formCotiser';
}
}
<?php
namespace App\Form\Type;
use App\Entity\Comptoir;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class FirstComptoirFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('enabled', HiddenType::class, array('data' => true))
->add('name', TextType::class, array(
'label' => 'Nom :',
'required' => true
))
->add('geoloc', GeolocFormType::class, array(
'label' => 'Géolocalisation :',
'attr' => ['class' => 'ml-4'],
'required' => true
))
->add('compte', NumberType::class, array(
'label' => 'Solde de monnaie actuellement au comptoir :',
'required' => true
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Comptoir::class
]);
}
public function getBlockPrefix()
{
return 'formFirstComptoir';
}
}
<?php
namespace App\Form\Type;
use App\Entity\Groupe;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class FirstGroupeFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('enabled', HiddenType::class, array('data' => true))
->add('name', TextType::class, array(
'label' => 'Nom',
'required' => true
))
->add('compte', NumberType::class, array(
'label' => 'Solde de monnaie actuellement au groupe :',
'required' => true
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Groupe::class
]);
}
public function getBlockPrefix()
{
return 'formFirstGroupe';
}
}
...@@ -4,6 +4,7 @@ namespace App\Form\Type; ...@@ -4,6 +4,7 @@ namespace App\Form\Type;
use App\Entity\Flux; use App\Entity\Flux;
use App\Entity\User; use App\Entity\User;
use App\Tools\RoleCheck;
use App\Enum\MoyenEnum; use App\Enum\MoyenEnum;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
...@@ -18,6 +19,7 @@ use Symfony\Component\Form\FormBuilderInterface; ...@@ -18,6 +19,7 @@ use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\FormEvents;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
use Symfony\Component\Validator\Constraints\LessThanOrEqual; use Symfony\Component\Validator\Constraints\LessThanOrEqual;
...@@ -27,12 +29,16 @@ class FluxFormType extends AbstractType ...@@ -27,12 +29,16 @@ class FluxFormType extends AbstractType
protected $em; protected $em;
protected $security; protected $security;
protected $container; protected $container;
protected $session;
protected $rolecheck;
public function __construct(EntityManagerInterface $em, Security $security, ContainerInterface $container) public function __construct(EntityManagerInterface $em, Security $security, ContainerInterface $container, SessionInterface $session, RoleCheck $rolecheck)
{ {
$this->em = $em; $this->em = $em;
$this->security = $security; $this->security = $security;
$this->container = $container; $this->container = $container;
$this->session = $session;
$this->rolecheck = $rolecheck;
} }
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
...@@ -53,7 +59,11 @@ class FluxFormType extends AbstractType ...@@ -53,7 +59,11 @@ class FluxFormType extends AbstractType
'data_class' => null, 'data_class' => null,
'entity_class' => User::class, 'entity_class' => User::class,
'em' => $this->em 'em' => $this->em
)); ))
->add('role', HiddenType::class, array(
'data' => $this->rolecheck->getCurrentRole()->__toString()
))
;
if (empty($flux->getExpediteur())) { if (empty($flux->getExpediteur())) {
$builder $builder
->add('montant', MoneyType::class, array( ->add('montant', MoneyType::class, array(
...@@ -62,38 +72,43 @@ class FluxFormType extends AbstractType ...@@ -62,38 +72,43 @@ class FluxFormType extends AbstractType
)) ))
; ;
} else { } else {
// @TODO : finir logique ici : emlc ou billets mlc et check expediteur ou destinataire ? $constraintsMontant = [];
if ($flux->getParenttype() == Flux::TYPE_TRANSACTION) { if ($flux->getParenttype() == Flux::TYPE_TRANSACTION || $flux->getType() == 'prestataire_siege') {
$maxvalue = $flux->getExpediteur()->getEcompte(); $constraintsMontant = [
} else { new LessThanOrEqual([
$maxvalue = $flux->getExpediteur()->getCompte(); 'message' => 'Montant supérieur à votre solde.',
'value' => $flux->getExpediteur()->getEcompte(),
]),
];
} elseif ($flux->getParenttype() != Flux::TYPE_COTISATION) {
$constraintsMontant = [
new LessThanOrEqual([
'message' => 'Montant supérieur à votre solde.',
'value' => $flux->getExpediteur()->getCompte(),
]),
];
} }
$builder $builder
->add('montant', MoneyType::class, array( ->add('montant', MoneyType::class, array(
'label' => 'Montant :', 'label' => 'Montant :',
'required' => true, 'required' => true,
'constraints' => [ 'constraints' => $constraintsMontant,
new LessThanOrEqual([
'message' => 'Montant supérieur à votre solde.',
'value' => $maxvalue,
]),
],
)) ))
; ;
} }
$builder $builder
->add('reference', TextType::class, array( ->add('reference', TextType::class, array(
'label' => 'Reference :', 'label' => 'Reference :',
'required' => true 'required' => false
)) ))
->add('save', SubmitType::class, ['label' => "Valider"]) ->add('save', SubmitType::class, ['label' => "Valider"])
->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($builder) { ->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use ($builder) {
// $flux = $event->getData(); $flux = $event->getData();
// if ($event->getForm()->isValid() && (!$flux || null === $flux->getId())) { if ($event->getForm()->isValid() && (!$flux || null === $flux->getId()) && $flux->getParenttype() == Flux::TYPE_COTISATION && $flux->getMoyen() == MoyenEnum::MOYEN_MLC) {
// if ($flux->getExpediteur()->getCompte() < $flux->getMontant()) { if ($flux->getExpediteur()->getEcompte() < $flux->getMontant()) {
// $event->getForm()->get('montant')->addError(new FormError("Montant supérieur à votre solde !")); $event->getForm()->get('montant')->addError(new FormError("Montant supérieur à votre solde !"));
// } }
// } }
}) })
; ;
} }
......
...@@ -5,13 +5,22 @@ namespace App\Form\Type; ...@@ -5,13 +5,22 @@ namespace App\Form\Type;
use App\Entity\Geoloc; use App\Entity\Geoloc;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Routing\RouterInterface;
class GeolocFormType extends AbstractType class GeolocFormType extends AbstractType
{ {
private $router;
public function __construct(RouterInterface $router)
{
$this->router = $router;
}
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
$geoloc = null; $geoloc = null;
...@@ -31,6 +40,10 @@ class GeolocFormType extends AbstractType ...@@ -31,6 +40,10 @@ class GeolocFormType extends AbstractType
'label' => 'Ville :', 'label' => 'Ville :',
'required' => $options['required'] 'required' => $options['required']
)) ))
->add('search', ButtonType::class, [
'label' => 'Géolocaliser',
'attr' => ['class' => 'searchLatLon btn btn-primary', 'data-url' => $this->router->generate('geolocAdresse')],
]);
; ;
if ($options['with_latlon'] === true || (!empty($geoloc) && (!empty($geoloc->getLat()) || !empty($geoloc->getLon())))) { if ($options['with_latlon'] === true || (!empty($geoloc) && (!empty($geoloc->getLat()) || !empty($geoloc->getLon())))) {
$builder $builder
...@@ -48,11 +61,11 @@ class GeolocFormType extends AbstractType ...@@ -48,11 +61,11 @@ class GeolocFormType extends AbstractType
public function configureOptions(OptionsResolver $resolver) public function configureOptions(OptionsResolver $resolver)
{ {
// $resolver->setRequired(['with_latlon']);
$resolver->setDefaults([ $resolver->setDefaults([
'data_class' => Geoloc::class, 'data_class' => Geoloc::class,
'with_latlon' => false 'with_latlon' => true
]); ]);
$resolver->setRequired(['with_latlon']);
} }
public function getBlockPrefix() public function getBlockPrefix()
......
<?php
namespace App\Form\Type;
use App\Entity\Siege;
use App\Entity\Groupe;
use App\Entity\GlobalParameter;
use Doctrine\ORM\EntityManagerInterface;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Email as EmailConstraint;
use Symfony\Component\Validator\Constraints\Type as TypeConstraint;
use Symfony\Component\Validator\Constraints\Regex as RegexConstraint;
class GlobalConfigurationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('mlcname', GlobalParameterType::class, array(
'label' => 'Nom de la Monnaie (long) :',
'name_param' => GlobalParameter::MLC_NAME,
'_placeholder' => 'Monnaie Locale Complémentaire',
'required' => true,
))
->add('mlcsmallname', GlobalParameterType::class, array(
'label' => 'Nom court de la Monnaie ou abbréviation :',
'name_param' => GlobalParameter::MLC_NAME_SMALL,
'_placeholder' => 'MLC',
'required' => true,
))
->add('mlcnotifemail', GlobalParameterType::class, array(
'label' => "Email utilisé pour l'envoi des notifications :",
'name_param' => GlobalParameter::MLC_NOTIF_EMAIL,
'required' => true,
'_placeholder' => 'notification@mlc.com',
'constraints_param' => [
new EmailConstraint(['message' => 'Email invalide !'])
],
))
->add('mlccotisation', GlobalParameterType::class, array(
'label' => 'Montant par défaut des cotisations:',
'name_param' => GlobalParameter::COTISATION_MONTANT,
'help' => 'Ne pas utiliser de virgule ",", utiliser le point "."',
'required' => true,
'_placeholder' => '10',
'constraints_param' => [
new TypeConstraint(['type' => 'numeric', 'message' => "Le montant n'est pas valide !"])
],
))
->add('mapcenter', GlobalParameterType::class, array(
'label' => 'Coordonnées du centre de la carte (Format [lat,long], exemple : [45.7,3.2]):',
'name_param' => GlobalParameter::MAP_CENTER,
'required' => true,
'_placeholder' => '[45.7,3.2]',
'constraints_param' => [
new RegexConstraint(['pattern' => '/^\[[0-9]+\.[0-9]+,[0-9]+\.[0-9]+\]/', 'message' => 'Coordonnées invalide, format attendu : [45.7,3.2]'])
],
))
->add('mapzoom', GlobalParameterType::class, array(
'label' => 'Zoom de la carte (nombre entre 1 et 15) :',
'name_param' => GlobalParameter::MAP_ZOOM,
'required' => true,
'_placeholder' => '9',
'constraints_param' => [
new RegexConstraint(['pattern' => '/^[0-9]{1,2}$/', 'message' => 'Le zoom doit être un nombre entre 0 et 15 !'])
],
))
->add('mlcfavicon', GlobalParameterType::class, array(
'label' => 'Chemin du favicon :',
'_data' => '/images/favicon.png',
'name_param' => GlobalParameter::FAVICON_URL,
'required' => true,
))
->add('mlctitle', GlobalParameterType::class, array(
'label' => '[SEO] Titre par défaut des pages du site web :',
'name_param' => GlobalParameter::MLC_TITLE,
'required' => true,
))
->add('mlcdescription', GlobalParameterType::class, array(
'label' => '[SEO] Description par défaut des pages du site web :',
'name_param' => GlobalParameter::MLC_DESCRIPTION,
'required' => true,
))
->add('mlckeywords', GlobalParameterType::class, array(
'label' => '[SEO] Mot clés par défaut des pages du site web :',
'name_param' => GlobalParameter::MLC_KEYWORDS,
'required' => true,
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
// 'cascade_validation' => true
]);
}
public function getBlockPrefix()
{
return 'formSiege';
}
}
<?php
namespace App\Form\Type;
use App\Entity\GlobalParameter;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class GlobalParameterType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', HiddenType::class, ['data' => $options['name_param']])
->add('mandatory', HiddenType::class, ['data' => true])
->add('value', TextType::class, array(
'label' => false,
'constraints' => $options['constraints_param'],
'data' => $options['_data'],
'attr' => array(
'placeholder' => $options['_placeholder']
)
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => GlobalParameter::class,
'required' => true,
'name_param' => 'MLC',
'_placeholder' => '',
'_data' => null,
'default_value' => 'MLC',
'constraints_param' => [],
'error_bubbling' => false,
// 'cascade_validation' => true
]);
}
public function getBlockPrefix()
{
return 'formSiege';
}
}
...@@ -5,6 +5,7 @@ namespace App\Form\Type; ...@@ -5,6 +5,7 @@ namespace App\Form\Type;
use App\Entity\Usergroup; use App\Entity\Usergroup;
use App\Form\Type\RegistrationFormType; use App\Form\Type\RegistrationFormType;
use App\Form\Type\SiegeFormType; use App\Form\Type\SiegeFormType;
use App\Form\Type\GlobalConfigurationFormType;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
...@@ -29,12 +30,31 @@ class InstallFormType extends AbstractType ...@@ -29,12 +30,31 @@ class InstallFormType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
$builder $builder
->add('config', GlobalConfigurationFormType::class, array(
'label' => 'CONFIGURATIONS GLOBALES :',
'label_attr' => ['class' => 'font-weight-bold'],
'required' => true
))
->add('groupe', FirstGroupeFormType::class, array(
'label' => 'PREMIER GROUPE LOCAL',
'label_attr' => ['class' => 'font-weight-bold'],
'help' => "Au moins un groupe local est requis pour installer le Kohinos !",
'required' => true,
))
->add('comptoir', FirstComptoirFormType::class, array(
'label' => 'PREMIER COMPTOIR',
'label_attr' => ['class' => 'font-weight-bold'],
'help' => "Au moins un comptoir est requis pour installer le Kohinos !",
'required' => true,
))
->add('siege', SiegeFormType::class, array( ->add('siege', SiegeFormType::class, array(
'label' => 'Siège :', 'label' => 'CONFIGURATION DU SIÈGE :',
'label_attr' => ['class' => 'font-weight-bold'],
'required' => true 'required' => true
)) ))
->add('user', RegistrationFormType::class, array( ->add('user', RegistrationFormType::class, array(
'label' => 'UTILISATEUR SUPER ADMIN :', 'label' => "CRÉATION DE L'UTILISATEUR SUPER ADMIN :",
'label_attr' => ['class' => 'font-weight-bold'],
'required' => true 'required' => true
)) ))
->add('save', SubmitType::class, ['label' => "Installer le système"]) ->add('save', SubmitType::class, ['label' => "Installer le système"])
...@@ -44,8 +64,7 @@ class InstallFormType extends AbstractType ...@@ -44,8 +64,7 @@ class InstallFormType extends AbstractType
public function configureOptions(OptionsResolver $resolver) public function configureOptions(OptionsResolver $resolver)
{ {
$resolver->setDefaults([ $resolver->setDefaults([
'data_class' => null, 'data_class' => null
'cascade_validation' => true
]); ]);
} }
......
...@@ -8,8 +8,6 @@ use App\Entity\Prestataire; ...@@ -8,8 +8,6 @@ use App\Entity\Prestataire;
use App\Entity\Rubrique; use App\Entity\Rubrique;
use App\Entity\User; use App\Entity\User;
use App\Enum\MoyenEnum; use App\Enum\MoyenEnum;
use App\Form\Type\GeolocFormType;
use App\Form\Type\RegistrationFormType;
use Doctrine\DBAL\Types\FloatType; use Doctrine\DBAL\Types\FloatType;
use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
......
...@@ -16,7 +16,7 @@ class RetraitComptoirAdherentFormType extends RetraitFormType ...@@ -16,7 +16,7 @@ class RetraitComptoirAdherentFormType extends RetraitFormType
{ {
$builder $builder
->add('expediteur', HiddenType::class, array( ->add('expediteur', HiddenType::class, array(
'data' => $this->security->getUser()->getComptoirsgere()->getId(), 'data' => $this->session->get('_comptoirgere')->getId(),
'data_class' => null, 'data_class' => null,
'entity_class' => Comptoir::class, 'entity_class' => Comptoir::class,
'em' => $this->em 'em' => $this->em
......
...@@ -16,7 +16,7 @@ class RetraitComptoirPrestataireFormType extends RetraitFormType ...@@ -16,7 +16,7 @@ class RetraitComptoirPrestataireFormType extends RetraitFormType
{ {
$builder $builder
->add('expediteur', HiddenType::class, array( ->add('expediteur', HiddenType::class, array(
'data' => $this->security->getUser()->getComptoirsgere()->getId(), 'data' => $this->session->get('_comptoirgere')->getId(),
'data_class' => null, 'data_class' => null,
'entity_class' => Comptoir::class, 'entity_class' => Comptoir::class,
'em' => $this->em 'em' => $this->em
......
...@@ -12,10 +12,6 @@ class RetraitFormType extends FluxFormType ...@@ -12,10 +12,6 @@ class RetraitFormType extends FluxFormType
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
$builder $builder
->add('type', HiddenType::class, array(
'data' => 'retrait',
'data_class' => null
))
->add('moyen', HiddenType::class, array( ->add('moyen', HiddenType::class, array(
'data' => MoyenEnum::MOYEN_RETRAIT 'data' => MoyenEnum::MOYEN_RETRAIT
)) ))
......
...@@ -7,6 +7,7 @@ use Doctrine\ORM\EntityManagerInterface; ...@@ -7,6 +7,7 @@ use Doctrine\ORM\EntityManagerInterface;
use FOS\CKEditorBundle\Form\Type\CKEditorType; use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\NumberType; use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
...@@ -19,26 +20,26 @@ class SiegeFormType extends AbstractType ...@@ -19,26 +20,26 @@ class SiegeFormType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
$builder $builder
->add('name', TextType::class, array( ->add('name', HiddenType::class, array(
'label' => 'Nom :', 'label' => false,
'data' => 'Siège',
'required' => true 'required' => true
)) ))
->add('compte', NumberType::class, array( ->add('compte', NumberType::class, array(
'label' => 'Solde de monnaie actuellement au siège :', 'label' => 'Solde de monnaie actuellement au siège :',
'required' => true 'required' => true
)) ))
// ->add('content', CKEditorType::class, array( ->add('compteNantie', NumberType::class, array(
// 'label' => 'Description :', 'label' => 'Compte de monnaie nantie :',
// 'required' => false 'required' => true
// )) ))
; ;
} }
public function configureOptions(OptionsResolver $resolver) public function configureOptions(OptionsResolver $resolver)
{ {
$resolver->setDefaults([ $resolver->setDefaults([
'data_class' => Siege::class, 'data_class' => Siege::class
'cascade_validation' => true
]); ]);
} }
......
...@@ -28,9 +28,6 @@ class TransactionAdherentAdherentFormType extends TransactionFormType ...@@ -28,9 +28,6 @@ class TransactionAdherentAdherentFormType extends TransactionFormType
'required' => true, 'required' => true,
'label' => 'Adherent :', 'label' => 'Adherent :',
)) ))
->add('moyen', HiddenType::class, array(
'data' => MoyenEnum::MOYEN_VIREMENT
))
; ;
} }
......
...@@ -12,12 +12,8 @@ class TransactionFormType extends FluxFormType ...@@ -12,12 +12,8 @@ class TransactionFormType extends FluxFormType
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
$builder $builder
->add('type', HiddenType::class, array(
'data' => 'transaction',
'data_class' => null
))
->add('moyen', HiddenType::class, array( ->add('moyen', HiddenType::class, array(
'data' => MoyenEnum::MOYEN_TRANSFERT 'data' => MoyenEnum::MOYEN_VIREMENT
)) ))
; ;
} }
......
...@@ -16,7 +16,7 @@ class TransactionPrestataireAdherentFormType extends TransactionFormType ...@@ -16,7 +16,7 @@ class TransactionPrestataireAdherentFormType extends TransactionFormType
{ {
$builder $builder
->add('expediteur', HiddenType::class, array( ->add('expediteur', HiddenType::class, array(
'data' => $this->security->getUser()->getPrestataire()->getId(), 'data' => $this->session->get('_prestagere')->getId(),
'data_class' => null, 'data_class' => null,
'entity_class' => Prestataire::class, 'entity_class' => Prestataire::class,
'em' => $this->em 'em' => $this->em
......
...@@ -16,14 +16,14 @@ class TransactionPrestatairePrestataireFormType extends TransactionFormType ...@@ -16,14 +16,14 @@ class TransactionPrestatairePrestataireFormType extends TransactionFormType
{ {
$builder $builder
->add('expediteur', HiddenType::class, array( ->add('expediteur', HiddenType::class, array(
'data' => $this->security->getUser()->getPrestataire()->getId(), 'data' => $this->session->get('_prestagere')->getId(),
'data_class' => null, 'data_class' => null,
'entity_class' => Prestataire::class, 'entity_class' => Prestataire::class,
'em' => $this->em 'em' => $this->em
)) ))
->add('destinataire', EntityType::class, array( ->add('destinataire', EntityType::class, array(
'class' => Prestataire::class, 'class' => Prestataire::class,
'choices' => $this->em->getRepository(Prestataire::class)->findbyExclude($this->security->getUser()->getPrestataire()), 'choices' => $this->em->getRepository(Prestataire::class)->findbyExclude($this->session->get('_prestagere')),
'placeholder' => 'Prestataire', 'placeholder' => 'Prestataire',
'required' => true, 'required' => true,
'label' => 'Prestataire :', 'label' => 'Prestataire :',
......
...@@ -16,7 +16,7 @@ class TransfertComptoirGroupeFormType extends TransfertFormType ...@@ -16,7 +16,7 @@ class TransfertComptoirGroupeFormType extends TransfertFormType
{ {
$builder $builder
->add('expediteur', EntityType::class, array( ->add('expediteur', EntityType::class, array(
'choices' => $this->em->getRepository(Comptoir::class)->findBy(array('enabled' => true, 'groupe' => $this->security->getUser()->getGroupesgere()), array('name'=> 'ASC')), 'choices' => $this->em->getRepository(Comptoir::class)->findBy(array('enabled' => true, 'groupe' => $this->session->get('_groupegere')), array('name'=> 'ASC')),
'class' => Comptoir::class, 'class' => Comptoir::class,
'placeholder' => 'Comptoir', 'placeholder' => 'Comptoir',
'required' => true, 'required' => true,
...@@ -24,7 +24,7 @@ class TransfertComptoirGroupeFormType extends TransfertFormType ...@@ -24,7 +24,7 @@ class TransfertComptoirGroupeFormType extends TransfertFormType
)) ))
->add('destinataire', HiddenType::class, array( ->add('destinataire', HiddenType::class, array(
'entity_class' => Groupe::class, 'entity_class' => Groupe::class,
'data' => $this->security->getUser()->getGroupesgere()->getId(), 'data' => $this->session->get('_groupegere')->getId(),
'data_class' => null, 'data_class' => null,
'em' => $this->em 'em' => $this->em
)) ))
......
...@@ -12,10 +12,6 @@ class TransfertFormType extends FluxFormType ...@@ -12,10 +12,6 @@ class TransfertFormType extends FluxFormType
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
$builder $builder
->add('type', HiddenType::class, array(
'data' => 'transfert',
'data_class' => null
))
->add('moyen', HiddenType::class, array( ->add('moyen', HiddenType::class, array(
'data' => MoyenEnum::MOYEN_TRANSFERT 'data' => MoyenEnum::MOYEN_TRANSFERT
)) ))
......
...@@ -14,19 +14,19 @@ class TransfertGroupeComptoirFormType extends TransfertFormType ...@@ -14,19 +14,19 @@ class TransfertGroupeComptoirFormType extends TransfertFormType
{ {
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
if (empty($this->security->getUser()) || empty($this->security->getUser()->getGroupesgere())) { if (empty($this->security->getUser()) || empty($this->session->get('_groupegere'))) {
throw new \Exception("[FORM TRANSFERT GROUPE COMPTOIR] Opération impossible !"); throw new \Exception("[FORM TRANSFERT GROUPE COMPTOIR] Opération impossible !");
} }
$builder $builder
->add('expediteur', HiddenType::class, array( ->add('expediteur', HiddenType::class, array(
'data' => $this->security->getUser()->getGroupesgere()->getId(), 'data' => $this->session->get('_groupegere')->getId(),
'data_class' => null, 'data_class' => null,
'entity_class' => Groupe::class, 'entity_class' => Groupe::class,
'em' => $this->em 'em' => $this->em
)) ))
->add('destinataire', EntityType::class, array( ->add('destinataire', EntityType::class, array(
'class' => Comptoir::class, 'class' => Comptoir::class,
'choices' => $this->em->getRepository(Comptoir::class)->findBy(array('groupe' => $this->security->getUser()->getGroupesgere(), 'enabled' => true), array('name' => 'ASC')), 'choices' => $this->em->getRepository(Comptoir::class)->findBy(array('groupe' => $this->session->get('_groupegere'), 'enabled' => true), array('name' => 'ASC')),
'placeholder' => 'Comptoir', 'placeholder' => 'Comptoir',
'required' => true, 'required' => true,
'label' => 'Comptoir :', 'label' => 'Comptoir :',
......
...@@ -17,7 +17,7 @@ class TransfertPrestataireComptoirFormType extends TransfertFormType ...@@ -17,7 +17,7 @@ class TransfertPrestataireComptoirFormType extends TransfertFormType
{ {
$builder $builder
->add('destinataire', HiddenType::class, array( ->add('destinataire', HiddenType::class, array(
'data' => $this->security->getUser()->getComptoirsgere()->getId(), 'data' => $this->session->get('_comptoirgere')->getId(),
'data_class' => null, 'data_class' => null,
'entity_class' => Comptoir::class, 'entity_class' => Comptoir::class,
'em' => $this->em 'em' => $this->em
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment