openstamanager/templates/registro_iva/init.php

150 lines
7.9 KiB
PHP
Raw Normal View History

<?php
2020-09-07 15:04:06 +02:00
/*
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
2021-01-20 15:08:51 +01:00
* Copyright (C) DevCode s.r.l.
2020-09-07 15:04:06 +02:00
*
* 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';
2024-03-05 16:01:45 +01:00
use Models\Module;
$dir = filter('dir');
2020-07-01 18:33:21 +02:00
$id_sezionale = filter('id_sezionale');
2024-04-18 17:44:05 +02:00
$sezionale = $dbo->fetchOne('SELECT `zz_segments_lang`.`title` 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'];
2020-07-02 17:30:09 +02:00
$date_start = filter('date_start');
$date_end = filter('date_end');
2019-07-09 18:29:40 +02:00
$tipo = $dir == 'entrata' ? 'vendite' : 'acquisti';
2024-06-11 16:58:27 +02:00
$vendita_banco = Module::where('name', 'Vendita al banco')->first()->id;
$v_iva = [];
$v_totale = [];
2023-08-04 14:54:28 +02:00
if ((!empty($vendita_banco)) && ($id_sezionale == -1) && ($tipo == 'vendite')) {
$query = '
SELECT
2024-02-06 17:36:05 +01:00
`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
2023-03-27 15:49:01 +02:00
(
SELECT
2024-02-06 17:36:05 +01:00
`co_documenti`.`data_registrazione`,
`co_documenti`.`numero_esterno`,
`co_documenti`.`data`,
`co_tipidocumento`.`codice_tipo_documento_fe`,
`co_iva`.`percentuale`,
2024-04-18 17:44:05 +02:00
`co_iva_lang`.`title` as descrizione,
2024-02-06 17:36:05 +01:00
`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
2023-03-27 15:49:01 +02:00
FROM
2024-02-06 17:36:05 +01:00
`co_iva`
2024-03-22 15:52:24 +01:00
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).')
2024-02-06 17:36:05 +01:00
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
2024-04-18 17:44:05 +02:00
`dir` = '.prepare($dir).' AND `idstatodocumento` NOT IN (SELECT `id_record` FROM `co_statidocumento_lang` WHERE `title` 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
2024-02-06 17:36:05 +01:00
`co_iva`.`id`, `co_documenti`.`id`
UNION
SELECT
2024-02-06 17:36:05 +01:00
`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,
2024-02-06 17:36:05 +01:00
`co_iva`.`percentuale`,
2024-04-18 17:44:05 +02:00
`co_iva_lang`.`title` as descrizione,
2024-02-06 17:36:05 +01:00
`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`
2024-03-22 15:52:24 +01:00
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).')
2024-02-06 17:36:05 +01:00
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
2024-02-06 17:36:05 +01:00
`vb_venditabanco`.`data` >= '.prepare($date_start).' AND `vb_venditabanco`.`data` <= '.prepare($date_end).' AND `vb_stati_vendita`.`descrizione` = "Pagato"
GROUP BY
2024-02-06 17:36:05 +01:00
`co_iva`.`id`, `id`, `an_anagrafiche`.`idanagrafica`
) AS tabella
GROUP BY
2024-02-06 17:36:05 +01:00
`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)';
2023-08-04 14:54:28 +02:00
} else {
$query = '
SELECT
2024-02-06 17:36:05 +01:00
`co_documenti`.`data_registrazione`,
`co_documenti`.`numero_esterno`,
`co_documenti`.`data`,
`co_tipidocumento`.`codice_tipo_documento_fe`,
`co_iva`.`percentuale`,
2024-04-18 17:44:05 +02:00
`co_iva_lang`.`title` as descrizione,
2024-02-06 17:36:05 +01:00
`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
2024-02-06 17:36:05 +01:00
`co_iva`
2024-03-22 15:52:24 +01:00
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).')
2024-02-06 17:36:05 +01:00
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
2024-04-18 17:44:05 +02:00
`dir` = '.prepare($dir).' AND `idstatodocumento` NOT IN (SELECT `id_record` FROM `co_statidocumento_lang` WHERE `title` 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
2024-02-06 17:36:05 +01:00
`co_iva`.`id`, `co_documenti`.`id`
ORDER BY
2024-02-06 17:36:05 +01:00
CAST( IF(`dir`="entrata", `co_documenti`.`numero_esterno`, `co_documenti`.`numero`) AS UNSIGNED)';
}
$records = $dbo->fetchArray($query);
if (empty(get('notdefinitiva'))) {
2024-02-06 17:36:05 +01:00
$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,
2020-10-16 08:31:10 +02:00
];