Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
41c2d6e8a0
|
@ -194,6 +194,10 @@ class CSV extends CSVImporter
|
|||
'field' => 'dir',
|
||||
'label' => 'Cliente/Fornitore listino',
|
||||
],
|
||||
[
|
||||
'field' => 'nome_sede',
|
||||
'label' => 'Sede',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -406,7 +410,7 @@ class CSV extends CSVImporter
|
|||
$sede = Sede::where('nomesede', $nome_sede)
|
||||
->where('idanagrafica', $anagrafica_azienda->id)
|
||||
->first();
|
||||
$id_sede = $sede->id;
|
||||
$id_sede = $sede->id ?: 0;
|
||||
}
|
||||
|
||||
if( isset($record['qta']) ) {
|
||||
|
@ -422,11 +426,11 @@ class CSV extends CSVImporter
|
|||
public static function getExample()
|
||||
{
|
||||
return [
|
||||
['Codice', 'Barcode', 'Immagine', 'Import immagine', 'Descrizione', 'Fornitore predefinito', 'Quantità', 'Unità di misura', 'Prezzo acquisto', 'Prezzo vendita', 'Peso lordo (KG)', 'Volume (M3)', 'Categoria', 'Sottocategoria', 'Ubicazione', 'Note', 'Anagrafica listino', 'Codice fornitore', 'Barcode fornitore', 'Descrizione fornitore', 'Qta minima', 'Qta massima', 'Prezzo listino', 'Sconto listino', 'Cliente/Fornitore listino'],
|
||||
['00004', '719376861871', 'https://immagini.com/immagine.jpg', '1', 'Articolo', 'Mario Rossi', '10', 'Kg', '5.25', '12.72', '10.2', '500', 'Categoria4', 'Sottocategoria2', 'Scaffale 1', 'Articolo di prova', 'Mario Rossi', 'artforn01', '384574557484', 'Articolo di prova fornitore', '', '', '10', '5', 'Fornitore'],
|
||||
['00004', '719376861871', 'https://immagini.com/immagine.jpg', '2', 'Articolo', 'Mario Rossi', '10', 'Kg', '5.25', '12.72', '10.2', '500', 'Categoria4', 'Sottocategoria2', 'Scaffale 1', 'Articolo di prova', 'Mario Rossi', 'artforn01', '384574557484', 'Articolo di prova fornitore', '1', '10', '9', '', 'Fornitore'],
|
||||
['00004', '719376861871', 'https://immagini.com/immagine.jpg', '3', 'Articolo', 'Mario Rossi', '10', 'Kg', '5.25', '12.72', '10.2', '500', 'Categoria4', 'Sottocategoria2', 'Scaffale 1', 'Articolo di prova', 'Mario Rossi', 'artforn01', '384574557484', 'Articolo di prova fornitore', '11', '20', '8', '5', 'Fornitore'],
|
||||
['00004', '719376861871', '', '', 'Articolo', 'Mario Rossi', '10', 'Kg', '5.25', '12.72', '10.2', '500', 'Categoria4', 'Sottocategoria2', 'Scaffale 1', 'Articolo di prova', 'Mario Verdi', '', '', '', '1', '10', '20', '10', 'Cliente'],
|
||||
['Codice', 'Barcode', 'Immagine', 'Import immagine', 'Descrizione', 'Fornitore predefinito', 'Quantità', 'Unità di misura', 'Prezzo acquisto', 'Prezzo vendita', 'Peso lordo (KG)', 'Volume (M3)', 'Categoria', 'Sottocategoria', 'Ubicazione', 'Note', 'Anagrafica listino', 'Codice fornitore', 'Barcode fornitore', 'Descrizione fornitore', 'Qta minima', 'Qta massima', 'Prezzo listino', 'Sconto listino', 'Cliente/Fornitore listino', 'Sede'],
|
||||
['00004', '719376861871', 'https://immagini.com/immagine.jpg', '1', 'Articolo', 'Mario Rossi', '10', 'Kg', '5.25', '12.72', '10.2', '500', 'Categoria4', 'Sottocategoria2', 'Scaffale 1', 'Articolo di prova', 'Mario Rossi', 'artforn01', '384574557484', 'Articolo di prova fornitore', '', '', '10', '5', 'Fornitore', 'Sede2'],
|
||||
['00004', '719376861871', 'https://immagini.com/immagine.jpg', '2', 'Articolo', 'Mario Rossi', '10', 'Kg', '5.25', '12.72', '10.2', '500', 'Categoria4', 'Sottocategoria2', 'Scaffale 1', 'Articolo di prova', 'Mario Rossi', 'artforn01', '384574557484', 'Articolo di prova fornitore', '1', '10', '9', '', 'Fornitore', 'Sede2'],
|
||||
['00004', '719376861871', 'https://immagini.com/immagine.jpg', '3', 'Articolo', 'Mario Rossi', '10', 'Kg', '5.25', '12.72', '10.2', '500', 'Categoria4', 'Sottocategoria2', 'Scaffale 1', 'Articolo di prova', 'Mario Rossi', 'artforn01', '384574557484', 'Articolo di prova fornitore', '11', '20', '8', '5', 'Fornitore', 'Sede2'],
|
||||
['00004', '719376861871', '', '', 'Articolo', 'Mario Rossi', '10', 'Kg', '5.25', '12.72', '10.2', '500', 'Categoria4', 'Sottocategoria2', 'Scaffale 1', 'Articolo di prova', 'Mario Verdi', '', '', '', '1', '10', '20', '10', 'Cliente', 'Sede2'],
|
||||
[],
|
||||
['Import immagine = 1 -> Permette di importare l\'immagine come principale dell\'articolo mantenendo gli altri allegati già presenti'],
|
||||
['Import immagine = 2 -> Permette di importare l\'immagine come principale dell\'articolo rimuovendo tutti gli allegati presenti'],
|
||||
|
|
|
@ -55,8 +55,8 @@ switch (filter('op')) {
|
|||
$ddt->save();
|
||||
|
||||
flash()->info(tr('Aggiunto ddt in _TYPE_ numero _NUM_!', [
|
||||
'_TYPE_' => $dir,
|
||||
'_NUM_' => $ddt->numero,
|
||||
'_TYPE_' => ($dir == 'entrata' ? 'uscita': 'entrata'),
|
||||
'_NUM_' => ($dir == 'uscita' ? $ddt->numero: $ddt->numero_esterno)
|
||||
]));
|
||||
|
||||
break;
|
||||
|
@ -531,7 +531,7 @@ switch (filter('op')) {
|
|||
// Duplica ddt
|
||||
case 'copy':
|
||||
$new = $ddt->replicate();
|
||||
$new->numero = DDT::getNextNumero($new->data, $dir);
|
||||
$new->numero = DDT::getNextNumero($new->data, $dir, $id_segment);
|
||||
$new->numero_esterno = DDT::getNextNumeroSecondario($new->data, $dir, $new->id_segment);
|
||||
|
||||
$stato = Stato::where('descrizione', '=', 'Bozza')->first();
|
||||
|
|
|
@ -99,7 +99,7 @@ class DDT extends Document
|
|||
$model->idpagamento = $id_pagamento;
|
||||
}
|
||||
|
||||
$model->numero = static::getNextNumero($data, $direzione);
|
||||
$model->numero = static::getNextNumero($data, $direzione, $id_segment);
|
||||
$model->numero_esterno = static::getNextNumeroSecondario($data, $direzione, $id_segment);
|
||||
|
||||
// Imposto, come sede aziendale, la prima sede disponibile come utente
|
||||
|
@ -263,15 +263,19 @@ class DDT extends Document
|
|||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getNextNumero($data, $direzione)
|
||||
public static function getNextNumero($data, $direzione, $id_segment)
|
||||
{
|
||||
$maschera = '#';
|
||||
if ($direzione == 'entrata') {
|
||||
return '';
|
||||
}
|
||||
|
||||
$maschera = Generator::getMaschera($id_segment);
|
||||
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'dt_ddt', 'numero', [
|
||||
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
|
||||
'idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir = '.prepare($direzione).')',
|
||||
]);
|
||||
$numero = Generator::generate($maschera, $ultimo);
|
||||
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
|
||||
|
||||
return $numero;
|
||||
}
|
||||
|
|
|
@ -119,7 +119,7 @@ switch (post('op')) {
|
|||
// Se non c'è già una fattura appena creata per questo cliente, creo una fattura nuova
|
||||
if (empty($id_documento)) {
|
||||
if (!empty($accodare)) {
|
||||
$documento = $dbo->fetchOne('SELECT co_documenti.id FROM co_documenti INNER JOIN co_statidocumento ON co_documenti.idstatodocumento = co_statidocumento.id INNER JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento INNER JOIN zz_segments ON zz_segments.id = co_documenti.id_segment WHERE co_statidocumento.descrizione = "Bozza" AND co_documenti.idanagrafica = '.$id_anagrafica.' AND co_tipidocumento.id='.$tipo_documento['id'].' AND co_documenti.id_segment = '.$id_segment);
|
||||
$documento = $dbo->fetchOne('SELECT co_documenti.id FROM co_documenti INNER JOIN co_statidocumento ON co_documenti.idstatodocumento = co_statidocumento.id INNER JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento INNER JOIN zz_segments ON zz_segments.id = co_documenti.id_segment WHERE co_statidocumento.descrizione = "Bozza" AND co_documenti.idanagrafica = '.prepare($id_anagrafica).' AND co_tipidocumento.id='.prepare($tipo_documento['id']).' AND co_documenti.id_segment = '.prepare($id_segment));
|
||||
|
||||
$id_documento = $documento['id'];
|
||||
$id_documento_cliente[$id_anagrafica] = $id_documento;
|
||||
|
|
|
@ -92,7 +92,7 @@ class Ordine extends Document
|
|||
$model->idpagamento = $id_pagamento;
|
||||
}
|
||||
|
||||
$model->numero = static::getNextNumero($data, $direzione);
|
||||
$model->numero = static::getNextNumero($data, $direzione, $id_segment);
|
||||
$model->numero_esterno = static::getNextNumeroSecondario($data, $direzione, $id_segment);
|
||||
|
||||
$model->save();
|
||||
|
@ -198,14 +198,32 @@ class Ordine extends Document
|
|||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getNextNumero($data, $direzione)
|
||||
public static function getNextNumero($data, $direzione, $id_segment)
|
||||
{
|
||||
$maschera = '#';
|
||||
if ($direzione == 'entrata') {
|
||||
$maschera = '#';
|
||||
} else {
|
||||
$maschera = Generator::getMaschera($id_segment);
|
||||
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'or_ordini', 'numero', [
|
||||
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
|
||||
'idtipoordine IN (SELECT id FROM or_tipiordine WHERE dir = '.prepare($direzione).')',
|
||||
]);
|
||||
if (strpos($maschera, 'm') !== false) {
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'or_ordini', 'numero', [
|
||||
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
|
||||
'MONTH(data) = '.prepare(date('m', strtotime($data))),
|
||||
'idtipoordine IN (SELECT id FROM or_tipiordine WHERE dir = '.prepare($direzione).')',
|
||||
]);
|
||||
} elseif ((strpos($maschera, 'YYYY') !== false) or (strpos($maschera, 'yy') !== false)) {
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'or_ordini', 'numero', [
|
||||
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
|
||||
'idtipoordine IN (SELECT id FROM or_tipiordine WHERE dir = '.prepare($direzione).')',
|
||||
]);
|
||||
} else {
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'or_ordini', 'numero', [
|
||||
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
|
||||
'idtipoordine IN (SELECT id FROM or_tipiordine WHERE dir = '.prepare($direzione).')',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$numero = Generator::generate($maschera, $ultimo);
|
||||
|
||||
return $numero;
|
||||
|
|
|
@ -73,6 +73,10 @@ echo '
|
|||
<form action="" method="post" id="form" >
|
||||
<div class="row">';
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Periodo').'", "name": "periodo", "required": "1", "values": '.json_encode($periodi).', "value": "manuale" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "date", "label": "'.tr('Data inizio').'", "required": "1", "name": "date_start", "value": "'.$_SESSION['period_start'].'" ]}
|
||||
</div>
|
||||
|
@ -80,10 +84,6 @@ echo '
|
|||
<div class="col-md-4">
|
||||
{[ "type": "date", "label": "'.tr('Data fine').'", "required": "1", "name": "date_end", "value": "'.$_SESSION['period_end'].'" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Periodo').'", "name": "periodo", "required": "1", "values": '.json_encode($periodi).', "value": "manuale" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
|
@ -91,7 +91,7 @@ echo '
|
|||
if ($nome_stampa != 'Liquidazione IVA') {
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_sezionale", "required": "1", "values": "query=SELECT id AS id, name AS descrizione FROM zz_segments WHERE id_module = (SELECT id FROM zz_modules WHERE name = \''.(($dir == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto').'\') AND is_fiscale = 1 UNION SELECT 0 AS id, \'Tutti i sezionali\' AS descrizione" ]}
|
||||
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_sezionale", "required": "1", "values": "query=SELECT id AS id, name AS descrizione FROM zz_segments WHERE id_module = (SELECT id FROM zz_modules WHERE name = \''.(($dir == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto').'\') AND is_fiscale = 1 UNION SELECT -1 AS id, \'Tutti i sezionali\' AS descrizione" ]}
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
|
|
|
@ -93,8 +93,12 @@ echo '
|
|||
<td colspan=2 class="border-full"'.(!$fattura_accompagnatoria ? ' style="height:20mm;"' : '').'>
|
||||
<p class="small-bold">'.tr('Spett.le', [], ['upper' => true]).'</p>
|
||||
<p>$c_ragionesociale$</p>
|
||||
<p>'.(!empty($c_indirizzo) ? $c_indirizzo : '').(!empty($c_citta_full) ? '<br>'.$c_citta_full : '').'</p>
|
||||
<small>'.(!empty($c_codice_destinatario) ? tr('Cod.Fatturazione').': '.$c_codice_destinatario : '').'</small>
|
||||
<p>'.(!empty($c_indirizzo) ? $c_indirizzo : '').(!empty($c_citta_full) ? '<br>'.$c_citta_full : '').'</p>';
|
||||
if (empty($destinazione)) {
|
||||
echo '
|
||||
<small>'.(!empty($c_codice_destinatario) ? tr('Cod.Fatturazione').': '.$c_codice_destinatario : '').'</small>';
|
||||
}
|
||||
echo '
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -121,7 +125,8 @@ if (!empty($destinazione)) {
|
|||
<tr>
|
||||
<td colspan=2 class="border-full" style="height:16mm;">
|
||||
<p class="small-bold">'.tr('Destinazione diversa', [], ['upper' => true]).'</p>
|
||||
<small>$c_destinazione$</small>
|
||||
<p><small>$c_destinazione$</small></p>
|
||||
<p><small>'.(!empty($c_codice_destinatario) ? tr('Cod.Fatturazione').': '.$c_codice_destinatario : '').'</small></p>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ $vendita_banco = $dbo->fetchNum("SELECT * FROM zz_modules WHERE name='Vendita al
|
|||
$v_iva = [];
|
||||
$v_totale = [];
|
||||
|
||||
if ((!empty($vendita_banco)) && (empty($id_sezionale)) && ($tipo == 'vendite')){
|
||||
if ((!empty($vendita_banco)) && ($id_sezionale == -1) && ($tipo == 'vendite')){
|
||||
$query = '
|
||||
SELECT
|
||||
data_registrazione,
|
||||
|
@ -74,7 +74,7 @@ if ((!empty($vendita_banco)) && (empty($id_sezionale)) && ($tipo == 'vendite')){
|
|||
INNER JOIN co_movimenti ON co_movimenti.iddocumento = co_documenti.id
|
||||
INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica
|
||||
WHERE
|
||||
dir = '.prepare($dir).' AND idstatodocumento NOT IN (SELECT id FROM co_statidocumento WHERE descrizione="Bozza" OR descrizione="Annullata") AND is_descrizione = 0 AND co_documenti.data_competenza >= '.prepare($date_start).' AND co_documenti.data_competenza <= '.prepare($date_end).' AND '.((!empty($id_sezionale)) ? 'co_documenti.id_segment = '.prepare($id_sezionale).'' : '1=1').'
|
||||
dir = '.prepare($dir).' AND idstatodocumento NOT IN (SELECT id FROM co_statidocumento WHERE descrizione="Bozza" OR descrizione="Annullata") AND is_descrizione = 0 AND co_documenti.data_competenza >= '.prepare($date_start).' AND co_documenti.data_competenza <= '.prepare($date_end).' AND '.(($id_sezionale != -1) ? 'co_documenti.id_segment = '.prepare($id_sezionale) : '1=1').'
|
||||
GROUP BY
|
||||
co_iva.id, id
|
||||
UNION
|
||||
|
@ -134,7 +134,7 @@ FROM
|
|||
INNER JOIN co_movimenti ON co_movimenti.iddocumento = co_documenti.id
|
||||
INNER JOIN an_anagrafiche ON an_anagrafiche.idanagrafica = co_documenti.idanagrafica
|
||||
WHERE
|
||||
dir = '.prepare($dir).' AND idstatodocumento NOT IN (SELECT id FROM co_statidocumento WHERE descrizione="Bozza" OR descrizione="Annullata") AND is_descrizione = 0 AND co_documenti.data_competenza >= '.prepare($date_start).' AND co_documenti.data_competenza <= '.prepare($date_end).' AND '.((!empty($id_sezionale)) ? 'co_documenti.id_segment = '.prepare($id_sezionale).'' : '1=1').'
|
||||
dir = '.prepare($dir).' AND idstatodocumento NOT IN (SELECT id FROM co_statidocumento WHERE descrizione="Bozza" OR descrizione="Annullata") AND is_descrizione = 0 AND co_documenti.data_competenza >= '.prepare($date_start).' AND co_documenti.data_competenza <= '.prepare($date_end).' AND '.(($id_sezionale != -1) ? 'co_documenti.id_segment = '.prepare($id_sezionale).'' : '1=1').'
|
||||
GROUP BY
|
||||
co_documenti.id, co_righe_documenti.idiva
|
||||
ORDER BY
|
||||
|
|
|
@ -91,7 +91,7 @@ FROM
|
|||
LEFT JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
|
||||
LEFT JOIN (SELECT `zz_operations`.`id_email`, `zz_operations`.`id_record` FROM `zz_operations` INNER JOIN `em_emails` ON `zz_operations`.`id_email` = `em_emails`.`id` INNER JOIN `em_templates` ON `em_emails`.`id_template` = `em_templates`.`id` INNER JOIN `zz_modules` ON `zz_operations`.`id_module` = `zz_modules`.`id` WHERE `zz_modules`.`name` = 'Ddt di vendita' AND `zz_operations`.`op` = 'send-email' GROUP BY `zz_operations`.`id_record`) AS `email` ON `email`.`id_record` = `dt_ddt`.`id`
|
||||
WHERE
|
||||
1=1 AND `dir` = 'entrata' AND (`data` BETWEEN '2023-01-01' AND '2023-12-31 23:59:59')
|
||||
1=1 AND `dir` = 'entrata' |date_period(`data`)|
|
||||
HAVING
|
||||
2=2
|
||||
ORDER BY
|
||||
|
@ -179,4 +179,9 @@ INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`
|
|||
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES ((SELECT id from zz_modules WHERE title = "Attività"), 'KM', 'sum(in_interventi_tecnici.km)', '29', '1', '0', '1', '0', NULL, NULL, '0', '1', '0');
|
||||
|
||||
-- Aggiunta impostazione data emissione automatica
|
||||
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, "Data emissione fattura automatica", '0', 'boolean', '1', 'Fatturazione', NULL, "Impedisce l'emissione di fatture di vendita con data precedente alla data dell'ultima fattura emessa");
|
||||
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, "Data emissione fattura automatica", '0', 'boolean', '1', 'Fatturazione', NULL, "Impedisce l'emissione di fatture di vendita con data precedente alla data dell'ultima fattura emessa");
|
||||
|
||||
-- Fix name file Fatture Elettroniche in zz_files se si aggiorna da una versione precedente alla 2.4.4
|
||||
UPDATE `zz_files` SET `name` = 'Fattura Elettronica' WHERE `name` = 'Fattura Elettronica (XML)';
|
||||
|
||||
ALTER TABLE `dt_ddt` CHANGE `numero` `numero` VARCHAR(100) NOT NULL;
|
||||
|
|
Loading…
Reference in New Issue