This commit is contained in:
MatteoPistorello 2020-10-07 14:58:44 +02:00
commit 4efe0af5f5
10 changed files with 76 additions and 17 deletions

View File

@ -393,6 +393,7 @@ function release(done) {
'!.idea/**', '!.idea/**',
'!.git/**', '!.git/**',
'!node_modules/**', '!node_modules/**',
'!include/custom/**',
'!backup/**', '!backup/**',
'!files/**', '!files/**',
'!logs/**', '!logs/**',

View File

@ -30,6 +30,7 @@ function customStructure()
'modules', 'modules',
'templates', 'templates',
'plugins', 'plugins',
'include',
]; ];
// Controlli di personalizzazione fisica // Controlli di personalizzazione fisica

View File

@ -33,7 +33,7 @@ class Articolo extends Article
public function movimenta($qta) public function movimenta($qta)
{ {
if (!$this->parent->movimenta_magazzino) { if (!$this->getDocument()->movimenta_magazzino) {
return; return;
} }

View File

@ -44,7 +44,7 @@ class Movimento extends Model
$model->idmastrino = $mastrino->idmastrino; $model->idmastrino = $mastrino->idmastrino;
$model->data = $mastrino->data; $model->data = $mastrino->data;
$model->descrizione = $mastrino->descrizione; $model->descrizione = $mastrino->descrizione;
$model->note = ($mastrino->note)? :''; $model->note = $mastrino->note;
$model->primanota = $mastrino->primanota; $model->primanota = $mastrino->primanota;
$model->is_insoluto = $mastrino->is_insoluto; $model->is_insoluto = $mastrino->is_insoluto;

View File

@ -825,7 +825,7 @@ class FatturaElettronica
if (!empty($id_ritenuta)) { if (!empty($id_ritenuta)) {
$percentuale = database()->fetchOne('SELECT percentuale FROM co_ritenutaacconto WHERE id = '.prepare($id_ritenuta))['percentuale']; $percentuale = database()->fetchOne('SELECT percentuale FROM co_ritenutaacconto WHERE id = '.prepare($id_ritenuta))['percentuale'];
// Con la nuova versione in vigore dal 01/01/2021, questo nodo diventa ripetibile.
$result['DatiRitenuta'] = [ $result['DatiRitenuta'] = [
'TipoRitenuta' => (Validate::isValidTaxCode($azienda['codice_fiscale']) and $cliente['tipo'] == 'Privato') ? 'RT01' : 'RT02', 'TipoRitenuta' => (Validate::isValidTaxCode($azienda['codice_fiscale']) and $cliente['tipo'] == 'Privato') ? 'RT01' : 'RT02',
'ImportoRitenuta' => $totale_ritenutaacconto, 'ImportoRitenuta' => $totale_ritenutaacconto,
@ -835,11 +835,13 @@ class FatturaElettronica
} }
// Bollo (2.1.1.6) // Bollo (2.1.1.6)
// ImportoBollo --> con la nuova versione in vigore dal 01/01/2021, la compilazione di questo nodo è diventata facoltativa.
// considerato che l'importo è noto e può essere solo di 2,00 Euro.
$riga_bollo = $documento->rigaBollo; $riga_bollo = $documento->rigaBollo;
if (!empty($riga_bollo)) { if (!empty($riga_bollo)) {
$result['DatiBollo'] = [ $result['DatiBollo'] = [
'BolloVirtuale' => 'SI', 'BolloVirtuale' => 'SI',
'ImportoBollo' => $riga_bollo->totale, //'ImportoBollo' => $riga_bollo->totale,
]; ];
} }

View File

@ -315,6 +315,11 @@ class FatturaElettronica
$dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']; $dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento'];
$data = $dati_generali['Data']; $data = $dati_generali['Data'];
//Se rilevo che la data contine anche l'orario la formatto togliendo l'orario
if(strpos($data, '+')){
$data = date('Y-m-d', strtotime($data));
}
$fattura = $this->prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura); $fattura = $this->prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura);
$this->fattura = $fattura; $this->fattura = $fattura;

View File

@ -28,17 +28,26 @@ class Stampa extends Resource implements RetrieveInterface
{ {
public function retrieve($request) public function retrieve($request)
{ {
$content = '';
$print = PrintTemplate::where('name', $request['name'])->first(); $print = PrintTemplate::where('name', $request['name'])->first();
if (!empty($print)) { if (!empty($print)) {
$directory = base_dir().'/files/api'; $directory = base_dir().'/files/api';
$data = Prints::render($print->id, $request['id_record'], $directory);
download($data['path']); $string = strpos($request['resource'], 'binary') !== false;
$data = Prints::render($print->id, $request['id_record'], $directory, $string);
if (!$string) {
download($data['path']);
} else {
$content = $data['pdf'];
}
delete($data['path']); delete($data['path']);
} }
return [ return [
'custom' => '', 'content' => base64_encode($content),
'filename' => $data['name'],
]; ];
} }
} }

View File

@ -79,7 +79,7 @@ abstract class Article extends Accounting
*/ */
public function movimenta($qta) public function movimenta($qta)
{ {
if (!$this->parent->movimenta_magazzino) { if (!$this->getDocument()->movimenta_magazzino) {
return; return;
} }

View File

@ -33,7 +33,7 @@ echo "
<thead> <thead>
<tr> <tr>
<th class='text-center' style='width:5%'>".tr('#', [], ['upper' => true])."</th> <th class='text-center' style='width:5%'>".tr('#', [], ['upper' => true])."</th>
<th class='text-center' style='width:7%'>".tr('Cod.', [], ['upper' => true])."</th> <th class='text-center'>".tr('Cod.', [], ['upper' => true])."</th>
<th class='text-center'>".tr('Descrizione', [], ['upper' => true])."</th> <th class='text-center'>".tr('Descrizione', [], ['upper' => true])."</th>
<th class='text-center' style='width:10%'>".tr('Q.tà', [], ['upper' => true]).'</th>'; <th class='text-center' style='width:10%'>".tr('Q.tà', [], ['upper' => true]).'</th>';
@ -65,7 +65,7 @@ foreach ($righe as $riga) {
'.$num.' '.$num.'
</td> </td>
<td class="text-center" style="vertical-align: middle">'; <td class="text-center" nowrap="nowrap" style="vertical-align: middle">';
if ($riga->isArticolo()) { if ($riga->isArticolo()) {
echo $riga->codice; echo $riga->codice;

View File

@ -225,13 +225,54 @@ ALTER TABLE `mg_articoli` ADD `um_secondaria` varchar(255), ADD `fattore_um_seco
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Conferma automaticamente le quantità negli ordini cliente', '1', 'boolean', '1', 'Ordini', NULL, NULL); INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Conferma automaticamente le quantità negli ordini cliente', '1', 'boolean', '1', 'Ordini', NULL, NULL);
ALTER TABLE `or_righe_ordini` ADD `confermato` BOOLEAN NOT NULL AFTER `id_dettaglio_fornitore`; ALTER TABLE `or_righe_ordini` ADD `confermato` BOOLEAN NOT NULL AFTER `id_dettaglio_fornitore`;
UPDATE `or_righe_ordini` SET `confermato`=1; UPDATE `or_righe_ordini` SET `confermato` = 1;
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `mg_articoli` LEFT JOIN an_anagrafiche ON mg_articoli.id_fornitore=an_anagrafiche.idanagrafica LEFT JOIN co_iva ON mg_articoli.idiva_vendita=co_iva.id LEFT JOIN (SELECT SUM(qta-qta_evasa) AS qta_impegnata, idarticolo FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine=or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine=or_tipiordine.id WHERE idstatoordine IN(SELECT id FROM or_statiordine WHERE completato=0) AND or_tipiordine.dir=\'entrata\' AND or_righe_ordini.confermato = 1 GROUP BY idarticolo) a ON a.idarticolo=mg_articoli.id LEFT JOIN mg_categorie ON mg_articoli.id_categoria=mg_categorie.id LEFT JOIN mg_categorie AS sottocategorie ON mg_articoli.id_sottocategoria=sottocategorie.id WHERE 1=1 AND (`mg_articoli`.`deleted_at`) IS NULL HAVING 2=2 ORDER BY `mg_articoli`.`descrizione`' WHERE `zz_modules`.`name` = 'Articoli'; UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `mg_articoli` LEFT JOIN an_anagrafiche ON mg_articoli.id_fornitore=an_anagrafiche.idanagrafica LEFT JOIN co_iva ON mg_articoli.idiva_vendita=co_iva.id LEFT JOIN (SELECT SUM(qta-qta_evasa) AS qta_impegnata, idarticolo FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine=or_ordini.id INNER JOIN or_tipiordine ON or_ordini.idtipoordine=or_tipiordine.id WHERE idstatoordine IN(SELECT id FROM or_statiordine WHERE completato=0) AND or_tipiordine.dir=\'entrata\' AND or_righe_ordini.confermato = 1 GROUP BY idarticolo) a ON a.idarticolo=mg_articoli.id LEFT JOIN mg_categorie ON mg_articoli.id_categoria=mg_categorie.id LEFT JOIN mg_categorie AS sottocategorie ON mg_articoli.id_sottocategoria=sottocategorie.id WHERE 1=1 AND (`mg_articoli`.`deleted_at`) IS NULL HAVING 2=2 ORDER BY `mg_articoli`.`descrizione`' WHERE `zz_modules`.`name` = 'Articoli';
-- Aggiunte note prima nota
ALTER TABLE `co_movimenti` ADD `note` TEXT NOT NULL AFTER `descrizione`;
-- Aggiunta impostazione per impegnare o meno automaticamente le quantità negli ordini fornitori -- Aggiunta impostazione per impegnare o meno automaticamente le quantità negli ordini fornitori
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Conferma automaticamente le quantità negli ordini fornitore', '1', 'boolean', '1', 'Ordini', NULL, NULL); INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Conferma automaticamente le quantità negli ordini fornitore', '1', 'boolean', '1', 'Ordini', NULL, NULL);
-- Aggiunte note prima nota
ALTER TABLE `co_movimenti` ADD `note` TEXT AFTER `descrizione`;
-- Aggiunta risorse API dedicate alle Stampe in binary formato
INSERT INTO `zz_api_resources` (`id`, `version`, `type`, `resource`, `class`, `enabled`) VALUES
(NULL, 'v1', 'retrieve', 'stampa-binary', 'API\\Common\\Stampa', '1');
-- Fix <CausalePagamento> tracciato 1.2.1 FE (che potrà essere utilizzata a partire dal 01/10/2020 e sarà obbligatoria dal 01/01/2021)
INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES ('M2', 'Prestazioni di lavoro autonomo non esercitate abitualmente per le quali sussiste lobbligo di iscrizione alla Gestione Separata ENPAPI');
INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES ('M1', 'Redditi derivanti dallassunzione di obblighi di fare, di non fare o permettere');
INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES ('L1', 'Redditi derivanti dallutilizzazione economica di opere dellingegno, di brevetti industriali e di processi, che sono percepiti da soggetti che abbiano acquistato a titolo oneroso i diritti alla loro utilizzazione');
INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES ('O1', 'Redditi derivanti dallassunzione di obblighi di fare, di non fare o permettere, per le quali non sussiste lobbligo di iscrizione alla gestione separata (Circ. INPS n. 104/2001)');
INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES ('V1', 'Redditi derivanti da attività commerciali non esercitate abitualmente (ad esempio, provvigioni corrisposte per prestazioni occasionali ad agente o rappresentante di commercio, mediatore, procacciatore daffari)');
INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES ('V2', 'Redditi derivanti dalle prestazioni non esercitate abitualmente rese dagli incaricati alla vendita diretta a domicilio');
UPDATE `fe_causali_pagamento_ritenuta` SET `codice` = 'ZO' WHERE `fe_causali_pagamento_ritenuta`.`codice` = 'Z';
UPDATE `zz_settings` SET `valore` = 'ZO' WHERE `zz_settings`.`nome` = "Causale ritenuta d'acconto" AND `zz_settings`.`valore` = 'Z';
-- Introduzione tabella di supporto per nodo <TipoRitenuta> tracciato 1.2.1 FE
CREATE TABLE IF NOT EXISTS `fe_tipi_ritenuta` (
`codice` varchar(4) NOT NULL,
`descrizione` varchar(255) NOT NULL,
PRIMARY KEY (`codice`)
) ENGINE=InnoDB;
INSERT INTO `fe_tipi_ritenuta` (`codice`, `descrizione`) VALUES
('RT01', 'Ritenuta persone fisiche'),
('RT02', 'Ritenuta persone giuridiche'),
('RT03', 'Contributo INPS'),
('RT04', 'Contributo ENASARCO'),
('RT05', 'Contributo ENPAM'),
('RT06', 'Altro contributo previdenziale');
-- Disattivazione aliquote IVA con NATURA non più supportata dal tracciato 1.2.1 FE
-- andrà doverosamente specificato il sotto codice (esempio N3.1, N3.2 etc)
UPDATE `co_iva` SET `deleted_at` = now() WHERE `co_iva`.`codice_natura_fe` IN ('N2','N3','N6');