$zone) { foreach ($zone as $n => $idzona) { $dbo->query('DELETE FROM co_ordiniservizio_pianificazionefatture WHERE idzona='.prepare($idzona).' AND iddocumento=0 AND idcontratto='.prepare($id_record)); } } // Ciclo fra le voci in arrivo dal form foreach ($post['zona'] as $data_scadenza => $zone) { // Ogni data può avere più zone da pianificare foreach ($zone as $n => $idzona) { // Aggiunta pianificazione solo se la zona è spuntata if (in_array($idzona, $post['idzona'])) { // Creazione pianificazione $dbo->query('INSERT INTO co_ordiniservizio_pianificazionefatture(idcontratto, data_scadenza, idzona, iddocumento) VALUES('.prepare($id_record).', '.prepare($data_scadenza).', '.prepare($idzona).', 0)'); } $prev_data = $data_scadenza; } } $_SESSION['infos'][] = tr('Pianificazione generata correttamente!'); } // Eliminazione pianificazione specifica elseif ($get['op'] == 'del_pianificazione') { $idpianificazione = $get['idpianificazione']; $n = $dbo->fetchNum('SELECT id FROM co_ordiniservizio_pianificazionefatture WHERE id='.prepare($idpianificazione)); if ($n == 1) { // Eliminazione ordine di servizio if ($dbo->query('DELETE FROM co_ordiniservizio_pianificazionefatture WHERE id='.prepare($idpianificazione))) { $_SESSION['infos'][] = tr('Pianificazione eliminata correttamente!'); } } } // Creazione fattura pianificata elseif ($get['op'] == 'addfattura') { include $docroot.'/modules/fatture/modutil.php'; $idpianificazione = $get['idpianificazione']; $descrizione = post('note'); $data = $post['data']; $idtipodocumento = $post['idtipodocumento']; $note = $post['note']; // Lettura idanagrafica $rs = $dbo->fetchArray('SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record)); $idanagrafica = $rs[0]['idanagrafica']; $dir = 'entrata'; $numero = get_new_numerofattura($data); $numero_esterno = get_new_numerosecondariofattura($data); // Tipo di pagamento predefinito dall'anagrafica $query = 'SELECT id FROM co_pagamenti WHERE id=(SELECT idpagamento_vendite FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')'; $rs = $dbo->fetchArray($query); $idpagamento = $rs[0]['id']; // Se non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni if ($idpagamento == '') { $idpagamento = get_var('Tipo di pagamento predefinito'); } $query = 'INSERT INTO co_documenti(numero, numero_esterno, idanagrafica, idtipodocumento, idpagamento, data, idstatodocumento, note, idsede) VALUES ('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($idanagrafica).', '.prepare($idtipodocumento).', '.prepare($idpagamento).', '.prepare($data).", (SELECT `id` FROM `co_statidocumento` WHERE `descrizione`='Bozza'), ".prepare($note).', (SELECT idsede_fatturazione FROM an_anagrafiche WHERE idanagrafica='.prpeare($idanagrafica).') )'; $dbo->query($query); $iddocumento = $dbo->lastInsertedID(); // Imposto l'iddocumento anche sulla pianificazione, giusto per tener traccia della fattura generata $dbo->query('UPDATE co_ordiniservizio_pianificazionefatture SET iddocumento='.prepare($iddocumento).' WHERE id='.prepare($idpianificazione)); // Leggo quante rate si vogliono pagare per dividerle per mese $rs = $dbo->fetchArray('SELECT id FROM co_ordiniservizio_pianificazionefatture WHERE idcontratto='.prepare($id_record)); // L'importo deve essere diviso per il numero di mesi $rs2 = $dbo->fetchArray('SELECT SUM(subtotale) AS totale FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record)); $importo = $rs2[0]['totale'] / sizeof($rs); // Lettura iva del cliente o predefinita $rs2 = $dbo->fetchArray('SELECT idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica)); $idiva = $rs2[0]['idiva']; if ($idiva != 0) { $rs2 = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare($idiva)); } else { $rs2 = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare(get_var('Iva predefinita'))); } $desc_iva = $rs2[0]['descrizione']; $iva = $importo / 100 * $rs2[0]['percentuale']; $iva_indetraibile = $importo / 100 * $rs2[0]['indetraibile']; // Inserimento riga in fattura $dbo->query('INSERT INTO co_righe_documenti(iddocumento, descrizione, desc_iva, iva, iva_indetraibile, subtotale, um, qta, `order`) VALUES('.prepare($iddocumento).', '.prepare($descrizione).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($importo).", '-', 1, (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento=".prepare($iddocumento)."))"); redirect($rootdir.'/editor.php?id_module='.Modules::getModule('Fatture di vendita')['id'].'&id_record='.$iddocumento.'&dir=entrata'); exit(); } echo '
'.tr('Qui puoi programmare la fatturazione del contratto').'.
'; /* Fatture pianificate */ $rs = $dbo->fetchArray('SELECT *, (SELECT SUM(subtotale) FROM co_righe2_contratti WHERE idcontratto='.prepare($id_record).') AS budget_contratto, (SELECT descrizione FROM an_zone WHERE id=idzona) AS zona FROM co_ordiniservizio_pianificazionefatture WHERE idcontratto='.prepare($id_record).' ORDER BY data_scadenza ASC'); if (empty($rs)) { echo ''.tr('Non sono ancora state pianificate fatture').'...
'; } else { $rs2 = $dbo->fetchArray('SELECT * FROM co_ordiniservizio_pianificazionefatture WHERE idcontratto='.prepare($id_record).' ORDER BY idzona'); for ($i = 0; $i < sizeof($rs2); ++$i) { // Leggo quante rate sono pianificate per dividere l'importo delle sedi in modo corretto ++$n_rate[$rs2[$i]['idzona']]; // Leggo il totale già fatturato per questa zona per toglierlo dalla divisione (totale/n_rate) $rs3 = $dbo->fetchArray('SELECT SUM(subtotale-sconto) AS totale FROM co_righe_documenti WHERE iddocumento IN (SELECT iddocumento FROM co_ordiniservizio_pianificazionefatture WHERE iddocumento='.prepare($rs2[$i]['iddocumento']).')'); $gia_fatturato[$rs2[$i]['idzona']] += $rs3[0]['totale']; } echo ''.tr('Non sono ancora stati pianificati ordini di servizio').'...
'; } // Elenco voci di servizio con mesi in cui eseguirle else { // Calcolo mese iniziale e finale del contratto $rs2 = $dbo->fetchArray('SELECT data_accettazione, data_conclusione, TIMESTAMPDIFF( MONTH, data_accettazione, data_conclusione ) AS mesi FROM co_contratti WHERE id='.prepare($id_record)); $n_mesi = $rs2[0]['mesi'] + 1; $mese_start = date('m', strtotime($rs2[0]['data_accettazione'])); echo "