Loading .gitignore +6 −1 Original line number Diff line number Diff line Loading @@ -156,7 +156,12 @@ public/documentation module/Demo ## Interface Graphique public/js/oscar/vite public/js/oscar/vite/dist public/js/oscar/vite/dist/* public/js/oscar/vite/dist/assets ## Textes personnalisés config/autoload/oscar.text.custom.json ################################# ## ANCIENS Loading front/src/ActivitySearchUi.vue +32 −192 Original line number Diff line number Diff line <template> <div> <div class="overlay" v-if="error"> <div class="overlay-content"> <a href="#" @click="error = ''">Fermer</a> {{ error }} </div> </div> <div class="overlay" v-if="debug"> <div class="overlay-content"> <a href="#" @click="debug = ''"> <i class="icon-bug"></i> Fermer</a> <pre> {{ debug }} </pre> </div> </div> <transition name="fade"> <div class="vue-loader" v-show="loaderMsg"> <div class="content-loader"> <i class="icon-spinner animate-spin"></i> {{ loaderMsg }} </div> </div> </transition> <h1> <i class="icon-cube"></i> {{ title }} </h1> FOO <form action=""> <div class="input-group input-group-lg"> Loading @@ -41,140 +11,7 @@ <button type="submit" class="btn btn-primary">Rechercher</button> </span> </div> <section v-if="showCriteria"> <h3>Critères de recherche</h3> <div class="row"> <div class="col-md-4"> <h5>Filtres</h5> <select class="form-control" @change="handlerSelectFilter" v-model="selecting_filter"> <option value="">Ajouter un filtre…</option> <option :value="f" v-for="label,f in filters">{{ label }}</option> </select> </div> <div class="col-md-2"> <h5>Status</h5> <super-select :options="status" :name="'st'" @change="updateSelected" v-model="used_status" style="min-width: 250px"/> </div> <div class="col-md-2"> <h5>Trier par</h5> <select v-model="sorter" name="t" class="form-control"> <option :value="s" v-for="text, s in sortters">{{ text }}</option> </select> </div> <div class="col-md-2"> <h5>Ordre</h5> <select v-model="direction" name="d" class="form-control"> <option :value="s" v-for="text, s in directions">{{s}} - {{ text }}</option> </select> </div> <div class="col-md-2"> <h5>Ignorer si null</h5> <label for="ui_vuecompact" class="label-primary"> Mode compact <input id="ui_vuecompact" name="ui_vuecompact" v-model="ui_vuecompact" type="checkbox"> </label> </div> </div> <hr> <section v-for="f in filters_obj"> <a-s-filter-person v-if="f.type == 'ap'" :type="'ap'" :value1="f.value1" :value2="f.value2" :roles_values="roles_person" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-person v-else-if="f.type == 'pm'" :type="'pm'" :value1="f.value1" :value2="f.value2" :multiple="true" :roles_values="roles_person" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-organization v-else-if="f.type == 'ao'" :type="'ao'" :value1="f.value1" :value2="f.value2" :roles_values="roles_organizations" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-organization v-else-if="f.type == 'so'" :type="'so'" :label="'N\'impliquant pas'" :value1="f.value1" :value2="f.value2" :roles_values="roles_organizations" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-person v-else-if="f.type == 'sp'" :type="'sp'" :value1="f.value1" :value2="f.value2" :label="'N\'impliquant pas'" :roles_values="roles_person" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-select v-else-if="f.type == 'cnt'" :type="'cnt'" :value1="f.value1" :label="'Pays (d\'une organisation)'" :icon="'icon-flag'" :error="f.error" :options="options_pays" @delete="handlerDeleteFilter(f)"/> <select-key-value v-else-if="f.type == 'tnt'" :type="'tnt'" :value1="f.value1" :label="'Type d\'organisation'" :icon="'icon-tag'" :error="f.error" :options="options_organization_types" @delete="handlerDeleteFilter(f)"/> <single-date-field v-else-if="f.type == 'add'" :type="f.type" :moment="moment" :value1="f.value1" :value2="f.value2" :label="'Date de début'" :error="f.error" @delete="handlerDeleteFilter(f)"/> <single-date-field v-else-if="f.type == 'adf'" :type="f.type" :moment="moment" :error="f.error" :value1="f.value1" :value2="f.value2" :label="'Date de fin'" @delete="handlerDeleteFilter(f)"/> <single-date-field v-else-if="f.type == 'adc'" :type="f.type" :moment="moment" :error="f.error" :value1="f.value1" :value2="f.value2" :label="'Date de Création'" @delete="handlerDeleteFilter(f)"/> <single-date-field v-else-if="f.type == 'adm'" :type="f.type" :moment="moment" :error="f.error" :value1="f.value1" :value2="f.value2" :label="'Date de Mise à jour'" @delete="handlerDeleteFilter(f)"/> <div v-else class="card critera"> non géré {{ f }} </div> </section> <nav class="text-right"> <button type="reset" class="btn btn-default"> Réinitialiser le recherche </button> <button type="submit" class="btn btn-primary"> Actualiser la recherche </button> </nav> </section> </form> <section v-if="search !== null"> Loading @@ -190,17 +27,17 @@ </template> <script> import ActivitySearchItem from './ActivitySearchItem.vue'; import SuperSelect from './components/SuperSelect.vue'; import PersonAutoCompleter from "./components/PersonAutoCompleter2"; import OrganizationAutoCompleter from "./components/OrganizationAutoCompleter"; import vSelect from 'vue-select'; // Filtres import ASFilterPerson from "./searchfilters/ASFilterPerson"; import ASFilterOrganization from "./searchfilters/ASFilterOrganization"; import ASFilterSelect from "./searchfilters/ASFilterSelect"; import SelectKeyValue from "./searchfilters/SelectKeyValue"; import SingleDateField from "./searchfilters/SingleDateField"; // import SuperSelect from './components/SuperSelect.vue'; // import PersonAutoCompleter from "./components/PersonAutoCompleter2"; // import OrganizationAutoCompleter from "./components/OrganizationAutoCompleter"; // import vSelect from 'vue-select'; // // // Filtres // import ASFilterPerson from "./searchfilters/ASFilterPerson"; // import ASFilterOrganization from "./searchfilters/ASFilterOrganization"; // import ASFilterSelect from "./searchfilters/ASFilterSelect"; // import SelectKeyValue from "./searchfilters/SelectKeyValue"; // import SingleDateField from "./searchfilters/SingleDateField"; // import OscarGrowl from './OscarGrowl.vue'; // import OscarBus from './OscarBus.js'; Loading Loading @@ -241,16 +78,16 @@ export default { }, components: { ASFilterOrganization, // ASFilterOrganization, activity: ActivitySearchItem, SuperSelect, PersonAutoCompleter, vSelect, OrganizationAutoCompleter, ASFilterPerson, ASFilterSelect, SelectKeyValue, SingleDateField // SuperSelect, // PersonAutoCompleter, // vSelect, // OrganizationAutoCompleter, // ASFilterPerson, // ASFilterSelect, // SelectKeyValue, // SingleDateField }, data() { Loading @@ -264,7 +101,8 @@ export default { ui_vuecompact: false, filters_obj: [], selecting_filter: "", debug: '' debug: '', search:'' } }, Loading Loading @@ -361,15 +199,15 @@ export default { this.search = what === null ? '' : what; this.$http.get(this.urlSearch).then( (ok) => { if (ok.body.page == 1) { if (ok.data.page == 1) { this.activities = []; } this.activities = this.activities.concat(ok.body.datas.content); this.totalResultQuery = ok.body.result_total; this.totalPages = ok.body.totalPages; this.page = ok.body.page; this.activities = this.activities.concat(ok.data.datas.content); this.totalResultQuery = ok.data.result_total; this.totalPages = ok.data.totalPages; this.page = ok.data.page; ok.body.filters_infos.forEach( info => { ok.data.filters_infos.forEach( info => { if( info.error ){ let f = this.getFilterByStr(info.input); if( f ){ Loading Loading @@ -406,6 +244,7 @@ export default { let params = new URLSearchParams(window.location.search); /** // Filtres this.used_filters.forEach(filterStr => { console.log("Traitement du filtre ", filterStr); Loading @@ -427,6 +266,7 @@ export default { this.loadNextPage(); } }; */ } Loading module/Oscar/src/Oscar/Service/ProjectGrantService.php +39 −1 Original line number Diff line number Diff line Loading @@ -861,7 +861,45 @@ class ProjectGrantService implements UseGearmanJobLauncherService, UseOscarConfi /// RECHERCHE AVANCES /// ////////////////////////////////////////////////////////////////////////////////////////////// /** * Retourne la liste des critères de filtrage pour la recherche avancées. * * @return string[] */ public function getActivitiesSearchCriteria(): array { static $activitiesSearchCriteria; if ($activitiesSearchCriteria === null) { $activitiesSearchCriteria = [ 'ap' => "Impliquant la personne", 'sp' => "N'impliquant pas la personne", 'pm' => "Impliquant une de ces personnes", 'ao' => "Impliquant l'organisation", 'so' => "N'impliquant pas l'organisation", 'om' => "Impliquant une des organisations", 'as' => 'Ayant le statut', 'ss' => 'N\'ayant pas le statut', 'cnt' => "Pays (d'une organisation)", 'tnt' => "Type d'organisation", 'af' => 'Ayant comme incidence financière', 'sf' => 'N\'ayant pas comme incidence financière', 'mp' => 'Montant prévu', 'at' => 'est de type', 'st' => 'n\'est pas de type', 'add' => 'Date de début', 'adf' => 'Date de fin', 'adc' => 'Date de création', 'adm' => 'Date de dernière mise à jour', 'ads' => 'Date de signature', 'adp' => 'Date d\'ouverture du N°Financier', 'pp' => 'Activités sans projet', 'fdt' => 'Activités soumise à feuille de temps', 'ds' => 'Ayant pour discipline', 'aj' => 'Ayant le jalon' ]; } return $activitiesSearchCriteria; } /** * Système de recherche avancées V2. * Loading module/Oscar/view/oscar/project/current-user-projects.phtml +8 −36 Original line number Diff line number Diff line <div class="container"> <?php use Oscar\OscarText; <?php if( !$person ): ?> <h1> </h1> <div class="alert alert-warning"> Vous n'êtes pas référencé dans Oscar. Contactez l'administrateur si le problème persiste. Vous n'êtes pas référencé. Contactez l'administrateur si le problème persiste. </div> <?php else: ?> <link rel="stylesheet" href="/js/oscar/dist/personautocompleter.css" /> <div class="container"> <div id="app"></div> </div> <script> requirejs(['vue', 'vue-resource', 'ActivitySearchUi', 'VueFilters', 'mm'], function(Vue, VueResource, ActivitySearchUi, VueFilters, moment){ Vue.use(VueResource); Vue.filter('slugify', VueFilters.default.slugify); Vue.filter('money', function(dbl){ return dbl.toFixed(2); }); Vue.filter('fullDate', function(text){ var d = moment(text); return d.format("dddd, D MMMM YYYY") + " (" + d.fromNow() + ")"; }); new Vue({ render: function (h) { return h(ActivitySearchUi, { props: { url: '<?= $this->url('contract/api') ?>', first: true, search: <?= json_encode($q) ?>, showCriteria: false, title: '<?= $this->oscarText("Mes activités") ?>' } }) } }).$mount('#app'); }); </script> <div id="activity-search" data-title="<?= $this->oscarText('Mes activités') ?>" data-url="<?= $this->url('contract/api') ?>" ></div> <?php $this->Vite()->addJS('src/ActivitySearchUI.js') ?> <?php endif; ?> </div> public/js/oscar/vite/dist/assets/Activity-1615f765.cssdeleted 100644 → 0 +0 −1 Original line number Diff line number Diff line .disabled[data-v-833d8759]{cursor:not-allowed;color:#aaa;text-decoration:line-through}.change[data-v-833d8759]{border:1px solid #CCC;padding:.3em;margin:.5em 0;border-left:solid #CCC 4px;display:flex}.change>div{span.text[data-v-833d8759] {flex: 0; font-weight: bold; white-space: nowrap;} select[data-v-833d8759],div[data-v-833d8759]{flex: 1;}}.change>i[data-v-833d8759]{flex:0}.change>nav[data-v-833d8759]{flex:0;border-top:solid #CCC 4px;text-align:center}.change>div[data-v-833d8759]{flex:1;display:flex}.avenant{p[data-v-833d8759] {border-top: solid #CCC 1px; padding: .5em 2em;} nav[data-v-833d8759] {padding: .3em 0; border-top: solid #CCC 1px; text-align: center;} .modification[data-v-833d8759] {padding: 0 1em;}}.avenant[data-v-833d8759]{border-left:#CCC 4px solid}.avenant.status-100[data-v-833d8759]{border-color:#ccc}.avenant.status-200[data-v-833d8759]{border-color:#2d7800}.jalon[data-v-42de1793]{background:white;padding:.25em 1em;margin-bottom:.2em}.jalon .main[data-v-42de1793]{display:inline-block;font-size:1.2em;text-align:left;border-bottom:solid thin #ddd;padding:.1em .5em}.jalon.payment[data-v-42de1793]{background:rgba(255,255,255,.7)}.time-value[data-v-42de1793]{font-weight:600}.time-value .ago[data-v-42de1793]{font-weight:100}.list{margin:1em 0}.person-text[data-v-dfc2c1c6]{display:inline-block;position:relative}.person-text .info-bulle[data-v-dfc2c1c6]{display:none}.person-text:hover .info-bulle[data-v-dfc2c1c6]{display:block}.info-bulle{header {&[data-v-dfc2c1c6] {background: #222; display: flex;} .infos {&[data-v-dfc2c1c6] {font-size: 1.25em; padding: 4px .5em 4px .5em; font-weight: 700;} .firstname[data-v-dfc2c1c6] {line-height: 16px; font-size: 16px; color: rgba(255,255,255,.8); font-style: italic;} .lastname[data-v-dfc2c1c6] {color: #fff; line-height: 36px; font-size: 30px;}}} .content {&[data-v-dfc2c1c6] {font-size: .9em; background: #fff; color: #111; padding: .3em 1em;} i[data-v-dfc2c1c6] {color: #999;} > div {&[data-v-dfc2c1c6] {border-bottom: dotted 1px #777;} &[data-v-dfc2c1c6]:last-child {border-bottom: none;}}} footer[data-v-dfc2c1c6] {font-size: .7em; padding: 0 .25em; border-top: 1px solid #DDD; background-color: #EEE; color: #555; text-align: right;}}.info-bulle[data-v-dfc2c1c6]{position:absolute;text-shadow:none;background-color:#000000b3;box-shadow:-4px 4px 8px #0000004d}.workpackage[data-v-301c8003]{max-width:31%;margin:1%}.vjs-tree-brackets{cursor:pointer}.vjs-tree-brackets:hover{color:#1890ff}.vjs-check-controller{position:absolute;left:0}.vjs-check-controller.is-checked .vjs-check-controller-inner{background-color:#1890ff;border-color:#0076e4}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-checkbox:after{transform:rotate(45deg) scaleY(1)}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-radio:after{transform:translate(-50%,-50%) scale(1)}.vjs-check-controller .vjs-check-controller-inner{display:inline-block;position:relative;border:1px solid #bfcbd9;border-radius:2px;vertical-align:middle;box-sizing:border-box;width:16px;height:16px;background-color:#fff;z-index:1;cursor:pointer;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.vjs-check-controller .vjs-check-controller-inner:after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transform-origin:center}.vjs-check-controller .vjs-check-controller-inner.is-radio{border-radius:100%}.vjs-check-controller .vjs-check-controller-inner.is-radio:after{border-radius:100%;height:4px;background-color:#fff;left:50%;top:50%}.vjs-check-controller .vjs-check-controller-original{opacity:0;outline:none;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.vjs-carets{position:absolute;right:0;cursor:pointer}.vjs-carets svg{transition:transform .3s}.vjs-carets:hover{color:#1890ff}.vjs-carets-close{transform:rotate(-90deg)}.vjs-tree-node{display:flex;position:relative;line-height:20px}.vjs-tree-node.has-carets{padding-left:15px}.vjs-tree-node.has-carets.has-selector,.vjs-tree-node.has-selector{padding-left:30px}.vjs-tree-node.is-highlight,.vjs-tree-node:hover{background-color:#e6f7ff}.vjs-tree-node .vjs-indent{display:flex;position:relative}.vjs-tree-node .vjs-indent-unit{width:1em}.vjs-tree-node .vjs-indent-unit.has-line{border-left:1px dashed #bfcbd9}.vjs-tree-node.dark.is-highlight,.vjs-tree-node.dark:hover{background-color:#2e4558}.vjs-node-index{position:absolute;right:100%;margin-right:4px;-webkit-user-select:none;user-select:none}.vjs-colon{white-space:pre}.vjs-comment{color:#bfcbd9}.vjs-value{word-break:break-word}.vjs-value-null,.vjs-value-undefined{color:#d55fde}.vjs-value-boolean,.vjs-value-number{color:#1d8ce0}.vjs-value-string{color:#13ce66}.vjs-tree{font-family:Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace;font-size:14px;text-align:left}.vjs-tree.is-virtual{overflow:auto}.vjs-tree.is-virtual .vjs-tree-node{white-space:nowrap}.activity-fiche[data-v-3910ad18]{position:relative;padding-bottom:4em}.section-infos[data-v-3910ad18]{margin-top:1em;scroll-margin-top:120px}.section-infos:target h2[data-v-3910ad18]{-webkit-animation-name:animation-3910ad18;-webkit-animation-duration:2s;-webkit-animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;-webkit-animation-play-state:running;animation-name:animation-3910ad18;animation-duration:2s;animation-timing-function:ease-in-out;animation-iteration-count:1;animation-play-state:running}.section-infos>h2[data-v-3910ad18]{border-bottom:1px solid #a2a7af;margin:0;padding:.2em 0;display:flex;justify-content:left;justify-content:space-between}@-webkit-keyframes animation-3910ad18{0%{color:#333}15.0%{color:#0a53be}30.0%{color:#333}50.0%{color:#0a53be}100.0%{color:#333}}@keyframes animation-3910ad18{0%{color:#333}15.0%{color:#0a53be}30.0%{color:#333}50.0%{color:#0a53be}100.0%{color:#333}}.activity-project[data-v-3910ad18]{padding:.25em 1em .25em .25em;border-bottom:#eee solid thin}.activity-type[data-v-3910ad18]{background:#EEE;padding:.25em 1em .25em .25em}.activity-type .icon-tag[data-v-3910ad18]{color:#999}.type-chain span[data-v-3910ad18]{font-weight:400}.type-chain span[data-v-3910ad18]:last-child{font-weight:700}.type-chain span[data-v-3910ad18]:last-child:after{content:""}.type-chain span[data-v-3910ad18]{margin:auto}.type-chain span[data-v-3910ad18]:after{content:" > ";color:#ccc}.buttons[data-v-3910ad18]{padding:1em;text-align:right}header .line-bottom[data-v-3910ad18]{border-bottom:#dee2ea thin solid;padding-bottom:1em}header h3[data-v-3910ad18]{font-size:1em}header h4[data-v-3910ad18]{color:#95afe3}header .texthighlight[data-v-3910ad18]{color:#111}header .texthighlight strong[data-v-3910ad18],header .texthighlight time[data-v-3910ad18]{color:#000}.budget[data-v-3910ad18]{border-left:#dee2ea thin solid}.budget .amount[data-v-3910ad18]{font-size:1.4em;border-top:solid thin #EEE;border-bottom:solid thin #EEE}.budget .details[data-v-3910ad18]{font-size:.8em}.budget .details small[data-v-3910ad18]{display:block} Loading
.gitignore +6 −1 Original line number Diff line number Diff line Loading @@ -156,7 +156,12 @@ public/documentation module/Demo ## Interface Graphique public/js/oscar/vite public/js/oscar/vite/dist public/js/oscar/vite/dist/* public/js/oscar/vite/dist/assets ## Textes personnalisés config/autoload/oscar.text.custom.json ################################# ## ANCIENS Loading
front/src/ActivitySearchUi.vue +32 −192 Original line number Diff line number Diff line <template> <div> <div class="overlay" v-if="error"> <div class="overlay-content"> <a href="#" @click="error = ''">Fermer</a> {{ error }} </div> </div> <div class="overlay" v-if="debug"> <div class="overlay-content"> <a href="#" @click="debug = ''"> <i class="icon-bug"></i> Fermer</a> <pre> {{ debug }} </pre> </div> </div> <transition name="fade"> <div class="vue-loader" v-show="loaderMsg"> <div class="content-loader"> <i class="icon-spinner animate-spin"></i> {{ loaderMsg }} </div> </div> </transition> <h1> <i class="icon-cube"></i> {{ title }} </h1> FOO <form action=""> <div class="input-group input-group-lg"> Loading @@ -41,140 +11,7 @@ <button type="submit" class="btn btn-primary">Rechercher</button> </span> </div> <section v-if="showCriteria"> <h3>Critères de recherche</h3> <div class="row"> <div class="col-md-4"> <h5>Filtres</h5> <select class="form-control" @change="handlerSelectFilter" v-model="selecting_filter"> <option value="">Ajouter un filtre…</option> <option :value="f" v-for="label,f in filters">{{ label }}</option> </select> </div> <div class="col-md-2"> <h5>Status</h5> <super-select :options="status" :name="'st'" @change="updateSelected" v-model="used_status" style="min-width: 250px"/> </div> <div class="col-md-2"> <h5>Trier par</h5> <select v-model="sorter" name="t" class="form-control"> <option :value="s" v-for="text, s in sortters">{{ text }}</option> </select> </div> <div class="col-md-2"> <h5>Ordre</h5> <select v-model="direction" name="d" class="form-control"> <option :value="s" v-for="text, s in directions">{{s}} - {{ text }}</option> </select> </div> <div class="col-md-2"> <h5>Ignorer si null</h5> <label for="ui_vuecompact" class="label-primary"> Mode compact <input id="ui_vuecompact" name="ui_vuecompact" v-model="ui_vuecompact" type="checkbox"> </label> </div> </div> <hr> <section v-for="f in filters_obj"> <a-s-filter-person v-if="f.type == 'ap'" :type="'ap'" :value1="f.value1" :value2="f.value2" :roles_values="roles_person" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-person v-else-if="f.type == 'pm'" :type="'pm'" :value1="f.value1" :value2="f.value2" :multiple="true" :roles_values="roles_person" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-organization v-else-if="f.type == 'ao'" :type="'ao'" :value1="f.value1" :value2="f.value2" :roles_values="roles_organizations" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-organization v-else-if="f.type == 'so'" :type="'so'" :label="'N\'impliquant pas'" :value1="f.value1" :value2="f.value2" :roles_values="roles_organizations" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-person v-else-if="f.type == 'sp'" :type="'sp'" :value1="f.value1" :value2="f.value2" :label="'N\'impliquant pas'" :roles_values="roles_person" :error="f.error" @delete="handlerDeleteFilter(f)"/> <a-s-filter-select v-else-if="f.type == 'cnt'" :type="'cnt'" :value1="f.value1" :label="'Pays (d\'une organisation)'" :icon="'icon-flag'" :error="f.error" :options="options_pays" @delete="handlerDeleteFilter(f)"/> <select-key-value v-else-if="f.type == 'tnt'" :type="'tnt'" :value1="f.value1" :label="'Type d\'organisation'" :icon="'icon-tag'" :error="f.error" :options="options_organization_types" @delete="handlerDeleteFilter(f)"/> <single-date-field v-else-if="f.type == 'add'" :type="f.type" :moment="moment" :value1="f.value1" :value2="f.value2" :label="'Date de début'" :error="f.error" @delete="handlerDeleteFilter(f)"/> <single-date-field v-else-if="f.type == 'adf'" :type="f.type" :moment="moment" :error="f.error" :value1="f.value1" :value2="f.value2" :label="'Date de fin'" @delete="handlerDeleteFilter(f)"/> <single-date-field v-else-if="f.type == 'adc'" :type="f.type" :moment="moment" :error="f.error" :value1="f.value1" :value2="f.value2" :label="'Date de Création'" @delete="handlerDeleteFilter(f)"/> <single-date-field v-else-if="f.type == 'adm'" :type="f.type" :moment="moment" :error="f.error" :value1="f.value1" :value2="f.value2" :label="'Date de Mise à jour'" @delete="handlerDeleteFilter(f)"/> <div v-else class="card critera"> non géré {{ f }} </div> </section> <nav class="text-right"> <button type="reset" class="btn btn-default"> Réinitialiser le recherche </button> <button type="submit" class="btn btn-primary"> Actualiser la recherche </button> </nav> </section> </form> <section v-if="search !== null"> Loading @@ -190,17 +27,17 @@ </template> <script> import ActivitySearchItem from './ActivitySearchItem.vue'; import SuperSelect from './components/SuperSelect.vue'; import PersonAutoCompleter from "./components/PersonAutoCompleter2"; import OrganizationAutoCompleter from "./components/OrganizationAutoCompleter"; import vSelect from 'vue-select'; // Filtres import ASFilterPerson from "./searchfilters/ASFilterPerson"; import ASFilterOrganization from "./searchfilters/ASFilterOrganization"; import ASFilterSelect from "./searchfilters/ASFilterSelect"; import SelectKeyValue from "./searchfilters/SelectKeyValue"; import SingleDateField from "./searchfilters/SingleDateField"; // import SuperSelect from './components/SuperSelect.vue'; // import PersonAutoCompleter from "./components/PersonAutoCompleter2"; // import OrganizationAutoCompleter from "./components/OrganizationAutoCompleter"; // import vSelect from 'vue-select'; // // // Filtres // import ASFilterPerson from "./searchfilters/ASFilterPerson"; // import ASFilterOrganization from "./searchfilters/ASFilterOrganization"; // import ASFilterSelect from "./searchfilters/ASFilterSelect"; // import SelectKeyValue from "./searchfilters/SelectKeyValue"; // import SingleDateField from "./searchfilters/SingleDateField"; // import OscarGrowl from './OscarGrowl.vue'; // import OscarBus from './OscarBus.js'; Loading Loading @@ -241,16 +78,16 @@ export default { }, components: { ASFilterOrganization, // ASFilterOrganization, activity: ActivitySearchItem, SuperSelect, PersonAutoCompleter, vSelect, OrganizationAutoCompleter, ASFilterPerson, ASFilterSelect, SelectKeyValue, SingleDateField // SuperSelect, // PersonAutoCompleter, // vSelect, // OrganizationAutoCompleter, // ASFilterPerson, // ASFilterSelect, // SelectKeyValue, // SingleDateField }, data() { Loading @@ -264,7 +101,8 @@ export default { ui_vuecompact: false, filters_obj: [], selecting_filter: "", debug: '' debug: '', search:'' } }, Loading Loading @@ -361,15 +199,15 @@ export default { this.search = what === null ? '' : what; this.$http.get(this.urlSearch).then( (ok) => { if (ok.body.page == 1) { if (ok.data.page == 1) { this.activities = []; } this.activities = this.activities.concat(ok.body.datas.content); this.totalResultQuery = ok.body.result_total; this.totalPages = ok.body.totalPages; this.page = ok.body.page; this.activities = this.activities.concat(ok.data.datas.content); this.totalResultQuery = ok.data.result_total; this.totalPages = ok.data.totalPages; this.page = ok.data.page; ok.body.filters_infos.forEach( info => { ok.data.filters_infos.forEach( info => { if( info.error ){ let f = this.getFilterByStr(info.input); if( f ){ Loading Loading @@ -406,6 +244,7 @@ export default { let params = new URLSearchParams(window.location.search); /** // Filtres this.used_filters.forEach(filterStr => { console.log("Traitement du filtre ", filterStr); Loading @@ -427,6 +266,7 @@ export default { this.loadNextPage(); } }; */ } Loading
module/Oscar/src/Oscar/Service/ProjectGrantService.php +39 −1 Original line number Diff line number Diff line Loading @@ -861,7 +861,45 @@ class ProjectGrantService implements UseGearmanJobLauncherService, UseOscarConfi /// RECHERCHE AVANCES /// ////////////////////////////////////////////////////////////////////////////////////////////// /** * Retourne la liste des critères de filtrage pour la recherche avancées. * * @return string[] */ public function getActivitiesSearchCriteria(): array { static $activitiesSearchCriteria; if ($activitiesSearchCriteria === null) { $activitiesSearchCriteria = [ 'ap' => "Impliquant la personne", 'sp' => "N'impliquant pas la personne", 'pm' => "Impliquant une de ces personnes", 'ao' => "Impliquant l'organisation", 'so' => "N'impliquant pas l'organisation", 'om' => "Impliquant une des organisations", 'as' => 'Ayant le statut', 'ss' => 'N\'ayant pas le statut', 'cnt' => "Pays (d'une organisation)", 'tnt' => "Type d'organisation", 'af' => 'Ayant comme incidence financière', 'sf' => 'N\'ayant pas comme incidence financière', 'mp' => 'Montant prévu', 'at' => 'est de type', 'st' => 'n\'est pas de type', 'add' => 'Date de début', 'adf' => 'Date de fin', 'adc' => 'Date de création', 'adm' => 'Date de dernière mise à jour', 'ads' => 'Date de signature', 'adp' => 'Date d\'ouverture du N°Financier', 'pp' => 'Activités sans projet', 'fdt' => 'Activités soumise à feuille de temps', 'ds' => 'Ayant pour discipline', 'aj' => 'Ayant le jalon' ]; } return $activitiesSearchCriteria; } /** * Système de recherche avancées V2. * Loading
module/Oscar/view/oscar/project/current-user-projects.phtml +8 −36 Original line number Diff line number Diff line <div class="container"> <?php use Oscar\OscarText; <?php if( !$person ): ?> <h1> </h1> <div class="alert alert-warning"> Vous n'êtes pas référencé dans Oscar. Contactez l'administrateur si le problème persiste. Vous n'êtes pas référencé. Contactez l'administrateur si le problème persiste. </div> <?php else: ?> <link rel="stylesheet" href="/js/oscar/dist/personautocompleter.css" /> <div class="container"> <div id="app"></div> </div> <script> requirejs(['vue', 'vue-resource', 'ActivitySearchUi', 'VueFilters', 'mm'], function(Vue, VueResource, ActivitySearchUi, VueFilters, moment){ Vue.use(VueResource); Vue.filter('slugify', VueFilters.default.slugify); Vue.filter('money', function(dbl){ return dbl.toFixed(2); }); Vue.filter('fullDate', function(text){ var d = moment(text); return d.format("dddd, D MMMM YYYY") + " (" + d.fromNow() + ")"; }); new Vue({ render: function (h) { return h(ActivitySearchUi, { props: { url: '<?= $this->url('contract/api') ?>', first: true, search: <?= json_encode($q) ?>, showCriteria: false, title: '<?= $this->oscarText("Mes activités") ?>' } }) } }).$mount('#app'); }); </script> <div id="activity-search" data-title="<?= $this->oscarText('Mes activités') ?>" data-url="<?= $this->url('contract/api') ?>" ></div> <?php $this->Vite()->addJS('src/ActivitySearchUI.js') ?> <?php endif; ?> </div>
public/js/oscar/vite/dist/assets/Activity-1615f765.cssdeleted 100644 → 0 +0 −1 Original line number Diff line number Diff line .disabled[data-v-833d8759]{cursor:not-allowed;color:#aaa;text-decoration:line-through}.change[data-v-833d8759]{border:1px solid #CCC;padding:.3em;margin:.5em 0;border-left:solid #CCC 4px;display:flex}.change>div{span.text[data-v-833d8759] {flex: 0; font-weight: bold; white-space: nowrap;} select[data-v-833d8759],div[data-v-833d8759]{flex: 1;}}.change>i[data-v-833d8759]{flex:0}.change>nav[data-v-833d8759]{flex:0;border-top:solid #CCC 4px;text-align:center}.change>div[data-v-833d8759]{flex:1;display:flex}.avenant{p[data-v-833d8759] {border-top: solid #CCC 1px; padding: .5em 2em;} nav[data-v-833d8759] {padding: .3em 0; border-top: solid #CCC 1px; text-align: center;} .modification[data-v-833d8759] {padding: 0 1em;}}.avenant[data-v-833d8759]{border-left:#CCC 4px solid}.avenant.status-100[data-v-833d8759]{border-color:#ccc}.avenant.status-200[data-v-833d8759]{border-color:#2d7800}.jalon[data-v-42de1793]{background:white;padding:.25em 1em;margin-bottom:.2em}.jalon .main[data-v-42de1793]{display:inline-block;font-size:1.2em;text-align:left;border-bottom:solid thin #ddd;padding:.1em .5em}.jalon.payment[data-v-42de1793]{background:rgba(255,255,255,.7)}.time-value[data-v-42de1793]{font-weight:600}.time-value .ago[data-v-42de1793]{font-weight:100}.list{margin:1em 0}.person-text[data-v-dfc2c1c6]{display:inline-block;position:relative}.person-text .info-bulle[data-v-dfc2c1c6]{display:none}.person-text:hover .info-bulle[data-v-dfc2c1c6]{display:block}.info-bulle{header {&[data-v-dfc2c1c6] {background: #222; display: flex;} .infos {&[data-v-dfc2c1c6] {font-size: 1.25em; padding: 4px .5em 4px .5em; font-weight: 700;} .firstname[data-v-dfc2c1c6] {line-height: 16px; font-size: 16px; color: rgba(255,255,255,.8); font-style: italic;} .lastname[data-v-dfc2c1c6] {color: #fff; line-height: 36px; font-size: 30px;}}} .content {&[data-v-dfc2c1c6] {font-size: .9em; background: #fff; color: #111; padding: .3em 1em;} i[data-v-dfc2c1c6] {color: #999;} > div {&[data-v-dfc2c1c6] {border-bottom: dotted 1px #777;} &[data-v-dfc2c1c6]:last-child {border-bottom: none;}}} footer[data-v-dfc2c1c6] {font-size: .7em; padding: 0 .25em; border-top: 1px solid #DDD; background-color: #EEE; color: #555; text-align: right;}}.info-bulle[data-v-dfc2c1c6]{position:absolute;text-shadow:none;background-color:#000000b3;box-shadow:-4px 4px 8px #0000004d}.workpackage[data-v-301c8003]{max-width:31%;margin:1%}.vjs-tree-brackets{cursor:pointer}.vjs-tree-brackets:hover{color:#1890ff}.vjs-check-controller{position:absolute;left:0}.vjs-check-controller.is-checked .vjs-check-controller-inner{background-color:#1890ff;border-color:#0076e4}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-checkbox:after{transform:rotate(45deg) scaleY(1)}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-radio:after{transform:translate(-50%,-50%) scale(1)}.vjs-check-controller .vjs-check-controller-inner{display:inline-block;position:relative;border:1px solid #bfcbd9;border-radius:2px;vertical-align:middle;box-sizing:border-box;width:16px;height:16px;background-color:#fff;z-index:1;cursor:pointer;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.vjs-check-controller .vjs-check-controller-inner:after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transform-origin:center}.vjs-check-controller .vjs-check-controller-inner.is-radio{border-radius:100%}.vjs-check-controller .vjs-check-controller-inner.is-radio:after{border-radius:100%;height:4px;background-color:#fff;left:50%;top:50%}.vjs-check-controller .vjs-check-controller-original{opacity:0;outline:none;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.vjs-carets{position:absolute;right:0;cursor:pointer}.vjs-carets svg{transition:transform .3s}.vjs-carets:hover{color:#1890ff}.vjs-carets-close{transform:rotate(-90deg)}.vjs-tree-node{display:flex;position:relative;line-height:20px}.vjs-tree-node.has-carets{padding-left:15px}.vjs-tree-node.has-carets.has-selector,.vjs-tree-node.has-selector{padding-left:30px}.vjs-tree-node.is-highlight,.vjs-tree-node:hover{background-color:#e6f7ff}.vjs-tree-node .vjs-indent{display:flex;position:relative}.vjs-tree-node .vjs-indent-unit{width:1em}.vjs-tree-node .vjs-indent-unit.has-line{border-left:1px dashed #bfcbd9}.vjs-tree-node.dark.is-highlight,.vjs-tree-node.dark:hover{background-color:#2e4558}.vjs-node-index{position:absolute;right:100%;margin-right:4px;-webkit-user-select:none;user-select:none}.vjs-colon{white-space:pre}.vjs-comment{color:#bfcbd9}.vjs-value{word-break:break-word}.vjs-value-null,.vjs-value-undefined{color:#d55fde}.vjs-value-boolean,.vjs-value-number{color:#1d8ce0}.vjs-value-string{color:#13ce66}.vjs-tree{font-family:Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace;font-size:14px;text-align:left}.vjs-tree.is-virtual{overflow:auto}.vjs-tree.is-virtual .vjs-tree-node{white-space:nowrap}.activity-fiche[data-v-3910ad18]{position:relative;padding-bottom:4em}.section-infos[data-v-3910ad18]{margin-top:1em;scroll-margin-top:120px}.section-infos:target h2[data-v-3910ad18]{-webkit-animation-name:animation-3910ad18;-webkit-animation-duration:2s;-webkit-animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;-webkit-animation-play-state:running;animation-name:animation-3910ad18;animation-duration:2s;animation-timing-function:ease-in-out;animation-iteration-count:1;animation-play-state:running}.section-infos>h2[data-v-3910ad18]{border-bottom:1px solid #a2a7af;margin:0;padding:.2em 0;display:flex;justify-content:left;justify-content:space-between}@-webkit-keyframes animation-3910ad18{0%{color:#333}15.0%{color:#0a53be}30.0%{color:#333}50.0%{color:#0a53be}100.0%{color:#333}}@keyframes animation-3910ad18{0%{color:#333}15.0%{color:#0a53be}30.0%{color:#333}50.0%{color:#0a53be}100.0%{color:#333}}.activity-project[data-v-3910ad18]{padding:.25em 1em .25em .25em;border-bottom:#eee solid thin}.activity-type[data-v-3910ad18]{background:#EEE;padding:.25em 1em .25em .25em}.activity-type .icon-tag[data-v-3910ad18]{color:#999}.type-chain span[data-v-3910ad18]{font-weight:400}.type-chain span[data-v-3910ad18]:last-child{font-weight:700}.type-chain span[data-v-3910ad18]:last-child:after{content:""}.type-chain span[data-v-3910ad18]{margin:auto}.type-chain span[data-v-3910ad18]:after{content:" > ";color:#ccc}.buttons[data-v-3910ad18]{padding:1em;text-align:right}header .line-bottom[data-v-3910ad18]{border-bottom:#dee2ea thin solid;padding-bottom:1em}header h3[data-v-3910ad18]{font-size:1em}header h4[data-v-3910ad18]{color:#95afe3}header .texthighlight[data-v-3910ad18]{color:#111}header .texthighlight strong[data-v-3910ad18],header .texthighlight time[data-v-3910ad18]{color:#000}.budget[data-v-3910ad18]{border-left:#dee2ea thin solid}.budget .amount[data-v-3910ad18]{font-size:1.4em;border-top:solid thin #EEE;border-bottom:solid thin #EEE}.budget .details[data-v-3910ad18]{font-size:.8em}.budget .details small[data-v-3910ad18]{display:block}