Compare commits
9 Commits
6bda396b75
...
016dfdf098
Author | SHA1 | Date |
---|---|---|
Luca | 016dfdf098 | |
Dasc3er | 40ba5847d1 | |
Dasc3er | 19cc037b75 | |
MatteoPistorello | 4331a1b654 | |
MatteoPistorello | f004bea56f | |
Dasc3er | 7e12db4850 | |
Dasc3er | 905d23247e | |
Dasc3er | c663f7f2a6 | |
Dasc3er | 62e250873f |
32
CHANGELOG.md
32
CHANGELOG.md
|
@ -4,7 +4,7 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi
|
||||||
|
|
||||||
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
|
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
|
||||||
|
|
||||||
- [2.4.24 (2021-00-00)](#2424-2021-00-00)
|
- [2.4.24 (2021-07-28)](#2424-2021-07-28)
|
||||||
- [2.4.23 (2021-05-18)](#2423-2021-05-18)
|
- [2.4.23 (2021-05-18)](#2423-2021-05-18)
|
||||||
- [2.4.22 (2021-03-01)](#2422-2021-03-01)
|
- [2.4.22 (2021-03-01)](#2422-2021-03-01)
|
||||||
- [2.4.21 (2021-01-14)](#2421-2021-01-14)
|
- [2.4.21 (2021-01-14)](#2421-2021-01-14)
|
||||||
|
@ -35,29 +35,47 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
|
||||||
- [2.2 (2016-11-10)](#22-2016-11-10)
|
- [2.2 (2016-11-10)](#22-2016-11-10)
|
||||||
- [2.1 (2015-04-02)](#21-2015-04-02)
|
- [2.1 (2015-04-02)](#21-2015-04-02)
|
||||||
|
|
||||||
## 2.4.24 (2021-00-00)
|
## 2.4.24 (2021-07-28)
|
||||||
|
|
||||||
### Aggiunto (Added)
|
### Aggiunto (Added)
|
||||||
- Aggiunta nel calendario della Dashboard visualizzazione dei preventivi pianificabili in corrispondenza alla data di accettazione e conclusione.
|
- Aggiunta nel calendario della Dashboard visualizzazione dei preventivi pianificabili in corrispondenza alla data di accettazione e conclusione.
|
||||||
- Aggiunta impostazione per la visualizzazione delle ore nella stampa intervento (Decimale, Sessantesimi).
|
- Aggiunta impostazione per la visualizzazione delle ore nella stampa intervento (Decimale, Sessantesimi).
|
||||||
- Aggiunta possibilità di selezionare la sede di partenza della merce in fase di aggiunta articolo da un'attività
|
- Aggiunta possibilità di selezionare la sede di partenza della merce in fase di aggiunta articolo da un'attività
|
||||||
- Aggiunta colonna Scaduto nel modulo Scadenzario
|
- Aggiunta colonna *Scaduto* nel modulo **Scadenzario**
|
||||||
- Aggiunto campi confermato, data e ora evasione nel modulo **Preventivi**
|
- Aggiunto campi confermato, data e ora evasione nel modulo **Preventivi**
|
||||||
- Aggiunta possibilità di creare un nuovi conti di secondo livello dal modulo **Piano dei conti**
|
- Aggiunta possibilità di creare un nuovi conti di secondo livello dal modulo **Piano dei conti**
|
||||||
- Aggiunta impostazione per la rimozione del blocco sulle quantità massime importabili fra documenti
|
- Aggiunta impostazione per la rimozione del blocco sulle quantità massime importabili fra documenti
|
||||||
- Aggiunta colonna **Rif. fattura** nei moduli Ordini cliente e fornitore
|
- Aggiunta colonna **Rif. fattura** nei moduli Ordini cliente e fornitore
|
||||||
- Aggiunta gestione come costo e ricavo per i conti di secondo livello
|
- Aggiunta gestione come costo e ricavo per i conti di secondo livello
|
||||||
|
- Aggiunta gestione di DDT di trasporto interno tra sedi dell'anagrafica Azienda, con creazione semplificata del DDT di direzione opposta
|
||||||
|
- Aggiunto codice e prezzo nella stampa *Barcode*
|
||||||
|
- Aggiunto riquadro destinazione diversa nella stampe documenti (se presente)
|
||||||
|
- Aggiunta azione di gruppo in **Fatture di acquisto** per l'esportazione delle fatture FE in PDF
|
||||||
|
- Separazione plugin per la visualizzazione di *Listini Clienti* e *Listini Fornitori*
|
||||||
|
- Introduzione importazione Preventivi e Contratti in Attività
|
||||||
|
- Aggiunta colonna reddito nella stampa del **Bilancio**
|
||||||
|
- Aggiunta autenticazione OAuth2 per gli **Account email** (funzionante con Google, sperimentale con Microsoft)
|
||||||
|
- Aggiunta importazione di **Preventivi** e **Contratti** in **Attività**, senza collegamento contabile per i *Consuntivi*
|
||||||
|
- Aggiunta sezione di riepilogo dettagli Cliente in apertura di nuove **Attività**
|
||||||
|
|
||||||
|
### Modificato (Changed)
|
||||||
|
- Rimossa dipendenza JQuery per la gestione dell'ordinamento (righe e widget) e per la ricerca generale
|
||||||
|
- Modifica del sistema di selezione delle righe nelle tabelle principali, per aggiungere un contatore delle righe selezionate
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Sostituito plugin **Componenti** nel modulo Impianti con la possibilità di inserire gli articoli di magazzino
|
- Sostituito plugin **Componenti** nel modulo Impianti con la possibilità di inserire gli articoli di magazzino
|
||||||
- Possibilità di ripristinare un conto cliente/fornitore dal modulo **Anagrafiche** se eliminato
|
- Possibilità di ripristinare un conto cliente/fornitore dal modulo **Anagrafiche** se eliminato
|
||||||
|
- Fix visualizzazione referenti nel plugin **Sedi**
|
||||||
|
- Fix stampa *Registro IVA*
|
||||||
|
- Fix inclusione CSS personalizzato da **Impostazioni**
|
||||||
|
- Fix esportazione footer delle tabelle principali
|
||||||
|
|
||||||
## 2.4.23 (2021-05-18)
|
## 2.4.23 (2021-05-18)
|
||||||
|
|
||||||
### Aggiunto (Added)
|
### Aggiunto (Added)
|
||||||
- Nuovo *Sconto finale* per gli **Ordini**, **Preventivi**, **DDT** e **Contratti**, influenza il valore *Netto a pagare* del documento.
|
- Nuovo *Sconto finale* per gli **Ordini**, **Preventivi**, **DDT** e **Contratti**, influenza il valore *Netto a pagare* del documento.
|
||||||
- Nuovo filtro in attività per mostrare al tecnico solo le attività assegnate.
|
- Nuovo filtro in attività per mostrare al tecnico solo le attività assegnate.
|
||||||
- Nuovo filtro in contratti per mostrare al cliente solo i contratti collegati.
|
- Nuovo filtro in contratti per mostrare al cliente solo i contratti collegati.
|
||||||
- Nuovo pulsante **Duplica Template** per copiare un template già esistente.
|
- Nuovo pulsante **Duplica Template** per copiare un template già esistente.
|
||||||
- Aggiunto controllo nelle fatture di vendita per segnalare l'eventuale fatturazione di un'attività con la data di una sessione futura rispetto alla data della fattura.
|
- Aggiunto controllo nelle fatture di vendita per segnalare l'eventuale fatturazione di un'attività con la data di una sessione futura rispetto alla data della fattura.
|
||||||
- Aggiunta possibilità di creare un ordine fornitore da un preventivo.
|
- Aggiunta possibilità di creare un ordine fornitore da un preventivo.
|
||||||
|
|
7
core.php
7
core.php
|
@ -144,7 +144,12 @@ foreach ($handlers as $handler) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Imposta Monolog come gestore degli errori
|
// Imposta Monolog come gestore degli errori
|
||||||
Monolog\ErrorHandler::register($logger, [], Monolog\Logger::ERROR, Monolog\Logger::ERROR);
|
$handler = new Monolog\ErrorHandler($logger);
|
||||||
|
if (!API\Response::isAPIRequest()) {
|
||||||
|
$handler->registerErrorHandler([]);
|
||||||
|
$handler->registerExceptionHandler(Monolog\Logger::ERROR);
|
||||||
|
}
|
||||||
|
$handler->registerFatalHandler(Monolog\Logger::ERROR);
|
||||||
|
|
||||||
// Database
|
// Database
|
||||||
$dbo = $database = database();
|
$dbo = $database = database();
|
||||||
|
|
5925
locale/catalog.pot
5925
locale/catalog.pot
File diff suppressed because it is too large
Load Diff
|
@ -24,7 +24,7 @@ use Modules\Articoli\Articolo;
|
||||||
use Modules\Preventivi\Components\Articolo as ArticoloPreventivo;
|
use Modules\Preventivi\Components\Articolo as ArticoloPreventivo;
|
||||||
use Modules\Preventivi\Preventivo;
|
use Modules\Preventivi\Preventivo;
|
||||||
use Modules\TipiIntervento\Tipo as TipoSessione;
|
use Modules\TipiIntervento\Tipo as TipoSessione;
|
||||||
use Plugins\DettagliArticolo\DettaglioPrezzo;
|
use Plugins\ListinoClienti\DettaglioPrezzo;
|
||||||
use Prints;
|
use Prints;
|
||||||
|
|
||||||
switch (post('op')) {
|
switch (post('op')) {
|
||||||
|
|
|
@ -26,7 +26,7 @@ use Modules\Anagrafiche\Sede;
|
||||||
use Modules\Articoli\Articolo;
|
use Modules\Articoli\Articolo;
|
||||||
use Modules\Articoli\Categoria;
|
use Modules\Articoli\Categoria;
|
||||||
use Modules\Iva\Aliquota;
|
use Modules\Iva\Aliquota;
|
||||||
use Plugins\DettagliArticolo\DettaglioPrezzo;
|
use Plugins\ListinoClienti\DettaglioPrezzo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Struttura per la gestione delle operazioni di importazione (da CSV) degli Articoli.
|
* Struttura per la gestione delle operazioni di importazione (da CSV) degli Articoli.
|
||||||
|
|
|
@ -436,9 +436,12 @@ $("#codice_cig, #codice_cup").bind("keyup change", function(e) {
|
||||||
|
|
||||||
// Collegamenti diretti
|
// Collegamenti diretti
|
||||||
// Fatture o interventi collegati a questo contratto
|
// Fatture o interventi collegati a questo contratto
|
||||||
$elementi = $dbo->fetchArray('SELECT 0 AS `codice`, `co_documenti`.`id` AS `id`, `co_documenti`.`numero` AS `numero`, `co_documenti`.`numero_esterno` AS `numero_esterno`, `co_documenti`.`data`, `co_tipidocumento`.`descrizione` AS `tipo_documento`, `co_tipidocumento`.`dir` AS `dir` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idcontratto` = '.prepare($id_record).')'.'
|
$elementi = $dbo->fetchArray('SELECT `co_documenti`.`id`, `co_documenti`.`data`, `co_documenti`.`numero`, `co_documenti`.`numero_esterno`, `co_tipidocumento`.`descrizione` AS tipo_documento, IF(`co_tipidocumento`.`dir` = \'entrata\', \'Fatture di vendita\', \'Fatture di acquisto\') AS modulo FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idcontratto` = '.prepare($id_record).')
|
||||||
|
|
||||||
UNION
|
UNION
|
||||||
SELECT `in_interventi`.`codice` AS `codice`, `in_interventi`.`id` AS `id`, 0 AS `numero`, 0 AS `numero_esterno`, `in_interventi`.`data_richiesta` AS `data`, 0 AS `tipo_documento`, 0 AS `dir` FROM `in_interventi` WHERE `in_interventi`.`id_contratto` = '.prepare($id_record).' ORDER BY `data` ');
|
SELECT `in_interventi`.`id`, `in_interventi`.`data_richiesta`, `in_interventi`.`codice`, NULL, \'Attività\', \'Interventi\' FROM `in_interventi` JOIN `in_righe_interventi` ON `in_righe_interventi`.`idintervento` = `in_interventi`.`id` WHERE (`in_righe_interventi`.`original_document_id` = '.prepare($contratto->id).' AND `in_righe_interventi`.`original_document_type` = '.prepare(get_class($contratto)).') OR `in_interventi`.`id_contratto` = '.prepare($id_record).'
|
||||||
|
|
||||||
|
ORDER BY `data` ');
|
||||||
|
|
||||||
if (!empty($elementi)) {
|
if (!empty($elementi)) {
|
||||||
echo '
|
echo '
|
||||||
|
@ -455,31 +458,15 @@ if (!empty($elementi)) {
|
||||||
<ul>';
|
<ul>';
|
||||||
|
|
||||||
// Elenco attività o contratti collegati
|
// Elenco attività o contratti collegati
|
||||||
foreach ($elementi as $riga) {
|
foreach ($elementi as $elemento) {
|
||||||
if (!empty($riga['dir'])) {
|
$descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [
|
||||||
$descrizione = tr('_DOC_ num. _NUM_ del _DATE_', [
|
'_DOC_' => $elemento['tipo_documento'],
|
||||||
'_DOC_' => $riga['tipo_documento'],
|
'_NUM_' => !empty($elemento['numero_esterno']) ? $elemento['numero_esterno'] : $elemento['numero'],
|
||||||
'_NUM_' => !empty($riga['numero_esterno']) ? $riga['numero_esterno'] : $riga['numero'],
|
'_DATE_' => Translator::dateToLocale($elemento['data']),
|
||||||
'_DATE_' => Translator::dateToLocale($riga['data']),
|
]);
|
||||||
]);
|
|
||||||
|
|
||||||
$modulo = ($riga['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto';
|
echo '
|
||||||
$id = $riga['id'];
|
<li>'.Modules::link($elemento['modulo'], $elemento['id'], $descrizione).'</li>';
|
||||||
|
|
||||||
echo '
|
|
||||||
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
|
|
||||||
} else {
|
|
||||||
$descrizione = tr('Intervento num. _NUM_ del _DATE_', [
|
|
||||||
'_NUM_' => $riga['codice'],
|
|
||||||
'_DATE_' => Translator::dateToLocale($riga['data']),
|
|
||||||
]);
|
|
||||||
|
|
||||||
$modulo = 'Interventi';
|
|
||||||
$id = $riga['id'];
|
|
||||||
|
|
||||||
echo '
|
|
||||||
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
|
|
|
@ -51,8 +51,8 @@ echo '
|
||||||
|
|
||||||
$rs = $dbo->fetchArray('SELECT
|
$rs = $dbo->fetchArray('SELECT
|
||||||
in_interventi.id,
|
in_interventi.id,
|
||||||
CONCAT(\'Intervento numero \', in_interventi.codice, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), in_interventi.data_richiesta), \'%d/%m/%Y\'), " [", `in_statiintervento`.`descrizione` , "]") AS descrizione,
|
CONCAT(\'Attività numero \', in_interventi.codice, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), in_interventi.data_richiesta), \'%d/%m/%Y\'), " [", `in_statiintervento`.`descrizione` , "]") AS descrizione,
|
||||||
CONCAT(\'Intervento numero \', in_interventi.codice, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), in_interventi.data_richiesta), \'%d/%m/%Y\')) AS info,
|
CONCAT(\'Attività numero \', in_interventi.codice, \' del \', DATE_FORMAT(IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE in_interventi_tecnici.idintervento=in_interventi.id), in_interventi.data_richiesta), \'%d/%m/%Y\')) AS info,
|
||||||
CONCAT(\'\n\', in_interventi.descrizione) AS descrizione_intervento,
|
CONCAT(\'\n\', in_interventi.descrizione) AS descrizione_intervento,
|
||||||
IF(idclientefinale='.prepare($idanagrafica).', \'Interventi conto terzi\', \'Interventi diretti\') AS `optgroup`
|
IF(idclientefinale='.prepare($idanagrafica).', \'Interventi conto terzi\', \'Interventi diretti\') AS `optgroup`
|
||||||
FROM
|
FROM
|
||||||
|
|
|
@ -634,7 +634,7 @@ if (!$block_edit) {
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<div class="tip" data-toggle="tooltip" title="'.tr('Attività completate non collegate a preventivi o contratti e che non siano già state fatturate.').'">
|
<div class="tip" data-toggle="tooltip" title="'.tr('Attività completate non collegate a preventivi o contratti e che non siano già state fatturate.').'">
|
||||||
<a class="btn btn-sm btn-primary '.(!empty($interventi) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_intervento.php?id_module='.$id_module.'&id_record='.$id_record.'" data-title="'.tr('Aggiungi attività').'">
|
<a class="btn btn-sm btn-primary '.(!empty($interventi) ? '' : ' disabled').'" data-href="'.$structure->fileurl('add_intervento.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-title="'.tr('Aggiungi attività').'">
|
||||||
<i class="fa fa-plus"></i> '.tr('Attività').'
|
<i class="fa fa-plus"></i> '.tr('Attività').'
|
||||||
</a>
|
</a>
|
||||||
</div>';
|
</div>';
|
||||||
|
@ -644,7 +644,7 @@ if (!$block_edit) {
|
||||||
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
|
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
|
||||||
echo '
|
echo '
|
||||||
<div class="tip">
|
<div class="tip">
|
||||||
<a class="btn btn-sm btn-primary '.(!empty($preventivi) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_preventivo.php?id_module='.$id_module.'&id_record='.$id_record.'" data-title="'.tr('Aggiungi preventivo').'" data-toggle="tooltip">
|
<a class="btn btn-sm btn-primary '.(!empty($preventivi) ? '' : ' disabled').'" data-href="'.$structure->fileurl('add_preventivo.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-title="'.tr('Aggiungi preventivo').'" data-toggle="tooltip">
|
||||||
<i class="fa fa-plus"></i> '.tr('Preventivo').'
|
<i class="fa fa-plus"></i> '.tr('Preventivo').'
|
||||||
</a>
|
</a>
|
||||||
</div>';
|
</div>';
|
||||||
|
@ -654,7 +654,7 @@ if (!$block_edit) {
|
||||||
$contratti = $dbo->fetchArray($contr_query)[0]['tot'];
|
$contratti = $dbo->fetchArray($contr_query)[0]['tot'];
|
||||||
echo '
|
echo '
|
||||||
<div class="tip">
|
<div class="tip">
|
||||||
<a class="btn btn-sm btn-primary '.(!empty($contratti) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_contratto.php?id_module='.$id_module.'&id_record='.$id_record.'" data-title="'.tr('Aggiungi contratto').'">
|
<a class="btn btn-sm btn-primary '.(!empty($contratti) ? '' : ' disabled').'" data-href="'.$structure->fileurl('add_contratto.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-title="'.tr('Aggiungi contratto').'">
|
||||||
<i class="fa fa-plus"></i> '.tr('Contratto').'
|
<i class="fa fa-plus"></i> '.tr('Contratto').'
|
||||||
</a>
|
</a>
|
||||||
</div>';
|
</div>';
|
||||||
|
@ -672,17 +672,21 @@ if (!$block_edit) {
|
||||||
AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
|
AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
|
||||||
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
|
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
|
||||||
echo '
|
echo '
|
||||||
<a class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_ddt.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="'.tr('Aggiungi ddt').'">
|
<div class="tip">
|
||||||
<i class="fa fa-plus"></i> '.tr('Ddt').'
|
<a class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.$structure->fileurl('add_ddt.php').'.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="'.tr('Aggiungi ddt').'">
|
||||||
</a>';
|
<i class="fa fa-plus"></i> '.tr('Ddt').'
|
||||||
|
</a>
|
||||||
|
</div>';
|
||||||
|
|
||||||
// Lettura ordini (cliente o fornitore)
|
// Lettura ordini (cliente o fornitore)
|
||||||
$ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0)';
|
$ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0)';
|
||||||
$ordini = $dbo->fetchArray($ordini_query)[0]['tot'];
|
$ordini = $dbo->fetchArray($ordini_query)[0]['tot'];
|
||||||
echo '
|
echo '
|
||||||
<a class="btn btn-sm btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.base_path().'/modules/fatture/add_ordine.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="'.tr('Aggiungi ordine').'">
|
<div class="tip">
|
||||||
<i class="fa fa-plus"></i> '.tr('Ordine').'
|
<a class="btn btn-sm btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.$structure->fileurl('add_ordine.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="'.tr('Aggiungi ordine').'">
|
||||||
</a>';
|
<i class="fa fa-plus"></i> '.tr('Ordine').'
|
||||||
|
</a>
|
||||||
|
</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lettura articoli
|
// Lettura articoli
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
||||||
|
* Copyright (C) DevCode s.r.l.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
use Modules\Contratti\Contratto;
|
||||||
|
use Modules\Interventi\Intervento;
|
||||||
|
|
||||||
|
$documento_finale = Intervento::find($id_record);
|
||||||
|
$dir = $documento_finale->direzione;
|
||||||
|
|
||||||
|
$id_documento = get('id_documento');
|
||||||
|
if (!empty($id_documento)) {
|
||||||
|
$documento = Contratto::find($id_documento);
|
||||||
|
|
||||||
|
$options = [
|
||||||
|
'op' => 'add_documento',
|
||||||
|
'type' => 'contratto',
|
||||||
|
'button' => tr('Aggiungi'),
|
||||||
|
'documento' => $documento,
|
||||||
|
'documento_finale' => $documento_finale,
|
||||||
|
'tipo_documento_finale' => Intervento::class,
|
||||||
|
'superamento_soglia_qta' => setting('Permetti il superamento della soglia quantità dei documenti di origine'),
|
||||||
|
];
|
||||||
|
|
||||||
|
echo App::load('importa.php', [], $options, true);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$id_anagrafica = $documento_finale->idanagrafica;
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{[ "type": "select", "label": "'.tr('Contratto').'", "name": "id_documento", "ajax-source": "contratti", "select-options": {"idanagrafica": '.$id_anagrafica.', "stato": "is_fatturabile"} ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="righe_documento">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="alert alert-info" id="box-loading">
|
||||||
|
<i class="fa fa-spinner fa-spin"></i> '.tr('Caricamento in corso').'...
|
||||||
|
</div>';
|
||||||
|
|
||||||
|
$file = basename(__FILE__);
|
||||||
|
echo '
|
||||||
|
<script>$(document).ready(init)</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var content = $("#righe_documento");
|
||||||
|
var loader = $("#box-loading");
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
loader.hide();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#id_documento").on("change", function() {
|
||||||
|
loader.show();
|
||||||
|
|
||||||
|
var id = $(this).selectData() ? $(this).selectData().id : "";
|
||||||
|
|
||||||
|
content.html("");
|
||||||
|
content.load("'.$structure->fileurl($file).'?id_module='.$id_module.'&id_record='.$id_record.'&id_documento=" + id, function() {
|
||||||
|
loader.hide();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>';
|
|
@ -0,0 +1,86 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
||||||
|
* Copyright (C) DevCode s.r.l.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
use Modules\Interventi\Intervento;
|
||||||
|
use Modules\Preventivi\Preventivo;
|
||||||
|
|
||||||
|
$documento_finale = Intervento::find($id_record);
|
||||||
|
$dir = $documento_finale->direzione;
|
||||||
|
|
||||||
|
$id_documento = get('id_documento');
|
||||||
|
if (!empty($id_documento)) {
|
||||||
|
$documento = Preventivo::find($id_documento);
|
||||||
|
|
||||||
|
$options = [
|
||||||
|
'op' => 'add_documento',
|
||||||
|
'type' => 'preventivo',
|
||||||
|
'button' => tr('Aggiungi'),
|
||||||
|
'documento' => $documento,
|
||||||
|
'documento_finale' => $documento_finale,
|
||||||
|
'tipo_documento_finale' => Intervento::class,
|
||||||
|
'superamento_soglia_qta' => setting('Permetti il superamento della soglia quantità dei documenti di origine'),
|
||||||
|
];
|
||||||
|
|
||||||
|
echo App::load('importa.php', [], $options, true);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$id_anagrafica = $documento_finale->idanagrafica;
|
||||||
|
|
||||||
|
echo '
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{[ "type": "select", "label": "'.tr('Preventivo').'", "name": "id_documento", "ajax-source": "preventivi", "select-options": {"idanagrafica": '.$id_anagrafica.', "stato": "is_fatturabile"} ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="righe_documento">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="alert alert-info" id="box-loading">
|
||||||
|
<i class="fa fa-spinner fa-spin"></i> '.tr('Caricamento in corso').'...
|
||||||
|
</div>';
|
||||||
|
|
||||||
|
$file = basename(__FILE__);
|
||||||
|
echo '
|
||||||
|
<script>$(document).ready(init)</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var content = $("#righe_documento");
|
||||||
|
var loader = $("#box-loading");
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
loader.hide();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#id_documento").on("change", function() {
|
||||||
|
loader.show();
|
||||||
|
|
||||||
|
var id = $(this).selectData() ? $(this).selectData().id : "";
|
||||||
|
|
||||||
|
content.html("");
|
||||||
|
content.load("'.$structure->fileurl($file).'?id_module='.$id_module.'&id_record='.$id_record.'&id_documento=" + id, function() {
|
||||||
|
loader.hide();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>';
|
|
@ -112,7 +112,7 @@ switch (post('op')) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$descrizione = tr('Intervento numero _NUM_ del _DATE_ [_STATE_]', [
|
$descrizione = tr('Attività numero _NUM_ del _DATE_ [_STATE_]', [
|
||||||
'_NUM_' => $intervento['codice_intervento'],
|
'_NUM_' => $intervento['codice_intervento'],
|
||||||
'_DATE_' => Translator::dateToLocale($intervento['data']),
|
'_DATE_' => Translator::dateToLocale($intervento['data']),
|
||||||
'_STATE_' => $intervento['stato'],
|
'_STATE_' => $intervento['stato'],
|
||||||
|
|
|
@ -416,6 +416,26 @@ echo '
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
if (!$block_edit) {
|
if (!$block_edit) {
|
||||||
|
// Lettura preventivi accettati, in attesa di conferma o in lavorazione
|
||||||
|
$prev_query = 'SELECT COUNT(*) AS tot FROM co_preventivi WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstato IN(SELECT id FROM co_statipreventivi WHERE is_fatturabile = 1) AND default_revision=1 AND co_preventivi.id IN (SELECT idpreventivo FROM co_righe_preventivi WHERE co_righe_preventivi.idpreventivo = co_preventivi.id AND (qta - qta_evasa) > 0)';
|
||||||
|
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
|
||||||
|
echo '
|
||||||
|
<div class="tip" data-toggle="tooltip" title="'.tr("L'aggiunta del documento secondo questa procedura non associa l'attività al relativo consuntivo del documento: utilizzare i campi soprastanti a questo fine").'.">
|
||||||
|
<a class="btn btn-sm btn-primary '.(!empty($preventivi) ? '' : ' disabled').'" data-href="'.$structure->fileurl('add_preventivo.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-title="'.tr('Aggiungi preventivo').'" data-toggle="tooltip">
|
||||||
|
<i class="fa fa-plus"></i> '.tr('Preventivo').'
|
||||||
|
</a>
|
||||||
|
</div>';
|
||||||
|
|
||||||
|
// Lettura contratti accettati, in attesa di conferma o in lavorazione
|
||||||
|
$contr_query = 'SELECT COUNT(*) AS tot FROM co_contratti WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstato IN( SELECT id FROM co_staticontratti WHERE is_fatturabile = 1) AND co_contratti.id IN (SELECT idcontratto FROM co_righe_contratti WHERE co_righe_contratti.idcontratto = co_contratti.id AND (qta - qta_evasa) > 0)';
|
||||||
|
$contratti = $dbo->fetchArray($contr_query)[0]['tot'];
|
||||||
|
echo '
|
||||||
|
<div class="tip" data-toggle="tooltip" title="'.tr("L'aggiunta del documento secondo questa procedura non associa l'attività al relativo consuntivo del documento: utilizzare i campi soprastanti a questo fine").'.">
|
||||||
|
<a class="btn btn-sm btn-primary '.(!empty($contratti) ? '' : ' disabled').'" data-href="'.$structure->fileurl('add_contratto.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-title="'.tr('Aggiungi contratto').'">
|
||||||
|
<i class="fa fa-plus"></i> '.tr('Contratto').'
|
||||||
|
</a>
|
||||||
|
</div>';
|
||||||
|
|
||||||
// Lettura ddt (entrata o uscita)
|
// Lettura ddt (entrata o uscita)
|
||||||
$ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt
|
$ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt
|
||||||
LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet`
|
LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet`
|
||||||
|
@ -428,8 +448,8 @@ if (!$block_edit) {
|
||||||
AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
|
AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
|
||||||
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
|
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
|
||||||
echo '
|
echo '
|
||||||
<div class="tip" data-toggle="tooltip" title="'.tr('DDT in uscita per il Cliente che si trovano nello stato di Evaso o Parzialmente Evaso con una Causale importabile.').'">
|
<div class="tip" data-toggle="tooltip" title="'.tr('DDT in uscita per il Cliente che si trovano nello stato di Evaso o Parzialmente Evaso con una Causale importabile').'. '.tr("L'aggiunta del documento secondo questa procedura non associa l'attività al relativo consuntivo del documento: utilizzare i campi soprastanti a questo fine").'.">
|
||||||
<button type="button" class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.base_path().'/modules/interventi/add_ddt.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="'.tr('Aggiungi DDT in uscita').'">
|
<button type="button" class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.$structure->fileurl('add_ddt.php').'?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="'.tr('Aggiungi DDT in uscita').'">
|
||||||
<i class="fa fa-plus"></i> '.tr('Ddt').'
|
<i class="fa fa-plus"></i> '.tr('Ddt').'
|
||||||
</button>
|
</button>
|
||||||
</div>';
|
</div>';
|
||||||
|
|
|
@ -158,7 +158,7 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||||
$sessioni = $intervento->sessioni;
|
$sessioni = $intervento->sessioni;
|
||||||
|
|
||||||
if (empty($sessioni)) {
|
if (empty($sessioni)) {
|
||||||
flash()->warning(tr("L'intervento _NUM_ non ha sessioni di lavoro!", [
|
flash()->warning(tr("L'attività _NUM_ non ha sessioni di lavoro!", [
|
||||||
'_NUM_' => $codice,
|
'_NUM_' => $codice,
|
||||||
]));
|
]));
|
||||||
} else {
|
} else {
|
||||||
|
@ -171,7 +171,7 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||||
$sessione = $gruppo->first();
|
$sessione = $gruppo->first();
|
||||||
$riga = Riga::build($fattura);
|
$riga = Riga::build($fattura);
|
||||||
|
|
||||||
$riga->descrizione = tr("Ore di lavoro dell'intervento _NUM_ del _DATE_", [
|
$riga->descrizione = tr("Ore di lavoro dell'attività _NUM_ del _DATE_", [
|
||||||
'_NUM_' => $codice,
|
'_NUM_' => $codice,
|
||||||
'_DATE_' => dateFormat($data),
|
'_DATE_' => dateFormat($data),
|
||||||
]);
|
]);
|
||||||
|
@ -202,7 +202,7 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||||
$diritto_chiamata = $gruppo->first();
|
$diritto_chiamata = $gruppo->first();
|
||||||
$riga = Riga::build($fattura);
|
$riga = Riga::build($fattura);
|
||||||
|
|
||||||
$riga->descrizione = tr("Diritto di chiamata dell'intervento _NUM_ del _DATE_", [
|
$riga->descrizione = tr("Diritto di chiamata dell'attività _NUM_ del _DATE_", [
|
||||||
'_NUM_' => $codice,
|
'_NUM_' => $codice,
|
||||||
'_DATE_' => dateFormat($data),
|
'_DATE_' => dateFormat($data),
|
||||||
]);
|
]);
|
||||||
|
@ -236,7 +236,7 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||||
$viaggio = $gruppo->first();
|
$viaggio = $gruppo->first();
|
||||||
$riga = Riga::build($fattura);
|
$riga = Riga::build($fattura);
|
||||||
|
|
||||||
$riga->descrizione = tr("Trasferta dell'intervento _NUM_ del _DATE_", [
|
$riga->descrizione = tr("Trasferta dell'attività _NUM_ del _DATE_", [
|
||||||
'_NUM_' => $codice,
|
'_NUM_' => $codice,
|
||||||
'_DATE_' => dateFormat($data),
|
'_DATE_' => dateFormat($data),
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -28,7 +28,7 @@ use Modules\Ordini\Components\Sconto;
|
||||||
use Modules\Ordini\Ordine;
|
use Modules\Ordini\Ordine;
|
||||||
use Modules\Ordini\Tipo;
|
use Modules\Ordini\Tipo;
|
||||||
use Modules\Preventivi\Preventivo;
|
use Modules\Preventivi\Preventivo;
|
||||||
use Plugins\DettagliArticolo\DettaglioPrezzo;
|
use Plugins\ListinoClienti\DettaglioPrezzo;
|
||||||
|
|
||||||
$module = Modules::get($id_module);
|
$module = Modules::get($id_module);
|
||||||
|
|
||||||
|
|
|
@ -364,11 +364,14 @@ $(document).ready(function() {
|
||||||
});
|
});
|
||||||
</script>';
|
</script>';
|
||||||
|
|
||||||
//fatture, ordini collegate a questo preventivo
|
// Fatture, ordini collegate a questo preventivo
|
||||||
$elementi = $dbo->fetchArray('SELECT `co_documenti`.`id`, `co_documenti`.`data`, `co_documenti`.`numero`, `co_documenti`.`numero_esterno`, `co_tipidocumento`.`descrizione` AS tipo_documento, `co_tipidocumento`.`dir` FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idpreventivo` = '.prepare($id_record).')
|
$elementi = $dbo->fetchArray('SELECT `co_documenti`.`id`, `co_documenti`.`data`, `co_documenti`.`numero`, `co_documenti`.`numero_esterno`, `co_tipidocumento`.`descrizione` AS tipo_documento, IF(`co_tipidocumento`.`dir` = \'entrata\', \'Fatture di vendita\', \'Fatture di acquisto\') AS modulo FROM `co_documenti` JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento` WHERE `co_documenti`.`id` IN (SELECT `iddocumento` FROM `co_righe_documenti` WHERE `idpreventivo` = '.prepare($id_record).')
|
||||||
|
|
||||||
UNION
|
UNION
|
||||||
SELECT `or_ordini`.`id`, `or_ordini`.`data`, `or_ordini`.`numero`, `or_ordini`.`numero_esterno`, "Ordine cliente" AS tipo_documento, 0 AS dir FROM `or_ordini` JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id` WHERE `or_righe_ordini`.`idpreventivo` = '.prepare($id_record).'
|
SELECT `or_ordini`.`id`, `or_ordini`.`data`, `or_ordini`.`numero`, `or_ordini`.`numero_esterno`, \'Ordine cliente\', \'Ordini cliente\' FROM `or_ordini` JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id` WHERE `or_righe_ordini`.`idpreventivo` = '.prepare($id_record).'
|
||||||
|
|
||||||
|
UNION
|
||||||
|
SELECT `in_interventi`.`id`, `in_interventi`.`data_richiesta`, `in_interventi`.`codice`, NULL, \'Attività\', \'Interventi\' FROM `in_interventi` JOIN `in_righe_interventi` ON `in_righe_interventi`.`idintervento` = `in_interventi`.`id` WHERE (`in_righe_interventi`.`original_document_id` = '.prepare($preventivo->id).' AND `in_righe_interventi`.`original_document_type` = '.prepare(get_class($preventivo)).') OR `in_interventi`.`id_preventivo` = '.prepare($id_record).'
|
||||||
|
|
||||||
ORDER BY `data`');
|
ORDER BY `data`');
|
||||||
|
|
||||||
|
@ -393,15 +396,8 @@ if (!empty($elementi)) {
|
||||||
'_DATE_' => Translator::dateToLocale($elemento['data']),
|
'_DATE_' => Translator::dateToLocale($elemento['data']),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (in_array($elemento['tipo_documento'], ['Ordine cliente'])) {
|
|
||||||
$modulo = 'Ordini cliente';
|
|
||||||
} else {
|
|
||||||
$modulo = ($elemento['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto';
|
|
||||||
}
|
|
||||||
$id = $elemento['id'];
|
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<li>'.Modules::link($modulo, $id, $descrizione).'</li>';
|
<li>'.Modules::link($elemento['modulo'], $elemento['id'], $descrizione).'</li>';
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
|
|
|
@ -19,13 +19,14 @@
|
||||||
|
|
||||||
namespace Plugins\ImportFE;
|
namespace Plugins\ImportFE;
|
||||||
|
|
||||||
|
use Common\Components\Component;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\Articoli\Articolo as ArticoloOriginale;
|
use Modules\Articoli\Articolo as ArticoloOriginale;
|
||||||
use Modules\Articoli\Categoria;
|
use Modules\Articoli\Categoria;
|
||||||
use Modules\Fatture\Components\Articolo;
|
use Modules\Fatture\Components\Articolo;
|
||||||
use Modules\Fatture\Components\Riga;
|
use Modules\Fatture\Components\Riga;
|
||||||
use Modules\Fatture\Fattura;
|
use Modules\Fatture\Fattura;
|
||||||
use Plugins\DettagliArticolo\DettaglioPrezzo;
|
use Plugins\ListinoClienti\DettaglioPrezzo;
|
||||||
use UnexpectedValueException;
|
use UnexpectedValueException;
|
||||||
use Util\XML;
|
use Util\XML;
|
||||||
|
|
||||||
|
@ -173,8 +174,9 @@ class FatturaOrdinaria extends FatturaElettronica
|
||||||
$obj->descrizione = $riga['Descrizione'];
|
$obj->descrizione = $riga['Descrizione'];
|
||||||
|
|
||||||
// Collegamento al documento di riferimento
|
// Collegamento al documento di riferimento
|
||||||
if (!empty($tipi_riferimenti[$key])) {
|
if (!empty($tipi_riferimenti[$key]) && is_subclass_of($tipi_riferimenti[$key], Component::class)) {
|
||||||
list($riferimento_precedente, $nuovo_riferimento) = $obj->impostaOrigine($tipi_riferimenti[$key], $id_riferimenti[$key]);
|
$riga_origine = ($tipi_riferimenti[$key])::find($id_riferimenti[$key]);
|
||||||
|
list($riferimento_precedente, $nuovo_riferimento) = $obj->impostaOrigine($riga_origine);
|
||||||
|
|
||||||
// Correzione della descrizione
|
// Correzione della descrizione
|
||||||
$obj->descrizione = str_replace($riferimento_precedente, '', $obj->descrizione);
|
$obj->descrizione = str_replace($riferimento_precedente, '', $obj->descrizione);
|
||||||
|
|
|
@ -24,7 +24,7 @@ use Common\SimpleModelTrait;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Modules\Articoli\Articolo as Original;
|
use Modules\Articoli\Articolo as Original;
|
||||||
use Modules\Articoli\Movimento;
|
use Modules\Articoli\Movimento;
|
||||||
use Plugins\DettagliArticolo\DettaglioFornitore;
|
use Plugins\ListinoFornitori\DettaglioFornitore;
|
||||||
use UnexpectedValueException;
|
use UnexpectedValueException;
|
||||||
|
|
||||||
abstract class Article extends Accounting
|
abstract class Article extends Accounting
|
||||||
|
|
|
@ -34,6 +34,8 @@ use InvalidArgumentException;
|
||||||
*
|
*
|
||||||
* @property string original_type
|
* @property string original_type
|
||||||
* @property string original_id
|
* @property string original_id
|
||||||
|
* @property string original_document_id
|
||||||
|
* @property string original_document_type
|
||||||
*
|
*
|
||||||
* @template T
|
* @template T
|
||||||
*
|
*
|
||||||
|
@ -201,8 +203,10 @@ abstract class Component extends Model
|
||||||
|
|
||||||
// Attributi dell'oggetto da copiare
|
// Attributi dell'oggetto da copiare
|
||||||
$attributes = $this->getAttributes();
|
$attributes = $this->getAttributes();
|
||||||
unset($attributes['id']);
|
|
||||||
unset($attributes['order']);
|
// Rimozione attributi problematici
|
||||||
|
$remove = ['id', 'order', 'original_id', 'original_type', 'original_document_id', 'original_document_type'];
|
||||||
|
$attributes = array_diff_key($attributes, array_flip($remove));
|
||||||
|
|
||||||
if ($qta !== null) {
|
if ($qta !== null) {
|
||||||
$attributes['qta'] = $qta;
|
$attributes['qta'] = $qta;
|
||||||
|
@ -219,18 +223,17 @@ abstract class Component extends Model
|
||||||
// Riferimento di origine per l'evasione automatica della riga
|
// Riferimento di origine per l'evasione automatica della riga
|
||||||
if ($evadi_qta_parent) {
|
if ($evadi_qta_parent) {
|
||||||
// Mantenimento dell'origine della riga precedente
|
// Mantenimento dell'origine della riga precedente
|
||||||
$model->original_id = $attributes['original_id'];
|
// Utilizzato per la rimozione del riferimento precedente dalla descrizione
|
||||||
$model->original_type = $attributes['original_type'];
|
$model->original_id = $this->original_id;
|
||||||
|
$model->original_type = $this->original_type;
|
||||||
|
|
||||||
// Aggiornamento dei riferimenti
|
// Aggiornamento dei riferimenti
|
||||||
list($riferimento_precedente, $nuovo_riferimento) = $model->impostaOrigine($current, $this->id);
|
list($riferimento_precedente, $nuovo_riferimento) = $model->impostaOrigine($this);
|
||||||
|
|
||||||
// Correzione della descrizione
|
// Correzione della descrizione
|
||||||
$attributes['descrizione'] = str_replace($riferimento_precedente, '', $attributes['descrizione']);
|
$attributes['descrizione'] = str_replace($riferimento_precedente, '', $attributes['descrizione']);
|
||||||
$attributes['descrizione'] .= $nuovo_riferimento;
|
$attributes['descrizione'] .= $nuovo_riferimento;
|
||||||
}
|
}
|
||||||
unset($attributes['original_id']);
|
|
||||||
unset($attributes['original_type']);
|
|
||||||
|
|
||||||
// Impostazione del genitore
|
// Impostazione del genitore
|
||||||
$model->setDocument($document);
|
$model->setDocument($document);
|
||||||
|
@ -266,30 +269,50 @@ abstract class Component extends Model
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function impostaOrigine($type, $id)
|
public function impostaOrigine($riga)
|
||||||
{
|
{
|
||||||
$riferimento_precedente = null;
|
$riferimento_precedente = null;
|
||||||
$nuovo_riferimento = null;
|
$nuovo_riferimento = null;
|
||||||
|
|
||||||
// Rimozione del riferimento precedente dalla descrizione
|
// Rimozione del riferimento precedente dalla descrizione
|
||||||
if ($this->hasOriginalComponent()) {
|
if ($this->hasOriginalComponent()) {
|
||||||
$riferimento = $this->getOriginalComponent()->getDocument()->getReference();
|
$riferimento_precedente = self::getDescrizioneRiferimento(
|
||||||
$riferimento_precedente = "\nRif. ".strtolower($riferimento);
|
$this->getOriginalComponent()->getDocument()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->original_id = $id;
|
// Informazioni del nuovo riferimento
|
||||||
$this->original_type = $type;
|
if (!empty($riga)) {
|
||||||
|
$this->original_id = $riga->id;
|
||||||
|
$this->original_type = get_class($riga);
|
||||||
|
|
||||||
// Aggiunta del riferimento nella descrizione
|
$documento_origine = $riga->getDocument();
|
||||||
$origine = $type::find($id);
|
$this->original_document_id = $documento_origine->id;
|
||||||
if (!empty($origine)) {
|
$this->original_document_type = get_class($documento_origine);
|
||||||
$riferimento = $origine->getDocument()->getReference();
|
|
||||||
$nuovo_riferimento = "\nRif. ".strtolower($riferimento);
|
// Aggiunta del riferimento nella descrizione
|
||||||
|
$nuovo_riferimento = self::getDescrizioneRiferimento(
|
||||||
|
$documento_origine
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// Rimozione dei riferimenti precedenti
|
||||||
|
else {
|
||||||
|
$this->original_id = null;
|
||||||
|
$this->original_type = null;
|
||||||
|
$this->original_document_id = null;
|
||||||
|
$this->original_document_type = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return [$riferimento_precedente, $nuovo_riferimento];
|
return [$riferimento_precedente, $nuovo_riferimento];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getDescrizioneRiferimento(Document $origine)
|
||||||
|
{
|
||||||
|
$riferimento = $origine->getReference();
|
||||||
|
|
||||||
|
return "\nRif. ".strtolower($riferimento);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Imposta il proprietario dell'oggetto e l'ordine relativo all'interno delle righe.
|
* Imposta il proprietario dell'oggetto e l'ordine relativo all'interno delle righe.
|
||||||
*
|
*
|
||||||
|
|
|
@ -80,17 +80,17 @@ echo '
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Totale Attività</b></h6></td>
|
<td colspan="2"><h6><b>Totale Attività</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($totale_attivita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($totale_attivita)).'</b></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
if ($utile_perdita > 0) {
|
if ($utile_perdita > 0) {
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Perdita</b></h6></td>
|
<td colspan="2"><h6><b>Perdita</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($utile_perdita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($utile_perdita)).'</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Totale a pareggio</b></h6></td>
|
<td colspan="2"><h6><b>Totale a pareggio</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($totale_attivita) + abs($utile_perdita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($totale_attivita) + abs($utile_perdita)).'</b></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
}
|
}
|
||||||
echo '
|
echo '
|
||||||
|
@ -155,17 +155,17 @@ echo '
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Totale Passività</b></h6></td>
|
<td colspan="2"><h6><b>Totale Passività</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($totale_passivita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($totale_passivita)).'</b></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
if ($utile_perdita < 0) {
|
if ($utile_perdita < 0) {
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Utile</b></h6></td>
|
<td colspan="2"><h6><b>Utile</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($utile_perdita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($utile_perdita)).'</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Totale a pareggio</b></h6></td>
|
<td colspan="2"><h6><b>Totale a pareggio</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($totale_passivita) + abs($utile_perdita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($totale_passivita) + abs($utile_perdita)).'</b></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
}
|
}
|
||||||
echo '
|
echo '
|
||||||
|
@ -187,13 +187,13 @@ echo '
|
||||||
<table class="table table-striped table-bordered" style=" overflow:hidden;" id="contents">
|
<table class="table table-striped table-bordered" style=" overflow:hidden;" id="contents">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th colspan="3"><h5>Costi</h5></th>
|
<th colspan="4"><h5>Costi</h5></th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th width="15%">CONTO</th>
|
<th width="12%">CONTO</th>
|
||||||
<th width="60%">DESCRIZIONE</th>
|
<th>DESCRIZIONE</th>
|
||||||
<th width="25%">SALDO</th>
|
<th width="21%">SALDO</th>
|
||||||
|
<th width="21%">REDDITO</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>';
|
<tbody>';
|
||||||
|
@ -206,6 +206,7 @@ echo '
|
||||||
<td><b>'.$liv2_e['numero'].'</b></td>
|
<td><b>'.$liv2_e['numero'].'</b></td>
|
||||||
<td><b>'.$liv2_e['descrizione'].'</b></td>
|
<td><b>'.$liv2_e['descrizione'].'</b></td>
|
||||||
<td class="text-right"><b>'.numberFormat($liv2_e['totale']).'</b></td>
|
<td class="text-right"><b>'.numberFormat($liv2_e['totale']).'</b></td>
|
||||||
|
<td class="text-right"><b>'.numberFormat($liv2_e['totale_reddito']).'</b></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
|
|
||||||
foreach ($liv3_economico as $liv3_e) {
|
foreach ($liv3_economico as $liv3_e) {
|
||||||
|
@ -215,6 +216,7 @@ echo '
|
||||||
<td>'.$liv3_e['numero'].'</td>
|
<td>'.$liv3_e['numero'].'</td>
|
||||||
<td>'.$liv3_e['descrizione'].'</td>
|
<td>'.$liv3_e['descrizione'].'</td>
|
||||||
<td class="text-right">'.numberFormat($liv3_e['totale']).'</td>
|
<td class="text-right">'.numberFormat($liv3_e['totale']).'</td>
|
||||||
|
<td class="text-right">'.numberFormat($liv3_e['totale_reddito']).'</td>
|
||||||
</tr>';
|
</tr>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -223,17 +225,20 @@ echo '
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Totale costi</b></h6></td>
|
<td colspan="2"><h6><b>Totale costi</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($totale_costi)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($totale_costi)).'</b></td>
|
||||||
|
<td></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
if ($utile_perdita < 0) {
|
if ($utile_perdita < 0) {
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Utile</b></h6></td>
|
<td colspan="2"><h6><b>Utile</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($utile_perdita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($utile_perdita)).'</b></td>
|
||||||
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Totale a pareggio</b></h6></td>
|
<td colspan="2"><h6><b>Totale a pareggio</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($totale_costi) + abs($utile_perdita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($totale_costi) + abs($utile_perdita)).'</b></td>
|
||||||
|
<td></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
}
|
}
|
||||||
echo '
|
echo '
|
||||||
|
@ -246,14 +251,13 @@ echo '
|
||||||
<table class="table table-striped table-bordered" style=" overflow:hidden;" id="contents">
|
<table class="table table-striped table-bordered" style=" overflow:hidden;" id="contents">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th colspan="4"><h5>Ricavi</h5></th>
|
||||||
<th colspan="3"><h5>Ricavi</h5></th>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th width="15%">CONTO</th>
|
<th width="12%">CONTO</th>
|
||||||
<th width="60%">DESCRIZIONE</th>
|
<th>DESCRIZIONE</th>
|
||||||
<th width="25%">SALDO</th>
|
<th width="21%">SALDO</th>
|
||||||
|
<th width="21%">REDDITO</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>';
|
<tbody>';
|
||||||
|
@ -266,6 +270,7 @@ echo '
|
||||||
<td><b>'.$liv2_e['numero'].'</b></td>
|
<td><b>'.$liv2_e['numero'].'</b></td>
|
||||||
<td><b>'.$liv2_e['descrizione'].'</b></td>
|
<td><b>'.$liv2_e['descrizione'].'</b></td>
|
||||||
<td class="text-right"><b>'.numberFormat(abs($liv2_e['totale'])).'</b></td>
|
<td class="text-right"><b>'.numberFormat(abs($liv2_e['totale'])).'</b></td>
|
||||||
|
<td class="text-right"><b>'.numberFormat(abs($liv2_e['totale_reddito'])).'</b></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
|
|
||||||
foreach ($liv3_economico as $liv3_e) {
|
foreach ($liv3_economico as $liv3_e) {
|
||||||
|
@ -275,6 +280,7 @@ echo '
|
||||||
<td>'.$liv3_e['numero'].'</td>
|
<td>'.$liv3_e['numero'].'</td>
|
||||||
<td>'.$liv3_e['descrizione'].'</td>
|
<td>'.$liv3_e['descrizione'].'</td>
|
||||||
<td class="text-right">'.numberFormat(abs($liv3_e['totale'])).'</td>
|
<td class="text-right">'.numberFormat(abs($liv3_e['totale'])).'</td>
|
||||||
|
<td class="text-right">'.numberFormat(abs($liv3_e['totale_reddito'])).'</td>
|
||||||
</tr>';
|
</tr>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -283,17 +289,19 @@ echo '
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Totale ricavi</b></h6></td>
|
<td colspan="2"><h6><b>Totale ricavi</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($totale_ricavi)).'</b></h6></td>
|
<td style="font-size:8pt;" class="text-right"><b>'.numberFormat(abs($totale_ricavi)).'</b></td>
|
||||||
|
<td></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
if ($utile_perdita > 0) {
|
if ($utile_perdita > 0) {
|
||||||
echo '
|
echo '
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Perdita</b></h6></td>
|
<td colspan="2"><h6><b>Perdita</b></h6></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($utile_perdita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($utile_perdita)).'</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2"><h6><b>Totale a pareggio</b></td>
|
<td colspan="2"><h6><b>Totale a pareggio</b></td>
|
||||||
<td class="text-right"><h6><b>'.numberFormat(abs($totale_ricavi) + abs($utile_perdita)).'</b></h6></td>
|
<td class="text-right" style="font-size:8pt;"><b>'.numberFormat(abs($totale_ricavi) + abs($utile_perdita)).'</b></td>
|
||||||
|
<td></td>
|
||||||
</tr>';
|
</tr>';
|
||||||
}
|
}
|
||||||
echo '
|
echo '
|
||||||
|
|
|
@ -29,11 +29,11 @@ $esercizio = $esercizio->format('Y');
|
||||||
|
|
||||||
$liv2_patrimoniale = $dbo->fetchArray('SELECT co_pianodeiconti2.numero AS numero, co_pianodeiconti2.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti2.id AS id FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Patrimoniale"))) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idpianodeiconti2 ORDER BY co_pianodeiconti2.numero');
|
$liv2_patrimoniale = $dbo->fetchArray('SELECT co_pianodeiconti2.numero AS numero, co_pianodeiconti2.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti2.id AS id FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Patrimoniale"))) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idpianodeiconti2 ORDER BY co_pianodeiconti2.numero');
|
||||||
|
|
||||||
$liv2_economico = $dbo->fetchArray('SELECT co_pianodeiconti2.numero AS numero, co_pianodeiconti2.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti2.id AS id FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Economico"))) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idpianodeiconti2 ORDER BY co_pianodeiconti2.numero');
|
$liv2_economico = $dbo->fetchArray('SELECT co_pianodeiconti2.numero AS numero, co_pianodeiconti2.descrizione AS descrizione, SUM(totale) AS totale, SUM(totale_reddito) AS totale_reddito, co_pianodeiconti2.id AS id FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Economico"))) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idpianodeiconti2 ORDER BY co_pianodeiconti2.numero');
|
||||||
|
|
||||||
$liv3_patrimoniale = $dbo->fetchArray('SELECT co_pianodeiconti3.numero AS numero, co_pianodeiconti3.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti3.idpianodeiconti2 AS idpianodeiconti2 FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Patrimoniale"))) AND idpianodeiconti2!='.prepare($fornitori).' AND co_pianodeiconti3.id NOT IN (SELECT idconto_cliente FROM an_anagrafiche) AND co_pianodeiconti3.id NOT IN (SELECT idconto_fornitore FROM an_anagrafiche) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idconto ORDER BY co_pianodeiconti2.numero');
|
$liv3_patrimoniale = $dbo->fetchArray('SELECT co_pianodeiconti3.numero AS numero, co_pianodeiconti3.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti3.idpianodeiconti2 AS idpianodeiconti2 FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Patrimoniale"))) AND idpianodeiconti2!='.prepare($fornitori).' AND co_pianodeiconti3.id NOT IN (SELECT idconto_cliente FROM an_anagrafiche) AND co_pianodeiconti3.id NOT IN (SELECT idconto_fornitore FROM an_anagrafiche) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idconto ORDER BY co_pianodeiconti3.numero');
|
||||||
|
|
||||||
$liv3_economico = $dbo->fetchArray('SELECT co_pianodeiconti3.numero AS numero, co_pianodeiconti3.descrizione AS descrizione, SUM(totale) AS totale, co_pianodeiconti3.idpianodeiconti2 AS idpianodeiconti2 FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Economico"))) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idconto ORDER BY co_pianodeiconti2.numero');
|
$liv3_economico = $dbo->fetchArray('SELECT co_pianodeiconti3.numero AS numero, co_pianodeiconti3.descrizione AS descrizione, SUM(totale) AS totale, SUM(totale_reddito) AS totale_reddito, co_pianodeiconti3.idpianodeiconti2 AS idpianodeiconti2 FROM `co_movimenti` INNER JOIN co_pianodeiconti3 ON co_movimenti.idconto=co_pianodeiconti3.id INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Economico"))) AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end).' GROUP BY idconto ORDER BY co_pianodeiconti3.numero');
|
||||||
|
|
||||||
$utile_perdita = $dbo->fetchOne('SELECT SUM(totale) AS totale FROM `co_movimenti` WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Economico")))AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end))['totale'];
|
$utile_perdita = $dbo->fetchOne('SELECT SUM(totale) AS totale FROM `co_movimenti` WHERE idconto IN(SELECT id FROM co_pianodeiconti3 WHERE idpianodeiconti2 IN(SELECT id FROM co_pianodeiconti2 WHERE idpianodeiconti1=(SELECT id FROM co_pianodeiconti1 WHERE descrizione="Economico")))AND co_movimenti.data>='.prepare($date_start).' AND co_movimenti.data<='.prepare($date_end))['totale'];
|
||||||
|
|
||||||
|
|
|
@ -158,3 +158,23 @@ INSERT INTO `zz_plugins` (`id`, `name`, `title`, `idmodule_from`, `idmodule_to`,
|
||||||
(NULL, 'Piani di sconto/maggiorazione', 'Piani di sconto/magg.', (SELECT `id` FROM `zz_modules` WHERE `name`='Articoli'), (SELECT `id` FROM `zz_modules` WHERE `name`='Articoli'), 'tab', 'piani_sconto_maggiorazione', 'custom');
|
(NULL, 'Piani di sconto/maggiorazione', 'Piani di sconto/magg.', (SELECT `id` FROM `zz_modules` WHERE `name`='Articoli'), (SELECT `id` FROM `zz_modules` WHERE `name`='Articoli'), 'tab', 'piani_sconto_maggiorazione', 'custom');
|
||||||
|
|
||||||
UPDATE `zz_modules` SET `name` = 'Piani di sconto/maggiorazione' WHERE `name` = 'Piani di sconto/magg.';
|
UPDATE `zz_modules` SET `name` = 'Piani di sconto/maggiorazione' WHERE `name` = 'Piani di sconto/magg.';
|
||||||
|
|
||||||
|
-- Aggiunta riferimento documenti
|
||||||
|
ALTER TABLE `co_righe_promemoria` ADD `original_document_type` varchar(255) AFTER `original_type`, ADD `original_document_id` int(11) AFTER `original_type`;
|
||||||
|
ALTER TABLE `in_righe_interventi` ADD `original_document_type` varchar(255) AFTER `original_type`, ADD `original_document_id` int(11) AFTER `original_type`;
|
||||||
|
ALTER TABLE `co_righe_contratti` ADD `original_document_type` varchar(255) AFTER `original_type`, ADD `original_document_id` int(11) AFTER `original_type`;
|
||||||
|
ALTER TABLE `co_righe_preventivi` ADD `original_document_type` varchar(255) AFTER `original_type`, ADD `original_document_id` int(11) AFTER `original_type`;
|
||||||
|
ALTER TABLE `co_righe_documenti` ADD `original_document_type` varchar(255) AFTER `original_type`, ADD `original_document_id` int(11) AFTER `original_type`;
|
||||||
|
ALTER TABLE `or_righe_ordini` ADD `original_document_type` varchar(255) AFTER `original_type`, ADD `original_document_id` int(11) AFTER `original_type`;
|
||||||
|
ALTER TABLE `dt_righe_ddt` ADD `original_document_type` varchar(255) AFTER `original_type`, ADD `original_document_id` int(11) AFTER `original_type`;
|
||||||
|
|
||||||
|
UPDATE `co_righe_documenti` SET `original_document_id` = `idcontratto`, `original_document_type` = 'Modules\\Contratti\\Contratto' WHERE `idcontratto` != 0;
|
||||||
|
UPDATE `co_righe_documenti` SET `original_document_id` = `idpreventivo`, `original_document_type` = 'Modules\\Preventivi\\Preventivo' WHERE `idpreventivo` != 0;
|
||||||
|
UPDATE `co_righe_documenti` SET `original_document_id` = `idintervento`, `original_document_type` = 'Modules\\Interventi\\Intervento' WHERE `idintervento` IS NOT NULL;
|
||||||
|
UPDATE `co_righe_documenti` SET `original_document_id` = `idordine`, `original_document_type` = 'Modules\\Ordini\\Ordine' WHERE `idordine` != 0;
|
||||||
|
UPDATE `co_righe_documenti` SET `original_document_id` = `idintervento`, `original_document_type` = 'Modules\\DDT\\DDT' WHERE `idddt` != 0;
|
||||||
|
UPDATE `co_righe_documenti` INNER JOIN `co_righe_documenti` AS origine ON `origine`.`id` = `co_righe_documenti`.`ref_riga_documento` SET `co_righe_documenti`.`original_document_id` = `origine`.`iddocumento`, `co_righe_documenti`.`original_document_type` = 'Modules\\Fatture\\Fattura' WHERE `co_righe_documenti`.`ref_riga_documento` IS NOT NULL;
|
||||||
|
|
||||||
|
UPDATE `dt_righe_ddt` SET `original_document_id` = `idordine`, `original_document_type` = 'Modules\\Ordini\\Ordine' WHERE `idordine` != 0;
|
||||||
|
|
||||||
|
UPDATE `or_righe_ordini` SET `original_document_id` = `idpreventivo`, `original_document_type` = 'Modules\\Preventivi\\Preventivo' WHERE `idpreventivo` != 0;
|
||||||
|
|
Loading…
Reference in New Issue