This commit is contained in:
Fabio Lovato 2019-01-25 15:55:16 +01:00
commit d9c960403e
18 changed files with 132 additions and 121 deletions

View File

@ -5,6 +5,7 @@ return [
'modules/anagrafiche' => 'Modules\Anagrafiche', 'modules/anagrafiche' => 'Modules\Anagrafiche',
'modules/articoli' => 'Modules\Articoli', 'modules/articoli' => 'Modules\Articoli',
'modules/ritenute' => 'Modules\Ritenute', 'modules/ritenute' => 'Modules\Ritenute',
'modules/rivalse' => 'Modules\Rivalse',
'modules/iva' => 'Modules\Iva', 'modules/iva' => 'Modules\Iva',
'modules/ddt' => 'Modules\DDT', 'modules/ddt' => 'Modules\DDT',
'modules/fatture' => 'Modules\Fatture', 'modules/fatture' => 'Modules\Fatture',

View File

@ -111,7 +111,7 @@ Monolog\ErrorHandler::register($logger, [], Monolog\Logger::ERROR, Monolog\Logge
// Aggiunta di Monolog a Whoops // Aggiunta di Monolog a Whoops
if (App::debug()) { if (App::debug()) {
$whoops->pushHandler(function (\Whoops\Exception\ErrorException $exception, $inspector, $run) use ($logger) { $whoops->pushHandler(function ($exception, $inspector, $run) use ($logger) {
$logger->addError($exception->getMessage(), [ $logger->addError($exception->getMessage(), [
'code' => $exception->getCode(), 'code' => $exception->getCode(),
'message' => $exception->getMessage(), 'message' => $exception->getMessage(),

View File

@ -96,32 +96,6 @@ abstract class Article extends Row
return $this->belongsTo(Original::class, 'idarticolo'); return $this->belongsTo(Original::class, 'idarticolo');
} }
public function copiaIn(Document $document)
{
$class = get_class($document);
$namespace = implode('\\', explode('\\', $class, -1));
$current = get_class($this);
$pieces = explode('\\', $current);
$type = end($pieces);
$object = $namespace.'\\Components\\'.$type;
$attributes = $this->getAttributes();
unset($attributes['id']);
$model = $object::build($document, $this->articolo);
$model->save();
$model = $object::find($model->id);
$accepted = $model->getAttributes();
$attributes = array_intersect_key($attributes, $accepted);
$model->fill($attributes);
return $model;
}
protected static function boot() protected static function boot()
{ {
parent::boot(true); parent::boot(true);
@ -169,4 +143,9 @@ abstract class Article extends Row
return true; return true;
} }
protected function customCopiaIn($original)
{
$this->articolo()->associate($original->articolo);
}
} }

View File

@ -23,6 +23,11 @@ abstract class Description extends Model
return $model; return $model;
} }
/**
* Imposta il proprietario dell'oggetto e l'ordine relativo all'interno delle righe.
*
* @param Document $document
*/
public function setParent(Document $document) public function setParent(Document $document)
{ {
$this->parent()->associate($document); $this->parent()->associate($document);
@ -35,8 +40,17 @@ abstract class Description extends Model
$this->save(); $this->save();
} }
public function copiaIn(Document $document) /**
* Copia l'oggetto (articolo, riga, descrizione) nel corrispettivo per il documento indicato.
*
* @param Document $document
* @param float|null $qta
*
* @return self
*/
public function copiaIn(Document $document, $qta = null)
{ {
// Individuazione classe di destinazione
$class = get_class($document); $class = get_class($document);
$namespace = implode('\\', explode('\\', $class, -1)); $namespace = implode('\\', explode('\\', $class, -1));
@ -46,18 +60,34 @@ abstract class Description extends Model
$object = $namespace.'\\Components\\'.$type; $object = $namespace.'\\Components\\'.$type;
// Attributi dell'oggetto da copiare
$attributes = $this->getAttributes(); $attributes = $this->getAttributes();
unset($attributes['id']); unset($attributes['id']);
$model = $object::build($document); if ($qta !== null) {
$attributes['qta'] = $qta;
}
// Creazione del nuovo oggetto
$model = new $object();
$model->setParent($document);
$model->customCopiaIn($this);
$model->save(); $model->save();
// Impostazione degli attributi
$model = $object::find($model->id); $model = $object::find($model->id);
$accepted = $model->getAttributes(); $accepted = $model->getAttributes();
$attributes = array_intersect_key($attributes, $accepted); $attributes = array_intersect_key($attributes, $accepted);
$model->fill($attributes); $model->fill($attributes);
$model->save();
// Rimozione quantità evasa
$this->qta_evasa = $this->qta_evasa + $attributes['qta'];
return $model; return $model;
} }
@ -65,6 +95,15 @@ abstract class Description extends Model
abstract public function getParentID(); abstract public function getParentID();
/**
* Azione personalizzata per la copia dell'oggetto.
*
* @param $original
*/
protected function customCopiaIn($original)
{
}
protected static function boot($bypass = false) protected static function boot($bypass = false)
{ {
parent::boot(); parent::boot();

View File

@ -6,7 +6,7 @@ use Common\Document;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Modules\Iva\Aliquota; use Modules\Iva\Aliquota;
use Modules\Ritenute\RitenutaAcconto; use Modules\Ritenute\RitenutaAcconto;
use Modules\Ritenute\RivalsaINPS; use Modules\Rivalse\RivalsaINPS;
abstract class Row extends Description abstract class Row extends Description
{ {

View File

@ -63,7 +63,6 @@ switch (post('op')) {
$codice_cig = post('codice_cig'); $codice_cig = post('codice_cig');
$codice_cup = post('codice_cup'); $codice_cup = post('codice_cup');
$query = 'UPDATE co_contratti SET idanagrafica='.prepare($idanagrafica).', $query = 'UPDATE co_contratti SET idanagrafica='.prepare($idanagrafica).',
idsede='.prepare($idsede).', idsede='.prepare($idsede).',
idstato='.prepare($idstato).', idstato='.prepare($idstato).',

View File

@ -444,7 +444,7 @@ switch (post('op')) {
if (!empty(post('import'))) { if (!empty(post('import'))) {
// Replicazione delle righe del contratto sul documento // Replicazione delle righe del contratto sul documento
$righe = $dbo->fetchArray('SELECT idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, IFNULL( (SELECT mg_articoli.abilita_serial FROM mg_articoli WHERE mg_articoli.id=co_righe_contratti.idarticolo), 0 ) AS abilita_serial FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto)); $righe = $dbo->fetchArray('SELECT *, IFNULL( (SELECT mg_articoli.abilita_serial FROM mg_articoli WHERE mg_articoli.id=co_righe_contratti.idarticolo), 0 ) AS abilita_serial FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto));
foreach ($righe as $key => $riga) { foreach ($righe as $key => $riga) {
$subtot = $riga['subtotale']; $subtot = $riga['subtotale'];

View File

@ -555,15 +555,13 @@ function ricalcola_costiagg_fattura($iddocumento, $idrivalsainps = '', $idritenu
$marca_da_bollo = 0; $marca_da_bollo = 0;
if (abs($bolli) > 0 && abs($netto_a_pagare > setting("Soglia minima per l'applicazione della marca da bollo"))) { if (abs($bolli) > 0 && abs($netto_a_pagare > setting("Soglia minima per l'applicazione della marca da bollo"))) {
//Controllo che tra le iva ce ne sia almeno una con natura N1, N2, N3 o N4 //Controllo che tra le iva ce ne sia almeno una con natura N1, N2, N3 o N4
$check_natura = $dbo->fetchArray("SELECT codice_natura_fe FROM co_righe_documenti INNER JOIN co_iva ON co_righe_documenti.idiva=co_iva.id WHERE iddocumento=".prepare($iddocumento)." AND codice_natura_fe IN('N1','N2','N3','N4') GROUP BY codice_natura_fe"); $check_natura = $dbo->fetchArray('SELECT codice_natura_fe FROM co_righe_documenti INNER JOIN co_iva ON co_righe_documenti.idiva=co_iva.id WHERE iddocumento='.prepare($iddocumento)." AND codice_natura_fe IN('N1','N2','N3','N4') GROUP BY codice_natura_fe");
if(($dir == 'entrata' && sizeof($check_natura)>0) || $dir == 'uscita'){ if (($dir == 'entrata' && sizeof($check_natura) > 0) || $dir == 'uscita') {
$marca_da_bollo = $bolli; $marca_da_bollo = $bolli;
}else{ } else {
$marca_da_bollo = 0.00; $marca_da_bollo = 0.00;
} }
} }
// Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo // Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo

View File

@ -108,7 +108,7 @@ foreach ($righe as $riga) {
} }
$extra_riga = ''; $extra_riga = '';
if (!$riga['is_descrizione']){ if (!$riga['is_descrizione']) {
$extra_riga = tr('_DESCRIZIONE_CONTO_ _ID_DOCUMENTO_ _CODICE_CIG_ _CODICE_CUP_ ', [ $extra_riga = tr('_DESCRIZIONE_CONTO_ _ID_DOCUMENTO_ _CODICE_CIG_ _CODICE_CUP_ ', [
'_DESCRIZIONE_CONTO_' => $riga['descrizione_conto'] ?: null, '_DESCRIZIONE_CONTO_' => $riga['descrizione_conto'] ?: null,
'_CODICE_CIG_' => $riga['codice_cig'] ? ',CIG: '.$riga['codice_cig'] : null, '_CODICE_CIG_' => $riga['codice_cig'] ? ',CIG: '.$riga['codice_cig'] : null,

View File

@ -64,7 +64,6 @@ switch (post('op')) {
$codice_cig = post('codice_cig'); $codice_cig = post('codice_cig');
$codice_cup = post('codice_cup'); $codice_cup = post('codice_cup');
$query = 'UPDATE co_preventivi SET idstato='.prepare($idstato).','. $query = 'UPDATE co_preventivi SET idstato='.prepare($idstato).','.
' nome='.prepare($nome).','. ' nome='.prepare($nome).','.
' idanagrafica='.prepare($idanagrafica).','. ' idanagrafica='.prepare($idanagrafica).','.

View File

@ -13,7 +13,6 @@ if (!in_array($record['stato'], ['Bozza', 'Rifiutato', 'In attesa di conferma'])
$disabled = 'disabled'; $disabled = 'disabled';
} }
// crea ordine // crea ordine
echo ' echo '
<div style="margin-left:4px;" class="dropdown pull-right" > <div style="margin-left:4px;" class="dropdown pull-right" >
@ -31,7 +30,6 @@ echo '
</ul> </ul>
</div>'; </div>';
//duplica preventivo //duplica preventivo
echo ' echo '
<form action="" method="post" id="form-copy"> <form action="" method="post" id="form-copy">

View File

@ -1,6 +1,6 @@
<?php <?php
namespace Modules\Ritenute; namespace Modules\Rivalse;
use Common\Model; use Common\Model;

View File

@ -633,11 +633,13 @@ class FatturaElettronica
]; ];
$ritenuta_predefinita = setting("Percentuale ritenuta d'acconto"); $ritenuta_predefinita = setting("Percentuale ritenuta d'acconto");
if (!empty($ritenuta_predefinita)) if (!empty($ritenuta_predefinita)) {
$dati_cassa['Ritenuta'] = 'SI'; $dati_cassa['Ritenuta'] = 'SI';
}
if (!empty($iva['codice_natura_fe'])) if (!empty($iva['codice_natura_fe'])) {
$dati_cassa['Natura'] = $iva['codice_natura_fe']; $dati_cassa['Natura'] = $iva['codice_natura_fe'];
}
//$dati_cassa['RiferimentoAmministrazione'] = ''; //$dati_cassa['RiferimentoAmministrazione'] = '';
@ -882,11 +884,10 @@ class FatturaElettronica
//2.2.1.3 //2.2.1.3
if (!empty($riga['idarticolo'])) { if (!empty($riga['idarticolo'])) {
$tipo_codice = $database->fetchOne('SELECT `mg_categorie`.`nome` FROM `mg_categorie` INNER JOIN `mg_articoli` ON `mg_categorie`.`id` = `mg_articoli`.`id_categoria` WHERE `mg_articoli`.`id` = '.prepare($riga['idarticolo']))['nome']; $tipo_codice = $database->fetchOne('SELECT `mg_categorie`.`nome` FROM `mg_categorie` INNER JOIN `mg_articoli` ON `mg_categorie`.`id` = `mg_articoli`.`id_categoria` WHERE `mg_articoli`.`id` = '.prepare($riga['idarticolo']))['nome'];
$codice_articolo = [ $codice_articolo = [
'CodiceTipo' => ($tipo_codice) ? : 'OSM', 'CodiceTipo' => ($tipo_codice) ?: 'OSM',
'CodiceValore' => $database->fetchOne('SELECT `codice` FROM `mg_articoli` WHERE `id` = '.prepare($riga['idarticolo']))['codice'], 'CodiceValore' => $database->fetchOne('SELECT `codice` FROM `mg_articoli` WHERE `id` = '.prepare($riga['idarticolo']))['codice'],
]; ];
@ -895,10 +896,10 @@ class FatturaElettronica
//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("&gt;", " ", $riga['descrizione']); $descrizione = str_replace('&gt;', ' ', $riga['descrizione']);
$descrizione = str_replace("", "...", $descrizione); $descrizione = str_replace('…', '...', $descrizione);
$dettaglio['Descrizione'] = str_replace("", " ", $descrizione); $dettaglio['Descrizione'] = str_replace('', ' ', $descrizione);
$dettaglio['Quantita'] = $riga['qta']; $dettaglio['Quantita'] = $riga['qta'];
if (!empty($riga['um'])) { if (!empty($riga['um'])) {

View File

@ -45,7 +45,7 @@ switch (filter('op')) {
//Processo il file ricevuto //Processo il file ricevuto
$process_result = Interaction::processXML($filename); $process_result = Interaction::processXML($filename);
if($process_result!=''){ if ($process_result != '') {
flash()->error($process_result); flash()->error($process_result);
redirect(ROOTDIR.'/controller.php?id_module='.$id_module); redirect(ROOTDIR.'/controller.php?id_module='.$id_module);
exit; exit;

View File

@ -222,7 +222,6 @@ class FatturaElettronica
$sconti = $riga['ScontoMaggiorazione']; $sconti = $riga['ScontoMaggiorazione'];
if (!empty($sconti)) { if (!empty($sconti)) {
foreach ($sconti as $key => $sconto) { foreach ($sconti as $key => $sconto) {
$tipo = !empty($sconto['Percentuale']) ? 'PRC' : 'EUR'; $tipo = !empty($sconto['Percentuale']) ? 'PRC' : 'EUR';
$unitario = $sconto['Percentuale'] ?: $sconto['Importo']; $unitario = $sconto['Percentuale'] ?: $sconto['Importo'];
@ -230,15 +229,13 @@ class FatturaElettronica
//SConto o MaGgiorazione //SConto o MaGgiorazione
$unitario = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario; $unitario = ($sconto['Tipo'] == 'SC') ? $unitario : -$unitario;
if (!empty($unitario)){ if (!empty($unitario)) {
$obj->sconto_unitario = $unitario; $obj->sconto_unitario = $unitario;
$obj->tipo_sconto = $tipo; $obj->tipo_sconto = $tipo;
} }
} }
} }
$obj->save(); $obj->save();
} }
} }

View File

@ -20,15 +20,15 @@ class Interaction extends Connection
$code = $body['code']; $code = $body['code'];
if($code=='200'){ if ($code == '200') {
$files = $body['results']; $files = $body['results'];
foreach ($files as $file) { foreach ($files as $file) {
/** /*
* Verifico che l'XML non sia già stato importato nel db * Verifico che l'XML non sia già stato importato nel db
*/ */
if( preg_match( "/^([A-Z]{2})(.+?)_([^\.]+)\.xml/i", $file, $m ) ){ if (preg_match("/^([A-Z]{2})(.+?)_([^\.]+)\.xml/i", $file, $m)) {
$partita_iva = $m[2]; $partita_iva = $m[2];
$progressivo_invio = $m[3]; $progressivo_invio = $m[3];
$fattura = database()->fetchOne('SELECT co_documenti.id FROM (co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id) INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica WHERE co_tipidocumento.dir="uscita" AND an_anagrafiche.piva='.prepare($partita_iva).' AND co_documenti.progressivo_invio='.prepare($progressivo_invio)); $fattura = database()->fetchOne('SELECT co_documenti.id FROM (co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id) INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica WHERE co_tipidocumento.dir="uscita" AND an_anagrafiche.piva='.prepare($partita_iva).' AND co_documenti.progressivo_invio='.prepare($progressivo_invio));
@ -68,10 +68,10 @@ class Interaction extends Connection
$body = static::responseBody($response); $body = static::responseBody($response);
if($body['processed']=='0'){ if ($body['processed'] == '0') {
$message = $body['code']." - ".$body['message']; $message = $body['code'].' - '.$body['message'];
}else{ } else {
$message = ""; $message = '';
} }
return $message; return $message;

View File

@ -157,7 +157,7 @@ class AJAX
if (!empty($permissions)) { if (!empty($permissions)) {
$modules = Modules::getAvailableModules(); $modules = Modules::getAvailableModules();
} else { } else {
$modules = Modules::getModules(); $modules = Models\Module::withoutGlobalScope('enabled')->get();
} }
$modules = $modules->toArray(); $modules = $modules->toArray();

View File

@ -100,7 +100,7 @@ class Generator
$values = array_column($replaces, 'regex'); $values = array_column($replaces, 'regex');
$pattern = preg_replace('/#{1,}/', '#', $pattern); $pattern = preg_replace('/#{1,}/', '#', $pattern);
$pattern = str_replace('\\#','#',preg_quote($pattern, '/')); $pattern = str_replace('\\#', '#', preg_quote($pattern, '/'));
$pattern = str_replace(array_keys($replaces), array_values($values), $pattern); $pattern = str_replace(array_keys($replaces), array_values($values), $pattern);
// Individuazione dei valori // Individuazione dei valori