Creazione fattura da preventivo

This commit is contained in:
Thomas Zilio 2019-02-12 15:00:08 +01:00
parent 5ec14ec640
commit e32d4bae6f
7 changed files with 106 additions and 45 deletions

View File

@ -10,6 +10,7 @@ use UnexpectedValueException;
abstract class Article extends Row
{
protected $serialRowID = 'documento';
protected $abilita_movimentazione = true;
public static function build(Document $document, Original $articolo)
{
@ -76,7 +77,10 @@ abstract class Article extends Row
$diff = $value - $previous;
$this->attributes['qta'] = $value;
$this->movimenta($diff);
if ($this->abilita_movimentazione) {
$this->movimenta($diff);
}
$database = database();
@ -96,6 +100,11 @@ abstract class Article extends Row
return $this->belongsTo(Original::class, 'idarticolo');
}
public function movimentazione($value = true)
{
$this->abilita_movimentazione = $value;
}
protected static function boot()
{
parent::boot(true);
@ -144,8 +153,14 @@ abstract class Article extends Row
return true;
}
protected function customCopiaIn($original)
protected function customBeforeCopiaIn($original)
{
$this->movimentazione(false);
$this->articolo()->associate($original->articolo);
}
protected function customAfterCopiaIn($original)
{
$this->movimentazione(true);
}
}

View File

@ -72,7 +72,7 @@ abstract class Description extends Model
$model = new $object();
$model->setParent($document);
$model->customCopiaIn($this);
$model->customBeforeCopiaIn($this);
$model->save();
@ -83,6 +83,8 @@ abstract class Description extends Model
$attributes = array_intersect_key($attributes, $accepted);
$model->fill($attributes);
$model->customAfterCopiaIn($this);
$model->save();
// Rimozione quantità evasa
@ -96,11 +98,20 @@ abstract class Description extends Model
abstract public function getParentID();
/**
* Azione personalizzata per la copia dell'oggetto.
* Azione personalizzata per la copia dell'oggetto (prima della copia).
*
* @param $original
*/
protected function customCopiaIn($original)
protected function customBeforeCopiaIn($original)
{
}
/**
* Azione personalizzata per la copia dell'oggetto (dopo la copia).
*
* @param $original
*/
protected function customAfterCopiaIn($original)
{
}

View File

