1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-14 07:02:34 +01:00
invoiceninja/app/Services/Invoice/EInvoice/FatturaPA.php

150 lines
4.6 KiB
PHP
Raw Normal View History

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
*/
namespace App\Services\Invoice\EInvoice;
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
}
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();