Questa API consente di creare e gestire ordini.

Per gestire le API degli ordini tramite autenticazione è necessario utilizzare lo scope: order_api_scope.

Operazioni

L'API espone i seguenti metodi:

Creazione ordini

Consente di caricare a sistema una lista di ordini

Risponde a richieste POST verso: /ordini/Order

Per identificare la lista degli ordini da inviare viene richiesto un oggetto JSON contenente i seguenti campi:

  • header: intestazione dell'ordine.
  • items: lista delle posizioni dell'ordine (ad ogni ordine possono essere associate una o più posizioni).

Intestazione dell'ordine

L’intestazione dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • orderNumber(opzionale): numero ordine cliente.
  • orderDate(opzionale): data ordine cliente. Opzionale: se non fornita viene considerata la data corrente.
  • owner: dettagli responsabile. Contiene:
    • type(opzionale): responsabilità dell'ordine. Opzionale: se non fornito nessun valore viene considerato come default "customer".
    • code: codice responsabile dell'ordine. Obbligatorio solo se la responsabilità dell’ordine è diversa dacustomer”.
  • customerCode: codice destinatario della merce.
  • reason(opzionale): motivo dell'ordine.
  • documentType(opzionale): tipo documento / fornitura. Opzionale: se non fornito nessun valore viene considerato come default "restock".
  • expectedDeliveryDate(opzionale): data prevista consegna. Opzionale: se non fornita viene considerata la data ordine + 2 giorni.
  • deliveryMode(opzionale): modalità di consegna / condizioni di spedizione. Opzionale: se non fornito nessun valore viene considerato come default "standard".
  • recipient(opzionale): destinatario estemporaneo. Contiene:
    • name: ragione sociale(obbligatorio),
    • memberCard: tessera socio,
    • address: via o piazza e n°(obbligatorio),
    • co: presso,
    • zipCode: CAP(obbligatorio),
    • city: località(obbligatorio),
    • district: frazione,
    • province: provincia(obbligatorio),
    • country: paese(obbligatorio),
    • telephoneNumber: n° telefono,
    • emailAddress: email,
    • dataLine: linea dati,
    • telebox: fax,
    • notes: note
  • codeOrdering(opzionale): codice dell'ordine.
  • notes(opzionale): note di testata.
  • senderOrderReference(opzionale): riferimento ordine mittente.
  • promotionCampaignCode: inserire solo se documentType = Campaign.
  • channel: Informazioni sul canale di acquisizione (max 4 caratteri) NB: il campo può essere specificato solo se l'utente ha la feature ORDER_CHANNEL
  • expectedDeliveryReason: motivo tassatività, specificare solo quando deliveryMode = compulsory. Sono ammessi i seguenti valori: Presentazione, Fiera-Mostra e nuovo Punto Vendita.
  • customerDecoder(opzionale): decodificatore cliente, accetta solo il valore GRCLI_FELTRINELLI.

Posizione dell'ordine

La posizione dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • eanCode: codice EAN del titolo da ordinare.
  • location(opzionale): posizione del titolo
    • plant: divisione
    • storage: magazzino
    • batch: partita
  • quantity: quantità totale.
  • discount(opzionale): sconto occasionale.
  • paymentTerm(opzionale): termini di pagamento.
  • booking(opzionale): Tenuta prenotazione. Può assumere i seguenti valori: true, false, replace. 
  • priority(opzionale): Evasione prioritaria. SVILUPPI FUTURI
  • price(opzionale): netto unitario.
  • notes(opzionale): nota di posizione.
  • newLaunchYear(opzionale): anno lancio
  • newLaunchNum(opzionale): numero lancio.

Controlli di validazione

Il metodo API effettua i seguenti controlli di validazione:

  • la responsabilità dell'ordine (owner/type) deve avere uno dei seguenti valori: customer (cliente), vendor (editore), promotionalNetwork (rete)salesAgent (agente)
  • il codice responsabile dell'ordine deve riferirsi a un responsabile censito a sistema
  • il codice SAP o SAN del cliente destinatario (customerCode) deve corrispondere a un cliente presente a sistema
  • il motivo dell'ordine (reason) deve avere uno dei seguenti valori: firstOrder, backOrder
  • il tipo di documento deve avere uno dei seguenti valori: restock (Rifornimento), newTitle (Novità), campaign (Campagna), deposit (Deposito), freeOrder (Omaggi), specialOrder (Ordini Speciali), specialOrderE (Ordini Speciali E), publisherOffice (Reso ufficio editore), rifoVendorStock (Rifo Magedi Scorta).
  • la modalità di consegna (deliveryMode) deve avere uno dei seguenti valori: standard, compulsory (tassativa), quick (veloce), pickup (ritiro diretto)
  • se gli EAN esistono devono appartenere all'utente che ha generato l'ordine
  • le quantità devono essere maggiori di 0

L'API può restituire i seguenti codici di errore:

  • 400 (Bad Request): query malformata.
  • 401 (Unauthorized): il token di autenticazione non è valido oppure è scaduto.

 

Esempio richiesta

Il seguente esempio invia 2 ordini i quali contengono, rispettivamente, 3 e 2 titoli:

POST https://api.messaggerielibri.it/ordini/Order HTTP/1.1
Authorization: Bearer [TOKEN JWT]

 

Esempio body richiesta

[
  {
    "header": {
      "orderNumber": "TEST-20200521.3",
      "orderDate": "2020-05-21",
      "customerCode": "0001115301",
      "notes": "Ordine di prova - 21/05/2020 #3"
    },
    "items": [
      {
        "eanCode": "9788838925993",
        "quantity": 30,
        "price": 20,
        "notes": "ALTRI CASI PER IL COMMISSARIO MONTALBANO"
      },
      {
        "eanCode": "9788838938511",
        "quantity": 10,
        "price": 15,
        "notes": "GLI ARANCINI DI MONTALBANO"
      },
      {
        "eanCode": "9788838924200",
        "quantity": 8,
        "price": 20,
        "notes": "ANCORA TRE INDAGINI PER IL COMMISSARIO MONTALBANO"
      }
    ]
  },
  {
    "header": {
      "orderNumber": "TEST-20200521.4",
      "orderDate": "2020-05-21",
      "customerCode": "0001115301",
      "notes": "Ordine di prova - 21/05/2020 #4"
    },
    "items": [
      {
        "eanCode": "9788884516121",
        "quantity": 12,
        "price": 14,
        "notes": "HARRY POTTER E IL PRIGIONIERO DI AZKABAN"
      },
      {
        "eanCode": "9788884516114",
        "quantity": 10,
        "price": 13,
        "notes": "HARRY POTTER E LA CAMERA DEI SEGRETI"
      }
    ]
  }
]

Esempio risposta

Se l’esecuzione è terminata con successo, l’API restituisce un numero progressivo (batchId) che identifica l’operazione effettuata:

123

 

Features

Per utilizzare il metodo API è necessario possedere una o più delle seguenti features:

  • order_add

altrimenti viene restituito 403 (Forbidden)

Recupero sommario ordini

Consente il recupero del sommario degli ordini presenti a sistema

Risponde a richieste GET verso /ordini/OrderSummary

E' possibile passare in querystring i seguenti parametri, tutti opzionali:

  • dateFrom: data dell'ordine (da)
  • dateTo: data dell'ordine (a)
  • orderDate: data dell'ordine


