From 7ad756e2f7a984e44e6a4f0b3c3eb0b71dee60ce Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Tue, 11 May 2021 11:50:44 +0200 Subject: [PATCH] Aggiunta creazione ordine fornitore da preventivo --- CHANGELOG.md | 1 + include/common/importa.php | 6 +-- modules/interventi/actions.php | 5 ++- modules/ordini/actions.php | 63 +++++++++++++++++++++++++++ modules/ordini/crea_documento.php | 2 +- modules/preventivi/buttons.php | 10 ++++- modules/preventivi/crea_documento.php | 7 ++- src/Common/Components/Component.php | 10 ++--- 8 files changed, 90 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dd496b95..d5a5e47a5 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k - Nuovo filtro in contratti per mostrare al cliente solo i contratti collegati. - Nuovo pulsante **Duplica Template** per copiare un template già esistente. - Aggiunto controllo nelle fatture di vendita per segnalare l'eventuale fatturazione di un'attività con la data di una sessione futura rispetto alla data della fattura. + - Aggiunta possibilità di creare un ordine fornitore da un preventivo. ## 2.4.22 diff --git a/include/common/importa.php b/include/common/importa.php index f638aea7b..af5fc5343 100755 --- a/include/common/importa.php +++ b/include/common/importa.php @@ -138,9 +138,9 @@ if (!empty($options['create_document'])) { } // Selezione fornitore per Ordine fornitore - if ($options['op'] == 'add_ordine_cliente') { - $tipo_anagrafica = tr('Fornitore'); - $ajax = 'fornitori'; + if ($options['op'] == 'add_ordine_cliente' || $options['op'] == 'add_intervento' || $options['op'] == 'add_ordine_fornitore') { + $tipo_anagrafica = $options['op'] == 'add_intervento' ? tr('Cliente') : tr('Fornitore'); + $ajax = $options['op'] == 'add_intervento' ? 'clienti' : 'fornitori'; echo '
diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index ddc98f1ee..d6a498e7f 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -394,6 +394,7 @@ switch (post('op')) { break; // Aggiunta di un documento in ordine + case 'add_intervento': case 'add_documento': $class = post('class'); $id_documento = post('id_documento'); @@ -413,8 +414,10 @@ switch (post('op')) { if (post('create_document') == 'on') { $stato = Stato::find(post('id_stato_intervento')); $tipo = TipoSessione::find(post('id_tipo_intervento')); + + $anagrafica = post('idanagrafica') ? Anagrafica::find(post('idanagrafica')) : $documento->anagrafica; - $intervento = Intervento::build($documento->anagrafica, $tipo, $stato, post('data')); + $intervento = Intervento::build($anagrafica, $tipo, $stato, post('data')); $intervento->idsede_destinazione = $id_sede; $intervento->id_documento_fe = $documento->id_documento_fe; diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index e912c4e9c..c60359850 100755 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -27,6 +27,7 @@ use Modules\Ordini\Components\Riga; use Modules\Ordini\Components\Sconto; use Modules\Ordini\Ordine; use Modules\Ordini\Tipo; +use Modules\Preventivi\Preventivo; $module = Modules::get($id_module); @@ -480,6 +481,68 @@ switch (post('op')) { } } + // Modifica finale dello stato + if (post('create_document') == 'on') { + $ordine->idstatoordine = post('id_stato'); + $ordine->save(); + } + + ricalcola_costiagg_ordine($id_record); + + flash()->info(tr('Ordine _NUM_ aggiunto!', [ + '_NUM_' => $ordine->numero, + ])); + + break; + + // Aggiunta di un ordine fornitore da un preventivo + case 'add_ordine_fornitore': + $preventivo = Preventivo::find(post('id_documento')); + + // Creazione dell' ordine al volo + if (post('create_document') == 'on') { + $anagrafica = Anagrafica::find(post('idanagrafica')); + $tipo = Tipo::where('dir', $dir)->first(); + + $ordine = Ordine::build($anagrafica, $tipo, post('data')); + $ordine->save(); + + $id_record = $ordine->id; + } + + $righe = $preventivo->getRighe(); + foreach ($righe as $riga) { + if (post('evadere')[$riga->id] == 'on' and !empty(post('qta_da_evadere')[$riga->id])) { + $qta = post('qta_da_evadere')[$riga->id]; + + $copia = $riga->copiaIn($ordine, $qta, false); + $copia->save(); + + // Ripristino dei valori di default per campi potenzialmente impostati + $copia->original_id = null; + $copia->original_type = null; + $copia->qta = $qta; + $copia->qta_evasa = 0; + $copia->costo_unitario = 0; + $copia->setSconto(0, 'EUR'); + + // Impostazione al prezzo di acquisto per Articoli + if ($copia->isArticolo()) { + $articolo = $copia->articolo; + $fornitore = $articolo->dettaglioFornitore($anagrafica->id); // Informazioni del fornitore + $copia->setPrezzoUnitario($fornitore ? $fornitore->prezzo_acquisto : $articolo->prezzo_acquisto, $copia->aliquota->id); + } + + $copia->save(); + } + } + + // Modifica finale dello stato + if (post('create_document') == 'on') { + $ordine->idstatoordine = post('id_stato'); + $ordine->save(); + } + ricalcola_costiagg_ordine($id_record); flash()->info(tr('Ordine _NUM_ aggiunto!', [ diff --git a/modules/ordini/crea_documento.php b/modules/ordini/crea_documento.php index 11c3201d7..c7ae8e9eb 100755 --- a/modules/ordini/crea_documento.php +++ b/modules/ordini/crea_documento.php @@ -38,7 +38,7 @@ if (get('documento') == 'fattura') { $tipo_documento_finale = Ordine::class; } elseif (get('documento') == 'intervento') { $final_module = 'Interventi'; - $op = 'add_documento'; + $op = $module->name == 'Ordini cliente' ? 'add_documento' : 'add_intervento'; $tipo_documento_finale = Intervento::class; } else { $final_module = $module['name'] == 'Ordini cliente' ? 'Ddt di vendita' : 'Ddt di acquisto'; diff --git a/modules/preventivi/buttons.php b/modules/preventivi/buttons.php index 384053232..38310aaa7 100644 --- a/modules/preventivi/buttons.php +++ b/modules/preventivi/buttons.php @@ -59,10 +59,16 @@ echo '
  • - + '.tr('Ordine cliente').' -
  • + + +
  • + + '.tr('Ordine fornitore').' + +
  • diff --git a/modules/preventivi/crea_documento.php b/modules/preventivi/crea_documento.php index 41a26b861..5193c25c8 100644 --- a/modules/preventivi/crea_documento.php +++ b/modules/preventivi/crea_documento.php @@ -31,10 +31,14 @@ if (get('documento') == 'fattura') { $final_module = 'Fatture di vendita'; $op = 'add_documento'; $tipo_documento_finale = Fattura::class; -} elseif (get('documento') == 'ordine') { +} elseif (get('documento') == 'ordine_cliente') { $final_module = 'Ordini cliente'; $op = 'add_preventivo'; $tipo_documento_finale = Ordine::class; +} elseif (get('documento') == 'ordine_fornitore') { + $final_module = 'Ordini fornitore'; + $op = 'add_ordine_fornitore'; + $tipo_documento_finale = Ordine::class; } elseif (get('documento') == 'ddt') { $final_module = 'Ddt di vendita'; $op = 'add_documento'; @@ -50,7 +54,6 @@ $options = [ 'type' => 'preventivo', 'module' => $final_module, 'button' => tr('Aggiungi'), - 'dir' => 'entrata', 'create_document' => true, 'documento' => $documento, 'tipo_documento_finale' => $tipo_documento_finale, diff --git a/src/Common/Components/Component.php b/src/Common/Components/Component.php index 9a8ccdb3b..ccdfacc8d 100644 --- a/src/Common/Components/Component.php +++ b/src/Common/Components/Component.php @@ -181,12 +181,13 @@ abstract class Component extends Model /** * Copia l'oggetto (articolo, riga, descrizione) nel corrispettivo per il documento indicato. * - * @param Document $document Documento di destinazione - * @param float|null $qta Quantità da riportare + * @param Document $document Documento di destinazione + * @param float|null $qta Quantità da riportare + * @param boolean $evadi_qta_parent Definisce se evadere la quantità di provenienza * * @return self */ - public function copiaIn(Document $document, $qta = null) + public function copiaIn(Document $document, $qta = null, $evadi_qta_parent = true) { // Individuazione classe di destinazione $class = get_class($document); @@ -216,8 +217,7 @@ abstract class Component extends Model unset($attributes[$model->getDocumentID()]); // Riferimento di origine per l'evasione automatica della riga - $is_evasione = true; - if ($is_evasione) { + if ($evadi_qta_parent) { // Mantenimento dell'origine della riga precedente $model->original_id = $attributes['original_id']; $model->original_type = $attributes['original_type'];