Aggiunto supporto alle Causali DDT non fatturabili

This commit is contained in:
Thomas Zilio 2020-07-14 13:30:25 +02:00
parent 213e86ef98
commit 90e74b108f
11 changed files with 61 additions and 29 deletions

View File

@ -15,6 +15,7 @@ switch (filter('op')) {
$dbo->update('dt_causalet', [
'descrizione' => $descrizione,
'is_importabile' => filter('is_importabile'),
'predefined' => $predefined,
], ['id' => $id_record]);
@ -37,6 +38,7 @@ switch (filter('op')) {
if ($dbo->fetchNum('SELECT * FROM `dt_causalet` WHERE `descrizione`='.prepare($descrizione)) == 0) {
$dbo->insert('dt_causalet', [
'descrizione' => $descrizione,
'is_importabile' => 1,
]);
$id_record = $dbo->lastInsertedID();

View File

@ -17,4 +17,4 @@ include_once __DIR__.'/../../core.php';
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi'); ?></button>
</div>
</div>
</form>
</form>

View File

@ -5,24 +5,32 @@ include_once __DIR__.'/../../core.php';
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="update">
<!-- DATI -->
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><?php echo tr('Dati'); ?></h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-9">
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
</div>
<div class="row">
<div class="col-md-9">
<div class="row">
<div class="col-md-12">
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
</div>
<div class="col-md-3">
<div class="col-md-12">
{[ "type": "checkbox", "label": "<?php echo tr('Causale predefinita'); ?>", "name": "predefined", "value": "$predefined$", "help":"<?php echo tr('Impostare questa causale di trasporto come predefinita per i ddt'); ?>." ]}
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><?php echo tr('Flags'); ?></h3>
</div>
<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'); ?>" ]}
</div>
</div>
</div>
</div>
</form>

View File

@ -201,7 +201,7 @@ class Contratto extends Document
/**
* Effettua un controllo sui campi del documento.
* Viene richiamatp dalle modifiche alle righe del documento.
* Viene richiamato dalle modifiche alle righe del documento.
*/
public function triggerEvasione(Description $trigger)
{

View File

@ -1,9 +1,11 @@
<?php
include_once __DIR__.'/../../core.php';
$stati_fatturabili = ['Bozza', 'Fatturato'];
echo '
<button '.(!in_array($record['stato'], $stati_fatturabili) ? '' : 'disabled').' class="btn btn-info '.(!in_array($record['stato'], $stati_fatturabili) ? '' : 'disabled tip').'" title="'.((!in_array($record['stato'], $stati_fatturabili)) ? '' : tr('Il ddt è fatturabile solo se non si trova nello stato di: ').implode(', ', $stati_fatturabili)).'" 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').'">
<i class="fa fa-question-circle-o tip" 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',
]).'"></i>
<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').'">
<i class="fa fa-magic"></i> '.tr('Crea fattura').(($dir == 'entrata') ? ' di vendita' : ' di acquisto').'
</button>';

View File

@ -106,6 +106,16 @@ class DDT extends Document
return $this->tipo->dir;
}
public function isImportabile()
{
$stati_non_importabili = ['Bozza', 'Fatturato'];
$database = database();
$causale = $database->fetchOne('SELECT * FROM `dt_causalet` WHERE `id` = '.prepare($this->idcausalet));
return $causale['is_importabile'] && !in_array($this->stato->descrizione, $stati_non_importabili);
}
/**
* Restituisce il peso calcolato sulla base degli articoli del documento.
*
@ -175,7 +185,7 @@ class DDT extends Document
/**
* Effettua un controllo sui campi del documento.
* Viene richiamatp dalle modifiche alle righe del documento.
* Viene richiamato dalle modifiche alle righe del documento.
*/
public function triggerEvasione(Description $trigger)
{
@ -208,7 +218,6 @@ class DDT extends Document
*
* @param string $data
* @param string $direzione
* @param int $id_segment
*
* @return string
*/

View File

@ -31,12 +31,12 @@ $id_anagrafica = $documento_finale->idanagrafica;
echo '
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_documento", "values": "query=SELECT dt_ddt.id, CONCAT(\'DDT num. \', IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\'), \' [\', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , \']\') AS descrizione FROM dt_ddt WHERE idanagrafica='.prepare($id_anagrafica).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
{[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_documento", "values": "query=SELECT dt_ddt.id, CONCAT(\'DDT num. \', IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\'), \' [\', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , \']\') AS descrizione FROM dt_ddt LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet` WHERE idanagrafica='.prepare($id_anagrafica).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND `dt_causalet`.`is_importabile` = 1 AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
</div>
</div>
<div id="righe_documento">
</div>
<div class="alert alert-info" id="box-loading">
@ -46,20 +46,20 @@ echo '
$file = basename(__FILE__);
echo '
<script>$(document).ready(init)</script>
<script>
var content = $("#righe_documento");
var loader = $("#box-loading");
$(document).ready(function(){
loader.hide();
});
$("#id_documento").on("change", function(){
loader.show();
var id = $(this).selectData() ? $(this).selectData().id : "";
content.html("");
content.load("'.$structure->fileurl($file).'?id_module='.$id_module.'&id_record='.$id_record.'&id_documento=" + id, function() {
loader.hide();

View File

@ -634,7 +634,15 @@ if (!$block_edit) {
}
// Lettura ddt (entrata o uscita)
$ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
$ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt
LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet`
LEFT JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
LEFT JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt`
WHERE idanagrafica='.prepare($record['idanagrafica']).'
AND `dt_statiddt`.`descrizione` IN (\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')
AND `dt_tipiddt`.`dir` = '.prepare($dir).'
AND `dt_causalet`.`is_importabile` = 1
AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
echo '
<a class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_ddt.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="tooltip" data-title="Aggiungi ddt">

View File

@ -128,7 +128,7 @@ class Ordine extends Document
/**
* Effettua un controllo sui campi del documento.
* Viene richiamatp dalle modifiche alle righe del documento.
* Viene richiamato dalle modifiche alle righe del documento.
*/
public function triggerEvasione(Description $trigger)
{

View File

@ -211,7 +211,7 @@ class Preventivo extends Document
/**
* Effettua un controllo sui campi del documento.
* Viene richiamatp dalle modifiche alle righe del documento.
* Viene richiamato dalle modifiche alle righe del documento.
*/
public function triggerEvasione(Description $trigger)
{

View File

@ -119,3 +119,6 @@ ALTER TABLE `co_documenti` ADD COLUMN `peso` decimal(12, 4) AFTER `n_colli`, ADD
-- Aggiunta data di connessione agli account SMTP
ALTER TABLE `em_accounts` ADD `connected_at` TIMESTAMP NULL DEFAULT NULL AFTER `timeout`;
UPDATE `em_accounts` SET `connected_at` = NOW();
-- Aggiunta del flag is_importabile sulle causali per permettere/bloccare l'importazione dei DDT
ALTER TABLE `dt_causalet` ADD `is_importabile` BOOLEAN DEFAULT TRUE AFTER `descrizione`;