diff --git a/modules/fatture/crea_documento.php b/modules/fatture/crea_documento.php index 8ad2234ac..03968f78e 100644 --- a/modules/fatture/crea_documento.php +++ b/modules/fatture/crea_documento.php @@ -73,7 +73,7 @@ echo '
'.str_replace('_NUM_', $numero, $head).'.
'; // Selezione articoli dell'ordine da portare nel ddt -$rs = $dbo->fetchArray('SELECT *, (qta - qta_evasa) AS qta_rimanente FROM '.$table.' INNER JOIN '.$rows.' ON '.$table.'.id='.$rows.'.'.$id.' WHERE '.$table.'.id='.prepare($id_record).' HAVING qta_rimanente > 0'); +$rs = $dbo->fetchArray('SELECT *, (qta - qta_evasa) AS qta_rimanente FROM '.$table.' INNER JOIN '.$rows.' ON '.$table.'.id='.$rows.'.'.$id.' WHERE '.$table.'.id='.prepare($id_record).' HAVING qta_rimanente > 0 ORDER BY `order`'); if (!empty($rs)) { echo ' diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index 888515988..5d30de6d7 100644 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -352,6 +352,97 @@ switch (post('op')) { } break; + + case 'ordine_da_preventivo': + + $idanagrafica = post('idanagrafica'); + + $data = $post['data']; + + // Leggo se l'ordine è cliente o fornitore + $rs = $dbo->fetchArray('SELECT id FROM or_tipiordine WHERE dir='.prepare($dir)); + $idtipoordine = $rs[0]['id']; + + if (isset($post['idanagrafica'])) { + $numero = get_new_numeroordine($data); + if ($dir == 'entrata') { + $numero_esterno = get_new_numerosecondarioordine($data); + } else { + $numero_esterno = ''; + } + + $campo = ($dir == 'entrata') ? 'idpagamento_vendite' : 'idpagamento_acquisti'; + + // Tipo di pagamento predefinito dall'anagrafica + $query = 'SELECT id FROM co_pagamenti WHERE id=(SELECT '.$campo.' AS pagamento FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')'; + $rs = $dbo->fetchArray($query); + $idpagamento = $rs[0]['id']; + + // Se l'ordine è un ordine cliente e non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni + if ($dir == 'entrata' && $idpagamento == '') { + $idpagamento = get_var('Tipo di pagamento predefinito'); + } + + $query = 'INSERT INTO or_ordini( numero, numero_esterno, idanagrafica, idtipoordine, idpagamento, data, idstatoordine ) VALUES ( '.prepare($numero).', '.prepare($numero_esterno).', '.prepare($idanagrafica).', '.prepare($idtipoordine).', '.prepare($idpagamento).', '.prepare($data).", (SELECT `id` FROM `or_statiordine` WHERE `descrizione`='Bozza') )"; + $dbo->query($query); + + $id_record = $dbo->lastInsertedID(); + + $_SESSION['infos'][] = tr('Aggiunto ordine numero _NUM_!', [ + '_NUM_' => $numero, + ]); + + + // Lettura di tutte le righe della tabella in arrivo + // Inserisco anche le righe descrittive + foreach ($post['evadere'] as $i => $value) { + // Processo solo le righe da evadere + if ($post['evadere'][$i] == 'on') { + + $descrizione = post('descrizione')[$i]; + $prezzo = post('subtot')[$i]; + $qta = post('qta_da_evadere')[$i]; + $idiva = post('idiva')[$i]; + $um = post('um')[$i]; + $subtot = $prezzo * $qta; + $idarticolo = post('idarticolo')[$i]; + $sconto = post('sconto')[$i]; + + // Ottengo le informazioni sullo sconto + $qprc = 'SELECT tipo_sconto, sconto_unitario FROM co_righe_preventivi WHERE id='.prepare($i); + $rsprc = $dbo->fetchArray($qprc); + + $sconto_unitario = $rsprc[0]['sconto_unitario']; + $tipo_sconto = $rsprc[0]['tipo_sconto']; + + $sconto = $sconto * $qta; + + // Calcolo iva + $query = 'SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva); + $rs = $dbo->fetchArray($query); + $iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; + $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; + + $query = 'INSERT INTO or_righe_ordini(idordine, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, is_descrizione, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($rs[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', '.prepare(empty($qta)).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($id_record).'))'; + $dbo->query($query); + + + } + + + } + + // Ricalcolo inps, ritenuta e bollo + if ($dir == 'entrata') { + ricalcola_costiagg_ordine($id_record); + } else { + ricalcola_costiagg_ordine($id_record); + } + + + } + + break; } if (post('op') !== null && post('op') != 'update') { diff --git a/modules/ordini/crea_documento.php b/modules/ordini/crea_documento.php new file mode 100644 index 000000000..88ba1b937 --- /dev/null +++ b/modules/ordini/crea_documento.php @@ -0,0 +1,269 @@ + [ + 'table' => 'co_preventivi', + 'rows' => 'co_righe_preventivi', + 'id' => 'idpreventivo', + 'condition' => '', + ] +]; + +$documento = get('documento'); + +$pos = 'preventivo'; +$op = 'ordine_da_preventivo'; + +$head = tr('Preventivo numero _NUM_'); + + +$table = $data[$pos]['table']; +$rows = $data[$pos]['rows']; +$id = $data[$pos]['id']; +$row = str_replace('id', 'id_riga_', $id); + +$module_name = "Ordini cliente"; + +$op = !empty($get['op']) ? $get['op'] : $op; + +$button = tr('Crea ordine'); +$button = !empty($get['op']) ? tr('Aggiungi') : $button; + +// Info documento +$rs = $dbo->fetchArray('SELECT * FROM '.$table.' WHERE id='.prepare($id_record)); +$numero = !empty($rs[0]['numero_esterno']) ? $rs[0]['numero_esterno'] : $rs[0]['numero']; +$idanagrafica = $rs[0]['idanagrafica']; +$idpagamento = $rs[0]['idpagamento']; +$idconto = $rs[0]['idconto']; + +/* + Form di inserimento riga documento +*/ +echo ' +'.str_replace('_NUM_', $numero, $head).'.
'; + + +// Selezione articoli del preventivo da copiare nell'ordine, usando l'ordinamento scelto dall'utente +$rs = $dbo->fetchArray('SELECT * FROM '.$table.' INNER JOIN '.$rows.' ON '.$table.'.id='.$rows.'.'.$id.' WHERE '.$table.'.id='.prepare($id_record).' ORDER BY `order`'); + +if (!empty($rs)) { + echo ' +'.tr('Seleziona le righe e le relative quantità da inserire nell\'ordine.').'.
+ +'; +} else { + echo ' +'.tr('Non ci sono articoli da evadere').'...
'; +} + +echo ' + '; + +?> + + diff --git a/modules/preventivi/buttons.php b/modules/preventivi/buttons.php new file mode 100644 index 000000000..cc0e35d8c --- /dev/null +++ b/modules/preventivi/buttons.php @@ -0,0 +1,26 @@ + + + + '; + + +} \ No newline at end of file