From 73ea62bff656c5c28e47f5b1cafc56c164f09f8b Mon Sep 17 00:00:00 2001 From: antooinerobin Date: Mon, 20 Nov 2023 22:04:16 +0100 Subject: [PATCH] transverses: add comments and remove options validations --- date.go | 4 + error.go | 29 +--- factures.go | 6 + transverses_categories.go | 58 +++++--- transverses_categories_test.go | 21 +-- transverses_etats.go | 57 +++---- transverses_etats_test.go | 40 +---- transverses_flux.go | 85 ++++++----- transverses_flux_test.go | 44 ++---- transverses_misc.go | 27 ---- transverses_misc_test.go | 23 --- transverses_pieces_jointes.go | 218 +++++++++------------------ transverses_pieces_jointes_test.go | 229 +---------------------------- transverses_structures.go | 87 ++++++----- transverses_structures_test.go | 79 +--------- transverses_tva.go | 31 ++-- transverses_tva_test.go | 4 +- transverses_types.go | 37 +++-- transverses_types_test.go | 6 +- 19 files changed, 322 insertions(+), 763 deletions(-) diff --git a/date.go b/date.go index d2b0bec..0d02fd0 100644 --- a/date.go +++ b/date.go @@ -4,20 +4,24 @@ import ( "time" ) +// Date is a custom type to handle date format (YYYY-MM-DD) type Date struct { time.Time } +// UnmarshalJSON is a custom unmarshaler for Date func (t *Date) UnmarshalJSON(data []byte) error { var err error t.Time, err = time.Parse("\"2006-01-02\"", string(data)) return err } +// Datetime is a custom type to handle datetime format (YYYY-MM-DD HH:MM) type Datetime struct { time.Time } +// UnmarshalJSON is a custom unmarshaler for Datetime func (t *Datetime) UnmarshalJSON(data []byte) error { var err error t.Time, err = time.Parse("\"2006-01-02 15:04\"", string(data)) diff --git a/error.go b/error.go index 6fc10a4..85cf3e1 100644 --- a/error.go +++ b/error.go @@ -6,15 +6,18 @@ import ( "net/http" ) +// APIError is the error returned by the API type APIError struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` } +// Error returns the error message func (e APIError) Error() string { return fmt.Sprintf("choruspro: error (code %v) : %v", e.CodeRetour, e.Libelle) } +// parseError parses the error returned by the API func parseError(res *http.Response) error { apiErr := APIError{} @@ -25,29 +28,3 @@ func parseError(res *http.Response) error { return apiErr } - -type ValidationError struct { - Errors []ValidationErrorItem `json:"errors"` -} - -type ValidationErrorItem struct { - Code string `json:"code"` - Message string `json:"message"` -} - -func (e ValidationError) Error() string { - return fmt.Sprintf("choruspro: validation error : %v", e.Errors) -} - -type ErreurDemandePaiement struct { - IdentifiantDestinataire string `json:"identifiantDestinataire,omitempty"` - IdentifiantFournisseur string `json:"identifiantFournisseur,omitempty"` - LibelleErreurDP string `json:"libelleErreurDP,omitempty"` - NumeroDP string `json:"numeroDP,omitempty"` -} - -type ErreurTechnique struct { - CodeErreur string `json:"codeErreur,omitempty"` - LibelleErreur string `json:"libelleErreur,omitempty"` - NatureErreur string `json:"natureErreur,omitempty"` -} diff --git a/factures.go b/factures.go index 24d32fe..5aee939 100644 --- a/factures.go +++ b/factures.go @@ -4,6 +4,7 @@ package choruspro // API docs : https://developer.aife.economie.gouv.fr/api-catalog-sandbox?filter=Factures type FacturesService service +// Action Facture est le type des actions possibles sur une facture type ActionFacture string const ( @@ -15,6 +16,7 @@ const ( ActionFactureRejet ActionFacture = "REJET" ) +// CadreFac est le type des cadres de facturation type CadreFac string const ( @@ -45,6 +47,7 @@ const ( CodeFacA25 CadreFac = "A25_DECOMPTE_GENERAL_DEFINITIF_MOE_PROCEDURE_TACITE" ) +// RoleUtilisateur est le type des rôles possibles pour un utilisateur type RoleUtilisateur string const ( @@ -55,6 +58,7 @@ const ( RoleDestinataire RoleUtilisateur = "DESTINATAIRE" ) +// TypeFacture est le type des factures type TypeFacture string const ( @@ -63,6 +67,7 @@ const ( TypeFactureAcompte TypeFacture = "ACOMPTE" ) +// TypeTva est le type des TVA type TypeTva string const ( @@ -72,6 +77,7 @@ const ( TypeTvaSansTva TypeTva = "SANS_TVA" ) +// TypeIdentifiant est le type des identifiants pour identifier un tiers type TypeIdentifiant string const ( diff --git a/transverses_categories.go b/transverses_categories.go index 4f9eaa9..fae6da5 100644 --- a/transverses_categories.go +++ b/transverses_categories.go @@ -6,13 +6,8 @@ import ( "time" ) -type ListeCategoriesSollicitation struct { - CodeRetour int32 `json:"codeRetour"` - Libelle string `json:"libelle"` - Categories []CategorieSollicitation `json:"listeCategories"` - Pagination *PaginationResponse `json:"parametresRetour"` -} - +// ListeCategoriesSollicitationOptions est la structure de données utlisée +// pour appeler la méthode RechercherCategoriesSollicitation. type ListeCategoriesSollicitationOptions struct { Code string `json:"codeCategorie,omitempty"` EstActif bool `json:"estActif,omitempty"` @@ -20,13 +15,24 @@ type ListeCategoriesSollicitationOptions struct { Pagination *PaginationOptions `json:"pagination,omitempty"` } -func (s *TransversesService) RechercherCategoriesSollicitation(ctx context.Context, opts ListeCategoriesSollicitationOptions) (*ListeCategoriesSollicitation, error) { +// ListeCategoriesSollicitationResponse est la structure de données représentant +// la réponse de la méthode RechercherCategoriesSollicitation. +type ListeCategoriesSollicitationResponse struct { + CodeRetour int32 `json:"codeRetour"` + Libelle string `json:"libelle"` + Categories []CategorieSollicitation `json:"listeCategories"` + Pagination *PaginationResponse `json:"parametresRetour"` +} + +// La méthode RechercherCategoriesSollicitation permet de rechercher les valeurs +// du référentiel catégorie Sollicitation paramétrées pour le mode connecté +func (s *TransversesService) RechercherCategoriesSollicitation(ctx context.Context, opts ListeCategoriesSollicitationOptions) (*ListeCategoriesSollicitationResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/rechercher/categorieSollicitation", opts) if err != nil { return nil, err } - categories := new(ListeCategoriesSollicitation) + categories := new(ListeCategoriesSollicitationResponse) err = s.client.doRequest(ctx, req, categories) if err != nil { @@ -36,24 +42,42 @@ func (s *TransversesService) RechercherCategoriesSollicitation(ctx context.Conte return categories, nil } -type ListeSousCategoriesSollicitation struct { +// ListeSousCategoriesSollicitationOptions est la structure de données utlisée +// pour appeler la méthode RechercherSousCategoriesSollicitation. +type ListeSousCategoriesSollicitationOptions struct { + Code string `json:"code,omitempty"` + EstActif bool `json:"estActif,omitempty"` + IdTechniqueCategorie int64 `json:"idTechniqueCategorie,omitempty"` + Libelle string `json:"libelle,omitempty"` + PaginationOptions *PaginationOptions `json:"pagination,omitempty"` +} + +// ListeSousCategoriesSollicitationResponse est la structure de données représentant +// la réponse de la méthode RechercherSousCategoriesSollicitation. +type ListeSousCategoriesSollicitationResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` SousCategories []SousCategoriesSolliciation `json:"listeSousCategories"` Pagination *PaginationResponse `json:"parametresRetour"` } +// SousCategoriesSolliciation est la structure de données représentant +// des liste de catégories et de sous-catégories de sollicitation. type SousCategoriesSolliciation struct { Categories []CategorieSollicitation `json:"categorie"` SousCategories []SousCategorieSollicitation `json:"ssCategorie"` } +// CategorieSollicitation est la structure de données représentant +// une catégorie de sollicitation. type CategorieSollicitation struct { Code string `json:"codeCategorie"` Libelle string `json:"libelleCategorie"` IdTechnique int64 `json:"idTechniqueCategorie"` } +// SousCategorieSollicitation est la structure de données représentant +// une sous-catégorie de sollicitation. type SousCategorieSollicitation struct { Code string `json:"code"` DateCreation *time.Time `json:"dateCreation"` @@ -63,21 +87,15 @@ type SousCategorieSollicitation struct { Libelle string `json:"libelle"` } -type ListeSousCategoriesSollicitationOptions struct { - Code string `json:"code,omitempty"` - EstActif bool `json:"estActif,omitempty"` - IdTechniqueCategorie int64 `json:"idTechniqueCategorie,omitempty"` - Libelle string `json:"libelle,omitempty"` - PaginationOptions *PaginationOptions `json:"pagination,omitempty"` -} - -func (s *TransversesService) RechercherSousCategoriesSollicitation(ctx context.Context, opts ListeSousCategoriesSollicitationOptions) (*ListeSousCategoriesSollicitation, error) { +// Le service RechercherSousCategoriesSollicitation permet de rechercher les +// valeurs du référentiel Sous-catégorie Sollicitation paramétrées pour le mode connecté. +func (s *TransversesService) RechercherSousCategoriesSollicitation(ctx context.Context, opts ListeSousCategoriesSollicitationOptions) (*ListeSousCategoriesSollicitationResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/rechercher/sousCategorieSollicitation", opts) if err != nil { return nil, err } - categories := new(ListeSousCategoriesSollicitation) + categories := new(ListeSousCategoriesSollicitationResponse) err = s.client.doRequest(ctx, req, categories) if err != nil { diff --git a/transverses_categories_test.go b/transverses_categories_test.go index 33ac8fe..cad0f20 100644 --- a/transverses_categories_test.go +++ b/transverses_categories_test.go @@ -6,15 +6,6 @@ import ( "net/http" "reflect" "testing" - "time" -) - -const ( - referenceTimeStr = `"2023-01-01T00:00:00Z"` -) - -var ( - referenceTime = time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) ) func TestTransversesService_RechercherCategoriesSollicitation(t *testing.T) { @@ -50,7 +41,7 @@ func TestTransversesService_RechercherCategoriesSollicitation(t *testing.T) { t.Errorf("Transverses.RechercherCategoriesSollicitation returned error : %v", err) } - want := &ListeCategoriesSollicitation{ + want := &ListeCategoriesSollicitationResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Categories: []CategorieSollicitation{{ @@ -96,8 +87,8 @@ func TestTransversesService_RechercherSousCategoriesSollicitation(t *testing.T) "ssCategorie": [ { "code": "c", - "dateCreation": ` + referenceTimeStr + `, - "dateDerniereModification": ` + referenceTimeStr + `, + "dateCreation": ` + defaultISODateTimeStr + `, + "dateDerniereModification": ` + defaultISODateTimeStr + `, "estActif": true, "idTechniqueCategorie": 1, "libelle": "l" @@ -115,7 +106,7 @@ func TestTransversesService_RechercherSousCategoriesSollicitation(t *testing.T) t.Errorf("Transverses.RechercherSousCategoriesSollicitation returned error : %v", err) } - want := &ListeSousCategoriesSollicitation{ + want := &ListeSousCategoriesSollicitationResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", SousCategories: []SousCategoriesSolliciation{{ @@ -126,8 +117,8 @@ func TestTransversesService_RechercherSousCategoriesSollicitation(t *testing.T) }}, SousCategories: []SousCategorieSollicitation{{ Code: "c", - DateCreation: &referenceTime, - DateDerniereModification: &referenceTime, + DateCreation: &defaultDate, + DateDerniereModification: &defaultDate, EstActif: true, IdTechnique: 1, Libelle: "l", diff --git a/transverses_etats.go b/transverses_etats.go index 2c65cda..7bbb7c0 100644 --- a/transverses_etats.go +++ b/transverses_etats.go @@ -2,44 +2,39 @@ package choruspro import ( "context" - "errors" "net/http" ) -type ListeEtatsTypeDemandePaiement struct { +// ListeEtatsTypeDemandePaiementResponse est la structure de données représentant +// la réponse de la méthode RecupererEtatParTypeDemandePaiement. +type ListeEtatsTypeDemandePaiementResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Etats []EtatTypeDemandePaiement `json:"listeEtatDemandePaiement"` } +// EtatTypeDemandePaiement est la structure de données représentant +// un état de demande de paiement. type EtatTypeDemandePaiement struct { Etat string `json:"etatDemandePaiement"` } +// ListeEtatsTypeDemandePaiementOptions est la structure de données utlisée +// pour appeler la méthode RecupererEtatParTypeDemandePaiement. type ListeEtatsTypeDemandePaiementOptions struct { TypeDemandePaiement string `json:"typeDemandePaiement,omitempty"` } -func (o *ListeEtatsTypeDemandePaiementOptions) Validate() error { - if o.TypeDemandePaiement == "" { - return errors.New("TypeDemandePaiement is required") - } - - return nil -} - -func (s *TransversesService) RecupererEtatParTypeDemandePaiement(ctx context.Context, opts ListeEtatsTypeDemandePaiementOptions) (*ListeEtatsTypeDemandePaiement, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - +// La méthode recupererEtatParTypeDemandePaiement permet de récupérer +// l'ensemble des statuts pouvant s'appliquer à une demande de paiement +// en fonction du type de demande de paiement. +func (s *TransversesService) RecupererEtatParTypeDemandePaiement(ctx context.Context, opts ListeEtatsTypeDemandePaiementOptions) (*ListeEtatsTypeDemandePaiementResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/etat/typedp", opts) if err != nil { return nil, err } - etats := new(ListeEtatsTypeDemandePaiement) + etats := new(ListeEtatsTypeDemandePaiementResponse) err = s.client.doRequest(ctx, req, etats) if err != nil { @@ -49,40 +44,36 @@ func (s *TransversesService) RecupererEtatParTypeDemandePaiement(ctx context.Con return etats, nil } -type ListeEtatsTraitement struct { +// ListeEtatsTraitementResponse est la structure de données représentant +// la réponse de la méthode RecupererEtatsPossiblesPourTraitement. +type ListeEtatsTraitementResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Etats []EtatTraitement `json:"listeStatutsPossiblesPourTraitement"` } +// EtatTraitement est la structure de données représentant +// le statut possible pour le traitement d'une facture. type EtatTraitement struct { Etat string `json:"statutPossiblePourTraitement"` } +// ListeEtatsTraitementOptions est la structure de données utlisée +// pour appeler la méthode RecupererEtatsPossiblesPourTraitement. type ListeEtatsTraitementOptions struct { EtatCourant string `json:"statutCourant"` } -func (o *ListeEtatsTraitementOptions) Validate() error { - if o.EtatCourant == "" { - return errors.New("EtatCourant is required") - } - - return nil -} - -func (s *TransversesService) RecupererEtatsTraitement(ctx context.Context, opts ListeEtatsTraitementOptions) (*ListeEtatsTraitement, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - +// La méthode RecupererEtatsPossiblesPourTraitement permet de récupérer +// la liste des statuts pouvant être renseignés par un destinataire souhaitant +// traiter une facture en fonction du statut actuel de la demande de paiement. +func (s *TransversesService) RecupererEtatsPossiblesPourTraitement(ctx context.Context, opts ListeEtatsTraitementOptions) (*ListeEtatsTraitementResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/etats/traitement", opts) if err != nil { return nil, err } - etats := new(ListeEtatsTraitement) + etats := new(ListeEtatsTraitementResponse) err = s.client.doRequest(ctx, req, etats) if err != nil { diff --git a/transverses_etats_test.go b/transverses_etats_test.go index fc88c1a..d3860c9 100644 --- a/transverses_etats_test.go +++ b/transverses_etats_test.go @@ -37,7 +37,7 @@ func TestTransversesService_RecupererEtatParTypeDemandePaiement(t *testing.T) { t.Errorf("Transverses.RecupererEtatParTypeDemandePaiement returned error : %v", err) } - want := &ListeEtatsTypeDemandePaiement{ + want := &ListeEtatsTypeDemandePaiementResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Etats: []EtatTypeDemandePaiement{{ @@ -56,19 +56,7 @@ func TestTransversesService_RecupererEtatParTypeDemandePaiement(t *testing.T) { }) } -func TestTransversesService_RecupererEtatParTypeDemandePaiement_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - opt := ListeEtatsTypeDemandePaiementOptions{} - _, err := client.Transverses.RecupererEtatParTypeDemandePaiement(ctx, opt) - - if err == nil { - t.Errorf("Transverses.RecupererEtatParTypeDemandePaiement returned error: nil") - } -} - -func TestTransversesService_RecupererEtatsTraitement(t *testing.T) { +func TestTransversesService_RecupererEtatsPossiblesPourTraitement(t *testing.T) { client, mux, teardown := setup() defer teardown() @@ -92,12 +80,12 @@ func TestTransversesService_RecupererEtatsTraitement(t *testing.T) { ctx := context.Background() opt := ListeEtatsTraitementOptions{"t"} - got, err := client.Transverses.RecupererEtatsTraitement(ctx, opt) + got, err := client.Transverses.RecupererEtatsPossiblesPourTraitement(ctx, opt) if err != nil { - t.Errorf("Transverses.RecupererEtatsTraitement returned error : %v", err) + t.Errorf("Transverses.RecupererEtatsPossiblesPourTraitement returned error : %v", err) } - want := &ListeEtatsTraitement{ + want := &ListeEtatsTraitementResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Etats: []EtatTraitement{{ @@ -107,23 +95,11 @@ func TestTransversesService_RecupererEtatsTraitement(t *testing.T) { }}, } if !reflect.DeepEqual(got, want) { - t.Errorf("Transverses.RecupererEtatsTraitement returned %+v, want %+v", got, want) + t.Errorf("Transverses.RecupererEtatsPossiblesPourTraitement returned %+v, want %+v", got, want) } - testNewRequestAndDoRequestFailure(t, "RecupererEtatsTraitement", client, func() error { - _, err := client.Transverses.RecupererEtatsTraitement(ctx, opt) + testNewRequestAndDoRequestFailure(t, "RecupererEtatsPossiblesPourTraitement", client, func() error { + _, err := client.Transverses.RecupererEtatsPossiblesPourTraitement(ctx, opt) return err }) } - -func TestTransversesService_RecupererEtatsTraitement_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - opt := ListeEtatsTraitementOptions{} - _, err := client.Transverses.RecupererEtatsTraitement(ctx, opt) - - if err == nil { - t.Errorf("Transverses.RecupererEtatsTraitement returned error: nil") - } -} diff --git a/transverses_flux.go b/transverses_flux.go index 830bf1b..846fba4 100644 --- a/transverses_flux.go +++ b/transverses_flux.go @@ -2,23 +2,27 @@ package choruspro import ( "context" - "errors" - "fmt" "net/http" "time" ) -type ListeFormatsFlux struct { +// ListeFormatsFluxResponse est la structure de données représentant +// la réponse de la méthode RecupererFormatFlux. +type ListeFormatsFluxResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Formats []FormatFlux `json:"listeFormatFlux"` } +// FormatFlux est la structure de données représentant +// un format de flux. type FormatFlux struct { FormatFlux string `json:"formatFlux,omitempty"` } -func (s *TransversesService) RecupererFormatFlux(ctx context.Context) (*ListeFormatsFlux, error) { +// La méthode RecupererFormatFlux permet de récupérer les valeurs +// pouvant être renseignées lors du dépôt d'un flux pour renseigner le format du flux. +func (s *TransversesService) RecupererFormatFlux(ctx context.Context) (*ListeFormatsFluxResponse, error) { opts := struct{}{} req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/formatflux", opts) @@ -26,7 +30,7 @@ func (s *TransversesService) RecupererFormatFlux(ctx context.Context) (*ListeFor return nil, err } - formats := new(ListeFormatsFlux) + formats := new(ListeFormatsFluxResponse) err = s.client.doRequest(ctx, req, formats) if err != nil { @@ -36,7 +40,9 @@ func (s *TransversesService) RecupererFormatFlux(ctx context.Context) (*ListeFor return formats, nil } -type CompteRendu struct { +// ConsulterCompteRenduResponse est la structure de données représentant +// la réponse de la méthode ConsulterCompteRendu. +type ConsulterCompteRenduResponse struct { CodeAppliPartenaire string `json:"codeAppliPartenaire,omitempty"` CodeInterfaceFlux string `json:"codeInterfaceFlux,omitempty"` CodeRetour int `json:"codeRetour"` @@ -50,32 +56,24 @@ type CompteRendu struct { NumeroFluxDepot string `json:"numeroFluxDepot,omitempty"` } +// ConsulterCompteRenduOptions est la structure de données représentant +// les options de la méthode ConsulterCompteRendu. type ConsulterCompteRenduOptions struct { DateDepot *time.Time `json:"dateDepot,omitempty"` NumeroFluxDepot string `json:"numeroFluxDepot"` SyntaxeFlux SyntaxeFlux `json:"syntaxeFlux,omitempty"` } -func (o ConsulterCompteRenduOptions) Validate() error { - if o.NumeroFluxDepot == "" { - return errors.New("choruspro: NumeroFluxDepot is required") - } - - return nil -} - -func (s *TransversesService) ConsulterCompteRendu(ctx context.Context, opts ConsulterCompteRenduOptions) (*CompteRendu, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - +// Le service ConsulterCompteRendu permet de consulter les informations +// liées au dépôt d'un flux et de récupérer au format PDF le compte rendu +// de traitement du flux déposé via le portail ou le service exposé DeposerFluxFacture. +func (s *TransversesService) ConsulterCompteRendu(ctx context.Context, opts ConsulterCompteRenduOptions) (*ConsulterCompteRenduResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/consulterCR", opts) if err != nil { return nil, err } - formats := new(CompteRendu) + formats := new(ConsulterCompteRenduResponse) err = s.client.doRequest(ctx, req, formats) if err != nil { @@ -85,7 +83,28 @@ func (s *TransversesService) ConsulterCompteRendu(ctx context.Context, opts Cons return formats, nil } -type CompteRenduDetaille struct { +// ErreurDemandePaiement est la structure de données représentant +// une erreur de demande de paiement. Elle est utilisée dans la +// structure CompteRenduDetaille. +type ErreurDemandePaiement struct { + IdentifiantDestinataire string `json:"identifiantDestinataire,omitempty"` + IdentifiantFournisseur string `json:"identifiantFournisseur,omitempty"` + LibelleErreurDP string `json:"libelleErreurDP,omitempty"` + NumeroDP string `json:"numeroDP,omitempty"` +} + +// ErreurTechnique est la structure de données représentant +// une erreur technique. Elle est utilisée dans la +// structure CompteRenduDetaille. +type ErreurTechnique struct { + CodeErreur string `json:"codeErreur,omitempty"` + LibelleErreur string `json:"libelleErreur,omitempty"` + NatureErreur string `json:"natureErreur,omitempty"` +} + +// CompteRenduDetailleResponse est la structure de données représentant +// le compte rendu détaillé d'un dépôt de flux. +type CompteRenduDetailleResponse struct { CodeInterfaceDepotFlux string `json:"codeInterfaceDepotFlux,omitempty"` CodeRetour int32 `json:"codeRetour"` DateDepotFlux *time.Time `json:"dateDepotFlux,omitempty"` @@ -97,31 +116,23 @@ type CompteRenduDetaille struct { ErreursTechniques []ErreurTechnique `json:"listeErreurTechnique,omitempty"` } +// ConsulterCompteRenduDetailleOptions est la structure de données représentant +// les options de la méthode ConsulterCompteRenduDetaille. type ConsulterCompteRenduDetailleOptions struct { NumeroFluxDepot string `json:"numeroFluxDepot"` SyntaxeFlux SyntaxeFlux `json:"syntaxeFlux,omitempty"` } -func (o ConsulterCompteRenduDetailleOptions) Validate() error { - if o.NumeroFluxDepot == "" { - return fmt.Errorf("choruspro: NumeroFluxDepot is required") - } - - return nil -} - -func (s *TransversesService) ConsulterCompteRenduDetaille(ctx context.Context, opts ConsulterCompteRenduDetailleOptions) (*CompteRenduDetaille, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - +// Le service ConsulterCompteRenduDetaille permet de consulter l'état d'intégration d'un +// flux émis en API, avec le cas échéant les erreurs identifiées par le système +// pour l'irrecevabilité du flux ou le rejet d'une ou plusieurs demandes de paiement. +func (s *TransversesService) ConsulterCompteRenduDetaille(ctx context.Context, opts ConsulterCompteRenduDetailleOptions) (*CompteRenduDetailleResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/consulterCRDetaille", opts) if err != nil { return nil, err } - formats := new(CompteRenduDetaille) + formats := new(CompteRenduDetailleResponse) err = s.client.doRequest(ctx, req, formats) if err != nil { diff --git a/transverses_flux_test.go b/transverses_flux_test.go index ce07bcd..021505c 100644 --- a/transverses_flux_test.go +++ b/transverses_flux_test.go @@ -37,7 +37,7 @@ func TestTransversesService_RecupererFormatFlux(t *testing.T) { t.Errorf("Transverses.RecupererFormatFlux returned error : %v", err) } - want := &ListeFormatsFlux{ + want := &ListeFormatsFluxResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Formats: []FormatFlux{{ @@ -68,8 +68,8 @@ func TestTransversesService_ConsulterCompteRendu(t *testing.T) { "codeAppliPartenaire": "cap", "codeInterfaceFlux": "cif", "codeRetour": 0, - "dateDepotFlux": ` + referenceTimeStr + `, - "dateHeureEtatCourantFlux": ` + referenceTimeStr + `, + "dateDepotFlux": ` + defaultISODateTimeStr + `, + "dateHeureEtatCourantFlux": ` + defaultISODateTimeStr + `, "designationPartenaire": "dp", "etatCourantFlux": "ecl", "fichierCR": "f", @@ -87,12 +87,12 @@ func TestTransversesService_ConsulterCompteRendu(t *testing.T) { t.Errorf("Transverses.ConsulterCompteRendu returned error : %v", err) } - want := &CompteRendu{ + want := &ConsulterCompteRenduResponse{ CodeAppliPartenaire: "cap", CodeInterfaceFlux: "cif", CodeRetour: 0, - DateDepotFlux: &referenceTime, - DateHeureEtatCourantFlux: &referenceTime, + DateDepotFlux: &defaultDate, + DateHeureEtatCourantFlux: &defaultDate, DesignationPartenaire: "dp", EtatCourantFlux: "ecl", FichierCR: "f", @@ -110,17 +110,6 @@ func TestTransversesService_ConsulterCompteRendu(t *testing.T) { }) } -func TestTransversesService_ConsulterCompteRendu_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - _, err := client.Transverses.ConsulterCompteRendu(ctx, ConsulterCompteRenduOptions{}) - - if err == nil { - t.Errorf("Transverses.ConsulterCompteRendu returned error: nil") - } -} - func TestTransversesService_ConsulterCompteRenduDetaille(t *testing.T) { client, mux, teardown := setup() defer teardown() @@ -132,8 +121,8 @@ func TestTransversesService_ConsulterCompteRenduDetaille(t *testing.T) { w.Write([]byte(`{ "codeInterfaceDepotFlux": "cidf", "codeRetour": 0, - "dateDepotFlux": ` + referenceTimeStr + `, - "dateHeureEtatCourantFlux": ` + referenceTimeStr + `, + "dateDepotFlux": ` + defaultISODateTimeStr + `, + "dateHeureEtatCourantFlux": ` + defaultISODateTimeStr + `, "etatCourantDepotFlux": "ecdf", "libelle": "l", "nomFichier": "nf", @@ -164,11 +153,11 @@ func TestTransversesService_ConsulterCompteRenduDetaille(t *testing.T) { t.Errorf("Transverses.ConsulterCompteRenduDetaille returned error : %v", err) } - want := &CompteRenduDetaille{ + want := &CompteRenduDetailleResponse{ CodeInterfaceDepotFlux: "cidf", CodeRetour: 0, - DateDepotFlux: &referenceTime, - DateHeureEtatCourantFlux: &referenceTime, + DateDepotFlux: &defaultDate, + DateHeureEtatCourantFlux: &defaultDate, EtatCourantDepotFlux: "ecdf", Libelle: "l", NomFichier: "nf", @@ -197,14 +186,3 @@ func TestTransversesService_ConsulterCompteRenduDetaille(t *testing.T) { return err }) } - -func TestTransversesService_ConsulterCompteRenduDetaille_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - _, err := client.Transverses.ConsulterCompteRenduDetaille(ctx, ConsulterCompteRenduDetailleOptions{}) - - if err == nil { - t.Errorf("Transverses.ConsulterCompteRenduDetaille returned error: nil") - } -} diff --git a/transverses_misc.go b/transverses_misc.go index 87db7f6..723de5e 100644 --- a/transverses_misc.go +++ b/transverses_misc.go @@ -2,7 +2,6 @@ package choruspro import ( "context" - "errors" "net/http" ) @@ -182,21 +181,8 @@ type ListeMotifsRefusFactureAValiderOptions struct { CodeCadreFacturation string `json:"codeCadreFacturationAValider,omitempty"` } -func (o *ListeMotifsRefusFactureAValiderOptions) Validate() error { - if o.CodeCadreFacturation == "" { - return errors.New("CodeCadreFacturation is required") - } - - return nil -} - // RecupererMotifsRefusFactureAValider permet de récupérer la liste des motifs func (s *TransversesService) RecupererMotifsRefusFactureAValider(ctx context.Context, opts ListeMotifsRefusFactureAValiderOptions) (*ListeMotifsRefusFactureAValider, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/motifs/refus/Facture/AValider", opts) if err != nil { return nil, err @@ -303,23 +289,10 @@ type ListeCoordonneesBancairesOptions struct { IdStructure int64 `json:"idStructure,omitempty"` } -func (o ListeCoordonneesBancairesOptions) Validate() error { - if o.IdStructure == 0 { - return errors.New("IdStructure is required") - } - - return nil -} - // RecupererCoordonneesBancairesValides permet de récupérer la liste des // coordonnées bancaires renseignées pour une structure à laquelle l'utilisateur // courant est rattaché. func (s *TransversesService) RecupererCoordonneesBancairesValides(ctx context.Context, opts ListeCoordonneesBancairesOptions) (*ListeCoordonneesBancaires, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/coordbanc/valides", opts) if err != nil { return nil, err diff --git a/transverses_misc_test.go b/transverses_misc_test.go index 27d7e8a..13b6674 100644 --- a/transverses_misc_test.go +++ b/transverses_misc_test.go @@ -364,18 +364,6 @@ func TestTransversesService_RecupererMotifsRefusFactureAValider(t *testing.T) { }) } -func TestTransversesService_RecupererMotifsRefusFactureAValider_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - opt := ListeMotifsRefusFactureAValiderOptions{} - _, err := client.Transverses.RecupererMotifsRefusFactureAValider(ctx, opt) - - if err == nil { - t.Errorf("Transverses.RecupererMotifsRefusFactureAValider returned error: nil") - } -} - func TestTransversesService_RecupererModesReglement(t *testing.T) { client, mux, teardown := setup() defer teardown() @@ -524,14 +512,3 @@ func TestTransversesService_RecupererCoordonneesBancairesValides(t *testing.T) { return err }) } - -func TestTransversesService_RecupererCoordonneesBancairesValides_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - _, err := client.Transverses.RecupererCoordonneesBancairesValides(ctx, ListeCoordonneesBancairesOptions{}) - - if err == nil { - t.Errorf("Transverses.RecupererCoordonneesBancairesValides returned error: nil") - } -} diff --git a/transverses_pieces_jointes.go b/transverses_pieces_jointes.go index aa50508..fb7f8ed 100644 --- a/transverses_pieces_jointes.go +++ b/transverses_pieces_jointes.go @@ -2,11 +2,10 @@ package choruspro import ( "context" - "errors" - "fmt" "net/http" ) +// TypeObjet est le type de l'objet d'une pièce jointe. type TypeObjet string const ( @@ -27,24 +26,28 @@ const ( TypeObjetPjRejetEdi TypeObjet = "PJ_REJET_EDI" ) -type ObjectPJ string +// ObjetPJ est l'ojet d'une pièce jointe. +type ObjetPJ string const ( - ObjetPJDemandePaiement ObjectPJ = "DEMANDE_PAIEMENT" - ObjetPJEngagementJuridique ObjectPJ = "ENGAGEMENT_JURIDIQUE" - ObjetPJSollicitation ObjectPJ = "SOLLICITATION" - ObjetPJStructurePieceJointe ObjectPJ = "STRUCTURE_PIECEJOINTE" - ObjetPJStructureMandat ObjectPJ = "STRUCTURE_MANDAT" - ObjetPJStructureCoordonneeBancaire ObjectPJ = "STRUCTURE_COORDONNEE_BANCAIRE" - ObjetPJUtilisateur ObjectPJ = "UTILISATEUR" + ObjetPJDemandePaiement ObjetPJ = "DEMANDE_PAIEMENT" + ObjetPJEngagementJuridique ObjetPJ = "ENGAGEMENT_JURIDIQUE" + ObjetPJSollicitation ObjetPJ = "SOLLICITATION" + ObjetPJStructurePieceJointe ObjetPJ = "STRUCTURE_PIECEJOINTE" + ObjetPJStructureMandat ObjetPJ = "STRUCTURE_MANDAT" + ObjetPJStructureCoordonneeBancaire ObjetPJ = "STRUCTURE_COORDONNEE_BANCAIRE" + ObjetPJUtilisateur ObjetPJ = "UTILISATEUR" ) -type ListeTypesPieceJointe struct { +// ListeTypesPieceJointeResponse est la structure de données représentant +// la réponse de la méthode RecupererTypesPieceJointe. +type ListeTypesPieceJointeResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Types []TypePieceJointe `json:"listeTypePieceJointe"` } +// TypePieceJointe est le type d'une pièce jointe. type TypePieceJointe struct { Code string `json:"codeTypePieceJointe"` Libelle string `json:"libelleTypePieceJointe"` @@ -52,18 +55,22 @@ type TypePieceJointe struct { TypeObjet TypeObjet `json:"typeObjet"` } +// ListeTypesPieceJointeOptions est la structure de données représentant +// les options de la méthode RecupererTypesPieceJointe. type ListeTypesPieceJointeOptions struct { CodeLangue CodeLangue `json:"codeLangue,omitempty"` TypeObjet TypeObjet `json:"typeObjet,omitempty"` } -func (s *TransversesService) RecupererTypesPieceJointe(ctx context.Context, opts ListeTypesPieceJointeOptions) (*ListeTypesPieceJointe, error) { +// La méthode RecupererTypesPieceJointe permet de récupérer le type de pièce-jointe +// pouvant être déposé en fonction de l'espace sur lequel l'objet peut être rattaché. +func (s *TransversesService) RecupererTypesPieceJointe(ctx context.Context, opts ListeTypesPieceJointeOptions) (*ListeTypesPieceJointeResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/typespj", opts) if err != nil { return nil, err } - types := new(ListeTypesPieceJointe) + types := new(ListeTypesPieceJointeResponse) err = s.client.doRequest(ctx, req, types) if err != nil { @@ -73,12 +80,16 @@ func (s *TransversesService) RecupererTypesPieceJointe(ctx context.Context, opts return types, nil } +// AjouterPieceResponse est la structure de données représentant +// la réponse de la méthode AjouterPieceJointe. type AjouterPieceResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` IdPieceJointe int64 `json:"pieceJointeId"` } +// AjouterPieceOptions est la structure de données utilisée pour +// appeler la méthode AjouterPieceJointe. type AjouterPieceOptions struct { IdUtilisateurCourant int64 `json:"idUtilisateurCourant,omitempty"` Extension string `json:"pieceJointeExtension"` @@ -87,32 +98,11 @@ type AjouterPieceOptions struct { TypeMime string `json:"pieceJointeTypeMime"` } -func (o AjouterPieceOptions) Validate() error { - if o.Extension == "" { - return errors.New("choruspro: Extension is required") - } - - if o.Fichier == "" { - return errors.New("choruspro: Fichier is required") - } - - if o.Nom == "" { - return errors.New("choruspro: Nom is required") - } - - if o.TypeMime == "" { - return errors.New("choruspro: TypeMime is required") - } - - return nil -} - +// La méthode AjouterPieceJointe permet d'ajouter une pièce-jointe au +// compte utilisateur courant et d'en obtenir l'identifiant technique. +// La pièce jointe ne doit pas dépasser 10Mo. Si le fichier dépasse cette +// taille, une erreur 20003 sera remontée. func (s *TransversesService) AjouterPieceJointe(ctx context.Context, opts AjouterPieceOptions) (*AjouterPieceResponse, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/ajouter/fichier", opts) if err != nil { return nil, err @@ -128,13 +118,17 @@ func (s *TransversesService) AjouterPieceJointe(ctx context.Context, opts Ajoute return piece, nil } -type ListePiecesJointesStructure struct { +// SupprimerPieceOptions est la structure de données représentant +// la réponse de la méthode RechercherPiecesJointesStructure. +type ListePiecesJointesStructureResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` PiecesJointes []PieceJointeStructure `json:"listePiecesJointes,omitempty"` Pagination *PaginationResponse `json:"parametresRetour,omitempty"` } +// PieceJointeStructure est la structure de données représentant +// une pièce jointe rattachée à une structure. type PieceJointeStructure struct { Designation string `json:"pieceJointeDesignation"` Extension string `json:"pieceJointeExtension"` @@ -148,6 +142,8 @@ type PieceJointeStructure struct { IdUtilisateur int64 `json:"pieceJointeUtilisateurId"` } +// ListePiecesJointesStructureOptions est la structure de données représentant +// les options de la méthode RechercherPiecesJointesStructure. type ListePiecesJointesStructureOptions struct { CodeLangue CodeLangue `json:"codeLangue,omitempty"` IdStructureCPP int64 `json:"idStructureCPP"` @@ -156,26 +152,15 @@ type ListePiecesJointesStructureOptions struct { Pagination *PaginationOptions `json:"parametresRecherche,omitempty"` } -func (o ListePiecesJointesStructureOptions) Validate() error { - if o.IdStructureCPP == 0 { - return errors.New("choruspro: IdStructureCPP is required") - } - - return nil -} - -func (s *TransversesService) RechercherPiecesJointesStructure(ctx context.Context, opts ListePiecesJointesStructureOptions) (*ListePiecesJointesStructure, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - +// La méthode RechercherPiecesJointesStructure permet de rechercher une pièce-jointe +// associée à une structure à laquelle est habilité l'utilisateur. +func (s *TransversesService) RechercherPiecesJointesStructure(ctx context.Context, opts ListePiecesJointesStructureOptions) (*ListePiecesJointesStructureResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/rechercher/pj/structure", opts) if err != nil { return nil, err } - pieces := new(ListePiecesJointesStructure) + pieces := new(ListePiecesJointesStructureResponse) err = s.client.doRequest(ctx, req, pieces) if err != nil { @@ -185,13 +170,17 @@ func (s *TransversesService) RechercherPiecesJointesStructure(ctx context.Contex return pieces, nil } -type ListePiecesJointesMonCompte struct { +// ListePiecesJointesMonCompteResponse est la structure de données représentant +// la réponse de la méthode RechercherPiecesJointesMonCompte. +type ListePiecesJointesMonCompteResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` PiecesJointes []PieceJointeMonCompte `json:"listePiecesJointes,omitempty"` Pagination *PaginationResponse `json:"parametresRetour,omitempty"` } +// PieceJointeMonCompte est la structure de données représentant +// une pièce jointe rattachée à un compte utilisateur. type PieceJointeMonCompte struct { Designation string `json:"pieceJointeDesignation"` Extension string `json:"pieceJointeExtension"` @@ -202,6 +191,8 @@ type PieceJointeMonCompte struct { IdUtilisateur int64 `json:"pieceJointeUtilisateurId"` } +// ListePiecesJointesMonCompteOptions est la structure de données utilisée +// pour appeler la méthode RechercherPiecesJointesMonCompte. type ListePiecesJointesMonCompteOptions struct { CodeLangue CodeLangue `json:"codeLangue,omitempty"` PieceJointeDesignation string `json:"pieceJointeDesignation,omitempty"` @@ -209,26 +200,15 @@ type ListePiecesJointesMonCompteOptions struct { Pagination *PaginationOptions `json:"parametresRecherche,omitempty"` } -func (o ListePiecesJointesMonCompteOptions) Validate() error { - if o.PieceJointeTypeId == 0 { - return errors.New("choruspro: PieceJointeTypeId is required") - } - - return nil -} - -func (s *TransversesService) RechercherPiecesJointesMonCompte(ctx context.Context, opts ListePiecesJointesMonCompteOptions) (*ListePiecesJointesMonCompte, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - +// La méthode RechercherPiecesJointesMonCompte permet de rechercher +// un fichier associé au compte utilisateur. +func (s *TransversesService) RechercherPiecesJointesMonCompte(ctx context.Context, opts ListePiecesJointesMonCompteOptions) (*ListePiecesJointesMonCompteResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/rechercher/pj/moncompte", opts) if err != nil { return nil, err } - pieces := new(ListePiecesJointesMonCompte) + pieces := new(ListePiecesJointesMonCompteResponse) err = s.client.doRequest(ctx, req, pieces) if err != nil { @@ -238,6 +218,8 @@ func (s *TransversesService) RechercherPiecesJointesMonCompte(ctx context.Contex return pieces, nil } +// TelechargerPieceJointeDemandePaiementOptions est la structure de données utilisée +// pour appeler la méthode TelechargerPieceJointeDemandePaiement. type TelechargerPieceJointeDemandePaiementOptions struct { // 2 values possible : "OUI" or "NON" AvecPJCompltementaires string `json:"avecPiecesJointesComplementaires"` @@ -245,10 +227,15 @@ type TelechargerPieceJointeDemandePaiementOptions struct { ListeFacture []IdFacture `json:"listeFacture"` } +// IdFacture est la structure de données représentant +// l'identifiant d'une facture. type IdFacture struct { IdFacture int64 `json:"idFacture"` } +// TelechargerPieceJointeSollicitationOptions est la structure de données utilisée +// pour appeler la méthode TelechargerPieceJointe. +// Elle est utilisée dans la structure TelechargerPieceJointeOptions. type TelechargerPieceJointeSollicitationOptions struct { Id int64 `json:"idSollicitation"` @@ -256,104 +243,43 @@ type TelechargerPieceJointeSollicitationOptions struct { PieceJointeSollicitation string `json:"pieceJointeSollicitation"` } +// TelechargerPieceJointeEngagementJuridiqueOptions est la structure de données utilisée +// pour appeler la méthode TelechargerPieceJointe. +// Elle est utilisée dans la structure TelechargerPieceJointeOptions. type TelechargerPieceJointeEngagementJuridiqueOptions struct { Numero string `json:"numeroEngagementJuridique"` } +// TelechargerPieceJointeStructureOptions est la structure de données utilisée +// pour appeler la méthode TelechargerPieceJointe. +// Elle est utilisée dans la structure TelechargerPieceJointeOptions. type TelechargerPieceJointeStructureOptions struct { Id int64 `json:"idStructure"` Identifiant string `json:"identifiantStructure"` TypeIdentifiant string `json:"typeIdentifiantStructure"` } +// TelechargerPieceJointeOptions est la structure de données utilisée +// pour appeler la méthode TelechargerPieceJointe. type TelechargerPieceJointeOptions struct { - Objet ObjectPJ `json:"objetPieceJointe"` + Objet ObjetPJ `json:"objetPieceJointe"` DemandePaiement *TelechargerPieceJointeDemandePaiementOptions `json:"demandePaiement,omitempty"` EngagementJuridique *TelechargerPieceJointeEngagementJuridiqueOptions `json:"engagementJuridique,omitempty"` Sollicitation *TelechargerPieceJointeSollicitationOptions `json:"sollicitation,omitempty"` Structure *TelechargerPieceJointeStructureOptions `json:"structure,omitempty"` } +// PieceJointe est la structure de données représentant +// une pièce jointe. type PieceJointe struct { PieceJointe string `json:"pieceJointe"` // base64 encoded } -func (o TelechargerPieceJointeOptions) Validate() error { - if o.Objet == "" { - return errors.New("choruspro: ObjetPieceJointe is required") - } - - // Demande paiement validation - if o.Objet == ObjetPJDemandePaiement { - if o.DemandePaiement == nil { - return fmt.Errorf("choruspro: DemandePaiement is required because ObjetPieceJointe is set to %s", ObjetPJDemandePaiement) - } - - if o.DemandePaiement.AvecPJCompltementaires != "OUI" && o.DemandePaiement.AvecPJCompltementaires != "NON" { - return errors.New("choruspro: DemandePaiement.AvecPiecesJointesComplementaires must be set to OUI or NON") - } - - if o.DemandePaiement.Format != "PDF" && o.DemandePaiement.Format != "PIVOT" { - return errors.New("choruspro: DemandePaiement.Format must be set to PDF or PIVOT") - } - - if len(o.DemandePaiement.ListeFacture) == 0 { - return errors.New("choruspro: DemandePaiement.ListeFacture must contain at least one element") - } - } else if o.Objet == ObjetPJEngagementJuridique { - if o.EngagementJuridique == nil { - return fmt.Errorf("choruspro: EngagementJuridique is required because ObjetPieceJointe is set to %s", ObjetPJEngagementJuridique) - } - - if o.EngagementJuridique.Numero == "" { - return errors.New("choruspro: EngagementJuridique.NumeroEngagementJuridique is required") - } - } else if o.Objet == ObjetPJSollicitation { - if o.Sollicitation == nil { - return fmt.Errorf("choruspro: Sollicitation is required because ObjetPieceJointe is set to %s", ObjetPJSollicitation) - } - - if o.Sollicitation.Id == 0 { - return errors.New("choruspro: Sollicitation.IdSollicitation is required") - } - - if o.Sollicitation.PieceJointeSollicitation != "OUI" && o.Sollicitation.PieceJointeSollicitation != "NON" { - return errors.New("choruspro: Sollicitation.PieceJointeSollicitation must be set to OUI or NON") - } - } else if o.Objet == ObjetPJStructurePieceJointe || - o.Objet == ObjetPJStructureMandat || - o.Objet == ObjetPJStructureCoordonneeBancaire { - if o.Structure == nil { - return fmt.Errorf("choruspro: Structure is required because ObjetPieceJointe is set to %s", o.Objet) - } - - if o.Structure.Id == 0 && (o.Structure.Identifiant == "" && o.Structure.TypeIdentifiant == "") { - return errors.New("choruspro: Structure.IdStructure or Structure.IdentifiantStructure + Structure.TypeIdentifiantStructure are required") - } - - if o.Structure.Id != 0 && (o.Structure.Identifiant != "" || o.Structure.TypeIdentifiant != "") { - return errors.New("choruspro: Structure.IdStructure and Structure.IdentifiantStructure + Structure.TypeIdentifiantStructure are mutually exclusive") - } - - if o.Structure.Identifiant != "" && o.Structure.TypeIdentifiant == "" { - return errors.New("choruspro: Structure.TypeIdentifiantStructure is required when Structure.IdentifiantStructure is set") - } - - if o.Structure.Identifiant == "" && o.Structure.TypeIdentifiant != "" { - return errors.New("choruspro: Structure.IdentifiantStructure is required when Structure.TypeIdentifiantStructure is set") - } - } else { - return fmt.Errorf("choruspro: ObjetPieceJointe %s is not supported", o.Objet) - } - - return nil -} - +// La méthode TelechargerPieceJointe permet à un utilisateur de télécharger +// les pieces jointes des types objets suivants : sollicitation, demande de +// remboursement, facture, facture travaux, mémoire, coordonnée bancaire, +// structure, mandat, utilisateur (courant), engagement juridique. func (s *TransversesService) TelechargerPieceJointe(ctx context.Context, opts TelechargerPieceJointeOptions) (*PieceJointe, error) { - if err := opts.Validate(); err != nil { - return nil, err - } - req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/telecharger/pieceJointe", opts) if err != nil { return nil, err diff --git a/transverses_pieces_jointes_test.go b/transverses_pieces_jointes_test.go index 77997ea..6485fa3 100644 --- a/transverses_pieces_jointes_test.go +++ b/transverses_pieces_jointes_test.go @@ -44,7 +44,7 @@ func TestTransversesService_RecupererTypesPieceJointe(t *testing.T) { t.Errorf("Transverses.RecupererTypesPieceJointe returned error : %v", err) } - want := &ListeTypesPieceJointe{ + want := &ListeTypesPieceJointeResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Types: []TypePieceJointe{ @@ -115,59 +115,6 @@ func TestTransversesService_AjouterPieceJointe(t *testing.T) { }) } -func TestTransversesService_AjouterPieceJointe_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - tests := []struct { - name string - opt AjouterPieceOptions - }{ - { - name: "Missing TypeMine", - opt: AjouterPieceOptions{ - Extension: "e", - Fichier: "f", - Nom: "n", - }, - }, - { - name: "Missing Nom", - opt: AjouterPieceOptions{ - Extension: "e", - Fichier: "f", - TypeMime: "t", - }, - }, - { - name: "Missing Extension", - opt: AjouterPieceOptions{ - Fichier: "f", - Nom: "n", - TypeMime: "t", - }, - }, - { - name: "Missing Fichier", - opt: AjouterPieceOptions{ - Extension: "e", - Nom: "n", - TypeMime: "t", - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - _, err := client.Transverses.AjouterPieceJointe(ctx, test.opt) - - if err == nil { - t.Errorf("Transverses.AjouterPieceJointe returned error: nil") - } - }) - } -} - func TestTransversesService_RechercherPiecesJointesStructure(t *testing.T) { client, mux, teardown := setup() defer teardown() @@ -210,7 +157,7 @@ func TestTransversesService_RechercherPiecesJointesStructure(t *testing.T) { t.Errorf("Transverses.RechercherPiecesJointesStructure returned error : %v", err) } - want := &ListePiecesJointesStructure{ + want := &ListePiecesJointesStructureResponse{ CodeRetour: 0, Libelle: "GCU_MSG_01_000", PiecesJointes: []PieceJointeStructure{ @@ -245,17 +192,6 @@ func TestTransversesService_RechercherPiecesJointesStructure(t *testing.T) { }) } -func TestTransversesService_RechercherPiecesJointesStructure_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - _, err := client.Transverses.RechercherPiecesJointesStructure(ctx, ListePiecesJointesStructureOptions{}) - - if err == nil { - t.Errorf("Transverses.RechercherPiecesJointesStructure returned error: nil") - } -} - func TestTransversesService_RechercherPiecesJointesMonCompte(t *testing.T) { client, mux, teardown := setup() defer teardown() @@ -295,7 +231,7 @@ func TestTransversesService_RechercherPiecesJointesMonCompte(t *testing.T) { t.Errorf("Transverses.RechercherPiecesJointesMonCompte returned error : %v", err) } - want := &ListePiecesJointesMonCompte{ + want := &ListePiecesJointesMonCompteResponse{ CodeRetour: 0, Libelle: "GCU_MSG_01_000", PiecesJointes: []PieceJointeMonCompte{ @@ -327,17 +263,6 @@ func TestTransversesService_RechercherPiecesJointesMonCompte(t *testing.T) { }) } -func TestTransversesService_RechercherPiecesJointesMonCompte_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - _, err := client.Transverses.RechercherPiecesJointesMonCompte(ctx, ListePiecesJointesMonCompteOptions{}) - - if err == nil { - t.Errorf("Transverses.RechercherPiecesJointesMonCompte returned error: nil") - } -} - func TestTransversesService_TelechargerPieceJointe(t *testing.T) { client, mux, teardown := setup() defer teardown() @@ -373,151 +298,3 @@ func TestTransversesService_TelechargerPieceJointe(t *testing.T) { return err }) } - -func TestTransversesService_TelechargerPieceJointe_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - tests := []struct { - opt TelechargerPieceJointeOptions - name string - }{ - { - name: "Missing field objet", - opt: TelechargerPieceJointeOptions{ - Objet: "", - }, - }, - { - name: "Fied objet is not supported", - opt: TelechargerPieceJointeOptions{ - Objet: "x", - }, - }, - { - name: "DemandePaiement:Missing field DemanjdePaiement", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJDemandePaiement, - DemandePaiement: nil, - }, - }, - { - name: "DemandePaiement:DemanjdePaiement.AvecPJCompltementaires is not OUI or NON", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJDemandePaiement, - DemandePaiement: &TelechargerPieceJointeDemandePaiementOptions{AvecPJCompltementaires: "x"}, - }, - }, - { - name: "DemandePaiement:DemanjdePaiement.Format is not PDF or PIVOT", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJDemandePaiement, - DemandePaiement: &TelechargerPieceJointeDemandePaiementOptions{ - AvecPJCompltementaires: "OUI", - Format: "x", - }, - }, - }, - { - name: "DemandePaiement:DemanjdePaiement.ListeFacture is empty", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJDemandePaiement, - DemandePaiement: &TelechargerPieceJointeDemandePaiementOptions{ - AvecPJCompltementaires: "OUI", - Format: "PDF", - ListeFacture: []IdFacture{}, - }, - }, - }, - { - name: "EngagementJuridique:Missing field EngagementJuridique", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJEngagementJuridique, - EngagementJuridique: nil, - }, - }, - { - name: "EngagementJuridique:Missing field EngagementJuridique.Numero", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJEngagementJuridique, - EngagementJuridique: &TelechargerPieceJointeEngagementJuridiqueOptions{Numero: ""}, - }, - }, - { - name: "Sollicitation:Missing field Sollicitation", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJSollicitation, - Sollicitation: nil, - }, - }, - { - name: "Sollicitation:Missing field Sollicitation.Id", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJSollicitation, - Sollicitation: &TelechargerPieceJointeSollicitationOptions{Id: 0}, - }, - }, - { - name: "Sollicitation:Sollcitation.PieceJointeSollicitation is not OUI or NON", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJSollicitation, - Sollicitation: &TelechargerPieceJointeSollicitationOptions{ - Id: 1, - PieceJointeSollicitation: "x"}, - }, - }, - { - name: "Structure:Missing field Structure", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJStructurePieceJointe, - Structure: nil, - }, - }, - { - name: "Structure: Missing fields Structure.Id, Structure.IdentifiantStructure and Structure.TypeIdentifiantStructure", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJStructurePieceJointe, - Structure: &TelechargerPieceJointeStructureOptions{}, - }, - }, - { - name: "Structure: Structure.Id and Structure.IdentifiantStructure are set at the same time", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJStructurePieceJointe, - Structure: &TelechargerPieceJointeStructureOptions{ - Id: 1, - Identifiant: "x", - TypeIdentifiant: "x", - }, - }, - }, - { - name: "Structure: Structure.IdentifiantStructure is set but Structure.TypeIdentifiantStructure is not", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJStructurePieceJointe, - Structure: &TelechargerPieceJointeStructureOptions{ - Identifiant: "x", - }, - }, - }, - { - name: "Structure: Structure.TypeIdentifiantStructure is set but Structure.IdentifiantStructure is not", - opt: TelechargerPieceJointeOptions{ - Objet: ObjetPJStructurePieceJointe, - Structure: &TelechargerPieceJointeStructureOptions{ - TypeIdentifiant: "x", - }, - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - _, err := client.Transverses.TelechargerPieceJointe(ctx, test.opt) - - if err == nil { - t.Errorf("Transverses.TelechargerPieceJointe returned error: nil") - } - }) - } -} diff --git a/transverses_structures.go b/transverses_structures.go index ef9d62b..0673782 100644 --- a/transverses_structures.go +++ b/transverses_structures.go @@ -2,23 +2,29 @@ package choruspro import ( "context" - "errors" "net/http" ) -type ListeStrcturesActives struct { +// ListeStructuresActivesResponse est la structure de données représentant +// la réponse de la méthode RecupererStructuresActives. +type ListeStructuresActivesResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Structures []StructureActive `json:"listeStructures"` } +// StructureActive est la structure de données représentant +// une structure active. type StructureActive struct { Designation string `json:"designationStructure"` IdCPP int64 `json:"idStructureCPP"` Identifiant string `json:"identifiant"` } -func (s *TransversesService) RecupererStructuresActivesFactureTravaux(ctx context.Context) (*ListeStrcturesActives, error) { +// La méthode RecupererStructuresActivesFactureTravaux permet de +// récupérer la liste des structures actives auxquelles un utilisateur +// est rattaché et habilité à l'espace "factures de travaux". +func (s *TransversesService) RecupererStructuresActivesFactureTravaux(ctx context.Context) (*ListeStructuresActivesResponse, error) { opts := struct{}{} req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/structures/actives/facturetravaux", opts) @@ -26,7 +32,7 @@ func (s *TransversesService) RecupererStructuresActivesFactureTravaux(ctx contex return nil, err } - structures := new(ListeStrcturesActives) + structures := new(ListeStructuresActivesResponse) err = s.client.doRequest(ctx, req, structures) if err != nil { @@ -36,25 +42,10 @@ func (s *TransversesService) RecupererStructuresActivesFactureTravaux(ctx contex return structures, nil } -func (s *TransversesService) RecupererStructuresActivesDestinataireFactureTravaux(ctx context.Context) (*ListeStrcturesActives, error) { - opts := struct{}{} - - req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/structures/actives/destinataire", opts) - if err != nil { - return nil, err - } - - structures := new(ListeStrcturesActives) - - err = s.client.doRequest(ctx, req, structures) - if err != nil { - return nil, err - } - - return structures, nil -} - -func (s *TransversesService) RecupererStructuresActivesFournisseur(ctx context.Context) (*ListeStrcturesActives, error) { +// La méthode RecupererStructuresActivesFournisseur permet de récupérer +// la liste des structures actives auxquelles un utilisateur est rattaché +// et habilité à l’espace "factures émises". +func (s *TransversesService) RecupererStructuresActivesFournisseur(ctx context.Context) (*ListeStructuresActivesResponse, error) { opts := struct{}{} req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/structures/actives/fournisseur", opts) @@ -62,7 +53,7 @@ func (s *TransversesService) RecupererStructuresActivesFournisseur(ctx context.C return nil, err } - structures := new(ListeStrcturesActives) + structures := new(ListeStructuresActivesResponse) err = s.client.doRequest(ctx, req, structures) if err != nil { @@ -72,7 +63,10 @@ func (s *TransversesService) RecupererStructuresActivesFournisseur(ctx context.C return structures, nil } -func (s *TransversesService) RecupererStructuresActivesDestinataire(ctx context.Context) (*ListeStrcturesActives, error) { +// La méthode RecupererStructuresActivesDestinataire permet de récupérer +// la liste des structures actives auxquelles un utilisateur est rattaché et +// habilité à l'espace "factures reçues". +func (s *TransversesService) RecupererStructuresActivesDestinataire(ctx context.Context) (*ListeStructuresActivesResponse, error) { opts := struct{}{} req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/structures/actives/destinataire", opts) @@ -80,7 +74,7 @@ func (s *TransversesService) RecupererStructuresActivesDestinataire(ctx context. return nil, err } - structures := new(ListeStrcturesActives) + structures := new(ListeStructuresActivesResponse) err = s.client.doRequest(ctx, req, structures) if err != nil { @@ -90,7 +84,9 @@ func (s *TransversesService) RecupererStructuresActivesDestinataire(ctx context. return structures, nil } -type InformationsSIRET struct { +// InformationsSIRETResponse est la structure de données représentant +// la réponse de la méthode ConsulterInformationsSIRET. +type InformationsSIRETResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Adresse string `json:"adresse,omitempty"` @@ -111,30 +107,23 @@ type InformationsSIRET struct { SiretPredecesseurSuccesseur string `json:"siretPredecesseurSuccesseur,omitempty"` } +// ConsulterInformationsSIRETOptions est la structure de données utilisée +// pour appeler la méthode ConsulterInformationsSIRET. type ConsulterInformationsSIRETOptions struct { Siret string `json:"siretStructure"` } -func (o *ConsulterInformationsSIRETOptions) Validate() error { - if o.Siret == "" { - return errors.New("siretStructure is required") - } - - return nil -} - -func (s *TransversesService) ConsulterInformationsSIRET(ctx context.Context, opts ConsulterInformationsSIRETOptions) (*InformationsSIRET, error) { - err := opts.Validate() - if err != nil { - return nil, err - } - +// La méthode ConsulterInformationsSIRET permet de récupérer les données +// de la structure de type SIRET correspondant aux paramètres dans le +// référentiel de l'INSEE (service exposé ne fonctionnant pas sur +// l'espace de qualification). +func (s *TransversesService) ConsulterInformationsSIRET(ctx context.Context, opts ConsulterInformationsSIRETOptions) (*InformationsSIRETResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/consulter/information/siret", opts) if err != nil { return nil, err } - infos := new(InformationsSIRET) + infos := new(InformationsSIRETResponse) err = s.client.doRequest(ctx, req, infos) if err != nil { @@ -144,13 +133,17 @@ func (s *TransversesService) ConsulterInformationsSIRET(ctx context.Context, opt return infos, nil } -type ListeDestinataires struct { +// ListeDestinatairesResponse est la structure de données représentant +// la réponse de la méthode RechercherDestinataires. +type ListeDestinatairesResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Destinataires []DestinataireRecherche `json:"listeDestinataires"` Pagination PaginationResponse `json:"parametresRetour"` } +// DestinataireRecherche est la structure de données représentant +// un destinataire de la liste des destinataires. type DestinataireRecherche struct { IdStructureCPP int64 `json:"idStructureCPP"` Siret string `json:"siret"` @@ -159,6 +152,8 @@ type DestinataireRecherche struct { AdresseVille string `json:"adresseVille,omitempty"` } +// ListeDestinatairesOptions est la structure de données utilisée +// pour appeler la méthode RechercherDestinataires. type ListeDestinatairesOptions struct { Identifiant string `json:"identifiant,omitempty"` NomVilleCodePostal string `json:"nomVilleCodePostal,omitempty"` @@ -166,13 +161,15 @@ type ListeDestinatairesOptions struct { Pagination *PaginationOptions `json:"parametresRecherche,omitempty"` } -func (s *TransversesService) RechercherDestinataires(ctx context.Context, opts ListeDestinatairesOptions) (*ListeDestinataires, error) { +// La méthode RechercherDestinataires permet de rechercher les +// informations légales d'une structure publique. +func (s *TransversesService) RechercherDestinataires(ctx context.Context, opts ListeDestinatairesOptions) (*ListeDestinatairesResponse, error) { req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/rechercher/destinataire", opts) if err != nil { return nil, err } - destinataires := new(ListeDestinataires) + destinataires := new(ListeDestinatairesResponse) err = s.client.doRequest(ctx, req, destinataires) if err != nil { diff --git a/transverses_structures_test.go b/transverses_structures_test.go index 0af8a3a..84e9e89 100644 --- a/transverses_structures_test.go +++ b/transverses_structures_test.go @@ -40,7 +40,7 @@ func TestTransversesService_RecupererStructuresActivesFactureTravaux(t *testing. t.Errorf("Transverses.RecupererStructuresActivesFactureTravaux returned error : %v", err) } - want := &ListeStrcturesActives{ + want := &ListeStructuresActivesResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Structures: []StructureActive{ @@ -66,64 +66,6 @@ func TestTransversesService_RecupererStructuresActivesFactureTravaux(t *testing. }) } -func TestTransversesService_RecupererStructuresActivesDestinataireFactureTravaux(t *testing.T) { - client, mux, teardown := setup() - defer teardown() - - mux.HandleFunc("/cpro/transverses/v1/recuperer/structures/actives/destinataire", func(w http.ResponseWriter, r *http.Request) { - v := new(struct{}) - assertNilError(t, json.NewDecoder(r.Body).Decode(v)) - testMethod(t, r, http.MethodPost) - w.Write([]byte(`{ - "codeRetour": 0, - "libelle": "TRA_MSG_00.000", - "listeStructures": [ - { - "idStructureCPP": 1, - "identifiant": "1", - "designationStructure": "d1" - }, - { - "idStructureCPP": 2, - "identifiant": "2", - "designationStructure": "d2" - } - ] - }`)) - }) - - ctx := context.Background() - got, err := client.Transverses.RecupererStructuresActivesDestinataireFactureTravaux(ctx) - if err != nil { - t.Errorf("Transverses.RecupererStructuresActivesFactureTravaux returned error : %v", err) - } - - want := &ListeStrcturesActives{ - CodeRetour: 0, - Libelle: "TRA_MSG_00.000", - Structures: []StructureActive{ - { - IdCPP: 1, - Identifiant: "1", - Designation: "d1", - }, - { - IdCPP: 2, - Identifiant: "2", - Designation: "d2", - }, - }, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("Transverses.RecupererStructuresActivesDestinataireFactureTravaux returned %+v, want %+v", got, want) - } - - testNewRequestAndDoRequestFailure(t, "RecupererStructuresActivesDestinataireFactureTravaux", client, func() error { - _, err := client.Transverses.RecupererStructuresActivesDestinataireFactureTravaux(ctx) - return err - }) -} - func TestTransversesService_RecupererStructuresActivesFournisseur(t *testing.T) { client, mux, teardown := setup() defer teardown() @@ -156,7 +98,7 @@ func TestTransversesService_RecupererStructuresActivesFournisseur(t *testing.T) t.Errorf("Transverses.RecupererStructuresActivesFournisseur returned error : %v", err) } - want := &ListeStrcturesActives{ + want := &ListeStructuresActivesResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Structures: []StructureActive{ @@ -214,7 +156,7 @@ func TestTransversesService_RecupererStructuresActivesDestinataire(t *testing.T) t.Errorf("Transverses.RecupererStructuresActivesDestinataire returned error : %v", err) } - want := &ListeStrcturesActives{ + want := &ListeStructuresActivesResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Structures: []StructureActive{ @@ -278,7 +220,7 @@ func TestTransversesService_ConsulterInformationsSIRET(t *testing.T) { t.Errorf("Transverses.ConsulterInformationsSIRET returned error : %v", err) } - want := &InformationsSIRET{ + want := &InformationsSIRETResponse{ CodeRetour: 0, Libelle: "l", Adresse: "a", @@ -308,17 +250,6 @@ func TestTransversesService_ConsulterInformationsSIRET(t *testing.T) { }) } -func TestTransversesService_ConsulterInformationsSIRET_MissingOption(t *testing.T) { - client, _, _ := setup() - - ctx := context.Background() - _, err := client.Transverses.ConsulterInformationsSIRET(ctx, ConsulterInformationsSIRETOptions{}) - - if err == nil { - t.Errorf("Transverses.ConsulterInformationsSIRET returned error: nil") - } -} - func TestTransversesService_RechercherDestinataires(t *testing.T) { client, mux, teardown := setup() defer teardown() @@ -356,7 +287,7 @@ func TestTransversesService_RechercherDestinataires(t *testing.T) { t.Errorf("Transverses.RechercherDestinataires returned error : %v", err) } - want := &ListeDestinataires{ + want := &ListeDestinatairesResponse{ CodeRetour: 0, Libelle: "l", Destinataires: []DestinataireRecherche{ diff --git a/transverses_tva.go b/transverses_tva.go index 0d4a31b..ad29592 100644 --- a/transverses_tva.go +++ b/transverses_tva.go @@ -5,29 +5,32 @@ import ( "net/http" ) -type ListeTauxTva struct { +// ListeTauxTvaResponse est la structure de données représentant +// la réponse de la méthode RecupererTauxTva. +type ListeTauxTvaResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Taux []TauxTva `json:"listeTauxTva"` } +// TauxTva est la structure de données représentant un taux de TVA. type TauxTva struct { Code string `json:"codeTauxTva"` Libelle string `json:"libelleTauxTva"` Valeur float32 `json:"valeurTauxTva"` } -func (s *TransversesService) RecupererTauxTva(ctx context.Context, lang CodeLangue) (*ListeTauxTva, error) { - opts := &struct { - CodeLangue CodeLangue `json:"codeLangue,omitempty"` - }{CodeLangue: lang} +// La méthode recupererTauxTva permet de récupérer la liste des taux +// de TVA applicables. +func (s *TransversesService) RecupererTauxTva(ctx context.Context, lang CodeLangue) (*ListeTauxTvaResponse, error) { + opts := &codeLangueOptions{lang} req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/tauxtva", opts) if err != nil { return nil, err } - taux := new(ListeTauxTva) + taux := new(ListeTauxTvaResponse) err = s.client.doRequest(ctx, req, taux) if err != nil { @@ -37,28 +40,32 @@ func (s *TransversesService) RecupererTauxTva(ctx context.Context, lang CodeLang return taux, nil } -type ListeMotifsExonerationTva struct { +// ListeMotifsExonerationTvaResponse est la structure de données représentant +// la réponse de la méthode RecupererMotifsExonerationTva. +type ListeMotifsExonerationTvaResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Motifs []MotifExonerationTva `json:"listeMotifsExonerationTva"` } +// MotifExonerationTva est la structure de données représentant un motif +// d'exonération de TVA. type MotifExonerationTva struct { Code string `json:"codeMotifExonerationTva"` Libelle string `json:"libelleMotifExonerationTva"` } -func (s *TransversesService) RecupererMotifsExonerationTva(ctx context.Context, lang CodeLangue) (*ListeMotifsExonerationTva, error) { - opts := &struct { - CodeLangue CodeLangue `json:"codeLangue,omitempty"` - }{CodeLangue: lang} +// La méthode RecupererMotifsExonerationTva permet de récupérer la liste des +// motifs d'exonération à la TVA pouvant être renseignés lors du dépôt d'une facture. +func (s *TransversesService) RecupererMotifsExonerationTva(ctx context.Context, lang CodeLangue) (*ListeMotifsExonerationTvaResponse, error) { + opts := &codeLangueOptions{lang} req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/motifs/exonerationtva", opts) if err != nil { return nil, err } - motifs := new(ListeMotifsExonerationTva) + motifs := new(ListeMotifsExonerationTvaResponse) err = s.client.doRequest(ctx, req, motifs) if err != nil { diff --git a/transverses_tva_test.go b/transverses_tva_test.go index 70f1664..920ed5d 100644 --- a/transverses_tva_test.go +++ b/transverses_tva_test.go @@ -40,7 +40,7 @@ func TestTransversesService_RecupererTauxTva(t *testing.T) { t.Errorf("Transverses.RecupererTauxTva returned error : %v", err) } - want := &ListeTauxTva{ + want := &ListeTauxTvaResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Taux: []TauxTva{ @@ -96,7 +96,7 @@ func TestTransversesService_RecupererMotifsExonerationTva(t *testing.T) { t.Errorf("Transverses.RecupererMotifsExonerationTva returned error : %v", err) } - want := &ListeMotifsExonerationTva{ + want := &ListeMotifsExonerationTvaResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Motifs: []MotifExonerationTva{ diff --git a/transverses_types.go b/transverses_types.go index da6bf09..434f942 100644 --- a/transverses_types.go +++ b/transverses_types.go @@ -5,17 +5,23 @@ import ( "net/http" ) -type ListeTypesDemandePaiement struct { +// ListeTypesDemandePaiementResponse est la structure de données représentant +// la réponse de la méthode RecupererTypesDemandePaiement. +type ListeTypesDemandePaiementResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Types []TypeDemandePaiement `json:"listeTypeDemandePaiement"` } +// TypeDemandePaiement est la structure de données représentant +// un type de demande de paiement. type TypeDemandePaiement struct { Type string `json:"typeDemandePaiement"` } -func (s *TransversesService) RecupererTypesDemandePaiement(ctx context.Context) (*ListeTypesDemandePaiement, error) { +// La méthode RecupererTypesDemandePaiement permet de récupérer les types de +// demandes de paiement pouvant être renseignées dans Chorus Pro. +func (s *TransversesService) RecupererTypesDemandePaiement(ctx context.Context) (*ListeTypesDemandePaiementResponse, error) { opts := struct{}{} req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/typedp", opts) @@ -23,7 +29,7 @@ func (s *TransversesService) RecupererTypesDemandePaiement(ctx context.Context) return nil, err } - types := new(ListeTypesDemandePaiement) + types := new(ListeTypesDemandePaiementResponse) err = s.client.doRequest(ctx, req, types) if err != nil { @@ -33,17 +39,24 @@ func (s *TransversesService) RecupererTypesDemandePaiement(ctx context.Context) return types, nil } -type ListeTypesFactureTravaux struct { +// ListeTypesFactureTravauxResponse est la structure de données représentant +// la réponse de la méthode RecupererTypesFactureTravaux. +type ListeTypesFactureTravauxResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Types []TypeFactureTravaux `json:"listeTypeFactureTravaux"` } +// TypeFactureTravaux est la structure de données représentant +// un type de facture de travaux. type TypeFactureTravaux struct { Type string `json:"typeFactureTravaux"` } -func (s *TransversesService) RecupererTypesFactureTravaux(ctx context.Context) (*ListeTypesFactureTravaux, error) { +// La méthode RecupererTypesFactureTravaux permet de renseigner les éléments +// de facturations pouvant être renseignés lors du dépôt d'un dossier +// de facturation de travaux. +func (s *TransversesService) RecupererTypesFactureTravaux(ctx context.Context) (*ListeTypesFactureTravauxResponse, error) { opts := struct{}{} req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/typefacturetravaux", opts) @@ -51,7 +64,7 @@ func (s *TransversesService) RecupererTypesFactureTravaux(ctx context.Context) ( return nil, err } - types := new(ListeTypesFactureTravaux) + types := new(ListeTypesFactureTravauxResponse) err = s.client.doRequest(ctx, req, types) if err != nil { @@ -61,17 +74,23 @@ func (s *TransversesService) RecupererTypesFactureTravaux(ctx context.Context) ( return types, nil } -type ListeTypesIdentifiantsStructure struct { +// ListeTypesIdentifiantsStructureResponse est la structure de données représentant +// la réponse de la méthode RecupererTypesIdentifiantsStructure. +type ListeTypesIdentifiantsStructureResponse struct { CodeRetour int32 `json:"codeRetour"` Libelle string `json:"libelle"` Types []TypeIdentifiantStructure `json:"listeTypeIdentifiant"` } +// TypeIdentifiantStructure est la structure de données représentant +// un type d'identifiant de structure. type TypeIdentifiantStructure struct { Type string `json:"typeIdentifiantStructure"` } -func (s *TransversesService) RecupererTypesIdentifiantsStructure(ctx context.Context) (*ListeTypesIdentifiantsStructure, error) { +// La méthode recupererTypeIdentifiantStructure permet de récupérer les types +// d'identifiants pouvant être renseignés par un fournisseur ou un valideur de facture. +func (s *TransversesService) RecupererTypesIdentifiantsStructure(ctx context.Context) (*ListeTypesIdentifiantsStructureResponse, error) { opts := struct{}{} req, err := s.client.newRequest(ctx, http.MethodPost, "cpro/transverses/v1/recuperer/typeidentifiant/structure", opts) @@ -79,7 +98,7 @@ func (s *TransversesService) RecupererTypesIdentifiantsStructure(ctx context.Con return nil, err } - types := new(ListeTypesIdentifiantsStructure) + types := new(ListeTypesIdentifiantsStructureResponse) err = s.client.doRequest(ctx, req, types) if err != nil { diff --git a/transverses_types_test.go b/transverses_types_test.go index 9e35f40..7f8fbea 100644 --- a/transverses_types_test.go +++ b/transverses_types_test.go @@ -37,7 +37,7 @@ func TestTransversesService_RecupererTypesDemandePaiement(t *testing.T) { t.Errorf("Transverses.RecupererTypesDemandePaiement returned error : %v", err) } - want := &ListeTypesDemandePaiement{ + want := &ListeTypesDemandePaiementResponse{ CodeRetour: 0, Libelle: "GCU_MSG_01_000", Types: []TypeDemandePaiement{ @@ -88,7 +88,7 @@ func TestTransversesService_RecupererTypesFactureTravaux(t *testing.T) { t.Errorf("Transverses.RecupererTypesFactureTravaux returned error : %v", err) } - want := &ListeTypesFactureTravaux{ + want := &ListeTypesFactureTravauxResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Types: []TypeFactureTravaux{ @@ -139,7 +139,7 @@ func TestTransversesService_RecupererTypesIdentifiantsStructure(t *testing.T) { t.Errorf("Transverses.RecupererTypesIdentifiantsStructure returned error : %v", err) } - want := &ListeTypesIdentifiantsStructure{ + want := &ListeTypesIdentifiantsStructureResponse{ CodeRetour: 0, Libelle: "TRA_MSG_00.000", Types: []TypeIdentifiantStructure{