deved-it / fattura-elettronica

Fatturazione Elettronica Italiana
https://deved-it.github.io/fattura-elettronica
MIT License
78 stars 36 forks source link

Possibilità di formattare i valori numerici a più di 2 decimali #49

Closed ghost closed 3 years ago

ghost commented 5 years ago

Ciao. Su alcune fatture, a volte, é necessario specificare il valore numerico con più di 2 decimali dopo la virgola.

salgua commented 5 years ago

Ciao, effettivamente va implementata. Metto in coda lavori.

diegottt commented 3 years ago

Per la maggior parte dei casi, basterebbe aumentare il numero dei decimali a 3. O parametrizzare questo valore da qualche parte. Io ho fatto semplicemente questa modifica sul file src/FatturaElettronica/FatturaElettronicaBody/DatiBeniServizi/Linea.php

In tutti gli altri posti va tenuta la formattazione a 2 decimali...mentre su quantità, prezzounitario e totaleprezzo può arrivare a 8 decimali.

/**
 * @param \XMLWriter $writer
 * @return \XMLWriter
 */
public function toXmlBlock(\XMLWriter $writer)
{
    $writer->startElement('DettaglioLinee');
    $writer->writeElement('NumeroLinea', $this->numeroLinea);
    if ($this->codiceArticolo) {
        $writer->startElement('CodiceArticolo');
            $writer->writeElement('CodiceTipo', $this->codiceTipo);
            $writer->writeElement('CodiceValore', $this->codiceArticolo);
        $writer->endElement();
    }
    $writer->writeElement('Descrizione', $this->descrizione);
    if ($this->quantita) {
        $writer->writeElement('Quantita', fe_number_format($this->quantita, 3)); //numero decimali 3 per errore calcolo
        $writer->writeElement('UnitaMisura', $this->unitaMisura);
    }
    $this->writeXmlField('DataInizioPeriodo', $writer);
    $this->writeXmlField('DataFinePeriodo', $writer);
    $writer->writeElement('PrezzoUnitario', fe_number_format($this->prezzoUnitario, 3)); //numero decimali 3 per errore calcolo
    $writer->writeElement('PrezzoTotale', $this->prezzoTotale());
    $writer->writeElement('AliquotaIVA', fe_number_format($this->aliquotaIva, 2));
    $this->writeXmlFields($writer);
    $writer->endElement();
    return $writer;
}

/**
 * Calcola e restituisce il prezzo totale della linea
 *
 * @param bool $format
 * @return string | float
 */
public function prezzoTotale($format = true)
{
    $quantita = $this->quantita ? $this->quantita : 1;
    if ($format) {
        return fe_number_format($this->prezzoUnitario * $quantita, 3); //numero decimali 3 per errore calcolo
    }
    return $this->prezzoUnitario * $quantita;
}
danielebuso commented 3 years ago

@salgua ho aperto una pull request per aggiungere la possibilità di specificare un numero personalizzato di decimali