Commit 66743004 authored by Herve Marie's avatar Herve Marie
Browse files

Merge branch 'spartan' into hm/ajoutAttributs

parents 19931a30 6aac346e
Loading
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -38,3 +38,6 @@ Pensez à activer les privilèges idoines aux rôles habilités à gérer les do
## Envoi des données PCRU

La communication des donnèes vers PCRU se fait via FTP, l'accès au serveur PCRU peut être configuré depuis l'interface d'administration.


## Configuration avancées
 No newline at end of file
+43 −1
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ return array(
Les connecteurs sont configurés dans des fichier *YAML* qui vont permettre de configurer les connecteurs. Le connecteur par défaut est HTTP basic, d'autres méthode de récupération des informations existent : 

 - HTTP basic (par défaut)
 - HTTP Basic Auth HTTP
 - HTTP certificat SSL
 - HTTP Token

@@ -79,8 +80,11 @@ Les connecteurs sont configurés dans des fichier *YAML* qui vont permettre de c

le fichier `/config/connectors/person_rest.yml` contient les URL utilisées par le connecteur pour obtenir les données :

Pour les personnes : 

```yml
# Emplacement du service REST fournissant la liste des personnes
# config/connectors/person_rest.yml
# Emplacement du service REST fournissant la liste complète
url_persons: 'https://rest.service.tdl/api/persons'

# Emplacement du service REST fournissant les données pour une personne
@@ -89,6 +93,44 @@ url_persons: 'https://rest.service.tdl/api/persons'
url_person: 'https://rest.service.tld/api/person/%s'
```

Pour les organisations :

```yml
# config/connectors/organization_rest.yml
# Emplacement du service REST fournissant la liste complète
url_organizations: 'https://rest.service.tdl/api/organizations'

# Emplacement du service REST fournissant les données pour
# Noter la présente du '%s' que Oscar remplacera par l'UID utilisé dans
# le service REST.
url_organization: 'https://rest.service.tld/api/organization/%s'
```

#### HTTP Auth 

Pour les personnes, dans le fichier de configuration le fichier `/config/connectors/person_rest.yml` :

```yml
# config/connectors/person_rest.yml
access_strategy: Oscar\Connector\Access\ConnectorAccessCurlHttpBasicAuth
url_persons: 'https://exemple.dataprovider.ext/api/persons'
url_person: 'https://exemple.dataprovider.ext/api/persons/%s'
username: IDENTIFIANT
password: MOTDEPASSE
```

Pour les organisations :

```yml
# config/connectors/organization_rest.yml
access_strategy: Oscar\Connector\Access\ConnectorAccessCurlHttpBasicAuth
url_organizations: 'https://exemple.dataprovider.ext/api/organizations'
url_organization: 'https://exemple.dataprovider.ext/api/organizations/%s'
username: IDENTIFIANT
password: MOTDEPASSE
```


#### HTTP Certificat SSL
Dans le cadre d'une connexion vers une api avec certificat il faudra compléter les éléments suivants avec vos informations

+185 −52
Original line number Diff line number Diff line
<template>
  <section style="position: relative; min-height: 100px">
    <div v-if="configuration" class="container">

      <div class="overlay" v-if="loading">
        <div class="overlay-content" :class="{ 'text-success bold': success}">
          <i class="animate-spin icon-spinner"></i>
          {{ loading }}
        </div>
      </div>


      <form action="" method="post">
        <div class="row">
          <div class="col-md-3">
@@ -15,13 +24,20 @@
        </div>

        <section :class="configuration.pcru_enabled ? 'enabled' : 'disabled'">

          <div class="row">
            <div class="col-md-12">
              <h2>Accès FTP</h2>
            <div class="col-md-6">
              <h2>
                <i class="icon-upload"></i>
                Accès FTP</h2>

              <div class="alert alert-info">
                <i class="icon-info-circled"></i>
                Le transfert FTP n'est pas encore activé dans cette version
              </div>

              <div class="row">
              <div class="col-md-5 col-md-push-1">
                <div class="col-md-8 col-md-push-1">
                  <div class="form-group">
                    <label class="sr-only" for="host"></label>
                    <div class="input-group input-lg">
@@ -35,7 +51,7 @@
              </div>

              <div class="row">
              <div class="col-md-5 col-md-push-1">
                <div class="col-md-8 col-md-push-1">
                  <div class="form-group">
                    <label class="sr-only" for="port"></label>
                    <div class="input-group input-lg">
@@ -49,7 +65,7 @@
              </div>

              <div class="row">
              <div class="col-md-5 col-md-push-1">
                <div class="col-md-8 col-md-push-1">
                  <div class="form-group">
                    <label class="sr-only" for="user"></label>
                    <div class="input-group input-lg">
@@ -63,7 +79,7 @@
              </div>

              <div class="row">
              <div class="col-md-5 col-md-push-1">
                <div class="col-md-8 col-md-push-1">
                  <password-field :value="configuration.pcru_pass"
                                  :name="'pass'"
                                  :text="'Mot de passe'"
@@ -72,7 +88,7 @@
              </div>

              <div class="row">
              <div class="col-md-5 col-md-push-1">
                <div class="col-md-8 col-md-push-1">
                  <div class="form-group">
                    <label class="sr-only" for="ssh"></label>
                    <div class="input-group input-lg">
@@ -85,14 +101,116 @@
                </div>
              </div>

            </div>

            <div class="col-md-6">
              <h2>
                <i class="icon-cog"></i>
                Options</h2>

              <div class="row">
                <div class="col-md-10 col-md-push-1">
                  <div class="form-group">
                    <label class="sr-only" for="user"></label>

                    <div class="input-group input-lg">
                      <div class="input-group-addon">
                        <i class="glyphicon icon-user"></i>
                        <strong>Type pour le contrat signé</strong>
                      </div>

                      <select name="" id="" class="form-control" v-model="configuration.pcru_contract_type">
                        <option
                            :value="type" v-for="type in configuration.contract_types"
                            :key="type">{{ type }}
                        </option>
                      </select>
                    </div>
                    <p class="alert alert-info">
                      <i class="icon-info-circled"></i>
                      Le type de contrat <strong>{{ configuration.pcru_contract_type }}</strong> sera utilisé par oscar pour selectionner le document à utiliser pour les données PCRU</p>
                  </div>
                  <hr>

                  <div class="form-group">
                    <label class="sr-only" for="user"></label>

                    <div class="input-group input-lg">
                      <div class="input-group-addon">
                        <i class="glyphicon icon-user"></i>
                        <strong>Responsable scientifique</strong>
                      </div>

                      <select name="" id="" class="form-control" v-model="configuration.pcru_incharge_role">
                        <option
                            :value="role" v-for="role in configuration.incharge_roles"
                            :key="role">{{ role }}
                        </option>
                      </select>
                    </div>
                    <p class="alert alert-info">
                      <i class="icon-info-circled"></i>
                      Oscar selectionnera les personnes avec le rôle <strong>{{ configuration.pcru_incharge_role }}</strong> de la fiche activité pour extraire le <em>Responsable scientifique côté PCRU</em>.</p>
                  </div>
                  <hr>

                  <div class="form-group">
                    <label class="sr-only" for="user"></label>
                    <div class="input-group input-lg">
                      <div class="input-group-addon">
                        <i class="glyphicon icon-user"></i>
                        <strong>Partenaire(s)</strong>
                      </div>

                      <div class="form-check" v-for="role,index in configuration.partner_roles">
                        <input type="checkbox"
                               :value="role"
                               v-model="configuration.pcru_partner_roles"
                               :id="'partner_role_option_' + index"
                        />
                        <label :for="'partner_role_option_' + index" class="form-check-label">{{ role }}</label>
                      </div>
                    </div>
                    <p class="alert alert-info">
                      <i class="icon-info-circled"></i>
                      Oscar utilisera le(s) rôle(s) <strong>{{ configuration.pcru_partner_roles.join(", ") }}</strong> des oragnisations de la fiche activité pour extraire le(s) partenaire(s) (les codes SIRET/EN doivent être renseignés).</p>
                  </div>

                  <hr>

                  <div class="form-group">
                    <label class="sr-only" for="user"></label>
                    <div class="input-group input-lg">
                      <div class="input-group-addon">
                        <i class="glyphicon icon-user"></i>
                        <strong>Unité(s)</strong>
                      </div>

                      <div class="form-check" v-for="role,index in configuration.unit_roles">
                        <input type="checkbox"
                               :value="role"
                               v-model="configuration.pcru_unit_roles"
                               :id="'unit_role_option_' + index"
                        />
                        <label :for="'unit_role_option_' + index" class="form-check-label">{{ role }}</label>
                      </div>
                    </div>
                  </div>
                  <p class="alert alert-info">
                    <i class="icon-info-circled"></i>
                    Oscar utilisera le(s) rôle(s) <strong>{{ configuration.pcru_unit_roles.join(", ") }}</strong> des oragnisations de la fiche activité pour extraire le code URM.</p>
                </div>
              </div>
            </div>

          </div>
        </section>
        <nav class="buttons text-center">
          <button type="button" class="btn btn-primary" @click="performEdit">
            <i class="icon-floppy"></i>
            Enregistrer
          </button>
            </div>
          </div>
        </section>
        </nav>
      </form>
    </div>
  </section>
@@ -130,7 +248,9 @@ export default {
  data() {
    return {
      formData: null,
      configuration: null
      configuration: null,
      loading: null,
      success: false
    }
  },

@@ -139,6 +259,8 @@ export default {

    performEdit() {

      this.loading = "Enregistrement de la configuration";

      let formData = new FormData();
      formData.append('pcru_enabled', this.configuration.pcru_enabled);
      formData.append('host', this.configuration.pcru_host);
@@ -146,6 +268,9 @@ export default {
      formData.append('user', this.configuration.pcru_user);
      formData.append('pass', this.configuration.pcru_pass);
      formData.append('ssh', this.configuration.pcru_ssh);
      formData.append('pcru_partner_roles', this.configuration.pcru_partner_roles);
      formData.append('pcru_unit_roles', this.configuration.pcru_unit_roles);
      formData.append('pcru_incharge_role', this.configuration.pcru_incharge_role);

      this.$http.post(this.url, formData).then(ok=>{
        this.fetch();
@@ -158,11 +283,19 @@ export default {
    },

    fetch() {
      this.success = "";
      this.loading = "Chargement de la configuration";
      this.$http.get(this.url).then(
          ok => {
            this.handlerSuccess(ok)
          }
      )
      ).then(foo => {
        this.success = true;
        this.loading = "Chargement terminé";
        setInterval(function(){
          this.loading = "";
        }.bind(this), 1000)
      })
    }
  },

+40 −0
Original line number Diff line number Diff line
<?php
/**
 * Created by PhpStorm.
 * User: bouvry
 * Date: 04/10/19
 * Time: 11:49
 */

namespace Oscar\Command;


use Oscar\Formatter\OscarFormatterConst;
use Oscar\Service\OscarConfigurationService;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Zend\ServiceManager\ServiceManager;

class OscarCommandDevTestCommand extends OscarAdvancedCommandAbstract
{
    protected static $defaultName = 'dev:test';

    protected function configure()
    {
        $this
            ->setDescription("Test pour le développement")
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        parent::execute($input, $output); // TODO: Change the autogenerated stub
        foreach ($this->getPersonService()->getAvailableRolesPersonActivity(OscarFormatterConst::FORMAT_ARRAY_ID_OBJECT) as $key=> $value){
            echo "$key => " . $value->getRoleId() . "\n";
        }
        return 0;
    }

}
 No newline at end of file
+6 −5
Original line number Diff line number Diff line
@@ -500,10 +500,10 @@ class ConnectorActivityJSON implements ConnectorInterface
                ->setTva($tva)
                ->setCodeEOTP($data->pfi)
                ->setActivityType($type)
                ->setDateSigned($data->datesigned ? new \DateTime($data->datesigned) : null)
                ->setDateOpened($data->datePFI ? new \DateTime($data->datePFI) : null)
                ->setDateSigned(property_exists($data, 'datesigned') ? new \DateTime($data->datesigned) : null)
                ->setDateOpened(property_exists($data, 'datePFI') ? new \DateTime($data->datePFI) : null)
                ->setStatus($status)
                ->setAmount(((double)$data->amount));
                ->setAmount(property_exists($data, 'amount') ? ((double)$data->amount) : 0.0);

            if (property_exists($data, 'datestart') ){
                try {
@@ -519,10 +519,11 @@ class ConnectorActivityJSON implements ConnectorInterface
                }
            }

            if ($data->dateend) {
            if (property_exists($data, 'dateend')) {
                try {
                    $dateEnd = new \DateTime($data->dateend);
                } catch (\Exception $e) {
                    $dateEnd = null;
                    $repport->adderror(
                        sprintf(
                            "Impossible d'extraire une date depuis la valeur %s pour l'activité %s",
@@ -610,7 +611,7 @@ class ConnectorActivityJSON implements ConnectorInterface
                        $datasPerson = (new DataExtractorFullname())->extract($fullName);
                        if ($datasPerson) {
                            $person = $this->getPersonOrCreate($datasPerson, $repport);
                            if (!$activity->hasPerson($person, $role)) {
                            if (!$activity->hasPerson($person, $roleObj)) {
                                try {
                                    $personActivity = new ActivityPerson();
                                    $this->entityManager->persist($personActivity);
Loading