2018-02-03 16:29:53 +01: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 />.
*/
2018-02-03 16:29:53 +01:00
include_once __DIR__ . '/../../../core.php' ;
$idarticolo = get ( 'idarticolo' );
2021-12-17 13:36:12 +01:00
$limit = get ( 'limit' );
2018-02-03 16:29:53 +01:00
switch ( $resource ) {
// Legge gli ultimi prezzi di vendita di un determinato cliente e un determinato articolo e li visualizza per suggerire il prezzo di vendita
case 'getprezzi' :
2022-07-24 22:48:30 +02:00
$ids = [];
2018-02-03 16:29:53 +01:00
$idanagrafica = get ( 'idanagrafica' );
$ids = [ '""' ];
echo '<small>' ;
if ( ! empty ( $idarticolo )) {
// Ultime 5 vendite al cliente
2024-02-26 15:53:39 +01:00
$documenti = $dbo -> fetchArray ( '
SELECT
`iddocumento` AS id ,
" Fattura " AS tipo ,
" Fatture di vendita " AS modulo ,
( `subtotale` - `sconto` ) / `qta` AS costo_unitario ,
`co_documenti` . `numero` AS n_documento ,
`co_documenti` . `numero_esterno` AS n2_documento ,
`co_documenti` . `data` AS data_documento
FROM
`co_righe_documenti`
INNER JOIN `co_documento` ON `co_documenti` . `id` = `co_righe_documenti` . `iddocumento`
INNER JOIN `co_tipidocumento` ON `co_tipidocumento` . `id` = `co_documenti` . `idtipodocumento`
WHERE
`idarticolo` = '.prepare($idarticolo).' AND `co_tipidocumento` . `dir` = " entrata " AND `idanagrafica` = '.prepare($idanagrafica).' )
2020-04-15 16:25:44 +02:00
UNION
2024-02-26 15:53:39 +01:00
SELECT
`idddt` AS id ,
" Ddt " AS tipo ,
" Ddt di vendita " AS modulo ,
( `subtotale` - `sconto` ) / `qta` AS costo_unitario ,
( SELECT `numero` FROM `dt_ddt` WHERE `id` = `idddt` ) AS n_documento ,
( SELECT `numero_esterno` FROM `dt_ddt` WHERE `id` = `idddt` ) AS n2_documento ,
( SELECT `data` FROM `dt_ddt` WHERE `id` = `idddt` ) AS data_documento
FROM
`dt_righe_ddt`
WHERE
`idarticolo` = '.$idarticolo.' AND `idddt` IN ( SELECT `id` FROM `dt_ddt` WHERE `idtipoddt` IN ( SELECT `id` FROM `dt_tipiddt` WHERE `dir` = " entrata " ) AND `idanagrafica` = '.prepare($idanagrafica).' ) ORDER BY `id` DESC LIMIT 0 , 5 ' );
2018-02-03 16:29:53 +01:00
2020-04-15 16:25:44 +02:00
if ( sizeof ( $documenti ) > 0 ) {
2021-10-26 10:29:30 +02:00
echo " <br/><table class='table table-striped table-bordered table-extra-condensed' > \n " ;
2020-03-27 13:48:55 +01:00
echo " <tr><th width='180'>Documento</th> \n " ;
echo " <th width='100' class='text-right' >Totale</th></tr> \n " ;
2018-02-03 16:29:53 +01:00
2020-04-15 16:25:44 +02:00
for ( $i = 0 ; $i < sizeof ( $documenti ); ++ $i ) {
( $documenti [ $i ][ 'n2_documento' ] != '' ) ? $n_documento = $documenti [ $i ][ 'n2_documento' ] : $n_documento = $documenti [ $i ][ 'n_documento' ];
2018-02-03 16:29:53 +01:00
2020-04-15 16:25:44 +02:00
$link_id = Modules :: get ( $documenti [ $i ][ 'modulo' ])[ 'id' ];
2020-09-23 17:53:19 +02:00
echo " <tr><td class='first_cell text-left'><a href=' " . base_path () . '/editor.php?id_module=' . $link_id . '&id_record=' . $documenti [ $i ][ 'id' ] . " ' target= \" _blank \" title= \" Apri il documento su una nuova finestra \" > " . $documenti [ $i ][ 'tipo' ] . '. n. ' . $n_documento . ' del ' . Translator :: dateToLocale ( $documenti [ $i ][ 'data_documento' ]) . " </a></td> \n " ;
2020-04-15 16:25:44 +02:00
echo " <td class='table_cell text-right'> " . moneyFormat ( $documenti [ $i ][ 'costo_unitario' ]) . " </td></tr> \n " ;
2022-07-24 22:48:30 +02:00
$ids [] = '"' . $documenti [ $i ][ 'id' ] . '"' ;
2018-02-03 16:29:53 +01:00
}
echo " </table> \n " ;
} else {
2020-04-15 16:25:44 +02:00
echo '<br/>' . tr ( 'Nessuna vendita trovata di questo articolo al cliente' ) . " ...<br/> \n " ;
2018-02-03 16:29:53 +01:00
}
}
echo '</small>' ;
break ;
2024-01-15 15:30:45 +01:00
// Legge gli ultimi prezzi di vendita di un determinato articolo e li visualizza per suggerire il prezzo di vendita
2018-02-03 16:29:53 +01:00
case 'getprezzivendita' :
2022-07-24 22:48:30 +02:00
$ids = [];
2018-02-03 16:29:53 +01:00
echo '<small>' ;
// Ultime 5 vendite totali
2023-06-05 12:16:05 +02:00
$documenti = $dbo -> fetchArray ( '
SELECT
2024-02-26 15:53:39 +01:00
`iddocumento` AS id ,
`co_tipidocumento_lang` . `name` AS tipo ,
2023-06-05 12:16:05 +02:00
" Fatture di vendita " AS modulo ,
2024-02-26 15:53:39 +01:00
(( `subtotale` - `sconto` ) / `qta` * IF ( `co_tipidocumento` . `reversed` , - 1 , 1 )) AS costo_unitario ,
`co_documenti` . `numero` AS n_documento ,
`co_documenti` . `numero_esterno` AS n2_documento ,
`co_documenti` . `data` AS data_documento
2023-06-05 12:16:05 +02:00
FROM
2024-02-26 15:53:39 +01:00
`co_righe_documenti`
INNER JOIN `co_documenti` ON `co_documenti` . `id` = `co_righe_documenti` . `iddocumento`
INNER JOIN `co_tipidocumento` ON `co_tipidocumento` . `id` = `co_documenti` . `idtipodocumento`
LEFT JOIN `co_tipidocumento_lang` ON ( `co_tipidocumento_lang` . `id_record` = `co_tipidocumento` . `id` AND `co_tipidocumento_lang` . `id_lang` = '.prepare(setting(' Lingua ')).' )
2023-06-05 12:16:05 +02:00
WHERE
2024-02-26 15:53:39 +01:00
`idarticolo` = '.prepare($idarticolo).' AND `dir` = " entrata "
2020-04-15 16:25:44 +02:00
UNION
2023-06-05 12:16:05 +02:00
SELECT
2024-02-26 15:53:39 +01:00
`idddt` AS id ,
`dt_tipiddt` . `descrizione` AS tipo ,
2023-06-05 12:16:05 +02:00
" Ddt di vendita " AS modulo ,
2024-02-26 15:53:39 +01:00
( `subtotale` - `sconto` ) / `qta` AS costo_unitario ,
`dt_ddt` . `numero` AS n_documento ,
`dt_ddt` . `numero_esterno` AS n2_documento ,
`dt_ddt` . `data` AS data_documento
2023-06-05 12:16:05 +02:00
FROM
2024-02-26 15:53:39 +01:00
`dt_righe_ddt`
INNER JOIN `dt_ddt` ON `dt_ddt` . `id` = `dt_righe_ddt` . `idddt`
INNER JOIN `dt_tipiddt` ON `dt_tipiddt` . `id` = `dt_ddt` . `idtipoddt`
2023-06-05 12:16:05 +02:00
WHERE
2024-02-26 15:53:39 +01:00
`idarticolo` = '.prepare($idarticolo).' AND `dir` = " entrata "
2023-06-05 12:16:05 +02:00
ORDER BY
2024-02-26 15:53:39 +01:00
`id`
2023-06-05 12:16:05 +02:00
DESC ' );
2018-02-03 16:29:53 +01:00
2020-04-15 16:25:44 +02:00
if ( sizeof ( $documenti ) > 0 ) {
2021-12-17 13:36:12 +01:00
echo " <table class='table table-striped table-bordered table-extra-condensed' > \n " ;
2020-03-27 13:48:55 +01:00
echo " <tr><th width='180'>Documento</th> \n " ;
echo " <th width='100' class='text-right' >Totale</th></tr> \n " ;
2018-02-03 16:29:53 +01:00
2020-04-15 16:25:44 +02:00
for ( $i = 0 ; $i < sizeof ( $documenti ); ++ $i ) {
( $documenti [ $i ][ 'n2_documento' ] != '' ) ? $n_documento = $documenti [ $i ][ 'n2_documento' ] : $n_documento = $documenti [ $i ][ 'n_documento' ];
2018-02-03 16:29:53 +01:00
2020-04-15 16:25:44 +02:00
$link_id = Modules :: get ( $documenti [ $i ][ 'modulo' ])[ 'id' ];
2023-06-05 12:16:05 +02:00
echo " <tr><td class='first_cell text-left'><a href=' " . base_path () . '/editor.php?id_module=' . $link_id . '&id_record=' . $documenti [ $i ][ 'id' ] . " ' target= \" _blank \" title= \" Apri il documento su una nuova finestra \" > " . $documenti [ $i ][ 'tipo' ] . ' n. ' . $n_documento . ' del ' . Translator :: dateToLocale ( $documenti [ $i ][ 'data_documento' ]) . " </a></td> \n " ;
2020-04-15 16:25:44 +02:00
echo " <td class='table_cell text-right'> " . moneyFormat ( $documenti [ $i ][ 'costo_unitario' ]) . " </td></tr> \n " ;
2022-07-24 22:48:30 +02:00
$ids [] = '"' . $documenti [ $i ][ 'id' ] . '"' ;
2018-02-03 16:29:53 +01:00
}
echo " </table> \n " ;
} else {
2021-12-17 13:36:12 +01:00
echo '' . tr ( 'Nessuna vendita trovata di questo articolo' ) . " ...<br/> \n " ;
2018-02-03 16:29:53 +01:00
}
break ;
2024-01-15 15:30:45 +01:00
// Legge gli ultimi prezzi di acquisto di un determinato articolo e li visualizza per suggerire il prezzo di acquisto
2018-02-03 16:29:53 +01:00
case 'getprezziacquisto' :
2022-07-24 22:48:30 +02:00
$ids = [];
2018-02-03 16:29:53 +01:00
echo '<small>' ;
2020-04-15 16:25:44 +02:00
// Ultimi 5 acquisti totali
2023-06-05 12:16:05 +02:00
$documenti = $dbo -> fetchArray ( '
SELECT
2024-02-26 15:53:39 +01:00
`iddocumento` AS id ,
`co_tipidocumento_lang` . `name` AS tipo ,
2023-06-05 12:16:05 +02:00
" Fatture di acquisto " AS modulo ,
2024-02-26 15:53:39 +01:00
(( `subtotale` - `sconto` ) / `qta` * IF ( `co_tipidocumento` . `reversed` , - 1 , 1 )) AS costo_unitario ,
`co_documenti` . `numero` AS n_documento ,
`co_documenti` . `numero_esterno` AS n2_documento ,
`co_documenti` . `data` AS data_documento
2023-06-05 12:16:05 +02:00
FROM
2024-02-26 15:53:39 +01:00
`co_righe_documenti`
INNER JOIN `co_documenti` ON `co_documenti` . `id` = `co_righe_documenti` . `iddocumento`
INNER JOIN `co_tipidocumento` ON `co_tipidocumento` . `id` = `co_documenti` . `idtipodocumento`
LEFT JOIN `co_tipidocumento_lang` ON ( `co_tipidocumento_lang` . `id_record` = `co_tipidocumento` . `id` AND `co_tipidocumento_lang` . `id_lang` = '.prepare(setting(' Lingua ')).' )
2023-06-05 12:16:05 +02:00
WHERE
2024-02-26 15:53:39 +01:00
`idarticolo` = '.prepare($idarticolo).' AND `dir` = " uscita "
2020-04-15 16:25:44 +02:00
UNION
2023-06-05 12:16:05 +02:00
SELECT
2024-02-26 15:53:39 +01:00
`idddt` AS id ,
`dt_tipiddt` . `descrizione` AS tipo ,
2023-06-05 12:16:05 +02:00
" Ddt di acquisto " AS modulo ,
2024-02-26 15:53:39 +01:00
( `subtotale` - `sconto` ) / `qta` AS costo_unitario ,
`dt_ddt` . `numero` AS n_documento ,
`dt_ddt` . `numero_esterno` AS n2_documento ,
`dt_ddt` . `data` AS data_documento
2023-06-05 12:16:05 +02:00
FROM
2024-02-26 15:53:39 +01:00
`dt_righe_ddt`
INNER JOIN `dt_ddt` ON `dt_ddt` . `id` = `dt_righe_ddt` . `idddt`
INNER JOIN `dt_tipiddt` ON `dt_tipiddt` . `id` = `dt_ddt` . `idtipoddt`
2023-06-05 12:16:05 +02:00
WHERE
2024-02-26 15:53:39 +01:00
`idarticolo` = '.prepare($idarticolo).' AND `dir` = " uscita "
2023-06-05 12:16:05 +02:00
ORDER BY
2024-02-26 15:53:39 +01:00
`id`
2023-06-05 12:16:05 +02:00
DESC ' );
2018-02-03 16:29:53 +01:00
2020-04-15 16:25:44 +02:00
if ( sizeof ( $documenti ) > 0 ) {
2021-12-17 13:36:12 +01:00
echo " <table class='table table-striped table-bordered table-extra-condensed' > \n " ;
2020-03-27 13:48:55 +01:00
echo " <tr><th width='180'>Documento</th> \n " ;
2020-04-15 16:25:44 +02:00
echo " <th width='100' class='text-right' >Totale</th></tr> \n " ;
2018-02-03 16:29:53 +01:00
2020-04-15 16:25:44 +02:00
for ( $i = 0 ; $i < sizeof ( $documenti ); ++ $i ) {
( $documenti [ $i ][ 'n2_documento' ] != '' ) ? $n_documento = $documenti [ $i ][ 'n2_documento' ] : $n_documento = $documenti [ $i ][ 'n_documento' ];
2018-02-03 16:29:53 +01:00
2020-04-15 16:25:44 +02:00
$link_id = Modules :: get ( $documenti [ $i ][ 'modulo' ])[ 'id' ];
2023-06-05 12:16:05 +02:00
echo " <tr><td class='first_cell text-left'><a href=' " . base_path () . '/editor.php?id_module=' . $link_id . '&id_record=' . $documenti [ $i ][ 'id' ] . " ' target= \" _blank \" title= \" Apri il documento su una nuova finestra \" > " . $documenti [ $i ][ 'tipo' ] . ' n. ' . $n_documento . ' del ' . Translator :: dateToLocale ( $documenti [ $i ][ 'data_documento' ]) . " </a></td> \n " ;
2020-04-15 16:25:44 +02:00
echo " <td class='table_cell text-right'> " . moneyFormat ( $documenti [ $i ][ 'costo_unitario' ]) . " </td></tr> \n " ;
2022-07-24 22:48:30 +02:00
$ids [] = '"' . $documenti [ $i ][ 'id' ] . '"' ;
2018-02-03 16:29:53 +01:00
}
echo " </table> \n " ;
} else {
2021-12-17 13:36:12 +01:00
echo '' . tr ( 'Nessun acquisto trovato di questo articolo' ) . " ...<br/> \n " ;
2018-02-03 16:29:53 +01:00
}
2020-08-27 09:15:30 +02:00
break ;
2024-01-15 15:30:45 +01:00
/*
* Opzioni utilizzate :
* - id_articolo
* - id_anagrafica
*/
2020-10-30 14:19:02 +01:00
case 'dettagli_articolo' :
2020-08-27 09:15:30 +02:00
$id_articolo = get ( 'id_articolo' );
$id_anagrafica = get ( 'id_anagrafica' );
$direzione = get ( 'dir' ) == 'uscita' ? 'uscita' : 'entrata' ;
if ( empty ( $id_articolo ) || empty ( $id_anagrafica )) {
return ;
}
$prezzi_ivati = setting ( 'Utilizza prezzi di vendita comprensivi di IVA' );
2022-11-17 12:47:29 +01:00
// Prezzi netti clienti / listino fornitore
2020-10-30 14:19:02 +01:00
$query = ' SELECT minimo , massimo ,
sconto_percentuale ,
2020-08-27 09:15:30 +02:00
'.($prezzi_ivati ? ' prezzo_unitario_ivato ' : ' prezzo_unitario ').' AS prezzo_unitario
FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($direzione).' | where |
ORDER BY minimo ASC , massimo DESC ' ;
$query_anagrafica = replace ( $query , [
'|where|' => ' AND id_anagrafica = ' . prepare ( $id_anagrafica ),
]);
2022-11-15 17:38:42 +01:00
$prezzi = $database -> fetchArray ( $query_anagrafica );
2022-11-17 12:47:29 +01:00
// Prezzi listini clienti
2022-11-15 17:38:42 +01:00
$query = ' SELECT sconto_percentuale AS sconto_percentuale_listino ,
'.($prezzi_ivati ? ' prezzo_unitario_ivato ' : ' prezzo_unitario ').' AS prezzo_unitario_listino
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini . id = mg_listini_articoli . id_listino
LEFT JOIN an_anagrafiche ON mg_listini . id = an_anagrafiche . id_listino
2023-12-29 16:15:38 +01:00
WHERE mg_listini . data_attivazione <= NOW ()
AND ( mg_listini_articoli . data_scadenza >= NOW () OR ( mg_listini_articoli . data_scadenza IS NULL AND mg_listini . data_scadenza_predefinita >= NOW ()))
AND mg_listini . attivo = 1
AND id_articolo = '.prepare($id_articolo).'
AND dir = '.prepare($direzione).'
AND idanagrafica = ' . prepare ( $id_anagrafica );
$listino = $database -> fetchArray ( $query );
2020-08-27 09:15:30 +02:00
2022-11-17 12:47:29 +01:00
// Prezzi listini clienti sempre visibili
$query = ' SELECT mg_listini . nome , sconto_percentuale AS sconto_percentuale_listino_visibile ,
'.($prezzi_ivati ? ' prezzo_unitario_ivato ' : ' prezzo_unitario ').' AS prezzo_unitario_listino_visibile
FROM mg_listini
LEFT JOIN mg_listini_articoli ON mg_listini . id = mg_listini_articoli . id_listino
2023-12-29 16:15:38 +01:00
WHERE mg_listini . data_attivazione <= NOW ()
AND ( mg_listini_articoli . data_scadenza >= NOW () OR ( mg_listini_articoli . data_scadenza IS NULL AND mg_listini . data_scadenza_predefinita >= NOW ()))
AND mg_listini . attivo = 1
AND mg_listini . is_sempre_visibile = 1
AND id_articolo = '.prepare($id_articolo).'
AND dir = ' . prepare ( $direzione );
2022-11-17 12:47:29 +01:00
$listini_sempre_visibili = $database -> fetchArray ( $query );
// Prezzi scheda articolo
2022-11-15 17:38:42 +01:00
if ( $direzione == 'uscita' ) {
$prezzo_articolo = $database -> fetchArray ( 'SELECT prezzo_acquisto AS prezzo_scheda FROM mg_articoli WHERE id = ' . prepare ( $id_articolo ));
} else {
$prezzo_articolo = $database -> fetchArray ( 'SELECT ' . ( $prezzi_ivati ? 'prezzo_vendita_ivato' : 'prezzo_vendita' ) . ' AS prezzo_scheda FROM mg_articoli WHERE id = ' . prepare ( $id_articolo ));
2020-08-27 09:15:30 +02:00
}
2022-11-15 17:38:42 +01:00
// Ultimo prezzo al cliente
2024-02-26 15:53:39 +01:00
$ultimo_prezzo = $dbo -> fetchArray ( 'SELECT ' . ( $prezzi_ivati ? '(`prezzo_unitario_ivato`-`sconto_unitario_ivato`)' : '(`prezzo_unitario`-`sconto_unitario`)' ) . ' AS prezzo_ultimo FROM `co_righe_documenti` INNER JOIN `co_documenti` ON `co_documenti`.`id`=`co_righe_documenti`.`iddocumento` INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id`=`co_documenti`.`idtipodocumento` WHERE `idarticolo`=' . prepare ( $id_articolo ) . ' AND `idanagrafica`=' . prepare ( $id_anagrafica ) . ' AND `co_tipidocumento`.`dir`=' . prepare ( $direzione ) . ') ORDER BY `data` DESC LIMIT 0,1' );
2022-11-15 17:38:42 +01:00
2022-11-17 12:47:29 +01:00
$results = array_merge ( $prezzi , $listino , $listini_sempre_visibili , $prezzo_articolo , $ultimo_prezzo );
2022-11-15 17:38:42 +01:00
2020-08-27 09:15:30 +02:00
echo json_encode ( $results );
2018-02-03 16:29:53 +01:00
break ;
}