Se non vengono passati parametri viene restituito il sommario di tutti gli ordini che sono visibili all'utente.


L’operazione restituisce uno oggetto JSON contenente i seguenti campi:

  • items: numero totale di ordini.
  • acquired: numero di ordini acquisiti.
  • refused: numero di ordini rifiutati.
  • toBeSent: numero di ordini 
  • valid: numero di ordini validi.
  • notValid: numero di ordini non validi.
  • errors: errori, è una lista di oggetti contenenti i seguenti campi: 
    • propertyName: nome della proprietà errata.
    • description: descrizione della proprietà errata.
    • count: numero di ordini contenenti la proprietà errata.
  • rejectionReason: motivi di rifiuto, è una lista di oggetti contenenti i seguenti campi:  
    • code: codice del motivo di rifiuto.
    • description: descrizione del motivo di rifiuto.
    • count: numero di ordini contenenti il motivo di rifiuto.


L'API può restituire i seguenti codici di errore:

  • 400 (Bad Request): query malformata.
  • 401 (Unauthorized): il token di autenticazione non è valido oppure è scaduto.

 

Esempio richiesta

GET https://api.messaggerielibri.it/ordini/orderSummary?&dateFrom=2022-05-27T22:00:00.000Z&dateTo=2022-05-31T22:00:00.000Z
Authorization: Bearer [TOKEN JWT]

Esempio risposta

Se la richiesta va a buon fine si ottiene in output il sommario degli ordini presenti a sistema divisi per tipo di ordine e filtrati per il range di date nel caso fossero passati in input:

{
   "items":70226,
   "acquired":67352,
   "refused":2874,
   "toBeSent":2334,
   "valid":33341,
   "notValid":31677,
   "errors":[
      {
         "propertyName":"EanCode",
         "description":"Codice EAN errato",
         "count":2849
      },
      {
         "propertyName":"Header.CustomerCode",
         "description":"Codice Destinatario errato",
         "count":27
      },
      {
         "propertyName":"Header.Recipient.EmailAddress",
         "description":"Indirizzo Email di consegna errato",
         "count":5
      },
      {
         "propertyName":"Header.Recipient.TelephoneNumber",
         "description":"Telefono di consegna errato",
         "count":5
      }
   ],
   "rejectionReasons":[
      {
         "code":"PN",
         "description":"Prenotazione non ammessa",
         "count":13415
      },
      {
         "code":"CP",
         "description":"Check Price",
         "count":5813
      },
      {
         "code":"M5",
         "description":"Non fornibile per Stato Vendita",
         "count":712
      },
      {
         "code":"ME",
         "description":"Fornitura bloccata da Editore",
         "count":89
      },
      {
         "code":"M7",
         "description":"Non fornibile per Risposta Editore",
         "count":52
      },
      {
         "code":"MC",
         "description":"Ammessa solo Resp. Cliente",
         "count":25
      },
      {
         "code":"EC",
         "description":"Editore Cessato",
         "count":9
      }
   ]
}

Features

Per utilizzare il metodo API è necessario possedere una o più delle seguenti features:

  • order_read

altrimenti viene restituito 403 (Forbidden)

Ricerca ordini

Consente di effettuare una ricerca sugli ordini presenti a sistema

Risponde a richieste GET verso /ordini/Order

E' possibile passare in querystring i seguenti parametri, tutti opzionali:

  • number: intestazione dell'ordine - string
  • dateFrom: data creazione dell'ordine (da) - date 
  • dateTo: data creazione dell'ordine (a) - date 
  • orderDate: data dell'ordine - date formato ISO (yyyy-MM-dd)
  • acquired: stato di acquisizione dell'ordine - boolean
  • validated: stato di validazione dell'ordine - può assumere i seguenti valori di tipo string:
    • toBeSent,
    • valid,
    • notValid,
  • details: flag per indicare se includere anche le righe degli ordini - string
  • error: nome della proprietà errata (può essere passato più volte)
  • rejectionReason: codice del motivo di rifiuto (può essere passato più volte)
  • archived: flag per indicare se filtrare per ordini archiviati - boolean
  • orderBy: campo su cui effettuare l’ordinamento - può assumere i seguenti valori di tipo string:
    • number,
    • date,
    • id,
    • customer,
    • owner,
    • document
  • orderDirection: direzione dell’ordinamento - può assumere i seguenti valori di tipo string:
    • asc,
    • desc
  • pageSize: numero massimo di risultati restituiti da una chiamata - number, può assumere valori tra 1 e 1000 e come default 50
  • pageIndex: numero di pagina dei risultati da restituire - number, può assumere valore maggiore di 0 e come default 1

Se non vengono passati parametri vengono restituite tutti gli ordini che sono visibili all'utente.

Se l’esecuzione è terminata con successo, l’API restituisce il seguente oggetto JSON:

  • totalCount: numero totale di ordini trovati.
  • totalQuantity: Numero totale copie degli ordini trovati
  • refusedQuantity: Numero totale copie rifiutate degli ordini trovati
  • notValidQuantity: Numero totale copie non valide degli ordini trovati
  • totalItems: Numero totale righe degli ordini trovati
  • refusedItems: Numero totale righe rifiutate degli ordini trovati
  • notValidItems: Numero totale righe non valide degli ordini trovati
  • totalPages: numero totale di pagine previste.
  • page: informazioni sulla pagina corrente:
    • index: indice della pagine corrente.
    • size: dimensione della pagina.
    • from: indice del primo elemento della pagina (se la pagina ha elementi)
    • to: indice dell’ultimo elemento della pagina (se la pagina ha elementi)
  • orders: elenco degli ordini (vedi: dettaglio riga dell'ordine).

Elenco degli ordini: dettaglio riga dell'ordine

L’elenco degli ordini è un array di oggetti JSON aventi la seguente struttura:

  • header: intestazione dell'ordine (vedi: dettaglio testata dell'ordine).
  • items: lista delle posizioni dell'ordine, ad ogni ordine possono essere associate una o più posizioni (vedi: dettaglio posizioni dell'ordine).
  • acquired: flag ordine acquisito.
  • validated: stato validazione dell'ordine. I valori possibili sono: toBeSent, valid, notValid
  • rejectionReason: motivo del rifiuto dell'ordine identificato da:
    • code: codice,
    • description: descrizione.
  • summary: recap contatori inerenti all'ordine (vedi: recap contatori).
  • errors: lista di eventuali errori nella validazione (vedi: errori di validazione)

Elenco degli ordini: dettaglio testata dell'ordine

La testata dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • orderId: identificativo dell'ordine.
  • orderNumber: numero ordine cliente.
  • orderDate: data ordine cliente.
  • owner: dettagli responsabile dell'ordine. Contiene:
    • type: tipologia del responsabile dell'ordine. I valori possibili che può assumere sono: customer, vendor, promotionalNetwork, salesAgent.
    • code: codice responsabile dell'ordine.
    • name: nome del responsabile dell'ordine.
  • customer: dettagli destinatario della merce. Contiene:
    • code: codice,
    • name: nome,
    • address: indirizzo,
    • zipCode: cap,
    • city: città,
    • province: provincia,
    • country: paese.
  • reason: motivo dell'ordine. I valori possibili che può assumere sono: firstOrder, backOrder.
  • documentType: tipo documento / fornitura. I valori possibili che può assumere sono: restock, newTitle, campaign, deposit.
  • expectedDeliveryDate: data prevista consegna.
  • deliveryMode: modalità di consegna / condizioni di spedizione. I valori possibili che può assumere sono: standard, compulsory, quick, pickup.
  • recipient: destinatario estemporaneo. Contiene: 
    • name: ragione sociale,
    • memberCard: tessera socio,
    • city: località,
    • province: provincia,
    • country: paese,
    • zipCode: CAP,
    • address: via o piazza e n°,
    • district: frazione,
    • co: presso,
    • notes: note
    • telephoneNumber: n° telefono,
    • emailAddress: email,
    • dataLine: linea dati,
    • telebox,
  • notes(opzionale): note di testata.

