Merge
This commit is contained in:
commit
4efe0af5f5
|
@ -393,6 +393,7 @@ function release(done) {
|
||||||
'!.idea/**',
|
'!.idea/**',
|
||||||
'!.git/**',
|
'!.git/**',
|
||||||
'!node_modules/**',
|
'!node_modules/**',
|
||||||
|
'!include/custom/**',
|
||||||
'!backup/**',
|
'!backup/**',
|
||||||
'!files/**',
|
'!files/**',
|
||||||
'!logs/**',
|
'!logs/**',
|
||||||
|
|
|
@ -30,6 +30,7 @@ function customStructure()
|
||||||
'modules',
|
'modules',
|
||||||
'templates',
|
'templates',
|
||||||
'plugins',
|
'plugins',
|
||||||
|
'include',
|
||||||
];
|
];
|
||||||
|
|
||||||
// Controlli di personalizzazione fisica
|
// Controlli di personalizzazione fisica
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 l’obbligo di iscrizione alla Gestione Separata ENPAPI');
|
||||||
|
|
||||||
|
INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES ('M1', 'Redditi derivanti dall’assunzione di obblighi di fare, di non fare o permettere');
|
||||||
|
|
||||||
|
INSERT INTO `fe_causali_pagamento_ritenuta` (`codice`, `descrizione`) VALUES ('L1', 'Redditi derivanti dall’utilizzazione economica di opere dell’ingegno, 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 dall’assunzione di obblighi di fare, di non fare o permettere, per le quali non sussiste l’obbligo 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 d’affari)');
|
||||||
|
|
||||||
|
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');
|
||||||
|
|
Loading…
Reference in New Issue