Commit a5164397 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- gitignore

 - Mes Projets (passage en vue 3)
parent 422941e8
Loading
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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
+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">
@@ -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&hellip;</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">
@@ -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';
@@ -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() {
@@ -264,7 +101,8 @@ export default {
      ui_vuecompact: false,
      filters_obj: [],
      selecting_filter: "",
      debug: ''
      debug: '',
      search:''
    }
  },

@@ -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 ){
@@ -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);
@@ -427,6 +266,7 @@ export default {
        this.loadNextPage();
      }
    };
        */


  }
+39 −1
Original line number Diff line number Diff line
@@ -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.
     *
+8 −36
Original line number Diff line number Diff line
<div class="container">

    <?php use Oscar\OscarText;

    <?php

    if( !$person ): ?>
        <h1>&nbsp;</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>
+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