Merge branch 'master' into additionals-query
This commit is contained in:
commit
c171761065
|
@ -191,8 +191,11 @@ function calcola_sconto($data)
|
|||
/**
|
||||
* Restistuisce le informazioni sull'eventuale riferimento ai documenti.
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $dir
|
||||
* @param $info
|
||||
* @param $dir
|
||||
* @param array $ignore
|
||||
*
|
||||
* @throws Exception
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
|
|
|
@ -410,6 +410,6 @@ function operationLog($operation, array $ids = [], array $options = [])
|
|||
*
|
||||
* @return string
|
||||
*/
|
||||
function clean($string, $permitted) {
|
||||
function clean($string, $permitted = '') {
|
||||
return preg_replace('/[^A-Za-z0-9'.$permitted.']/', '', $string); // Removes special chars.
|
||||
}
|
||||
|
|
|
@ -201,6 +201,11 @@ class Fattura extends Document
|
|||
return $this->belongsTo(Stato::class, 'idstatodocumento');
|
||||
}
|
||||
|
||||
public function statoFE()
|
||||
{
|
||||
return $this->belongsTo(StatoFE::class, 'codice_stato_fe');
|
||||
}
|
||||
|
||||
public function articoli()
|
||||
{
|
||||
return $this->hasMany(Components\Articolo::class, 'iddocumento');
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace Modules\Fatture;
|
||||
|
||||
use Common\Model;
|
||||
|
||||
class StatoFE extends Model
|
||||
{
|
||||
public $incrementing = false;
|
||||
protected $table = 'fe_stati_documento';
|
||||
protected $primaryKey = 'codice';
|
||||
|
||||
public function fatture()
|
||||
{
|
||||
return $this->hasMany(Fattura::class, 'codice_stato_fe');
|
||||
}
|
||||
}
|
|
@ -28,7 +28,7 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
|
||||
<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>
|
||||
|
|
|
@ -6,11 +6,12 @@ switch (filter('op')) {
|
|||
case 'update':
|
||||
$descrizione = filter('descrizione');
|
||||
$percentuale = filter('percentuale');
|
||||
$indetraibile = filter('indetraibile');
|
||||
$percentuale_imponibile = filter('percentuale_imponibile');
|
||||
|
||||
if (isset($descrizione) && isset($percentuale) && isset($indetraibile)) {
|
||||
|
||||
if (isset($descrizione) && isset($percentuale) && isset($percentuale_imponibile)) {
|
||||
if ($dbo->fetchNum('SELECT * FROM `co_ritenutaacconto` WHERE `descrizione`='.prepare($descrizione).' AND `id`!='.prepare($id_record)) == 0) {
|
||||
$dbo->query('UPDATE `co_ritenutaacconto` SET `descrizione`='.prepare($descrizione).', `percentuale`='.prepare($percentuale).', `indetraibile`='.prepare($indetraibile).' WHERE `id`='.prepare($id_record));
|
||||
$dbo->query('UPDATE `co_ritenutaacconto` SET `descrizione`='.prepare($descrizione).', `percentuale`='.prepare($percentuale).', `percentuale_imponibile`='.prepare($percentuale_imponibile).' WHERE `id`='.prepare($id_record));
|
||||
flash()->info(tr('Salvataggio completato!'));
|
||||
} else {
|
||||
flash()->error(tr("E' già presente una tipologia di _TYPE_ con la stessa descrizione!", [
|
||||
|
@ -26,11 +27,11 @@ switch (filter('op')) {
|
|||
case 'add':
|
||||
$descrizione = filter('descrizione');
|
||||
$percentuale = filter('percentuale');
|
||||
$indetraibile = filter('indetraibile');
|
||||
$percentuale_imponibile = filter('percentuale_imponibile');
|
||||
|
||||
if (isset($descrizione) && isset($percentuale) && isset($indetraibile)) {
|
||||
if (isset($descrizione) && isset($percentuale) && isset($percentuale_imponibile)) {
|
||||
if ($dbo->fetchNum('SELECT * FROM `co_ritenutaacconto` WHERE `descrizione`='.prepare($descrizione)) == 0) {
|
||||
$dbo->query('INSERT INTO `co_ritenutaacconto` (`descrizione`, `percentuale`, `indetraibile`) VALUES ('.prepare($descrizione).', '.prepare($percentuale).', '.prepare($indetraibile).')');
|
||||
$dbo->query('INSERT INTO `co_ritenutaacconto` (`descrizione`, `percentuale`, `percentuale_imponibile`) VALUES ('.prepare($descrizione).', '.prepare($percentuale).', '.prepare($percentuale_imponibile).')');
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
|
||||
flash()->info(tr('Aggiunta nuova tipologia di _TYPE_', [
|
||||
|
|
|
@ -2,7 +2,17 @@
|
|||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
?><form action="" method="post" id="edit-form">
|
||||
// Presenza di documenti associati
|
||||
if ($record['doc_associati'] > 0) {
|
||||
echo '
|
||||
<div class="alert alert-warning">'.tr('Non puoi eliminare questa ritenuta.').' '.tr('Ci sono _NUM_ documenti associati.', [
|
||||
'_NUM_' => $record['doc_associati'],
|
||||
]).'</div>';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<form action="" method="post" id="edit-form">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="update">
|
||||
|
||||
|
@ -25,7 +35,7 @@ include_once __DIR__.'/../../core.php';
|
|||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "number", "label": "<?php echo tr('Indetraibile'); ?>", "name": "indetraibile", "value": "$indetraibile$", "icon-after": "<i class=\"fa fa-percent\"></i>" ]}
|
||||
{[ "type": "number", "label": "<?php echo tr('Percentuale imponibile'); ?>", "name": "percentuale_imponibile", "value": "$percentuale_imponibile$", "help": "<?php echo tr('Percentuale imponibile sui cui applicare il calcolo della ritenuta'); ?>", "icon-after": "<i class=\"fa fa-percent\"></i>" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -33,6 +43,12 @@ include_once __DIR__.'/../../core.php';
|
|||
|
||||
</form>
|
||||
|
||||
<?php
|
||||
|
||||
// Presenza di documenti associati
|
||||
if ($record['doc_associati'] == 0) {
|
||||
echo '
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||
</a>
|
||||
<i class="fa fa-trash"></i> '.tr('Elimina').'
|
||||
</a>';
|
||||
}
|
|
@ -3,5 +3,5 @@
|
|||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
if (isset($id_record)) {
|
||||
$record = $dbo->fetchOne('SELECT * FROM `co_ritenutaacconto` WHERE id='.prepare($id_record));
|
||||
$record = $dbo->fetchOne('SELECT *, (SELECT COUNT(idritenutaacconto) FROM co_documenti WHERE co_documenti.idritenutaacconto = '.prepare($id_record).') AS doc_associati FROM `co_ritenutaacconto` WHERE id='.prepare($id_record));
|
||||
}
|
||||
|
|
|
@ -38,8 +38,8 @@ $d1 = new DateTime($start);
|
|||
$d2 = new DateTime($end);
|
||||
$count = $d1->diff($d2)->m + ($d1->diff($d2)->y * 12) + 1;
|
||||
|
||||
$fatturato = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
|
||||
$acquisti = $dbo->fetchArray("SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='uscita' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
|
||||
$fatturato = $dbo->fetchArray("SELECT ROUND(SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto), 2) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='entrata' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
|
||||
$acquisti = $dbo->fetchArray("SELECT ROUND(SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto), 2) AS totale, YEAR(co_documenti.data) AS year, MONTH(co_documenti.data) AS month FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_righe_documenti ON co_righe_documenti.iddocumento=co_documenti.id WHERE co_tipidocumento.dir='uscita' AND co_tipidocumento.descrizione!='Bozza' AND co_documenti.data BETWEEN ".prepare($start).' AND '.prepare($end).' GROUP BY YEAR(co_documenti.data), MONTH(co_documenti.data) ORDER BY YEAR(co_documenti.data) ASC, MONTH(co_documenti.data) ASC');
|
||||
|
||||
$month = intval($d1->format('m')) - 1;
|
||||
for ($i = 0; $i < $count; ++$i) {
|
||||
|
@ -85,14 +85,14 @@ $(document).ready(function() {
|
|||
labels: months,
|
||||
datasets: [
|
||||
{
|
||||
label: "'.tr('Fatturato').'",
|
||||
label: "'.tr('Fatturato (iva esclusa)').'",
|
||||
backgroundColor: "#63E360",
|
||||
data: [
|
||||
'.implode(',', array_column($fatturato, 'totale')).'
|
||||
]
|
||||
},
|
||||
{
|
||||
label: "'.tr('Acquisti').'",
|
||||
label: "'.tr('Acquisti (iva esclusa)').'",
|
||||
backgroundColor: "#EE4B4B",
|
||||
data: [
|
||||
'.implode(',', array_column($acquisti, 'totale')).'
|
||||
|
@ -105,6 +105,16 @@ $(document).ready(function() {
|
|||
legend: {
|
||||
position: "bottom",
|
||||
},
|
||||
scales: {
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
// Include a dollar sign in the ticks
|
||||
callback: function(value, index, values) {
|
||||
return \'€ \' + value;
|
||||
}
|
||||
}
|
||||
}]
|
||||
},
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -31,7 +31,6 @@ switch (filter('op')) {
|
|||
if ($result) {
|
||||
database()->update('co_documenti', [
|
||||
'codice_stato_fe' => 'WAIT',
|
||||
'descrizione_stato_fe' => 'Fattura in elaborazione...',
|
||||
'data_stato_fe' => date('Y-m-d H:i:s'),
|
||||
], ['id' => $id_record]);
|
||||
}
|
||||
|
|
|
@ -152,7 +152,7 @@ echo '
|
|||
</a>';
|
||||
|
||||
// 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 '
|
||||
|
||||
|
@ -163,32 +163,34 @@ echo '
|
|||
</button><br><br>';
|
||||
|
||||
// Messaggio esito invio
|
||||
|
||||
if ($send){
|
||||
if ($record['codice_stato_fe'] == '') {
|
||||
|
||||
} elseif ($record['codice_stato_fe'] == 'GEN') {
|
||||
echo '
|
||||
<div class="alert alert-warning">'.tr('La fattura è stata generata ed è pronta per l\'invio.').'</div>
|
||||
if ($send) {
|
||||
if ($record['codice_stato_fe'] == 'GEN') {
|
||||
echo '
|
||||
<div class="alert alert-warning">'.tr("La fattura è stata generata ed è pronta per l'invio").'.</div>
|
||||
';
|
||||
} else {
|
||||
$stato_fe = database()->fetchOne('SELECT codice, descrizione, icon FROM fe_stati_documento WHERE codice='.prepare($record['codice_stato_fe']));
|
||||
} else {
|
||||
$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'))) {
|
||||
$class = 'success';
|
||||
} elseif (in_array($stato_fe['codice'], array('ERVAL', 'GEN', 'MC', 'WAIT'))) {
|
||||
$class = 'warning';
|
||||
} else {
|
||||
$class = 'danger';
|
||||
}
|
||||
if (in_array($stato_fe['codice'], ['EC01', 'RC'])) {
|
||||
$class = 'success';
|
||||
} elseif (in_array($stato_fe['codice'], ['ERVAL', 'GEN', 'MC', 'WAIT'])) {
|
||||
$class = 'warning';
|
||||
} else {
|
||||
$class = 'danger';
|
||||
}
|
||||
|
||||
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>
|
||||
echo '
|
||||
<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> <small>'.$record['descrizione_ricevuta_fe'].'</small>
|
||||
<div class="pull-right">
|
||||
<i class="fa fa-clock-o"></i> '.Translator::timestampToLocale($record['data_stato_fe']).'
|
||||
</div>
|
||||
</small>
|
||||
';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo '
|
||||
<script>
|
||||
function send(btn) {
|
||||
|
|
|
@ -274,6 +274,7 @@ class FatturaElettronica
|
|||
database()->update('co_documenti', [
|
||||
'progressivo_invio' => $this->getDocumento()['progressivo_invio'],
|
||||
'codice_stato_fe' => 'GEN',
|
||||
'data_stato_fe' => date('Y-m-d H:i:s'),
|
||||
], ['id' => $this->getDocumento()['id']]);
|
||||
|
||||
return ($result === false) ? null : $filename;
|
||||
|
@ -286,8 +287,13 @@ class FatturaElettronica
|
|||
*/
|
||||
public function getFilename($new = false)
|
||||
{
|
||||
$azienda = static::getAzienda();
|
||||
$prefix = 'IT'.(!empty($azienda['codice_fiscale']) ? $azienda['codice_fiscale'] : $azienda['piva']);
|
||||
if (!empty(setting('Terzo intermediario'))) {
|
||||
$anagrafica = Anagrafica::find(setting('Terzo intermediario'));
|
||||
} else {
|
||||
$anagrafica = static::getAzienda();
|
||||
}
|
||||
|
||||
$prefix = 'IT'.(!empty($anagrafica['codice_fiscale']) ? $anagrafica['codice_fiscale'] : $anagrafica['piva']);
|
||||
|
||||
if (empty($this->documento['progressivo_invio']) || !empty($new)) {
|
||||
$database = database();
|
||||
|
@ -355,7 +361,13 @@ class FatturaElettronica
|
|||
*/
|
||||
protected static function getDatiTrasmissione($fattura)
|
||||
{
|
||||
$azienda = static::getAzienda();
|
||||
// Se in impostazioni ho definito un terzo intermediario (es. Aruba, Teamsystem)
|
||||
if (!empty(setting('Terzo intermediario'))) {
|
||||
$anagrafica = Anagrafica::find(setting('Terzo intermediario'));
|
||||
} else {
|
||||
$anagrafica = static::getAzienda();
|
||||
}
|
||||
|
||||
$documento = $fattura->getDocumento();
|
||||
$cliente = $fattura->getCliente();
|
||||
|
||||
|
@ -372,25 +384,28 @@ class FatturaElettronica
|
|||
$default_code = ($cliente->nazione->iso2 != 'IT') ? 'XXXXXXX' : $default_code;
|
||||
|
||||
// Generazione dell'header
|
||||
// Se all'Anagrafe Tributaria il trasmittente è censito con il codice fiscale
|
||||
$result = [
|
||||
'IdTrasmittente' => [
|
||||
'IdPaese' => $azienda->nazione->iso2,
|
||||
'IdCodice' => (!empty($azienda['codice_fiscale'])) ? $azienda['codice_fiscale'] : $azienda['piva'],
|
||||
],
|
||||
// Se all'Anagrafe Tributaria il trasmittente è censito con il codice fiscale, es. ditte individuali
|
||||
$result = [
|
||||
'IdTrasmittente' => [
|
||||
'IdPaese' => $anagrafica->nazione->iso2,
|
||||
'IdCodice' => (!empty($anagrafica['codice_fiscale'])) ? $anagrafica['codice_fiscale'] : str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']),
|
||||
]
|
||||
];
|
||||
|
||||
$result[] = [
|
||||
'ProgressivoInvio' => $documento['progressivo_invio'],
|
||||
'FormatoTrasmissione' => ($cliente['tipo'] == 'Ente pubblico') ? 'FPA12' : 'FPR12',
|
||||
'CodiceDestinatario' => !empty($cliente['codice_destinatario']) ? $cliente['codice_destinatario'] : $default_code,
|
||||
];
|
||||
|
||||
// Telefono di contatto
|
||||
if (!empty($azienda['telefono'])) {
|
||||
$result['ContattiTrasmittente']['Telefono'] = $azienda['telefono'];
|
||||
if (!empty($anagrafica['telefono'])) {
|
||||
$result['ContattiTrasmittente']['Telefono'] = $anagrafica['telefono'];
|
||||
}
|
||||
|
||||
// Email di contatto
|
||||
if (!empty($azienda['email'])) {
|
||||
$result['ContattiTrasmittente']['Email'] = $azienda['email'];
|
||||
if (!empty($anagrafica['email'])) {
|
||||
$result['ContattiTrasmittente']['Email'] = $anagrafica['email'];
|
||||
}
|
||||
|
||||
// Inizializzazione PEC solo se anagrafica azienda e codice destinatario non compilato, per privato e PA la PEC non serve
|
||||
|
@ -412,11 +427,12 @@ class FatturaElettronica
|
|||
|
||||
// Partita IVA (obbligatoria se presente)
|
||||
if (!empty($anagrafica['piva'])) {
|
||||
if (!empty($anagrafica->nazione->iso2)) {
|
||||
|
||||
if (!empty($anagrafica->nazione->iso2)) {
|
||||
$result['IdFiscaleIVA']['IdPaese'] = $anagrafica->nazione->iso2;
|
||||
}
|
||||
|
||||
$result['IdFiscaleIVA']['IdCodice'] = $anagrafica['piva'];
|
||||
$result['IdFiscaleIVA']['IdCodice'] = str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']);
|
||||
}
|
||||
|
||||
// Codice fiscale
|
||||
|
@ -484,15 +500,14 @@ class FatturaElettronica
|
|||
*/
|
||||
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)
|
||||
if ($documento['is_fattura_conto_terzi']){
|
||||
$azienda = $fattura->getCliente();
|
||||
}else{
|
||||
$azienda = static::getAzienda();
|
||||
}
|
||||
//Fattura per conto terzi, il cliente diventa il cedente al posto della mia Azienda (fornitore)
|
||||
if ($documento['is_fattura_conto_terzi']) {
|
||||
$azienda = $fattura->getCliente();
|
||||
} else {
|
||||
$azienda = static::getAzienda();
|
||||
}
|
||||
|
||||
$result = [
|
||||
'DatiAnagrafici' => static::getDatiAnagrafici($azienda, true),
|
||||
|
@ -544,15 +559,14 @@ class FatturaElettronica
|
|||
*/
|
||||
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
|
||||
if ($documento['is_fattura_conto_terzi']){
|
||||
$cliente = static::getAzienda();
|
||||
}else{
|
||||
$cliente = $fattura->getCliente();
|
||||
}
|
||||
//Fattura per conto terzi, la mia Azienda (fornitore) diventa il cessionario al posto del cliente
|
||||
if ($documento['is_fattura_conto_terzi']) {
|
||||
$cliente = static::getAzienda();
|
||||
} else {
|
||||
$cliente = $fattura->getCliente();
|
||||
}
|
||||
|
||||
$result = [
|
||||
'DatiAnagrafici' => static::getDatiAnagrafici($cliente),
|
||||
|
@ -596,19 +610,18 @@ class FatturaElettronica
|
|||
// TODO: 'Causale' => $documento['causale'],
|
||||
];
|
||||
|
||||
|
||||
$righe = $fattura->getRighe();
|
||||
|
||||
// Ritenuta d'Acconto
|
||||
// Ritenuta d'Acconto
|
||||
$id_ritenuta = null;
|
||||
$totale_ritenutaacconto = 0;
|
||||
$totale_ritenutaacconto = 0;
|
||||
|
||||
// Rivalsa
|
||||
$id_rivalsainps = null;
|
||||
// Rivalsa
|
||||
$id_rivalsainps = null;
|
||||
$totale_rivalsainps = 0;
|
||||
|
||||
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'];
|
||||
$totale_ritenutaacconto += $riga['ritenutaacconto'];
|
||||
}
|
||||
|
@ -880,13 +893,13 @@ class FatturaElettronica
|
|||
$riga['qta'] = abs($riga['qta']);
|
||||
$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'])) {
|
||||
$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
|
||||
$riga['qta'] = (!empty($riga['qta'])) ? $riga['qta'] : 1;
|
||||
// Fix per qta, deve sempre essere impostata almeno a 1
|
||||
$riga['qta'] = !empty($riga['qta']) ? $riga['qta'] : 1;
|
||||
|
||||
$prezzo_unitario = $riga['subtotale'] / $riga['qta'];
|
||||
$prezzo_totale = $riga['subtotale'] - $riga['sconto'];
|
||||
|
@ -915,42 +928,16 @@ class FatturaElettronica
|
|||
$dettaglio['CodiceArticolo'] = $codice_articolo;
|
||||
}
|
||||
|
||||
//Non ammesso ’
|
||||
//$descrizione = html_entity_decode($riga['descrizione'], ENT_HTML5, 'UTF-8');
|
||||
// Non ammesso ’
|
||||
// $descrizione = html_entity_decode($riga['descrizione'], ENT_HTML5, 'UTF-8');
|
||||
$descrizione = str_replace('>', ' ', $riga['descrizione']);
|
||||
$descrizione = str_replace('…', '...', $descrizione);
|
||||
|
||||
$dettaglio['Descrizione'] = str_replace('’', ' ', $descrizione);
|
||||
|
||||
//Aggiungo il riferimento della riga alla descrizione
|
||||
$rif = '';
|
||||
if (!empty($riga['idordine'])) {
|
||||
$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']));
|
||||
$ref = doc_references($riga, 'entrata', ['iddocumento']);
|
||||
if (!empty($ref)) {
|
||||
$dettaglio['Descrizione'] .= "\n".$ref['description'];
|
||||
}
|
||||
|
||||
$dettaglio['Quantita'] = $riga['qta'];
|
||||
|
@ -1003,10 +990,9 @@ class FatturaElettronica
|
|||
}
|
||||
|
||||
// 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'])) {
|
||||
|
||||
$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 = [
|
||||
'TipoDato' => 'CASSA-PREV',
|
||||
|
|
|
@ -44,7 +44,7 @@ class Ricevuta
|
|||
$data = $this->xml['DataOraRicezione'];
|
||||
|
||||
$this->fattura->codice_stato_fe = $codice;
|
||||
$this->fattura->descrizione_stato_fe = $descrizione;
|
||||
$this->fattura->descrizione_ricevuta_fe = $descrizione;
|
||||
$this->fattura->data_stato_fe = date('Y-m-d H:i:s', strtotime($data));
|
||||
$this->fattura->save();
|
||||
|
||||
|
|
|
@ -51,9 +51,7 @@ UPDATE `fe_stati_documento` SET `descrizione`='In elaborazione' WHERE `codice`='
|
|||
|
||||
-- Inserito stato errore interno OSM
|
||||
INSERT INTO `fe_stati_documento`( `codice`, `descrizione`, `icon` ) VALUES( 'ERVAL', 'Errore di validazione', 'fa fa-edit text-danger' );
|
||||
|
||||
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`;
|
||||
ALTER TABLE `co_documenti` ADD `data_stato_fe` TIMESTAMP, ADD `descrizione_ricevuta_fe` TEXT;
|
||||
|
||||
-- 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';
|
||||
|
@ -77,3 +75,13 @@ CREATE TABLE IF NOT EXISTS `co_ritenuta_contributi` (
|
|||
UPDATE `zz_views` SET `query` = '(SELECT GROUP_CONCAT(DISTINCT `name` SEPARATOR \'\r\n \') FROM zz_operations INNER JOIN zz_emails ON zz_operations.id_email = zz_emails.id WHERE zz_operations.id_module = (SELECT id FROM zz_modules WHERE `name` = \'Fatture di vendita\') AND op = \'send-email\' AND id_record = co_documenti.id ORDER BY zz_operations.created_at DESC LIMIT 1)' WHERE `zz_views`.`name` = 'icon_title_Inviata' AND id_module = (SELECT id FROM zz_modules WHERE name = 'Fatture di vendita');
|
||||
|
||||
UPDATE `zz_views` SET `query` = 'IF((SELECT GROUP_CONCAT(DISTINCT `name` SEPARATOR \'\r\n \') FROM zz_operations INNER JOIN zz_emails ON zz_operations.id_email = zz_emails.id WHERE zz_operations.id_module = (SELECT id FROM zz_modules WHERE `name` = \'Fatture di vendita\') AND op = \'send-email\' AND id_record = co_documenti.id ORDER BY zz_operations.created_at DESC LIMIT 1) IS NOT NULL, \'fa fa-envelope text-success\', \'\') ' WHERE `zz_views`.`name` = 'icon_Inviata' AND id_module = (SELECT id FROM zz_modules WHERE name = 'Fatture di vendita');
|
||||
|
||||
-- Limitato il controllo numeri fattura duplicati all'anno in corso
|
||||
UPDATE `zz_views` SET `query` = 'IF((SELECT COUNT(t.numero_esterno) FROM co_documenti AS t WHERE t.numero_esterno = co_documenti.numero_esterno AND t.numero_esterno != '''' AND t.id_segment = co_documenti.id_segment AND idtipodocumento IN (SELECT id FROM co_tipidocumento WHERE dir = ''entrata'') AND t.data >= ''|period_start|'' AND t.data <= ''|period_end|'' AND YEAR(t.data) = YEAR(co_documenti.data) ) > 1, ''red'', '''') ' WHERE `zz_views`.`name` = '_bg_' AND id_module = (SELECT id FROM zz_modules WHERE name = 'Fatture di vendita');
|
||||
|
||||
-- Fornitore terzo intermediario abilitato all'invio della fattura elettronica
|
||||
UPDATE `zz_settings` SET `help` = 'Fornitore, mio intermediario abilitato all\'invio della fattura elettronica (es. Aruba, Teamsystem ecc...)' WHERE `zz_settings`.`nome` = 'Terzo intermediario';
|
||||
|
||||
-- Aggiunta percentuale_imponibile su cui applicare il calcolo della ritenuta
|
||||
ALTER TABLE `co_ritenutaacconto` ADD `percentuale_imponibile` DECIMAL(5,2) NOT NULL AFTER `esente`;
|
||||
|
||||
|
|
Loading…
Reference in New Issue