Supporto Parcella e Note FE
This commit is contained in:
parent
6598ab8a52
commit
82cd9203cd
|
@ -12,6 +12,7 @@ if ($module['name'] == 'Ddt di vendita') {
|
||||||
unset($_SESSION['superselect']['idanagrafica']);
|
unset($_SESSION['superselect']['idanagrafica']);
|
||||||
unset($_SESSION['superselect']['idsede_partenza']);
|
unset($_SESSION['superselect']['idsede_partenza']);
|
||||||
unset($_SESSION['superselect']['idsede_destinazione']);
|
unset($_SESSION['superselect']['idsede_destinazione']);
|
||||||
|
unset($_SESSION['superselect']['codice_modalita_pagamento_fe']);
|
||||||
$_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
$_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||||
$_SESSION['superselect']['idsede_partenza'] = $record['idsede_partenza'];
|
$_SESSION['superselect']['idsede_partenza'] = $record['idsede_partenza'];
|
||||||
$_SESSION['superselect']['idsede_destinazione'] = $record['idsede_destinazione'];
|
$_SESSION['superselect']['idsede_destinazione'] = $record['idsede_destinazione'];
|
||||||
|
@ -152,7 +153,7 @@ $_SESSION['superselect']['idsede_destinazione'] = $record['idsede_destinazione']
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
{[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
|
{[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "ajax-source": "pagamenti", "value": "$idpagamento$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
|
|
|
@ -13,9 +13,11 @@ echo '
|
||||||
<i class="fa fa-copy"></i> '.tr('Duplica fattura').'
|
<i class="fa fa-copy"></i> '.tr('Duplica fattura').'
|
||||||
</button>';
|
</button>';
|
||||||
|
|
||||||
if ($record['stato'] != 'Emessa' && $record['stato'] != 'Parzialmente pagato' && $record['stato'] != 'Pagato') {
|
if ($module->name == 'Fatture di vendita') {
|
||||||
|
$attributi_visibili = $record['stato'] != 'Emessa' && $record['stato'] != 'Parzialmente pagato' && $record['stato'] != 'Pagato';
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<a class="btn btn-info" data-toggle="modal" data-title="'.tr('Dati Fattura Elettronica').'" data-href="'.$structure->fileurl('fe/document-fe.php').'?id_module='.$id_module.'&id_record='.$id_record.'">
|
<a class="btn btn-info '.($attributi_visibili ? '' : 'disabled').'" data-toggle="modal" data-title="'.tr('Dati Fattura Elettronica').'" data-href="'.$structure->fileurl('fe/document-fe.php').'?id_module='.$id_module.'&id_record='.$id_record.'" '.($attributi_visibili ? '' : 'disabled').'>
|
||||||
<i class="fa fa-file-code-o"></i> '.tr('Attributi avanzati').'
|
<i class="fa fa-file-code-o"></i> '.tr('Attributi avanzati').'
|
||||||
</a>';
|
</a>';
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ $tipodoc = $rs[0]['descrizione'];
|
||||||
unset($_SESSION['superselect']['idanagrafica']);
|
unset($_SESSION['superselect']['idanagrafica']);
|
||||||
unset($_SESSION['superselect']['idsede_partenza']);
|
unset($_SESSION['superselect']['idsede_partenza']);
|
||||||
unset($_SESSION['superselect']['idsede_destinazione']);
|
unset($_SESSION['superselect']['idsede_destinazione']);
|
||||||
|
unset($_SESSION['superselect']['codice_modalita_pagamento_fe']);
|
||||||
$_SESSION['superselect']['idsede_partenza'] = $record['idsede_partenza'];
|
$_SESSION['superselect']['idsede_partenza'] = $record['idsede_partenza'];
|
||||||
$_SESSION['superselect']['idsede_destinazione'] = $record['idsede_destinazione'];
|
$_SESSION['superselect']['idsede_destinazione'] = $record['idsede_destinazione'];
|
||||||
$_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
$_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||||
|
@ -201,7 +202,7 @@ if (empty($record['is_fiscale'])) {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
{[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "required": 1, "values": "query=SELECT id, CONCAT_WS(' - ', codice_modalita_pagamento_fe, descrizione) AS descrizione, (SELECT id FROM co_banche WHERE id_pianodeiconti3 = co_pagamenti.idconto_<?php echo $conto; ?> LIMIT 0,1) AS idbanca FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento$", "extra": "onchange=\"$('#idbanca').val( $(this).find('option:selected').data('idbanca') ).change(); \" " ]}
|
{[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "required": 1, "ajax-source": "pagamenti", "value": "$idpagamento$", "extra": "onchange=\"$('#idbanca').val($(this).selectData().id_banca_<?php echo $conto; ?>).change(); \" " ]}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
|
|
|
@ -9,6 +9,7 @@ if ($module['name'] == 'Ordini cliente') {
|
||||||
$dir = 'uscita';
|
$dir = 'uscita';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unset($_SESSION['superselect']['codice_modalita_pagamento_fe']);
|
||||||
$_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
$_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||||
|
|
||||||
?><form action="" method="post" id="edit-form">
|
?><form action="" method="post" id="edit-form">
|
||||||
|
@ -81,7 +82,7 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
{[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "required": 1, "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
|
{[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "required": 1, "ajax-source": "pagamenti", "value": "$idpagamento$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../../core.php';
|
||||||
|
|
||||||
|
switch ($resource) {
|
||||||
|
case 'pagamenti':
|
||||||
|
$query = "SELECT id,
|
||||||
|
CONCAT_WS(' - ', codice_modalita_pagamento_fe, descrizione) AS descrizione,
|
||||||
|
(SELECT id FROM co_banche WHERE id_pianodeiconti3 = co_pagamenti.idconto_vendite LIMIT 1) AS id_banca_vendite,
|
||||||
|
(SELECT id FROM co_banche WHERE id_pianodeiconti3 = co_pagamenti.idconto_acquisti LIMIT 1) AS id_banca_acquisti
|
||||||
|
FROM co_pagamenti |where| GROUP BY descrizione ORDER BY descrizione ASC";
|
||||||
|
|
||||||
|
foreach ($elements as $element) {
|
||||||
|
$filter[] = 'co_pagamenti.id = '.prepare($element);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($superselect['codice_modalita_pagamento_fe'])) {
|
||||||
|
$where[] = 'codice_modalita_pagamento_fe = '.prepare($superselect['codice_modalita_pagamento_fe']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($search)) {
|
||||||
|
$search_fields[] = 'descrizione LIKE '.prepare('%'.$search.'%');
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
|
@ -95,10 +95,12 @@ if (in_array($dati_generali['TipoDocumento'], ['TD04', 'TD05'])){
|
||||||
$query = "SELECT
|
$query = "SELECT
|
||||||
co_documenti.id,
|
co_documenti.id,
|
||||||
CONCAT('Fattura num. ', co_documenti.numero_esterno, ' del ', DATE_FORMAT(co_documenti.data, '%d/%m/%Y')) AS descrizione
|
CONCAT('Fattura num. ', co_documenti.numero_esterno, ' del ', DATE_FORMAT(co_documenti.data, '%d/%m/%Y')) AS descrizione
|
||||||
FROM
|
FROM co_documenti
|
||||||
co_documenti INNER JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento
|
INNER JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento
|
||||||
WHERE
|
WHERE
|
||||||
co_tipidocumento.dir = 'uscita' AND
|
co_tipidocumento.dir = 'uscita' AND
|
||||||
|
(co_documenti.data BETWEEN NOW() - INTERVAL 1 YEAR AND NOW()) AND
|
||||||
|
co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE co_tipidocumento.descrizione != 'Bozza') AND
|
||||||
co_documenti.idanagrafica = ".prepare($anagrafica->id);
|
co_documenti.idanagrafica = ".prepare($anagrafica->id);
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
|
@ -107,10 +109,21 @@ if (in_array($dati_generali['TipoDocumento'], ['TD04', 'TD05'])){
|
||||||
</div>';
|
</div>';
|
||||||
} elseif ($dati_generali['TipoDocumento'] == 'TD06') {
|
} elseif ($dati_generali['TipoDocumento'] == 'TD06') {
|
||||||
$anagrafica = $fattura_pa->saveAnagrafica();
|
$anagrafica = $fattura_pa->saveAnagrafica();
|
||||||
|
$query = "SELECT
|
||||||
|
co_documenti.id,
|
||||||
|
CONCAT('Fattura num. ', co_documenti.numero_esterno, ' del ', DATE_FORMAT(co_documenti.data, '%d/%m/%Y')) AS descrizione
|
||||||
|
FROM co_documenti
|
||||||
|
INNER JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento
|
||||||
|
WHERE
|
||||||
|
co_tipidocumento.dir = 'uscita' AND
|
||||||
|
(co_documenti.data BETWEEN NOW() - INTERVAL 1 YEAR AND NOW()) AND
|
||||||
|
co_documenti.idstatodocumento IN (SELECT id FROM co_statidocumento WHERE co_tipidocumento.descrizione != 'Bozza') AND
|
||||||
|
co_documenti.id_segment = (SELECT id FROM zz_segments WHERE name = 'Fatture pro-forma' AND id_module = ".prepare($id_module).') AND
|
||||||
|
co_documenti.idanagrafica = '.prepare($anagrafica->id);
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
{[ "type": "select", "label": "'.tr('Fattura collegata').'", "name": "ref_fattura", "values": "query='.$query.'" ]}
|
{[ "type": "select", "label": "'.tr('Fattura pro-forma').'", "name": "ref_fattura", "values": "query='.$query.'" ]}
|
||||||
</div>';
|
</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,18 +168,19 @@ if (!empty($pagamenti)) {
|
||||||
</ol>';
|
</ol>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// prc '.($pagamenti['CondizioniPagamento'] == 'TP01' ? '!' : '').'= 100 AND
|
|
||||||
$query = 'SELECT id, CONCAT (descrizione, IF((codice_modalita_pagamento_fe IS NULL), \"\", CONCAT( \" (\", codice_modalita_pagamento_fe, \")\" ) )) as descrizione FROM co_pagamenti';
|
|
||||||
if (!empty($codice_modalita_pagamento)) {
|
if (!empty($codice_modalita_pagamento)) {
|
||||||
$query .= ' WHERE codice_modalita_pagamento_fe = '.prepare($codice_modalita_pagamento);
|
$_SESSION['superselect']['codice_modalita_pagamento_fe'] = $codice_modalita_pagamento;
|
||||||
}
|
}
|
||||||
$query .= ' GROUP BY descrizione ORDER BY descrizione ASC';
|
|
||||||
|
|
||||||
// Pagamento
|
// Pagamento
|
||||||
echo '
|
echo '
|
||||||
<div class="row" >
|
<div class="row" >
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
{[ "type": "select", "label": "'.tr('Pagamento').'", "name": "pagamento", "required": 1, "values": "query='.$query.'" ]}
|
<button type="button" class="btn btn-info btn-xs pull-right" onclick="session_set(\'superselect,codice_modalita_pagamento_fe\', \'\', 0)">
|
||||||
|
<i class="fa fa-refresh"></i> '.tr('Reset modalità').'
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{[ "type": "select", "label": "'.tr('Pagamento').'", "name": "pagamento", "required": 1, "ajax-source": "pagamenti" ]}
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
// Movimentazioni
|
// Movimentazioni
|
||||||
|
|
|
@ -110,14 +110,17 @@ class FatturaElettronica
|
||||||
public static function manage($name)
|
public static function manage($name)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$fattura = new FatturaOrdinaria($name);
|
$manager = new FatturaOrdinaria($name);
|
||||||
|
|
||||||
return $fattura;
|
$tipo = $manager->getBody()['DatiGenerali']['DatiGeneraliDocumento']['TipoDocumento'];
|
||||||
} catch (UnexpectedValueException $e) {
|
if ($tipo == 'TD06') {
|
||||||
$fattura = new FatturaSemplificata($name);
|
$manager = new Parcella($name);
|
||||||
|
|
||||||
return $fattura;
|
|
||||||
}
|
}
|
||||||
|
} catch (UnexpectedValueException $e) {
|
||||||
|
$manager = new FatturaSemplificata($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getHeader()
|
public function getHeader()
|
||||||
|
@ -188,6 +191,7 @@ class FatturaElettronica
|
||||||
* Restituisce l'anagrafica collegata alla fattura, eventualmente generandola con i dati forniti.
|
* Restituisce l'anagrafica collegata alla fattura, eventualmente generandola con i dati forniti.
|
||||||
*
|
*
|
||||||
* @param string $type
|
* @param string $type
|
||||||
|
*
|
||||||
* @return Anagrafica
|
* @return Anagrafica
|
||||||
*/
|
*/
|
||||||
public function saveAnagrafica($type = 'Fornitore')
|
public function saveAnagrafica($type = 'Fornitore')
|
||||||
|
@ -281,21 +285,17 @@ class FatturaElettronica
|
||||||
*
|
*
|
||||||
* @return Fattura
|
* @return Fattura
|
||||||
*/
|
*/
|
||||||
public function saveFattura($id_pagamento, $id_sezionale, $id_tipo, $data_registrazione, $ref_fattura = null)
|
public function saveFattura($id_pagamento, $id_sezionale, $id_tipo, $data_registrazione, $ref_fattura)
|
||||||
{
|
{
|
||||||
$anagrafica = $this->saveAnagrafica();
|
|
||||||
|
|
||||||
$dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento'];
|
$dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento'];
|
||||||
$data = $dati_generali['Data'];
|
$data = $dati_generali['Data'];
|
||||||
|
|
||||||
|
$fattura = $this->prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura);
|
||||||
|
$this->fattura = $fattura;
|
||||||
|
|
||||||
$numero_esterno = $dati_generali['Numero'];
|
$numero_esterno = $dati_generali['Numero'];
|
||||||
$progressivo_invio = $this->getHeader()['DatiTrasmissione']['ProgressivoInvio'];
|
$progressivo_invio = $this->getHeader()['DatiTrasmissione']['ProgressivoInvio'];
|
||||||
|
|
||||||
$tipo = TipoFattura::where('id', $id_tipo)->first();
|
|
||||||
|
|
||||||
$fattura = Fattura::build($anagrafica, $tipo, $data, $id_sezionale);
|
|
||||||
$this->fattura = $fattura;
|
|
||||||
|
|
||||||
$fattura->progressivo_invio = $progressivo_invio;
|
$fattura->progressivo_invio = $progressivo_invio;
|
||||||
$fattura->numero_esterno = $numero_esterno;
|
$fattura->numero_esterno = $numero_esterno;
|
||||||
$fattura->idpagamento = $id_pagamento;
|
$fattura->idpagamento = $id_pagamento;
|
||||||
|
@ -360,6 +360,21 @@ class FatturaElettronica
|
||||||
return $this->getFattura()->id;
|
return $this->getFattura()->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura)
|
||||||
|
{
|
||||||
|
$anagrafica = $this->saveAnagrafica();
|
||||||
|
|
||||||
|
$tipo = TipoFattura::where('id', $id_tipo)->first();
|
||||||
|
|
||||||
|
$fattura = Fattura::build($anagrafica, $tipo, $data, $id_sezionale);
|
||||||
|
$this->fattura = $fattura;
|
||||||
|
|
||||||
|
// Riferimento per nota di credito e debito
|
||||||
|
$fattura->ref_documento = $ref_fattura ?: null;
|
||||||
|
|
||||||
|
return $fattura;
|
||||||
|
}
|
||||||
|
|
||||||
protected function forceArray($result)
|
protected function forceArray($result)
|
||||||
{
|
{
|
||||||
$result = isset($result[0]) ? $result : [$result];
|
$result = isset($result[0]) ? $result : [$result];
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Plugins\ImportFE;
|
||||||
|
|
||||||
|
use Modules\Fatture\Fattura;
|
||||||
|
use Modules\Fatture\Tipo as TipoFattura;
|
||||||
|
use Util\XML;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe per la gestione delle parcelle in XML.
|
||||||
|
*
|
||||||
|
* @since 2.4.11
|
||||||
|
*/
|
||||||
|
class Parcella extends FatturaOrdinaria
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Prepara la fattura elettronica come fattura del gestionale.
|
||||||
|
*
|
||||||
|
* @param int $id_tipo
|
||||||
|
* @param string $data
|
||||||
|
* @param int $id_sezionale
|
||||||
|
* @param int $ref_fattura
|
||||||
|
*
|
||||||
|
* @return Fattura
|
||||||
|
*/
|
||||||
|
public function prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura)
|
||||||
|
{
|
||||||
|
if (empty($ref_fattura)) {
|
||||||
|
return parent::prepareFattura($id_tipo, $data, $id_sezionale, $ref_fattura);
|
||||||
|
}
|
||||||
|
|
||||||
|
$anagrafica = $this->saveAnagrafica();
|
||||||
|
|
||||||
|
$tipo = TipoFattura::where('id', $id_tipo)->first();
|
||||||
|
|
||||||
|
$fattura = Fattura::find($ref_fattura);
|
||||||
|
|
||||||
|
// Rimozione righe precedenti (query per evitare procedure automatiche di compensazione)
|
||||||
|
database()->query('DELETE FROM co_righe_documenti WHERE iddocumento = '.prepare($fattura->id));
|
||||||
|
|
||||||
|
$fattura->anagrafica()->associate($anagrafica);
|
||||||
|
$fattura->tipo()->associate($tipo);
|
||||||
|
$fattura->data = $data;
|
||||||
|
$fattura->id_segment = $id_sezionale;
|
||||||
|
|
||||||
|
return $fattura;
|
||||||
|
}
|
||||||
|
}
|
|
@ -116,3 +116,6 @@ INSERT INTO `zz_api_resources` (`id`, `version`, `type`, `resource`, `class`, `e
|
||||||
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES
|
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`) VALUES
|
||||||
(NULL, 'OSMCloud Services API Version', 'v2', 'string', 0, 'Fatturazione Elettronica', 11);
|
(NULL, 'OSMCloud Services API Version', 'v2', 'string', 0, 'Fatturazione Elettronica', 11);
|
||||||
DELETE FROM `zz_settings` WHERE `nome` = 'apilayer API key for Email';
|
DELETE FROM `zz_settings` WHERE `nome` = 'apilayer API key for Email';
|
||||||
|
|
||||||
|
-- Fatture pro-forma di acquisto
|
||||||
|
INSERT INTO `zz_segments` (`id`, `id_module`, `name`, `clause`, `position`, `pattern`, `is_fiscale`) VALUES (NULL, '15', 'Fatture pro-forma', '1=1', 'WHR', 'PRO-###', '1');
|
||||||
|
|
Loading…
Reference in New Issue