GDXP

<?xml version="1.0" encoding="UTF-8"?>
<!--
Gas Data eXchange Protocol
-->
<!--
Tag: gdxp
Descrizione: root
Attributi:
- protocolVersion: versione del protocollo
- creationDate: timestamp di creazione del file con precisione fino al secondo con formato YYYYMMDDHHmmss
- applicationSignature: firma dell'applicazione che ha creato il file
Figli: supplier
-->
<!ELEMENT gdxp supplier*>
<!ATTLIST gdxp protocolVersion CDATA #REQUIRED>
<!ATTLIST gdxp creationDate CDATA #REQUIRED>
<!ATTLIST gdxp applicationSignature CDATA #REQUIRED>
<!--
Tag: supplier
Descrizione: contiene i dati di anagrafica, prodotti/listini e
ordini aperti per il singolo fornitore
Figli: taxCode, vatNumber, name, address, contacts, note, products, orders, extraFields
-->
<!ELEMENT supplier (taxCode, vatNumber, name, address, contacts, note, products, orders, extraFields?)>
<!--
Tag: taxCode
Descrizione: Codice fiscale
-->
<!ELEMENT taxCode (#CDATA)>
<!--
Tag: vatNumber
Descrizione: Partita IVA
-->
<!ELEMENT vatNumber (#CDATA)>
<!--
Tag: name
Descrizione: Nome/Ragione sociale del fornitore
-->
<!ELEMENT name (#CDATA)>
<!--
Tag: address
Descrizione: indirizzo del fornitore
Figli: street, locality, zipCode, country
-->
<!ELEMENT address (street, locality, zipCode, country)>
<!--
Tag: street
Descrizione: via e numero civico
-->
<!ELEMENT street (#CDATA)>
<!--
Tag: locality
Descrizione: località/paese/città
-->
<!ELEMENT locality (#CDATA)>
<!--
Tag: zipCode
Descrizione: codice postale
-->
<!ELEMENT zipCode (#CDATA)>
<!--
Tag: country
Descrizione: nazione
-->
<!ELEMENT country (#CDATA)>
<!--
Tag: contacts
Descrizione: contiene la lista dei contatti per quel fornitore
Figli: contact
-->
<!ELEMENT contacts (contact*)>
<!--
Tag: contact
Descrizione: contatto/riferimento del fornitore
Figli: primary, extraContact
-->
<!ELEMENT contact (primary, extraContact*)>
<!--
Tag: primary
Descrizione: contatto principale direttamente legato alla
ragione sociale del fornitore
Figli: phoneNumber, faxNumber, emailAddress, webSite
-->
<!ELEMENT primary (phoneNumber, faxNumber?, emailAddress, webSite?)>
<!--
Tag: phoneNumber
Descrizione: numero telefonico
-->
<!ELEMENT phoneNumber (#CDATA)>
<!--
Tag: faxNumber
Descrizione: numero di fax
-->
<!ELEMENT faxNumber (#CDATA)>
<!--
Tag: emailAddress
Descrizione: indirizzo di posta elettronica
-->
<!ELEMENT emailAddress (#CDATA)>
<!--
Tag: webSite
Descrizione: indirizzo del sito web
-->
<!ELEMENT webSite (#CDATA)>
<!--
Tag: extraContact
Descrizione: contatto per un riferimento del fornitore
Figli: firstName, lastName, phoneNumber, mobileNumber, faxNumber, emailAddress
-->
<!ELEMENT extraContact (firstName, lastName, phoneNumber, mobileNumber, faxNumber?, emailAddress)>
<!--
Tag: firstName
Descrizione: nome
-->
<!ELEMENT firstName (#CDATA)>
<!--
Tag: lastName
Descrizione: cognome
-->
<!ELEMENT lastName (#CDATA)>
<!--
Tag: phoneNumber
Descrizione: numero del telefono fisso
-->
<!ELEMENT phoneNumber (#CDATA)>
<!--
Tag: mobileNumber
Descrizione: numero del telefono cellulare
-->
<!ELEMENT mobileNumber (#CDATA)>
<!--
Tag: faxNumber
Descrizione: numero di fax
-->
<!ELEMENT faxNumber (#CDATA)>
<!--
Tag: emailAddress
Descrizione: indirizzo di posta elettronica
-->
<!ELEMENT emailAddress (#CDATA)>
<!--
Tag: note
Descrizione: Commenti e note (testo libero) relative al fornitore
-->
<!ELEMENT note (#CDATA)>
<!--
Tag: products
Descrizione: lista dei prodotti/listino del fornitore
Figli: product
-->
<!ELEMENT products (product*)>
<!--
Tag: product
Descrizione: singolo prodotto
Figli: sku, name, category, um, description, orderInfo, variants, extraFields
-->
<!ELEMENT product (sku?, name, category, um, description, orderInfo, variants?, extraFields?)>
<!--
Tag: sku
Descrizione: codice prodotto del fornitore
-->
<!ELEMENT sku (#CDATA)>
<!--
Tag: name
Descrizione: descrizione del prodotto
-->
<!ELEMENT name (#CDATA)>
<!--
Tag: category
Descrizione: categoria di cui fa parte il prodotto
-->
<!ELEMENT category (#CDATA)>
<!--
Tag: um
Descrizione: unità di misura
-->
<!ELEMENT um (#CDATA)>
<!--
Tag: description
Descrizione: descrizione estesa del prodotto
-->
<!ELEMENT description (#CDATA)>
<!--
Tag: orderInfo
Descrizione: informazioni relative al prodotto relative agli ordini
Figli: packageQty, minQty, mulQty, maxQty, umPrice, shippingCost
-->
<!ELEMENT orderInfo (packageQty?, minQty?, mulQty?, maxQty?, umPrice, shippingCost?)>
<!--
Tag: packageQty
Descrizione: quantità per confezione
-->
<!ELEMENT packageQty (#CDATA)>
<!--
Tag: minQty
Descrizione: quantità minima ordinabile
-->
<!ELEMENT minQty (#CDATA)>
<!--
Tag: mulQty
Descrizione: quantità multipla di ordine
-->
<!ELEMENT mulQty (#CDATA)>
<!--
Tag: maxQty
Descrizione: quantità massima totale ordinabile
-->
<!ELEMENT maxQty (#CDATA)>
<!--
Tag: umPrice
Descrizione: prezzo per unità di misura
-->
<!ELEMENT umPrice (#CDATA)>
<!--
Tag: shippingCost
Descrizione: costo di trasporto per unità di misura
-->
<!ELEMENT shippingCost (#CDATA)>
<!--
Tag: variants
Descrizione: lista delle varianti
Figli: variant
-->
<!ELEMENT variants (variant)>
<!--
Tag: variant
Descrizione: rapprensenta la singola variante per il prodorro
Attributi:
- name: nome della variante
Figli: value
-->
<!ELEMENT variant (value+)>
<!ATTLIST variant name CDATA #REQUIRED>
<!--
Tag: value
Descrizione: singolo valore che può assumere la variante
-->
<!ELEMENT value (#CDATA)>
<!--
Tag: extraFields
Descrizione: lista dei campi non direttamente previsti dal protocollo
Figli: extraField
-->
<!ELEMENT extraFields (extraField)>
<!--
Tag: extraField
Descrizione: campo non previsto dal protocollo
Attributi:
- name: il nome del campo
-->
<!ELEMENT extraField (#CDATA)>
<!ATTLIST extraField name CDATA #REQUIRED>
<!--
Tag: orders
Descrizione: lista degli ordini
Figli: order
-->
<!ELEMENT orders (order*)>
<!--
Tag: order
Descrizione: dati relativi al singolo ordine
Figli: openDate, closeDate, deliveryDate, extraFields
-->
<!ELEMENT order (openDate, closeDate, deliveryDate?, extraFields?)>
<!--
Tag: openDate
Descrizione: data di apertura dell'ordine
-->
<!ELEMENT openDate (#CDATA)>
<!--
Tag: closeDate
Descrizione: data di chiusura dell'ordine
-->
<!ELEMENT closeDate (#CDATA)>
<!--
Tag: deliveryDate
Descrizione: data prevista di consegna
-->
<!ELEMENT deliveryDate (#CDATA)>
<!--
Tag: extraFields
Descrizione: lista dei campi non direttamente previsti dal protocollo
Figli: extraField
-->
<!ELEMENT extraFields (extraField)>
<!--
Tag: extraField
Descrizione: campo non previsto dal protocollo
Attributi:
- name: il nome del campo
-->
<!ELEMENT extraField (#CDATA)>
<!ATTLIST extraField name CDATA #REQUIRED>
<!--
Tag: extraFields
Descrizione: lista dei campi non direttamente previsti dal protocollo
Figli: extraField
-->
<!ELEMENT extraFields (extraField)>
<!--
Tag: extraField
Descrizione: campo non previsto dal protocollo
Attributi:
- name: il nome del campo
-->
<!ELEMENT extraField (#CDATA)>
<!ATTLIST extraField name CDATA #REQUIRED>

Dallo schema:

SCHEMA

si evince che:

il gdxp rappresenta un ordine o un listino, a seconda che sia presente un elemento ordine.

Struttura

Supplier

id

name [name]

seat_id [address]

vat_number [EXTRAFIELD]

ssn [taxCode]

website [EXTRAFIELD]

frontman_id [EXTRAFIELD]

flavour [EXTRAFIELD]

n_employers [EXTRAFIELD]

logo [EXTRAFIELD]

iban [EXTRAFIELD]

description [note]

base place –> [ADDRESS]

SERVIRANNO DEGLI EXTRAFIELDS

id

name ???

description ???

address [street]

zipcode [zipcode]

city ???

province ???

lon ???

lat ???

contatto –> [PRIMARY] [EXTRAFIELDS]

id

flavour –> tipo, da usare per decidere se inserire il value in [phone],[fax] ecc

value

is_preferred

description

Qui andrebbe cambiata la struttura. Piuttosto che: * contacts * primary [phone,fax,email,web] * extra* [first_name, last_name, phone, mobile, fax, email] Sarebbe meglio: * contacts * primary*(flvour, value, description) –> quello preferito per il flavour * extra* (first_name, last_name, phone, mobile, fax, email) –> per mantenere la compatibilità

supplier product –> anagrafica prodotto [PRODUCTS]* –> [PRODUCT]

id

code [EXTRAFIELD]

producer_id

category_id [category]

mu_id [um]

pu_id [EXTRAFIELD]

muppu [EXTRAFIELD]

muppu_is_variable [EXTRAFIELD]

vat_percent [EXTRAFIELD]

name [name]

description [description]

deleted [EXTRAFIELD]

supplier stock –> prodotto ordinabile

id

supplier_id –> supplier

product_id –> anagrafica del prodotto

supplier_category_id [VARIANT]

image [VARIANT]

price [ORDERINFO][umprice]

code [PRODUCT][sku]

amount_available [ORDERINFO][max quantity]

units_minimum_amount [VARIANT]

units_per_box [VARIANT]

detail_minimum_amount [VARIANT]

detail_step [VARIANT]

delivery_notes [VARIANT]

deleted [VARIANT]

)

gas supplier stock –> prodotto ordinabile all'interno di un patto supplier - gas

id

pact_id

stock_id

enabled [VARIANT]

minimum_amount [ORDERINFO][minimum quantity]

step

gas supplier order product –> ordine di un prodotto all'interno di un patto

id

order_id

gasstock_id

maximum_amount [ORDERINFO][max quantity]

initial_price [VARIANT]

order_price [VARIANT]

delivered_price [VARIANT]

delivered_amount[ORDERINFO][PackageQuantity]

gas supplier order –> ordine dei gasisti su un patto supplier - gas [ORDERS]* –> [ORDER]

id

pact_id

datetime_start [opendate]

datetime_end [closedate]

order_minimum_amount [EXTRAFIELD]

delivery_id

withdrawal_id

delivery_cost [EXTRAFIELD]

referrer_person_id

delivery_referrer_person_id

withdrawal_referrer_person_id

group_id

invoice_amount [EXTRAFIELD]

invoice_note [EXTRAFIELD]

root_plan_id

delivery

id

place_id

date [ORDER][deliveryDate]