mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-09-20 08:21:34 +02:00
Merge branch 'invoiceninja:v5-develop' into v5-develop
This commit is contained in:
commit
ccd165e05f
@ -1 +1 @@
|
||||
5.8.54
|
||||
5.8.57
|
@ -30,7 +30,7 @@ class RevenueTrack extends GenericMixedMetric
|
||||
* The name of the counter.
|
||||
* @var string
|
||||
*/
|
||||
public $name = 'app.revenue';
|
||||
public $name = 'app.cac';
|
||||
|
||||
/**
|
||||
* The datetime of the counter measurement.
|
||||
@ -59,14 +59,14 @@ class RevenueTrack extends GenericMixedMetric
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $string_metric7 = 'product';
|
||||
public $string_metric7 = 'plan';
|
||||
|
||||
/**
|
||||
* Gateway Reference
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $string_metric8 = 'gateway_reference';
|
||||
public $string_metric8 = 'plan_term';
|
||||
|
||||
public $string_metric9 = 'entity_reference';
|
||||
|
||||
|
@ -13,25 +13,19 @@ namespace App\DataMapper\EDoc;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\DatiContratto;
|
||||
use App\DataMapper\EDoc\FatturaPA\DatiRicezione;
|
||||
use App\DataMapper\EDoc\FatturaPA\DatiOrdineAcquisto;
|
||||
use App\DataMapper\EDoc\FatturaPA\DatiAnagraficiVettore;
|
||||
use App\DataMapper\EDoc\FatturaPA\FatturaElettronicaHeader;
|
||||
use App\DataMapper\EDoc\FatturaPA\FatturaElettronicaBody;
|
||||
|
||||
|
||||
// minimum required fields
|
||||
// public string $RegimeFiscale = 'RF01',
|
||||
// public string $TipoDocumento = 'TD01',
|
||||
// public string $ModalitaPagamento = 'MP01',
|
||||
// public string $CondizioniPagamento = 'TP02',
|
||||
|
||||
class FatturaPA extends Data
|
||||
{
|
||||
public DatiRicezione|Optional $DatiRicezione;
|
||||
public DatiContratto|Optional $DatiContratto;
|
||||
public DatiOrdineAcquisto|Optional $DatiOrdineAcquisto;
|
||||
public DatiAnagraficiVettore|Optional $DatiAnagraficiVettore;
|
||||
|
||||
public function __construct(
|
||||
public string $RegimeFiscale = 'RF01',
|
||||
public string $TipoDocumento = 'TD01',
|
||||
public string $ModalitaPagamento = 'MP01',
|
||||
public string $CondizioniPagamento = 'TP02',
|
||||
) {
|
||||
}
|
||||
public FatturaElettronicaHeader $FatturaElettronicaHeader;
|
||||
public FatturaElettronicaBody $FatturaElettronicaBody;
|
||||
|
||||
}
|
||||
|
40
app/DataMapper/EDoc/FatturaPA/Allegati.php
Normal file
40
app/DataMapper/EDoc/FatturaPA/Allegati.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\DatiVeicoli;
|
||||
use App\DataMapper\EDoc\FatturaPA\Body\DatiGenerali;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
|
||||
class Allegati extends Data
|
||||
{
|
||||
//string 60
|
||||
#[Max(60)]
|
||||
public string $NomeAttachment;
|
||||
|
||||
//base64 binary
|
||||
public mixed $Attachment;
|
||||
|
||||
//string 10
|
||||
#[Max(10)]
|
||||
public string|Optional $AlgoritmoCompressione;
|
||||
|
||||
//string 10
|
||||
#[Max(10)]
|
||||
public string|Optional $FormatoAttachment;
|
||||
|
||||
//string 100
|
||||
#[Max(100)]
|
||||
public string|Optional $DescrizioneAttachment;
|
||||
}
|
42
app/DataMapper/EDoc/FatturaPA/AltriDatiGestionali.php
Normal file
42
app/DataMapper/EDoc/FatturaPA/AltriDatiGestionali.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class AltriDatiGestionali extends Data
|
||||
{
|
||||
//string 10
|
||||
#[Max(10)]
|
||||
public string $TipoDato;
|
||||
|
||||
//String60LatinType
|
||||
#[Max(60)]
|
||||
public string|Optional $RiferimentoTesto;
|
||||
|
||||
//Amount8DecimalType
|
||||
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2,8}$/')]
|
||||
public float|Optional $RiferimentoNumero;
|
||||
|
||||
//date
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public Carbon|Optional $RiferimentoData;
|
||||
}
|
||||
|
||||
|
||||
|
35
app/DataMapper/EDoc/FatturaPA/Anagrafica.php
Normal file
35
app/DataMapper/EDoc/FatturaPA/Anagrafica.php
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
class Anagrafica extends Data
|
||||
{
|
||||
//choice
|
||||
|
||||
//either Deminominazione OR
|
||||
//string length 80
|
||||
#[Max(80)]
|
||||
public string $Denominazione = '';
|
||||
|
||||
////////////////////////////////////////////
|
||||
//2. Nome AND CogNome
|
||||
//string length 60
|
||||
#[Max(60)]
|
||||
public string $Nome = '';
|
||||
|
||||
//string length 60
|
||||
#[Max(60)]
|
||||
public string $CogNome = '';
|
||||
}
|
30
app/DataMapper/EDoc/FatturaPA/Body/DatiBollo.php
Normal file
30
app/DataMapper/EDoc/FatturaPA/Body/DatiBollo.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Body;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\Validation\Size;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
|
||||
class DatiBollo extends Data
|
||||
{
|
||||
|
||||
//SI
|
||||
#[Size(2)]
|
||||
public string $BolloVirtuale = 'SI';
|
||||
|
||||
//Amount2DecimalType
|
||||
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
|
||||
public float|Optional $ImportoBollo;
|
||||
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Body;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\Validation\Size;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
|
||||
class DatiCassaPrevidenziale extends Data
|
||||
{
|
||||
//string 4char options
|
||||
#[Size(4)]
|
||||
public string $TipoCassa;
|
||||
|
||||
//rate type 0-100
|
||||
#[Regex('/^[0-9]{1,3}\.[0-9]{2}$/')]
|
||||
public float $AlCassa = 0;
|
||||
|
||||
//Amount2DecimalType
|
||||
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
|
||||
public float $ImportoContributoCassa;
|
||||
|
||||
//rate type 0-100
|
||||
#[Regex('/^[0-9]{1,3}\.[0-9]{2}$/')]
|
||||
public float $AliquotaIVA;
|
||||
|
||||
//Amount2DecimalType
|
||||
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
|
||||
public float|Optional $ImponibileCassa;
|
||||
|
||||
//string string options
|
||||
#[Size(4)]
|
||||
public string|Optional $Ritenuta;
|
||||
|
||||
//string 2char options
|
||||
public string|Optional $Natura;
|
||||
|
||||
//String20Type
|
||||
#[Max(20)]
|
||||
public string|Optional $RiferimentoAmministrazione;
|
||||
|
||||
}
|
38
app/DataMapper/EDoc/FatturaPA/Body/DatiGenerali.php
Normal file
38
app/DataMapper/EDoc/FatturaPA/Body/DatiGenerali.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Body;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\DatiTrasporto;
|
||||
use App\DataMapper\EDoc\FatturaPA\Generics\DatiDDT;
|
||||
use App\DataMapper\EDoc\FatturaPA\Generics\DatiSAL;
|
||||
use App\DataMapper\EDoc\FatturaPA\FatturaPrincipale;
|
||||
use App\DataMapper\EDoc\FatturaPA\Generics\DatiDocumentiCorrelatiType;
|
||||
|
||||
class DatiGenerali extends Data
|
||||
{
|
||||
|
||||
public DatiGeneraliDocumento $DatiGeneraliDocumento;
|
||||
public DatiDocumentiCorrelatiType|Optional $DatiOrdineAcquisto;
|
||||
public DatiDocumentiCorrelatiType|Optional $DatiContratto;
|
||||
public DatiDocumentiCorrelatiType|Optional $DatiConvenzione;
|
||||
public DatiDocumentiCorrelatiType|Optional $DatiRicezione;
|
||||
public DatiDocumentiCorrelatiType|Optional $DatiFattureCollegate;
|
||||
public DatiSAL|Optional $DatiSAL;
|
||||
public DatiDDT|Optional $DatiDDT;
|
||||
public DatiTrasporto|Optional $DatiTrasporto;
|
||||
public FatturaPrincipale|Optional $FatturaPrincipale;
|
||||
|
||||
}
|
||||
|
||||
|
64
app/DataMapper/EDoc/FatturaPA/Body/DatiGeneraliDocumento.php
Normal file
64
app/DataMapper/EDoc/FatturaPA/Body/DatiGeneraliDocumento.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Body;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\Body\DatiBollo;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\Validation\Size;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
use App\DataMapper\EDoc\FatturaPA\Body\DatiRitenuta;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class DatiGeneraliDocumento extends Data
|
||||
{
|
||||
|
||||
//string regex [A-Z]{3}
|
||||
public string $Divisa;
|
||||
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')]
|
||||
public \Illuminate\Support\Carbon $Data;
|
||||
|
||||
//string max 20 char
|
||||
#[Max(20)]
|
||||
public string $Numero;
|
||||
|
||||
public DatiRitenuta|Optional $DatiRitenuta;
|
||||
public DatiBollo|Optional $DatiBollo;
|
||||
public DatiCassaPrevidenziale|Optional $DatiCassaPrevidenziale;
|
||||
public ScontoMaggiorazione|Optional $ScontoMaggiorazione;
|
||||
|
||||
//float 2 decimal type
|
||||
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
|
||||
public float|Optional $ImportoTotaleDocumento;
|
||||
|
||||
//float 2 decimal type
|
||||
|
||||
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
|
||||
public float|Optional $Arrotondamento;
|
||||
|
||||
//string 200char
|
||||
/** @var string[] */
|
||||
public array|Optional $Causale;
|
||||
|
||||
//SI = Documento emesso secondo modalità e termini stabiliti con DM ai sensi dell'art. 73 DPR 633/72
|
||||
//optional 2 char - only value possible = SI
|
||||
#[Size(2)]
|
||||
public string|Optional $Art73;
|
||||
|
||||
//length 4 - optional
|
||||
#[Size(4)]
|
||||
public string $TipoDocumento = 'TD01';
|
||||
|
||||
}
|
70
app/DataMapper/EDoc/FatturaPA/Body/DatiRitenuta.php
Normal file
70
app/DataMapper/EDoc/FatturaPA/Body/DatiRitenuta.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Body;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\Validation\Size;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
|
||||
class DatiRitenuta extends Data
|
||||
{
|
||||
//string 4 char options
|
||||
#[Size(4)]
|
||||
public string $TipoRitenuta;
|
||||
|
||||
//float 2 decimal
|
||||
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
|
||||
public float $ImportoRitenuta;
|
||||
|
||||
// <xs:restriction base="xs:decimal">
|
||||
// <xs:maxInclusive value="100.00" />
|
||||
// <xs:pattern value="/^[0-9]{1,3}\.[0-9]{2}$/" />
|
||||
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
|
||||
public float $AliquotaRitenuta;
|
||||
|
||||
/*
|
||||
<xs:enumeration value="A" />
|
||||
<xs:enumeration value="B" />
|
||||
<xs:enumeration value="C" />
|
||||
<xs:enumeration value="D" />
|
||||
<xs:enumeration value="E" />
|
||||
<xs:enumeration value="G" />
|
||||
<xs:enumeration value="H" />
|
||||
<xs:enumeration value="I" />
|
||||
<xs:enumeration value="L" />
|
||||
<xs:enumeration value="M" />
|
||||
<xs:enumeration value="N" />
|
||||
<xs:enumeration value="O" />
|
||||
<xs:enumeration value="P" />
|
||||
<xs:enumeration value="Q" />
|
||||
<xs:enumeration value="R" />
|
||||
<xs:enumeration value="S" />
|
||||
<xs:enumeration value="T" />
|
||||
<xs:enumeration value="U" />
|
||||
<xs:enumeration value="V" />
|
||||
<xs:enumeration value="W" />
|
||||
<xs:enumeration value="X" />
|
||||
<xs:enumeration value="Y" />
|
||||
<!-- IL CODICE SEGUENTE (Z) NON SARA' PIU' VALIDO PER LE FATTURE EMESSE A PARTIRE DAL PRIMO GENNAIO 2021-->
|
||||
<xs:enumeration value="Z" />
|
||||
<xs:enumeration value="L1" />
|
||||
<xs:enumeration value="M1" />
|
||||
<xs:enumeration value="M2" />
|
||||
<xs:enumeration value="O1" />
|
||||
<xs:enumeration value="V1" />
|
||||
<xs:enumeration value="ZO" />
|
||||
*/
|
||||
#[Max(2)]
|
||||
public string $CausalePagamento;
|
||||
|
||||
}
|
33
app/DataMapper/EDoc/FatturaPA/Body/ScontoMaggiorazione.php
Normal file
33
app/DataMapper/EDoc/FatturaPA/Body/ScontoMaggiorazione.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Body;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\Validation\Size;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
|
||||
class ScontoMaggiorazione extends Data
|
||||
{
|
||||
//string options
|
||||
//SC - Sconto //discount
|
||||
//MG - Maggiorazione //surcharge
|
||||
#[Size(2)]
|
||||
public string $Tipo;
|
||||
//float 0-100
|
||||
#[Regex('/^[0-9]{1,3}\.[0-9]{2}$/')]
|
||||
public float|Optional $Percentuale;
|
||||
|
||||
//Amount8DecimalType
|
||||
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2,8}$/')]
|
||||
public float|Optional $Importo;
|
||||
}
|
22
app/DataMapper/EDoc/FatturaPA/Contatti.php
Normal file
22
app/DataMapper/EDoc/FatturaPA/Contatti.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
|
||||
class Contatti extends Data
|
||||
{
|
||||
public string|Optional $Telefono;
|
||||
public string|Optional $Fax;
|
||||
public string|Optional $Email;
|
||||
}
|
@ -12,17 +12,17 @@
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\Header\IdFiscaleIVA;
|
||||
|
||||
class DatiAnagraficiVettore extends Data
|
||||
{
|
||||
|
||||
public function __construct(
|
||||
public string $IdFiscaleIVA = '',
|
||||
public string $CodiceFiscale = '',
|
||||
public string $Anagrafica = '',
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')]
|
||||
public \DateTime $DataOraConsegna = new \DateTime(),
|
||||
){}
|
||||
public IdFiscaleIVA $IdFiscaleIVA;
|
||||
|
||||
public Anagrafica $Anagrafica;
|
||||
|
||||
public string|Optional $CodiceFiscale;
|
||||
|
||||
//String20Type
|
||||
public string|Optional $NumeroLicenzaGuida;
|
||||
}
|
||||
|
22
app/DataMapper/EDoc/FatturaPA/DatiBeniServizi.php
Normal file
22
app/DataMapper/EDoc/FatturaPA/DatiBeniServizi.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use App\DataMapper\EDoc\FatturaPA\DettaglioLinee;
|
||||
|
||||
class DatiBeniServizi extends Data
|
||||
{
|
||||
public DettaglioLinee $DettaglioLinee;
|
||||
|
||||
public DatiRiepilogo $DatiRiepilogo;
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
class DatiContratto extends Data
|
||||
{
|
||||
public function __construct(
|
||||
public string $RiferimentoNumeroLinea = '',
|
||||
public string $IdDocumento = '',
|
||||
public string $Data = '',
|
||||
public string $NumItem = '',
|
||||
public string $CodiceCommessaConvenzione = '',
|
||||
public string $CodiceCUP = '',
|
||||
public string $CodiceCIG = '',
|
||||
) {
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
class DatiOrdineAcquisto extends Data
|
||||
{
|
||||
public function __construct(
|
||||
public string $RiferimentoNumeroLinea = '',
|
||||
public string $IdDocumento = '',
|
||||
public string $Data = '',
|
||||
public string $NumItem = '',
|
||||
public string $CodiceCommessaConvenzione = '',
|
||||
public string $CodiceCUP = '',
|
||||
public string $CodiceCIG = '',
|
||||
) {
|
||||
}
|
||||
}
|
23
app/DataMapper/EDoc/FatturaPA/DatiPagamento.php
Normal file
23
app/DataMapper/EDoc/FatturaPA/DatiPagamento.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use App\DataMapper\EDoc\FatturaPA\DettaglioPagamento;
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
class DatiPagamento extends Data
|
||||
{
|
||||
//string min4 max4 - optionlist
|
||||
public string $CondizioniPagamento = 'TP02';
|
||||
|
||||
public DettaglioPagamento $DettaglioPagamento;
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
class DatiRicezione extends Data
|
||||
{
|
||||
public function __construct(
|
||||
public string $RiferimentoNumeroLinea = '',
|
||||
public string $IdDocumento = '',
|
||||
public string $Data = '',
|
||||
public string $NumItem = '',
|
||||
public string $CodiceCommessaConvenzione = '',
|
||||
public string $CodiceCUP = '',
|
||||
public string $CodiceCIG = '',
|
||||
) {
|
||||
}
|
||||
}
|
46
app/DataMapper/EDoc/FatturaPA/DatiRiepilogo.php
Normal file
46
app/DataMapper/EDoc/FatturaPA/DatiRiepilogo.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
|
||||
class DatiRiepilogo extends Data
|
||||
{
|
||||
|
||||
//float 0-100.0
|
||||
public float $AliquotaIVA;
|
||||
|
||||
//Amount2DecimalType
|
||||
public float $ImponibileImporto;
|
||||
|
||||
//Amount2DecimalType
|
||||
public float $Imposta;
|
||||
|
||||
//string - options
|
||||
public string|Optional $Natura;
|
||||
|
||||
//Amount2DecimalType
|
||||
public float|Optional $SpeseAccessorie;
|
||||
|
||||
//Amount8DecimalType
|
||||
public float|Optional $Arrotondamento;
|
||||
|
||||
//string options D/I/S
|
||||
public string|Optional $EsigibilitaIVA;
|
||||
|
||||
//String100LatinType
|
||||
public string|Optional $RiferimentoNormativo;
|
||||
|
||||
}
|
||||
|
||||
|
70
app/DataMapper/EDoc/FatturaPA/DatiTrasporto.php
Normal file
70
app/DataMapper/EDoc/FatturaPA/DatiTrasporto.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class DatiTrasporto extends Data
|
||||
{
|
||||
public DatiAnagraficiVettore|Optional $DatiAnagraficiVettore;
|
||||
|
||||
//String80LatinType
|
||||
public string|Optional $MezzoTrasporto;
|
||||
|
||||
//String100LatinType
|
||||
public string|Optional $CausaleTrasporto;
|
||||
|
||||
//int 1-9999
|
||||
public int|Optional $NumeroColli;
|
||||
|
||||
//String100LatinType
|
||||
public string|Optional $Descrizione;
|
||||
|
||||
//String10Type
|
||||
public string|Optional $UnitaMisuraPeso;
|
||||
|
||||
|
||||
//[0-9]{1,4}\.[0-9]{1,2} //decimal
|
||||
public float|Optional $PesoLordo;
|
||||
|
||||
//[0-9]{1,4}\.[0-9]{1,2} //decimal
|
||||
public float|Optional $PesoNetto;
|
||||
|
||||
//dateTime
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')]
|
||||
public Carbon|Optional $DataOraRitiro;
|
||||
//date
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public Carbon|Optional $DataInizioTrasporto;
|
||||
|
||||
//[A-Z]{3}
|
||||
public string|Optional $TipoResa;
|
||||
|
||||
public Sede|Optional $IndirizzoResa;
|
||||
|
||||
//dateTime
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public Carbon|Optional $DataOraConsegna;
|
||||
|
||||
|
||||
// public function __construct()
|
||||
// {
|
||||
// $this->DataOraConsegna = new \DateTime();
|
||||
// $this->DataInizioTrasporto = new \DateTime();
|
||||
// $this->DataInizioTrasporto = new \DateTime();
|
||||
// }
|
||||
|
||||
}
|
32
app/DataMapper/EDoc/FatturaPA/DatiVeicoli.php
Normal file
32
app/DataMapper/EDoc/FatturaPA/DatiVeicoli.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class DatiVeicoli extends Data
|
||||
{
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public Carbon|Optional $Data;
|
||||
|
||||
//String15Type
|
||||
public string $TotalePercorso;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
// $this->Data = new \DateTime();
|
||||
}
|
||||
}
|
77
app/DataMapper/EDoc/FatturaPA/DettaglioLinee.php
Normal file
77
app/DataMapper/EDoc/FatturaPA/DettaglioLinee.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use App\DataMapper\EDoc\FatturaPA\Generics\CodiceArticolo;
|
||||
use App\DataMapper\EDoc\FatturaPA\Body\ScontoMaggiorazione;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class DettaglioLinee extends Data
|
||||
{
|
||||
|
||||
//1-9999
|
||||
public int $NumeroLinea;
|
||||
|
||||
//String1000LatinType
|
||||
public string $Descrizione;
|
||||
|
||||
//Amount8DecimalType
|
||||
public float $PrezzoUnitario;
|
||||
|
||||
// Amount8DecimalType
|
||||
public float $PrezzoTotale;
|
||||
|
||||
// <xs:restriction base="xs:decimal">
|
||||
// <xs:maxInclusive value="100.00" />
|
||||
// <xs:pattern value="/^[0-9]{1,3}\.[0-9]{2}$/" />
|
||||
// 0-100
|
||||
public float $AliquotaIVA;
|
||||
|
||||
//string 2 char options
|
||||
public string|Optional $TipoCessionePrestazione;
|
||||
|
||||
public CodiceArticolo|Optional $CodiceArticolo;
|
||||
|
||||
// <xs:restriction base="xs:decimal">
|
||||
// <xs:pattern value="[0-9]{1,12}\.[0-9]{2,8}" />
|
||||
public float|Optional $Quantita;
|
||||
|
||||
//String10Type
|
||||
public string|Optional $UnitaMisura;
|
||||
|
||||
//date
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Illuminate\Support\Carbon|Optional $DataInizioPeriodo;
|
||||
|
||||
//date
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Illuminate\Support\Carbon|Optional $DataFinePeriodo;
|
||||
|
||||
public ScontoMaggiorazione|Optional $ScontoMaggiorazione;
|
||||
|
||||
//4 char options
|
||||
public string|Optional $Ritenuta;
|
||||
|
||||
//string options
|
||||
public string|Optional $Natura;
|
||||
|
||||
//string 20 char
|
||||
public string|Optional $RiferimentoAmministrazione;
|
||||
|
||||
public AltriDatiGestionali|Optional $AltriDatiGestionali;
|
||||
|
||||
|
||||
}
|
||||
|
92
app/DataMapper/EDoc/FatturaPA/DettaglioPagamento.php
Normal file
92
app/DataMapper/EDoc/FatturaPA/DettaglioPagamento.php
Normal file
@ -0,0 +1,92 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\DatiVeicoli;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use App\DataMapper\EDoc\FatturaPA\Body\DatiGenerali;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class DettaglioPagamento extends Data
|
||||
{
|
||||
|
||||
//string length 4 - options
|
||||
public string $ModalitaPagamento = 'MP01';
|
||||
|
||||
// Amount2DecimalType
|
||||
public float $ImportoPagamento;
|
||||
|
||||
//String200LatinType
|
||||
public string|Optional $Beneficiario;
|
||||
|
||||
//date
|
||||
public string|Optional $DataRiferimentoTerminiPagamento;
|
||||
|
||||
// <xs:restriction base="xs:integer">
|
||||
// <xs:minInclusive value="0" />
|
||||
// <xs:maxInclusive value="999" />
|
||||
public int|Optional $GiorniTerminiPagamento;
|
||||
|
||||
//date
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Illuminate\Support\Carbon|Optional $DataScadenzaPagamento;
|
||||
|
||||
//String20Type
|
||||
public string|Optional $CodUfficioPostale;
|
||||
|
||||
//String60LatinType
|
||||
public string|Optional $CognomeQuietanzante;
|
||||
|
||||
//String60LatinType
|
||||
public string|Optional $NomeQuietanzante;
|
||||
|
||||
//string [A-Z0-9]{16}
|
||||
public string|Optional $CFQuietanzante;
|
||||
|
||||
//string {IsBasicLatin}{2,10}
|
||||
public string|Optional $TitoloQuietanzante;
|
||||
|
||||
//string String80LatinType
|
||||
public string|Optional $IstitutoFinanziario;
|
||||
|
||||
//[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{11,30}
|
||||
public string|Optional $IBAN;
|
||||
|
||||
// string [0-9][0-9][0-9][0-9][0-9]
|
||||
public string|Optional $ABI;
|
||||
|
||||
//[0-9][0-9][0-9][0-9][0-9]
|
||||
public string|Optional $CAB;
|
||||
|
||||
//[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3}){0,1}
|
||||
public string|Optional $BIC;
|
||||
|
||||
//Amount2DecimalType
|
||||
public float|Optional $ScontoPagamentoAnticipato;
|
||||
|
||||
//Date
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Illuminate\Support\Carbon|Optional $DataLimitePagamentoAnticipato;
|
||||
|
||||
//Amount2DecimalType
|
||||
public float|Optional $PenalitaPagamentiRitardati;
|
||||
|
||||
//date
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Illuminate\Support\Carbon|Optional $DataDecorrenzaPenale;
|
||||
|
||||
//String60Type
|
||||
public string|Optional $CodicePagamento;
|
||||
|
||||
}
|
29
app/DataMapper/EDoc/FatturaPA/FatturaElettronicaBody.php
Normal file
29
app/DataMapper/EDoc/FatturaPA/FatturaElettronicaBody.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\DatiVeicoli;
|
||||
use App\DataMapper\EDoc\FatturaPA\DatiBeniServizi;
|
||||
use App\DataMapper\EDoc\FatturaPA\Body\DatiGenerali;
|
||||
|
||||
class FatturaElettronicaBody extends Data
|
||||
{
|
||||
|
||||
public DatiGenerali $DatiGenerali;
|
||||
public DatiBeniServizi $DatiBeniServizi;
|
||||
public DatiVeicoli|Optional $DatiVeicoli;
|
||||
public DatiPagamento|Optional $DatiPagamento;
|
||||
public Allegati|Optional $Allegati;
|
||||
|
||||
}
|
24
app/DataMapper/EDoc/FatturaPA/FatturaElettronicaHeader.php
Normal file
24
app/DataMapper/EDoc/FatturaPA/FatturaElettronicaHeader.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use App\DataMapper\EDoc\FatturaPA\Header\DatiTrasmissione;
|
||||
use App\DataMapper\EDoc\FatturaPA\Header\CedentePrestatore;
|
||||
use App\DataMapper\EDoc\FatturaPA\Header\CessionarioCommittente;
|
||||
|
||||
class FatturaElettronicaHeader extends Data
|
||||
{
|
||||
public DatiTrasmissione $DatiTrasmissione; //DatiTrasmissione
|
||||
public CedentePrestatore $CedentePrestatore; //CedentePrestatore
|
||||
public CessionarioCommittente $CessionarioCommittente; //CessionarioCommittente
|
||||
}
|
26
app/DataMapper/EDoc/FatturaPA/FatturaPrincipale.php
Normal file
26
app/DataMapper/EDoc/FatturaPA/FatturaPrincipale.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class FatturaPrincipale extends Data
|
||||
{
|
||||
//String20Type
|
||||
public string $NumeroFatturaPrincipale;
|
||||
//dateTime
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Illuminate\Support\Carbon|Optional $DataFatturaPrincipale;
|
||||
}
|
27
app/DataMapper/EDoc/FatturaPA/Generics/CodiceArticolo.php
Normal file
27
app/DataMapper/EDoc/FatturaPA/Generics/CodiceArticolo.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Generics;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
|
||||
class CodiceArticolo extends Data
|
||||
{
|
||||
//string 35 char
|
||||
#[Max(35)]
|
||||
public string $CodiceTipo;
|
||||
|
||||
//string 35 char
|
||||
#[Max(35)]
|
||||
public string $CodiceValore;
|
||||
}
|
||||
|
32
app/DataMapper/EDoc/FatturaPA/Generics/DatiDDT.php
Normal file
32
app/DataMapper/EDoc/FatturaPA/Generics/DatiDDT.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Generics;
|
||||
|
||||
use Spatie\LaravelData\Attributes\Validation\Between;
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class DatiDDT extends Data
|
||||
{
|
||||
//String20Type
|
||||
public string $NumeroDDT;
|
||||
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Illuminate\Support\Carbon $DataDDT;
|
||||
|
||||
//int 1-9999
|
||||
#[Between(1,9999)]
|
||||
public int|Optional $RiferimentoNumeroLinea;
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Generics;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use Spatie\LaravelData\Attributes\Validation\Between;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class DatiDocumentiCorrelatiType extends Data
|
||||
{
|
||||
//String20Type
|
||||
#[Max(20)]
|
||||
public string $IdDocumento;
|
||||
//int 1-9999
|
||||
#[Between(1,9999)]
|
||||
public int|Optional $RiferimentoNumeroLinea;
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Illuminate\Support\Carbon|Optional $Data;
|
||||
//String20Type
|
||||
#[Max(20)]
|
||||
public string|Optional $NumItem;
|
||||
//String100LatinType
|
||||
#[Max(100)]
|
||||
public string|Optional $CodiceCommessaConvenzione;
|
||||
//String15Type
|
||||
#[Max(15)]
|
||||
public string|Optional $CodiceCUP;
|
||||
//String15Type
|
||||
#[Max(15)]
|
||||
public string|Optional $CodiceCIG;
|
||||
}
|
24
app/DataMapper/EDoc/FatturaPA/Generics/DatiSAL.php
Normal file
24
app/DataMapper/EDoc/FatturaPA/Generics/DatiSAL.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Generics;
|
||||
|
||||
use Spatie\LaravelData\Attributes\Validation\Between;
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
class DatiSAL extends Data
|
||||
{
|
||||
|
||||
//int 1-999
|
||||
#[Between(1,999)]
|
||||
public int $RiferimentoFase;
|
||||
|
||||
}
|
40
app/DataMapper/EDoc/FatturaPA/Header/CedentePrestatore.php
Normal file
40
app/DataMapper/EDoc/FatturaPA/Header/CedentePrestatore.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Header;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\Sede;
|
||||
use App\DataMapper\EDoc\FatturaPA\Contatti;
|
||||
use App\DataMapper\EDoc\FatturaPA\IscrizioneREA;
|
||||
use App\DataMapper\EDoc\FatturaPA\Header\DatiAnagrafici;
|
||||
use App\DataMapper\EDoc\FatturaPA\StabileOrganizzazione;
|
||||
|
||||
class CedentePrestatore extends Data
|
||||
{
|
||||
|
||||
public function __construct(
|
||||
|
||||
public DatiAnagrafici $DatiAnagrafici,
|
||||
|
||||
public Sede $Sede,
|
||||
|
||||
public StabileOrganizzazione|Optional $StabileOrganizzazione,
|
||||
|
||||
public IscrizioneREA|Optional $IscrizioneREA,
|
||||
|
||||
public Contatti|Optional $Contatti,
|
||||
|
||||
public string|Optional $RiferimentoAmministrazione,
|
||||
){}
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Header;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\Sede;
|
||||
use App\DataMapper\EDoc\FatturaPA\RappresentanteFiscale;
|
||||
use App\DataMapper\EDoc\FatturaPA\Header\DatiAnagraficiCedenteType;
|
||||
|
||||
class CessionarioCommittente extends Data
|
||||
{
|
||||
public DatiAnagraficiCedenteType $DatiAnagrafici;
|
||||
|
||||
/** @var Sede[] */
|
||||
public array $Sede;
|
||||
|
||||
/** @var Sede[] */
|
||||
public array|Optional $StabileOrganizzazione;
|
||||
|
||||
public RappresentanteFiscale|Optional $RappresentanteFiscale;
|
||||
}
|
57
app/DataMapper/EDoc/FatturaPA/Header/DatiAnagrafici.php
Normal file
57
app/DataMapper/EDoc/FatturaPA/Header/DatiAnagrafici.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Header;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\Anagrafica;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\Validation\Size;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
use App\DataMapper\EDoc\FatturaPA\Header\IdFiscaleIVA;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class DatiAnagrafici extends Data
|
||||
{
|
||||
public function __construct(
|
||||
|
||||
public Anagrafica $Anagrafica,
|
||||
|
||||
public IdFiscaleIVA $IdFiscaleIVA,
|
||||
|
||||
// string length 4 - options = 'RF01'
|
||||
#[Max(4)]
|
||||
public string|Optional $RegimeFiscale,
|
||||
|
||||
#[Regex('/^[A-Z0-9]{11,16}$/')]
|
||||
public string|Optional $CodiceFiscale,
|
||||
|
||||
//string 60 char
|
||||
#[Max(60)]
|
||||
public string|Optional $AlboProfessionale,
|
||||
|
||||
//string 2 char
|
||||
#[Regex('/^[A-Z]{2}$/')]
|
||||
#[Size(2)]
|
||||
public string|Optional $ProvinciaAlbo,
|
||||
|
||||
//string 60 char
|
||||
#[Max(60)]
|
||||
public string|Optional $NumeroIscrizioneAlbo,
|
||||
|
||||
//Date
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Datetime|Optional $DataIscrizioneAlbo,
|
||||
|
||||
){}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Header;
|
||||
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
use App\DataMapper\EDoc\FatturaPA\Anagrafica;
|
||||
use Spatie\LaravelData\Attributes\WithTransformer;
|
||||
use App\DataMapper\EDoc\FatturaPA\Header\IdFiscaleIVA;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
use Spatie\LaravelData\Attributes\Validation\Size;
|
||||
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
|
||||
|
||||
class DatiAnagraficiCedenteType extends Data
|
||||
{
|
||||
public function __construct(
|
||||
|
||||
public Anagrafica $Anagrafica,
|
||||
|
||||
public IdFiscaleIVA|Optional $IdFiscaleIVA,
|
||||
|
||||
// string length 4 - options = 'RF01'
|
||||
#[Size(4)]
|
||||
public string|Optional $RegimeFiscale,
|
||||
|
||||
//[A-Z0-9]{11,16}
|
||||
#[Regex('/^[A-Z0-9]{11,16}$/')]
|
||||
public string|Optional $CodiceFiscale,
|
||||
|
||||
//string 60 char
|
||||
#[Max(20)]
|
||||
public string|Optional $AlboProfessionale,
|
||||
|
||||
//string 2 chat [A-Z]{2}
|
||||
#[Size(2)]
|
||||
#[Regex('/^[A-Z]{2}$/')]
|
||||
public string|Optional $ProvinciaAlbo,
|
||||
|
||||
//string 60 char
|
||||
#[Max(60)]
|
||||
public string|Optional $NumeroIscrizioneAlbo,
|
||||
|
||||
//Date
|
||||
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
|
||||
public \Datetime|Optional $DataIscrizioneAlbo,
|
||||
){}
|
||||
}
|
33
app/DataMapper/EDoc/FatturaPA/Header/DatiTrasmissione.php
Normal file
33
app/DataMapper/EDoc/FatturaPA/Header/DatiTrasmissione.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Header;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
use Spatie\LaravelData\Attributes\Validation\Size;
|
||||
|
||||
class DatiTrasmissione extends Data
|
||||
{
|
||||
public IdTrasmittente $IdTrasmittente; //IdTrasmittente
|
||||
|
||||
#[Max(10)]
|
||||
public string $ProgressivoInvio = ''; //String
|
||||
|
||||
#[Size(5)]
|
||||
public string $FormatoTrasmissione = ''; //String
|
||||
|
||||
#[Regex('/^[A-Z0-9]{6,7}$/')]
|
||||
public string $CodiceDestinatario = ''; //String
|
||||
|
||||
|
||||
}
|
31
app/DataMapper/EDoc/FatturaPA/Header/IdFiscaleIVA.php
Normal file
31
app/DataMapper/EDoc/FatturaPA/Header/IdFiscaleIVA.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Header;
|
||||
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\Validation\Min;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
class IdFiscaleIVA extends Data
|
||||
{
|
||||
public function __construct(
|
||||
// #[\Required]
|
||||
#[Regex('/^[A-Z]{2}$/')]
|
||||
public string $IdPaese = '',
|
||||
|
||||
// #[\Required]
|
||||
#[Min(1)]
|
||||
#[Max(28)]
|
||||
public string $IdCodice = '',
|
||||
){}
|
||||
}
|
28
app/DataMapper/EDoc/FatturaPA/Header/IdTrasmittente.php
Normal file
28
app/DataMapper/EDoc/FatturaPA/Header/IdTrasmittente.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA\Header;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Attributes\Validation\Max;
|
||||
use Spatie\LaravelData\Attributes\Validation\Min;
|
||||
use Spatie\LaravelData\Attributes\Validation\Regex;
|
||||
|
||||
class IdTrasmittente extends Data
|
||||
{
|
||||
#[Regex('/^[A-Z]{2}$/')]
|
||||
public string $IdPaese; //String
|
||||
|
||||
#[Min(1)]
|
||||
#[Max(28)]
|
||||
public string $IdCodice; //String
|
||||
|
||||
}
|
38
app/DataMapper/EDoc/FatturaPA/IscrizioneREA.php
Normal file
38
app/DataMapper/EDoc/FatturaPA/IscrizioneREA.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
|
||||
class IscrizioneREA extends Data
|
||||
{
|
||||
//[A-Z]{2}
|
||||
public string $Ufficio;
|
||||
|
||||
//string length 20
|
||||
public string|Optional $NumeroREA;
|
||||
|
||||
//precision 2
|
||||
public float|Optional $CapitaleSociale;
|
||||
|
||||
// options
|
||||
// SU - socio unico (sole trader)
|
||||
// SN - piu soci (multiple shareholders)
|
||||
public string|Optional $SocioUnico;
|
||||
|
||||
// options
|
||||
// LS - In Liquidation
|
||||
// LN - Not in liquidation
|
||||
public string $StatoLiquidazione = 'LN';
|
||||
|
||||
}
|
26
app/DataMapper/EDoc/FatturaPA/RappresentanteFiscale.php
Normal file
26
app/DataMapper/EDoc/FatturaPA/RappresentanteFiscale.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use App\DataMapper\EDoc\FatturaPA\Header\IdFiscaleIVA;
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
|
||||
class RappresentanteFiscale extends Data
|
||||
{
|
||||
public IdFiscaleIVA $IdFiscaleIVA;
|
||||
|
||||
public Anagrafica $Anagrafica;
|
||||
|
||||
// <xs:pattern value="[A-Z0-9]{11,16}" />
|
||||
public string|Optional $CodiceFiscaleType;
|
||||
}
|
30
app/DataMapper/EDoc/FatturaPA/Sede.php
Normal file
30
app/DataMapper/EDoc/FatturaPA/Sede.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
use Spatie\LaravelData\Data;
|
||||
use Spatie\LaravelData\Optional;
|
||||
|
||||
class Sede extends Data
|
||||
{
|
||||
public string $Indirizzo = ''; //string - address, 60char limit
|
||||
|
||||
public int $CAP = 12345; //[0-9][0-9][0-9][0-9][0-9] ie 12345
|
||||
|
||||
public string $Comune = ''; //String 60char limit
|
||||
|
||||
public string $Nazione = 'IT'; //String default IT
|
||||
|
||||
public string|Optional $Provincia; //String [A-Z]{2}
|
||||
|
||||
public string|Optional $NumeroCivico; // regex \p{IsBasicLatin}{1,8})
|
||||
}
|
17
app/DataMapper/EDoc/FatturaPA/StabileOrganizzazione.php
Normal file
17
app/DataMapper/EDoc/FatturaPA/StabileOrganizzazione.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\EDoc\FatturaPA;
|
||||
|
||||
class StabileOrganizzazione extends Sede
|
||||
{
|
||||
|
||||
}
|
26
app/DataMapper/EDoc/Schema/RO.php
Normal file
26
app/DataMapper/EDoc/Schema/RO.php
Normal file
File diff suppressed because one or more lines are too long
@ -146,9 +146,15 @@ class ProductSalesExport extends BaseExport
|
||||
->each(function ($invoice) use($product_keys) {
|
||||
foreach ($invoice->line_items as $item) {
|
||||
|
||||
if($product_keys && in_array($item->product_key, $product_keys))
|
||||
if($product_keys)
|
||||
{
|
||||
if(in_array($item->product_key, $product_keys))
|
||||
$this->csv->insertOne($this->buildRow($invoice, $item));
|
||||
|
||||
}
|
||||
else {
|
||||
$this->csv->insertOne($this->buildRow($invoice, $item));
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -227,7 +227,13 @@ class InvoiceFilters extends QueryFilters
|
||||
if (is_numeric($date)) {
|
||||
$date = Carbon::createFromTimestamp((int)$date);
|
||||
} else {
|
||||
$date = Carbon::parse($date);
|
||||
|
||||
try{
|
||||
$date = Carbon::parse($date);
|
||||
}
|
||||
catch(\Exception $e){
|
||||
return $this->builder;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->builder->where('date', '>=', $date);
|
||||
|
@ -82,13 +82,22 @@ class EpcQrGenerator
|
||||
$this->company->present()->name(),
|
||||
isset($this->company?->custom_fields?->company1) ? $this->company->settings->custom_value1 : '',
|
||||
$this->formatMoney($this->amount),
|
||||
$this->sepa['purpose'],
|
||||
$this->getPurposeCode(),
|
||||
substr($this->invoice->number, 0, 34),
|
||||
'',
|
||||
' '
|
||||
]), "\n");
|
||||
}
|
||||
|
||||
private function getPurposeCode(): string
|
||||
{
|
||||
if(isset($this->invoice->client->id_number) && strlen($this->invoice->client->id_number) > 2)
|
||||
return $this->invoice->client->id_number;
|
||||
|
||||
return $this->sepa['purpose'];
|
||||
|
||||
}
|
||||
|
||||
private function validateFields()
|
||||
{
|
||||
if (Ninja::isSelfHost() && isset($this->company?->custom_fields?->company2)) {
|
||||
|
@ -44,3 +44,29 @@ function nlog($output, $context = []): void
|
||||
$output = null;
|
||||
$context = null;
|
||||
}
|
||||
|
||||
|
||||
function nrlog($output, $context = []): void
|
||||
{
|
||||
if (! config('ninja.expanded_logging')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (gettype($output) == 'object') {
|
||||
$output = print_r($output, 1);
|
||||
}
|
||||
|
||||
// $trace = debug_backtrace();
|
||||
|
||||
if (Ninja::isHosted()) {
|
||||
try {
|
||||
info($output);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
} else {
|
||||
\Illuminate\Support\Facades\Log::channel('invoiceninja-reminders')->info($output, $context);
|
||||
}
|
||||
|
||||
$output = null;
|
||||
$context = null;
|
||||
}
|
||||
|
@ -11,36 +11,37 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Account;
|
||||
use App\Models\BankIntegration;
|
||||
use App\Models\BankTransaction;
|
||||
use App\Models\BankTransactionRule;
|
||||
use App\Models\User;
|
||||
use App\Utils\Ninja;
|
||||
use App\Models\Client;
|
||||
use App\Models\CompanyGateway;
|
||||
use App\Models\Design;
|
||||
use App\Models\ExpenseCategory;
|
||||
use App\Models\GroupSetting;
|
||||
use App\Models\PaymentTerm;
|
||||
use App\Utils\Statics;
|
||||
use App\Models\Account;
|
||||
use App\Models\TaxRate;
|
||||
use App\Models\Webhook;
|
||||
use App\Models\Scheduler;
|
||||
use App\Models\TaskStatus;
|
||||
use App\Models\TaxRate;
|
||||
use App\Models\User;
|
||||
use App\Models\Webhook;
|
||||
use App\Transformers\ArraySerializer;
|
||||
use App\Transformers\EntityTransformer;
|
||||
use App\Utils\Ninja;
|
||||
use App\Utils\Statics;
|
||||
use App\Utils\Traits\AppSetup;
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Models\PaymentTerm;
|
||||
use Illuminate\Support\Str;
|
||||
use League\Fractal\Manager;
|
||||
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
|
||||
use League\Fractal\Resource\Collection;
|
||||
use App\Models\GroupSetting;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Models\CompanyGateway;
|
||||
use App\Utils\Traits\AppSetup;
|
||||
use App\Models\BankIntegration;
|
||||
use App\Models\BankTransaction;
|
||||
use App\Models\ExpenseCategory;
|
||||
use League\Fractal\Resource\Item;
|
||||
use App\DataMapper\EDoc\Schema\RO;
|
||||
use App\Models\BankTransactionRule;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Transformers\ArraySerializer;
|
||||
use App\Transformers\EntityTransformer;
|
||||
use League\Fractal\Resource\Collection;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use League\Fractal\Serializer\JsonApiSerializer;
|
||||
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
|
||||
/**
|
||||
* Class BaseController.
|
||||
@ -993,7 +994,17 @@ class BaseController extends Controller
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$response['static'] = Statics::company($user->getCompany()->getLocale());
|
||||
$response_data = Statics::company($user->getCompany()->getLocale());
|
||||
|
||||
if(request()->has('einvoice')){
|
||||
|
||||
$ro = new RO();
|
||||
$response_data['einvoice_schema'] = $ro();
|
||||
|
||||
}
|
||||
|
||||
$response['static'] = $response_data;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -705,8 +705,25 @@ class CompanyController extends BaseController
|
||||
$logo = strlen($company->settings->company_logo) > 5 ? $company->settings->company_logo : 'https://pdf.invoicing.co/favicon-v2.png';
|
||||
$headers = ['Content-Disposition' => 'inline'];
|
||||
|
||||
try{
|
||||
$response = \Illuminate\Support\Facades\Http::get($logo);
|
||||
|
||||
if ($response->successful()) {
|
||||
$logo = $response->body();
|
||||
}
|
||||
else {
|
||||
$logo = base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=');
|
||||
}
|
||||
|
||||
}
|
||||
catch(\Exception $e){
|
||||
|
||||
$logo = base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=');
|
||||
|
||||
}
|
||||
|
||||
return response()->streamDownload(function () use ($logo) {
|
||||
echo @file_get_contents($logo);
|
||||
echo $logo;
|
||||
}, 'logo.png', $headers);
|
||||
|
||||
}
|
||||
|
@ -121,7 +121,8 @@ class DocumentController extends BaseController
|
||||
}
|
||||
|
||||
return response()->streamDownload(function () use ($document) {
|
||||
echo file_get_contents($document->generateUrl());
|
||||
// echo file_get_contents($document->generateUrl());
|
||||
echo $document->getFile();
|
||||
}, basename($document->generateUrl()), $headers);
|
||||
}
|
||||
|
||||
|
@ -167,11 +167,11 @@ class ImportController extends Controller
|
||||
private function convertEncoding($data)
|
||||
{
|
||||
|
||||
$enc = mb_detect_encoding($data, mb_list_encodings(), true);
|
||||
// $enc = mb_detect_encoding($data, mb_list_encodings(), true);
|
||||
|
||||
if($enc !== false) {
|
||||
$data = mb_convert_encoding($data, "UTF-8", $enc);
|
||||
}
|
||||
// if($enc !== false) {
|
||||
// $data = mb_convert_encoding($data, "UTF-8", $enc);
|
||||
// }
|
||||
|
||||
return $data;
|
||||
}
|
||||
@ -233,8 +233,50 @@ class ImportController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
return $this->convertData($data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private function convertData(array $data): array
|
||||
{
|
||||
|
||||
// List of encodings to check against
|
||||
$encodings = [
|
||||
'UTF-8',
|
||||
'ISO-8859-1', // Latin-1
|
||||
'ISO-8859-2', // Latin-2
|
||||
'WINDOWS-1252', // CP1252
|
||||
'SHIFT-JIS',
|
||||
'EUC-JP',
|
||||
'GB2312',
|
||||
'GBK',
|
||||
'BIG5',
|
||||
'ISO-2022-JP',
|
||||
'KOI8-R',
|
||||
'KOI8-U',
|
||||
'WINDOWS-1251', // CP1251
|
||||
'UTF-16',
|
||||
'UTF-32',
|
||||
'ASCII'
|
||||
];
|
||||
|
||||
foreach ($data as $key => $value) {
|
||||
// Only process strings
|
||||
if (is_string($value)) {
|
||||
// Detect the encoding of the string
|
||||
$detectedEncoding = mb_detect_encoding($value, $encodings, true);
|
||||
|
||||
// If encoding is detected and it's not UTF-8, convert it to UTF-8
|
||||
if ($detectedEncoding && $detectedEncoding !== 'UTF-8') {
|
||||
$array[$key] = mb_convert_encoding($value, 'UTF-8', $detectedEncoding);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the best delimiter
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\DataMapper\EDoc\Schema\RO;
|
||||
use App\Utils\Statics;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
@ -56,8 +57,15 @@ class StaticController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$response = Statics::company($user->getLocale() ?? $user->company()->getLocale());
|
||||
$response_data = Statics::company($user->getLocale() ?? $user->company()->getLocale());
|
||||
|
||||
return response()->json($response, 200, ['Content-type' => 'application/json; charset=utf-8'], JSON_PRETTY_PRINT);
|
||||
if(request()->has('einvoice')){
|
||||
|
||||
$ro = new RO;
|
||||
|
||||
$response_data['einvoice_schema'] = $ro();
|
||||
}
|
||||
|
||||
return response()->json($response_data, 200, ['Content-type' => 'application/json; charset=utf-8'], JSON_PRETTY_PRINT);
|
||||
}
|
||||
}
|
||||
|
@ -161,7 +161,9 @@ class ContactKeyLogin
|
||||
|
||||
private function setRedirectPath()
|
||||
{
|
||||
if (auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_INVOICES) {
|
||||
if (auth()->guard('contact')->user()->client->getSetting('enable_client_portal_dashboard') === true) {
|
||||
return '/client/dashboard';
|
||||
} elseif (auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_INVOICES) {
|
||||
return '/client/invoices';
|
||||
} elseif (auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_RECURRING_INVOICES) {
|
||||
return '/client/recurring_invoices';
|
||||
|
@ -137,9 +137,12 @@ class UpdateCompanyRequest extends Request
|
||||
}
|
||||
|
||||
if (isset($settings['email_style_custom'])) {
|
||||
$settings['email_style_custom'] = str_replace(['{!!','!!}','{{','}}','@if(','@endif','@isset','@unless','@auth','@empty','@guest','@env','@section','@switch', '@foreach', '@while', '@include', '@each', '@once', '@push', '@use', '@forelse', '@verbatim', '<?php', '@php', '@for'], '', $settings['email_style_custom']);
|
||||
$settings['email_style_custom'] = str_replace(['{!!','!!}','{{','}}','@checked','@dd', '@dump', '@if', '@if(','@endif','@isset','@unless','@auth','@empty','@guest','@env','@section','@switch', '@foreach', '@while', '@include', '@each', '@once', '@push', '@use', '@forelse', '@verbatim', '<?php', '@php', '@for','@class','</sc','<sc','html;base64', '@elseif', '@else', '@endunless', '@endisset', '@endempty', '@endauth', '@endguest', '@endproduction', '@endenv', '@hasSection', '@endhasSection', '@sectionMissing', '@endsectionMissing', '@endfor', '@endforeach', '@empty', '@endforelse', '@endwhile', '@continue', '@break', '@includeIf', '@includeWhen', '@includeUnless', '@includeFirst', '@component', '@endcomponent', '@endsection', '@yield', '@show', '@append', '@overwrite', '@stop', '@extends', '@endpush', '@stack', '@prepend', '@endprepend', '@slot', '@endslot', '@endphp', '@method', '@csrf', '@error', '@enderror', '@json', '@endverbatim', '@inject'], '', $settings['email_style_custom']);
|
||||
}
|
||||
|
||||
if(isset($settings['company_logo']) && strlen($settings['company_logo']) > 2)
|
||||
$settings['company_logo'] = $this->forceScheme($settings['company_logo']);
|
||||
|
||||
if (! $account->isFreeHostedClient()) {
|
||||
return $settings;
|
||||
}
|
||||
@ -164,4 +167,9 @@ class UpdateCompanyRequest extends Request
|
||||
|
||||
return rtrim($url, '/');
|
||||
}
|
||||
|
||||
private function forceScheme($url){
|
||||
return stripos($url, 'http') !== false ? $url : "https://{$url}";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -78,6 +78,8 @@ class StoreCreditRequest extends Request
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
$rules['amount'] = ['sometimes', 'bail', 'numeric', 'max:99999999999999'];
|
||||
|
||||
$rules['date'] = 'bail|sometimes|date:Y-m-d';
|
||||
|
||||
if ($this->invoice_id) {
|
||||
$rules['invoice_id'] = new ValidInvoiceCreditRule();
|
||||
}
|
||||
|
@ -68,7 +68,9 @@ class UpdateCreditRequest extends Request
|
||||
|
||||
$rules['line_items'] = 'array';
|
||||
|
||||
$rules['discount'] = 'sometimes|numeric|max:99999999999999';
|
||||
$rules['date'] = 'bail|sometimes|date:Y-m-d';
|
||||
|
||||
$rules['discount'] = 'sometimes|numeric|max:99999999999999';
|
||||
$rules['is_amount_discount'] = ['boolean'];
|
||||
$rules['tax_rate1'] = 'bail|sometimes|numeric';
|
||||
$rules['tax_rate2'] = 'bail|sometimes|numeric';
|
||||
|
@ -66,6 +66,8 @@ class StoreInvoiceRequest extends Request
|
||||
$rules['project_id'] = ['bail', 'sometimes', new ValidProjectForClient($this->all())];
|
||||
$rules['is_amount_discount'] = ['boolean'];
|
||||
|
||||
$rules['date'] = 'bail|sometimes|date:Y-m-d';
|
||||
|
||||
$rules['line_items'] = 'array';
|
||||
$rules['discount'] = 'sometimes|numeric|max:99999999999999';
|
||||
$rules['tax_rate1'] = 'bail|sometimes|numeric';
|
||||
|
@ -80,6 +80,8 @@ $rules['discount'] = 'sometimes|numeric|max:99999999999999';
|
||||
$rules['partial'] = 'bail|sometimes|nullable|numeric';
|
||||
$rules['amount'] = ['sometimes', 'bail', 'numeric', 'max:99999999999999'];
|
||||
|
||||
$rules['date'] = 'bail|sometimes|date:Y-m-d';
|
||||
|
||||
// $rules['partial_due_date'] = ['bail', 'sometimes', 'exclude_if:partial,0', Rule::requiredIf(fn () => $this->partial > 0), 'date', 'before:due_date'];
|
||||
// $rules['due_date'] = ['bail', 'sometimes', 'nullable', 'after:partial_due_date', Rule::requiredIf(fn () => strlen($this->partial_due_date) > 1), 'date'];
|
||||
|
||||
|
@ -61,10 +61,11 @@ class StoreQuoteRequest extends Request
|
||||
|
||||
$rules['number'] = ['nullable', Rule::unique('quotes')->where('company_id', $user->company()->id)];
|
||||
|
||||
$rules['discount'] = 'sometimes|numeric|max:99999999999999';
|
||||
$rules['discount'] = 'sometimes|numeric|max:99999999999999';
|
||||
$rules['is_amount_discount'] = ['boolean'];
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
$rules['line_items'] = 'array';
|
||||
$rules['date'] = 'bail|sometimes|date:Y-m-d';
|
||||
$rules['partial_due_date'] = ['bail', 'sometimes', 'exclude_if:partial,0', Rule::requiredIf(fn () => $this->partial > 0), 'date', 'before:due_date', 'after_or_equal:date'];
|
||||
$rules['due_date'] = ['bail', 'sometimes', 'nullable', 'after:partial_due_date', Rule::requiredIf(fn () => strlen($this->partial_due_date) > 1), 'date'];
|
||||
$rules['amount'] = ['sometimes', 'bail', 'numeric', 'max:99999999999999'];
|
||||
|
@ -63,6 +63,8 @@ class UpdateQuoteRequest extends Request
|
||||
$rules['is_amount_discount'] = ['boolean'];
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
$rules['date'] = 'bail|sometimes|date:Y-m-d';
|
||||
|
||||
$rules['partial_due_date'] = ['bail', 'sometimes', 'exclude_if:partial,0', Rule::requiredIf(fn () => $this->partial > 0), 'date', 'before:due_date'];
|
||||
$rules['due_date'] = ['bail', 'sometimes', 'nullable', 'after:partial_due_date', 'after_or_equal:date', Rule::requiredIf(fn () => strlen($this->partial_due_date) > 1), 'date'];
|
||||
$rules['amount'] = ['sometimes', 'bail', 'numeric', 'max:99999999999999'];
|
||||
|
@ -937,4 +937,44 @@ class BaseImport
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function convertData(array $data): array
|
||||
{
|
||||
|
||||
// List of encodings to check against
|
||||
$encodings = [
|
||||
'UTF-8',
|
||||
'ISO-8859-1', // Latin-1
|
||||
'ISO-8859-2', // Latin-2
|
||||
'WINDOWS-1252', // CP1252
|
||||
'SHIFT-JIS',
|
||||
'EUC-JP',
|
||||
'GB2312',
|
||||
'GBK',
|
||||
'BIG5',
|
||||
'ISO-2022-JP',
|
||||
'KOI8-R',
|
||||
'KOI8-U',
|
||||
'WINDOWS-1251', // CP1251
|
||||
'UTF-16',
|
||||
'UTF-32',
|
||||
'ASCII'
|
||||
];
|
||||
|
||||
foreach ($data as $key => $value) {
|
||||
// Only process strings
|
||||
if (is_string($value)) {
|
||||
// Detect the encoding of the string
|
||||
$detectedEncoding = mb_detect_encoding($value, $encodings, true);
|
||||
|
||||
// If encoding is detected and it's not UTF-8, convert it to UTF-8
|
||||
if ($detectedEncoding && $detectedEncoding !== 'UTF-8') {
|
||||
$array[$key] = mb_convert_encoding($value, 'UTF-8', $detectedEncoding);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -215,6 +215,14 @@ class CompanyImport implements ShouldQueue
|
||||
"convert_rate_to_client",
|
||||
];
|
||||
|
||||
private array $protected_input = [
|
||||
'client_portal_privacy_policy',
|
||||
'client_portal_terms',
|
||||
'portal_custom_footer',
|
||||
'portal_custom_css',
|
||||
'portal_custom_head'
|
||||
];
|
||||
|
||||
private array $version_keys = [
|
||||
'baseline' => [],
|
||||
'5.7.35' => [
|
||||
@ -475,9 +483,16 @@ class CompanyImport implements ShouldQueue
|
||||
$settings->payment_number_counter = 1;
|
||||
$settings->project_number_counter = 1;
|
||||
$settings->purchase_order_number_counter = 1;
|
||||
$this->company->settings = $co->settings;
|
||||
|
||||
$this->company->saveSettings($co->settings, $this->company);
|
||||
$settings->email_style_custom = str_replace(['{!!','!!}','{{','}}','@dd', '@dump', '@if', '@if(','@endif','@isset','@unless','@auth','@empty','@guest','@env','@section','@switch', '@foreach', '@while', '@include', '@each', '@once', '@push', '@use', '@forelse', '@verbatim', '<?php', '@php', '@for','@class','</s','<s','html;base64'], '', $settings->email_style_custom);
|
||||
$settings->company_logo = (strlen($settings->company_logo) > 2 && stripos($settings->company_logo, 'http') !== false) ? $settings->company_logo : "https://{$settings->company_logo}";
|
||||
|
||||
foreach($this->protected_input as $protected_var)
|
||||
{
|
||||
$settings->{$protected_var} = str_replace("script", "", $settings->{$protected_var});
|
||||
}
|
||||
|
||||
$this->company->saveSettings($settings, $this->company);
|
||||
|
||||
$this->company->save();
|
||||
|
||||
|
@ -11,13 +11,16 @@
|
||||
|
||||
namespace App\Jobs\Credit;
|
||||
|
||||
use App\Utils\Number;
|
||||
use App\Models\Credit;
|
||||
use App\Models\Payment;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Support\Carbon;
|
||||
use App\DataMapper\InvoiceItem;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class ApplyCreditPayment implements ShouldQueue
|
||||
{
|
||||
@ -67,6 +70,19 @@ class ApplyCreditPayment implements ShouldQueue
|
||||
|
||||
$credit_balance = $this->credit->balance;
|
||||
|
||||
$item_date = Carbon::parse($this->payment->date)->format($this->payment->client->date_format());
|
||||
$invoice_numbers = $this->payment->invoices->pluck('number')->implode(",");
|
||||
|
||||
$item = new InvoiceItem();
|
||||
$item->quantity = 0;
|
||||
$item->cost = $this->amount * -1;
|
||||
$item->notes = "{$item_date} - " . ctrans('texts.credit_payment', ['invoice_number' => $invoice_numbers]) . " ". Number::formatMoney($this->amount, $this->payment->client);
|
||||
$item->type_id = "1";
|
||||
|
||||
$line_items = $this->credit->line_items;
|
||||
$line_items[] = $item;
|
||||
$this->credit->line_items = $line_items;
|
||||
|
||||
if ($this->amount == $credit_balance) { //total credit applied.
|
||||
$this->credit
|
||||
->service()
|
||||
@ -90,7 +106,7 @@ class ApplyCreditPayment implements ShouldQueue
|
||||
->client
|
||||
->service()
|
||||
->adjustCreditBalance($this->amount * -1)
|
||||
->save();
|
||||
->save();
|
||||
|
||||
/* Update Payment Applied Amount*/
|
||||
$this->payment->save();
|
||||
|
@ -103,6 +103,7 @@ class CreateUbl implements ShouldQueue
|
||||
|
||||
$ubl_invoice->setLegalMonetaryTotal((new LegalMonetaryTotal())
|
||||
//->setLineExtensionAmount()
|
||||
->setTaxInclusiveAmount($invoice->balance)
|
||||
->setTaxExclusiveAmount($taxable)
|
||||
->setPayableAmount($invoice->balance));
|
||||
|
||||
|
@ -77,8 +77,6 @@ class NinjaMailerJob implements ShouldQueue
|
||||
/*Set the correct database*/
|
||||
MultiDB::setDb($this->nmo->company->db);
|
||||
|
||||
nlog("nn");
|
||||
|
||||
/* Serializing models from other jobs wipes the primary key */
|
||||
$this->company = Company::query()->where('company_key', $this->nmo->company->company_key)->first();
|
||||
|
||||
|
@ -56,7 +56,7 @@ class ReminderJob implements ShouldQueue
|
||||
Auth::logout();
|
||||
|
||||
if (! config('ninja.db.multi_db_enabled')) {
|
||||
nlog("Sending invoice reminders on ".now()->format('Y-m-d h:i:s'));
|
||||
nrlog("Sending invoice reminders on ".now()->format('Y-m-d h:i:s'));
|
||||
|
||||
Invoice::query()
|
||||
->where('is_deleted', 0)
|
||||
@ -84,7 +84,7 @@ class ReminderJob implements ShouldQueue
|
||||
foreach (MultiDB::$dbs as $db) {
|
||||
MultiDB::setDB($db);
|
||||
|
||||
nlog("Sending invoice reminders on db {$db} ".now()->format('Y-m-d h:i:s'));
|
||||
nrlog("Sending invoice reminders on db {$db} ".now()->format('Y-m-d h:i:s'));
|
||||
|
||||
Invoice::query()
|
||||
->where('is_deleted', 0)
|
||||
@ -121,12 +121,12 @@ class ReminderJob implements ShouldQueue
|
||||
if ($invoice->isPayable()) {
|
||||
//Attempts to prevent duplicates from sending
|
||||
if ($invoice->reminder_last_sent && Carbon::parse($invoice->reminder_last_sent)->startOfDay()->eq(now()->startOfDay())) {
|
||||
nlog("caught a duplicate reminder for invoice {$invoice->number}");
|
||||
nrlog("caught a duplicate reminder for invoice {$invoice->number}");
|
||||
return;
|
||||
}
|
||||
|
||||
$reminder_template = $invoice->calculateTemplate('invoice');
|
||||
nlog("reminder template = {$reminder_template}");
|
||||
nrlog("reminder template = {$reminder_template}");
|
||||
$invoice->service()->touchReminder($reminder_template)->save();
|
||||
$fees = $this->calcLateFee($invoice, $reminder_template);
|
||||
|
||||
@ -149,7 +149,7 @@ class ReminderJob implements ShouldQueue
|
||||
$invoice->invitations->each(function ($invitation) use ($invoice, $reminder_template) {
|
||||
if ($invitation->contact && !$invitation->contact->trashed() && $invitation->contact->email) {
|
||||
EmailEntity::dispatch($invitation, $invitation->company, $reminder_template);
|
||||
nlog("Firing reminder email for invoice {$invoice->number} - {$reminder_template}");
|
||||
nrlog("Firing reminder email for invoice {$invoice->number} - {$reminder_template}");
|
||||
$invoice->entityEmailEvent($invitation, $reminder_template);
|
||||
$invoice->sendEvent(Webhook::EVENT_REMIND_INVOICE, "client");
|
||||
}
|
||||
@ -220,7 +220,7 @@ class ReminderJob implements ShouldQueue
|
||||
$invoice->invitations->each(function ($invitation) use ($invoice, $reminder_template) {
|
||||
if ($invitation->contact && !$invitation->contact->trashed() && $invitation->contact->email) {
|
||||
EmailEntity::dispatch($invitation, $invitation->company, $reminder_template);
|
||||
nlog("Firing reminder email for invoice {$invoice->number} - {$reminder_template}");
|
||||
nrlog("Firing reminder email for invoice {$invoice->number} - {$reminder_template}");
|
||||
$invoice->entityEmailEvent($invitation, $reminder_template);
|
||||
$invoice->sendEvent(Webhook::EVENT_REMIND_INVOICE, "client");
|
||||
}
|
||||
|
@ -88,7 +88,6 @@ class CompanyPresenter extends EntityPresenter
|
||||
return "data:image/png;base64, ". base64_encode(@file_get_contents(url('') . $settings->company_logo, false, stream_context_create($context_options)));
|
||||
} else {
|
||||
return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
|
||||
//return "data:image/png;base64, ". base64_encode(@file_get_contents(asset('images/new_logo.png'), false, stream_context_create($context_options)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,6 +144,9 @@ class ClientRepository extends BaseRepository
|
||||
|
||||
public function purge($client)
|
||||
{
|
||||
|
||||
nlog("Purging client id => {$client->id}");
|
||||
|
||||
$client->contacts()->forceDelete();
|
||||
$client->tasks()->forceDelete();
|
||||
$client->invoices()->forceDelete();
|
||||
|
@ -262,6 +262,9 @@ class TaskRepository extends BaseRepository
|
||||
if($this->task_round_up)
|
||||
return $start_time + (int)ceil($interval/$this->task_round_to_nearest)*$this->task_round_to_nearest;
|
||||
|
||||
if($interval <= $this->task_round_to_nearest)
|
||||
return $start_time;
|
||||
|
||||
return $start_time - (int)floor($interval/$this->task_round_to_nearest) * $this->task_round_to_nearest;
|
||||
|
||||
}
|
||||
|
@ -375,7 +375,8 @@ class Statement
|
||||
->whereIn('status_id', [Credit::STATUS_SENT, Credit::STATUS_PARTIAL, Credit::STATUS_APPLIED])
|
||||
->whereBetween('date', [Carbon::parse($this->options['start_date']), Carbon::parse($this->options['end_date'])])
|
||||
->where(function ($query) {
|
||||
$query->whereDate('due_date', '>=', $this->options['end_date'])
|
||||
// $query->whereDate('due_date', '>=', $this->options['end_date'])
|
||||
$query->whereDate('due_date', '>=', now())
|
||||
->orWhereNull('due_date');
|
||||
})
|
||||
->orderBy('date', 'ASC');
|
||||
|
@ -488,7 +488,7 @@ class InvoiceService
|
||||
|
||||
/*When a reminder is sent we want to touch the dates they were sent*/
|
||||
public function touchReminder(string $reminder_template)
|
||||
{
|
||||
{ nrlog(now()->format('Y-m-d h:i:s') . " INV #{$this->invoice->number} : Touching Reminder => {$reminder_template}");
|
||||
switch ($reminder_template) {
|
||||
case 'reminder1':
|
||||
$this->invoice->reminder1_sent = now();
|
||||
|
@ -56,9 +56,6 @@ class TemplateMock
|
||||
$this->engines['payments'] = json_decode($this->payment_data, true);
|
||||
$this->engines['purchase_orders'] = json_decode($this->purchase_order_data, true);
|
||||
|
||||
// nlog("engines");
|
||||
// nlog($this->engines);
|
||||
|
||||
return $this;
|
||||
|
||||
}
|
||||
|
@ -94,11 +94,13 @@ class TemplateService
|
||||
$this->twig = new \Twig\Environment($loader, [
|
||||
'debug' => true,
|
||||
]);
|
||||
|
||||
$string_extension = new \Twig\Extension\StringLoaderExtension();
|
||||
$this->twig->addExtension($string_extension);
|
||||
$this->twig->addExtension(new IntlExtension());
|
||||
$this->twig->addExtension(new \Twig\Extension\DebugExtension());
|
||||
|
||||
|
||||
$function = new \Twig\TwigFunction('img', function ($string, $style = '') {
|
||||
return '<img src="' . $string . '" style="' . $style . '"></img>';
|
||||
});
|
||||
@ -121,6 +123,15 @@ class TemplateService
|
||||
|
||||
$this->twig->addFilter($filter);
|
||||
|
||||
$allowedTags = ['if', 'for', 'set', 'filter'];
|
||||
$allowedFilters = ['escape', 'e', 'upper', 'lower', 'capitalize', 'filter', 'length', 'merge','format_currency','map', 'join', 'first', 'date','sum'];
|
||||
$allowedFunctions = ['range', 'cycle', 'constant', 'date',];
|
||||
$allowedProperties = ['type_id'];
|
||||
$allowedMethods = ['img','t'];
|
||||
|
||||
$policy = new \Twig\Sandbox\SecurityPolicy($allowedTags, $allowedFilters, $allowedFunctions, $allowedProperties, $allowedMethods);
|
||||
$this->twig->addExtension(new \Twig\Extension\SandboxExtension($policy, true));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@ -240,7 +251,7 @@ class TemplateService
|
||||
*/
|
||||
public function getPdf(): string
|
||||
{
|
||||
|
||||
|
||||
if (config('ninja.invoiceninja_hosted_pdf_generation') || config('ninja.pdf_generator') == 'hosted_ninja') {
|
||||
$pdf = (new NinjaPdf())->build($this->compiled_html);
|
||||
} else {
|
||||
@ -271,7 +282,7 @@ class TemplateService
|
||||
{
|
||||
|
||||
$this->data = $this->preProcessDataBlocks($data);
|
||||
// nlog(json_encode($this->data));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@ -594,7 +605,7 @@ class TemplateService
|
||||
$item->tax_amount = Number::formatMoney($item->tax_amount_raw, $client_or_vendor);
|
||||
$item->product_cost = Number::formatMoney($item->product_cost_raw, $client_or_vendor);
|
||||
|
||||
return $item;
|
||||
return (array)$item;
|
||||
|
||||
})->toArray();
|
||||
}
|
||||
@ -822,8 +833,16 @@ class TemplateService
|
||||
$credits = collect($credits)
|
||||
->map(function ($credit) {
|
||||
|
||||
$payments = [];
|
||||
|
||||
$this->entity = $credit;
|
||||
|
||||
if($credit->payments ?? false) {
|
||||
$payments = $credit->payments->map(function ($payment) {
|
||||
return $this->transformPayment($payment);
|
||||
})->toArray();
|
||||
}
|
||||
|
||||
return [
|
||||
'amount' => Number::formatMoney($credit->amount, $credit->client),
|
||||
'balance' => Number::formatMoney($credit->balance, $credit->client),
|
||||
@ -879,7 +898,7 @@ class TemplateService
|
||||
'vat_number' => $credit->client->vat_number ?? '',
|
||||
'currency' => $credit->client->currency()->code ?? 'USD',
|
||||
],
|
||||
'payments' => [],
|
||||
'payments' => $payments,
|
||||
'total_tax_map' => $credit->calc()->getTotalTaxMap(),
|
||||
'line_tax_map' => $credit->calc()->getTaxMap(),
|
||||
];
|
||||
@ -1203,12 +1222,8 @@ class TemplateService
|
||||
});
|
||||
})->toArray();
|
||||
|
||||
// nlog($company_details);
|
||||
|
||||
$company_details = $include_labels ? $this->labelledFieldStack($company_details, 'company_details-') : $company_details;
|
||||
|
||||
// nlog($company_details);
|
||||
|
||||
$this->updateElementProperties('company-details', $company_details);
|
||||
|
||||
return $this;
|
||||
|
@ -255,7 +255,7 @@ class TemplateEngine
|
||||
|
||||
/*If no custom design exists, send back a blank!*/
|
||||
if (strlen($wrapper) > 1) {
|
||||
$wrapper = $this->renderView($wrapper, $data);
|
||||
// $wrapper = $this->renderView($wrapper, $data);
|
||||
} else {
|
||||
$wrapper = '';
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ trait MakesInvoiceHtml
|
||||
* @param string $string The Blade file string
|
||||
* @param array $data The array of template variables
|
||||
* @return string The return HTML string
|
||||
* @deprecated // not needed!
|
||||
* @throws FatalThrowableError
|
||||
*/
|
||||
public function renderView($string, $data = []): string
|
||||
@ -44,29 +45,6 @@ trait MakesInvoiceHtml
|
||||
|
||||
return Blade::render($string, $data); //potential fix for removing eval()
|
||||
|
||||
// $php = Blade::compileString($string);
|
||||
|
||||
// $obLevel = ob_get_level();
|
||||
// ob_start();
|
||||
// extract($data, EXTR_SKIP);
|
||||
|
||||
// try {
|
||||
// eval('?'.'>'.$php);
|
||||
// } catch (Exception $e) {
|
||||
// while (ob_get_level() > $obLevel) {
|
||||
// ob_end_clean();
|
||||
// }
|
||||
|
||||
// throw $e;
|
||||
// } catch (Throwable $e) {
|
||||
// while (ob_get_level() > $obLevel) {
|
||||
// ob_end_clean();
|
||||
// }
|
||||
|
||||
// throw new \Exception($e->getMessage());
|
||||
// }
|
||||
|
||||
// return ob_get_clean();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -6,7 +6,10 @@ return [
|
||||
* is an array, it will try to convert from the first format that works,
|
||||
* and will serialize dates using the first format from the array.
|
||||
*/
|
||||
'date_format' => DATE_ATOM,
|
||||
'date_format' => [
|
||||
'Y-m-d',
|
||||
'Y-m-d\TH:i:s.uP',
|
||||
],
|
||||
|
||||
/*
|
||||
* Global transformers will take complex types and transform them into simple
|
||||
|
@ -58,7 +58,12 @@ return [
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'days' => 7,
|
||||
],
|
||||
|
||||
'invoiceninja-reminders' => [
|
||||
'driver' => 'single',
|
||||
'path' => storage_path('logs/invoiceninja-reminders.log'),
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'days' => 90,
|
||||
],
|
||||
'stack' => [
|
||||
'driver' => 'stack',
|
||||
'channels' => ['single'],
|
||||
|
@ -17,8 +17,8 @@ return [
|
||||
'require_https' => env('REQUIRE_HTTPS', true),
|
||||
'app_url' => rtrim(env('APP_URL', ''), '/'),
|
||||
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
|
||||
'app_version' => env('APP_VERSION', '5.8.54'),
|
||||
'app_tag' => env('APP_TAG', '5.8.54'),
|
||||
'app_version' => env('APP_VERSION', '5.8.57'),
|
||||
'app_tag' => env('APP_TAG', '5.8.57'),
|
||||
'minimum_client_version' => '5.0.16',
|
||||
'terms_version' => '1.0.1',
|
||||
'api_secret' => env('API_SECRET', false),
|
||||
|
@ -5304,6 +5304,22 @@ $lang = array(
|
||||
'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
|
||||
'advanced_cards' => 'Advanced Cards',
|
||||
'activity_140' => 'Statement sent to :client',
|
||||
'invoice_net_amount' => 'Invoice Net Amount',
|
||||
'round_to_minutes' => 'Round To Minutes',
|
||||
'1_minute' => '1 Minute',
|
||||
'5_minutes' => '5 Minutes',
|
||||
'15_minutes' => '15 Minutes',
|
||||
'30_minutes' => '30 Minutes',
|
||||
'1_hour' => '1 Hour',
|
||||
'1_day' => '1 Day',
|
||||
'round_tasks' => 'Round Tasks',
|
||||
'round_tasks_help' => 'Round time intervals when saving tasks',
|
||||
'direction' => 'Direction',
|
||||
'round_up' => 'Round Up',
|
||||
'round_down' => 'Round Down',
|
||||
'task_round_to_nearest' => 'Round To Nearest',
|
||||
'bulk_updated' => 'Successfully updated data',
|
||||
'bulk_update' => 'Bulk Update',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
4
public/flutter_service_worker.js
vendored
4
public/flutter_service_worker.js
vendored
@ -16,7 +16,7 @@ const RESOURCES = {"canvaskit/canvaskit.js": "c86fbd9e7b17accae76e5ad116583dc4",
|
||||
"manifest.json": "ef43d90e57aa7682d7e2cfba2f484a40",
|
||||
"flutter.js": "c71a09214cb6f5f8996a531350400a9a",
|
||||
"favicon.ico": "51636d3a390451561744c42188ccd628",
|
||||
"/": "9448f80e09d17cbd39df57bbaab53050",
|
||||
"/": "6da89ef00decd8861b95827eacf0294f",
|
||||
"assets/FontManifest.json": "087fb858dc3cbfbf6baf6a30004922f1",
|
||||
"assets/AssetManifest.bin": "bf3be26e7055ad9a32f66b3a56138224",
|
||||
"assets/packages/material_design_icons_flutter/lib/fonts/materialdesignicons-webfont.ttf": "3759b2f7a51e83c64a58cfe07b96a8ee",
|
||||
@ -305,7 +305,7 @@ const RESOURCES = {"canvaskit/canvaskit.js": "c86fbd9e7b17accae76e5ad116583dc4",
|
||||
"assets/NOTICES": "412b336cf9e33e70058d612857effae1",
|
||||
"assets/fonts/MaterialIcons-Regular.otf": "a57618538ab8b4c4081d4491870ac333",
|
||||
"assets/AssetManifest.json": "759f9ef9973f7e26c2a51450b55bb9fa",
|
||||
"main.dart.js": "4aa9e5d941f4a15159c961cd52e75741",
|
||||
"main.dart.js": "bd68d64a60de3a8c0afbd24c36cfcdac",
|
||||
"favicon.png": "dca91c54388f52eded692718d5a98b8b",
|
||||
"version.json": "4dada3a779a2983f2adddf16b9f4015e",
|
||||
"icons/Icon-192.png": "bb1cf5f6982006952211c7c8404ffbed",
|
||||
|
284995
public/main.dart.js
vendored
284995
public/main.dart.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
287939
public/main.foss.dart.js
vendored
287939
public/main.foss.dart.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
18917
public/main.profile.dart.js
vendored
18917
public/main.profile.dart.js
vendored
File diff suppressed because one or more lines are too long
@ -60,7 +60,7 @@
|
||||
<script>
|
||||
|
||||
@if($company_gateway->getConfigField('account_id'))
|
||||
var stripe = Stripe({{ config('ninja.ninja_stripe_publishable_key') }}, {
|
||||
var stripe = Stripe('{{ config('ninja.ninja_stripe_publishable_key') }}', {
|
||||
stripeAccount: '{{ $company_gateway->getConfigField('account_id') }}',
|
||||
});
|
||||
@else
|
||||
|
Loading…
Reference in New Issue
Block a user