Elenco degli ordini: dettaglio posizioni dell'ordine

La posizione dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • title: informazioni sul titolo. Contiene:
    • ean: codice EAN del prodotto,
    • title: titolo del prodotto,
    • author: autore del prodotto,
    • publisher: editore del prodotto,
    • vendor: venditore del prodotto identificato da
      • code: codice,
      • description: descrizione.
  • location: posizionamento del titolo. Contiene:
    • plant: impianto dove si trova il titolo identificato da
      • code: codice,
      • description: descrizione
    • storage: magazzino dove si trova il titolo identificato da
      • code: codice,
      • description: descrizione
    • batch: partita del titolo.
  • quantity: quantità totale del titolo,
  • discount: sconto occasionale,
  • paymentTerm: termini di pagamento,
  • booking: tenuta prenotazione. I valori possibili sono: true, false, replace,
  • price: netto unitario,
  • notes: nota di posizione,
  • acquired: flag ordine acquisito,
  • validated: stato validazione dell'ordine. I valori possibili sono: toBeSent, valid, notValid,
  • reservedQuantity: quantità impegnata,
  • bookedQuantity: quantità in prenotazione,
  • bookingDeadlineDate: data scadenza prenotazione,
  • notProcessedQuantity: quantità inevasa,
  • errors: lista di eventuali errori nella validazione (vedi: errori di validazione)
  • rejectionReason: motivo del rifiuto dell'ordine identificato da:
    • code: codice,
    • description: descrizione.

Elenco degli ordini: recap contatori

Il recap contatori è un oggetto JSON che contiene i seguenti campi:

  • items: numero posizioni ordine,
  • acquired: numero posizioni ordine acquisite,
  • refused: numero posizioni ordine rifiutate,
  • toBeSent: numero posizioni ordine in validazione,
  • valid: numero posizioni ordine valide,
  • notValid: numero posizioni ordine non valide
  • quantity: Numero copie ordine
  • refusedQuantity: Numero copie ordine rifiutate
  • notValidQuantity: Numero copie ordine non valide

Elenco degli ordini: errori di validazione

Gli errori di validazione vengono definiti tramite un oggetto JSON che contiene i seguenti campi:

  • propertyName: proprietà in errore,
  • propertyValue: valore proprietà in errore,
  • propertyDescription: descrizione proprietà in errore,
  • errorCode: codice errore,
  • errorMessage: messaggio di errore.

 

L'API può restituire i seguenti codici di errore:

  • 400 (Bad Request): query malformata.
  • 401 (Unauthorized): il token di autenticazione non è valido oppure è scaduto.

 

Esempio richiesta

GET https://api.messaggerielibri.it/ordini/order?pageIndex=1&pageSize=50&dateFrom=2022-05-27T22:00:00.000Z&dateTo=2022-05-31T22:00:00.000Z&details
Authorization: Bearer [TOKEN JWT]

Esempio risposta

Se la richiesta va a buon fine si ottiene in output una lista contente le informazioni principali sugli ordini trovati:

{
	"totalCount": 1,
	"totalQuantity": 16,
	"refusedQuantity": 6,
	"notValidQuantity": 0,
	"totalItems": 3,
	"refusedItems": 1,
	"notValidItems": 0,
	"totalPages": 1,
	"page": {
		"index": 1,
		"size": 50,
		"from": 1,
		"to": 1
	},
	"orders": [
		{
			"header": {
				"orderId": 9333,
				"orderNumber": "test fa",
				"orderDate": "2025-02-19",
				"owner": {
					"type": "salesAgent",
					"code": "FL009",
					"name": "PANACCIONE SALVATORE"
				},
				"customer": {
					"code": "00021500",
					"name": "HOEPLI SPA",
					"address": "VIA HOEPLI, 5",
					"zipCode": "20121",
					"city": "MILANO",
					"province": "MI",
					"country": "IT"
				},
				"documentType": "restock",
				"expectedDeliveryDate": "2025-02-21",
				"deliveryMode": "standard",
				"notes": "agente 01"
			},
			"items": [
				{
					"title": {
						"ean": "9788807012259",
						"title": "GIORNALISTA FELICE E SCONOSCIUTO",
						"author": "GARCIA MARQUEZ GABRIEL",
						"publisher": "FELTRINELLI EDITORE",
						"vendor": {
							"code": "243",
							"description": "FELTRINELLI EDITORE"
						}
					},
					"location": {
						"plant": {
							"code": "ME60",
							"description": "MESSAGGERIE LIBRI"
						},
						"storage": {
							"code": "11",
							"description": "Principale"
						},
						"batch": "LIBERO"
					},
					"quantity": 2,
					"acquired": true,
					"validated": "toBeSent",
					"reservedQuantity": 0,
					"bookedQuantity": 0,
					"notProcessedQuantity": 0,
					"priority": false
				},
				{
					"title": {
						"ean": "9783833112362",
						"title": "ART NOVEAU",
						"author": "FAHR-BECKER GABRIELE",
						"publisher": "GRIBAUDO - IF IDEE FELTRINELLI EDIT",
						"vendor": {
							"code": "175",
							"description": "GRIBAUDO - IF IDEE FELTRINELLI EDIT"
						}
					},
					"location": {
						"plant": {
							"code": "ME60",
							"description": "MESSAGGERIE LIBRI"
						},
						"storage": {
							"code": "11",
							"description": "Principale"
						},
						"batch": "LIBERO"
					},
					"quantity": 8,
					"acquired": true,
					"validated": "toBeSent",
					"reservedQuantity": 0,
					"bookedQuantity": 0,
					"notProcessedQuantity": 0,
					"priority": false
				},
				{
					"title": {
						"ean": "9788862560337",
						"title": "CHE ANIMALE SEI?",
						"author": "MASTROCOLA PAOLA",
						"publisher": "SALANI EDITORE S.P.A.",
						"vendor": {
							"code": "778",
							"description": "SALANI EDITORE S.P.A."
						}
					},
					"location": {
						"plant": {
							"code": "ME60",
							"description": "MESSAGGERIE LIBRI"
						},
						"storage": {
							"code": "11",
							"description": "Principale"
						},
						"batch": "LIBERO"
					},
					"quantity": 6,
					"acquired": false,
					"validated": "toBeSent",
					"errors": [
						{
							"propertyName": "Item.EanResponsability",
							"propertyValue": "9788862560337",
							"propertyDescription": "EAN non coerente con responsabilità ordine",
							"errorCode": "Item.EanResponsability",
							"errorMessage": "La condizione non è verificata per 'Ean Code'."
						}
					],
					"reservedQuantity": 0,
					"bookedQuantity": 0,
					"notProcessedQuantity": 0,
					"priority": false
				}
			],
			"acquired": true,
			"validated": "toBeSent",
			"summary": {
				"items": 3,
				"acquired": 2,
				"refused": 1,
				"toBeSent": 2,
				"valid": 0,
				"notValid": 0,
				"quantity": 16,
				"refusedQuantity": 6,
				"notValidQuantity": 0
			},
			"canResubmit": false,
			"archived": false
		}
	]
}

