Auto stash before merge of "master" and "origin/master"

This commit is contained in:
Matteo Baccarin 2019-04-11 16:04:08 +02:00
parent c7076f3557
commit b3f91d4a36
15 changed files with 383 additions and 78 deletions

View File

@ -139,12 +139,26 @@ switch (post('op')) {
}
}
break;
case 'registra-contabile':
break;
}
$bulk = [
'delete-bulk' => tr('Elimina selezionati'),
];
$bulk['registra-contabile'] = [
'text' => tr('Registra contabile pagamento'),
'data' => [
'msg' => tr('Vuoi aggiungere un movimento contabile per le fatture selezionate?'),
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => true,
],
];
if ($module->name == 'Fatture di vendita') {
$bulk['export-bulk'] = [
'text' => tr('Esporta stampe'),

View File

@ -47,6 +47,14 @@ if (empty($record['is_fiscale'])) {
<?php
if (!empty($record['is_fiscale'])) {
//Aggiunta insoluto
if (!empty($record['riba']) && ($record['stato'] == 'Emessa' || $record['stato'] == 'Parzialmente pagato' || $record['stato'] == 'Pagato') && $dir == 'entrata') {
?>
<button type="button" class="btn btn-primary" onclick="launch_modal( '<?php echo tr('Registra insoluto'); ?>', '<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&iddocumento=<?php echo $id_record; ?>&dir=<?php echo $dir; ?>&insoluto=1', 1 );"><i class="fa fa-euro"></i> <?php echo tr('Registra insoluto'); ?>...</button>
<?php
}
// Aggiunta prima nota solo se non c'è già, se non si è in bozza o se il pagamento non è completo
$n2 = $dbo->fetchNum('SELECT id FROM co_movimenti WHERE iddocumento='.prepare($id_record).' AND primanota=1');

View File

@ -29,6 +29,7 @@ if (isset($id_record)) {
LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id
INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica
INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id
LEFT JOIN co_pagamenti ON co_documenti.idpagamento=co_pagamenti.id
WHERE co_tipidocumento.dir = '.prepare($dir).' AND co_documenti.id='.prepare($id_record));
$note_accredito = $dbo->fetchArray("SELECT co_documenti.id, IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM co_documenti JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE reversed = 1 AND ref_documento=".prepare($id_record));

View File

@ -122,52 +122,100 @@ function aggiorna_scadenziario($iddocumento, $totale_pagato, $data_pagamento)
{
$dbo = database();
// Lettura righe scadenziario
$query = "SELECT * FROM co_scadenziario WHERE iddocumento='$iddocumento' AND ABS(pagato) < ABS(da_pagare) ORDER BY scadenza ASC";
$rs = $dbo->fetchArray($query);
$netto_fattura = get_netto_fattura($iddocumento);
$rimanente = $netto_fattura;
$rimanente_da_pagare = abs($rs[0]['pagato']) + $totale_pagato;
if($totale_pagato>0){
// Lettura righe scadenziario
$query = "SELECT * FROM co_scadenziario WHERE iddocumento='$iddocumento' AND ABS(pagato) < ABS(da_pagare) ORDER BY scadenza ASC";
$rs = $dbo->fetchArray($query);
$rimanente_da_pagare = abs($rs[0]['pagato']) + $totale_pagato;
// Verifico se la fattura è di acquisto o di vendita per scegliere che segno mettere nel totale
$query2 = 'SELECT dir FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id='.prepare($iddocumento);
$rs2 = $dbo->fetchArray($query2);
$dir = $rs2[0]['dir'];
// Verifico se la fattura è di acquisto o di vendita per scegliere che segno mettere nel totale
$query2 = 'SELECT dir FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id='.prepare($iddocumento);
$rs2 = $dbo->fetchArray($query2);
$dir = $rs2[0]['dir'];
// Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato.
// Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
for ($i = 0; $i < sizeof($rs); ++$i) {
if ($rimanente_da_pagare != 0) {
// ...riempio il pagato della rata con il totale della rata stessa se ho ricevuto un pagamento superiore alla rata stessa
if (abs($rimanente_da_pagare) >= abs($rs[$i]['da_pagare'])) {
$pagato = abs($rs[$i]['da_pagare']);
$rimanente_da_pagare -= abs($rs[$i]['da_pagare']);
} else {
// Se si inserisce una somma maggiore al dovuto, tengo valido il rimanente per saldare il tutto...
if (abs($rimanente_da_pagare) > abs($rs[$i]['da_pagare'])) {
// Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato.
// Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
for ($i = 0; $i < sizeof($rs); ++$i) {
if ($rimanente_da_pagare > 0) {
// ...riempio il pagato della rata con il totale della rata stessa se ho ricevuto un pagamento superiore alla rata stessa
if (abs($rimanente_da_pagare) >= abs($rs[$i]['da_pagare'])) {
$pagato = abs($rs[$i]['da_pagare']);
$rimanente_da_pagare -= abs($rs[$i]['da_pagare']);
}
// ...altrimenti aggiungo l'importo pagato
else {
$pagato = abs($rimanente_da_pagare);
$rimanente_da_pagare -= abs($rimanente_da_pagare);
}
}
if ($dir == 'uscita') {
$rimanente_da_pagare = -$rimanente_da_pagare;
}
if ($pagato > 0) {
if ($dir == 'uscita') {
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare(-$pagato).', data_pagamento='.prepare($data_pagamento).' WHERE id='.prepare($rs[$i]['id']));
} else {
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($pagato).', data_pagamento='.prepare($data_pagamento).' WHERE id='.prepare($rs[$i]['id']));
// Se si inserisce una somma maggiore al dovuto, tengo valido il rimanente per saldare il tutto...
if (abs($rimanente_da_pagare) > abs($rs[$i]['da_pagare'])) {
$pagato = abs($rs[$i]['da_pagare']);
$rimanente_da_pagare -= abs($rs[$i]['da_pagare']);
}
// ...altrimenti aggiungo l'importo pagato
else {
$pagato = abs($rimanente_da_pagare);
$rimanente_da_pagare -= abs($rimanente_da_pagare);
}
}
if ($dir == 'uscita') {
$rimanente_da_pagare = -$rimanente_da_pagare;
}
if ($pagato > 0) {
if ($dir == 'uscita') {
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare(-$pagato).', data_pagamento='.prepare($data_pagamento).' WHERE id='.prepare($rs[$i]['id']));
} else {
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($pagato).', data_pagamento='.prepare($data_pagamento).' WHERE id='.prepare($rs[$i]['id']));
}
}
}
}
}else{
// Lettura righe scadenziario
$query = "SELECT * FROM co_scadenziario WHERE iddocumento='$iddocumento' AND ABS(pagato)>0 ORDER BY scadenza DESC";
$rs = $dbo->fetchArray($query);
$residuo_pagato = abs($rs[0]['pagato']) + $totale_pagato;
// Verifico se la fattura è di acquisto o di vendita per scegliere che segno mettere nel totale
$query2 = 'SELECT dir FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id='.prepare($iddocumento);
$rs2 = $dbo->fetchArray($query2);
$dir = $rs2[0]['dir'];
// Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato.
// Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
for ($i = 0; $i < sizeof($rs); ++$i) {
if ($residuo_pagato >= 0) {
// ...riempio il pagato della rata con il totale della rata stessa se ho ricevuto un pagamento superiore alla rata stessa
if (abs($residuo_pagato) <= abs($rs[$i]['pagato'])) {
$pagato = 0;
$residuo_pagato -= abs($rs[$i]['pagato']);
} else {
// Se si inserisce una somma maggiore al dovuto, tengo valido il rimanente per saldare il tutto...
if (abs($residuo_pagato) < abs($rs[$i]['pagato'])) {
$pagato = 0;
$residuo_pagato -= abs($rs[$i]['pagato']);
}
// ...altrimenti aggiungo l'importo pagato
else {
$pagato = abs($residuo_pagato);
$residuo_pagato -= abs($residuo_pagato);
}
}
if ($dir == 'uscita') {
$residuo_pagato = -$residuo_pagato;
}
if ($pagato >= 0) {
if ($dir == 'uscita') {
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare(-$pagato).', data_pagamento='.prepare($data_pagamento).' WHERE id='.prepare($rs[$i]['id']));
} else {
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($pagato).', data_pagamento='.prepare($data_pagamento).' WHERE id='.prepare($rs[$i]['id']));
}
}
}
}
}
}

View File

@ -2,6 +2,8 @@
$r = $dbo->fetchOne('SELECT co_documenti.*,
an_anagrafiche.email,
an_anagrafiche.idconto_cliente,
an_anagrafiche.idconto_fornitore,
an_anagrafiche.pec,
an_anagrafiche.ragione_sociale,
(SELECT pec FROM zz_smtps WHERE zz_smtps.id='.prepare($template['id_smtp']).') AS is_pec
@ -9,6 +11,17 @@ FROM co_documenti INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anag
$logo_azienda = str_replace(DOCROOT, ROOTDIR, App::filepath('templates/base|custom|/logo_azienda.jpg'));
//cliente
if($r['idconto_cliente']!=''){
$conto = $r['idconto_cliente'];
$conto_descrizione = $dbo->fetchOne('SELECT CONCAT ((SELECT numero FROM co_pianodeiconti2 WHERE id=co_pianodeiconti3.idpianodeiconti2), ".", numero, " ", descrizione) AS descrizione FROM co_pianodeiconti3 WHERE id='.prepare($conto))['descrizione'];
}
//Fornitore
else if($r['idconto_fornitore']!=''){
$conto = $r['idconto_fornitore'];
$conto_descrizione = $dbo->fetchOne('SELECT CONCAT ((SELECT numero FROM co_pianodeiconti2 WHERE id=co_pianodeiconti3.idpianodeiconti2), ".", numero, " ", descrizione) AS descrizione FROM co_pianodeiconti3 WHERE id='.prepare($conto))['descrizione'];
}
// Variabili da sostituire
return [
'email' => $r['is_pec'] ? $r['pec'] : $r['email'],
@ -18,4 +31,6 @@ return [
'note' => $r['note'],
'data' => Translator::dateToLocale($r['data']),
'logo_azienda' => !empty($logo_azienda) ? '<img src="'.$logo_azienda.'" />' : '',
'conto' => $conto,
'conto_descrizione' => $conto_descrizione,
];

View File

@ -6,12 +6,15 @@ switch (post('op')) {
case 'add':
$idmastrino = get_new_idmastrino('co_movimenti_modelli');
$descrizione = post('descrizione');
$nome = post('nome');
for ($i = 0; $i < sizeof(post('idconto')); ++$i) {
$idconto = post('idconto')[$i];
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($descrizione).', '.prepare($idconto).')';
if ($dbo->query($query)) {
$id_record = $dbo->lastInsertedID();
if(!empty($idconto)){
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, nome, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($nome).', '.prepare($descrizione).', '.prepare($idconto).')';
if ($dbo->query($query)) {
$id_record = $idmastrino;
}
}
}
@ -20,15 +23,18 @@ switch (post('op')) {
case 'editriga':
$idmastrino = post('idmastrino');
$descrizione = post('descrizione');
$nome = post('nome');
// Eliminazione prima nota
$dbo->query('DELETE FROM co_movimenti_modelli WHERE idmastrino='.prepare($idmastrino));
for ($i = 0; $i < sizeof(post('idconto')); ++$i) {
$idconto = post('idconto')[$i];
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($descrizione).', '.prepare($idconto).')';
if ($dbo->query($query)) {
$id_record = $dbo->lastInsertedID();
if(!empty($idconto)){
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, nome, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($nome).', '.prepare($descrizione).', '.prepare($idconto).')';
if ($dbo->query($query)) {
$id_record = $idmastrino;
}
}
}

View File

@ -7,8 +7,11 @@ include_once __DIR__.'/../../core.php';
<input type="hidden" name="backto" value="record-edit">
<div class="row">
<div class="col-md-8">
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1 ]}
<div class="col-md-5">
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1 ]}
</div>
<div class="col-md-7">
{[ "type": "text", "label": "<?php echo tr('Causale'); ?>", "name": "descrizione", "required": 1 ]}
</div>
</div>
@ -40,7 +43,36 @@ include_once __DIR__.'/../../core.php';
echo '
</table>';
?>
// Variabili utilizzabili
$variables = include Modules::filepath(Modules::get("Fatture di vendita")['id'], 'variables.php');
echo '
<!-- Istruzioni per il contenuto -->
<div class="box box-info">
<div class="box-body">';
if (!empty($variables)) {
echo '
<p>'.tr("Puoi utilizzare le seguenti sequenze di testo all'interno del campo causale, verranno sostituite in fase generazione prima nota dalla fattura.").':</p>
<ul>';
foreach ($variables as $variable => $value) {
echo '
<li><code>{'.$variable.'}</code></li>';
}
echo '
</ul>';
} else {
echo '
<p><i class="fa fa-warning"></i> '.tr('Non sono state definite variabili da utilizzare nel template').'.</p>';
}
echo '
</div>
</div>';
?>
<!-- PULSANTI -->
<div class="row">

View File

@ -11,8 +11,11 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-12">
{[ "type": "text", "label": "<?php echo tr('Causale predefinita'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
<div class="col-md-5">
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1, "value": "$nome$" ]}
</div>
<div class="col-md-7">
{[ "type": "text", "label": "<?php echo tr('Causale'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
</div>
</div>
@ -52,7 +55,7 @@ for ($i = 0; $i < 10; ++$i) {
echo '
<tr>
<td>
{[ "type": "select", "name": "idconto['.$i.']", "value": "'.$rs[$i]['idconto'].'", "ajax-source": "conti", "required": "'.$required.'" ]}
{[ "type": "select", "name": "idconto['.$i.']", "value": "'.$rs[$i]['idconto'].'", "ajax-source": "conti-modelliprimanota", "required": "'.$required.'" ]}
</td>
</tr>';
}
@ -80,6 +83,50 @@ echo '
</form>
<?php
// Variabili utilizzabili
$variables = include Modules::filepath(Modules::get("Fatture di vendita")['id'], 'variables.php');
echo '
<!-- Istruzioni per il contenuto -->
<div class="box box-info">
<div class="box-body">';
if (!empty($variables)) {
echo '
<p>'.tr("Puoi utilizzare le seguenti sequenze di testo all'interno del campo causale, verranno sostituite in fase generazione prima nota dalla fattura.").':</p>
<ul>';
foreach ($variables as $variable => $value) {
echo '
<li><code>{'.$variable.'}</code></li>';
}
echo '
</ul>';
} else {
echo '
<p><i class="fa fa-warning"></i> '.tr('Non sono state definite variabili da utilizzare nel template').'.</p>';
}
echo '
</div>
</div>';
?>
<a class="btn btn-danger ask" data-backto="record-list" data-idmastrino="<?php echo $record['idmastrino']; ?>">
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
</a>
<script>
$('select[name=idconto]').each(function(){
this.selectAdd([{
'value': -1,
'text': "Conto cliente fattura",
}]);
});
</Script>

View File

@ -1,7 +1,5 @@
<?php
include_once __DIR__.'/../../core.php';
if (isset($id_record)) {
$record = $dbo->fetchOne('SELECT * FROM co_movimenti_modelli WHERE id='.prepare($id_record));
$record = $dbo->fetchOne('SELECT * FROM co_movimenti_modelli WHERE idmastrino='.prepare($id_record));
}

View File

@ -84,4 +84,57 @@ switch ($resource) {
}
break;
case 'conti-modelliprimanota':
$query = 'SELECT co_pianodeiconti2.* FROM co_pianodeiconti2 LEFT JOIN co_pianodeiconti3 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| GROUP BY co_pianodeiconti2.id';
if ($search != '') {
$wh = 'WHERE (co_pianodeiconti3.descrizione LIKE '.prepare('%'.$search.'%')." OR CONCAT( co_pianodeiconti2.numero, '.', co_pianodeiconti3.numero ) LIKE ".prepare('%'.$search.'%').')';
} else {
$wh = '';
}
$query = str_replace('|where|', $wh, $query);
$rs = $dbo->fetchArray($query);
foreach ($rs as $r) {
$results[] = ['text' => $r['numero'].' '.$r['descrizione'], 'children' => []];
$subquery = 'SELECT co_pianodeiconti3.* FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where|';
$where = [];
$filter = [];
$search_fields = [];
foreach ($elements as $element) {
$filter[] = 'co_pianodeiconti3.id='.prepare($element);
}
if (!empty($filter)) {
$where[] = '('.implode(' OR ', $filter).')';
}
$where[] = 'idpianodeiconti2='.prepare($r['id']);
if (!empty($search)) {
$search_fields[] = '(co_pianodeiconti3.descrizione LIKE '.prepare('%'.$search.'%')." OR CONCAT(co_pianodeiconti2.numero, '.', co_pianodeiconti3.numero) LIKE ".prepare('%'.$search.'%').')';
}
if (!empty($search_fields)) {
$where[] = '('.implode(' OR ', $search_fields).')';
}
$wh = '';
if (count($where) != 0) {
$wh = 'WHERE '.implode(' AND ', $where);
}
$subquery = str_replace('|where|', $wh, $subquery);
$rs2 = $dbo->fetchArray($subquery);
foreach ($rs2 as $r2) {
$results[count($results) - 1]['children'][] = ['id' => $r2['id'], 'text' => $r['numero'].'.'.$r2['numero'].' '.$r2['descrizione']];
}
$results[] = ['text' => 'Conto cliente/fornitore fattura', 'children' => []];
$results[count($results) - 1]['children'][] = ['id' => '-1', 'text' => '{Conto cliente/fornitore fattura}'];
}
break;
}

View File

@ -9,6 +9,7 @@ switch (post('op')) {
$data = post('data');
$idmastrino = get_new_idmastrino();
$descrizione = post('descrizione');
$insoluto = post('insoluto');
// Lettura info fattura
$query = 'SELECT *, co_documenti.note, co_documenti.idpagamento, co_documenti.id AS iddocumento, co_statidocumento.descrizione AS `stato`, co_tipidocumento.descrizione AS `descrizione_tipodoc` FROM ((co_documenti LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id) INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id='.prepare($iddocumento);
@ -42,9 +43,12 @@ switch (post('op')) {
}
}
// Inserisco nello scadenziario il totale pagato
if ($totale_pagato != 0) {
if ($totale_pagato != 0 && empty($insoluto)) {
// Inserisco nello scadenziario il totale pagato
aggiorna_scadenziario($iddocumento, abs($totale_pagato), $data);
}else if(!empty($insoluto)){
//Rimuovo dallo scadenzario l'insoluto
aggiorna_scadenziario($iddocumento, -abs($totale_pagato), $data);
}
// Se non va a buon fine qualcosa elimino il mastrino per non lasciare incongruenze nel db
@ -61,8 +65,10 @@ switch (post('op')) {
// Aggiorno lo stato della fattura
if (abs($rs[0]['tot_pagato']) == abs($rs[0]['tot_da_pagare'])) {
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Pagato') WHERE id=".prepare($iddocumento));
} else {
} else if(abs($rs[0]['tot_pagato']) != abs($rs[0]['tot_da_pagare']) && abs($rs[0]['tot_pagato'])!='0'){
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Parzialmente pagato') WHERE id=".prepare($iddocumento));
}else{
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($iddocumento));
}
// Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono
@ -101,7 +107,7 @@ switch (post('op')) {
for ($i = 0; $i < sizeof(post('idconto')); ++$i) {
$idconto = post('idconto')[$i];
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($descrizione).', '.prepare($idconto).')';
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, nome, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($descrizione).', '.prepare($descrizione).', '.prepare($idconto).')';
$dbo->query($query);
}
}

View File

@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
?><form action="<?php echo ROOTDIR; ?>/controller.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>" method="post" id="add-form">
<input type="hidden" name="op" value="add">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="iddocumento" value="<?php echo get('iddocumento'); ?>">
<input type="hidden" name="iddocumento" id="iddocumento" value="<?php echo get('iddocumento'); ?>">
<input type="hidden" name="crea_modello" id="crea_modello" value="0">
<input type="hidden" name="idmastrino" id="idmastrino" value="0">
@ -13,6 +13,15 @@ include_once __DIR__.'/../../core.php';
$idconto = get('idconto');
$iddocumento = get('iddocumento');
$dir = get('dir');
$insoluto = get('insoluto');
if(!empty($insoluto)){
echo '<input type="hidden" name="insoluto" value="1">';
}
// Lettura delle variabili nei singoli moduli
$id_record = $iddocumento;
$variables = include Modules::filepath(Modules::get('Fatture di vendita')['id'], 'variables.php');
if (!empty($iddocumento)) {
// Lettura numero e tipo di documento
@ -33,7 +42,14 @@ include_once __DIR__.'/../../core.php';
$tipo_doc = 'fattura';
}
$descrizione = tr('Pag. _DOC_ num. _NUM_ del _DATE_ (_NAME_)', [
if(!empty($insoluto)){
$operation = 'Registrazione insoluto';
}else{
$operation = 'Pag.';
}
$descrizione = tr('_OP_ _DOC_ num. _NUM_ del _DATE_ (_NAME_)', [
'_OP_' => $operation,
'_DOC_' => $tipo_doc,
'_NUM_' => $numero_doc,
'_DATE_' => Translator::dateToLocale($rs[0]['data']),
@ -74,7 +90,11 @@ include_once __DIR__.'/../../core.php';
$query = 'SELECT SUM(pagato) AS tot_pagato, SUM(da_pagare) AS tot_da_pagare FROM co_scadenziario GROUP BY iddocumento HAVING iddocumento='.prepare($iddocumento);
$rs = $dbo->fetchArray($query);
$importo_conto_aziendale = abs($rs[0]['tot_da_pagare']) - abs($rs[0]['tot_pagato']);
if(!empty($insoluto)){
$importo_conto_aziendale = abs($rs[0]['tot_da_pagare']);
}else{
$importo_conto_aziendale = abs($rs[0]['tot_da_pagare']) - abs($rs[0]['tot_pagato']);
}
$totale_dare = $importo_conto_aziendale;
}
@ -124,7 +144,7 @@ include_once __DIR__.'/../../core.php';
<div class="row">
<div class="col-md-12">
{[ "type": "select", "label": "<?php echo tr('Modello primanota'); ?>", "id": "modello_primanota", "values": "query=SELECT idmastrino AS id, descrizione FROM co_movimenti_modelli GROUP BY idmastrino" ]}
{[ "type": "select", "label": "<?php echo tr('Modello primanota'); ?>", "id": "modello_primanota", "values": "query=SELECT idmastrino AS id, nome AS descrizione, descrizione as causale FROM co_movimenti_modelli GROUP BY idmastrino" ]}
</div>
</div>
@ -195,7 +215,7 @@ include_once __DIR__.'/../../core.php';
}
// Se è una nota di credito, inverto i valori
if ($nota_credito) {
if ($nota_credito || $insoluto) {
$tmp = $value_dare;
$value_dare = $value_avere;
$value_avere = $tmp;
@ -350,26 +370,53 @@ include_once __DIR__.'/../../core.php';
$('#bs-popup #idmastrino').val(0);
}
var idmastrino = $(this).val();
var idmastrino = $(this).val();
var variables = <?php echo json_encode($variables); ?>;
var replaced = 0;
if(idmastrino!=''){
var causale = $(this).find('option:selected').text();
var causale = $(this).find('option:selected').data('causale');
if($('#iddocumento').val()!=''){
for (i in variables){
if(causale.includes('{'+i+'}')){
replaced++;
causale = causale.replace('{'+i+'}', variables[i]);
}
}
}else{
for (i in variables){
causale = causale.replace('{'+i+'}', '_');
}
}
//aggiornava erroneamente anche la causale ed eventuale numero di fattura e data
<?php if (empty($iddocumento)) {
?>
$('#bs-popup #desc').val(causale);
<?php
} ?>
//aggiornava erroneamente anche la causale ed eventuale numero di fattura e data
if(replaced>0 || $('#iddocumento').val()==''){
$('#bs-popup #desc').val(causale);
}
$.get('<?php echo $rootdir; ?>/ajax_complete.php?op=get_conti&idmastrino='+idmastrino, function(data){
var conti = data.split(',');
for(i=0;i<conti.length;i++){
var conto = conti[i].split(';');
var option = $("<option selected></option>").val(conto[0]).text(conto[1]);
$('#bs-popup #conto'+i).selectReset();
$('#bs-popup #conto'+i).append(option).trigger('change');
}
var conto = conti[i].split(';');
//Sostituzione conto cliente/fornitore
if(conto[0]==-1){
if($('#iddocumento').val()!=''){
var option = $("<option selected></option>").val(variables['conto']).text(variables['conto_descrizione']);
$('#bs-popup #conto'+i).selectReset();
$('#bs-popup #conto'+i).append(option).trigger('change');
}
}else{
var option = $("<option selected></option>").val(conto[0]).text(conto[1]);
$('#bs-popup #conto'+i).selectReset();
$('#bs-popup #conto'+i).append(option).trigger('change');
}
}
for(i=9;i>=conti.length;i--){
$('#bs-popup #conto'+i).selectReset();
console.log('#bs-popup #conto'+i);
}
});
}
});

View File

@ -6,7 +6,7 @@ switch ($resource) {
case 'get_conti':
$idmastrino = get('idmastrino');
$conti = [];
$rs_conti = $dbo->fetchArray('SELECT *, (SELECT descrizione FROM co_pianodeiconti3 WHERE id=co_movimenti_modelli.idconto) AS descrizione_conto FROM co_movimenti_modelli WHERE idmastrino='.prepare($idmastrino).' GROUP BY id');
$rs_conti = $dbo->fetchArray('SELECT *, (SELECT CONCAT ((SELECT numero FROM co_pianodeiconti2 WHERE id=co_pianodeiconti3.idpianodeiconti2), ".", numero, " ", descrizione) FROM co_pianodeiconti3 WHERE id=co_movimenti_modelli.idconto) AS descrizione_conto FROM co_movimenti_modelli WHERE idmastrino='.prepare($idmastrino).' GROUP BY id ORDER BY id');
for ($i = 0; $i < sizeof($rs_conti); ++$i) {
$conti[$i] = $rs_conti[$i]['idconto'].';'.$rs_conti[$i]['descrizione_conto'];

View File

@ -127,8 +127,10 @@ echo '
?>
</table>
<a onclick="launch_modal( 'Aggiungi prima nota', '<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&iddocumento=<?php echo $record['iddocumento']; ?>&dir=<?php echo $dir; ?>', 1 );" class="btn btn-sm btn-primary pull-right"><i class="fa fa-euro"></i> <?php echo tr('Aggiungi prima nota...'); ?></a>
<div class='pull-right'>
<a onclick="launch_modal( 'Aggiungi prima nota', '<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&iddocumento=<?php echo $record['iddocumento']; ?>&dir=<?php echo $dir; ?>', 1 );" class="btn btn-sm btn-primary"><i class="fa fa-euro"></i> <?php echo tr('Aggiungi prima nota...'); ?></a>
</div>
<div class="clearfix"></div>

View File

@ -150,3 +150,31 @@ UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS('' '', REPLACE(REPLACE(REPLA
-- Aggiunta idsede anche preventivi (completamento 2.4.1)
ALTER TABLE `co_preventivi` ADD `idsede` INT NOT NULL AFTER `idanagrafica`;
-- Aggiunta flag riba per tipi di pagamento Ri.Ba.
ALTER TABLE `co_pagamenti` ADD `riba` TINYINT(1) NOT NULL DEFAULT '0' AFTER `codice_modalita_pagamento_fe`;
UPDATE `co_pagamenti` SET `riba` = 1 WHERE `descrizione` LIKE 'Ri.Ba.%';
-- Creazione nuovo conto per anticipi Ri.Ba.
INSERT INTO `co_pianodeiconti3` (`id`, `numero`, `descrizione`, `idpianodeiconti2`, `dir`, `can_delete`, `can_edit`) VALUES (NULL, '000021', 'Banca C/C (conto anticipi)', '1', '', '0', '0');
-- Aggiunta colonna nome per i modelli primanota
ALTER TABLE `co_movimenti_modelli` ADD `nome` VARCHAR(255) NOT NULL AFTER `idmastrino`;
UPDATE `zz_views` SET `name` = 'Nome', `query` = 'co_movimenti_modelli.nome' WHERE `zz_views`.`id_module` = (SELECT id FROM zz_modules WHERE name='Modelli prima nota') AND `zz_views`.`name`='Causale predefinita';
UPDATE `zz_views` SET `query` = 'co_movimenti_modelli.idmastrino' WHERE `zz_views`.`id_module` = (SELECT id FROM zz_modules WHERE name='Modelli prima nota') AND `zz_views`.`name`='id';
-- Modelli primanota default
INSERT INTO `co_movimenti_modelli` (`id`, `idmastrino`, `nome`, `descrizione`, `idconto`) VALUES
(NULL, 1, 'Anticipo fattura', 'Anticipo fattura num. {numero} del {data}', -1),
(NULL, 1, 'Anticipo fattura', 'Anticipo fattura num. {numero} del {data}', (SELECT id FROM co_pianodeiconti3 WHERE descrizione = 'Banca C/C (conto anticipi)')),
(NULL, 1, 'Anticipo fattura', 'Anticipo fattura num. {numero} del {data}', (SELECT id FROM co_pianodeiconti3 WHERE descrizione = 'Spese bancarie')),
(NULL, 2, 'Accredito anticipo', 'Accredito anticipo fattura num. {numero} del {data}', (SELECT id FROM co_pianodeiconti3 WHERE descrizione = 'Banca C/C (conto anticipi)')),
(NULL, 2, 'Accredito anticipo', 'Accredito anticipo fattura num. {numero} del {data}', (SELECT id FROM co_pianodeiconti3 WHERE descrizione = 'Banca C/C'));
-- Segmenti per modulo scadenzario
INSERT INTO `zz_segments` (`id`, `id_module`, `name`, `clause`, `position`, `pattern`, `note`, `predefined`, `predefined_accredito`, `predefined_addebito` `is_fiscale`) VALUES
(NULL, (SELECT id FROM zz_modules WHERE name='Scadenzario'), 'Scadenzario totale', '1=1', 'WHR', '####', '', 1, 0, 0, 1),
(NULL, (SELECT id FROM zz_modules WHERE name='Scadenzario'), 'Scadenzario clienti', '((SELECT dir FROM co_tipidocumento WHERE co_tipidocumento.id=co_documenti.idtipodocumento)=\'entrata\')', 'WHR', '####', '', 0, 0, 0, 0),
(NULL, (SELECT id FROM zz_modules WHERE name='Scadenzario'), 'Scadenzario fornitori', '((SELECT dir FROM co_tipidocumento WHERE co_tipidocumento.id=co_documenti.idtipodocumento)=\'uscita\')', 'WHR', '####', '', 0, 0, 0, 0),
(NULL, (SELECT id FROM zz_modules WHERE name='Scadenzario'), 'Scadenzario Ri.Ba.', 'co_pagamenti.riba=1', 'WHR', '####', '', 0, 0, 0, 0);