Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gestione anticipo / acconto #1251

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 126 additions & 0 deletions include/common/crea_fattura_anticipo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
<?php
include_once __DIR__.'/../../core.php';
use Modules\Ordini\Ordine;

$documento = Ordine::find($options['id_documento']);
$dir = $documento->direzione;

//$name = !empty($documento) ? $documento->module : $options['module'];

$name = 'Fatture di vendita'; //entrata

$final_module = Modules::get($name);

$descrizione = tr('Acconto sull\'ordine ') . $documento->numero_esterno . tr(' del ') . Translator::dateToLocale($documento->data);
$valore_anticipo = $options['value'];

//tipo documento predefinito
$tipologia = $dbo->fetchOne(
'SELECT id, CONCAT(codice_tipo_documento_fe, \' - \', descrizione) AS descrizione
FROM co_tipidocumento
WHERE enabled = 1 AND dir = '.prepare($dir).' AND descrizione = "Acconto/anticipo su fattura"
ORDER BY codice_tipo_documento_fe'
);

//piano predefinito
$piano = $dbo->fetchOne(
'SELECT id
FROM co_pianodeiconti3
WHERE descrizione = '.prepare(($dir == 'entrata') ? 'Anticipo clienti' : 'Anticipo fornitori')
);

//sezione predefinita
$id_segment = $dbo->fetchOne(
'SELECT id
FROM zz_segments
WHERE is_sezionale = 1 AND name = "Fatture differite"'
);

//zz_settings iva_predefinita
$iva_predefinita = setting('Iva predefinita');
$iva = $dbo->fetchOne(
'SELECT id, descrizione, percentuale
FROM co_iva
WHERE id = '.prepare($iva_predefinita)
);
?>

<input type="hidden" name="id_documento" value="<?php echo $options['id_documento']; ?>">
<input type="hidden" name="type" value="<?php echo $options['type']; ?>">
<input type="hidden" name="class" value="<?php echo get_class($documento); ?>">

<div class="box box-warning">
<div class="box-header with-border">
<h3 class="box-title"><?php echo tr('Nuovo documento'); ?></h3>
</div>
<div class="box-body">

<div class="row">
<input type="hidden" name="create_document" value="on" />

<div class="col-md-6">
{[ "type": "date", "label": "<?php echo tr('Data del documento'); ?>", "name": "data", "required": 0, "value": "-now-" ]}
</div>

<div class="col-md-6">
{[ "type": "text", "label": "<?php echo tr('Tipo documento'); ?>", "name": "tipologia", "required": 1, "readonly": 1, "value": "<?php echo $tipologia['descrizione']; ?>" ]}
{[ "type": "hidden", "name": "idtipodocumento", "value": "<?php echo $tipologia['id']; ?>" ]}
</div>