Features

Per utilizzare il metodo API è necessario possedere una o più delle seguenti features:

  • order_read

altrimenti viene restituito 403 (Forbidden)

Recupero set ordini

Consente di ottenere l'elenco degli ordini presenti in un set

Risponde a richieste GET verso /ordini/OrderBatch/{batchId}, dove {batchId} rappresenta il batchId degli ordini di un determinato set che si vogliono recuperare.

Se l’esecuzione è terminata con successo, l’API restituisce uno o più oggetti JSON:

  • header: intestazione dell'ordine (vedi: dettaglio testata dell'ordine).
  • items: lista delle posizioni dell'ordine, ad ogni ordine possono essere associate una o più posizioni (vedi: dettaglio posizioni dell'ordine).
  • acquired: flag ordine acquisito
  • validated: stato validazione dell'ordine. I valori possibili sono: toBeSent, valid, notValid
  • rejectionReason: motivo del rifiuto dell'ordine identificato da:
    • code: codice
    • description: descrizione
  • summary: recap contatori inerenti all'ordine (vedi: recap contatori).
  • errors: lista di eventuali errori nella validazione (vedi: errori di validazione)

Elenco degli ordini: dettaglio testata dell'ordine

La testata dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • orderId: identificativo dell'ordine
  • orderNumber: numero ordine cliente
  • orderDate: data ordine cliente
  • owner: dettagli responsabile dell'ordine. Contiene:
    • type: tipologia del responsabile dell'ordine. I valori possibili che può assumere sono: customer, vendor, promotionalNetwork, salesAgent.
    • code: codice responsabile dell'ordine
    • name: nome del responsabile dell'ordine
  • customer: dettagli destinatario della merce. Contiene:
    • code: codice
    • name: nome
    • address: indirizzo
    • zipCode: cap
    • city: città
    • province: provincia
    • country: paese
  • reason: motivo dell'ordine. I valori possibili che può assumere sono: firstOrder, backOrder.
  • documentType: tipo documento / fornitura. I valori possibili che può assumere sono: restock, newTitle, campaign, deposit.
  • expectedDeliveryDate: data prevista consegna
  • deliveryMode: modalità di consegna / condizioni di spedizione. I valori possibili che può assumere sono: standard, compulsory, quick, pickup.
  • recipient: destinatario estemporaneo. Contiene: 
    • name: ragione sociale
    • memberCard: tessera socio
    • city: località
    • province: provincia
    • country: paese
    • zipCode: CAP
    • address: via o piazza e n°
    • district: frazione
    • co: presso
    • notes: note
    • telephoneNumber: n° telefono
    • emailAddress: email
    • dataLine: linea dati
    • telebox
  • notes(opzionale): note di testata

Elenco degli ordini: dettaglio posizioni dell'ordine

La posizione dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • title: informazioni sul titolo. Contiene:
    • ean: codice EAN del prodotto
    • title: titolo del prodotto
    • author: autore del prodotto
    • publisher: editore del prodotto
    • vendor: venditore del prodotto identificato da
      • code: codice
      • description: descrizione
  • location: posizionamento del titolo. Contiene:
    • plant: impianto dove si trova il titolo identificato da
      • code: codice
      • description: descrizione
    • storage: magazzino dove si trova il titolo identificato da
      • code: codice
      • description: descrizione
    • batch: partita del titolo
  • quantity: quantità totale del titolo
  • discount: sconto occasionale
  • paymentTerm: termini di pagamento
  • booking: tenuta prenotazione. I valori possibili sono: true, false, replace,
  • price: netto unitario
  • notes: nota di posizione
  • acquired: flag ordine acquisito
  • validated: stato validazione dell'ordine. I valori possibili sono: toBeSent, valid, notValid,
  • errors: lista di eventuali errori nella validazione. Contiene:
    • propertyName: proprietà in errore
    • propertyValue: valore proprietà in errore
    • propertyDescription: descrizione proprietà in errore
    • errorCode: codice errore
    • errorMessage: messaggio di errore
  • rejectionReason: motivo del rifiuto dell'ordine identificato da:
    • code: codice
    • description: descrizione

Elenco degli ordini: recap contatori

Il recap contatori è un oggetto JSON che contiene i seguenti campi:

  • items: numero posizioni ordine
  • acquired: numero posizioni ordine acquisite
  • refused: numero posizioni ordine rifiutate
  • toBeSent: numero posizioni ordine in validazione
  • valid: numero posizioni ordine valide
  • notValid: numero posizioni ordine non valide

Elenco degli ordini: errori di validazione

Gli errori di validazione vengono definiti tramite un oggetto JSON che contiene i seguenti campi:

  • propertyName: proprietà in errore
  • propertyValue: valore proprietà in errore
  • propertyDescription: descrizione proprietà in errore
  • errorCode: codice errore
  • errorMessage: messaggio di errore


L'API può restituire i seguenti codici di errore:

  • 400 (Bad Request): query malformata.
  • 401 (Unauthorized): il token di autenticazione non è valido oppure è scaduto. 
  • 404 (Not Found): al parametro fornito non corrisponde alcun set.

 

Esempio richiesta

GET https://api.messaggerielibri.it/ordini/OrderBatch/193
Authorization: Bearer [TOKEN JWT]

Esempio risposta

