2020-05-29 17:12:23 +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 />.
*/
2020-05-29 17:12:23 +02:00
2021-01-25 16:44:56 +01:00
use Modules\Anagrafiche\Anagrafica ;
2021-02-18 18:48:44 +01:00
use Modules\Articoli\Articolo ;
2021-09-20 13:33:45 +02:00
use Modules\Articoli\Export\CSV ;
2021-01-25 16:44:56 +01:00
use Modules\Preventivi\Components\Articolo as ArticoloPreventivo ;
2021-02-18 18:48:44 +01:00
use Modules\Preventivi\Preventivo ;
2021-01-25 16:44:56 +01:00
use Modules\TipiIntervento\Tipo as TipoSessione ;
2021-07-28 12:06:29 +02:00
use Plugins\ListinoClienti\DettaglioPrezzo ;
2021-09-20 13:33:45 +02:00
include_once __DIR__ . '/../../core.php' ;
2020-05-29 17:12:23 +02:00
switch ( post ( 'op' )) {
2020-12-10 17:20:19 +01:00
case 'change-acquisto' :
2020-07-13 18:24:18 +02:00
foreach ( $id_records as $id ) {
$articolo = Articolo :: find ( $id );
$percentuale = post ( 'percentuale' );
2020-07-16 16:49:36 +02:00
$new_prezzo_acquisto = $articolo -> prezzo_acquisto + ( $articolo -> prezzo_acquisto * $percentuale / 100 );
2020-07-13 18:24:18 +02:00
$articolo -> prezzo_acquisto = $new_prezzo_acquisto ;
$articolo -> save ();
2021-03-30 15:20:15 +02:00
2021-03-31 22:03:55 +02:00
if ( ! empty ( $articolo -> id_fornitore )) {
2021-03-30 15:20:15 +02:00
$prezzo_predefinito = DettaglioPrezzo :: dettaglioPredefinito ( $articolo -> id , $articolo -> id_fornitore , 'uscita' ) -> first ();
$prezzo_predefinito -> setPrezzoUnitario ( $new_prezzo_acquisto );
$prezzo_predefinito -> save ();
}
2020-07-13 18:24:18 +02:00
}
flash () -> info ( tr ( 'Prezzi di acquisto aggiornati!' ));
2020-07-16 16:49:36 +02:00
2020-07-13 18:24:18 +02:00
break ;
2021-03-31 22:03:55 +02:00
2021-03-29 12:48:53 +02:00
case 'change-vendita' :
2021-10-04 15:40:08 +02:00
$percentuale = post ( 'percentuale' );
$prezzo_partenza = post ( 'prezzo_partenza' );
2021-03-29 12:48:53 +02:00
foreach ( $id_records as $id ) {
$articolo = Articolo :: find ( $id );
2021-10-18 10:23:39 +02:00
$prezzo_partenza = post ( 'prezzo_partenza' ) == 'vendita' ? $articolo -> prezzo_vendita : $articolo -> prezzo_acquisto ;
2021-03-29 12:48:53 +02:00
2021-10-04 15:40:08 +02:00
$new_prezzo_vendita = $prezzo_partenza + ( $prezzo_partenza * $percentuale / 100 );
2021-03-30 15:20:15 +02:00
$articolo -> setPrezzoVendita ( $new_prezzo_vendita , $articolo -> idiva_vendita );
2021-03-29 12:48:53 +02:00
$articolo -> save ();
}
flash () -> info ( tr ( 'Prezzi di vendita aggiornati!' ));
break ;
2020-05-29 17:12:23 +02:00
case 'delete-bulk' :
foreach ( $id_records as $id ) {
$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 `idarticolo` = ' . prepare ( $id ) . ' )
UNION SELECT `dt_ddt` . `id` , `dt_ddt` . `data` , `dt_ddt` . `numero` , `dt_ddt` . `numero_esterno` , `dt_tipiddt` . `descrizione` AS tipo_documento , `dt_tipiddt` . `dir` FROM `dt_ddt` JOIN `dt_tipiddt` ON `dt_tipiddt` . `id` = `dt_ddt` . `idtipoddt` WHERE `dt_ddt` . `id` IN ( SELECT `idddt` FROM `dt_righe_ddt` WHERE `idarticolo` = '.prepare($id).' )
UNION SELECT `co_preventivi` . `id` , `co_preventivi` . `data_bozza` , `co_preventivi` . `numero` , 0 AS numero_esterno , " Preventivo " AS tipo_documento , 0 AS dir FROM `co_preventivi` WHERE `co_preventivi` . `id` IN ( SELECT `idpreventivo` FROM `co_righe_preventivi` WHERE `idarticolo` = '.prepare($id).' ) ORDER BY `data` ' );
if ( ! empty ( $elementi )) {
$dbo -> query ( 'UPDATE mg_articoli SET deleted_at = NOW() WHERE id = ' . prepare ( $id ) . Modules :: getAdditionalsQuery ( $id_module ));
2020-06-09 16:59:26 +02:00
} else {
2020-05-29 17:12:23 +02:00
$dbo -> query ( 'DELETE FROM `mg_articoli` WHERE id = ' . prepare ( $id ) . Modules :: getAdditionalsQuery ( $id_module ));
}
}
flash () -> info ( tr ( 'Articoli eliminati!' ));
2020-12-10 17:20:19 +01:00
break ;
2021-02-18 18:48:44 +01:00
2020-12-10 17:20:19 +01:00
case 'stampa-etichette' :
$_SESSION [ 'superselect' ][ 'id_articolo_barcode' ] = $id_records ;
$id_print = Prints :: getPrints ()[ 'Barcode' ];
2021-02-18 18:48:44 +01:00
redirect ( base_path () . '/pdfgen.php?id_print=' . $id_print . '&id_record=' . Articolo :: where ( 'barcode' , '!=' , '' ) -> first () -> id );
2020-12-10 17:20:19 +01:00
exit ();
2021-01-25 10:38:58 +01:00
break ;
case 'change-qta' :
$descrizione = post ( 'descrizione' );
$data = post ( 'data' );
$qta = post ( 'qta' );
$n_articoli = 0 ;
2021-02-18 18:48:44 +01:00
foreach ( $id_records as $id ) {
2021-01-25 10:38:58 +01:00
$articolo = Articolo :: find ( $id );
$qta_movimento = $qta - $articolo -> qta ;
$articolo -> movimenta ( $qta_movimento , $descrizione , $data , true );
++ $n_articoli ;
}
if ( $n_articoli > 0 ) {
flash () -> info ( tr ( 'Quantità cambiate a _NUM_ articoli!' , [
'_NUM_' => $n_articoli ,
]));
} else {
flash () -> warning ( tr ( 'Nessun articolo modificato!' ));
}
2021-01-25 16:44:56 +01:00
break ;
case 'crea-preventivo' :
$nome = post ( 'nome' );
$data = post ( 'data' );
$id_tipo = post ( 'id_tipo' );
$id_cliente = post ( 'id_cliente' );
$anagrafica = Anagrafica :: find ( $id_cliente );
$tipo = TipoSessione :: find ( $id_tipo );
$n_articoli = 0 ;
$preventivo = Preventivo :: build ( $anagrafica , $tipo , $nome , $data , 0 );
$id_preventivo = $preventivo -> id ;
2021-02-18 18:48:44 +01:00
foreach ( $id_records as $id ) {
2021-01-25 16:44:56 +01:00
$originale = Articolo :: find ( $id );
$articolo = ArticoloPreventivo :: build ( $preventivo , $originale );
$articolo -> qta = 1 ;
$articolo -> descrizione = $originale -> descrizione ;
$articolo -> um = $originale -> um ? : null ;
$articolo -> costo_unitario = $originale -> prezzo_acquisto ;
$articolo -> prezzo_unitario = $originale -> prezzo_vendita ;
$articolo -> idiva = $originale -> idiva_vendita ;
$articolo -> setPrezzoUnitario ( $originale -> prezzo_vendita , $originale -> idiva_vendita );
$articolo -> save ();
++ $n_articoli ;
}
if ( $n_articoli > 0 ) {
flash () -> info ( tr ( '_NUM_ articoli sono stati aggiunti al preventivo' , [
'_NUM_' => $n_articoli ,
]));
} else {
flash () -> warning ( tr ( 'Nessun articolo modificato!' ));
}
$database -> commitTransaction ();
2021-02-18 18:48:44 +01:00
redirect ( base_path () . '/editor.php?id_module=' . Modules :: get ( 'Preventivi' )[ 'id' ] . '&id_record=' . $id_preventivo );
2021-01-25 16:44:56 +01:00
exit ();
2020-05-29 17:12:23 +02:00
break ;
2021-09-20 13:33:45 +02:00
case 'export-csv' :
$file = temp_file ();
$exporter = new CSV ( $file );
// Esportazione dei record selezionati
$anagrafiche = Articolo :: whereIn ( 'id' , $id_records ) -> get ();
$exporter -> setRecords ( $anagrafiche );
$count = $exporter -> exportRecords ();
download ( $file , 'articoli.csv' );
break ;
2021-10-04 15:46:39 +02:00
case 'change-categoria' :
$categoria = post ( 'id_categoria' );
$n_articoli = 0 ;
foreach ( $id_records as $id ) {
$articolo = Articolo :: find ( $id );
$articolo -> id_categoria = $categoria ;
$articolo -> id_sottocategoria = null ;
$articolo -> save ();
++ $n_articoli ;
}
if ( $n_articoli > 0 ) {
flash () -> info ( tr ( 'Categoria cambiata a _NUM_ articoli!' , [
'_NUM_' => $n_articoli ,
]));
} else {
flash () -> warning ( tr ( 'Nessun articolo modificato!' ));
}
2021-10-04 15:47:39 +02:00
break ;
case 'change-iva' :
$iva = post ( 'id_iva' );
$n_articoli = 0 ;
foreach ( $id_records as $id ) {
$articolo = Articolo :: find ( $id );
$articolo -> idiva_vendita = $iva ;
$articolo -> save ();
++ $n_articoli ;
}
if ( $n_articoli > 0 ) {
2021-11-03 10:10:33 +01:00
flash () -> info ( tr ( 'Aliquota iva cambiata a _NUM_ articoli!' , [
2021-10-04 15:47:39 +02:00
'_NUM_' => $n_articoli ,
]));
} else {
flash () -> warning ( tr ( 'Nessun articolo modificato!' ));
}
2021-10-25 15:28:10 +02:00
break ;
case 'set-acquisto-ifzero' :
$n_art = 0 ;
foreach ( $id_records as $id ) {
$articolo = Articolo :: find ( $id );
if ( $articolo -> prezzo_acquisto == 0 && empty ( $articolo -> idfornitore )) {
$new_prezzo_acquisto = $dbo -> fetchOne ( 'SELECT (prezzo_unitario-sconto_unitario) AS prezzo_acquisto FROM co_righe_documenti LEFT JOIN co_documenti ON co_righe_documenti.iddocumento=co_documenti.id LEFT JOIN co_tipidocumento ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE idarticolo=' . prepare ( $id ) . ' AND dir="uscita" ORDER BY co_documenti.data DESC, co_righe_documenti.id DESC LIMIT 0,1' )[ 'prezzo_acquisto' ];
$articolo -> prezzo_acquisto = $new_prezzo_acquisto ;
$articolo -> save ();
if ( $new_prezzo_acquisto != 0 ) {
$n_art ++ ;
}
}
}
flash () -> info ( tr ( 'Prezzi di acquisto aggiornati per _NUM_ articoli!' , [
'_NUM_' => $n_art ,
]));
2021-11-03 10:10:33 +01:00
break ;
case 'change-um' :
$um = post ( 'um' );
$n_articoli = 0 ;
foreach ( $id_records as $id ) {
$articolo = Articolo :: find ( $id );
$articolo -> um = $um ;
$articolo -> save ();
++ $n_articoli ;
}
if ( $n_articoli > 0 ) {
flash () -> info ( tr ( 'Unità di misura cambiata a _NUM_ articoli!' , [
'_NUM_' => $n_articoli ,
]));
} else {
flash () -> warning ( tr ( 'Nessun articolo modificato!' ));
}
2021-11-04 15:55:33 +01:00
break ;
case 'change-conto-acquisto' :
$conto_acquisto = post ( 'conto_acquisto' );
$n_articoli = 0 ;
foreach ( $id_records as $id ) {
$articolo = Articolo :: find ( $id );
$articolo -> idconto_acquisto = $conto_acquisto ;
$articolo -> save ();
++ $n_articoli ;
}
if ( $n_articoli > 0 ) {
flash () -> info ( tr ( 'Conto predefinito di acquisto cambiato a _NUM_ articoli!' , [
'_NUM_' => $n_articoli ,
]));
} else {
flash () -> warning ( tr ( 'Nessun articolo modificato!' ));
}
break ;
case 'change-conto-vendita' :
$conto_vendita = post ( 'conto_vendita' );
$n_articoli = 0 ;
foreach ( $id_records as $id ) {
$articolo = Articolo :: find ( $id );
$articolo -> idconto_vendita = $conto_vendita ;
$articolo -> save ();
++ $n_articoli ;
}
if ( $n_articoli > 0 ) {
flash () -> info ( tr ( 'Conto predefinito di vendita cambiato a _NUM_ articoli!' , [
'_NUM_' => $n_articoli ,
]));
} else {
flash () -> warning ( tr ( 'Nessun articolo modificato!' ));
}
2021-10-04 15:46:39 +02:00
break ;
2020-05-29 17:12:23 +02:00
}
if ( App :: debug ()) {
$operations [ 'delete-bulk' ] = [
'text' => '<span><i class="fa fa-trash"></i> ' . tr ( 'Elimina selezionati' ) . '</span>' ,
'data' => [
'msg' => tr ( 'Vuoi davvero eliminare gli articoli selezionati?' ),
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-danger' ,
],
];
}
2021-09-20 13:33:45 +02:00
$operations [ 'export-csv' ] = [
'text' => '<span><i class="fa fa-download"></i> ' . tr ( 'Esporta selezionati' ) . '</span>' ,
'data' => [
'msg' => tr ( 'Vuoi esportare un CSV con le anagrafiche selezionate?' ),
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-success' ,
'blank' => true ,
],
];
2020-12-10 17:20:19 +01:00
$operations [ 'change-acquisto' ] = [
2020-11-12 10:13:23 +01:00
'text' => '<span><i class="fa fa-refresh"></i> ' . tr ( 'Aggiorna prezzo di acquisto' ) . '</span>' ,
2020-07-13 18:24:18 +02:00
'data' => [
'title' => tr ( 'Aggiornare il prezzo di acquisto per gli articoli selezionati?' ),
2021-07-27 18:11:54 +02:00
'msg' => 'Per indicare uno sconto inserire la percentuale con il segno meno, al contrario per un rincaro inserire la percentuale senza segno.<br><br>{[ "type": "number", "label": "' . tr ( 'Percentuale sconto/magg.' ) . '", "name": "percentuale", "required": 1, "icon-after": "%" ]}' ,
2020-07-13 18:24:18 +02:00
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
2021-03-29 12:48:53 +02:00
'blank' => false ,
],
];
$operations [ 'change-vendita' ] = [
'text' => '<span><i class="fa fa-refresh"></i> ' . tr ( 'Aggiorna prezzo di vendita' ) . '</span>' ,
'data' => [
'title' => tr ( 'Aggiornare il prezzo di vendita per gli articoli selezionati?' ),
2021-10-04 15:40:08 +02:00
'msg' => ' Per indicare uno sconto inserire la percentuale con il segno meno , al contrario per un rincaro inserire la percentuale senza segno .< br >< br >
{[ " type " : " select " , " label " : " '.tr('Partendo da:').' " , " name " : " prezzo_partenza " , " required " : 1 , " values " : " list= \" acquisto \" : \" Prezzo di acquisto \" , \" vendita \" : \" Prezzo di vendita \" " ]} < br >
{[ " type " : " number " , " label " : " '.tr('Percentuale sconto/magg.').' " , " name " : " percentuale " , " required " : 1 , " icon-after " : " % " ]} ' ,
2021-03-29 12:48:53 +02:00
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
'blank' => false ,
2020-12-10 17:20:19 +01:00
],
];
$operations [ 'stampa-etichette' ] = [
'text' => '<span><i class="fa fa-barcode"></i> ' . tr ( 'Stampa etichette' ) . '</span>' ,
'data' => [
'title' => tr ( 'Stampare le etichette?' ),
'msg' => tr ( 'Per ciascun articolo selezionato, se presente il barcode, verrà stampata un\'etichetta' ),
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
'blank' => true ,
2020-07-13 18:24:18 +02:00
],
];
2021-01-25 10:38:58 +01:00
$operations [ 'change-qta' ] = [
'text' => '<span><i class="fa fa-refresh"></i> ' . tr ( 'Aggiorna quantità' ) . '</span>' ,
'data' => [
'title' => tr ( 'Cambiare le quantità?' ),
'msg' => tr ( 'Per ciascun articolo selezionato, verrà modificata la quantità' ) . '
< br >< br > {[ " type " : " text " , " label " : " '.tr('Quantità').' " , " name " : " qta " , " required " : 1 ]}
{[ " type " : " text " , " label " : " '.tr('Causale').' " , " name " : " descrizione " , " required " : 1 ]}
{[ " type " : " date " , " label " : " '.tr('Data').' " , " name " : " data " , " required " : 1 , " value " : " -now- " ]} ' ,
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
],
];
2021-01-25 16:44:56 +01:00
$operations [ 'crea-preventivo' ] = [
'text' => '<span><i class="fa fa-plus"></i> ' . tr ( 'Crea preventivo' ) . '</span>' ,
'data' => [
'title' => tr ( 'Creare preventivo?' ),
'msg' => tr ( 'Ogni articolo selezionato, verrà aggiunto al preventivo' ) . '
< br >< br > {[ " type " : " text " , " label " : " '.tr('Nome preventivo').' " , " name " : " nome " , " required " : 1 ]}
{[ " type " : " select " , " label " : " '.tr('Cliente').' " , " name " : " id_cliente " , " ajax-source " : " clienti " , " required " : 1 ]}
{[ " type " : " select " , " label " : " '.tr('Tipo di attività').' " , " name " : " id_tipo " , " values " : " query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento " , " required " : 1 ]}
{[ " type " : " date " , " label " : " '.tr('Data').' " , " name " : " data " , " required " : 1 , " value " : " -now- " ]} ' ,
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
],
];
2021-10-04 15:46:39 +02:00
$operations [ 'change-categoria' ] = [
'text' => '<span><i class="fa fa-briefcase"></i> ' . tr ( 'Aggiorna categoria' ) . '</span>' ,
'data' => [
'title' => tr ( 'Cambiare la categoria?' ),
'msg' => tr ( 'Per ciascun articolo selezionato, verrà modificata la categoria' ) . '
< br >< br > {[ " type " : " select " , " label " : " '.tr('Categoria').' " , " name " : " id_categoria " , " required " : 1 , " ajax-source " : " categorie " ]} ' ,
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
],
];
2021-10-04 15:47:39 +02:00
$operations [ 'change-iva' ] = [
'text' => '<span><i class="fa fa-percent"></i> ' . tr ( 'Aggiorna aliquota iva' ) . '</span>' ,
'data' => [
'title' => tr ( 'Cambiare l\'aliquota iva?' ),
'msg' => tr ( 'Per ciascun articolo selezionato, verrà modificata l\'aliquota iva' ) . '
< br >< br > {[ " type " : " select " , " label " : " '.tr('Iva').' " , " name " : " id_iva " , " required " : 1 , " ajax-source " : " iva " ]} ' ,
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
],
];
2021-10-25 15:28:10 +02:00
$operations [ 'set-acquisto-ifzero' ] = [
'text' => '<span><i class="fa fa-refresh"></i> ' . tr ( 'Imposta prezzo di acquisto da fattura ' ) . '</span>' ,
'data' => [
'title' => tr ( 'Impostare il prezzo di acquisto per gli articoli selezionati?' ),
'msg' => 'Il prezzo di acquisto verrà impostato sugli articoli che non hanno nessun prezzo di acquisto inserito e verrà aggiornato in base alla fattura di acquisto più recente' ,
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
'blank' => false ,
],
];
2021-11-03 10:10:33 +01:00
$operations [ 'change-um' ] = [
'text' => '<span><i class="fa fa-balance-scale"></i> ' . tr ( 'Aggiorna unità di misura' ) . '</span>' ,
'data' => [
'title' => tr ( 'Cambiare l\'unità di misura?' ),
'msg' => tr ( 'Per ciascun articolo selezionato, verrà modificata l\'unità di misura' ) . '
< br >< br > {[ " type " : " select " , " label " : " '.tr('Unità di misura').' " , " name " : " um " , " required " : 1 , " ajax-source " : " misure " ]} ' ,
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
],
];
2021-11-04 15:55:33 +01:00
$operations [ 'change-conto-acquisto' ] = [
'text' => '<span><i class="fa fa-money"></i> ' . tr ( 'Aggiorna conto predefinito di acquisto' ) . '</span>' ,
'data' => [
'title' => tr ( 'Cambiare il conto predefinito di acquisto?' ),
'msg' => tr ( 'Per ciascun articolo selezionato, verrà modificato il conto predefinito di acquisto' ) . '
< br >< br > {[ " type " : " select " , " label " : " '.tr('Conto acquisto').' " , " name " : " conto_acquisto " , " required " : 1 , " ajax-source " : " conti-acquisti " ]} ' ,
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
],
];
$operations [ 'change-conto-vendita' ] = [
'text' => '<span><i class="fa fa-money"></i> ' . tr ( 'Aggiorna conto predefinito di vendita' ) . '</span>' ,
'data' => [
'title' => tr ( 'Cambiare il conto predefinito di vendita?' ),
'msg' => tr ( 'Per ciascun articolo selezionato, verrà modificato il conto predefinito di vendita' ) . '
< br >< br > {[ " type " : " select " , " label " : " '.tr('Conto vendita').' " , " name " : " conto_vendita " , " required " : 1 , " ajax-source " : " conti-vendite " ]} ' ,
'button' => tr ( 'Procedi' ),
'class' => 'btn btn-lg btn-warning' ,
],
];
2020-05-29 17:12:23 +02:00
return $operations ;