@ -81,7 +81,7 @@ switch (post('op')) {
'idsede' => post('idsede'),
'idconto' => post('idconto'),
'split_payment' => post('split_payment') ?: 0,
'is_fattura_conto_terzi' => post('is_fattura_conto_terzi') ?: 0,
'is_fattura_conto_terzi' => post('is_fattura_conto_terzi') ?: 0,
'n_colli' => post('n_colli'),
'tipo_resa' => post('tipo_resa'),
'bollo' => 0,
@ -543,27 +543,15 @@ switch (post('op')) {
}
$articolo->descrizione = post('descrizione');
$um = post('um');
if (!empty($um)) {
$articolo->um = $um;
}
$articolo->um = post('um') ?: null;
$articolo->id_iva = post('idiva');
$articolo->idconto = post('idconto');
if (post('calcolo_ritenuta_acconto')) {
$articolo->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto');
$articolo->id_ritenuta_acconto = post('id_ritenuta_acconto');
}else{
$articolo->calcolo_ritenuta_acconto = null;
$articolo->id_ritenuta_acconto = null;
}
$articolo->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
$articolo->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
if (post('id_rivalsa_inps')) {
$articolo->id_rivalsa_inps = post('id_rivalsa_inps');
}else{
$articolo->id_rivalsa_inps = null;
}
$articolo->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
if (post('prezzo_acquisto')) {
$riga->prezzo_unitario_acquisto = post('prezzo_acquisto');
@ -606,24 +594,15 @@ switch (post('op')) {
}
$riga->descrizione = post('descrizione');
$riga->um = (post('um')) ? :null;
$riga->um = post('um') ?: null;
$riga->id_iva = post('idiva');
$riga->idconto = post('idconto');
if (post('calcolo_ritenuta_acconto')) {
$riga->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto');
$riga->id_ritenuta_acconto = post('id_ritenuta_acconto');
}else{
$riga->calcolo_ritenuta_acconto = null;
$riga->id_ritenuta_acconto = null;
}
$articolo->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
$articolo->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
if (post('id_rivalsa_inps')) {
$riga->id_rivalsa_inps = post('id_rivalsa_inps');
}else{
$riga->id_rivalsa_inps = null;
}
$articolo->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
if (post('prezzo_acquisto')) {
$riga->prezzo_unitario_acquisto = post('prezzo_acquisto');

View File

@ -3,6 +3,8 @@
include_once __DIR__.'/../../core.php';
use Modules\Anagrafiche\Anagrafica;
use Modules\Fatture\Fattura;
use Modules\Fatture\Tipo as TipoFattura;
use Modules\Interventi\TipoSessione;
use Modules\Preventivi\Components\Articolo;
use Modules\Preventivi\Components\Riga;
@ -366,6 +368,34 @@ switch (post('op')) {
flash()->info(tr('Aggiunta nuova revisione!'));
break;
// Creazione fattura da contratto
case 'fattura_da_preventivo':
$preventivo = Preventivo::find($id_record);
$tipo = TipoFattura::where('descrizione', 'Fattura immediata di vendita')->first();
$id_segment = $dbo->fetchOne('SELECT * FROM zz_segments WHERE id_module='.prepare($id_module)." AND predefined='1'")['id'];
$data = date('Y-m-d');
$fattura = Fattura::build($preventivo->anagrafica, $tipo, $data, $id_segment);
$fattura->idpagamento = $preventivo->idpagamento;
$id_conto = setting('Conto predefinito fatture di vendita');
$righe = $preventivo->getRighe();
foreach ($righe as $riga) {
$copia = $riga->copiaIn($fattura);
$copia->movimenta($copia->qta);
$copia->idconto = $id_conto;
}
flash()->info(tr('Creata una nuova fattura!'));
$id_record = $fattura->id;
$id_module = Modules::get('Fatture di vendita')['id'];
break;
}
if (post('op') !== null && post('op') != 'update') {

View File

@ -3,17 +3,17 @@
include_once __DIR__.'/../../core.php';
echo'
<button type="button" class="btn btn-primary" onclick="if( confirm(\'Duplicare questo preventivo?\') ){ $(\'#form-copy\').submit(); }"> <i class="fa fa-copy"></i> '.tr('Duplica preventivo').'</button>';
<button type="button" class="btn btn-primary" onclick="if( confirm(\'Duplicare questo preventivo?\') ){ $(\'#copia-preventivo\').submit(); }"> <i class="fa fa-copy"></i> '.tr('Duplica preventivo').'</button>';
if (!in_array($record['stato'], ['Bozza', 'Rifiutato', 'In attesa di conferma'])) {
$disabled = '';
} else {
echo '
<button type="button" class="btn btn-warning" onclick="if(confirm(\'Vuoi creare un nuova revisione?\')){$(\'#form_crearevisione\').submit();}"><i class="fa fa-edit"></i> '.tr('Crea nuova revisione...').'</button>';
<button type="button" class="btn btn-warning" onclick="if(confirm(\'Vuoi creare un nuova revisione?\')){$(\'#crea-revisione\').submit();}"><i class="fa fa-edit"></i> '.tr('Crea nuova revisione...').'</button>';
$disabled = 'disabled';
}
// crea ordine
// Creazione altri documenti
echo '
<div style="margin-left:4px;" class="dropdown pull-right" >
<button class="btn btn-info dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" '.$disabled.' >
@ -26,21 +26,47 @@ echo '
<a data-href="'.$rootdir.'/modules/ordini/crea_documento.php?id_module='.$id_module.'&id_record='.$id_record.'&documento=ordine" data-toggle="modal" data-title="'.tr('Crea ordine').'"><i class="fa fa-file-o"></i>&nbsp;'.tr('Ordine').'
</a>
</li>
<li>
<a onclick="crea_fattura()"><i class="fa fa-file"></i>&nbsp;'.tr('Fattura').'
</a>
</li>
</ul>
</div>';
//duplica preventivo
// Duplica preventivo
echo '
<form action="" method="post" id="form-copy">
<form action="" method="post" id="copia-preventivo">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="copy">
</form>';
//crea revisione
// Crea revisione
echo '
<form action="" method="post" id="form_crearevisione">
<form action="" method="post" id="crea-revisione">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="add_revision">
<input type="hidden" name="id_record" value="'.$id_record.'">
</form>';
// Crea fattura
echo '
<form action="" method="post" id="fattura-da-preventivo">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="fattura_da_preventivo">
<input type="hidden" name="id_record" value="'.$id_record.'">
</form>
<script>
function crea_fattura(){
swal({
title: "'.tr('Creare una fattura per questo preventivo?').'",
type: "warning",
showCancelButton: true,
confirmButtonText: "'.tr('Sì').'"
}).then(function (result) {
$("#fattura-da-preventivo").submit();
})
}
</script>';

View File

@ -41,7 +41,7 @@ switch (filter('op')) {
case 'delete':
$directory = Plugins\ImportFE\FatturaElettronica::getImportDirectory();
delete($directory.'/'.get('filename'));
delete($directory.'/'.get('name'));
break;

View File

@ -17,7 +17,7 @@ class Interaction extends Connection
$list = [];
$files = glob($directory.'/*.xml');
$files = glob($directory.'/*.xml*');
foreach ($files as $file) {
$list[] = basename($file);
}