#4180 - Nota di credito per ddt in ingresso

This commit is contained in:
MatteoPistorello 2021-01-14 16:03:13 +01:00
parent 7ed9a7f50f
commit a488aad057
8 changed files with 49 additions and 19 deletions

View File

@ -72,17 +72,12 @@ if (!empty($options['create_document'])) {
// Opzioni aggiuntive per le Fatture // Opzioni aggiuntive per le Fatture
if (in_array($final_module['name'], ['Fatture di vendita', 'Fatture di acquisto'])) { if (in_array($final_module['name'], ['Fatture di vendita', 'Fatture di acquisto'])) {
if ($options['op'] == 'nota_accredito' && !empty($segmenti)) { $id_segment = $_SESSION['module_'.$final_module['id']]['id_segment'];
$segmento = $database->fetchOne("SELECT * FROM zz_segments WHERE predefined_accredito='1'");
$id_segment = $segmento['id']; $stato_predefinito = $database->fetchOne("SELECT id FROM co_statidocumento WHERE descrizione = 'Bozza'");
} else {
$id_segment = $_SESSION['module_'.$final_module['id']]['id_segment'];
}
$stato_predefinito = $database->fetchOne("SELECT * FROM co_statidocumento WHERE descrizione = 'Bozza'");
echo ' echo '
<input type="hidden" name="reversed" value="'.$options['reversed'].'">
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM co_statidocumento WHERE descrizione IN (\'Emessa\', \'Bozza\')", "value": "'.$stato_predefinito['id'].'"]} {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM co_statidocumento WHERE descrizione IN (\'Emessa\', \'Bozza\')", "value": "'.$stato_predefinito['id'].'"]}
</div> </div>

View File

@ -33,6 +33,7 @@ switch (filter('op')) {
$dbo->update('dt_causalet', [ $dbo->update('dt_causalet', [
'descrizione' => $descrizione, 'descrizione' => $descrizione,
'is_importabile' => filter('is_importabile'), 'is_importabile' => filter('is_importabile'),
'reversed' => filter('reversed'),
'predefined' => $predefined, 'predefined' => $predefined,
], ['id' => $id_record]); ], ['id' => $id_record]);

View File

@ -46,6 +46,9 @@ include_once __DIR__.'/../../core.php';
<div class="panel-body"> <div class="panel-body">
{[ "type": "checkbox", "label": "<?php echo tr('Importabile?'); ?>", "name": "is_importabile", "value": "$is_importabile$", "help": "<?php echo tr('I documenti associati a questa causale possono essere importati a livello contabile in altri documenti (per esempio, in Fatture)'); ?>", "placeholder": "<?php echo tr('Importabile'); ?>" ]} {[ "type": "checkbox", "label": "<?php echo tr('Importabile?'); ?>", "name": "is_importabile", "value": "$is_importabile$", "help": "<?php echo tr('I documenti associati a questa causale possono essere importati a livello contabile in altri documenti (per esempio, in Fatture)'); ?>", "placeholder": "<?php echo tr('Importabile'); ?>" ]}
</div> </div>
<div class="panel-body">
{[ "type": "checkbox", "label": "<?php echo tr('Abilita storno'); ?>", "name": "reversed", "value": "$reversed$", "help": "<?php echo tr('I documenti associati a questa causale possono essere stornati come nota di credito'); ?>", "placeholder": "<?php echo tr('Abilita storno'); ?>" ]}
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -23,7 +23,6 @@ echo '
<div class="tip" data-toggle="tooltip" title="'.tr("Il ddt è fatturabile solo se non si trova negli stati _STATE_LIST_ e la relativa causale è abilitata all'importazione in altri documenti", [ <div class="tip" data-toggle="tooltip" title="'.tr("Il ddt è fatturabile solo se non si trova negli stati _STATE_LIST_ e la relativa causale è abilitata all'importazione in altri documenti", [
'_STATE_LIST_' => 'Evaso, Parzialmente evaso, Parzialmente fatturato', '_STATE_LIST_' => 'Evaso, Parzialmente evaso, Parzialmente fatturato',
]).'"> ]).'">
<button class="btn btn-info '.($ddt->isImportabile() ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=fattura" data-toggle="modal" data-title="'.tr('Crea fattura').(($dir == 'entrata') ? ' di vendita' : ' di acquisto').'"> <button class="btn btn-info '.($ddt->isImportabile() ? '' : 'disabled').'" data-href="'.$structure->fileurl('crea_documento.php').'?id_module='.$id_module.'&id_record='.$id_record.'&documento=fattura" data-toggle="modal" data-title="'.tr('Crea ').($ddt->reversed ? 'nota di credito' : ($dir == 'entrata' ? 'fattura di vendita' : 'fattura di acquisto')).'"><i class="fa fa-magic"></i> '.tr('Crea ').($ddt->reversed ? 'nota di credito' : ($dir == 'entrata' ? 'fattura di vendita' : 'fattura di acquisto')).'
<i class="fa fa-magic"></i> '.tr('Crea fattura').(($dir == 'entrata') ? ' di vendita' : ' di acquisto').'
</button> </button>
</div>'; </div>';

View File

@ -21,14 +21,24 @@ include_once __DIR__.'/../../core.php';
use Modules\DDT\DDT; use Modules\DDT\DDT;
use Modules\Fatture\Fattura; use Modules\Fatture\Fattura;
$documento = DDT::find($id_record); $documento = DDT::find($id_record);
$module = Modules::get($id_module); $module = Modules::get($id_module);
if($documento->reversed){
$final_module = $module['name'] == 'Ddt di vendita' ? 'Fatture di vendita' : 'Fatture di acquisto'; if($module['name'] == 'Ddt di vendita'){
$dir = $module['name'] == 'Ddt di vendita' ? 'entrata' : 'uscita'; $final_module = 'Fatture di acquisto';
$tipo_documento_finale = Fattura::class; $dir = 'uscita';
} else {
$final_module = 'Fatture di vendita';
$dir = 'entrata';
}
} elseif($module['name'] == 'Ddt di vendita'){
$final_module = 'Fatture di vendita';
$dir = 'entrata';
} else {
$final_module = 'Fatture di acquisto';
$dir = 'uscita';
}
$options = [ $options = [
'op' => 'add_documento', 'op' => 'add_documento',
@ -40,6 +50,7 @@ $options = [
'create_document' => true, 'create_document' => true,
'documento' => $documento, 'documento' => $documento,
'tipo_documento_finale' => $tipo_documento_finale, 'tipo_documento_finale' => $tipo_documento_finale,
'reversed' => $documento->reversed,
]; ];
echo App::load('importa.php', [], $options, true); echo App::load('importa.php', [], $options, true);

View File

@ -133,6 +133,14 @@ class DDT extends Document
return $causale['is_importabile'] && !in_array($this->stato->descrizione, $stati_non_importabili); return $causale['is_importabile'] && !in_array($this->stato->descrizione, $stati_non_importabili);
} }
public function getReversedAttribute()
{
$database = database();
$causale = $database->fetchOne('SELECT * FROM `dt_causalet` WHERE `id` = '.prepare($this->idcausalet));
return $causale['reversed'];
}
/** /**
* Restituisce il peso calcolato sulla base degli articoli del documento. * Restituisce il peso calcolato sulla base degli articoli del documento.
* *

View File

@ -676,6 +676,7 @@ switch (post('op')) {
case 'add_documento': case 'add_documento':
$class = post('class'); $class = post('class');
$id_documento = post('id_documento'); $id_documento = post('id_documento');
$reversed = post('reversed');
// Individuazione del documento originale // Individuazione del documento originale
if (!is_subclass_of($class, \Common\Document::class)) { if (!is_subclass_of($class, \Common\Document::class)) {
@ -691,7 +692,12 @@ switch (post('op')) {
// Creazione della fattura al volo // Creazione della fattura al volo
if (post('create_document') == 'on') { if (post('create_document') == 'on') {
$descrizione = ($documento->direzione == 'entrata') ? 'Fattura immediata di vendita' : 'Fattura immediata di acquisto'; $descrizione = ($documento->direzione == 'entrata') ? 'Fattura immediata di vendita' : 'Fattura immediata di acquisto';
$tipo = Tipo::where('descrizione', $descrizione)->first();
if($reversed){
$tipo = Tipo::where('descrizione', 'Nota di credito')->where('dir', '!=', $documento->direzione)->first();
} else {
$tipo = Tipo::where('descrizione', $descrizione)->first();
}
$fattura = Fattura::build($documento->anagrafica, $tipo, post('data'), post('id_segment')); $fattura = Fattura::build($documento->anagrafica, $tipo, post('data'), post('id_segment'));
@ -714,6 +720,9 @@ switch (post('op')) {
foreach ($righe as $riga) { foreach ($righe as $riga) {
if (post('evadere')[$riga->id] == 'on') { if (post('evadere')[$riga->id] == 'on') {
$qta = post('qta_da_evadere')[$riga->id]; $qta = post('qta_da_evadere')[$riga->id];
if($reversed){
$qta = -$qta;
}
$copia = $riga->copiaIn($fattura, $qta); $copia = $riga->copiaIn($fattura, $qta);
$copia->id_conto = $id_conto; $copia->id_conto = $id_conto;

View File

@ -91,3 +91,7 @@ WHERE
`id_articolo` = `mg_articoli`.`id` `id_articolo` = `mg_articoli`.`id`
) AND `id_fornitore` IS NOT NULL ) AND `id_fornitore` IS NOT NULL
); );
-- Aggiunta colonna reversed
ALTER TABLE `dt_causalet` ADD `reversed` TINYINT(1) NOT NULL AFTER `is_importabile`;
UPDATE `dt_causalet` SET `reversed`=1 WHERE `descrizione`='Reso';