<div class="col-md-6">
{[ "type": "select", "label": "<?php echo tr('Sezionale'); ?>", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": <?php echo json_encode(['id_module' => $final_module['id'], 'is_sezionale' => 1]); ?>, "value": "<?php echo $id_segment['id']; ?>" ]}
</div>

<div class="col-md-6">
{[ "type": "select", "label": "<?php echo tr('Conto'); ?>", "name": "id_conto", "required": 1, "value": "<?php echo $piano['id']; ?>", "ajax-source": "<?php echo ($dir == 'entrata' ? 'conti-vendite' : 'conti-acquisti-totali'); ?>" ]}
</div>

<div class="col-md-6">
{[ "type": "select", "label": "<?php echo tr('Iva'); ?>", "name": "id_iva", "required": 1, "value": "<?php echo $iva['id']; ?>", "ajax-source": "iva" ]}
</div>

<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Note della fattura'); ?>", "name": "note", "required": 0 ]}
</div>
</div>
</div>
</div>

<!-- Righe del documento -->
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title"><?php echo tr('Righe previste'); ?></h3>
</div>

<table class="box-body table table-striped table-hover table-condensed">
<thead>
<tr>
<th><?php echo tr('Descrizione'); ?></th>
<th width="10%" class="text-center"><?php echo tr('Q.tà'); ?></th>
<th width="15%"><?php echo tr('Prezzo unitario'); ?></th>
</tr>
</thead>
<tbody id="righe_previste">
<?php
//replace in valore_anticipo , with .
$anticipo = str_replace('.', '', $valore_anticipo);
$anticipo = str_replace(',', '.', $anticipo);
?>
<tr>
{[ "type": "hidden", "name": "descrizione", "value": "<?php echo $descrizione; ?>" ]}
{[ "type": "hidden", "name": "anticipo", "value": "<?php echo $anticipo; ?>" ]}
{[ "type": "hidden", "name": "id_acconto", "value": "<?php echo $options['id_acconto']; ?> ]"]}

<td style="vertical-align:middle">
<?php echo $descrizione; ?>
</td>
<td class="text-center" style="vertical-align:middle">
1
</td>
<td class="text-center" style="vertical-align:middle">
<?php echo $valore_anticipo . ' ' . currency(); ?>
</td>
</tr>
</tbody>
</table>
</div>
24 changes: 24 additions & 0 deletions migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
CREATE TABLE `ac_acconti` (
`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
`idanagrafica` int NULL,
`idordine` int NULL COMMENT 'se idordine non presente allora l\'acconto non viene fatto sull\'anagrafica',
`importo` float NOT NULL
);

CREATE TABLE `ac_acconti_righe` (
`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
`idacconto` int NOT NULL,
`idfattura` int NULL,
`importo_fatturato` float NOT NULL,
`tipologia` varchar(30) NULL
);

ALTER TABLE `ac_acconti_righe`
CHANGE `idfattura` `idfattura` int(11) NOT NULL AFTER `idacconto`,
ADD `idriga_fattura` int(11) NULL AFTER `idfattura`;

ALTER TABLE `ac_acconti_righe`
ADD `idiva` int(11) NULL AFTER `idriga_fattura`;

INSERT INTO `zz_plugins` (`id`, `name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `script`, `enabled`, `default`, `order`, `compatibility`, `version`, `options2`, `options`, `directory`, `help`, `created_at`, `updated_at`) VALUES
(53, 'Anticipi', 'Anticipi', 24, 24, 'tab', 'ordini.anticipi.php', 1, 1, 0, '', '', NULL, NULL, '', '', '2022-03-07 10:22:56', '2022-03-07 10:22:56');
87 changes: 87 additions & 0 deletions modules/ddt/bulk.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
use Modules\Fatture\Fattura;
use Modules\Fatture\Stato;
use Modules\Fatture\Tipo;
use Modules\Fatture\Components\Riga;

if ($module['name'] == 'Ddt di vendita') {
$dir = 'entrata';
Expand Down Expand Up @@ -98,8 +99,14 @@
$fattura->idsede_destinazione = $documento_import->idsede_destinazione;
$fattura->save();

$idOrdini = [];
$totale = 0;

// Inserimento righe
foreach ($righe as $riga) {
if ($riga['idordine'] != 0) {
$idOrdini[] = $riga->idordine;
}
$qta = $riga->qta_rimanente;

if ($qta > 0) {
Expand All @@ -115,6 +122,86 @@
}

$copia->save();

$totale += ($copia->prezzo_unitario * $qta);
}
}

//row per gli anticipi
$acconti = $dbo->fetchArray(
'SELECT id, idanagrafica, idordine, importo
FROM ac_acconti
WHERE idordine IN ('.implode(',', $idOrdini).')'
);

if ($acconti != null) {
//foreach acconti
foreach ($acconti as $acconto) {
$acconto = $acconti[0];

//get acconto_righe
$acconto_righe = $dbo->fetchOne(
'SELECT idacconto, idfattura, sum(importo_fatturato) as da_stornare
FROM ac_acconti_righe
WHERE idacconto = '.prepare($acconto['id']).'
GROUP BY idacconto'
);

if ($acconto_righe['da_stornare']) {
$importo_rimasto = 0;
$calcolo = $totale - floatval($acconto_righe['da_stornare']);

if ($calcolo >= 0) {
$totale -= floatval($acconto_righe['da_stornare']);
$importo_fatturato = -1 * floatval($acconto_righe['da_stornare']);
} else {
$importo_fatturato = -1 * ($totale);
$totale = 0;
}

$fatturaAcconto = Fattura::find($acconto_righe['idfattura']);
$rigaAcconto = $dbo->fetchOne(
'SELECT * FROM co_righe_documenti
WHERE iddocumento = '.prepare($fatturaAcconto->id)
);

$iva_predefinita = setting('Iva predefinita');
$iva = $dbo->fetchOne(
'SELECT id, descrizione, percentuale
FROM co_iva
WHERE id = '.prepare($iva_predefinita)
);

//aggiungo la riga fattura dell'acconto
$riga = Riga::build($fattura);

$riga->note = null;
$riga->um = null;
$riga->idarticolo = null;
$riga->calcolo_ritenuta_acconto = null;

$riga->descrizione = 'Storno acconto fattura '.$fattura->numero_esterno;

$riga->idiva = $iva['id'];
$riga->desc_iva = $iva['descrizione'];

$riga->idconto = $rigaAcconto['idconto'];

$riga->costo_unitario = 0;
$riga->subtotale = $importo_fatturato;
$riga->prezzo_unitario = $importo_fatturato;
$riga->prezzo_unitario_ivato = floatval($importo_fatturato) * (1 + (floatval($iva['percentuale']) / 100));

$riga->idordine = $acconto['idordine'];
$riga->qta = 1;

$riga->save();

$dbo->query(
'INSERT INTO ac_acconti_righe (idacconto, idfattura, idriga_fattura, idiva, importo_fatturato, tipologia)
VALUES ('.prepare($acconto_righe['idacconto']).', '.prepare($acconto_righe['idfattura']).', '.prepare($riga->id).','.prepare($riga->idiva).','.prepare($importo_fatturato).', '.prepare(tr('Storno da acconto')).')'
);
}
}
}
}
Expand Down
Loading