getPlaceholders($id_documento); $righe = []; // Registrazione da remoto $id_records = get('id_records'); if (!empty($id_records)) { $id_records = str_replace(';', ',', $id_records); if (get('origine') == 'fatture') { $id_documenti = $id_records; } else { $id_scadenze = $id_records; } } // ID predefiniti $dir = 'uscita'; // Le scadenze normali hanno solo direzione in uscita $singola_scadenza = get('single') != null; $is_insoluto = get('is_insoluto') != null; $id_documenti = $id_documenti ?: get('id_documenti'); $id_documenti = $id_documenti ? explode(',', $id_documenti) : []; $id_scadenze = $id_scadenze ?: get('id_scadenze'); $id_scadenze = $id_scadenze ? explode(',', $id_scadenze) : []; // Scadenze foreach ($id_scadenze as $id_scadenza) { $scadenza = $dbo->fetchOne('SELECT *, SUM(da_pagare - pagato) AS rata FROM co_scadenziario WHERE id='.prepare($id_scadenza)); if (!empty($scadenza['iddocumento'])) { $id_documenti[] = $scadenza['iddocumento']; continue; } $scadenza['rata'] = abs($scadenza['rata']); $descrizione_conto = ($dir == 'entrata') ? 'Riepilogativo clienti' : 'Riepilogativo fornitori'; $conto = $dbo->fetchOne('SELECT id FROM co_pianodeiconti3 WHERE descrizione = '.prepare($descrizione_conto)); $id_conto_controparte = $conto['id']; $righe_documento = []; $righe_documento[] = [ 'id_scadenza' => $scadenza['id'], 'id_conto' => null, 'dare' => ($dir == 'entrata') ? 0 : $scadenza['rata'], 'avere' => ($dir == 'entrata') ? $scadenza['rata'] : 0, ]; $righe_documento[] = [ 'id_scadenza' => $scadenza['id'], 'id_conto' => $id_conto_controparte, 'dare' => ($dir == 'entrata') ? $scadenza['rata'] : 0, 'avere' => ($dir == 'entrata') ? 0 : $scadenza['rata'], ]; // Se รจ un insoluto, inverto i valori if ($is_insoluto) { foreach ($righe_documento as $key => $value) { $tmp = $value['avere']; $righe_documento[$key]['avere'] = $righe_documento[$key]['dare']; $righe_documento[$key]['dare'] = $tmp; } } $righe = array_merge($righe, $righe_documento); } // Fatture $numeri = []; $counter = 0; $id_documenti = array_unique($id_documenti); $idanagrafica_mov = 0; foreach ($id_documenti as $id_documento) { $fattura = Fattura::find($id_documento); $tipo = $fattura->tipo; $dir = $fattura->direzione; // Inclusione delle sole fatture in stato Emessa, Parzialmente pagato o Pagato if (!in_array($fattura->stato->descrizione, ['Emessa', 'Parzialmente pagato', 'Pagato'])) { ++$counter; continue; } if ($fattura->idanagrafica != $idanagrafica_mov && $idanagrafica_mov != '') { $idanagrafica_mov = 0; } else { $idanagrafica_mov = $fattura->idanagrafica; } $numeri[] = !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero']; $nota_credito = $tipo->descrizione == 'Nota di credito'; // Predisposizione prima riga $conto_field = 'idconto_'.($dir == 'entrata' ? 'vendite' : 'acquisti'); $id_conto_aziendale = $fattura->pagamento[$conto_field] ?: get_var('Conto aziendale predefinito'); // Predisposizione conto crediti clienti $conto_field = 'idconto_'.($dir == 'entrata' ? 'cliente' : 'fornitore'); $id_conto_controparte = $fattura->anagrafica[$conto_field]; // Lettura delle scadenza della fattura if (sizeof($id_scadenze) > 0) { $scadenze = $dbo->fetchArray('SELECT id, ABS(da_pagare - pagato) AS rata FROM co_scadenziario WHERE iddocumento='.prepare($id_documento).' AND ABS(da_pagare) > ABS(pagato) AND id IN("'.implode('","', $id_scadenze).'") ORDER BY YEAR(scadenza) ASC, MONTH(scadenza) ASC'); } else { $scadenze = $dbo->fetchArray('SELECT id, ABS(da_pagare - pagato) AS rata FROM co_scadenziario WHERE iddocumento='.prepare($id_documento).' AND ABS(da_pagare) > ABS(pagato) ORDER BY YEAR(scadenza) ASC, MONTH(scadenza) ASC'); } // Selezione prima scadenza if ($singola_scadenza && !empty($scadenze)) { $scadenze = [$scadenze[0]]; } $righe_documento = []; // Riga aziendale $totale = sum(array_column($scadenze, 'rata')); if ($totale != 0) { if ($nota_credito) { $totaleA = -$totale; } else { $totaleA = $totale; } $righe_azienda[] = [ 'id_scadenza' => $scadenze[0]['id'], 'id_conto' => $id_conto_aziendale, 'dare' => ($dir == 'entrata') ? $totaleA : 0, 'avere' => ($dir == 'entrata') ? 0 : $totaleA, ]; } // Riga controparte foreach ($scadenze as $scadenza) { $righe_documento[] = [ 'id_scadenza' => $scadenza['id'], 'id_conto' => $id_conto_controparte, 'dare' => ($dir == 'entrata' && !$nota_credito && !$is_insoluto) ? 0 : $scadenza['rata'], 'avere' => ($dir == 'entrata' && !$nota_credito && !$is_insoluto) ? $scadenza['rata'] : 0, ]; } $righe = array_merge($righe, $righe_documento); } $k = 0; foreach ($righe_azienda as $key => $riga_azienda) { if ($righe_azienda[$key]['id_conto'] != $righe_azienda[$key - 1]['id_conto']) { ++$k; } $riga_documento[$k]['id_conto'] = $riga_azienda['id_conto']; $riga_documento[$k]['dare'] += $riga_azienda['dare']; $riga_documento[$k]['avere'] += $riga_azienda['avere']; } foreach ($riga_documento as $key => $value) { //Inverto dare e avere per importi negativi if ($riga_documento[$key]['dare'] < 0 || $riga_documento[$key]['avere'] < 0) { $tmp = abs($riga_documento[$key]['dare']); $riga_documento[$key]['dare'] = abs($riga_documento[$key]['avere']); $riga_documento[$key]['avere'] = $tmp; } } $righe = array_merge($righe, $riga_documento); // Descrizione $numero_scadenze = count($id_scadenze); $numero_documenti = count($id_documenti); if ($numero_documenti + $numero_scadenze > 1) { if ($idanagrafica_mov != 0) { $an = Anagrafica::find($idanagrafica_mov); $descrizione = 'Pag. fatture '.$an->ragione_sociale.' num. '.implode(', ', $numeri); } else { $descrizione = 'Pag. fatture num. '.implode(', ', $numeri); } } elseif ($numero_documenti == 1) { $numero_fattura = !empty($fattura['numero_esterno']) ? $fattura['numero_esterno'] : $fattura['numero']; $tipo_fattura = $fattura->isNota() ? $tipo->descrizione : tr('Fattura'); if (!empty($is_insoluto)) { $operation = tr('Registrazione insoluto'); } else { $operation = tr('Pag.'); } $descrizione = tr('_OP_ _DOC_ num. _NUM_ del _DATE_ (_NAME_)', [ '_OP_' => $operation, '_DOC_' => strtolower($tipo_fattura), '_NUM_' => $numero_fattura, '_DATE_' => Translator::dateToLocale($fattura['data']), '_NAME_' => $fattura->anagrafica['ragione_sociale'], ]); } elseif ($numero_scadenze == 1) { $descrizione = tr('Pag. _OP_ del _DATE_', [ '_OP_' => $scadenza['descrizione'], '_DATE_' => Translator::dateToLocale($scadenza['scadenza']), ]); } if (!empty($id_records) && get('origine') == 'fatture' && !empty($counter)) { $descrizione_stati = []; $stati = $database->fetchArray("SELECT * FROM `co_statidocumento` WHERE descrizione IN ('Emessa', 'Parzialmente pagato', 'Pagato') ORDER BY descrizione"); foreach ($stati as $stato) { $descrizione_stati[] = ' '.$stato['descrizione'].''; } echo '

'.tr('Solo le fatture in stato _STATE_ possono essere registrate contabilmente ignorate', [ '_STATE_' => implode(', ', $descrizione_stati), ]).'.

'.tr('Sono state ignorate _NUM_ fatture', [ '_NUM_' => $counter, ]).'.

'; } echo '
'; echo '
{[ "type": "select", "label": "'.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" ]}
{[ "type": "date", "label": "'.tr('Data movimento').'", "name": "data", "required": 1, "value": "-now-" ]}
{[ "type": "text", "label": "'.tr('Causale').'", "name": "descrizione", "id": "desc", "required": 1, "value": '.json_encode($descrizione).' ]}
'; include $structure->filepath('movimenti.php'); echo '
'; ?>