Aggiunta creazione ordine fornitore da preventivo

This commit is contained in:
MatteoPistorello 2021-05-11 11:50:44 +02:00
parent e1408aaf13
commit 7ad756e2f7
8 changed files with 90 additions and 14 deletions

View File

@ -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

View File

@ -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 '
<div class="col-md-6">

View File

@ -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;

View File

@ -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!', [

View File

@ -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';

View File

@ -59,10 +59,16 @@ echo '
</li>
<li>
<a class="'.($disabled ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ordine" data-toggle="modal" data-title="'.tr('Crea ordine cliente').'">
<a class="'.($disabled ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ordine_cliente" data-toggle="modal" data-title="'.tr('Crea ordine cliente').'">
<i class="fa fa-file-o"></i> '.tr('Ordine cliente').'
</a>
</li>
</li>
<li>
<a class="'.($disabled ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ordine_fornitore" data-toggle="modal" data-title="'.tr('Crea ordine fornitore').'">
<i class="fa fa-file-o"></i> '.tr('Ordine fornitore').'
</a>
</li>
<li>
<a class="'.($disabled ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=ddt" data-toggle="modal" data-title="'.tr('Crea ordine cliente').'">

View File

@ -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,

View File

@ -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'];