[
    {
        "header": {
            "orderId": 253,
            "orderNumber": "TEST-20220624.1",
            "orderDate": "2022-01-27",
            "owner": {
                "type": "customer",
                "code": "01115301",
                "name": "RINASCITA DI PIGNOTTI GIORGIO"
            },
            "customer": {
                "code": "01115301",
                "name": "RINASCITA DI PIGNOTTI GIORGIO",
                "address": "PIAZZA ROMA 7",
                "zipCode": "63100",
                "city": "ASCOLI PICENO",
                "province": "AP",
                "country": "IT"
            },
            "documentType": "newTitle",
            "expectedDeliveryDate": "2022-01-29",
            "deliveryMode": "standard",
            "notes": "Ordine di prova - 27/01/2022 #1"
        },
        "items": [
            {
                "title": {
                    "ean": "9788838925993",
                    "title": "ALTRI CASI PER IL COMMISSARIO MONTALBANO",
                    "author": "CAMILLERI",
                    "publisher": "SELLERIO EDITORE  SRL",
                    "vendor": {
                        "code": "017",
                        "description": "SELLERIO EDITORE  SRL"
                    }
                },
                "location": {
                    "plant": {
                        "code": "ME60",
                        "description": "MESSAGGERIE LIBRI"
                    },
                    "storage": {
                        "code": "11",
                        "description": "Principale"
                    },
                    "batch": "LIBERO"
                },
                "quantity": 30,
                "booking": "true",
                "price": 20.00,
                "notes": "ALTRI CASI PER IL COMMISSARIO MONTALBANO",
                "acquired": true,
                "validated": "toBeSent"
            },
            {
                "title": {
                    "ean": "9788838938511",
                    "title": "GLI ARANCINI DI MONTALBANO",
                    "author": "CAMILLERI",
                    "publisher": "SELLERIO EDITORE  SRL",
                    "vendor": {
                        "code": "017",
                        "description": "SELLERIO EDITORE  SRL"
                    }
                },
                "location": {
                    "plant": {
                        "code": "ME60",
                        "description": "MESSAGGERIE LIBRI"
                    },
                    "storage": {
                        "code": "11",
                        "description": "Principale"
                    },
                    "batch": "LIBERO"
                },
                "quantity": 10,
                "booking": "false",
                "price": 15.00,
                "notes": "GLI ARANCINI DI MONTALBANO",
                "acquired": true,
                "validated": "toBeSent"
            },
            {
                "title": {
                    "ean": "19788838924200",
                    "vendor": {}
                },
                "location": {
                    "plant": {
                        "code": "ME60",
                        "description": "MESSAGGERIE LIBRI"
                    },
                    "storage": {
                        "code": "30",
                        "description": "Rese da versare"
                    },
                    "batch": "LIBERO"
                },
                "quantity": 8,
                "booking": "replace",
                "price": 20.00,
                "notes": "ANCORA TRE INDAGINI PER IL COMMISSARIO MONTALBANO",
                "acquired": false,
                "validated": "toBeSent",
                "errors": [
                    {
                        "propertyName": "EanCode",
                        "propertyValue": "19788838924200",
                        "propertyDescription": "Codice EAN errato",
                        "errorCode": "ExistingValidator",
                        "errorMessage": "'Ean Code' value '19788838924200' not found."
                    }
                ]
            }
        ],
        "acquired": false,
        "validated": "toBeSent",
        "summary": {
            "items": 3,
            "acquired": 0,
            "refused": 3,
            "toBeSent": 0,
            "valid": 0,
            "notValid": 0
        },
        "errors": [
            {
                "propertyName": "Header.CustomerCode",
                "propertyValue": "0001115301",
                "propertyDescription": "Destinatario errato",
                "errorCode": "ExistingValidator",
                "errorMessage": "'Customer Code' value '0001115301' not found."
            }
        ],
        "canResubmit": false
    },
    {
        "header": {
            "orderId": 254,
            "orderNumber": "TEST-20220624.2",
            "orderDate": "2022-01-27",
            "owner": {
                "type": "customer",
                "code": "01115301",
                "name": "RINASCITA DI PIGNOTTI GIORGIO"
            },
            "customer": {
                "code": "01115301",
                "name": "RINASCITA DI PIGNOTTI GIORGIO",
                "address": "PIAZZA ROMA 7",
                "zipCode": "63100",
                "city": "ASCOLI PICENO",
                "province": "AP",
                "country": "IT"
            },
            "documentType": "restock",
            "expectedDeliveryDate": "2022-01-29",
            "deliveryMode": "standard",
            "notes": "Ordine di prova - 27/01/2022 #2"
        },
        "items": [
            {
                "title": {
                    "ean": "9788884516121",
                    "title": "HARRY POTTER  E IL PRIGIONIERO DI AZKABAN",
                    "author": "ROWLING J.K.",
                    "publisher": "SALANI EDITORE S.P.A.",
                    "vendor": {
                        "code": "778",
                        "description": "SALANI EDITORE S.P.A."
                    }
                },
                "location": {
                    "plant": {
                        "code": "ME61",
                        "description": "MESSAGGERIE LIBRI"
                    },
                    "storage": {
                        "code": "20",
                        "description": "Rese"
                    },
                    "batch": "LIBERO"
                },
                "quantity": 12,
                "price": 14.00,
                "notes": "HARRY POTTER  E IL PRIGIONIERO DI AZKABAN",
                "acquired": true,
                "validated": "toBeSent"
            },
            {
                "title": {
                    "ean": "9788884516114",
                    "title": "HARRY POTTER  E LA CAMERA DEI SEGRETI",
                    "author": "ROWLING J.K.",
                    "publisher": "SALANI EDITORE S.P.A.",
                    "vendor": {
                        "code": "778",
                        "description": "SALANI EDITORE S.P.A."
                    }
                },
                "location": {
                    "plant": {
                        "code": "ME60",
                        "description": "MESSAGGERIE LIBRI"
                    },
                    "storage": {
                        "code": "11",
                        "description": "Principale"
                    },
                    "batch": "LIBERO"
                },
                "quantity": 10,
                "price": 13.00,
                "notes": "HARRY POTTER  E LA CAMERA DEI SEGRETI",
                "acquired": true,
                "validated": "toBeSent"
            }
        ],
        "acquired": false,
        "validated": "toBeSent",
        "summary": {
            "items": 2,
            "acquired": 0,
            "refused": 2,
            "toBeSent": 0,
            "valid": 0,
            "notValid": 0
        },
        "errors": [
            {
                "propertyName": "Header.CustomerCode",
                "propertyValue": "0001115301",
                "propertyDescription": "Destinatario errato",
                "errorCode": "ExistingValidator",
                "errorMessage": "'Customer Code' value '0001115301' not found."
            }
        ],
        "canResubmit": false
    }
]

Features

Per utilizzare il metodo API è necessario possedere una o più delle seguenti features:

  • order_add

altrimenti viene restituito 403 (Forbidden)

Ricerca riferimento ordini

Consente di effettuare una ricerca sugli ordini presenti a sistema

Risponde a richieste GET verso /ordini/OrderNumber

E' possibile passare in querystring i seguenti parametri, tutti opzionali:

  • number: intestazione dell'ordine - string
  • dateFrom: data creazione dell'ordine (da) - date 
  • dateTo: data creazione dell'ordine (a) - date 
  • details: flag per indicare se includere anche i dettagli degli ordini - string
  • orderBy: campo su cui effettuare l’ordinamento - può assumere i seguenti valori di tipo string:
    • number,
    • date
  • orderDirection: direzione dell’ordinamento - può assumere i seguenti valori di tipo string:
    • asc,
    • desc
  • pageSize: numero massimo di risultati restituiti da una chiamata - number, può assumere valori tra 1 e 1000 e come default 50
  • pageIndex: numero di pagina dei risultati da restituire - number, può assumere valore maggiore di 0 e come default 1

Se non vengono passati parametri vengono restituite tutti gli ordini che sono visibili all'utente.

Se l’esecuzione è terminata con successo, l’API restituisce il seguente oggetto JSON:

  • totalCount: numero totale di riferimento ordini trovati.
  • totalPages: numero totale di pagine previste.
  • page: informazioni sulla pagina corrente:
    • index: indice della pagine corrente.
    • size: dimensione della pagina.
    • from: indice del primo elemento della pagina (se la pagina ha elementi)
    • to: indice dell’ultimo elemento della pagina (se la pagina ha elementi)
  • orders: elenco degli ordini (vedi: dettaglio riga dell'ordine).

Elenco degli ordini: dettaglio riga dell'ordine

L’elenco degli ordini è un array di oggetti JSON aventi la seguente struttura:

  • header: intestazione del riferimento ordine (vedi: dettaglio testata del riferimento ordine).
  • items: lista delle posizioni dell'ordine, ad ogni ordine possono essere associate una o più posizioni (vedi: dettaglio dell'ordine).

