2017-08-04 16:28:16 +02:00
< ? 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 />.
*/
2017-08-04 16:28:16 +02:00
2020-07-08 10:40:04 +02:00
use Modules\Fatture\Fattura ;
2024-02-28 10:50:39 +01:00
use Modules\Fatture\StatoFE ;
2020-07-08 10:40:04 +02:00
2017-08-04 16:28:16 +02:00
include_once __DIR__ . '/../../core.php' ;
2024-03-22 17:43:28 +01:00
if ( $module -> getTranslation ( 'name' ) == 'Fatture di vendita' ) {
2017-09-05 17:31:58 +02:00
$dir = 'entrata' ;
} else {
$dir = 'uscita' ;
}
2017-08-04 16:28:16 +02:00
if ( isset ( $id_record )) {
2020-07-08 10:40:04 +02:00
$fattura = Fattura :: with ( 'tipo' , 'stato' ) -> find ( $id_record );
2020-09-08 11:38:25 +02:00
$dir = $fattura -> direzione ;
2018-08-09 10:14:26 +02:00
2020-02-14 17:02:16 +01:00
$is_fiscale = false ;
if ( ! empty ( $fattura )) {
$is_fiscale = $fattura -> isFiscale ();
}
2024-03-19 16:41:11 +01:00
$record = $dbo -> fetchOne ( ' SELECT
`co_documenti` .* ,
2024-02-08 13:10:46 +01:00
`co_tipidocumento` . `reversed` AS is_reversed ,
`co_documenti` . `idagente` AS idagente_fattura ,
`co_documenti` . `note` ,
`co_documenti` . `note_aggiuntive` ,
`co_documenti` . `idpagamento` ,
`co_documenti` . `id` AS iddocumento ,
`co_documenti` . `split_payment` AS split_payment ,
2024-02-13 15:49:40 +01:00
`co_statidocumento_lang` . `name` AS `stato` ,
2024-02-26 15:53:39 +01:00
`co_tipidocumento_lang` . `name` AS `descrizione_tipo` ,
2024-02-08 13:10:46 +01:00
`co_tipidocumento` . `id` AS `idtipodocumento` ,
2024-03-11 10:40:42 +01:00
`zz_segments` . `is_fiscale` AS is_fiscale ,
2024-02-08 13:10:46 +01:00
( SELECT `descrizione` FROM `co_ritenutaacconto` WHERE `id` = `idritenutaacconto` ) AS ritenutaacconto_desc ,
( SELECT `descrizione` FROM `co_rivalse` WHERE `id` = `idrivalsainps` ) AS rivalsainps_desc ,
2024-02-27 11:10:40 +01:00
`dt_causalet_lang` . `name` AS causale_desc
2024-02-08 13:10:46 +01:00
FROM `co_documenti`
2024-03-19 16:41:11 +01:00
INNER JOIN `co_statidocumento` ON `co_documenti` . `idstatodocumento` = `co_statidocumento` . `id`
2024-03-22 15:52:24 +01:00
LEFT JOIN `co_statidocumento_lang` ON ( `co_statidocumento_lang` . `id_record` = `co_statidocumento` . `id` AND `co_statidocumento_lang` . `id_lang` = '.prepare(Models\Locale::getDefault()->id).' )
2024-02-08 13:10:46 +01:00
INNER JOIN `an_anagrafiche` ON `co_documenti` . `idanagrafica` = `an_anagrafiche` . `idanagrafica`
INNER JOIN `co_tipidocumento` ON `co_documenti` . `idtipodocumento` = `co_tipidocumento` . `id`
2024-03-22 15:52:24 +01:00
LEFT JOIN `co_tipidocumento_lang` ON ( `co_tipidocumento_lang` . `id_record` = `co_tipidocumento` . `id` AND `co_tipidocumento_lang` . `id_lang` = '.prepare(Models\Locale::getDefault()->id).' )
2024-02-08 13:10:46 +01:00
LEFT JOIN `co_pagamenti` ON `co_documenti` . `idpagamento` = `co_pagamenti` . `id`
2024-03-22 15:52:24 +01:00
LEFT JOIN `co_pagamenti_lang` ON ( `co_pagamenti_lang` . `id_record` = `co_pagamenti` . `id` AND `co_pagamenti_lang` . `id_lang` = '.prepare(Models\Locale::getDefault()->id).' )
2024-02-27 11:10:40 +01:00
LEFT JOIN `dt_causalet` ON `co_documenti` . `idcausalet` = `dt_causalet` . `id`
2024-03-22 15:52:24 +01:00
LEFT JOIN `dt_causalet_lang` ON ( `dt_causalet_lang` . `id_record` = `dt_causalet` . `id` AND `dt_causalet_lang` . `id_lang` = '.prepare(Models\Locale::getDefault()->id).' )
2024-03-11 10:40:42 +01:00
INNER JOIN `zz_segments` ON `co_documenti` . `id_segment` = `zz_segments` . `id`
WHERE
`co_tipidocumento` . `dir` = '.prepare($dir).' AND `co_documenti` . `id` = ' . prepare ( $id_record ));
2018-07-04 12:57:53 +02:00
2020-09-08 11:38:25 +02:00
// Note di credito collegate
2024-02-08 13:10:46 +01:00
$note_accredito = $dbo -> fetchArray ( " SELECT `co_documenti`.`id`, IF(`numero_esterno` != '', `numero_esterno`, `numero`) AS numero, data FROM `co_documenti` JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento`=`co_tipidocumento`.`id` WHERE `reversed` = 1 AND `ref_documento`= " . prepare ( $id_record ));
2020-09-08 11:38:25 +02:00
// Blocco gestito dallo stato della Fattura Elettronica
2024-02-28 10:50:39 +01:00
$stato_fe = StatoFE :: find ( $fattura -> codice_stato_fe ) -> id_record ;
2020-09-08 11:38:25 +02:00
$abilita_genera = empty ( $fattura -> codice_stato_fe ) || intval ( $stato_fe [ 'is_generabile' ]);
2022-05-13 13:23:15 +02:00
// Controllo autofattura e gestione avvisi
$reverse_charge = null ;
$abilita_autofattura = null ;
$autofattura_vendita = null ;
$fattura_acquisto_originale = null ;
if ( ! empty ( $fattura )) {
2024-04-09 12:18:08 +02:00
$reverse_charge = $fattura -> getRighe () -> first ( fn ( $item , $key ) => $item -> aliquota != null && substr ( $item -> aliquota -> codice_natura_fe , 0 , 2 ) == 'N6' ) -> id ;
2022-05-13 13:23:15 +02:00
$autofattura_vendita = Fattura :: find ( $fattura -> id_autofattura );
2023-08-04 14:54:28 +02:00
2022-07-06 15:48:04 +02:00
$abilita_autofattura = (( $fattura -> anagrafica -> nazione -> iso2 != 'IT' && ! empty ( $fattura -> anagrafica -> nazione -> iso2 )) || $reverse_charge ) && $dir == 'uscita' && $fattura -> id_autofattura == null ;
2022-05-13 13:23:15 +02:00
$fattura_acquisto_originale = Fattura :: where ( 'id_autofattura' , '=' , $fattura -> id ) -> first ();
2022-07-06 15:48:04 +02:00
$autofattura_collegata = Fattura :: where ( 'id_autofattura' , '=' , $fattura -> id ) -> where ( 'id' , '!=' , $fattura_acquisto_originale -> id ) -> orderBy ( 'id' , 'DESC' ) -> first ();
2022-05-13 13:23:15 +02:00
}
2023-07-19 18:47:36 +02:00
2023-08-04 14:54:28 +02:00
$superselect [ 'idtipodocumento' ] = $record [ 'idtipodocumento' ];
2017-08-04 16:28:16 +02:00
}