From 1d8030c44ee29b7f2963255a4828986555551e0f Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 29 Dec 2020 00:39:30 +0100 Subject: [PATCH] Nuovo modulo Tipi documento Fix minori --- modules/anagrafiche/buttons.php | 4 +- modules/anagrafiche/edit.php | 18 +++ modules/stato_servizi/edit.php | 149 +++++++++++++------------ modules/tipi_documento/actions.php | 118 ++++++++++++++++++++ modules/tipi_documento/add.php | 46 ++++++++ modules/tipi_documento/ajax/select.php | 34 ++++++ modules/tipi_documento/edit.php | 74 ++++++++++++ modules/tipi_documento/init.php | 24 ++++ update/2_4_20.sql | 35 +++++- 9 files changed, 425 insertions(+), 77 deletions(-) create mode 100644 modules/tipi_documento/actions.php create mode 100644 modules/tipi_documento/add.php create mode 100644 modules/tipi_documento/ajax/select.php create mode 100644 modules/tipi_documento/edit.php create mode 100644 modules/tipi_documento/init.php diff --git a/modules/anagrafiche/buttons.php b/modules/anagrafiche/buttons.php index 40b630b8d..aaca0931f 100755 --- a/modules/anagrafiche/buttons.php +++ b/modules/anagrafiche/buttons.php @@ -53,7 +53,7 @@ if (in_array($id_cliente, $tipi_anagrafica) or in_array($id_fornitore, $tipi_ana
  • '.tr('Nuova fattura di vendita').'
  • -
  • '.tr('Nuova registrazione contabile').' +
  • '.tr('Nuova registrazione contabile (cliente)').'
  • '; } @@ -67,7 +67,7 @@ if (in_array($id_cliente, $tipi_anagrafica) or in_array($id_fornitore, $tipi_ana
  • '.tr('Nuova fattura di acquisto').'
  • -
  • '.tr('Nuova registrazione contabile').' +
  • '.tr('Nuova registrazione contabile (fornitore)').'
  • '; } diff --git a/modules/anagrafiche/edit.php b/modules/anagrafiche/edit.php index b0794377c..6c8cc42d3 100755 --- a/modules/anagrafiche/edit.php +++ b/modules/anagrafiche/edit.php @@ -49,6 +49,24 @@ if (!$is_cliente) { } $nazione_anagrafica = $anagrafica->sedeLegale->nazione; + + +// Avvisi problemi scheda anagrafica +$problemi_anagrafica = []; +if ($is_cliente && empty($record['idconto_cliente'])){ + array_push($problemi_anagrafica, ' Piano dei conti mancante per il cliente'); +} + +if ($is_fornitore && empty($record['idconto_fornitore'])){ + array_push($problemi_anagrafica, ' Piano dei conti mancante per il fornitore'); +} + +if (sizeof($problemi_anagrafica) > 0) { + echo '
    '.tr("Controllare: _CAMPI_" , [ + '_CAMPI_' => implode(', ', $problemi_anagrafica) + ]).'
    '; +} + ?>
    diff --git a/modules/stato_servizi/edit.php b/modules/stato_servizi/edit.php index 2f5ccee42..d07c5906e 100755 --- a/modules/stato_servizi/edit.php +++ b/modules/stato_servizi/edit.php @@ -49,81 +49,90 @@ if (Services::isEnabled()) { // Informazioni su Services $servizi = Cache::pool('Informazioni su Services')->content; - // Elaborazione dei servizi in scadenza - $limite_scadenze = (new Carbon())->addDays(60); - $servizi_in_scadenza = []; - foreach ($servizi as $servizio) { - // Gestione per data di scadenza - $scadenza = new Carbon($servizio['expiration_at']); - if ( - (isset($servizio['expiration_at']) && $scadenza->lessThan($limite_scadenze)) - ) { - $servizi_in_scadenza[] = $servizio['name'].' ('.$scadenza->diffForHumans().')'; - } - // Gestione per crediti - elseif ( - (isset($servizio['credits']) && $servizio['credits'] < 100) - ) { - $servizi_in_scadenza[] = $servizio['name'].' ('.$servizio['credits'].' crediti)'; - } - } + if (!empty($servizi)){ - echo ' -
    -
    -
    -

    - '.tr('Informazioni su Services').' -

    + // Elaborazione dei servizi in scadenza + $limite_scadenze = (new Carbon())->addDays(60); + $servizi_in_scadenza = []; + foreach ($servizi as $servizio) { + // Gestione per data di scadenza + $scadenza = new Carbon($servizio['expiration_at']); + if ( + (isset($servizio['expiration_at']) && $scadenza->lessThan($limite_scadenze)) + ) { + $servizi_in_scadenza[] = $servizio['name'].' ('.$scadenza->diffForHumans().')'; + } + // Gestione per crediti + elseif ( + (isset($servizio['credits']) && $servizio['credits'] < 100) + ) { + $servizi_in_scadenza[] = $servizio['name'].' ('.$servizio['credits'].' crediti)'; + } + } + + echo ' +
    +
    +
    +

    + '.tr('Informazioni su Services').' +

    +
    +
    + +
    '; + + if (empty($servizi_in_scadenza)) { + echo ' +

    '.tr('Nessun servizio in scadenza').'.

    '; + } else { + echo ' +

    '.tr('I seguenti servizi sono in scadenza:').'

    +
      '; + foreach ($servizi_in_scadenza as $servizio) { + echo ' +
    • '.$servizio.'
    • '; + } + echo ' +
    '; + } + + echo ' + +

    + +

    '.tr('Statistiche su Fatture Elettroniche').'

    +
      +
    • '.tr('Fatture transitate').':
    • +
    • '.tr('Spazio occupato').':
    • +
    -
    '; - - if (empty($servizi_in_scadenza)) { - echo ' -

    '.tr('Nessun servizio in scadenza').'.

    '; - } else { - echo ' -

    '.tr('I seguenti servizi sono in scadenza:').'

    -
      '; - foreach ($servizi_in_scadenza as $servizio) { - echo ' -
    • '.$servizio.'
    • '; - } - echo ' -
    '; - } - - echo ' - -

    - -

    '.tr('Statistiche su Fatture Elettroniche').'

    -
      -
    • '.tr('Fatture transitate').':
    • -
    • '.tr('Spazio occupato').':
    • -
    -
    -
    - - '; + '; + + }else{ + + echo ' +
    '; + + } } // Widgets diff --git a/modules/tipi_documento/actions.php b/modules/tipi_documento/actions.php new file mode 100644 index 000000000..3778a059c --- /dev/null +++ b/modules/tipi_documento/actions.php @@ -0,0 +1,118 @@ +. + */ + +include_once __DIR__.'/../../core.php'; + +switch (filter('op')) { + case 'update': + $descrizione = filter('descrizione'); + $dir = filter('dir'); + $codice_tipo_documento_fe = filter('codice_tipo_documento_fe'); + + if (isset($descrizione) && isset($dir) && isset($codice_tipo_documento_fe)) { + if ($dbo->fetchNum('SELECT * FROM `co_tipidocumento` WHERE `dir`='.prepare($dir).' AND `codice_tipo_documento_fe`='.prepare($codice_tipo_documento_fe).' AND `id`!='.prepare($id_record)) == 0) { + + $predefined = post('predefined'); + if (!empty($predefined)) { + $dbo->query('UPDATE co_tipidocumento SET predefined = 0'); + } + + $enabled = post('enabled'); + if (!empty($enabled)) { + $dbo->query('UPDATE co_tipidocumento SET `enabled` = 0'); + } + + $dbo->update('co_tipidocumento', [ + 'descrizione' => $descrizione, + 'dir' => $dir, + 'codice_tipo_documento_fe' => $codice_tipo_documento_fe, + 'help' => filter('help'), + 'predefined' => $predefined, + 'enabled' => $enabled, + ], ['id' => $id_record]); + + flash()->info(tr('Salvataggio completato!')); + } else { + flash()->error(tr("E' già presente una tipologia di _TYPE_ con la stessa combinazione di direzione e tipo documento FE", [ + '_TYPE_' => 'tipo documento', + ])); + } + } else { + flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio')); + } + + break; + + case 'add': + $descrizione = filter('descrizione'); + $dir = filter('dir'); + $codice_tipo_documento_fe = filter('codice_tipo_documento_fe'); + + if (isset($descrizione) && isset($dir) && isset($codice_tipo_documento_fe)) { + if ($dbo->fetchNum('SELECT * FROM `co_tipidocumento` WHERE `dir`='.prepare($dir).' AND `codice_tipo_documento_fe`='.prepare($codice_tipo_documento_fe)) == 0) { + $dbo->insert('co_tipidocumento', [ + 'descrizione' => $descrizione, + 'dir' => $dir, + 'codice_tipo_documento_fe' => $codice_tipo_documento_fe, + ]); + $id_record = $dbo->lastInsertedID(); + + if (isAjaxRequest()) { + echo json_encode(['id' => $id_record, 'text' => $descrizione]); + } + + flash()->info(tr('Aggiunta nuova tipologia di _TYPE_', [ + '_TYPE_' => 'tipo documento', + ])); + } else { + flash()->error(tr("E' già presente una tipologia di _TYPE_ con la stessa combinazione di direzione e tipo documento FE", [ + '_TYPE_' => 'tipo documento', + ])); + } + } else { + flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio')); + } + + break; + + case 'delete': + + $documenti = $dbo->fetchNum('SELECT id FROM co_documenti WHERE idtipodocumento ='.prepare($id_record)); + + if (isset($id_record) && empty($documenti)) { + $dbo->query('DELETE FROM `co_tipidocumento` WHERE `id`='.prepare($id_record)); + flash()->info(tr('Tipologia di _TYPE_ eliminata con successo.', [ + '_TYPE_' => 'tipo documento', + ])); + } else { + + $dbo->update('co_tipidocumento', [ + 'deleted_at' => date(), + ], ['id' => $id_record]); + + flash()->info(tr('Tipologia di _TYPE_ eliminata con successo.', [ + '_TYPE_' => 'tipo documento', + ])); + + + //flash()->error(tr('Sono presenti dei documenti collegati a questo tipo documento')); + } + + break; +} \ No newline at end of file diff --git a/modules/tipi_documento/add.php b/modules/tipi_documento/add.php new file mode 100644 index 000000000..5dd4e2052 --- /dev/null +++ b/modules/tipi_documento/add.php @@ -0,0 +1,46 @@ +. + */ + +include_once __DIR__.'/../../core.php'; + +?> + + + +
    +
    + {[ "type": "text", "label": "", "name": "descrizione", "required": 1 ]} +
    + +
    + {[ "type": "select", "label": "", "name": "dir", "values": "list=\"\": \"Non specificato\", \"entrata\": \"\", \"uscita\": \"\"", "required": 1 ]} +
    + +
    + {[ "type": "select", "label": "", "name": "codice_tipo_documento_fe", "values": "query=SELECT codice AS id, CONCAT_WS(' - ', codice, descrizione) AS descrizione FROM fe_tipi_documento", "required": 1 ]} +
    +
    + + +
    +
    + +
    +
    + \ No newline at end of file diff --git a/modules/tipi_documento/ajax/select.php b/modules/tipi_documento/ajax/select.php new file mode 100644 index 000000000..6eee9245e --- /dev/null +++ b/modules/tipi_documento/ajax/select.php @@ -0,0 +1,34 @@ +. + */ + +include_once __DIR__.'/../../../core.php'; + +switch ($resource) { + case 'tipi_documento': + $query = 'SELECT id, descrizione FROM co_tipidocumento |where| ORDER BY descrizione ASC'; + + foreach ($elements as $element) { + $filter[] = 'id='.prepare($element); + } + if (!empty($search)) { + $search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%'); + } + + break; +} diff --git a/modules/tipi_documento/edit.php b/modules/tipi_documento/edit.php new file mode 100644 index 000000000..507188ea9 --- /dev/null +++ b/modules/tipi_documento/edit.php @@ -0,0 +1,74 @@ +. + */ + +include_once __DIR__.'/../../core.php'; + +?>
    + + + + + +
    +
    + {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": "$descrizione$" ]} +
    + +
    + {[ "type": "select", "label": "", "name": "dir", "value": "$dir$", "values": "list=\"\": \"Non specificato\", \"entrata\": \"\", \"uscita\": \"\"", "required": 1 ]} +
    + +
    + {[ "type": "select", "label": "", "name": "codice_tipo_documento_fe", "value": "$codice_tipo_documento_fe$", "values": "query=SELECT codice AS id, CONCAT_WS(' - ', codice, descrizione) AS descrizione FROM fe_tipi_documento", "required": 1 ]} +
    + +
    + {[ "type": "checkbox", "label": "", "name": "predefined", "value": "", "help":"." ]} +
    + +
    + {[ "type": "checkbox", "label": "", "name": "enabled", "value": "" ]} +
    + +
    + {[ "type": "text", "label": "", "name": "help", "value": "$help$" ]} +
    + +
    + + +
    + +fetchNum('SELECT id FROM co_documenti WHERE idtipodocumento='.prepare($id_record)); + +if (!empty($numero_documenti)) { + echo ' +
    + '.tr('Ci sono _NUM_ documenti collegati', [ + '_NUM_' => $numero_documenti, + ]).'. +
    '; +} +?> + + + + diff --git a/modules/tipi_documento/init.php b/modules/tipi_documento/init.php new file mode 100644 index 000000000..e68f56050 --- /dev/null +++ b/modules/tipi_documento/init.php @@ -0,0 +1,24 @@ +. + */ + +include_once __DIR__.'/../../core.php'; + +if (isset($id_record)) { + $record = $dbo->fetchOne('SELECT * FROM `co_tipidocumento` WHERE id='.prepare($id_record)); +} diff --git a/update/2_4_20.sql b/update/2_4_20.sql index 6c198d7ec..3ed72ba1a 100644 --- a/update/2_4_20.sql +++ b/update/2_4_20.sql @@ -171,12 +171,12 @@ UPDATE `co_iva` SET `codice_natura_fe` = 'N6.9' WHERE `codice_natura_fe` = 'N6'; -- Aumento testo descrizione per righe attività (da 255 caratteri) ALTER TABLE `in_righe_interventi` CHANGE `descrizione` `descrizione` TEXT NULL; +ALTER TABLE `co_tipidocumento` CHANGE `descrizione` `descrizione` VARCHAR(125) NOT NULL; + -- Aggiunta tipologia documento TD 25 INSERT INTO `co_tipidocumento` (`id`, `descrizione`, `dir`, `reversed`, `codice_tipo_documento_fe`) VALUES -(NULL, "Fattura differita di cui all'art.21, comma 4, terzo periodo lett. b", 'entrata', '0', 'TD25'), -(NULL, "Fattura differita di cui all'art.21, comma 4, terzo periodo lett. b", 'uscita', '0', 'TD25'); - -ALTER TABLE `co_tipidocumento` CHANGE `descrizione` `descrizione` VARCHAR(125) NOT NULL; +(NULL, "Fattura differita di cui all'art.21, comma 4, terzo periodo lett. b (Dropshipping)", 'entrata', '0', 'TD25'), +(NULL, "Fattura differita di cui all'art.21, comma 4, terzo periodo lett. b (Dropshipping)", 'uscita', '0', 'TD25'); -- Metodi di pagamento speculari per fatture di acquisto INSERT INTO `co_tipidocumento` (`id`, `descrizione`, `dir`, `reversed`, `codice_tipo_documento_fe`) VALUES @@ -193,4 +193,29 @@ INSERT INTO `co_tipidocumento` (`id`, `descrizione`, `dir`, `reversed`, `codice_ (NULL, 'Fattura per autoconsumo o per cessioni gratuite senza rivalsa', 'uscita', '0', 'TD27'); -- Setto 10 tentativi per email create più di una settimana fa che non sono state mai processate e non hanno ricevuto ne invio o fallimento -UPDATE `em_emails` SET `attempt` = '10' WHERE `em_emails`.`attempt` = 0 AND `em_emails`.`failed_at` IS NULL AND `em_emails`.`sent_at` IS NULL AND `em_emails`.`processing_at` IS NULL AND `em_emails`.`created_at` <= DATE_SUB(NOW(), INTERVAL 7 DAY); \ No newline at end of file +UPDATE `em_emails` SET `attempt` = '10', `em_emails`.`failed_at` = NOW() WHERE `em_emails`.`attempt` = 0 AND `em_emails`.`failed_at` IS NULL AND `em_emails`.`sent_at` IS NULL AND `em_emails`.`processing_at` IS NULL AND `em_emails`.`created_at` <= DATE_SUB(NOW(), INTERVAL 7 DAY); + +-- Aggiunto deleted_at per tipi di documento +ALTER TABLE `co_tipidocumento` ADD `deleted_at` DATETIME NULL DEFAULT NULL AFTER `codice_tipo_documento_fe`; +-- Aggiunti campi predefined, enabled, help per tipi di documento +ALTER TABLE `co_tipidocumento` ADD `predefined` TINYINT NOT NULL DEFAULT '0' AFTER `codice_tipo_documento_fe`; +ALTER TABLE `co_tipidocumento` ADD `enabled` TINYINT NOT NULL DEFAULT '1' AFTER `predefined`; +ALTER TABLE `co_tipidocumento` ADD `help` VARCHAR(255) NULL AFTER `enabled`; +UPDATE `co_tipidocumento` SET `predefined` = '1' WHERE `co_tipidocumento`.`descrizione` = 'Fattura immediata di vendita'; +UPDATE `co_tipidocumento` SET `predefined` = '1' WHERE `co_tipidocumento`.`descrizione` = 'Fattura immediata di acquisto'; + +UPDATE `co_tipidocumento` SET `help` = 'Fattura emessa entro le ore 24 del giorno di effettuazione dell’operazione.' WHERE `co_tipidocumento`.`descrizione` = 'Fattura immediata di acquisto'; +UPDATE `co_tipidocumento` SET `help` = 'Fattura emessa entro le ore 24 del giorno di effettuazione dell’operazione.' WHERE `co_tipidocumento`.`descrizione` = 'Fattura immediata di vendita'; +UPDATE `co_tipidocumento` SET `help` = "Fattura emessa entro il giorno 15 del mese successivo a quello di effettuazione dell'operazione (art. 21 comma 4 lett. a) del D.P.R. 633/1972)." WHERE `co_tipidocumento`.`descrizione` = 'Fattura differita di acquisto'; +UPDATE `co_tipidocumento` SET `help` = "Fattura emessa entro il giorno 15 del mese successivo a quello di effettuazione dell'operazione (art. 21 comma 4 lett. a) del D.P.R. 633/1972)." WHERE `co_tipidocumento`.`descrizione` = 'Fattura differita di vendita'; + +-- Innesto nuovo modulo Tipi documento +INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`, `use_notes`, `use_checklists`) VALUES (NULL, 'Tipi documento', 'Tipi documento', 'tipi_documento', 'SELECT |select| FROM `co_tipidocumento` WHERE 1=1 AND deleted_at IS NULL HAVING 2=2', '', 'fa fa-angle-right', '2.4.20', '2.4.20', '1', (SELECT `id` FROM `zz_modules` t WHERE t.`name` = 'Tabelle'), '1', '1', '0', '0'); + +INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `default`, `visible`) VALUES +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Tipi documento'), 'Attivo', 'co_tipidocumento.enabled', 6, 1, 0, 0, 1), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Tipi documento'), 'Predefinito', 'co_tipidocumento.predefined', 5, 1, 0, 0, 1),1 +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Tipi documento'), 'Codice FE', 'co_tipidocumento.codice_tipo_documento_fe', 4, 1, 0, 0, 1), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Tipi documento'), 'Direzione', 'co_tipidocumento.dir', 3, 1, 0, 0, 1), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Tipi documento'), 'Descrizione', 'co_tipidocumento.descrizione', 2, 1, 0, 0, 1), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Tipi documento'), 'id', 'co_tipidocumento.id', 1, 1, 0, 0, 0); \ No newline at end of file