Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
1f6d00211d
|
@ -191,8 +191,11 @@ function calcola_sconto($data)
|
||||||
/**
|
/**
|
||||||
* Restistuisce le informazioni sull'eventuale riferimento ai documenti.
|
* Restistuisce le informazioni sull'eventuale riferimento ai documenti.
|
||||||
*
|
*
|
||||||
* @param array $data
|
* @param $info
|
||||||
* @param string $dir
|
* @param $dir
|
||||||
|
* @param array $ignore
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -201,6 +201,11 @@ class Fattura extends Document
|
||||||
return $this->belongsTo(Stato::class, 'idstatodocumento');
|
return $this->belongsTo(Stato::class, 'idstatodocumento');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function statoFE()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(StatoFE::class, 'codice_stato_fe');
|
||||||
|
}
|
||||||
|
|
||||||
public function articoli()
|
public function articoli()
|
||||||
{
|
{
|
||||||
return $this->hasMany(Components\Articolo::class, 'iddocumento');
|
return $this->hasMany(Components\Articolo::class, 'iddocumento');
|
||||||
|
|
|
@ -28,7 +28,7 @@ include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
{[ "type": "text", "label": "Data", "name": "data", "required": 1, "class": "datepicker text-center", "value": "<?php echo date('d/m/Y', strtotime($record['data'])); ?>", "extra": "" ]}
|
{[ "type": "text", "label": "Data", "name": "data", "required": 1, "class": "datepicker text-center", "value": "<?php $record['data']; ?>", "extra": "" ]}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -31,7 +31,6 @@ switch (filter('op')) {
|
||||||
if ($result) {
|
if ($result) {
|
||||||
database()->update('co_documenti', [
|
database()->update('co_documenti', [
|
||||||
'codice_stato_fe' => 'WAIT',
|
'codice_stato_fe' => 'WAIT',
|
||||||
'descrizione_stato_fe' => 'Fattura in elaborazione...',
|
|
||||||
'data_stato_fe' => date('Y-m-d H:i:s'),
|
'data_stato_fe' => date('Y-m-d H:i:s'),
|
||||||
], ['id' => $id_record]);
|
], ['id' => $id_record]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,7 +152,7 @@ echo '
|
||||||
</a>';
|
</a>';
|
||||||
|
|
||||||
// Scelgo quando posso inviarla
|
// Scelgo quando posso inviarla
|
||||||
$send = Interaction::isEnabled() && $generated && in_array( $record['codice_stato_fe'], array('GEN', 'ERVAL') );
|
$send = Interaction::isEnabled() && $generated && in_array($record['codice_stato_fe'], ['GEN', 'ERVAL']);
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
|
|
||||||
|
@ -163,31 +163,25 @@ echo '
|
||||||
</button><br><br>';
|
</button><br><br>';
|
||||||
|
|
||||||
// Messaggio esito invio
|
// Messaggio esito invio
|
||||||
|
if ($record['codice_stato_fe'] == 'GEN') {
|
||||||
if ($send){
|
|
||||||
if ($record['codice_stato_fe'] == '') {
|
|
||||||
|
|
||||||
} elseif ($record['codice_stato_fe'] == 'GEN') {
|
|
||||||
echo '
|
echo '
|
||||||
<div class="alert alert-warning">'.tr('La fattura è stata generata ed è pronta per l\'invio.').'</div>
|
<div class="alert alert-warning">'.tr("La fattura è stata generata ed è pronta per l'invio").'.</div>
|
||||||
';
|
';
|
||||||
} else {
|
} else {
|
||||||
$stato_fe = database()->fetchOne('SELECT codice, descrizione, icon FROM fe_stati_documento WHERE codice='.prepare($record['codice_stato_fe']));
|
$stato_fe = database()->fetchOne('SELECT codice, descrizione, icon FROM fe_stati_documento WHERE codice='.prepare($record['codice_stato_fe']));
|
||||||
|
|
||||||
if (in_array($stato_fe['codice'], array('EC01', 'RC'))) {
|
if (in_array($stato_fe['codice'], ['EC01', 'RC'])) {
|
||||||
$class = 'success';
|
$class = 'success';
|
||||||
} elseif (in_array($stato_fe['codice'], array('ERVAL', 'GEN', 'MC', 'WAIT'))) {
|
} elseif (in_array($stato_fe['codice'], ['ERVAL', 'GEN', 'MC', 'WAIT'])) {
|
||||||
$class = 'warning';
|
$class = 'warning';
|
||||||
} else {
|
} else {
|
||||||
$class = 'danger';
|
$class = 'danger';
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<div class="alert text-left alert-'.$class.'"><big><i class="'.$stato_fe['icon'].'" style="color:#fff;"></i> <b>'.$record['codice_stato_fe'].'</b> - '.$record['descrizione_stato_fe'].'</big> <div class="pull-right"><i class="fa fa-clock-o"></i> '.date('d/m/Y H:i', strtotime($record['data_stato_fe'])).'</small></div>
|
<div class="alert text-left alert-'.$class.'"><big><i class="'.$stato_fe['icon'].'" style="color:#fff;"></i> <b>'.$stato_fe['codice'].'</b> - '.$stato_fe['descrizione'].'</big> <div class="pull-right"><i class="fa fa-clock-o"></i> '.Translator::timestampToLocale($record['data_stato_fe']).'</small></div>
|
||||||
';
|
';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -274,6 +274,7 @@ class FatturaElettronica
|
||||||
database()->update('co_documenti', [
|
database()->update('co_documenti', [
|
||||||
'progressivo_invio' => $this->getDocumento()['progressivo_invio'],
|
'progressivo_invio' => $this->getDocumento()['progressivo_invio'],
|
||||||
'codice_stato_fe' => 'GEN',
|
'codice_stato_fe' => 'GEN',
|
||||||
|
'data_stato_fe' => date('Y-m-d H:i:s'),
|
||||||
], ['id' => $this->getDocumento()['id']]);
|
], ['id' => $this->getDocumento()['id']]);
|
||||||
|
|
||||||
return ($result === false) ? null : $filename;
|
return ($result === false) ? null : $filename;
|
||||||
|
@ -286,11 +287,11 @@ class FatturaElettronica
|
||||||
*/
|
*/
|
||||||
public function getFilename($new = false)
|
public function getFilename($new = false)
|
||||||
{
|
{
|
||||||
|
if (!empty(setting('Terzo intermediario'))) {
|
||||||
if (!empty(setting('Terzo intermediario')))
|
|
||||||
$anagrafica = Anagrafica::find(setting('Terzo intermediario'));
|
$anagrafica = Anagrafica::find(setting('Terzo intermediario'));
|
||||||
else
|
} else {
|
||||||
$anagrafica = static::getAzienda();
|
$anagrafica = static::getAzienda();
|
||||||
|
}
|
||||||
|
|
||||||
$prefix = 'IT'.(!empty($anagrafica['codice_fiscale']) ? $anagrafica['codice_fiscale'] : $anagrafica['piva']);
|
$prefix = 'IT'.(!empty($anagrafica['codice_fiscale']) ? $anagrafica['codice_fiscale'] : $anagrafica['piva']);
|
||||||
|
|
||||||
|
@ -361,10 +362,11 @@ class FatturaElettronica
|
||||||
protected static function getDatiTrasmissione($fattura)
|
protected static function getDatiTrasmissione($fattura)
|
||||||
{
|
{
|
||||||
// Se in impostazioni ho definito un terzo intermediario (es. Aruba, Teamsystem)
|
// Se in impostazioni ho definito un terzo intermediario (es. Aruba, Teamsystem)
|
||||||
if (!empty(setting('Terzo intermediario')))
|
if (!empty(setting('Terzo intermediario'))) {
|
||||||
$anagrafica = Anagrafica::find(setting('Terzo intermediario'));
|
$anagrafica = Anagrafica::find(setting('Terzo intermediario'));
|
||||||
else
|
} else {
|
||||||
$anagrafica = static::getAzienda();
|
$anagrafica = static::getAzienda();
|
||||||
|
}
|
||||||
|
|
||||||
$documento = $fattura->getDocumento();
|
$documento = $fattura->getDocumento();
|
||||||
$cliente = $fattura->getCliente();
|
$cliente = $fattura->getCliente();
|
||||||
|
@ -498,13 +500,12 @@ class FatturaElettronica
|
||||||
*/
|
*/
|
||||||
protected static function getCedentePrestatore($fattura)
|
protected static function getCedentePrestatore($fattura)
|
||||||
{
|
{
|
||||||
|
|
||||||
$documento = $fattura->getDocumento();
|
$documento = $fattura->getDocumento();
|
||||||
|
|
||||||
//Fattura per conto terzi, il cliente diventa il cedente al posto della mia Azienda (fornitore)
|
//Fattura per conto terzi, il cliente diventa il cedente al posto della mia Azienda (fornitore)
|
||||||
if ($documento['is_fattura_conto_terzi']){
|
if ($documento['is_fattura_conto_terzi']) {
|
||||||
$azienda = $fattura->getCliente();
|
$azienda = $fattura->getCliente();
|
||||||
}else{
|
} else {
|
||||||
$azienda = static::getAzienda();
|
$azienda = static::getAzienda();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,13 +559,12 @@ class FatturaElettronica
|
||||||
*/
|
*/
|
||||||
protected static function getCessionarioCommittente($fattura)
|
protected static function getCessionarioCommittente($fattura)
|
||||||
{
|
{
|
||||||
|
|
||||||
$documento = $fattura->getDocumento();
|
$documento = $fattura->getDocumento();
|
||||||
|
|
||||||
//Fattura per conto terzi, la mia Azienda (fornitore) diventa il cessionario al posto del cliente
|
//Fattura per conto terzi, la mia Azienda (fornitore) diventa il cessionario al posto del cliente
|
||||||
if ($documento['is_fattura_conto_terzi']){
|
if ($documento['is_fattura_conto_terzi']) {
|
||||||
$cliente = static::getAzienda();
|
$cliente = static::getAzienda();
|
||||||
}else{
|
} else {
|
||||||
$cliente = $fattura->getCliente();
|
$cliente = $fattura->getCliente();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -610,7 +610,6 @@ class FatturaElettronica
|
||||||
// TODO: 'Causale' => $documento['causale'],
|
// TODO: 'Causale' => $documento['causale'],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
$righe = $fattura->getRighe();
|
$righe = $fattura->getRighe();
|
||||||
|
|
||||||
// Ritenuta d'Acconto
|
// Ritenuta d'Acconto
|
||||||
|
@ -622,7 +621,7 @@ class FatturaElettronica
|
||||||
$totale_rivalsainps = 0;
|
$totale_rivalsainps = 0;
|
||||||
|
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
if (!empty($riga['idritenutaacconto']) and empty($riga['is_descrizione']) ) {
|
if (!empty($riga['idritenutaacconto']) and empty($riga['is_descrizione'])) {
|
||||||
$id_ritenuta = $riga['idritenutaacconto'];
|
$id_ritenuta = $riga['idritenutaacconto'];
|
||||||
$totale_ritenutaacconto += $riga['ritenutaacconto'];
|
$totale_ritenutaacconto += $riga['ritenutaacconto'];
|
||||||
}
|
}
|
||||||
|
@ -894,13 +893,13 @@ class FatturaElettronica
|
||||||
$riga['qta'] = abs($riga['qta']);
|
$riga['qta'] = abs($riga['qta']);
|
||||||
$riga['sconto'] = abs($riga['sconto']);
|
$riga['sconto'] = abs($riga['sconto']);
|
||||||
|
|
||||||
//Fix per righe di tipo descrizione, copio idiva dalla prima riga del documento che non è di tipo descrizione, riportando di conseguenza eventuali % e/o nature
|
// Fix per righe di tipo descrizione, copio idiva dalla prima riga del documento che non è di tipo descrizione, riportando di conseguenza eventuali % e/o nature
|
||||||
if (!empty($riga['is_descrizione'])) {
|
if (!empty($riga['is_descrizione'])) {
|
||||||
$riga['idiva'] = $database->fetchOne('SELECT `idiva` FROM `co_righe_documenti` WHERE `is_descrizione` = 0 AND `iddocumento` = '.prepare($documento['id']))['idiva'];
|
$riga['idiva'] = $database->fetchOne('SELECT `idiva` FROM `co_righe_documenti` WHERE `is_descrizione` = 0 AND `iddocumento` = '.prepare($documento['id']))['idiva'];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Fix per qta, deve sempre essere impostata almeno a 1
|
// Fix per qta, deve sempre essere impostata almeno a 1
|
||||||
$riga['qta'] = (!empty($riga['qta'])) ? $riga['qta'] : 1;
|
$riga['qta'] = !empty($riga['qta']) ? $riga['qta'] : 1;
|
||||||
|
|
||||||
$prezzo_unitario = $riga['subtotale'] / $riga['qta'];
|
$prezzo_unitario = $riga['subtotale'] / $riga['qta'];
|
||||||
$prezzo_totale = $riga['subtotale'] - $riga['sconto'];
|
$prezzo_totale = $riga['subtotale'] - $riga['sconto'];
|
||||||
|
@ -929,42 +928,16 @@ class FatturaElettronica
|
||||||
$dettaglio['CodiceArticolo'] = $codice_articolo;
|
$dettaglio['CodiceArticolo'] = $codice_articolo;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Non ammesso ’
|
// Non ammesso ’
|
||||||
//$descrizione = html_entity_decode($riga['descrizione'], ENT_HTML5, 'UTF-8');
|
// $descrizione = html_entity_decode($riga['descrizione'], ENT_HTML5, 'UTF-8');
|
||||||
$descrizione = str_replace('>', ' ', $riga['descrizione']);
|
$descrizione = str_replace('>', ' ', $riga['descrizione']);
|
||||||
$descrizione = str_replace('…', '...', $descrizione);
|
$descrizione = str_replace('…', '...', $descrizione);
|
||||||
|
|
||||||
$dettaglio['Descrizione'] = str_replace('’', ' ', $descrizione);
|
$dettaglio['Descrizione'] = str_replace('’', ' ', $descrizione);
|
||||||
|
|
||||||
//Aggiungo il riferimento della riga alla descrizione
|
$ref = doc_references($riga, 'entrata', ['iddocumento']);
|
||||||
$rif = '';
|
if (!empty($ref)) {
|
||||||
if (!empty($riga['idordine'])) {
|
$dettaglio['Descrizione'] .= "\n".$ref['description'];
|
||||||
$data = $database->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM or_ordini WHERE id=".prepare($riga['idordine']));
|
|
||||||
$rif = 'ordine';
|
|
||||||
}
|
|
||||||
// DDT
|
|
||||||
elseif (!empty($riga['idddt'])) {
|
|
||||||
$data = $database->fetchArray("SELECT IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM dt_ddt WHERE id=".prepare($riga['idddt']));
|
|
||||||
$rif = 'ddt';
|
|
||||||
}
|
|
||||||
// Preventivo
|
|
||||||
elseif (!empty($riga['idpreventivo'])) {
|
|
||||||
$data = $database->fetchArray('SELECT numero, data_bozza AS data FROM co_preventivi WHERE id='.prepare($riga['idpreventivo']));
|
|
||||||
$rif = 'preventivo';
|
|
||||||
}
|
|
||||||
// Contratto
|
|
||||||
elseif (!empty($riga['idcontratto'])) {
|
|
||||||
$data = $database->fetchArray('SELECT numero, data_bozza AS data FROM co_contratti WHERE id='.prepare($riga['idcontratto']));
|
|
||||||
$rif = 'contratto';
|
|
||||||
}
|
|
||||||
// Intervento
|
|
||||||
elseif (!empty($riga['idintervento'])) {
|
|
||||||
$data = $database->fetchArray('SELECT codice AS numero, IFNULL( (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), data_richiesta) AS data FROM in_interventi WHERE id='.prepare($riga['idintervento']));
|
|
||||||
$rif = 'intervento';
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!empty($rif)){
|
|
||||||
$dettaglio['Descrizione'] .= "\nRif. ".$rif." n.".$data[0]['numero']." del ".date('d/m/Y', strtotime($data[0]['data']));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$dettaglio['Quantita'] = $riga['qta'];
|
$dettaglio['Quantita'] = $riga['qta'];
|
||||||
|
@ -1017,9 +990,8 @@ class FatturaElettronica
|
||||||
}
|
}
|
||||||
|
|
||||||
// AltriDatiGestionali (2.2.1.16) - Ritenuta ENASARCO
|
// AltriDatiGestionali (2.2.1.16) - Ritenuta ENASARCO
|
||||||
//https://forum.italia.it/uploads/default/original/2X/d/d35d721c3a3a601d2300378724a270154e23af52.jpeg
|
// https://forum.italia.it/uploads/default/original/2X/d/d35d721c3a3a601d2300378724a270154e23af52.jpeg
|
||||||
if (!empty($documento['id_ritenuta_contributi'])) {
|
if (!empty($documento['id_ritenuta_contributi'])) {
|
||||||
|
|
||||||
$percentuale = database()->fetchOne('SELECT percentuale FROM co_ritenuta_contributi WHERE id = '.prepare($documento['id_ritenuta_contributi']))['percentuale'];
|
$percentuale = database()->fetchOne('SELECT percentuale FROM co_ritenuta_contributi WHERE id = '.prepare($documento['id_ritenuta_contributi']))['percentuale'];
|
||||||
|
|
||||||
$ritenutaenasarco = [
|
$ritenutaenasarco = [
|
||||||
|
|
|
@ -44,7 +44,6 @@ class Ricevuta
|
||||||
$data = $this->xml['DataOraRicezione'];
|
$data = $this->xml['DataOraRicezione'];
|
||||||
|
|
||||||
$this->fattura->codice_stato_fe = $codice;
|
$this->fattura->codice_stato_fe = $codice;
|
||||||
$this->fattura->descrizione_stato_fe = $descrizione;
|
|
||||||
$this->fattura->data_stato_fe = date('Y-m-d H:i:s', strtotime($data));
|
$this->fattura->data_stato_fe = date('Y-m-d H:i:s', strtotime($data));
|
||||||
$this->fattura->save();
|
$this->fattura->save();
|
||||||
|
|
||||||
|
|
|
@ -51,9 +51,7 @@ UPDATE `fe_stati_documento` SET `descrizione`='In elaborazione' WHERE `codice`='
|
||||||
|
|
||||||
-- Inserito stato errore interno OSM
|
-- Inserito stato errore interno OSM
|
||||||
INSERT INTO `fe_stati_documento`( `codice`, `descrizione`, `icon` ) VALUES( 'ERVAL', 'Errore di validazione', 'fa fa-edit text-danger' );
|
INSERT INTO `fe_stati_documento`( `codice`, `descrizione`, `icon` ) VALUES( 'ERVAL', 'Errore di validazione', 'fa fa-edit text-danger' );
|
||||||
|
ALTER TABLE `co_documenti` ADD `data_stato_fe` TIMESTAMP;
|
||||||
ALTER TABLE `co_documenti` ADD `descrizione_stato_fe` TEXT NOT NULL AFTER `codice_stato_fe`;
|
|
||||||
ALTER TABLE `co_documenti` ADD `data_stato_fe` TIMESTAMP NOT NULL AFTER `descrizione_stato_fe`;
|
|
||||||
|
|
||||||
-- Rimozione iva eliminata
|
-- Rimozione iva eliminata
|
||||||
UPDATE `zz_settings` SET `tipo`='query=SELECT id, descrizione FROM `co_iva` WHERE deleted_at IS NULL ORDER BY descrizione ASC' WHERE `nome`='Iva predefinita';
|
UPDATE `zz_settings` SET `tipo`='query=SELECT id, descrizione FROM `co_iva` WHERE deleted_at IS NULL ORDER BY descrizione ASC' WHERE `nome`='Iva predefinita';
|
||||||
|
|
Loading…
Reference in New Issue