Aggiunta banca controparte nei documenti

This commit is contained in:
Dasc3er 2020-09-17 10:17:39 +02:00
parent 3fffde3d07
commit d21066a1d8
5 changed files with 58 additions and 31 deletions

View File

@ -89,7 +89,8 @@ switch (post('op')) {
$fattura->idanagrafica = post('idanagrafica'); $fattura->idanagrafica = post('idanagrafica');
$fattura->idagente = post('idagente'); $fattura->idagente = post('idagente');
$fattura->idpagamento = post('idpagamento'); $fattura->idpagamento = post('idpagamento');
$fattura->idbanca = post('idbanca'); $fattura->id_banca_azienda = post('id_banca_azienda');
$fattura->id_banca_controparte = post('id_banca_controparte');
$fattura->idcausalet = post('idcausalet'); $fattura->idcausalet = post('idcausalet');
$fattura->idspedizione = post('idspedizione'); $fattura->idspedizione = post('idspedizione');
$fattura->idporto = post('idporto'); $fattura->idporto = post('idporto');
@ -753,7 +754,8 @@ switch (post('op')) {
$nota->ref_documento = $fattura->id; $nota->ref_documento = $fattura->id;
$nota->idconto = $fattura->idconto; $nota->idconto = $fattura->idconto;
$nota->idpagamento = $fattura->idpagamento; $nota->idpagamento = $fattura->idpagamento;
$nota->idbanca = $fattura->idbanca; $nota->id_banca_azienda = $fattura->id_banca_azienda;
$nota->id_banca_controparte = $fattura->id_banca_controparte;
$nota->idsede_partenza = $fattura->idsede_partenza; $nota->idsede_partenza = $fattura->idsede_partenza;
$nota->idsede_destinazione = $fattura->idsede_destinazione; $nota->idsede_destinazione = $fattura->idsede_destinazione;
$nota->split_payment = $fattura->split_payment; $nota->split_payment = $fattura->split_payment;
@ -809,7 +811,8 @@ if (get('op') == 'nota_addebito') {
$nota->ref_documento = $fattura->id; $nota->ref_documento = $fattura->id;
$nota->idconto = $fattura->idconto; $nota->idconto = $fattura->idconto;
$nota->idpagamento = $fattura->idpagamento; $nota->idpagamento = $fattura->idpagamento;
$nota->idbanca = $fattura->idbanca; $nota->id_banca_azienda = $fattura->id_banca_azienda;
$nota->id_banca_controparte = $fattura->id_banca_controparte;
$nota->idsede_partenza = $fattura->idsede_partenza; $nota->idsede_partenza = $fattura->idsede_partenza;
$nota->idsede_destinazione = $fattura->idsede_destinazione; $nota->idsede_destinazione = $fattura->idsede_destinazione;
$nota->save(); $nota->save();

View File

@ -268,11 +268,11 @@ elseif ($record['stato'] == 'Bozza') {
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
{[ "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(); \" " ]} {[ "type": "select", "label": "<?php echo tr('Pagamento'); ?>", "name": "idpagamento", "required": 1, "ajax-source": "pagamenti", "value": "$idpagamento$", "extra": "onchange=\"$('#id_banca_azienda').val($(this).selectData().id_banca_<?php echo $conto; ?>).change(); \" " ]}
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Banca'); ?>", "name": "idbanca", "ajax-source": "banche", "select-options": <?php echo json_encode(['id_anagrafica' => $anagrafica_azienda->id]); ?>, "value": "$idbanca$", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>||", "extra": " <?php echo (intval($block_edit)) ? 'disabled' : ''; ?> " ]} {[ "type": "select", "label": "<?php echo tr('Banca'); ?>", "name": "id_banca_azienda", "ajax-source": "banche", "select-options": <?php echo json_encode(['id_anagrafica' => $anagrafica_azienda->id]); ?>, "value": "$id_banca_azienda$", "icon-after": "add|<?php echo Modules::get('Banche')['id']; ?>||", "extra": " <?php echo (intval($block_edit)) ? 'disabled' : ''; ?> " ]}
</div> </div>
<?php <?php
@ -340,7 +340,7 @@ elseif ($record['stato'] == 'Bozza') {
</div> </div>
<?php <?php
//TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti) // TODO: Fattura per conto del fornitore (es. cooperative agricole che emettono la fattura per conto dei propri soci produttori agricoli conferenti)
if ($dir == 'entrata') { if ($dir == 'entrata') {
?> ?>
<div class="col-md-3"> <div class="col-md-3">

View File

@ -88,14 +88,14 @@ class Fattura extends Document
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data, $id_segment, $numero_esterno = null) public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data, $id_segment, $numero_esterno = null)
{ {
$model = parent::build(); $model = parent::build();
$user = Auth::user(); $user = Auth::user();
$database = database();
// Individuazione dello stato predefinito per il documento
$stato_documento = Stato::where('descrizione', 'Bozza')->first(); $stato_documento = Stato::where('descrizione', 'Bozza')->first();
$direzione = $tipo_documento->dir; $direzione = $tipo_documento->dir;
$database = database(); // Conto predefinito sulla base del flusso di denaro
if ($direzione == 'entrata') { if ($direzione == 'entrata') {
$id_conto = setting('Conto predefinito fatture di vendita'); $id_conto = setting('Conto predefinito fatture di vendita');
$conto = 'vendite'; $conto = 'vendite';
@ -104,6 +104,7 @@ class Fattura extends Document
$conto = 'acquisti'; $conto = 'acquisti';
} }
// Informazioni di base
$model->anagrafica()->associate($anagrafica); $model->anagrafica()->associate($anagrafica);
$model->tipo()->associate($tipo_documento); $model->tipo()->associate($tipo_documento);
$model->stato()->associate($stato_documento); $model->stato()->associate($stato_documento);
@ -115,55 +116,62 @@ class Fattura extends Document
$model->data_registrazione = $data; $model->data_registrazione = $data;
$model->data_competenza = $data; $model->data_competenza = $data;
$model->id_segment = $id_segment; $model->id_segment = $id_segment;
$model->idconto = $id_conto;
if ($numero_esterno) { if ($numero_esterno) {
$model->numero_esterno = $numero_esterno; $model->numero_esterno = $numero_esterno;
} }
$model->idconto = $id_conto; // Sede aziendale scelta tra le sedi disponibili per l'utente
$id_sede = $user->sedi[0];
// Imposto, come sede aziendale, la prima sede disponibile come utente
if ($direzione == 'entrata') { if ($direzione == 'entrata') {
$model->idsede_destinazione = $user->sedi[0]; $model->idsede_destinazione = $id_sede;
} else { } else {
$model->idsede_partenza = $user->sedi[0]; $model->idsede_partenza = $id_sede;
} }
// Gestione della marca da bollo predefinita
$model->addebita_bollo = setting('Addebita marca da bollo al cliente'); $model->addebita_bollo = setting('Addebita marca da bollo al cliente');
// Ritenuta contributi predefinita
$id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta contributi') : null; $id_ritenuta_contributi = ($tipo_documento->dir == 'entrata') ? setting('Ritenuta contributi') : null;
$model->id_ritenuta_contributi = $id_ritenuta_contributi ?: null; $model->id_ritenuta_contributi = $id_ritenuta_contributi ?: null;
// Tipo di pagamento e banca predefinite dall'anagrafica // Banca predefinita per l'anagrafica controparte
$model->id_banca_controparte = $anagrafica->{'idbanca_'.$conto};
// Tipo di pagamento dall'anagrafica controparte
$id_pagamento = $database->fetchOne('SELECT id FROM co_pagamenti WHERE id = :id_pagamento', [ $id_pagamento = $database->fetchOne('SELECT id FROM co_pagamenti WHERE id = :id_pagamento', [
':id_pagamento' => $anagrafica->{'idpagamento_'.$conto}, ':id_pagamento' => $anagrafica->{'idpagamento_'.$conto},
])['id']; ])['id'];
$id_banca = $anagrafica->{'idbanca_'.$conto};
// Se la fattura è di vendita e non è stato associato un pagamento predefinito al cliente leggo il pagamento dalle impostazioni // Per Fatture di Vendita senza pagamento predefinito per il Cliente, si utilizza il pagamento predefinito dalle Impostazioni
if ($direzione == 'entrata' && empty($id_pagamento)) { if ($direzione == 'entrata' && empty($id_pagamento)) {
$id_pagamento = setting('Tipo di pagamento predefinito'); $id_pagamento = setting('Tipo di pagamento predefinito');
} }
// Se non è impostata la banca dell'anagrafica, uso quella del pagamento. // Salvataggio del pagamento
if (empty($id_banca)) {
$id_banca = $database->fetchOne('SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento)', [
':id_pagamento' => $id_pagamento,
])['id'];
}
if (!empty($id_pagamento)) { if (!empty($id_pagamento)) {
$model->idpagamento = $id_pagamento; $model->idpagamento = $id_pagamento;
} }
if (!empty($id_banca)) {
$model->idbanca = $id_banca;
}
// Split Payment // Banca predefinita per l'azienda, con ricerca della banca impostata per il pagamento
$azienda = Anagrafica::find(setting('Azienda predefinita'));
$id_banca_azienda = $database->fetchOne('SELECT id FROM co_banche WHERE id_pianodeiconti3 = (SELECT idconto_'.$conto.' FROM co_pagamenti WHERE id = :id_pagamento) AND id_anagrafica = :id_anagrafica', [
':id_pagamento' => $id_pagamento,
':id_anagrafica' => $azienda->id,
])['id'];
if (empty($id_banca_azienda)) {
$id_banca_azienda = $azienda->{'idbanca_'.$conto};
}
$model->id_banca_azienda = $id_banca_azienda;
// Gestione dello Split Payment sulla base dell'anagrafica Controparte
$split_payment = $anagrafica->split_payment; $split_payment = $anagrafica->split_payment;
if (!empty($split_payment)) { if (!empty($split_payment)) {
$model->split_payment = $split_payment; $model->split_payment = $split_payment;
} }
// Dichiarazione d'Intento // Gestione della Dichiarazione d'Intento associata all'anargafica Controparte
$now = new Carbon(); $now = new Carbon();
$dichiarazione = $anagrafica->dichiarazioni() $dichiarazione = $anagrafica->dichiarazioni()
->where('massimale', '>', 'totale') ->where('massimale', '>', 'totale')
@ -173,6 +181,7 @@ class Fattura extends Document
if (!empty($dichiarazione)) { if (!empty($dichiarazione)) {
$model->dichiarazione()->associate($dichiarazione); $model->dichiarazione()->associate($dichiarazione);
// Registrazione dell'operazione nelle note
$model->note = tr("Operazione non imponibile come da vostra dichiarazione d'intento nr _PROT_ del _PROT_DATE_ emessa in data _RELEASE_DATE_, da noi registrata al nr _ID_ del _DATE_", [ $model->note = tr("Operazione non imponibile come da vostra dichiarazione d'intento nr _PROT_ del _PROT_DATE_ emessa in data _RELEASE_DATE_, da noi registrata al nr _ID_ del _DATE_", [
'_PROT_' => $dichiarazione->numero_protocollo, '_PROT_' => $dichiarazione->numero_protocollo,
'_PROT_DATE_' => $dichiarazione->data_protocollo, '_PROT_DATE_' => $dichiarazione->data_protocollo,
@ -644,7 +653,7 @@ class Fattura extends Document
if ($riba['riba'] == 1) { if ($riba['riba'] == 1) {
$id_banca = $this->anagrafica->idbanca_vendite; $id_banca = $this->anagrafica->idbanca_vendite;
} else { } else {
$id_banca = $this->idbanca; $id_banca = $this->id_banca_azienda;
} }
$result = Banca::find($id_banca); $result = Banca::find($id_banca);

View File

@ -35,7 +35,7 @@ $record = $dbo->fetchOne('SELECT *,
(SELECT descrizione FROM dt_aspettobeni WHERE id=idaspettobeni) AS aspettobeni, (SELECT descrizione FROM dt_aspettobeni WHERE id=idaspettobeni) AS aspettobeni,
(SELECT descrizione FROM dt_spedizione WHERE id=idspedizione) AS spedizione, (SELECT descrizione FROM dt_spedizione WHERE id=idspedizione) AS spedizione,
(SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idvettore) AS vettore, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=idvettore) AS vettore,
(SELECT id FROM co_banche WHERE id=idbanca) AS id_banca, (SELECT id FROM co_banche WHERE id = id_banca_azienda) AS id_banca,
(SELECT is_fiscale FROM zz_segments WHERE id = id_segment) AS is_fiscale (SELECT is_fiscale FROM zz_segments WHERE id = id_segment) AS is_fiscale
FROM co_documenti WHERE id='.prepare($id_record)); FROM co_documenti WHERE id='.prepare($id_record));

View File

@ -201,3 +201,18 @@ UPDATE `an_anagrafiche` SET `idbanca_vendite` = (SELECT `id` FROM `co_banche` WH
UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_banche` INNER JOIN an_anagrafiche ON `an_anagrafiche`.`idanagrafica` = `co_banche`.`id_anagrafica` WHERE 1=1 AND `co_banche`.`deleted_at` IS NULL AND `an_anagrafiche`.`deleted_at` IS NULL HAVING 2=2' WHERE `name` = 'Banche'; UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_banche` INNER JOIN an_anagrafiche ON `an_anagrafiche`.`idanagrafica` = `co_banche`.`id_anagrafica` WHERE 1=1 AND `co_banche`.`deleted_at` IS NULL AND `an_anagrafiche`.`deleted_at` IS NULL HAVING 2=2' WHERE `name` = 'Banche';
INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `visible`, `summable`, `default`) VALUES INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `visible`, `summable`, `default`) VALUES
(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Banche'), 'Anagrafica', 'an_anagrafiche.ragione_sociale', 0, 1, 0, 0, 1, 0, 1); (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Banche'), 'Anagrafica', 'an_anagrafiche.ragione_sociale', 0, 1, 0, 0, 1, 0, 1);
-- Campo id_banca_controparte e id_banca_azienda per i Documenti
ALTER TABLE `co_documenti` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
ALTER TABLE `co_preventivi` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
ALTER TABLE `co_contratti` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
ALTER TABLE `dt_ddt` ADD `id_banca_controparte` INT(11) AFTER `idpagamento`;
ALTER TABLE `or_ordini` ADD `id_banca_controparte` INT(11) NOT NULL AFTER `idpagamento`;
ALTER TABLE `co_documenti` CHANGE `idbanca` `id_banca_azienda` INT(11) AFTER `idpagamento`;
ALTER TABLE `co_preventivi` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
ALTER TABLE `co_contratti` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
ALTER TABLE `dt_ddt` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
ALTER TABLE `or_ordini` ADD `id_banca_azienda` INT(11) AFTER `idpagamento`;
UPDATE `co_documenti` SET `id_banca_azienda` = NULL WHERE `id_banca_azienda` = 0;