Elenco degli ordini: dettaglio testata dell'ordine

La testata dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • orderNumber: numero ordine cliente.
  • orderDate: data ordine cliente.
  • orderCount: conteggio degli ordini
  • quantity: Totale quantità copie
  • items: Numero di righe
  • notValidatedCount: Numero di righe non valide
  • validatedCount: Numero di righe in validazione
  • orders: elenco dettaglio degli ordini

Elenco degli ordini: dettaglio posizioni dell'ordine

Il dettaglio dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • orderId: sconto occasionale,
  • items: termini di pagamento,
  • notValid: tenuta prenotazione. I valori possibili sono: true, false, quantity,
  • createdDate

L'API può restituire i seguenti codici di errore:

  • 400 (Bad Request): query malformata.
  • 401 (Unauthorized): il token di autenticazione non è valido oppure è scaduto.

 

Esempio richiesta

GET https://api.messaggerielibri.it/ordini/OrderNumber?dateFrom=2025-03-25&dateTo=2025-03-26&details
Authorization: Bearer [TOKEN JWT]

Esempio risposta

Se la richiesta va a buon fine si ottiene in output una lista contente le informazioni principali sugli ordini trovati:

{
	"totalCount": 4,
	"totalPages": 1,
	"page": {
		"index": 1,
		"size": 20,
		"from": 1,
		"to": 4
	},
	"orderNumbers": [
		{
			"header": {
				"orderNumber": "newApi",
				"orderDate": "2025-03-25",
				"ordersCount": 2,
				"quantity": 4,
				"items": 2,
				"notValidatedCount": 0,
				"validatedCount": 2,
				"orders": [
					{
						"orderId": 27669,
						"items": 1,
						"notValid": 0,
						"quantity": 0,
						"createdDate": "2025-03-25T08:57:28.1922277"
					},
					{
						"orderId": 27670,
						"items": 1,
						"notValid": 0,
						"quantity": 0,
						"createdDate": "2025-03-25T09:04:23.596302"
					}
				]
			}
		},
		{
			"header": {
				"orderNumber": "newApi1",
				"orderDate": "2025-03-25",
				"ordersCount": 1,
				"quantity": 1,
				"items": 1,
				"notValidatedCount": 0,
				"validatedCount": 1,
				"orders": [
					{
						"orderId": 27671,
						"items": 1,
						"notValid": 0,
						"quantity": 0,
						"createdDate": "2025-03-25T11:46:05.9636654"
					}
				]
			}
		},
		{
			"header": {
				"orderNumber": "newApi2",
				"orderDate": "2025-03-25",
				"ordersCount": 2,
				"quantity": 6,
				"items": 4,
				"notValidatedCount": 2,
				"validatedCount": 2,
				"orders": [
					{
						"orderId": 27672,
						"items": 2,
						"notValid": 0,
						"quantity": 0,
						"createdDate": "2025-03-25T13:39:28.2072582"
					},
					{
						"orderId": 27673,
						"items": 2,
						"notValid": 2,
						"quantity": 0,
						"createdDate": "2025-03-25T14:00:39.9187829"
					}
				]
			}
		},
		{
			"header": {
				"orderNumber": "newApi",
				"orderDate": "2025-03-26",
				"ordersCount": 3,
				"quantity": 27,
				"items": 6,
				"notValidatedCount": 1,
				"validatedCount": 5,
				"orders": [
					{
						"orderId": 27674,
						"items": 1,
						"notValid": 1,
						"quantity": 0,
						"createdDate": "2025-03-26T11:37:10.9121263"
					},
					{
						"orderId": 27675,
						"items": 3,
						"notValid": 0,
						"quantity": 0,
						"createdDate": "2025-03-26T15:48:06.7336153"
					},
					{
						"orderId": 27676,
						"items": 2,
						"notValid": 0,
						"quantity": 0,
						"createdDate": "2025-03-26T15:48:47.3271307"
					}
				]
			}
		}
	]
}

Features

Per utilizzare il metodo API è necessario possedere una o più delle seguenti features:

  • order_read

altrimenti viene restituito 403 (Forbidden)

Recupero dettaglio singolo ordine

Consente di effettuare una ricerca sugli ordini presenti a sistema

Risponde a richieste GET verso /ordini/order/{orderId}, dove {orderId} rappresenta l'Id dell'ordine che si vuole recuperare.

L’operazione restituisce un oggetto JSON contenente i seguenti campi:

  • header: intestazione dell'ordine (vedi: dettaglio testata dell'ordine).
  • items: lista delle posizioni dell'ordine, ad ogni ordine possono essere associate una o più posizioni (vedi: dettaglio posizioni dell'ordine).
  • acquired: flag ordine acquisito.
  • validated: stato validazione dell'ordine. I valori possibili sono: toBeSent, valid, notValid
  • rejectionReason: motivo del rifiuto dell'ordine identificato da:
    • code: codice,
    • description: descrizione.
  • summary: recap contatori inerenti all'ordine (vedi: recap contatori).
  • errors: lista di eventuali errori nella validazione (vedi: errori di validazione)

Elenco degli ordini: dettaglio testata dell'ordine

La testata dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • orderId: identificativo dell'ordine.
  • orderNumber: numero ordine cliente.
  • orderDate: data ordine cliente.
  • owner: dettagli responsabile dell'ordine. Contiene:
    • type: tipologia del responsabile dell'ordine. I valori possibili che può assumere sono: customer, vendor, promotionalNetwork, salesAgent.
    • code: codice responsabile dell'ordine.
    • name: nome del responsabile dell'ordine.
  • customer: dettagli destinatario della merce. Contiene:
    • code: codice,
    • name: nome,
    • address: indirizzo,
    • zipCode: cap,
    • city: città,
    • province: provincia,
    • country: paese.
  • reason: motivo dell'ordine. I valori possibili che può assumere sono: firstOrder, backOrder.
  • documentType: tipo documento / fornitura. I valori possibili che può assumere sono: restock, newTitle, campaign, deposit.
  • expectedDeliveryDate: data prevista consegna.
  • deliveryMode: modalità di consegna / condizioni di spedizione. I valori possibili che può assumere sono: standard, compulsory, quick, pickup.
  • recipient: destinatario estemporaneo. Contiene: 
    • name: ragione sociale,
    • memberCard: tessera socio,
    • city: località,
    • province: provincia,
    • country: paese,
    • zipCode: CAP,
    • address: via o piazza e n°,
    • district: frazione,
    • co: presso,
    • notes: note
    • telephoneNumber: n° telefono,
    • emailAddress: email,
    • dataLine: linea dati,
    • telebox,
  • notes(opzionale): note di testata.

Elenco degli ordini: dettaglio posizioni dell'ordine

