---
# System prepended metadata

title: "\U0001F4FA Notifier le gestionnairePaie à la fin de la préparation (Go)"
tags: [GO, PayMonitor, assistantpaie]

---

# 📺 Notifier le gestionnairePaie à la fin de la préparation (Go)

###### tags: `PayMonitor` `assistantpaie` `GO`

Liens et ressources sur le sujet
- JIRA : https://luccasoftware.atlassian.net/browse/PA-2018


# 1. Impacts sur l'api Back de l'assistant paie
PayPeriodController : 

- GET api/pay-periods/{pay-periodid}/completion
Modification des arguments : nouvel objet PayPeriodInformation 
- GET api/pay-periods/{pay-periodid}/incompletion
Pas de changement dans la signature
- GET api/pay-periods/{pay-periodid}/archive
Produce : zip file

A venir en vXX : Routes dédiées à l'énumération, l'ajout et à la suppression de fichiers
- GET api/pay-periods/{pay-periodid}/attachments
- POST api/pay-periods/{pay-periodid}/attachments
- GET api/pay-periods/{pay-periodid}/attachments/{fileId}
- DELETE api/pay-periods/{pay-periodid}/attachments/{fileId}
 



# 2. Impacts sur les objets du domaine

- Ajout du champ AdditionalInformation à l'objet PayPeriod
- Nouvelle Relation 1-n entre un objet PayPeriod et un attachmentFile

### UML
```plantuml
@startuml
abstract class PayPeriodAction
{
    int Id
    DateTime Date
    PayPeriod PayPeriod
    Author Author
    PayPeriodActionType Type
    PayPeriodStatus ApplicableTaskStatus
}
abstract class PayPeriodStatusModification
{
    PayPeriodStatus NewStatus { get; }
}
PayPeriodAction <|-- PayPeriodStatusModification
PayPeriodStatusModification <|-- PayPeriodCompletion
PayPeriodStatusModification <|-- PayPeriodInCompletion


class PayPeriod
{
    int Id
    string Name
    DateTime Start
    DateTime End
    DateTime Deadline
    PayPeriodStatus Status

    **string? AdditonalInformation**
}


PayPeriod -- PayRecord
PayPeriod "1" *-- "n" PayPreparation
PayPeriod "1" *-- "n" PayPeriodAction


abstract class FileBase
class AttachmentFile
FileBase <|-- AttachmentFile 
PayPeriod "1" *-- "n" AttachmentFile : "Additional Files"
note "Possibilité d'ajouter des PJ au niveau d'une period" as N1
N1 -- AttachmentFile
N1 -- PayPeriod

class PayRecord
class PayPeriodInformation
{
    string additionalInformation
}
class AttachmentPeriodData
{
    Guid FileId
    string FileName
}
PayPeriodInformation "1" *-- "n" AttachmentPeriodData

@enduml
```



### Création de classes utilisée lors de l'appel à la route de clôture d'une période
```plantuml
@startuml
class PayPeriodInformationPayload
{
    string additionalInformation
}
class AttachmentPeriodData
{
    Guid FileId
    string FileName
}
PayPeriodInformationPayload "1" *-- "n" AttachmentPeriodData


@enduml
```



```plantuml
@startuml
AssitantPaie --> 



@enduml
```

### NB : Additional Files
AttachmentFile fortement liés à une préparation à l'heure actuelle. Avoir comment on dénoue cela
 ```
public class AttachmentFile : FileBase
{
    public int PreparationId { get; set; }
}
```

### NB : Zip Archive
- Une fois lors de la clôture, génération des fichiers "données de la période" et "informations complémentaires" 
    - Fichiers créés et stockés dans lucca files
    - A la décloture, purger les fichiers obsolètes

- Génération et stockage du zip ou à chaque demande ? 



# 3. Impacts sur la base de données
TPH sur attachmentfile
Ajout d'une colonne sur payperiod

# 5. Rôles et permissions
Page séparée sur le sujet : 

# 4. Stratégie de test
## Test d'api
How ?
## Tests unitaires
Business as usual


# Notes diverses

## Question à Clément Puëll

- Dans le cas de la génération d'une archive à partir de fichier déjà stockés dans Lucca file : Pas de stockage chez eux de l'archive
- Limite d'upload de 60M par fichier
- Pas de limite de durée de stockage : Nous sommes responsable de la totalité du cycle de vie.

### &#9888; Mis à disposition d'un fichier stocké dans Lucca files à un tiers
- Création d'un download token temporaire (60 secondes) pour autoriser l'accès.

Autres notions dans lucca files : 
- Upload :  permet un stockage "inmemory" temporaire avant persistance définitve sous forme de fichier.
- Disposable : Eléments déposés dans une zone sans authentification et pouvant être exposé à n'importe qui à l'aide d'un lien unique.




Question pour Alex
- Gestion des langues dans les dossiers => A voir avec Gagnardo => On met bien en place des clés de trad. On utilise la langue de l'utilisateur courant
- Que se passe t il quand on appuie sur "Annuler". On perd la saisie

## Questions à investiguer
~~- Creation des dossiers à l'interieur du zip ? => A verifier faisabilité.~~
~~- Type du fichier "informations complémententaires" => HTML to PDF ? ~~
- Prise en compte dans le modele objet/bdd des fichiers générés
