Commit 43a5cfff authored by Stéphane Bouvry's avatar Stéphane Bouvry
Browse files

Ajout des champs assietteSubventionnable, tva, currency et financialImpact

parent 9290e19d
Loading
Loading
Loading
Loading
+43 −5
Original line number Diff line number Diff line
@@ -34,6 +34,10 @@ Le fichier source est au [format JSON]([http://json.org/). Un échantillon de ce
    "datePFI": "2017-07-04",
    "type": "ANR",
    "amount": "0.0",
    "tva": null,
    "currency": null,
    "assietteSubventionnable": null,
    "financialImpact": null,
    "organizations": {
      "Laboratoire": ["Cyberdyne", "US Robots"]
    },
@@ -54,6 +58,10 @@ Le fichier source est au [format JSON]([http://json.org/). Un échantillon de ce
    "pfi": "",
    "type": "Colloques",
    "amount": 15000,
    "tva": 19.6,
    "currency": "Yens",
    "assietteSubventionnable": 5,
    "financialImpact": "Aucune",  
    "milestones": [

    ],
@@ -103,15 +111,16 @@ pfi | String | Oui | Non | EOTP/PFI de l'activité de re
datePFI         | Date ISO  | Oui       | Non    | Date d'ouverture du PFI
type            | String    | Oui       | Non    | Type d'activité, si Oscar ne trouve pas de type correspondant, la donnée est ignorée
amount          | Double    | Oui       | Non    | Montant de la convention
tva          | Double    | Oui       | Non    | Montant de la TVA (ex: 19.6)
currency          | Double    | Oui       | Non    | Nom ou symbole de la devise
assietteSubventionnable          | Double    | Oui       | Non    | Assiette subventionnable
financialImpact          | String    | Oui       | Non    | Aucune,Recette,Dépense
organizations   | Object    | Oui       | Non    | Voir détails dans [Gestion des organisations](#organizations)
persons         | Object    | Oui       | Non    | Voir détails dans [Gestion des personnes](#persons)
milestones      | Array     | Oui       | Non    | Voir détails dans [Gestion des jalons](#milestones)
payments        | Array     | Oui       | Non    | Voir détails dans [Gestion des versements](#payments)


Le corps vide d'un objet se présente ainsi :


```json
[
  {
@@ -127,6 +136,10 @@ Le corps vide d'un objet se présente ainsi :
    "pfi": "",
    "type": "",
    "amount": "",
    "tva": null,
    "currency": null,
    "assietteSubventionnable": null,
    "financialImpact": null,
    "organizations": {},
    "persons": {},
    "milestones": [],
@@ -298,6 +311,26 @@ Ces objets contiennent une clef `date` qui contiendra une Date ISO correspondant
> Les versements sans valeur dans la clef `date` mais avec une clef `predicted` seront tagués comme prévisionnels.


## La clef TVA (float, ex: 19.6)

La valeur doit correspondre à un taux présent dans la base de données (table `tva`)


## Currency (string, ex: €)

La valeur doit correspondre à un symbole / un intitulé de devise présent en base de données (table `currency`), Si rien n'est trouvé, Oscar mettra automatiquement l'euro en devise.


## assietteSubventionnable ( defaut : null, ex: 5.0 )

Valeur 


## financialImpact (ex: Recette)

Valeurs possibles : Aucune, Recette ou Dépense


# Importation depuis un fichier Excel

Oscar propose un utilitaire en ligne de commande pour convertir une source de donnée CSV en un fichier JSON.
@@ -343,7 +376,12 @@ return [
    25  => [
        'key' => "persons.Participants",
        'separator' => ','
    ]
    ],
    
    26  => "tva",
    27  => "financialImpact",
    28  => "currency",
    29  => "assietteSubventionnable",
];
```

+6 −1
Original line number Diff line number Diff line
@@ -38,5 +38,10 @@ return [
    25  => [
        'key' => "persons.Participants",
        'separator' => ','
    ]
    ],

    26  => "tva",
    27  => "financialImpact",
    28  => "currency",
    29  => "assietteSubventionnable",
];
+4 −3
Original line number Diff line number Diff line
0 uid,1 Description,2 Projet ACRONYME,3 Label,4 Project LABEL,5 PFI,Composante Responsable,Laboratoire1,Responsable Scientifique,Ingénieur 1,Ingénieur 2,Montant,Versement montant 1,Versement date 1,Versement date prévue 1,Versement montant 2,Versement date 2,Versement date prévue 2,Rapport financier,Date PFI,Type,Laboratoire 2,Date de signature,Versement Date 3,Versement Montant 3,Participants
R1,Description 1,RELATIV,Relativité restreinte,Théorie de la gravitation,EOTP201400002,Université des sciences de Berne,Olympia,Albert Einstein,Marcel Grossmann,,0,,,,,,,,,Concours scientifique,US Robot,,,,"Batman,Robin  "
R2,Description 2,RELATIV,Relativité générale,Théorie de la gravitation,EOTP201400003,Université des sciences de Berne,Université des sciences de Berlin,Albert Einstein,Marcel Grossmann,Maurice Solovine,45000,20000,2018-01-01,2018-01-01,25000,,2018-06-01,2018-04-15,2017-12-24,Concours scientifique,US Robot,2017-12-31,2020-12-31,"666,66","Spiderman, Pollux"
0 uid,1 Description,2 Projet ACRONYME,3 Label,4 Project LABEL,5 PFI,Composante Responsable,Laboratoire1,Responsable Scientifique,Ingénieur 1,Ingénieur 2,Montant,Versement montant 1,Versement date 1,Versement date prévue 1,Versement montant 2,Versement date 2,Versement date prévue 2,Rapport financier,Date PFI,Type,Laboratoire 2,Date de signature,Versement Date 3,Versement Montant 3,Participants,TVA,Impact financier,Devise,Assiette Subventionnable
R1,Description 1,RELATIV,Relativité restreinte,Théorie de la gravitation,EOTP201400002,Université des sciences de Berne,Olympia,Albert Einstein,Marcel Grossmann,Serge Le Normand,0,,,,,,,,,Concours scientifique,US Robot,,,,"Batman,Robin  ",,Recette,,
R2,Description 2,RELATIV,Relativité générale,Théorie de la gravitation,EOTP201400003,Université des sciences de Berne,Université des sciences de Berlin,Albert Einstein,Marcel Grossmann,Maurice Solovine,45000,20000,2018-01-01,2018-01-01,25000,,2018-06-01,2018-04-15,2017-12-24,Concours scientifique,US Robot,2017-12-31,2020-12-31,"666,66","Spiderman, Pollux",,Dépense,$,15
R3,Mécanique quantique,QUANTIK,Théorie des cordes,Mécanique quantique,EOTP201600004,Université des sciences de Berne,Université des sciences de Berlin,Max Plank,Niels Bohr,Erwin Schrödinger,15000,,,,,,,,,,US Robot,,,,,19.6,Aucune,Yens,5
+27 −2
Original line number Diff line number Diff line
@@ -205,6 +205,10 @@ class ConnectorActivityCSVWithConf implements ConnectorInterface
                "persons" => [],
                "milestones" => [],
                "payments" => [],
                "tva" => null,
                "currency" => null,
                "assietteSubventionnable" => null,
                "financialImpact" => null
            ];

            foreach ($datas as $index => $value) {
@@ -281,10 +285,31 @@ class ConnectorActivityCSVWithConf implements ConnectorInterface
                        "date" => $paymentDatePayment,
                        "predicted" => $paymentDatePredicted,
                    ];
                } // PFI
                }

                // PFI
                else if ($key == "currency") {
                    $json['currency'] = $value;
                }

                else if ($key == "tva") {
                    $json['tva'] = floatval(str_replace(',', '.', $value));
                }

                else if ($key == "assietteSubventionnable") {
                    $json['assietteSubventionnable'] = (float)$value;
                }

                else if ($key == "financialImpact") {
                    $json['financialImpact'] = $value;
                }

                // PFI
                else if ($key == "PFI") {
                    $json['pfi'] = $value;
                } else if ($key == "datePFI") {
                }

                else if ($key == "datePFI") {
                    $json['datepfi'] = $value;
                } else if ($key == "type") {
                    $json['type'] = $value;
+56 −4
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ use Oscar\Entity\Person;
use Oscar\Entity\PersonRepository;
use Oscar\Entity\Project;
use Oscar\Entity\Role;
use Oscar\Entity\TVA;
use Oscar\Exception\ConnectorException;
use Oscar\Exception\OscarException;
use Oscar\Import\Data\DataExtractorFullname;
@@ -308,6 +309,44 @@ class ConnectorActivityJSON implements ConnectorInterface
        return $this->entityManager->getRepository(Organization::class);
    }

    /**
     * @param $symbolOrName
     * @return Currency
     * @throws OscarException
     */
    protected function getCurrency( $symbolOrName ){
        static $currencies;
        if( $currencies === null ){
            $currencies = $this->entityManager->getRepository(Currency::class)->findAll();
        }
        /** @var Currency $currency */
        foreach ($currencies as $currency ){
            if( $currency->getLabel() == $symbolOrName || $currency->getSymbol() == $symbolOrName ){
                return $currency;
            }
        }
        throw new OscarException("Impossible de trouver la devise '$symbolOrName'");
    }

    /**
     * @param $tauxTVA
     * @return TVA
     * @throws OscarException
     */
    protected function getTva( $tauxTVA ){
        static $tvas;
        if( $tvas === null ){
            $tvas = $this->entityManager->getRepository(TVA::class)->findAll();
        }
        /** @var TVA $tva */
        foreach ($tvas as $tva ){
            if( $tva->getRate() == $tauxTVA ){
                return $tva;
            }
        }
        throw new OscarException("Impossible de trouver la TVA '$tauxTVA'");
    }

    protected function getPropertyObject( $object, $property, $required = true, $type=null ){
        if( !property_exists($object, $property) ){
            if( $required === true )
@@ -397,11 +436,27 @@ class ConnectorActivityJSON implements ConnectorInterface
            $dateStart = null;
            $dateEnd = null;

            if( $data->currency ){
                $currency = $this->getCurrency($data->currency);
            } else {
                $currency = $defaultCurrency;
            }

            if( $data->currency ){
                $tva = $this->getTva($data->tva);
            } else {
                $tva = null;
            }



            $activity
                ->setLabel($this->getPropertyObject($data, 'label'))
                ->setDescription($this->getPropertyObject($data, 'description', false))
                ->setCurrency($defaultCurrency)
                ->setFinancialImpact($this->getPropertyObject($data, 'financialImpact', false))
                ->setAssietteSubventionnable($this->getPropertyObject($data, 'assietteSubventionnable', false))
                ->setCurrency($currency)
                ->setTva($tva)
                ->setCodeEOTP($data->pfi)
                ->setActivityType($type)
                ->setDateSigned($data->datesigned ? new \DateTime($data->datesigned) : null)
@@ -534,8 +589,6 @@ class ConnectorActivityJSON implements ConnectorInterface
                            $paymentData->amount));
                    }



                    try {
                        $datePayment = $paymentData->date ?
                            new \DateTime($paymentData->date) :
@@ -559,7 +612,6 @@ class ConnectorActivityJSON implements ConnectorInterface
                        $paymentStatus = ActivityPayment::STATUS_REALISE;
                    }


                    if( !$activity->hasPaymentAt( $amount, $datePayment, $datePredicted) ){
                        $payment = new ActivityPayment();
                        $this->entityManager->persist($payment);
Loading