La posizione dell’ordine è un oggetto JSON che contiene i seguenti campi:

  • title: informazioni sul titolo. Contiene:
    • ean: codice EAN del prodotto,
    • title: titolo del prodotto,
    • author: autore del prodotto,
    • publisher: editore del prodotto,
    • vendor: venditore del prodotto identificato da
      • code: codice,
      • description: descrizione.
  • location: posizionamento del titolo. Contiene:
    • plant: impianto dove si trova il titolo identificato da
      • code: codice,
      • description: descrizione
    • storage: magazzino dove si trova il titolo identificato da
      • code: codice,
      • description: descrizione
    • batch: partita del titolo.
  • quantity: quantità totale del titolo,
  • discount: sconto occasionale,
  • paymentTerm: termini di pagamento,
  • booking: tenuta prenotazione. I valori possibili sono: true, false, replace,
  • price: netto unitario,
  • notes: nota di posizione,
  • acquired: flag ordine acquisito,
  • validated: stato validazione dell'ordine. I valori possibili sono: toBeSent, valid, notValid,
  • reservedQuantity: quantità impegnata,
  • bookedQuantity: quantità in prenotazione,
  • bookingDeadlineDate: data scadenza prenotazione,
  • notProcessedQuantity: quantità inevasa,
  • errors: lista di eventuali errori nella validazione (vedi: errori di validazione)
  • rejectionReason: motivo del rifiuto dell'ordine identificato da:
    • code: codice,
    • description: descrizione.

Elenco degli ordini: recap contatori

Il recap contatori è un oggetto JSON che contiene i seguenti campi:

  • items: numero posizioni ordine,
  • acquired: numero posizioni ordine acquisite,
  • refused: numero posizioni ordine rifiutate,
  • toBeSent: numero posizioni ordine in validazione,
  • valid: numero posizioni ordine valide,
  • notValid: numero posizioni ordine non valide
  • quantity: numero copie ordine
  • refusedQuantity: numero copie ordine rifiutate
  • notValidQuantity: numero copie ordine non valide

Elenco degli ordini: errori di validazione

Gli errori di validazione vengono definiti tramite un oggetto JSON che contiene i seguenti campi:

  • propertyName: proprietà in errore,
  • propertyValue: valore proprietà in errore,
  • propertyDescription: descrizione proprietà in errore,
  • errorCode: codice errore,
  • errorMessage: messaggio di errore.

 

L'API può restituire i seguenti codici di errore:

  • 400 (Bad Request): query malformata.
  • 401 (Unauthorized)il token di autenticazione non è valido oppure è scaduto.
  • 404 (Not Found)ai parametri forniti non corrisponde alcun ordine.

 

Esempio richiesta

GET https://api.messaggerielibri.it/ordini/order/3126
Authorization: Bearer [TOKEN JWT]

Esempio risposta

Se la richiesta va a buon fine si ottiene in output una lista contente le informazioni principali sugli ordini trovati:

{
	"header": {
		"orderId": 3126,
		"orderNumber": "3126",
		"orderDate": "2025-01-07",
		"owner": {
			"type": "promotionalNetwork",
			"code": "FL",
			"name": "FELTRINELLI"
		},
		"customer": {
			"code": "00173800",
			"name": "FAGNANI IDEALE DI P.FAGNANI",
			"address": "C.SO STAMIRA 31",
			"zipCode": "60122",
			"city": "ANCONA",
			"province": "AN",
			"country": "IT"
		},
		"documentType": "newTitle",
		"expectedDeliveryDate": "2025-01-09",
		"deliveryMode": "standard"
	},
	"items": [
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 3,
			"discount": 20.00,
			"paymentTerm": "83",
			"notes": "prova",
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 3,
			"discount": 20.00,
			"paymentTerm": "83",
			"notes": "prova",
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 3,
			"discount": 20.00,
			"paymentTerm": "83",
			"notes": "prova",
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		},
		{
			"title": {
				"ean": "9788874967858",
				"title": "MAI PIU PAURA DELLA FISICA",
				"author": "FILOCAMO GIOVANNI",
				"publisher": "KOWALSKI - IF IDEA ED. FELTRIN",
				"vendor": {
					"code": "285",
					"description": "KOWALSKI - IF IDEA ED. FELTRIN"
				}
			},
			"location": {
				"plant": {
					"code": "ME60",
					"description": "MESSAGGERIE LIBRI"
				},
				"storage": {
					"code": "11",
					"description": "Principale"
				},
				"batch": "LIBERO"
			},
			"quantity": 1,
			"acquired": true,
			"validated": "toBeSent",
			"reservedQuantity": 0,
			"bookedQuantity": 0,
			"notProcessedQuantity": 0,
			"priority": false
		}
	],
	"acquired": false,
	"validated": "toBeSent",
	"summary": {
		"items": 13,
		"acquired": 0,
		"refused": 13,
		"toBeSent": 0,
		"valid": 0,
		"notValid": 0,
		"quantity": 19,
		"refusedQuantity": 19,
		"notValidQuantity": 0
	},
	"errors": [
		{
			"propertyName": "Header.CustomerStatusCode",
			"propertyValue": "0000173800",
			"propertyDescription": "Destinatario sospeso",
			"errorCode": "Header.CustomerStatusCode",
			"errorMessage": "'Customer Code' value '0000173800' not found."
		}
	],
	"canResubmit": true,
	"archived": false
}

Features

Per utilizzare il metodo API è necessario possedere una o più delle seguenti features:

  • order_read

altrimenti viene restituito 403 (Forbidden)

Richiesta modifica riga d'ordine

Consente di inviare una richiesta di modifica su una riga d'ordine

Risponde a richieste POST verso: /ordini/Order/{orderId}/ean/{eanCode}/update, dove {orderId} rappresenta l'Id dell'ordine che si vuole modificare e {eanCode} la riga.

Vanno passati tramite un oggetto JSON i seguenti campi: 

  • NewBookedQuantiity: quantità in prenotazione
  • NewTermsOfPaymentCode: pagamento occasionale
  • NewItemNote: note
  • NewOccasionalDiscountPercentage: sconto occasionale

Controlli di validazione

Il metodo API effettua i seguenti controlli di validazione:

  • OrderID esista e appartiene all'utenza che richiama il metodo di modifica
  • Per EAN modificato non deve esserci due righe d'ordine con lo stesso EAN
  • La riga d'ordine deve essere stata acquisita correttamente
  • Per l'OrderID EAN modificato non deve esserci nessuna modifica in stato PENDING
  • Deve esserci almeno uno dei 4 campi NEW valorizzato
  • Deve esserci almeno uno dei 4 campi NEW differente da quanto già presente a DB
  • Se NewBookedQuantity è diverso da NULL deve essere : >=0
  • Se viene valorizzato NewOccasionalDiscountPercentage deve essere >= 0 & < 100

 

L'API può restituire i seguenti codici di errore:

  • 400 (Bad Request): query malformata.
  • 401 (Unauthorized): il token di autenticazione non è valido oppure è scaduto.

 

Esempio richiesta

Il seguente esempio invia 2 ordini i quali contengono, rispettivamente, 3 e 2 titoli:

POST https://api.messaggerielibri.it/ordini/Order/27917/ean/9788832700415/update HTTP/1.1
Authorization: Bearer [TOKEN JWT]

 

Esempio body richiesta

{
	"NewBookedQuantity": 5,
	"NewTermsOfPaymentCode": 21,
	"NewItemNote": "note nuove",
	"NewOccasionalDiscountPercentage": 35	
}

Esempio risposta

Se l’esecuzione è terminata con successo, l’API restituisce un numero progressivo che identifica l’operazione effettuata:

123

 

Features

Per utilizzare il metodo API è necessario possedere una o più delle seguenti features:

  • order_add

altrimenti viene restituito 403 (Forbidden)

Ricerca richieste modifica ordine

