openstamanager/templates/registro_iva/init.php

150 lines
7.9 KiB
PHP
Executable File

<?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 Models\Module;
$dir = $_GET['dir'];
$id_sezionale = filter('id_sezionale');
$sezionale = $dbo->fetchOne('SELECT `zz_segments_lang`.`name` FROM `zz_segments` LEFT JOIN `zz_segments_lang` ON (`zz_segments`.`id` = `zz_segments_lang`.`id_record` AND `zz_segments_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `zz_segments`.`id` = '.$id_sezionale)['name'];
$date_start = filter('date_start');
$date_end = filter('date_end');
$tipo = $dir == 'entrata' ? 'vendite' : 'acquisti';
$vendita_banco = (new Module())->getByField('name', 'Vendita al banco', Models\Locale::getPredefined()->id);
$v_iva = [];
$v_totale = [];
if ((!empty($vendita_banco)) && ($id_sezionale == -1) && ($tipo == 'vendite')) {
$query = '
SELECT
`data_registrazione`,
`numero_esterno`,
`data`,
`codice_tipo_documento_fe`,
`percentuale`,
`descrizione`,
`id`,
`numero`,
SUM(`subtotale`) as subtotale,
SUM(`totale`) as totale,
SUM(`iva`) AS iva,
`ragione_sociale`,
`codice_anagrafica`
FROM
(
SELECT
`co_documenti`.`data_registrazione`,
`co_documenti`.`numero_esterno`,
`co_documenti`.`data`,
`co_tipidocumento`.`codice_tipo_documento_fe`,
`co_iva`.`percentuale`,
`co_iva_lang`.`name` as descrizione,
`co_documenti`.`id` AS id,
IF(`numero` = "", `numero_esterno`, `numero`) AS numero,
SUM((`subtotale`-`sconto`+`co_righe_documenti`.`rivalsainps`)*(IF(`co_tipidocumento`.`reversed` = 0, 1,-1 ))) AS subtotale,
SUM((`subtotale`-`sconto`+`co_righe_documenti`.`rivalsainps`+`iva`+`co_righe_documenti`.`rivalsainps` * `percentuale`/100)*(IF(`co_tipidocumento`.`reversed` = 0, 1,-1 ))) AS totale,
SUM((`subtotale`-`sconto`+`co_righe_documenti`.`rivalsainps`) *`percentuale`/100 *(100-`indetraibile`)/100 *(IF(`co_tipidocumento`.`reversed` = 0, 1,-1 ))) AS iva,
`an_anagrafiche`.`ragione_sociale`,
`an_anagrafiche`.`codice` AS codice_anagrafica
FROM
`co_iva`
LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idiva` = `co_iva`.`id`
INNER JOIN `co_documenti` ON `co_documenti`.`id` = `co_righe_documenti`.`iddocumento`
INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento`
INNER JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `co_documenti`.`idanagrafica`
WHERE
`dir` = '.prepare($dir).' AND `idstatodocumento` NOT IN (SELECT `id_record` FROM `co_statidocumento_lang` WHERE `name` IN ("Bozza", "Annullata")) AND `is_descrizione` = 0 AND `co_documenti`.`data_competenza` >= '.prepare($date_start).' AND `co_documenti`.`data_competenza` <= '.prepare($date_end).' AND '.(($id_sezionale != -1) ? '`co_documenti`.`id_segment` = '.prepare($id_sezionale).'' : '1=1').'
GROUP BY
`co_iva`.`id`, `co_documenti`.`id`
UNION
SELECT
`vb_venditabanco`.`data` as data_registrazione,
`vb_venditabanco`.`numero` as numero_esterno,
`vb_venditabanco`.`data` as data,
"Vendita al banco" as codice_tipo_documento_fe,
`co_iva`.`percentuale`,
`co_iva_lang`.`name` as descrizione,
`vb_venditabanco`.`id` AS id,
`vb_venditabanco`.`numero` AS numero,
SUM(`vb_righe_venditabanco`.`subtotale`) as subtotale,
SUM(`subtotale`-`sconto` + `iva`) as totale,
SUM(`iva`) as iva,
`an_anagrafiche`.`ragione_sociale`,
`an_anagrafiche`.`codice` AS codice_anagrafica
FROM `co_iva`
LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
INNER JOIN `vb_righe_venditabanco` ON `vb_righe_venditabanco`.`idiva` = `co_iva`.`id`
INNER JOIN `vb_venditabanco` ON `vb_venditabanco`.`id` = `vb_righe_venditabanco`.`idvendita`
INNER JOIN `vb_stati_vendita` ON `vb_venditabanco`.`idstato` = `vb_stati_vendita`.`id`
LEFT JOIN `in_interventi` ON `vb_righe_venditabanco`.`idintervento` = `in_interventi`.`id`
LEFT JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `in_interventi`.`idanagrafica`
WHERE
`vb_venditabanco`.`data` >= '.prepare($date_start).' AND `vb_venditabanco`.`data` <= '.prepare($date_end).' AND `vb_stati_vendita`.`descrizione` = "Pagato"
GROUP BY
`co_iva`.`id`, `id`, `an_anagrafiche`.`idanagrafica`
) AS tabella
GROUP BY
`iva`, `id`, `data_registrazione`, `data`, `numero_esterno`, `codice_tipo_documento_fe`, `percentuale`, `descrizione`, `numero`, `ragione_sociale`, `codice_anagrafica`
ORDER BY CAST(`numero_esterno` AS UNSIGNED)';
} else {
$query = '
SELECT
`co_documenti`.`data_registrazione`,
`co_documenti`.`numero_esterno`,
`co_documenti`.`data`,
`co_tipidocumento`.`codice_tipo_documento_fe`,
`co_iva`.`percentuale`,
`co_iva_lang`.`name` as descrizione,
`co_documenti`.`id` AS id,
IF(`numero` = "", `numero_esterno`, `numero`) AS numero,
SUM((`subtotale`-`sconto`+`co_righe_documenti`.`rivalsainps`)*(IF(`co_tipidocumento`.`reversed` = 0, 1,-1 ))) AS subtotale,
SUM((`subtotale`-`sconto`+`co_righe_documenti`.`rivalsainps`+`iva`+`co_righe_documenti`.`rivalsainps` * `percentuale`/100)*(IF(`co_tipidocumento`.`reversed` = 0, 1,-1 ))) AS totale,
SUM((`subtotale`-`sconto`+`co_righe_documenti`.`rivalsainps`) *`percentuale`/100 *(100-`indetraibile`)/100 *(IF(`co_tipidocumento`.`reversed` = 0, 1,-1 ))) AS iva,
`an_anagrafiche`.`ragione_sociale`,
`an_anagrafiche`.`codice` AS codice_anagrafica
FROM
`co_iva`
LEFT JOIN `co_iva_lang` ON (`co_iva`.`id` = `co_iva_lang`.`id_record` AND `co_iva_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')
INNER JOIN `co_righe_documenti` ON `co_righe_documenti`.`idiva` = `co_iva`.`id`
INNER JOIN `co_documenti` ON `co_documenti`.`id` = `co_righe_documenti`.`iddocumento`
INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id` = `co_documenti`.`idtipodocumento`
INNER JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `co_documenti`.`idanagrafica`
WHERE
`dir` = '.prepare($dir).' AND `idstatodocumento` NOT IN (SELECT `id_record` FROM `co_statidocumento_lang` WHERE `name` IN ("Bozza", "Annullata")) AND `is_descrizione` = 0 AND `co_documenti`.`data_competenza` >= '.prepare($date_start).' AND `co_documenti`.`data_competenza` <= '.prepare($date_end).' AND '.(($id_sezionale != -1) ? '`co_documenti`.`id_segment` = '.prepare($id_sezionale).'' : '1=1').'
GROUP BY
`co_iva`.`id`, `co_documenti`.`id`
ORDER BY
CAST( IF(`dir`="entrata", `co_documenti`.`numero_esterno`, `co_documenti`.`numero`) AS UNSIGNED)';
}
$records = $dbo->fetchArray($query);
if (empty(get('notdefinitiva'))) {
$page = $dbo->fetchOne('SELECT `first_page` FROM `co_stampecontabili` WHERE `dir`='.prepare(filter('dir')).' AND `date_start`='.prepare(filter('date_start')).' AND `date_end`='.prepare(filter('date_end')))['first_page'];
}
// Sostituzioni specifiche
$custom = [
'tipo' => $tipo,
];