2023-04-21 09:24:56 +02:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Invoice Ninja (https://invoiceninja.com).
|
|
|
|
*
|
|
|
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
|
|
|
*
|
|
|
|
* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
|
|
|
|
*
|
|
|
|
* @license https://www.elastic.co/licensing/elastic-license
|
|
|
|
*/
|
|
|
|
|
2024-03-20 12:54:18 +01:00
|
|
|
namespace App\Services\EDocument\Standards;
|
2023-04-21 09:24:56 +02:00
|
|
|
|
|
|
|
use App\Models\Invoice;
|
|
|
|
use App\Services\AbstractService;
|
2023-10-26 04:57:44 +02:00
|
|
|
use SimpleXMLElement;
|
|
|
|
|
2023-04-21 09:24:56 +02:00
|
|
|
/*
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
<FatturaElettronica versione="FPR12" xmlns="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2">
|
|
|
|
<FatturaElettronicaHeader>
|
|
|
|
<DatiTrasmissione>
|
|
|
|
<IdTrasmittente>
|
|
|
|
<IdPaese>IT</IdPaese>
|
|
|
|
<IdCodice>01234567890</IdCodice>
|
|
|
|
</IdTrasmittente>
|
|
|
|
<ProgressivoInvio>00001</ProgressivoInvio>
|
|
|
|
<FormatoTrasmissione>FPR12</FormatoTrasmissione>
|
|
|
|
<CodiceDestinatario>ABCDE1</CodiceDestinatario>
|
|
|
|
</DatiTrasmissione>
|
|
|
|
<CedentePrestatore>
|
|
|
|
<!-- Company information of the sender (seller/provider) -->
|
|
|
|
</CedentePrestatore>
|
|
|
|
<CessionarioCommittente>
|
|
|
|
<!-- Company information of the receiver (buyer) -->
|
|
|
|
</CessionarioCommittente>
|
|
|
|
</FatturaElettronicaHeader>
|
|
|
|
<FatturaElettronicaBody>
|
|
|
|
<DatiGenerali>
|
|
|
|
<DatiGeneraliDocumento>
|
|
|
|
<TipoDocumento>TD01</TipoDocumento>
|
|
|
|
<Divisa>EUR</Divisa>
|
|
|
|
<Data>2023-04-21</Data>
|
|
|
|
<Numero>1</Numero>
|
|
|
|
<!-- Add other information as needed -->
|
|
|
|
</DatiGeneraliDocumento>
|
|
|
|
<!-- Add other general data as needed -->
|
|
|
|
</DatiGenerali>
|
|
|
|
<DatiBeniServizi>
|
|
|
|
<!-- List of items or services -->
|
|
|
|
</DatiBeniServizi>
|
|
|
|
<DatiPagamento>
|
|
|
|
<!-- Payment details -->
|
|
|
|
</DatiPagamento>
|
|
|
|
</FatturaElettronicaBody>
|
|
|
|
</FatturaElettronica>
|
|
|
|
*/
|
|
|
|
|
|
|
|
class FatturaPA extends AbstractService
|
|
|
|
{
|
|
|
|
private $xml;
|
|
|
|
|
|
|
|
public function __construct(public Invoice $invoice)
|
|
|
|
{
|
|
|
|
$this->xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><FatturaElettronica></FatturaElettronica>');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function run()
|
|
|
|
{
|
2023-04-21 09:30:12 +02:00
|
|
|
return $this->addHeader()->getXml();
|
2023-04-21 09:24:56 +02:00
|
|
|
}
|
2024-01-14 05:05:00 +01:00
|
|
|
|
2023-10-26 04:57:44 +02:00
|
|
|
public function addHeader()
|
|
|
|
{
|
2023-04-21 09:24:56 +02:00
|
|
|
$this->xml->addChild('FatturaElettronicaHeader');
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2023-10-26 04:57:44 +02:00
|
|
|
public function addTrasmissioneData($idPaese, $idCodice, $progressivoInvio, $formatoTrasmissione, $codiceDestinatario)
|
|
|
|
{
|
2023-04-21 09:24:56 +02:00
|
|
|
$datiTrasmissione = $this->xml->FatturaElettronicaHeader->addChild('DatiTrasmissione');
|
|
|
|
$idTrasmittente = $datiTrasmissione->addChild('IdTrasmittente');
|
|
|
|
$idTrasmittente->addChild('IdPaese', $idPaese);
|
|
|
|
$idTrasmittente->addChild('IdCodice', $idCodice);
|
|
|
|
$datiTrasmissione->addChild('ProgressivoInvio', $progressivoInvio);
|
|
|
|
$datiTrasmissione->addChild('FormatoTrasmissione', $formatoTrasmissione);
|
|
|
|
$datiTrasmissione->addChild('CodiceDestinatario', $codiceDestinatario);
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2023-10-26 04:57:44 +02:00
|
|
|
public function addCedentePrestatore($data)
|
|
|
|
{
|
2023-04-21 09:24:56 +02:00
|
|
|
// Add CedentePrestatore data
|
|
|
|
}
|
|
|
|
|
2023-10-26 04:57:44 +02:00
|
|
|
public function addCessionarioCommittente($data)
|
|
|
|
{
|
2023-04-21 09:24:56 +02:00
|
|
|
// Add CessionarioCommittente data
|
|
|
|
}
|
|
|
|
|
2023-10-26 04:57:44 +02:00
|
|
|
public function addBody()
|
|
|
|
{
|
2023-04-21 09:24:56 +02:00
|
|
|
$this->xml->addChild('FatturaElettronicaBody');
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2023-10-26 04:57:44 +02:00
|
|
|
public function addDatiGenerali($data)
|
|
|
|
{
|
2023-04-21 09:24:56 +02:00
|
|
|
// Add DatiGenerali data
|
|
|
|
}
|
|
|
|
|
2023-10-26 04:57:44 +02:00
|
|
|
public function addLineItem($data)
|
|
|
|
{
|
2023-04-21 09:24:56 +02:00
|
|
|
if (!isset($this->xml->FatturaElettronicaBody->DatiBeniServizi)) {
|
|
|
|
$this->xml->FatturaElettronicaBody->addChild('DatiBeniServizi');
|
|
|
|
}
|
|
|
|
$lineItem = $this->xml->FatturaElettronicaBody->DatiBeniServizi->addChild('DettaglioLinee');
|
|
|
|
$lineItem->addChild('NumeroLinea', $data['NumeroLinea']);
|
2023-04-21 09:30:12 +02:00
|
|
|
$lineItem->addChild('Descrizione', $data['notes']);
|
|
|
|
$lineItem->addChild('Quantita', $data['quantity']);
|
|
|
|
$lineItem->addChild('PrezzoUnitario', $data['cost']);
|
|
|
|
$lineItem->addChild('PrezzoTotale', $data['line_total']);
|
|
|
|
$lineItem->addChild('AliquotaIVA', $data['tax_rate1']);
|
2023-04-21 09:24:56 +02:00
|
|
|
|
|
|
|
if (isset($data['UnitaMisura'])) {
|
|
|
|
$lineItem->addChild('UnitaMisura', $data['UnitaMisura']);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
2023-10-26 04:57:44 +02:00
|
|
|
public function addDatiPagamento($data)
|
|
|
|
{
|
2023-04-21 09:24:56 +02:00
|
|
|
// Add DatiPagamento data
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function getXml()
|
|
|
|
{
|
|
|
|
return $this->xml->asXML();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// $fattura = new FatturaPA();
|
|
|
|
// $fattura
|
|
|
|
// ->addHeader()
|
|
|
|
// ->addTrasmissioneData('IT', '01234567890', '00001', 'FPR12', 'ABCDE1');
|
|
|
|
|
|
|
|
// echo $fattura->getXml();
|