2018-02-19 10:52:42 +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-19 10:52:42 +01:00
2024-04-08 15:44:33 +02:00
$result [ 'idarticolo' ] ? ? = null ;
2020-07-06 13:32:43 +02:00
$qta_minima = 0 ;
2022-11-15 17:38:42 +01:00
$id_listino = $dbo -> selectOne ( 'an_anagrafiche' , 'id_listino' , [ 'idanagrafica' => $options [ 'idanagrafica' ]])[ 'id_listino' ];
2020-07-06 13:32:43 +02:00
2018-02-19 10:52:42 +01:00
// Articolo
2023-02-24 14:49:39 +01:00
$database = database ();
2024-02-29 15:10:55 +01:00
$articolo = $database -> fetchOne ( ' SELECT
`mg_articoli` . `id` ,
`mg_fornitore_articolo` . `id` AS id_dettaglio_fornitore ,
IFNULL ( `mg_fornitore_articolo` . `codice_fornitore` , `mg_articoli` . `codice` ) AS codice ,
2024-04-18 17:44:05 +02:00
IFNULL ( `mg_fornitore_articolo` . `descrizione` , `mg_articoli_lang` . `title` ) AS descrizione ,
2024-02-29 15:10:55 +01:00
IFNULL ( `mg_fornitore_articolo` . `qta_minima` , 0 ) AS qta_minima
FROM `mg_articoli`
2024-04-02 16:53:36 +02:00
LEFT JOIN `mg_articoli_lang` ON ( `mg_articoli_lang` . `id_record` = `mg_articoli` . `id` AND `mg_articoli_lang` . `id_lang` = '.prepare(Models\Locale::getDefault()->id).' )
2024-02-29 15:10:55 +01:00
LEFT JOIN `mg_fornitore_articolo` ON `mg_fornitore_articolo` . `id_articolo` = `mg_articoli` . `id` AND `mg_fornitore_articolo` . `id` = '.prepare($result[' id_dettaglio_fornitore ']).'
WHERE
`mg_articoli` . `id` = '.prepare($result[' idarticolo ' ]));
2023-02-24 14:49:39 +01:00
$qta_minima = $articolo [ 'qta_minima' ];
2018-02-19 11:50:42 +01:00
2024-01-15 15:30:45 +01:00
echo '
2023-02-24 14:49:39 +01:00
{[ " type " : " select " , " disabled " : " 1 " , " label " : " '.tr('Articolo').' " , " name " : " idarticolo " , " value " : " '. $result['idarticolo'] .' " , " ajax-source " : " articoli " , " select-options " : '.json_encode($options[' select - options '][' articoli ']).' ]}
2020-08-27 09:15:30 +02:00
< script >
$ ( document ) . ready ( function (){
2020-10-30 14:19:02 +01:00
ottieniDettagliArticolo ( " '. $articolo['id'] .' " ) . then ( function (){
2020-08-27 09:15:30 +02:00
verificaPrezzoArticolo ();
2020-10-30 11:18:15 +01:00
verificaScontoArticolo ();
2022-11-15 17:38:42 +01:00
verificaMinimoVendita ();
2020-10-30 11:18:15 +01:00
});
2020-08-27 09:15:30 +02:00
});
2023-02-24 14:49:39 +01:00
</ script >
2020-02-14 17:02:16 +01:00
2022-05-19 17:42:41 +02:00
< input type = " hidden " name = " qta_minima " id = " qta_minima " value = " '. $qta_minima .' " >
< input type = " hidden " name = " provvigione_default " id = " provvigione_default " value = " '. $result['provvigione_default'] .' " >
2022-11-17 12:47:29 +01:00
< input type = " hidden " name = " tipo_provvigione_default " id = " provvigione_default " value = " '. $result['tipo_provvigione_default'] .' " >
< input type = " hidden " name = " blocca_minimo_vendita " value = " '.setting('Bloccare i prezzi inferiori al minimo di vendita').' " > ' ;
2020-07-06 13:32:43 +02:00
2020-02-14 17:02:16 +01:00
// Selezione impianto per gli Interventi
2024-04-23 12:01:59 +02:00
if ( $module -> getTranslation ( 'title' ) == 'Attività' ) {
2020-02-14 17:02:16 +01:00
echo '
< div class = " row " >
< div class = " col-md-12 " >
2022-01-21 13:30:24 +01:00
{[ " type " : " select " , " label " : " '.tr('Impianto su cui installare').' " , " name " : " id_impianto " , " value " : " '. $result['idimpianto'] .' " , " ajax-source " : " impianti-intervento " , " select-options " : '.json_encode($options[' select - options '][' impianti ']).' , " disabled " : " '.( $result['idimpianto'] ? 1 : 0).' " , " help " : " '.tr( " La selezione di un Impianto in questo campo provocherà l 'installazione di un nuovo Componente basato sull' Articolo corrente " ).' " ]}
2020-02-14 17:02:16 +01:00
</ div >
</ div > ' ;
2018-02-19 11:50:42 +01:00
}
2018-02-19 10:52:42 +01:00
echo App :: internalLoad ( 'riga.php' , $result , $options );
2020-02-14 17:02:16 +01:00
// Informazioni aggiuntive
2021-04-01 17:40:38 +02:00
$disabled = empty ( $result [ 'idarticolo' ]);
2018-02-19 10:52:42 +01:00
2021-04-01 17:40:38 +02:00
echo '
2020-04-21 15:44:49 +02:00
< div class = " row '.(!empty( $options['nascondi_prezzi'] ) ? 'hidden' : '').' " id = " prezzi_articolo " >
2020-02-14 17:02:16 +01:00
< div class = " col-md-4 text-center " >
2021-12-17 13:36:12 +01:00
< button type = " button " class = " btn btn-sm btn-info btn-block '.( $disabled ? 'disabled' : '').' " '.($disabled ? ' disabled ' : ' ').' onclick = " $ ( \ '#prezziacquisto \ ').toggleClass( \ 'hide \ '); $ ( \ '#prezziacquisto \ ').load( \ ''.base_path(). " / ajax_complete . php ? module = Articoli & op = getprezziacquisto & idarticolo = ' + ( $(' #idarticolo option:selected').val() || $('#idarticolo').val()) + '&limit=5".'\');">
2021-05-24 15:43:49 +02:00
< i class = " fa fa-shopping-cart " ></ i > '.tr(' Ultimi prezzi di acquisto ').'
2020-02-14 17:02:16 +01:00
</ button >
2021-12-17 13:36:12 +01:00
< br >
2020-04-15 16:25:44 +02:00
< div id = " prezziacquisto " class = " hide " ></ div >
2020-02-14 17:02:16 +01:00
</ div >
2018-02-19 10:52:42 +01:00
2020-02-14 17:02:16 +01:00
< div class = " col-md-4 text-center " >
2020-09-23 17:53:19 +02:00
< button type = " button " class = " btn btn-sm btn-info btn-block '.( $disabled ? 'disabled' : '').' " '.($disabled ? ' disabled ' : ' ').' onclick = " $ ( \ '#prezzi \ ').toggleClass( \ 'hide \ '); $ ( \ '#prezzi \ ').load( \ ''.base_path(). " / ajax_complete . php ? module = Articoli & op = getprezzi & idarticolo = ' + ( $(' #idarticolo option:selected').val() || $('#idarticolo').val()) + '&idanagrafica=".$options['idanagrafica'].'\');">
2021-05-24 15:43:49 +02:00
< i class = " fa fa-handshake-o " ></ i > '.($options[' dir '] == ' entrata ' ? tr(' Ultimi prezzi al cliente ') : tr(' Ultimi prezzi dal fornitore ')).'
2020-02-14 17:02:16 +01:00
</ button >
2020-04-15 16:25:44 +02:00
< div id = " prezzi " class = " hide " ></ div >
2018-02-19 10:52:42 +01:00
</ div >
2020-02-14 17:02:16 +01:00
< div class = " col-md-4 text-center " >
2021-12-17 13:36:12 +01:00
< button type = " button " class = " btn btn-sm btn-info btn-block '.( $disabled ? 'disabled' : '').' " '.($disabled ? ' disabled ' : ' ').' onclick = " $ ( \ '#prezzivendita \ ').toggleClass( \ 'hide \ '); $ ( \ '#prezzivendita \ ').load( \ ''.base_path(). " / ajax_complete . php ? module = Articoli & op = getprezzivendita & idarticolo = ' + ( $(' #idarticolo option:selected').val() || $('#idarticolo').val()) + '&limit=5".'\');">
2021-05-24 15:43:49 +02:00
< i class = " fa fa-money " ></ i > '.tr(' Ultimi prezzi di vendita ').'
2020-02-14 17:02:16 +01:00
</ button >
2021-12-17 13:36:12 +01:00
< br >
2020-02-14 17:02:16 +01:00
< div id = " prezzivendita " class = " hide " ></ div >
</ div >
</ div >
2021-04-01 17:40:38 +02:00
< br >
2020-02-14 17:02:16 +01:00
< script >
2020-08-27 09:15:30 +02:00
var direzione = " '. $options['dir'] .' " ;
2020-10-30 14:19:02 +01:00
globals . aggiunta_articolo = {
};
2020-02-14 17:02:16 +01:00
$ ( document ) . ready ( function () {
2020-08-27 09:15:30 +02:00
if ( direzione === " uscita " ) {
2020-10-30 14:19:02 +01:00
aggiornaQtaMinima ();
$ ( " #qta " ) . keyup ( aggiornaQtaMinima );
2020-08-27 09:15:30 +02:00
}
});
2022-11-15 17:38:42 +01:00
input ( " tipo_sconto " ) . on ( " change " , function () {
2020-10-30 15:12:46 +01:00
verificaScontoArticolo ();
2020-10-30 11:18:15 +01:00
});
2020-08-27 09:15:30 +02:00
$ ( " #idarticolo " ) . on ( " change " , function () {
// Operazioni sui prezzi in fondo alla pagina
let prezzi_precedenti = $ ( " #prezzi_articolo button " );
if ( prezzi_precedenti . length ) {
prezzi_precedenti . attr ( " disabled " , ! $ ( this ) . val ());
2020-02-14 17:02:16 +01:00
if ( $ ( this ) . val ()) {
2020-08-27 09:15:30 +02:00
prezzi_precedenti . removeClass ( " disabled " );
} else {
prezzi_precedenti . addClass ( " disabled " );
}
2020-02-14 17:02:16 +01:00
2020-08-27 09:15:30 +02:00
$ ( " #prezzi " ) . html ( " " );
$ ( " #prezzivendita " ) . html ( " " );
$ ( " #prezziacquisto " ) . html ( " " );
2022-02-17 16:13:58 +01:00
$ ( " #prezzo_unitario " ) . val ( " " );
2020-08-27 09:15:30 +02:00
}
2020-02-14 17:02:16 +01:00
2020-08-27 09:15:30 +02:00
if ( ! $ ( this ) . val ()) {
return ;
}
2020-02-27 16:19:07 +01:00
2020-08-27 09:15:30 +02:00
// Autoimpostazione dei campi relativi all\'articolo
let $data = $ ( this ) . selectData ();
2020-10-30 14:19:02 +01:00
ottieniDettagliArticolo ( $data . id ) . then ( function () {
2020-08-27 09:15:30 +02:00
if ( $ ( " #prezzo_unitario " ) . val () . toEnglish () === 0 ){
2020-10-30 14:19:02 +01:00
aggiornaPrezzoArticolo ();
2020-08-27 09:15:30 +02:00
} else {
verificaPrezzoArticolo ();
}
2020-07-06 13:32:43 +02:00
2020-10-30 11:18:15 +01:00
if ( $ ( " #sconto " ) . val () . toEnglish () === 0 ){
aggiornaScontoArticolo ();
} else {
verificaScontoArticolo ();
}
2022-04-27 10:33:02 +02:00
$ ( " #costo_unitario " ) . val ( $data . prezzo_acquisto );
$ ( " #descrizione_riga " ) . val ( $data . descrizione );
2020-07-06 13:32:43 +02:00
2022-04-27 10:33:02 +02:00
if ( direzione === " entrata " ) {
if ( $data . idiva_vendita ) {
$ ( " #idiva " ) . selectSetNew ( $data . idiva_vendita , $data . iva_vendita , { " percentuale " : $data . percentuale });
}
2020-08-27 09:15:30 +02:00
}
2022-04-27 10:33:02 +02:00
else {
$ ( " #id_dettaglio_fornitore " ) . val ( $data . id_dettaglio_fornitore );
$ ( " #qta_minima " ) . val ( $data . qta_minima );
aggiornaQtaMinima ();
}
let id_conto = $data . idconto_ '.($options[' dir '] == ' entrata ' ? ' vendita ' : ' acquisto ').' ;
let id_conto_title = $data . idconto_ '.($options[' dir '] == ' entrata ' ? ' vendita ' : ' acquisto ').' _title ;
if ( id_conto ) {
$ ( " #idconto " ) . selectSetNew ( id_conto , id_conto_title );
}
$ ( " #um " ) . selectSetNew ( $data . um , $data . um );
2022-05-19 17:42:41 +02:00
if ( $data . provvigione ) {
input ( " provvigione " ) . set ( $data . provvigione );
input ( " tipo_provvigione " ) . set ( $data . tipo_provvigione );
} else {
input ( " provvigione " ) . set ( input ( " provvigione_default " ) . get ());
input ( " tipo_provvigione " ) . set ( input ( " tipo_provvigione_default " ) . get ());
}
2022-04-27 10:33:02 +02:00
});
2020-08-27 09:15:30 +02:00
});
2020-10-30 11:18:15 +01:00
$ ( document ) . on ( " change " , " input[name^=qta], input[name^=prezzo_unitario], input[name^=sconto] " , function () {
2020-08-27 09:15:30 +02:00
verificaPrezzoArticolo ();
2020-10-30 11:18:15 +01:00
verificaScontoArticolo ();
2022-11-15 17:38:42 +01:00
verificaMinimoVendita ();
2020-08-27 09:15:30 +02:00
});
/**
2020-10-30 14:19:02 +01:00
* Restituisce il dettaglio registrato per una specifica quantità dell\ ' articolo .
2020-08-27 09:15:30 +02:00
*/
2020-10-30 14:19:02 +01:00
function getDettaglioPerQuantita ( qta ) {
const data = globals . aggiunta_articolo . dettagli ;
if ( ! data ) return null ;
let dettaglio_predefinito = null ;
let dettaglio_selezionato = null ;
for ( const dettaglio of data ) {
2022-11-15 17:38:42 +01:00
if ( dettaglio . minimo == null && dettaglio . massimo == null && dettaglio . prezzo_unitario != null ) {
2020-10-30 14:19:02 +01:00
dettaglio_predefinito = dettaglio ;
2020-08-27 09:15:30 +02:00
continue ;
2020-02-14 17:02:16 +01:00
}
2020-10-30 14:19:02 +01:00
if ( qta >= dettaglio . minimo && qta <= dettaglio . massimo ) {
dettaglio_selezionato = dettaglio ;
2020-08-27 09:15:30 +02:00
}
}
2020-10-30 14:19:02 +01:00
if ( dettaglio_selezionato == null ) {
dettaglio_selezionato = dettaglio_predefinito ;
2020-08-27 09:15:30 +02:00
}
2020-10-30 14:19:02 +01:00
return dettaglio_selezionato ;
2018-02-19 11:50:42 +01:00
}
2020-02-14 17:02:16 +01:00
2020-10-30 11:18:15 +01:00
/**
2020-10-30 14:19:02 +01:00
* Restituisce il prezzo registrato per una specifica quantità dell\ ' articolo .
2020-10-30 11:18:15 +01:00
*/
2020-10-30 14:19:02 +01:00
function getPrezzoPerQuantita ( qta ) {
const dettaglio = getDettaglioPerQuantita ( qta );
2020-10-30 11:18:15 +01:00
2020-10-30 14:19:02 +01:00
return dettaglio ? parseFloat ( dettaglio . prezzo_unitario ) : 0 ;
2020-10-30 11:18:15 +01:00
}
2022-11-15 17:38:42 +01:00
/**
* Restituisce il prezzo del listino registrato per l\ ' articolo - anagrafica .
*/
function getPrezzoListino () {
const data = globals . aggiunta_articolo . dettagli ;
if ( ! data ) return null ;
let dettaglio_listino = null ;
for ( const dettaglio of data ) {
if ( dettaglio . prezzo_unitario_listino != null ) {
dettaglio_listino = dettaglio ;
continue ;
}
}
return dettaglio_listino ? parseFloat ( dettaglio_listino . prezzo_unitario_listino ) : 0 ;
}
/**
* Restituisce il prezzo della scheda articolo .
*/
function getPrezzoScheda () {
const data = globals . aggiunta_articolo . dettagli ;
if ( ! data ) return null ;
let dettaglio_scheda = null ;
for ( const dettaglio of data ) {
if ( dettaglio . prezzo_scheda != null ) {
dettaglio_scheda = dettaglio ;
continue ;
}
}
return dettaglio_scheda ? parseFloat ( dettaglio_scheda . prezzo_scheda ) : 0 ;
}
/**
* Restituisce l\ ' ultimo prezzo registrato dell\ ' articolo .
*/
function getPrezzoUltimo () {
const data = globals . aggiunta_articolo . dettagli ;
if ( ! data ) return null ;
let dettaglio_ultimo = null ;
for ( const dettaglio of data ) {
if ( dettaglio . prezzo_ultimo != null ) {
dettaglio_ultimo = dettaglio ;
continue ;
}
}
return dettaglio_ultimo ? parseFloat ( dettaglio_ultimo . prezzo_ultimo ) : 0 ;
}
2022-11-17 12:47:29 +01:00
/**
* Restituisce i prezzi dei listini sempre visibili registrati per l\ ' articolo .
*/
function getPrezziListinoVisibili ( nome = " " ) {
const data = globals . aggiunta_articolo . dettagli ;
if ( ! data ) return null ;
let dettaglio_prezzi_visibili = [];
for ( const dettaglio of data ) {
if ( dettaglio . prezzo_unitario_listino_visibile != null ) {
if ( nome != " " ) {
if ( dettaglio . nome == nome ) {
dettaglio_prezzi_visibili = parseFloat ( dettaglio . prezzo_unitario_listino_visibile );
continue ;
}
} else {
dettaglio_prezzi_visibili . push ( dettaglio );
}
}
}
return dettaglio_prezzi_visibili ;
}
2022-11-15 17:38:42 +01:00
/**
* Restituisce lo sconto registrato del listino registrato per l\ ' articolo - anagrafica .
*/
function getScontoListino () {
const data = globals . aggiunta_articolo . dettagli ;
if ( ! data ) return null ;
let dettaglio_listino = null ;
for ( const dettaglio of data ) {
if ( dettaglio . sconto_percentuale_listino != null ) {
dettaglio_listino = dettaglio ;
continue ;
}
}
return dettaglio_listino ? parseFloat ( dettaglio_listino . sconto_percentuale_listino ) : 0 ;
}
2022-11-17 12:47:29 +01:00
/**
* Restituisce lo sconto registrato del listino sempre visibile dell\ ' articolo .
*/
function getScontoListinoVisibile ( nome ) {
const data = globals . aggiunta_articolo . dettagli ;
if ( ! data ) return null ;
let dettaglio_listino_visibile = null ;
for ( const dettaglio of data ) {
if ( dettaglio . nome == nome ) {
dettaglio_listino_visibile = dettaglio ;
continue ;
}
}
return dettaglio_listino_visibile ? parseFloat ( dettaglio_listino_visibile . sconto_percentuale_listino_visibile ) : 0 ;
}
2020-08-27 09:15:30 +02:00
/**
2020-10-30 14:19:02 +01:00
* Restituisce lo sconto registrato per una specifica quantità dell\ ' articolo .
2020-08-27 09:15:30 +02:00
*/
2020-10-30 14:19:02 +01:00
function getScontoPerQuantita ( qta ) {
const dettaglio = getDettaglioPerQuantita ( qta );
2020-07-06 13:32:43 +02:00
2020-10-30 14:19:02 +01:00
return dettaglio ? parseFloat ( dettaglio . sconto_percentuale ) : 0 ;
2020-08-27 09:15:30 +02:00
}
2020-07-06 13:32:43 +02:00
2020-10-30 11:18:15 +01:00
/**
2020-10-30 14:19:02 +01:00
* Funzione per registrare localmente i dettagli definiti per l\ ' articolo in relazione ad una specifica anagrafica .
2020-10-30 11:18:15 +01:00
*/
2020-10-30 14:19:02 +01:00
function ottieniDettagliArticolo ( id_articolo ) {
return $ . get ( globals . rootdir + " /ajax_complete.php?module=Articoli&op=dettagli_articolo&id_anagrafica='. $options['idanagrafica'] .'&id_articolo= " + id_articolo + " &dir= " + direzione , function ( response ) {
2020-10-30 11:18:15 +01:00
const data = JSON . parse ( response );
2020-10-30 14:19:02 +01:00
globals . aggiunta_articolo . dettagli = data ;
2020-10-30 11:18:15 +01:00
});
}
2020-08-27 09:15:30 +02:00
/**
* Funzione per verificare se il prezzo unitario corrisponde a quello registrato per l\ ' articolo , e proporre in automatico una correzione .
*/
function verificaPrezzoArticolo () {
let prezzo_unitario_input = $ ( " #prezzo_unitario " );
let prezzo_unitario = prezzo_unitario_input . val () . toEnglish ();
2022-11-15 17:38:42 +01:00
let div = $ ( " .prezzi " );
2020-08-27 09:15:30 +02:00
2022-11-15 17:38:42 +01:00
div . css ( " padding-top " , " 0 " );
div . html ( " " );
2020-08-27 09:15:30 +02:00
2022-11-15 17:38:42 +01:00
let qta = $ ( " #qta " ) . val () . toEnglish ();
let prezzo_anagrafica = getPrezzoPerQuantita ( qta );
let prezzo_listino = getPrezzoListino ();
let prezzo_std = getPrezzoScheda ();
let prezzo_last = getPrezzoUltimo ();
2022-11-17 12:47:29 +01:00
let prezzo_minimo = parseFloat ( $ ( " #idarticolo " ) . selectData () . minimo_vendita );
let prezzi_visibili = getPrezziListinoVisibili ();
2022-11-15 17:38:42 +01:00
2022-11-17 12:47:29 +01:00
if ( prezzo_anagrafica || prezzo_listino || prezzo_std || prezzo_last || prezzo_minimo || prezzi_visibili ) {
2022-11-15 17:38:42 +01:00
div . html ( `<table class="table table-extra-condensed table-prezzi" style="background:#eee; margin-top:-13px;"><tbody>` );
2020-08-27 09:15:30 +02:00
}
2022-11-15 17:38:42 +01:00
let table = $ ( " .table-prezzi " );
2020-08-27 09:15:30 +02:00
2022-11-15 17:38:42 +01:00
if ( prezzo_anagrafica ) {
2024-01-15 15:30:45 +01:00
table . append ( `<tr><td class="pr_anagrafica"><small>'.($options['dir'] == 'uscita' ? tr('Prezzo listino') : tr('Netto cliente')).': '.Plugins::link($options['dir'] == 'uscita' ? 'Listino Fornitori' : 'Netto Clienti', $result['idarticolo'], tr('Visualizza'), null, '').'</small></td><td align="right" class="pr_anagrafica"><small>` + prezzo_anagrafica . toLocale () + ` ` + globals . currency + `</small></td>` );
2022-11-15 17:38:42 +01:00
let tr = $ ( " .pr_anagrafica " ) . parent ();
if ( prezzo_unitario == prezzo_anagrafica . toFixed ( 2 )) {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right disabled" style="font-size:10px;"><i class="fa fa-check"></i> '.tr('Aggiorna').'</button></td>` );
} else {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo(\'anagrafica\')" style="font-size:10px;"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></td>` );
}
table . append ( `</tr>` );
}
if ( prezzo_listino ) {
table . append ( `<tr><td class="pr_listino"><small>'.tr('Prezzo listino').': '.Modules::link('Listini Cliente', $id_listino, tr('Visualizza'), null, '').'</small></td><td align="right" class="pr_listino"><small>` + prezzo_listino . toLocale () + ` ` + globals . currency + `</small></td>` );
let tr = $ ( " .pr_listino " ) . parent ();
if ( prezzo_unitario == prezzo_listino . toFixed ( 2 )) {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right disabled" style="font-size:10px;"><i class="fa fa-check"></i> '.tr('Aggiorna').'</button></td>` );
} else {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo(\'listino\')" style="font-size:10px;"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></td>` );
}
table . append ( `</tr>` );
}
if ( prezzo_std ) {
table . append ( `<tr><td class="pr_std"><small>'.tr('Prezzo articolo').': '.Modules::link('Articoli', $result['idarticolo'], tr('Visualizza'), null, '').'</small></td><td align="right" class="pr_std"><small>` + prezzo_std . toLocale () + ` ` + globals . currency + `</small></td></tr>` );
let tr = $ ( " .pr_std " ) . parent ();
if ( prezzo_unitario == prezzo_std . toFixed ( 2 )) {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right disabled" style="font-size:10px;"><i class="fa fa-check"></i> '.tr('Aggiorna').'</button></td>` );
} else {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo(\'std\')" style="font-size:10px;"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></td>` );
}
}
if ( prezzo_last ) {
table . append ( `<tr><td class="pr_last"><small>'.tr('Ultimo prezzo').': '.Modules::link('Articoli', $result['idarticolo'], tr('Visualizza'), null, '').'</small></td><td align="right" class="pr_last"><small>` + prezzo_last . toLocale () + ` ` + globals . currency + `</small></td></tr>` );
let tr = $ ( " .pr_last " ) . parent ();
if ( prezzo_unitario == prezzo_last . toFixed ( 2 )) {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right disabled" style="font-size:10px;"><i class="fa fa-check"></i> '.tr('Aggiorna').'</button></td>` );
} else {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo(\'last\')" style="font-size:10px;"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></td>` );
}
}
2022-11-17 12:47:29 +01:00
if ( prezzo_minimo ) {
table . append ( `<tr><td class="pr_minimo"><small>'.tr('Prezzo minimo').': '.Modules::link('Articoli', $result['idarticolo'], tr('Visualizza'), null, '').'</small></td><td align="right" class="pr_minimo"><small>` + prezzo_minimo . toLocale () + ` ` + globals . currency + `</small></td></tr>` );
2022-11-15 17:38:42 +01:00
2022-11-17 12:47:29 +01:00
let tr = $ ( " .pr_minimo " ) . parent ();
if ( prezzo_unitario == prezzo_minimo . toFixed ( 2 )) {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right disabled" style="font-size:10px;"><i class="fa fa-check"></i> '.tr('Aggiorna').'</button></td>` );
} else {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo(\'minimo\')" style="font-size:10px;"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></td>` );
}
}
if ( prezzi_visibili ) {
let i = 0 ;
for ( const prezzo_visibile of prezzi_visibili ) {
i ++ ;
let prezzo_listino_visibile = parseFloat ( prezzo_visibile . prezzo_unitario_listino_visibile );
table . append ( `<tr><td class="pr_visibile_` + i + `"><small>'.tr('Listino visibile ').'(` + prezzo_visibile . nome + `): </small></td><td align="right" class="pr_visibile_` + i + `"><small>` + prezzo_listino_visibile . toLocale () + ` ` + globals . currency + `</small></td></tr>` );
let tr = $ ( " .pr_visibile_ " + i ) . parent ();
if ( prezzo_unitario == prezzo_listino_visibile . toFixed ( 2 )) {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right disabled" style="font-size:10px;"><i class="fa fa-check"></i> '.tr('Aggiorna').'</button></td>` );
} else {
tr . append ( `<td><button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaPrezzoArticolo(\'` + prezzo_visibile . nome + `\')" style="font-size:10px;"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></td>` );
}
}
}
if ( prezzo_anagrafica || prezzo_listino || prezzo_std || prezzo_last || prezzo_minimo || prezzi_visibili ) {
2022-11-15 17:38:42 +01:00
table . append ( `</tbody></table>` );
}
2020-10-30 11:18:15 +01:00
}
/**
* Funzione per verificare se lo sconto unitario corrisponde a quello registrato per l\ ' articolo , e proporre in automatico una correzione .
*/
function verificaScontoArticolo () {
2023-02-27 17:57:01 +01:00
let qta = $ ( " #qta " ) . val () . toEnglish ();
2022-11-15 17:38:42 +01:00
let prezzo_unitario_input = $ ( " #prezzo_unitario " );
let prezzo_unitario = prezzo_unitario_input . val () . toEnglish ();
let prezzo_anagrafica = getPrezzoPerQuantita ( qta );
let prezzo_listino = getPrezzoListino ();
2022-11-17 12:47:29 +01:00
let prezzi_visibili = getPrezziListinoVisibili ();
2022-11-15 17:38:42 +01:00
let sconto_previsto = 0 ;
if ( prezzo_unitario == prezzo_anagrafica . toFixed ( 2 )) {
sconto_previsto = getScontoPerQuantita ( qta );
} else if ( prezzo_unitario == prezzo_listino . toFixed ( 2 )) {
sconto_previsto = getScontoListino ();
2022-11-17 12:47:29 +01:00
} else {
for ( const prezzo_visibile of prezzi_visibili ) {
let prezzo_listino_visibile = parseFloat ( prezzo_visibile . prezzo_unitario_listino_visibile );
if ( prezzo_unitario == prezzo_listino_visibile . toFixed ( 2 )) {
sconto_previsto = getScontoListinoVisibile ( prezzo_visibile . nome );
}
}
2022-11-15 17:38:42 +01:00
}
2020-10-30 14:19:02 +01:00
2020-10-30 11:18:15 +01:00
let sconto_input = $ ( " #sconto " );
let sconto = sconto_input . val () . toEnglish ();
2022-11-15 17:38:42 +01:00
let div = $ ( " .sconto " );
if ( sconto_previsto === 0 || sconto_previsto === sconto ) {
2020-10-30 11:18:15 +01:00
div . css ( " padding-top " , " 0 " );
div . html ( " " );
return ;
}
2022-11-15 17:38:42 +01:00
div . css ( " margin-top " , " -13px " );
2024-05-16 18:02:50 +02:00
div . html ( ` <span class="right badge badge-info">'.tr('Sconto suggerito').': ` + sconto_previsto . toLocale () + `%<button type="button" class="btn btn-xs btn-info pull-right" onclick="aggiornaScontoArticolo()"><i class="fa fa-refresh"></i> '.tr('Aggiorna').'</button></small>` );
2020-07-06 13:32:43 +02:00
}
2020-08-27 09:15:30 +02:00
/**
* Funzione per aggiornare il prezzo unitario sulla base dei valori automatici .
*/
2022-11-15 17:38:42 +01:00
function aggiornaPrezzoArticolo ( aggiorna = " " ) {
let prezzo_previsto = 0 ;
if ( aggiorna == " listino " ) {
prezzo_previsto = getPrezzoListino ();
} else if ( aggiorna == " anagrafica " ) {
let qta = $ ( " #qta " ) . val () . toEnglish ();
prezzo_previsto = getPrezzoPerQuantita ( qta );
} else if ( aggiorna == " std " ) {
prezzo_previsto = getPrezzoScheda ();
} else if ( aggiorna == " last " ) {
prezzo_previsto = getPrezzoUltimo ();
2022-11-17 12:47:29 +01:00
} else if ( aggiorna == " minimo " ) {
prezzo_previsto = parseFloat ( $ ( " #idarticolo " ) . selectData () . minimo_vendita );
} else if ( aggiorna != " " ) {
prezzo_previsto = getPrezziListinoVisibili ( aggiorna );
2022-11-15 17:38:42 +01:00
} else {
2023-01-13 12:01:06 +01:00
// Inserisco il prezzo più basso tra listino e netto cliente, se mancanti imposto il prezzo della scheda articolo
2022-11-15 17:38:42 +01:00
let qta = $ ( " #qta " ) . val () . toEnglish ();
prezzo1 = getPrezzoPerQuantita ( qta );
prezzo2 = getPrezzoListino ();
2023-01-13 12:01:06 +01:00
prezzo3 = getPrezzoScheda ();
2022-11-15 17:38:42 +01:00
prezzo_previsto = ( ! prezzo1 ? prezzo2 : ( ! prezzo2 ? prezzo1 : ( prezzo1 > prezzo2 ? prezzo2 : prezzo1 )));
2023-01-13 12:01:06 +01:00
prezzo_previsto = ( prezzo_previsto ? prezzo_previsto : prezzo3 );
2022-11-15 17:38:42 +01:00
}
2020-07-06 13:32:43 +02:00
2020-08-27 10:08:26 +02:00
$ ( " #prezzo_unitario " ) . val ( prezzo_previsto ) . trigger ( " change " );
2022-11-28 14:50:21 +01:00
$ ( " #sconto " ) . val ( 0 ) . trigger ( " change " );
2021-01-11 19:08:34 +01:00
// Aggiornamento automatico di guadagno e margine
2021-05-03 11:43:25 +02:00
if ( direzione === " entrata " ) {
2021-01-11 19:08:34 +01:00
aggiorna_guadagno ();
}
2020-08-27 09:15:30 +02:00
}
2020-10-30 11:18:15 +01:00
/**
* Funzione per aggiornare lo sconto unitario sulla base dei valori automatici .
*/
function aggiornaScontoArticolo () {
2023-02-27 17:57:01 +01:00
let qta = $ ( " #qta " ) . val () . toEnglish ();
2022-11-15 17:38:42 +01:00
let prezzo_unitario_input = $ ( " #prezzo_unitario " );
let prezzo_unitario = prezzo_unitario_input . val () . toEnglish ();
let prezzo_anagrafica = getPrezzoPerQuantita ( qta );
let prezzo_listino = getPrezzoListino ();
2022-11-17 12:47:29 +01:00
let prezzi_visibili = getPrezziListinoVisibili ();
2022-11-15 17:38:42 +01:00
let sconto_previsto = 0 ;
if ( prezzo_unitario == prezzo_anagrafica . toFixed ( 2 )) {
sconto_previsto = getScontoPerQuantita ( qta );
} else if ( prezzo_unitario == prezzo_listino . toFixed ( 2 )) {
sconto_previsto = getScontoListino ();
2022-11-17 12:47:29 +01:00
} else {
for ( const prezzo_visibile of prezzi_visibili ) {
let prezzo_listino_visibile = parseFloat ( prezzo_visibile . prezzo_unitario_listino_visibile );
if ( prezzo_unitario == prezzo_listino_visibile . toFixed ( 2 )) {
sconto_previsto = getScontoListinoVisibile ( prezzo_visibile . nome );
}
}
2022-11-15 17:38:42 +01:00
}
2020-10-30 11:18:15 +01:00
$ ( " #sconto " ) . val ( sconto_previsto ) . trigger ( " change " );
2022-11-15 17:38:42 +01:00
input ( " tipo_sconto " ) . set ( " PRC " ) . trigger ( " change " );
2021-01-11 19:08:34 +01:00
// Aggiornamento automatico di guadagno e margine
2021-05-03 11:43:25 +02:00
if ( direzione === " entrata " ) {
2021-01-11 19:08:34 +01:00
aggiorna_guadagno ();
}
2020-10-30 11:18:15 +01:00
}
2020-08-27 09:15:30 +02:00
/**
* Funzione per l\ ' aggiornamento dinamico della quantità minima per l\ ' articolo .
*/
2020-10-30 14:19:02 +01:00
function aggiornaQtaMinima () {
2020-08-27 09:15:30 +02:00
let qta_minima = parseFloat ( $ ( " #qta_minima " ) . val ());
let qta = $ ( " #qta " ) . val () . toEnglish ();
2020-07-06 13:32:43 +02:00
2020-08-27 09:15:30 +02:00
if ( qta_minima === 0 ) {
2020-07-06 13:32:43 +02:00
return ;
}
2020-08-27 09:15:30 +02:00
let parent = $ ( " #qta " ) . closest ( " div " ) . parent ();
let div = parent . find ( " div[id*=errors] " );
2020-07-06 13:32:43 +02:00
div . html ( " <small>'.tr('Quantità minima').': " + qta_minima . toLocale () + " </small> " );
if ( qta < qta_minima ) {
parent . addClass ( " has-error " );
div . addClass ( " text-danger " ) . removeClass ( " text-success " );
} else {
parent . removeClass ( " has-error " );
div . removeClass ( " text-danger " ) . addClass ( " text-success " );
}
}
2021-10-26 11:28:38 +02:00
2022-11-15 17:38:42 +01:00
function verificaMinimoVendita () {
let prezzo_unitario_input = $ ( " #prezzo_unitario " );
let prezzo_unitario = prezzo_unitario_input . val () . toEnglish ();
let minimo_vendita = parseFloat ( $ ( " #idarticolo " ) . selectData () . minimo_vendita );
let div = $ ( " .minimo_vendita " );
div . css ( " margin-top " , " -13px " );
if ( prezzo_unitario < minimo_vendita ) {
2022-11-17 12:47:29 +01:00
if ( input ( " blocca_minimo_vendita " ) . get () == " 0 " ) {
2024-05-16 18:02:50 +02:00
div . html ( `<p class="badge-warning">'.tr('Attenzione:<br>valore inferiore al prezzo minimo di vendita ').'` + minimo_vendita . toLocale () + ` ` + globals . currency + `</p>` );
2022-11-17 12:47:29 +01:00
}
2022-11-15 17:38:42 +01:00
} else {
div . html ( " " );
}
2022-11-30 11:34:47 +01:00
if ( prezzo_unitario <= minimo_vendita ) {
if ( input ( " blocca_minimo_vendita " ) . get () == " 1 " ) {
prezzo_unitario_input . val ( minimo_vendita );
2024-05-16 18:02:50 +02:00
div . html ( `<p class="badge-warning">'.tr('Attenzione:<br>non è possibile inserire un prezzo inferiore al prezzo minimo di vendita ').'` + minimo_vendita . toLocale () + ` ` + globals . currency + `</p>` );
2022-11-30 11:34:47 +01:00
}
}
2022-11-15 17:38:42 +01:00
}
2020-02-14 17:02:16 +01:00
</ script > ' ;