Consente di effettuare una ricerca sulle richieste di modifica ordine presenti a sistema

Risponde a richieste POST verso /ordini/OrderChangeRequest

Per identificare effettuare una ricerca viene richiesto un oggetto JSON contenente i seguenti campi opzionali:

  • requestChangeIds: lista degli ID delle richieste di modifica.
  • orderLines: lista di oggetti contenenti i seguenti campi:
    • orderId: ID dell'ordine
    • eanCode: codice EAN della riga ordine
  • orderBy: campo su cui effettuare l'ordinamento. Può assumere uno dei seguenti valori:
    • changeId
    • orderId
    • rowNumber
    • ean
    • status
    • reason
  • orderDirection: direzione dell'ordinamento. Può assumere il valore asc per l'ordinamento crescente o il valore desc per l'ordinamento decrescente.
  • pageSize: numero massimo di risultati restituiti da una chiamata. Se non specificato, saranno restituiti al massimo 50 risultati.
  • pageIndex: numero di pagina dei risultati da restituire. Se non specificato, è restituita la prima pagina.

Controlli di validazione

Il metodo API effettua i seguenti controlli di validazione:

  • deve essere indicato o una lista di requestChangeIds oppure l'oggetto orderLines contenente una lista di orderId - eanCode


L'API può restituire i seguenti codici di errore:

  • 400 (Bad Request): query malformata.
  • 401 (Unauthorized)il token di autenticazione non è valido oppure è scaduto.

 

L’operazione restituisce un oggetto JSON contenente i seguenti campi: 

  • totalCount: numero totale di richieste di modifica ordine trovati.
  • totalPages: numero totale di pagine previste.
  • page: informazioni sulla pagina corrente:
    • index: indice della pagine corrente.
    • size: dimensione della pagina.
    • from: indice del primo elemento della pagina (se la pagina ha elementi)
    • to: indice dell’ultimo elemento della pagina (se la pagina ha elementi)
  • rows: elenco di richieste di modifica ordine. Contiene:
    • requestChangeId: Id della richiesta di modifica.
    • orderId: Id dell'ordine.
    • rowNumber: Numero di riga dell'ordine.
    • eanCode: Codice EAN della riga ordine.
    • bookedQuantity: Quantità in prenotazione.
    • occasionalDiscountPercentage: Percentuale di sconto occasionale.
    • termsOfPaymentCode: Codice termini di pagamento.
    • itemNote: Nota associata alla riga ordine.
    • newBookedQuantity: Nuova quantità prenotata
    • newOccasionalDiscountPercentage: Nuova percentuale di sconto occasionale.
    • newTermsOfPaymentCode: Nuovo codice termini di pagamento.
    • newItemNote: Nuova nota per la riga ordine.
    • updatedDate: Data di ultimo aggiornamento della richiesta di modifica.
    • status: Stato della richiesta di modifica.
    • sapChangeDate: Data di modifica su SAP.
    • sapReasonNotChange: Motivazione SAP per cui la modifica non è stata applicata.

 

Esempio richiesta

POST https://api.messaggerielibri.it/ordini/OrderChangeRequest
Authorization: Bearer [TOKEN JWT]

Body (I Esempio):
{
	"RequestChangeIds" : [130, 134, 135]
}

Body (II Esempio):
{
	"OrderLines" : [
		{
	   	"OrderId": 27960,
		  "EanCode": "9788838925993"
		},
		{
			"OrderId": 27959,
			"Eancode": "9788838925993"
		}
	]
}

Esempio risposta

Se la richiesta va a buon fine si ottiene in output una lista contente le informazioni principali sugli ordini trovati:

{
	"totalCount": 2,
	"totalPages": 1,
	"page": {
		"index": 1,
		"size": 20,
		"from": 1,
		"to": 2
	},
	"rows": [
		{
			"requestChangeId": 134,
			"orderId": 27959,
			"rowNumber": 1,
			"eanCode": "9788838925993",
			"itemNote": "ALTRI CASI PER IL COMMISSARIO MONTALBANO",
			"newBookedQuantity": 10,
			"newOccasionalDiscountPercentage": 35.00,
			"newTermsOfPaymentCode": "21",
			"newItemNote": "note nuove",
			"updatedDate": "2025-09-10T14:55:54.5733333",
			"status": "Pending"
		},
		{
			"requestChangeId": 135,
			"orderId": 27960,
			"rowNumber": 1,
			"eanCode": "9788838925993",
			"bookedQuantity": 1,
			"itemNote": "ALTRI CASI PER IL COMMISSARIO MONTALBANO",
			"newBookedQuantity": 10,
			"newOccasionalDiscountPercentage": 35.00,
			"newTermsOfPaymentCode": "21",
			"newItemNote": "note nuove",
			"updatedDate": "2025-09-10T16:29:43.19",
			"status": "Pending"
		}
	]
}

Features

Per utilizzare il metodo API è necessario possedere una o più delle seguenti features:

  • order_read

altrimenti viene restituito 403 (Forbidden)

Consultazione condizioni di vendita

Consente di consultare le condizioni di vendita

Risponde a richieste POST verso /ordini/SalesConditions

Per identificare effettuare una ricerca viene richiesto un oggetto JSON contenente i seguenti campi obbligatori:

  • CustomerCode: codice cliente
  • DocumentType: tipo di ordine
  • Eans: lista di EAN

Controlli di validazione

Il metodo API effettua i seguenti controlli di validazione:

  • deve essere indicato almeno un EAN, massimo 100
  • codici EAN congruenti all'utenza chiamante
  • codice cliente obbligatorio
  • tipo di ordine obbligatorio e appartenente alla seguente lista:
    • restock (Rifornimento),
    • newTitle (Novità),
    • campaign (Campagna),
    • deposit (Deposito),
    • freeOrder (Omaggi),
    • specialOrder (Ordini Speciali),
    • specialOrderE (Ordini Speciali E),
    • publisherOffice (Reso ufficio editore),
    • rifoVendorStock (Rifo Magedi Scorta)


L'API può restituire i seguenti codici di errore:

  • 400 (Bad Request): query malformata.
  • 401 (Unauthorized)il token di autenticazione non è valido oppure è scaduto.
  • 404 (Not Found): non sono stati trovate informazioni per i dati indicati.

 

L’operazione restituisce un oggetto JSON contenente i seguenti campi: 

  • ean: codice EAN
  • occasionalDiscountPercentage: percentuale di sconto
  • termsOfPaymentCode: codice termini di pagamento

 

Esempio richiesta

POST https://api.messaggerielibri.it/ordini/SalesConditions
Authorization: Bearer [TOKEN JWT]

Body di esempio:

{
	"CustomerCode": "0000021500",
	"Eans": ["9788807880414", "9788838925993"],
	"DocumentType": "NewTitle"
}

Esempio risposta

Se la richiesta va a buon fine si ottiene in output una lista contente le condizioni di vendita:

[
	{
		"ean": "9788807880414",
		"occasionalDiscountPercentage": 0.0,
		"termsOfPaymentCode": "6"
	},
	{
		"ean": "9788838925993",
		"occasionalDiscountPercentage": 0.0,
		"termsOfPaymentCode": "6"
	}
]

Features

Per utilizzare il metodo API è necessario possedere una o più delle seguenti features:

  • sales_condition_read

altrimenti viene restituito 403 (Forbidden)