$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; } } App::flash()->info(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))) { App::flash()->info(tr('Pianificazione eliminata correttamente!')); } } } // Creazione fattura pianificata elseif (get('op') == 'addfattura') { $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'; $idconto = setting('Conto predefinito fatture di vendita'); $numero = get_new_numerofattura($data); $id_segment = post('id_segment'); $numero_esterno = get_new_numerosecondariofattura($data); // Tipo di pagamento + banca predefinite dall'anagrafica $query = 'SELECT id, (SELECT idbanca_vendite FROM an_anagrafiche WHERE idanagrafica = '.prepare($idanagrafica).') AS idbanca FROM co_pagamenti WHERE id = (SELECT idpagamento_vendite AS pagamento FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica).')'; $rs = $dbo->fetchArray($query); $idpagamento = $rs[0]['id']; $idbanca = $rs[0]['idbanca']; // Se la fattura è di vendita e non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni if ($dir == 'entrata' && $idpagamento == '') { $idpagamento = setting('Tipo di pagamento predefinito'); } // Se non è impostata la banca dell'anagrafica, uso quella del pagamento. if (empty($idbanca)) { // Banca predefinita del pagamento $query = 'SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_vendite FROM co_pagamenti WHERE id = '.prepare($idpagamento).')'; $rs = $dbo->fetchArray($query); $idbanca = $rs[0]['id']; } $query = 'INSERT INTO co_documenti(numero, numero_esterno, idanagrafica, idtipodocumento, idpagamento, data, idstatodocumento, note, idsede, id_segment, idconto, idbanca) 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='.prepare($idanagrafica).'), '.prepare($id_segment).', '.prepare($idconto).', '.prepare($idbanca).' )'; $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_righe_contratti WHERE idcontratto='.prepare($id_record)); $importo = $rs2[0]['totale'] / sizeof($rs); // Lettura iva del cliente o predefinita $rs2 = $dbo->fetchArray('SELECT idiva_vendite AS 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(setting('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::get('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_righe_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 "