mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-03 01:08:08 +01:00
Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
commit
6307c5c67e
58
include/common/sconto.php
Normal file
58
include/common/sconto.php
Normal file
@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
// Descrizione
|
||||
echo App::internalLoad('descrizione.php', $result, $options);
|
||||
|
||||
// Conti, rivalsa INPS e ritenuta d'acconto
|
||||
echo App::internalLoad('conti.php', $result, $options);
|
||||
|
||||
// Sconto percentuale
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Sconto/maggiorazione percentuale').'", "name": "sconto_percentuale", "icon-after": "%", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]}
|
||||
</div>';
|
||||
|
||||
// Sconto unitario
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Sconto/maggiorazione unitario').'", "name": "sconto_unitario", "value": "'.$result['sconto_unitario'].'", "icon-after": "€", "help": "'.tr('Il valore positivo indica uno sconto: per applicare una maggiorazione inserire un valore negativo').'" ]}
|
||||
</div>';
|
||||
|
||||
// Iva
|
||||
echo '
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$result['idiva'].'", "ajax-source": "iva" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
// Funzione per l'aggiornamento in tempo reale del guadagno
|
||||
echo '
|
||||
<script>
|
||||
var descrizione = $("#descrizione_riga");
|
||||
|
||||
var form = descrizione.closest("form");
|
||||
var sconto_percentuale = form.find("#sconto_percentuale");
|
||||
var sconto_unitario = form.find("#sconto_unitario");
|
||||
|
||||
var totale = '.$options['totale'].';
|
||||
|
||||
function aggiorna_sconto_percentuale() {
|
||||
var sconto = sconto_percentuale.val().toEnglish();
|
||||
var unitario = sconto / 100 * totale;
|
||||
|
||||
msg = sconto >= 0 ? "'.tr('Sconto percentuale').'" : "'.tr('Maggiorazione percentuale').'";
|
||||
|
||||
sconto_unitario.val(unitario.toLocale());
|
||||
descrizione.val(msg + " " + Math.abs(sconto).toLocale() + "%");
|
||||
}
|
||||
|
||||
function aggiorna_sconto_unitario(){
|
||||
msg = sconto_unitario.val().toEnglish() >= 0 ? "'.tr('Sconto unitario').'" : "'.tr('Maggiorazione unitaria').'";
|
||||
|
||||
descrizione.val(msg);
|
||||
}
|
||||
|
||||
sconto_percentuale.keyup(aggiorna_sconto_percentuale);
|
||||
sconto_unitario.keyup(aggiorna_sconto_unitario);
|
||||
</script>';
|
@ -110,9 +110,14 @@ abstract class Description extends Model
|
||||
return $this->is_descrizione == 1;
|
||||
}
|
||||
|
||||
public function isSconto()
|
||||
{
|
||||
return $this->subtotale == 0;
|
||||
}
|
||||
|
||||
public function isRiga()
|
||||
{
|
||||
return !$this->isDescrizione() && !$this->isArticolo();
|
||||
return !$this->isDescrizione() && !$this->isSconto() && !$this->isArticolo();
|
||||
}
|
||||
|
||||
public function isArticolo()
|
||||
@ -161,9 +166,5 @@ abstract class Description extends Model
|
||||
$builder->where('is_descrizione', '=', 0);
|
||||
});
|
||||
}
|
||||
|
||||
static::addGlobalScope('not_discount', function (Builder $builder) {
|
||||
$builder->where('sconto_globale', '=', 0);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,75 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Common\Components;
|
||||
|
||||
use Common\Model;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
abstract class Discount extends Model
|
||||
{
|
||||
public static function build()
|
||||
{
|
||||
$model = parent::build();
|
||||
|
||||
$model->sconto_globale = 1;
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il totale dello sconto.
|
||||
*/
|
||||
public function getTotaleAttribute()
|
||||
{
|
||||
return $this->imponibile + $this->iva;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il netto dello sconto.
|
||||
*/
|
||||
public function getNettoAttribute()
|
||||
{
|
||||
return $this->totale;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce l'imponibile scontato dello sconto.
|
||||
*/
|
||||
public function getImponibileScontatoAttribute()
|
||||
{
|
||||
return $this->imponibile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce l'imponibile dello sconto.
|
||||
*/
|
||||
public function getImponibileAttribute()
|
||||
{
|
||||
return $this->subtotale;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il "guadagno" dello sconto.
|
||||
*/
|
||||
public function getGuadagnoAttribute()
|
||||
{
|
||||
return $this->imponibile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il totale dello sconto.
|
||||
*/
|
||||
public function getIvaAttribute()
|
||||
{
|
||||
return $this->attributes['iva'];
|
||||
}
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
|
||||
static::addGlobalScope('is_discount', function (Builder $builder) {
|
||||
$builder->where('sconto_globale', '=', 1);
|
||||
});
|
||||
}
|
||||
}
|
@ -24,8 +24,6 @@ abstract class Document extends Model
|
||||
|
||||
abstract public function descrizioni();
|
||||
|
||||
abstract public function scontoGlobale();
|
||||
|
||||
/**
|
||||
* Calcola l'imponibile del documento.
|
||||
*
|
||||
|
@ -43,69 +43,6 @@ function sum($first, $second = null, $decimals = 4)
|
||||
return floatval($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcola lo sconto globale per i documenti e lo aggiorna di conseguenza.
|
||||
* Attenzione: eseguire la funzione dopo l'inserimento e la modifica di tutte le righe del documento.
|
||||
*
|
||||
* @param array $tables
|
||||
* @param array $fields
|
||||
* @param int $id_record
|
||||
* @param array $options
|
||||
*/
|
||||
function aggiorna_sconto(array $tables, array $fields, $id_record, array $options = [])
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
$descrizione = tr('Sconto', [], ['upper' => true]);
|
||||
|
||||
// Rimozione dello sconto precedente
|
||||
$dbo->query('DELETE FROM '.$tables['row'].' WHERE sconto_globale = 1 AND '.$fields['row'].'='.prepare($id_record));
|
||||
|
||||
// Individuazione del nuovo sconto
|
||||
$sconto = $dbo->select($tables['parent'], ['sconto_globale', 'tipo_sconto_globale'], [$fields['parent'] => $id_record]);
|
||||
$sconto[0]['sconto_globale'] = floatval($sconto[0]['sconto_globale']);
|
||||
|
||||
// Aggiorno l'eventuale sconto gestendolo con le righe in fattura
|
||||
$iva = 0;
|
||||
|
||||
if (!empty($sconto[0]['sconto_globale'])) {
|
||||
// Commit: 2c7f69867accb4f12a0c7cfd320714bb98e31a67
|
||||
// L'aliquota IVA viene calcolata in percentuale sull'imponibile e l'iva effettiva delle righe del documento.
|
||||
if ($sconto[0]['tipo_sconto_globale'] == 'PRC') {
|
||||
$rs = $dbo->fetchArray('SELECT SUM(subtotale - sconto) AS imponibile, SUM(iva) AS iva FROM (SELECT '.$tables['row'].'.subtotale, '.$tables['row'].'.sconto, '.$tables['row'].'.iva FROM '.$tables['row'].' WHERE '.$fields['row'].'='.prepare($id_record).') AS t');
|
||||
$subtotale = $rs[0]['imponibile'];
|
||||
$iva += $rs[0]['iva'] / 100 * $sconto[0]['sconto_globale'];
|
||||
$subtotale = -$subtotale / 100 * $sconto[0]['sconto_globale'];
|
||||
|
||||
$descrizione = $descrizione.' '.Translator::numberToLocale($sconto[0]['sconto_globale']).'%';
|
||||
} else {
|
||||
$rs = $dbo->fetchArray('SELECT SUM(subtotale - sconto) AS imponibile, SUM(iva) AS iva FROM (SELECT '.$tables['row'].'.subtotale, '.$tables['row'].'.sconto, '.$tables['row'].'.iva FROM '.$tables['row'].' WHERE '.$fields['row'].'='.prepare($id_record).') AS t');
|
||||
$subtotale = $rs[0]['imponibile'];
|
||||
$iva += $sconto[0]['sconto_globale'] * $rs[0]['iva'] / $subtotale;
|
||||
|
||||
$subtotale = -$sconto[0]['sconto_globale'];
|
||||
}
|
||||
|
||||
// Calcolo dell'IVA da scontare
|
||||
$idiva = setting('Iva predefinita');
|
||||
$rsi = $dbo->select('co_iva', ['descrizione', 'percentuale'], ['id' => $idiva]);
|
||||
|
||||
$values = [
|
||||
$fields['row'] => $id_record,
|
||||
'descrizione' => $descrizione,
|
||||
'subtotale' => $subtotale,
|
||||
'qta' => 1,
|
||||
'idiva' => $idiva,
|
||||
//'desc_iva' => $rsi[0]['descrizione'],
|
||||
'iva' => -$iva,
|
||||
'sconto_globale' => 1,
|
||||
'order' => orderValue($tables['row'], $fields['row'], $id_record),
|
||||
];
|
||||
|
||||
$dbo->insert($tables['row'], $values);
|
||||
}
|
||||
}
|
||||
|
||||
function controlla_seriali($field, $id_riga, $old_qta, $new_qta, $dir)
|
||||
{
|
||||
$dbo = database();
|
||||
|
@ -2,7 +2,9 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
?><form action="" method="post" id="edit-form">
|
||||
?>
|
||||
|
||||
<form action="" method="post" id="edit-form">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="op" value="update">
|
||||
|
||||
@ -20,7 +22,6 @@ include_once __DIR__.'/../../core.php';
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<?php
|
||||
|
@ -90,23 +90,6 @@ switch (post('op')) {
|
||||
|
||||
$dbo->query($query);
|
||||
|
||||
// Aggiornamento sconto
|
||||
$tipo_sconto = post('tipo_sconto_generico');
|
||||
$sconto = post('sconto_generico');
|
||||
|
||||
$dbo->update('co_contratti', [
|
||||
'tipo_sconto_globale' => $tipo_sconto,
|
||||
'sconto_globale' => $sconto,
|
||||
], ['id' => $id_record]);
|
||||
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_contratti',
|
||||
'row' => 'co_righe_contratti',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idcontratto',
|
||||
], $id_record);
|
||||
|
||||
$dbo->query('DELETE FROM my_impianti_contratti WHERE idcontratto='.prepare($id_record));
|
||||
foreach ((array) post('matricolaimpianto') as $matricolaimpianto) {
|
||||
$dbo->query('INSERT INTO my_impianti_contratti(idcontratto,idimpianto) VALUES('.prepare($id_record).', '.prepare($matricolaimpianto).')');
|
||||
@ -143,6 +126,31 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_sconto':
|
||||
if (post('idriga') != null) {
|
||||
$sconto = Riga::find(post('idriga'));
|
||||
} else {
|
||||
$sconto = Riga::build($contratto);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
$sconto->sconto_unitario = post('sconto_unitario');
|
||||
$sconto->tipo_sconto = 'UNT';
|
||||
|
||||
$sconto->save();
|
||||
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Sconto/maggiorazione modificato!'));
|
||||
} else {
|
||||
flash()->info(tr('Sconto/maggiorazione aggiunta!'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// Aggiungo una riga al contratto
|
||||
case 'addriga':
|
||||
$idiva = post('idiva');
|
||||
@ -364,13 +372,3 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_contratti',
|
||||
'row' => 'co_righe_contratti',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idcontratto',
|
||||
], $id_record);
|
||||
}
|
||||
|
@ -108,14 +108,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||
<div class="col-md-3">
|
||||
{[ "type": "select", "multiple": "1", "label": "<?php echo tr('Impianti'); ?>", "name": "matricolaimpianto[]", "values": "query=SELECT idanagrafica, id AS id, IF(nome = '', matricola, CONCAT(matricola, ' - ', nome)) AS descrizione FROM my_impianti WHERE idanagrafica='$idanagrafica$' ORDER BY descrizione", "value": "$idimpianti$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo del contratto'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
|
||||
if ($record['stato'] == 'Emessa') {
|
||||
echo ', "disabled" : 1';
|
||||
}
|
||||
?> ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -302,13 +294,25 @@ if (sizeof($rs) > 0) {
|
||||
<div class="panel-body">
|
||||
<?php
|
||||
if ($record['stato'] != 'Pagato') {
|
||||
?>
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo"><i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?></a>
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_riga" data-toggle="modal" data-title="Aggiungi riga"><i class="fa fa-plus"></i> <?php echo tr('Riga'); ?></a>
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
</a>';
|
||||
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/contratti/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_descrizione" data-toggle="modal" data-title="Aggiungi descrizione"><i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?></a>
|
||||
<?php
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Descrizione').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
|
||||
</a>';
|
||||
}
|
||||
?>
|
||||
<div class="clearfix"></div>
|
||||
|
@ -1,17 +1,19 @@
|
||||
<?php
|
||||
|
||||
use Modules\Contratti\Contratto;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info contratto
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_contratti WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$documento = Contratto::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'addriga',
|
||||
'action' => 'add',
|
||||
'dir' => 'entrata',
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati di default
|
||||
@ -26,11 +28,11 @@ $result = [
|
||||
];
|
||||
|
||||
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
|
||||
$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
|
||||
$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
|
||||
|
||||
// Aggiunta sconto di default da listino per le vendite
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
|
||||
if ($listino[0]['prc_guadagno'] > 0) {
|
||||
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
|
||||
@ -43,6 +45,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'descrizione';
|
||||
} elseif (get('is_articolo') !== null) {
|
||||
$file = 'articolo';
|
||||
} elseif (get('is_sconto') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -1,31 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Modules\Contratti\Contratto;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info contratto
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_contratti WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$documento = Contratto::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'editriga',
|
||||
'action' => 'edit',
|
||||
'dir' => 'entrata',
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati della riga
|
||||
$rsr = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($id_record).' AND id='.prepare(get('idriga')));
|
||||
$id_riga = get('idriga');
|
||||
$riga = $documento->getRighe()->find($id_riga);
|
||||
|
||||
$result = $rsr[0];
|
||||
$result['prezzo'] = $rsr[0]['subtotale'] / $rsr[0]['qta'];
|
||||
$result = $riga->toArray();
|
||||
$result['prezzo'] = $riga->prezzo_unitario_vendita;
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
$file = 'riga';
|
||||
if (!empty($result['is_descrizione'])) {
|
||||
if ($riga->isDescrizione()) {
|
||||
$file = 'descrizione';
|
||||
} elseif (!empty($result['idarticolo'])) {
|
||||
} elseif ($riga->isArticolo()) {
|
||||
$file = 'articolo';
|
||||
} elseif ($riga->isSconto()) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -101,7 +101,7 @@ foreach ($rs as $r) {
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
|
||||
if ($record['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
|
||||
if ($record['stato'] != 'Pagato') {
|
||||
echo '
|
||||
<form action="'.$rootdir.'/editor.php?id_module='.Modules::get('Contratti')['id'].'&id_record='.$id_record.'" method="post" id="delete-form-'.$r['id'].'" role="form">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
@ -121,13 +121,6 @@ foreach ($rs as $r) {
|
||||
</form>';
|
||||
}
|
||||
|
||||
if (empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
<div class="handle clickable" style="padding:10px">
|
||||
<i class="fa fa-sort"></i>
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>
|
||||
</tr>';
|
||||
|
@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Contratti\Components;
|
||||
|
||||
use Common\Components\Discount;
|
||||
use Modules\Contratti\Contratto;
|
||||
|
||||
class Sconto extends Discount
|
||||
{
|
||||
use RelationTrait;
|
||||
|
||||
protected $table = 'co_righe_contratti';
|
||||
|
||||
/**
|
||||
* Crea una nuovo sconto globale collegato alla contratto, oppure restituisce quello esistente.
|
||||
*
|
||||
* @param Contratto $contratto
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function build(Contratto $contratto)
|
||||
{
|
||||
$model = $contratto->scontoGlobale;
|
||||
|
||||
if ($model == null) {
|
||||
$model = parent::build();
|
||||
|
||||
$model->setContratto($contratto);
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
@ -97,16 +97,9 @@ class Contratto extends Document
|
||||
return 'Contratti';
|
||||
}
|
||||
|
||||
public function updateSconto()
|
||||
public function getDirezioneAttribute()
|
||||
{
|
||||
// Aggiornamento sconto
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_preventivi',
|
||||
'row' => 'co_righe_preventivi',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idcontratto',
|
||||
], $this->id);
|
||||
return 'entrata';
|
||||
}
|
||||
|
||||
public function anagrafica()
|
||||
@ -134,11 +127,6 @@ class Contratto extends Document
|
||||
return $this->hasMany(Components\Descrizione::class, 'idcontratto');
|
||||
}
|
||||
|
||||
public function scontoGlobale()
|
||||
{
|
||||
return $this->hasOne(Components\Sconto::class, 'idcontratto');
|
||||
}
|
||||
|
||||
public function interventi()
|
||||
{
|
||||
return $this->hasMany(Intervento::class, 'id_contratto');
|
||||
|
@ -88,20 +88,6 @@ switch (post('op')) {
|
||||
'ritenutaacconto' => 0,
|
||||
], ['id' => $id_record]);
|
||||
|
||||
// Aggiornamento sconto
|
||||
$dbo->update('dt_ddt', [
|
||||
'tipo_sconto_globale' => post('tipo_sconto_generico'),
|
||||
'sconto_globale' => post('sconto_generico'),
|
||||
], ['id' => $id_record]);
|
||||
|
||||
aggiorna_sconto([
|
||||
'parent' => 'dt_ddt',
|
||||
'row' => 'dt_righe_ddt',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idddt',
|
||||
], $id_record);
|
||||
|
||||
$query = 'SELECT descrizione FROM dt_statiddt WHERE id='.prepare($idstatoddt);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
@ -190,12 +176,36 @@ switch (post('op')) {
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
if ($dir == 'entrata') {
|
||||
ricalcola_costiagg_ddt($id_record);
|
||||
ricalcola_costiagg_ddt($id_record);
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_sconto':
|
||||
if (post('idriga') != null) {
|
||||
$sconto = Riga::find(post('idriga'));
|
||||
} else {
|
||||
ricalcola_costiagg_ddt($id_record);
|
||||
$sconto = Riga::build($ddt);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
$sconto->sconto_unitario = post('sconto_unitario');
|
||||
$sconto->tipo_sconto = 'UNT';
|
||||
|
||||
$sconto->save();
|
||||
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Sconto/maggiorazione modificato!'));
|
||||
} else {
|
||||
flash()->info(tr('Sconto/maggiorazione aggiunta!'));
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
ricalcola_costiagg_ddt($id_record);
|
||||
|
||||
break;
|
||||
|
||||
// Aggiunta di un ordine in ddt
|
||||
@ -238,15 +248,6 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconto
|
||||
if (post('evadere')[$ordine->scontoGlobale->id] == 'on') {
|
||||
$ddt->tipo_sconto_globale = $ordine->tipo_sconto_globale;
|
||||
$ddt->sconto_globale = $ordine->tipo_sconto_globale == 'PRC' ? $ordine->sconto_globale : $ordine->sconto_globale;
|
||||
$ddt->save();
|
||||
|
||||
$ddt->updateSconto();
|
||||
}
|
||||
|
||||
// Impostazione del nuovo stato
|
||||
$descrizione = $parziale ? 'Parzialmente evaso' : 'Evaso';
|
||||
$stato = \Modules\Ordini\Stato::where('descrizione', $descrizione)->first();
|
||||
@ -484,14 +485,3 @@ if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati
|
||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine']));
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconto sulle righe
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'dt_ddt',
|
||||
'row' => 'dt_righe_ddt',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idddt',
|
||||
], $id_record);
|
||||
}
|
||||
|
@ -164,12 +164,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
|
||||
@ -203,19 +197,27 @@ if ($record['flag_completato'] == 0) {
|
||||
echo '
|
||||
<a class="btn btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/ddt/add_ordine.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi ordine">
|
||||
<i class="fa fa-plus"></i> '.tr('Ordine').'
|
||||
</a>'; ?>
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ddt/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo">
|
||||
<i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?>
|
||||
</a>
|
||||
</a>';
|
||||
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ddt/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_riga" data-toggle="modal" data-title="Aggiungi riga">
|
||||
<i class="fa fa-plus"></i> <?php echo tr('Riga'); ?>
|
||||
</a>
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ddt/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_descrizione" data-toggle="modal" data-title="Aggiungi descrizione">
|
||||
<i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?>
|
||||
</a>
|
||||
<?php
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Descrizione').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
|
||||
</a>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
@ -1,23 +1,19 @@
|
||||
<?php
|
||||
|
||||
use Modules\DDT\DDT;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info contratto
|
||||
$rs = $dbo->fetchArray('SELECT * FROM dt_ddt WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
|
||||
if ($module['name'] == 'Ddt di vendita') {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
$documento = DDT::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'addriga',
|
||||
'action' => 'add',
|
||||
'dir' => $dir,
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati di default
|
||||
@ -32,11 +28,11 @@ $result = [
|
||||
];
|
||||
|
||||
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
|
||||
$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
|
||||
$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
|
||||
|
||||
// Aggiunta sconto di default da listino per le vendite
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
|
||||
if ($listino[0]['prc_guadagno'] > 0) {
|
||||
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
|
||||
@ -51,6 +47,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'articolo';
|
||||
|
||||
$options['op'] = 'addarticolo';
|
||||
} elseif (get('is_sconto') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -1,38 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Modules\DDT\DDT;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info contratto
|
||||
$rs = $dbo->fetchArray('SELECT * FROM dt_ddt WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
|
||||
if ($module['name'] == 'Ddt di vendita') {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
$documento = DDT::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'editriga',
|
||||
'action' => 'edit',
|
||||
'dir' => $dir,
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'edit_articolo' => false,
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati della riga
|
||||
$rsr = $dbo->fetchArray('SELECT * FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND id='.prepare(get('idriga')));
|
||||
$id_riga = get('idriga');
|
||||
$riga = $documento->getRighe()->find($id_riga);
|
||||
|
||||
$result = $rsr[0];
|
||||
$result['prezzo'] = $rsr[0]['subtotale'] / $rsr[0]['qta'];
|
||||
$result = $riga->toArray();
|
||||
$result['prezzo'] = $riga->prezzo_unitario_vendita;
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
$file = 'riga';
|
||||
if (!empty($result['is_descrizione'])) {
|
||||
if ($riga->isDescrizione()) {
|
||||
$file = 'descrizione';
|
||||
} elseif (!empty($result['idarticolo'])) {
|
||||
} elseif ($riga->isArticolo()) {
|
||||
$file = 'articolo';
|
||||
} elseif ($riga->isSconto()) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -78,13 +78,9 @@ if (!empty($rs)) {
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
if (empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
echo '
|
||||
<big>'.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').'</big>
|
||||
<br><small>('.tr('Q.tà iniziale').': '.Translator::numberToLocale($r['qta'], 'qta').')</small>';
|
||||
} else {
|
||||
echo '1';
|
||||
}
|
||||
}
|
||||
echo '
|
||||
</td>';
|
||||
@ -141,7 +137,7 @@ if (!empty($rs)) {
|
||||
// Possibilità di rimuovere una riga solo se il ddt non è evaso
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
if ($record['flag_completato'] == 0 && empty($r['sconto_globale'])) {
|
||||
if ($record['flag_completato'] == 0) {
|
||||
echo "
|
||||
<form action='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
|
||||
<input type='hidden' name='backto' value='record-edit'>
|
||||
@ -180,13 +176,6 @@ if (!empty($rs)) {
|
||||
</form>";
|
||||
}
|
||||
|
||||
if (empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
<div class="handle clickable" style="padding:10px">
|
||||
<i class="fa fa-sort"></i>
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>
|
||||
</tr>';
|
||||
|
@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\DDT\Components;
|
||||
|
||||
use Common\Components\Discount;
|
||||
use Modules\DDT\DDT;
|
||||
|
||||
class Sconto extends Discount
|
||||
{
|
||||
use RelationTrait;
|
||||
|
||||
protected $table = 'dt_righe_ddt';
|
||||
|
||||
/**
|
||||
* Crea una nuovo sconto globale collegato alla ddt, oppure restituisce quello esistente.
|
||||
*
|
||||
* @param DDT $ddt
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function build(DDT $ddt)
|
||||
{
|
||||
$model = $ddt->scontoGlobale;
|
||||
|
||||
if ($model == null) {
|
||||
$model = parent::build();
|
||||
|
||||
$model->setDDT($ddt);
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
@ -77,19 +77,12 @@ class DDT extends Document
|
||||
*/
|
||||
public function getModuleAttribute()
|
||||
{
|
||||
return $this->tipo->dir == 'entrata' ? 'Ddt di vendita' : 'DDT di acquisto';
|
||||
return $this->direzione == 'entrata' ? 'Ddt di vendita' : 'DDT di acquisto';
|
||||
}
|
||||
|
||||
public function updateSconto()
|
||||
public function getDirezioneAttribute()
|
||||
{
|
||||
// Aggiornamento sconto
|
||||
aggiorna_sconto([
|
||||
'parent' => 'dt_ddt',
|
||||
'row' => 'dt_righe_ddt',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idddt',
|
||||
], $this->id);
|
||||
return $this->tipo->dir;
|
||||
}
|
||||
|
||||
public function anagrafica()
|
||||
@ -122,11 +115,6 @@ class DDT extends Document
|
||||
return $this->hasMany(Components\Descrizione::class, 'idddt');
|
||||
}
|
||||
|
||||
public function scontoGlobale()
|
||||
{
|
||||
return $this->hasOne(Components\Sconto::class, 'idddt');
|
||||
}
|
||||
|
||||
// Metodi statici
|
||||
|
||||
/**
|
||||
|
@ -96,22 +96,6 @@ switch (post('op')) {
|
||||
$query = 'SELECT descrizione FROM co_statidocumento WHERE id='.prepare($idstatodocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
// Aggiornamento sconto
|
||||
if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') {
|
||||
$dbo->update('co_documenti', [
|
||||
'tipo_sconto_globale' => post('tipo_sconto_generico'),
|
||||
'sconto_globale' => post('sconto_generico'),
|
||||
], ['id' => $id_record]);
|
||||
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_documenti',
|
||||
'row' => 'co_righe_documenti',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'iddocumento',
|
||||
], $id_record);
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo (se la fattura non è stata pagata)
|
||||
if ($dir == 'entrata') {
|
||||
ricalcola_costiagg_fattura($id_record);
|
||||
@ -192,7 +176,7 @@ switch (post('op')) {
|
||||
$rs = $dbo->fetchArray('SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idpreventivo IS NOT NULL');
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
$dbo->query("UPDATE co_preventivi SET idstato=(SELECT id FROM co_statipreventivi WHERE descrizione='In lavorazione') WHERE id=".prepare($rs[$i]['idpreventivo']));
|
||||
$dbo->query("UPDATE co_righe_preventivi SET qta_evasa=0 WHERE idpreventivo=".prepare($rs[$i]['idpreventivo']));
|
||||
$dbo->query('UPDATE co_righe_preventivi SET qta_evasa=0 WHERE idpreventivo='.prepare($rs[$i]['idpreventivo']));
|
||||
}
|
||||
|
||||
// Se ci sono degli interventi collegati li rimetto nello stato "Completato"
|
||||
@ -336,7 +320,46 @@ switch (post('op')) {
|
||||
|
||||
$articolo->save();
|
||||
|
||||
flash()->info(tr('Articolo aggiunto!'));
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Articolo modificato!'));
|
||||
} else {
|
||||
flash()->info(tr('Articolo aggiunto!'));
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
ricalcola_costiagg_fattura($id_record);
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_sconto':
|
||||
if (post('idriga') != null) {
|
||||
$sconto = Riga::find(post('idriga'));
|
||||
} else {
|
||||
$sconto = Riga::build($fattura);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
|
||||
$sconto->id_iva = post('idiva');
|
||||
$sconto->idconto = post('idconto');
|
||||
|
||||
$sconto->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
|
||||
$sconto->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
|
||||
$sconto->ritenuta_contributi = post('ritenuta_contributi');
|
||||
$sconto->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
|
||||
|
||||
$sconto->sconto_unitario = post('sconto_unitario');
|
||||
$sconto->tipo_sconto = 'UNT';
|
||||
|
||||
$sconto->save();
|
||||
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Sconto/maggiorazione modificato!'));
|
||||
} else {
|
||||
flash()->info(tr('Sconto/maggiorazione aggiunta!'));
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
ricalcola_costiagg_fattura($id_record);
|
||||
@ -500,7 +523,7 @@ switch (post('op')) {
|
||||
}
|
||||
|
||||
// Ripristino le quantità da evadere nel preventivo
|
||||
$dbo->update( 'co_righe_preventivi',
|
||||
$dbo->update('co_righe_preventivi',
|
||||
[
|
||||
'qta_evasa' => 0,
|
||||
],
|
||||
@ -517,7 +540,7 @@ switch (post('op')) {
|
||||
}
|
||||
|
||||
// Ripristino le quantità da evadere nel preventivo
|
||||
$dbo->update( 'co_righe_preventivi',
|
||||
$dbo->update('co_righe_preventivi',
|
||||
[
|
||||
'qta_evasa' => 0,
|
||||
],
|
||||
@ -733,15 +756,6 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconto
|
||||
if (post('evadere')[$ordine->scontoGlobale->id] == 'on') {
|
||||
$fattura->tipo_sconto_globale = $ordine->tipo_sconto_globale;
|
||||
$fattura->sconto_globale = $ordine->tipo_sconto_globale == 'PRC' ? $ordine->sconto_globale : $ordine->sconto_globale;
|
||||
$fattura->save();
|
||||
|
||||
$fattura->updateSconto();
|
||||
}
|
||||
|
||||
// Impostazione del nuovo stato
|
||||
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
$stato = \Modules\Ordini\Stato::where('descrizione', $descrizione)->first();
|
||||
@ -809,15 +823,6 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconto
|
||||
if (post('evadere')[$ddt->scontoGlobale->id] == 'on') {
|
||||
$fattura->tipo_sconto_globale = $ddt->tipo_sconto_globale;
|
||||
$fattura->sconto_globale = $ddt->tipo_sconto_globale == 'PRC' ? $ddt->sconto_globale : $ddt->sconto_globale;
|
||||
$fattura->save();
|
||||
|
||||
$fattura->updateSconto();
|
||||
}
|
||||
|
||||
// Impostazione del nuovo stato
|
||||
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
$stato = \Modules\DDT\Stato::where('descrizione', $descrizione)->first();
|
||||
@ -882,15 +887,6 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconto
|
||||
if (post('evadere')[$preventivo->scontoGlobale->id] == 'on') {
|
||||
$fattura->tipo_sconto_globale = $preventivo->tipo_sconto_globale;
|
||||
$fattura->sconto_globale = $preventivo->tipo_sconto_globale == 'PRC' ? $preventivo->sconto_globale : $preventivo->sconto_globale;
|
||||
$fattura->save();
|
||||
|
||||
$fattura->updateSconto();
|
||||
}
|
||||
|
||||
// Impostazione del nuovo stato
|
||||
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
$stato = \Modules\Preventivi\Stato::where('descrizione', $descrizione)->first();
|
||||
@ -963,15 +959,6 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconto
|
||||
if (post('evadere')[$contratto->scontoGlobale->id] == 'on') {
|
||||
$fattura->tipo_sconto_globale = $contratto->tipo_sconto_globale;
|
||||
$fattura->sconto_globale = $contratto->tipo_sconto_globale == 'PRC' ? $contratto->sconto_globale : $contratto->sconto_globale;
|
||||
$fattura->save();
|
||||
|
||||
$fattura->updateSconto();
|
||||
}
|
||||
|
||||
// Impostazione del nuovo stato
|
||||
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
$stato = \Modules\Contratti\Stato::where('descrizione', $descrizione)->first();
|
||||
@ -1032,15 +1019,6 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconto
|
||||
if (post('evadere')[$fattura->scontoGlobale->id] == 'on') {
|
||||
$nota->tipo_sconto_globale = $fattura->tipo_sconto_globale;
|
||||
$nota->sconto_globale = $fattura->tipo_sconto_globale == 'PRC' ? $fattura->sconto_globale : -$fattura->sconto_globale;
|
||||
$nota->save();
|
||||
|
||||
$nota->updateSconto();
|
||||
}
|
||||
|
||||
$id_record = $nota->id;
|
||||
|
||||
break;
|
||||
@ -1093,14 +1071,3 @@ if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati
|
||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine']));
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconto sulle righe
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_documenti',
|
||||
'row' => 'co_righe_documenti',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'iddocumento',
|
||||
], $id_record);
|
||||
}
|
||||
|
@ -238,11 +238,6 @@ if ($dir == 'uscita') {
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo della fattura. Il valore positivo indica uno sconto. Per applicare un rincaro inserire un valore negativo.'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php echo ($record['stato'] == 'Emessa') ? ', "disabled" : 1' : ''; ?> ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Split payment'); ?>", "name": "split_payment", "value": "$split_payment$", "help": "<?php echo tr('Abilita lo split payment per questo documento. Le aliquote iva con natura N6 (reverse charge) non saranno disponibili.'); ?>", "placeholder": "<?php echo tr('Split payment'); ?>" ]}
|
||||
</div>
|
||||
@ -488,19 +483,24 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') {
|
||||
|
||||
$articoli = $dbo->fetchArray($art_query)[0]['tot'];
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary'.(!empty($articoli) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/row-add.php?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="Aggiungi articolo">
|
||||
<a class="btn btn-sm btn-primary'.(!empty($articoli) ? '' : ' disabled').'" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$rootdir.'/modules/fatture/row-add.php?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="Aggiungi riga">
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$rootdir.'/modules/fatture/row-add.php?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="Aggiungi descrizione">
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Descrizione').'
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
|
||||
</a>';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
@ -1,34 +1,26 @@
|
||||
<?php
|
||||
|
||||
use Modules\Fatture\Fattura;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info documento
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_documenti WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
|
||||
if ($module['name'] == 'Fatture di vendita') {
|
||||
$dir = 'entrata';
|
||||
$conti = 'conti-vendite';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
$conti = 'conti-acquisti';
|
||||
}
|
||||
|
||||
// Conto dalle impostazioni
|
||||
if (empty($idconto)) {
|
||||
$idconto = ($dir == 'entrata') ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto');
|
||||
}
|
||||
$documento = Fattura::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'manage_riga',
|
||||
'action' => 'add',
|
||||
'dir' => $dir,
|
||||
'conti' => $conti,
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'show-ritenuta-contributi' => !empty($rs[0]['id_ritenuta_contributi']),
|
||||
'dir' => $documento->direzione,
|
||||
'conti' => $documento->direzione == 'entrata' ? 'conti-vendite' : 'conti-acquisti', 'idanagrafica' => $documento['idanagrafica'],
|
||||
'show-ritenuta-contributi' => !empty($documento['id_ritenuta_contributi']),
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Conto dalle impostazioni
|
||||
if (empty($idconto)) {
|
||||
$idconto = ($dir == 'entrata') ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto');
|
||||
}
|
||||
|
||||
// Dati di default
|
||||
$result = [
|
||||
'descrizione' => '',
|
||||
@ -73,6 +65,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'articolo';
|
||||
|
||||
$options['op'] = 'manage_articolo';
|
||||
} elseif (get('is_sconto') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -1,46 +1,43 @@
|
||||
<?php
|
||||
|
||||
use Modules\Fatture\Fattura;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info documento
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_documenti WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
|
||||
if ($module['name'] == 'Fatture di vendita') {
|
||||
$dir = 'entrata';
|
||||
$conti = 'conti-vendite';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
$conti = 'conti-acquisti';
|
||||
}
|
||||
$documento = Fattura::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'manage_riga',
|
||||
'action' => 'edit',
|
||||
'dir' => $dir,
|
||||
'conti' => $conti,
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'edit_articolo' => false,
|
||||
'show-ritenuta-contributi' => !empty($rs[0]['id_ritenuta_contributi']),
|
||||
'dir' => $documento->direzione,
|
||||
'conti' => $documento->direzione == 'entrata' ? 'conti-vendite' : 'conti-acquisti',
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'show-ritenuta-contributi' => !empty($documento['id_ritenuta_contributi']),
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati della riga
|
||||
$riga = $dbo->fetchOne('SELECT * FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND id='.prepare(get('idriga')));
|
||||
$id_riga = get('idriga');
|
||||
$riga = $documento->getRighe()->find($id_riga);
|
||||
|
||||
$result = $riga;
|
||||
$result['prezzo'] = $riga['subtotale'] / $riga['qta'];
|
||||
$result = $riga->toArray();
|
||||
$result['prezzo'] = $riga->prezzo_unitario_vendita;
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
$file = 'riga';
|
||||
if (!empty($result['is_descrizione'])) {
|
||||
if ($riga->isDescrizione()) {
|
||||
$file = 'descrizione';
|
||||
|
||||
$options['op'] = 'manage_descrizione';
|
||||
} elseif (!empty($result['idarticolo'])) {
|
||||
} elseif ($riga->isArticolo()) {
|
||||
$file = 'articolo';
|
||||
|
||||
$options['op'] = 'manage_articolo';
|
||||
} elseif ($riga->isSconto()) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -78,7 +78,7 @@ foreach ($righe as $row) {
|
||||
|
||||
$delete = 'unlink_contratto';
|
||||
}
|
||||
// Ordini (IDDOCUMENTO,CIG,CUP)
|
||||
// Ordini (IDDOCUMENTO,CIG,CUP)
|
||||
elseif (!empty($riga['idordine'])) {
|
||||
$ordine = $dbo->fetchOne('SELECT num_item,codice_cig,codice_cup,id_documento_fe FROM or_ordini WHERE id = '.prepare($riga['idordine']));
|
||||
$riga['num_item'] = $ordine['num_item'];
|
||||
@ -256,11 +256,11 @@ foreach ($righe as $row) {
|
||||
|
||||
if (!$fattura->isNotaDiAccredito() && $row->isArticolo() && $riga['abilita_serial'] && (empty($riga['idddt']) || empty($riga['idintervento']))) {
|
||||
echo "
|
||||
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$rootdir.'/modules/fatture/add_serial.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id'].'&idarticolo='.$riga['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
|
||||
<a class='btn btn-primary btn-xs'data-toggle='tooltip' title='Aggiorna SN...' onclick=\"launch_modal( 'Aggiorna SN', '".$structure->fileurl('add_serial.php').'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id'].'&idarticolo='.$riga['idarticolo']."', 1 );\"><i class='fa fa-barcode' aria-hidden='true'></i></a>";
|
||||
}
|
||||
|
||||
echo "
|
||||
<a class='btn btn-xs btn-warning' title='Modifica questa riga...' onclick=\"launch_modal( 'Modifica riga', '".$rootdir.'/modules/fatture/row-edit.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id']."', 1 );\"><i class='fa fa-edit'></i></a>
|
||||
<a class='btn btn-xs btn-warning' title='Modifica questa riga...' onclick=\"launch_modal( 'Modifica riga', '".$structure->fileurl('row-edit.php').'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$riga['id']."', 1 );\"><i class='fa fa-edit'></i></a>
|
||||
|
||||
<a class='btn btn-xs btn-danger' title='Rimuovi questa riga...' onclick=\"if( confirm('Rimuovere questa riga dalla fattura?') ){ $('#delete-form-".$riga['id']."').submit(); }\"><i class='fa fa-trash'></i></a>
|
||||
</div>
|
||||
@ -278,19 +278,6 @@ foreach ($righe as $row) {
|
||||
</tr>';
|
||||
}
|
||||
|
||||
$sconto_globale = $fattura->scontoGlobale;
|
||||
if (!empty($sconto_globale)) {
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.$sconto_globale->descrizione.'</td>
|
||||
<td class="text-center">'.Translator::numberToLocale(1, 'qta').'</td>
|
||||
<td></td>
|
||||
<td class="text-right">'.Translator::numberToLocale($sconto_globale->totale).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($sconto_globale->iva).' €</td>
|
||||
<td class="text-right">'.Translator::numberToLocale($sconto_globale->totale).' €</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</tbody>';
|
||||
|
||||
|
@ -62,7 +62,10 @@ trait RelationTrait
|
||||
$result += $this->rivalsainps;
|
||||
}
|
||||
|
||||
return $result / 100 * $this->ritenuta->percentuale;
|
||||
$ritenuta = $this->ritenuta;
|
||||
$result = $result * $ritenuta->percentuale_imponibile / 100;
|
||||
|
||||
return $result / 100 * $ritenuta->percentuale;
|
||||
}
|
||||
|
||||
public function getRitenutaContributiAttribute()
|
||||
|
@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Fatture\Components;
|
||||
|
||||
use Common\Components\Discount;
|
||||
use Modules\Fatture\Fattura;
|
||||
|
||||
class Sconto extends Discount
|
||||
{
|
||||
use RelationTrait;
|
||||
|
||||
protected $table = 'co_righe_documenti';
|
||||
|
||||
/**
|
||||
* Crea una nuovo sconto globale collegato alla fattura, oppure restituisce quello esistente.
|
||||
*
|
||||
* @param Fattura $fattura
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function build(Fattura $fattura)
|
||||
{
|
||||
$model = $fattura->scontoGlobale;
|
||||
|
||||
if ($model == null) {
|
||||
$model = parent::build();
|
||||
|
||||
$model->setFattura($fattura);
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
@ -132,7 +132,12 @@ class Fattura extends Document
|
||||
*/
|
||||
public function getModuleAttribute()
|
||||
{
|
||||
return $this->tipo->dir == 'entrata' ? 'Fatture di vendita' : 'Fatture di acquisto';
|
||||
return $this->direzione == 'entrata' ? 'Fatture di vendita' : 'Fatture di acquisto';
|
||||
}
|
||||
|
||||
public function getDirezioneAttribute()
|
||||
{
|
||||
return $this->tipo->dir;
|
||||
}
|
||||
|
||||
// Calcoli
|
||||
@ -234,11 +239,6 @@ class Fattura extends Document
|
||||
return $this->hasMany(Components\Descrizione::class, 'iddocumento');
|
||||
}
|
||||
|
||||
public function scontoGlobale()
|
||||
{
|
||||
return $this->hasOne(Components\Sconto::class, 'iddocumento');
|
||||
}
|
||||
|
||||
public function ritenutaContributi()
|
||||
{
|
||||
return $this->belongsTo(RitenutaContributi::class, 'id_ritenuta_contributi');
|
||||
@ -398,18 +398,6 @@ class Fattura extends Document
|
||||
return $this->tipo->reversed == 1;
|
||||
}
|
||||
|
||||
public function updateSconto()
|
||||
{
|
||||
// Aggiornamento sconto
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_documenti',
|
||||
'row' => 'co_righe_documenti',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'iddocumento',
|
||||
], $this->id);
|
||||
}
|
||||
|
||||
// Metodi statici
|
||||
|
||||
/**
|
||||
|
@ -5,6 +5,7 @@ include_once __DIR__.'/../../core.php';
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Articoli\Articolo as ArticoloOriginale;
|
||||
use Modules\Interventi\Components\Articolo;
|
||||
use Modules\Interventi\Components\Riga;
|
||||
use Modules\Interventi\Intervento;
|
||||
use Modules\Interventi\Stato;
|
||||
use Modules\Interventi\TipoSessione;
|
||||
@ -19,9 +20,6 @@ switch (post('op')) {
|
||||
$dbo->update('co_promemoria', ['idintervento' => null], ['idintervento' => $id_record]);
|
||||
}
|
||||
|
||||
$tipo_sconto = post('tipo_sconto_globale');
|
||||
$sconto = post('sconto_globale');
|
||||
|
||||
// Salvataggio modifiche intervento
|
||||
$intervento->data_richiesta = post('data_richiesta');
|
||||
$intervento->data_scadenza = post('data_scadenza');
|
||||
@ -40,9 +38,6 @@ switch (post('op')) {
|
||||
$intervento->id_preventivo = post('idpreventivo');
|
||||
$intervento->id_contratto = $idcontratto;
|
||||
|
||||
$intervento->sconto_globale = $sconto;
|
||||
$intervento->tipo_sconto_globale = $tipo_sconto;
|
||||
|
||||
$intervento->id_documento_fe = post('id_documento_fe');
|
||||
$intervento->num_item = post('num_item');
|
||||
$intervento->codice_cup = post('codice_cup');
|
||||
@ -330,6 +325,31 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_sconto':
|
||||
if (post('idriga') != null) {
|
||||
$sconto = Riga::find(post('idriga'));
|
||||
} else {
|
||||
$sconto = Riga::build($intervento);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
$sconto->sconto_unitario = post('sconto_unitario');
|
||||
$sconto->tipo_sconto = 'UNT';
|
||||
|
||||
$sconto->save();
|
||||
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Sconto/maggiorazione modificato!'));
|
||||
} else {
|
||||
flash()->info(tr('Sconto/maggiorazione aggiunta!'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
/*
|
||||
GESTIONE ARTICOLI
|
||||
*/
|
||||
|
@ -100,19 +100,5 @@ if ($show_prezzi) {
|
||||
</table>';
|
||||
}
|
||||
|
||||
// Lettura dello sconto incondizionato
|
||||
$rss = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM in_interventi WHERE id='.prepare($id_record));
|
||||
$sconto = $rss[0]['sconto_globale'];
|
||||
$tipo_sconto = $rss[0]['tipo_sconto_globale'];
|
||||
|
||||
echo '
|
||||
|
||||
<!-- SCONTO -->
|
||||
<div class="row">
|
||||
<div class="col-md-4 pull-right">
|
||||
{[ "type": "number", "label": "'.tr('Sconto incondizionato').'", "name": "sconto_globale", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'|'.$readonly.'", "extra": "'.$readonly.'" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||
|
@ -90,9 +90,11 @@ if (count($rs2) > 0) {
|
||||
// Pulsante per riportare nel magazzino centrale.
|
||||
// Visibile solo se l'intervento non è stato nè fatturato nè completato.
|
||||
if (!$record['flag_completato']) {
|
||||
$link = $record['prezzo_vendita'] == 0 ? $structure->fileurl('row-edit.php') : $structure->fileurl('add_righe.php');
|
||||
|
||||
echo '
|
||||
<td class="text-center">
|
||||
<button type="button" class="btn btn-warning btn-xs" data-toggle="tooltip" onclick="launch_modal(\''.tr('Modifica spesa').'\', \''.$rootdir.'/modules/interventi/add_righe.php?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id'].'\', 1);"><i class="fa fa-edit"></i></button>
|
||||
<button type="button" class="btn btn-warning btn-xs" data-toggle="tooltip" onclick="launch_modal(\''.tr('Modifica spesa').'\', \''.$link.'?id_module='.$id_module.'&id_record='.$id_record.'&idriga='.$r['id'].'\', 1);"><i class="fa fa-edit"></i></button>
|
||||
<button type="button" class="btn btn-danger btn-xs" data-toggle="tooltip" onclick="if(confirm(\''.tr('Eliminare questa spesa?').'\')){ elimina_riga( \''.$r['id'].'\' ); }"><i class="fa fa-trash"></i></button>
|
||||
</td>';
|
||||
}
|
||||
|
@ -98,11 +98,8 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||
{[ "type": "select", "label": "<?php echo tr('Zona'); ?>", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY nome", "value": "$idzona$" , "placeholder": "<?php echo tr('Nessuna zona'); ?>", "extra": "readonly", "help":"<?php echo 'La zona viene definita automaticamente in base al cliente selezionato'; ?>." ]}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!-- RIGA 4 -->
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
@ -247,21 +244,29 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="righe">
|
||||
<?php
|
||||
if (file_exists($docroot.'/modules/interventi/custom/ajax_righe.php')) {
|
||||
include $docroot.'/modules/interventi/custom/ajax_righe.php';
|
||||
} else {
|
||||
include $docroot.'/modules/interventi/ajax_righe.php';
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
|
||||
<?php if (!$record['flag_completato']) {
|
||||
?>
|
||||
<button type="button" class="btn btn-primary" onclick="launch_modal( '<?php echo tr('Aggiungi altre spese'); ?>', '<?php echo $rootdir; ?>/modules/interventi/add_righe.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>', 1 );"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi altre spese'); ?>...</button>
|
||||
<?php
|
||||
} ?>
|
||||
if (!$record['flag_completato']) {
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('add_righe.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi altre spese').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Altre spese').'...
|
||||
</a>';
|
||||
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
|
||||
</a>';
|
||||
}
|
||||
|
||||
?>
|
||||
<div class="clearfix"></div>
|
||||
<br>
|
||||
|
||||
<div id="righe">
|
||||
<?php
|
||||
include $structure->filepath('ajax_righe.php');
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
59
modules/interventi/row-add.php
Normal file
59
modules/interventi/row-add.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
use Modules\Interventi\Intervento;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$documento = Intervento::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'manage_riga',
|
||||
'action' => 'add',
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati di default
|
||||
$result = [
|
||||
'descrizione' => '',
|
||||
'qta' => 1,
|
||||
'um' => '',
|
||||
'prezzo' => 0,
|
||||
'sconto_unitario' => 0,
|
||||
'tipo_sconto' => '',
|
||||
'idiva' => '',
|
||||
'idconto' => $idconto,
|
||||
'ritenuta_contributi' => true,
|
||||
];
|
||||
|
||||
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
|
||||
$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
|
||||
|
||||
// Aggiunta sconto di default da listino per le vendite
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
|
||||
if ($listino[0]['prc_guadagno'] > 0) {
|
||||
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
|
||||
$result['tipo_sconto'] = 'PRC';
|
||||
}
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
$file = 'riga';
|
||||
if (get('is_descrizione') !== null) {
|
||||
$file = 'descrizione';
|
||||
|
||||
$options['op'] = 'manage_descrizione';
|
||||
} elseif (get('is_articolo') !== null) {
|
||||
$file = 'articolo';
|
||||
|
||||
$options['op'] = 'manage_articolo';
|
||||
} elseif (get('is_sconto') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
41
modules/interventi/row-edit.php
Normal file
41
modules/interventi/row-edit.php
Normal file
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
use Modules\Interventi\Intervento;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$documento = Intervento::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'manage_riga',
|
||||
'action' => 'edit',
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati della riga
|
||||
$id_riga = get('idriga');
|
||||
$riga = $documento->getRighe()->find($id_riga);
|
||||
|
||||
$result = $riga->toArray();
|
||||
$result['prezzo'] = $riga->prezzo_unitario_vendita;
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
$file = 'riga';
|
||||
if ($riga->isDescrizione()) {
|
||||
$file = 'descrizione';
|
||||
|
||||
$options['op'] = 'manage_descrizione';
|
||||
} elseif ($riga->isArticolo()) {
|
||||
$file = 'articolo';
|
||||
|
||||
$options['op'] = 'manage_articolo';
|
||||
} elseif ($riga->isSconto()) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
@ -12,7 +12,6 @@ class Articolo extends Article
|
||||
|
||||
protected $table = 'mg_articoli_interventi';
|
||||
protected $serialRowID = 'intervento';
|
||||
protected $disableOrder = true;
|
||||
|
||||
/**
|
||||
* Crea una nuova riga collegata ad un intervento.
|
||||
|
@ -6,6 +6,8 @@ use Modules\Interventi\Intervento;
|
||||
|
||||
trait RelationTrait
|
||||
{
|
||||
protected $disableOrder = true;
|
||||
|
||||
public function getParentID()
|
||||
{
|
||||
return 'idintervento';
|
||||
|
@ -77,12 +77,7 @@ class Intervento extends Document
|
||||
|
||||
public function descrizioni()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public function scontoGlobale()
|
||||
{
|
||||
return null;
|
||||
return $this->righe()->where('prezzo_vendita', 0);
|
||||
}
|
||||
|
||||
// Metodi statici
|
||||
|
@ -12,7 +12,7 @@ include_once __DIR__.'/../../core.php';
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "number", "label": "<?php echo tr('Rincaro/sconto'); ?>", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "<?php echo tr('Il valore positivo indica uno sconto').'. '.tr('Per applicare una percentuale di rincaro inserire un valore negativo').'.'; ?>" ]}
|
||||
{[ "type": "number", "label": "<?php echo tr('Rincaro/sconto'); ?>", "name": "prc_guadagno", "required": 1, "value": "0", "icon-after": "%", "help": "<?php echo tr('Il valore positivo indica uno sconto: per applicare una percentuale di rincaro inserire un valore negativo'); ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -77,9 +77,6 @@ switch (post('op')) {
|
||||
'idrivalsainps' => $idrivalsainps,
|
||||
'idritenutaacconto' => $idritenutaacconto,
|
||||
|
||||
'sconto_globale' => $sconto,
|
||||
'tipo_sconto_globale' => $tipo_sconto,
|
||||
|
||||
'bollo' => 0,
|
||||
'rivalsainps' => 0,
|
||||
'ritenutaacconto' => 0,
|
||||
@ -91,14 +88,6 @@ switch (post('op')) {
|
||||
], ['id' => $id_record]);
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'or_ordini',
|
||||
'row' => 'or_righe_ordini',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idordine',
|
||||
], $id_record);
|
||||
|
||||
$query = 'SELECT descrizione FROM or_statiordine WHERE id='.prepare($idstatoordine);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
@ -140,7 +129,9 @@ switch (post('op')) {
|
||||
|
||||
flash()->info(tr('Articolo aggiunto!'));
|
||||
}
|
||||
|
||||
ricalcola_costiagg_ordine($id_record);
|
||||
|
||||
break;
|
||||
|
||||
case 'addriga':
|
||||
@ -181,11 +172,7 @@ switch (post('op')) {
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
if ($dir == 'entrata') {
|
||||
ricalcola_costiagg_ordine($id_record);
|
||||
} else {
|
||||
ricalcola_costiagg_ordine($id_record);
|
||||
}
|
||||
ricalcola_costiagg_ordine($id_record);
|
||||
|
||||
break;
|
||||
|
||||
@ -234,6 +221,34 @@ switch (post('op')) {
|
||||
}
|
||||
break;
|
||||
|
||||
case 'manage_sconto':
|
||||
if (post('idriga') != null) {
|
||||
$sconto = Riga::find(post('idriga'));
|
||||
} else {
|
||||
$sconto = Riga::build($ordine);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
$sconto->sconto_unitario = post('sconto_unitario');
|
||||
$sconto->tipo_sconto = 'UNT';
|
||||
|
||||
$sconto->save();
|
||||
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Sconto/maggiorazione modificato!'));
|
||||
} else {
|
||||
flash()->info(tr('Sconto/maggiorazione aggiunta!'));
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
ricalcola_costiagg_ordine($id_record);
|
||||
|
||||
break;
|
||||
|
||||
// Modifica riga
|
||||
case 'editriga':
|
||||
if (post('idriga') !== null) {
|
||||
@ -289,11 +304,7 @@ switch (post('op')) {
|
||||
flash()->info(tr('Riga modificata!'));
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
if ($dir == 'entrata') {
|
||||
ricalcola_costiagg_ordine($id_record);
|
||||
} else {
|
||||
ricalcola_costiagg_ordine($id_record);
|
||||
}
|
||||
ricalcola_costiagg_ordine($id_record);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -367,7 +378,7 @@ switch (post('op')) {
|
||||
$qta = post('qta_da_evadere')[$riga->id];
|
||||
|
||||
$copia = $riga->copiaIn($ordine, $qta);
|
||||
|
||||
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
if ($copia->isArticolo()) {
|
||||
$copia->movimenta($copia->qta);
|
||||
@ -381,15 +392,6 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconto
|
||||
if (post('evadere')[$preventivo->scontoGlobale->id] == 'on') {
|
||||
$ordine->tipo_sconto_globale = $preventivo->tipo_sconto_globale;
|
||||
$ordine->sconto_globale = $preventivo->tipo_sconto_globale == 'PRC' ? $preventivo->sconto_globale : $preventivo->sconto_globale;
|
||||
$ordine->save();
|
||||
|
||||
$ordine->updateSconto();
|
||||
}
|
||||
|
||||
ricalcola_costiagg_ordine($id_record);
|
||||
|
||||
flash()->info(tr('Preventivo _NUM_ aggiunto!', [
|
||||
@ -398,13 +400,3 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'or_ordini',
|
||||
'row' => 'or_righe_ordini',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idordine',
|
||||
], $id_record);
|
||||
}
|
||||
|
@ -85,12 +85,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Note'); ?>", "name": "note", "value": "$note$", "readonly": "<?php echo $record['flag_completato']; ?>" ]}
|
||||
@ -142,19 +136,31 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="pull-left">
|
||||
<?php
|
||||
<?php
|
||||
|
||||
if ($record['flag_completato'] == 0) {
|
||||
?>
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ordini/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo"><i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?></a>
|
||||
if ($record['flag_completato'] == 0) {
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ordini/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_riga" data-toggle="modal" data-title="Aggiungi riga"><i class="fa fa-plus"></i> <?php echo tr('Riga'); ?></a>
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
</a>';
|
||||
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ordini/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_descrizione" data-toggle="modal" data-title="Aggiungi descrizione"><i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?></a>
|
||||
<?php
|
||||
}
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Descrizione').'
|
||||
</a>';
|
||||
|
||||
?>
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
|
||||
</a>';
|
||||
}
|
||||
|
||||
?>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<br>
|
||||
|
@ -1,23 +1,19 @@
|
||||
<?php
|
||||
|
||||
use Modules\Ordini\Ordine;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info contratto
|
||||
$rs = $dbo->fetchArray('SELECT * FROM or_ordini WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
|
||||
if ($module['name'] == 'Ordini cliente') {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
$documento = Ordine::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'addriga',
|
||||
'action' => 'add',
|
||||
'dir' => $dir,
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati di default
|
||||
@ -32,11 +28,11 @@ $result = [
|
||||
];
|
||||
|
||||
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
|
||||
$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
|
||||
$iva = $dbo->fetchArray('SELECT idiva_'.($dir == 'uscita' ? 'acquisti' : 'vendite').' AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
|
||||
|
||||
// Aggiunta sconto di default da listino per le vendite
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_'.($dir == 'uscita' ? 'acquisti' : 'vendite').'=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
|
||||
if ($listino[0]['prc_guadagno'] > 0) {
|
||||
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
|
||||
@ -51,6 +47,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'articolo';
|
||||
|
||||
$options['op'] = 'addarticolo';
|
||||
} elseif (get('is_sconto') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -1,38 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Modules\Ordini\Ordine;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info contratto
|
||||
$rs = $dbo->fetchArray('SELECT * FROM or_ordini WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
|
||||
if ($module['name'] == 'Ordini cliente') {
|
||||
$dir = 'entrata';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
}
|
||||
$documento = Ordine::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'editriga',
|
||||
'action' => 'edit',
|
||||
'dir' => $dir,
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'edit_articolo' => false,
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati della riga
|
||||
$rsr = $dbo->fetchArray('SELECT * FROM or_righe_ordini WHERE idordine='.prepare($id_record).' AND id='.prepare(get('idriga')));
|
||||
$id_riga = get('idriga');
|
||||
$riga = $documento->getRighe()->find($id_riga);
|
||||
|
||||
$result = $rsr[0];
|
||||
$result['prezzo'] = $rsr[0]['subtotale'] / $rsr[0]['qta'];
|
||||
$result = $riga->toArray();
|
||||
$result['prezzo'] = $riga->prezzo_unitario_vendita;
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
$file = 'riga';
|
||||
if (!empty($result['is_descrizione'])) {
|
||||
if ($riga->isDescrizione()) {
|
||||
$file = 'descrizione';
|
||||
} elseif (!empty($result['idarticolo'])) {
|
||||
} elseif ($riga->isArticolo()) {
|
||||
$file = 'articolo';
|
||||
} elseif ($riga->isSconto()) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -80,13 +80,9 @@ if (!empty($rs)) {
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
if (empty($r['is_descrizione'])) {
|
||||
if (empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
<big>'.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').'</big>
|
||||
<br><small>('.tr('Q.tà iniziale').': '.Translator::numberToLocale($r['qta'], 'qta').')</small>';
|
||||
} else {
|
||||
echo '1';
|
||||
}
|
||||
echo '
|
||||
<big>'.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').'</big>
|
||||
<br><small>('.tr('Q.tà iniziale').': '.Translator::numberToLocale($r['qta'], 'qta').')</small>';
|
||||
}
|
||||
echo '
|
||||
</td>';
|
||||
@ -144,7 +140,7 @@ if (!empty($rs)) {
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
|
||||
if ($record['flag_completato'] == 0 && empty($r['sconto_globale'])) {
|
||||
if ($record['flag_completato'] == 0) {
|
||||
echo "
|
||||
<form action='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
|
||||
<input type='hidden' name='backto' value='record-edit'>
|
||||
@ -175,13 +171,6 @@ if (!empty($rs)) {
|
||||
</form>";
|
||||
}
|
||||
|
||||
if (empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
<div class="handle clickable" style="padding:10px">
|
||||
<i class="fa fa-sort"></i>
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</td>
|
||||
|
||||
|
@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Ordini\Components;
|
||||
|
||||
use Common\Components\Discount;
|
||||
use Modules\Ordini\Ordine;
|
||||
|
||||
class Sconto extends Discount
|
||||
{
|
||||
use RelationTrait;
|
||||
|
||||
protected $table = 'or_righe_ordini';
|
||||
|
||||
/**
|
||||
* Crea una nuovo sconto globale collegato alla ordine, oppure restituisce quello esistente.
|
||||
*
|
||||
* @param Ordine $ordine
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function build(Ordine $ordine)
|
||||
{
|
||||
$model = $ordine->scontoGlobale;
|
||||
|
||||
if ($model == null) {
|
||||
$model = parent::build();
|
||||
|
||||
$model->setOrdine($ordine);
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
@ -77,19 +77,12 @@ class Ordine extends Document
|
||||
*/
|
||||
public function getModuleAttribute()
|
||||
{
|
||||
return $this->tipo->dir == 'entrata' ? 'Ordini cliente' : 'Ordini fornitore';
|
||||
return $this->direzione == 'entrata' ? 'Ordini cliente' : 'Ordini fornitore';
|
||||
}
|
||||
|
||||
public function updateSconto()
|
||||
public function getDirezioneAttribute()
|
||||
{
|
||||
// Aggiornamento sconto
|
||||
aggiorna_sconto([
|
||||
'parent' => 'or_ordini',
|
||||
'row' => 'or_righe_ordini',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idordine',
|
||||
], $this->id);
|
||||
return $this->tipo->dir;
|
||||
}
|
||||
|
||||
public function anagrafica()
|
||||
@ -122,11 +115,6 @@ class Ordine extends Document
|
||||
return $this->hasMany(Components\Descrizione::class, 'idordine');
|
||||
}
|
||||
|
||||
public function scontoGlobale()
|
||||
{
|
||||
return $this->hasOne(Components\Sconto::class, 'idordine');
|
||||
}
|
||||
|
||||
// Metodi statici
|
||||
|
||||
/**
|
||||
|
@ -80,8 +80,6 @@ switch (post('op')) {
|
||||
' data_conclusione='.prepare($data_conclusione).','.
|
||||
' esclusioni='.prepare($esclusioni).','.
|
||||
' descrizione='.prepare($descrizione).','.
|
||||
' tipo_sconto_globale='.prepare($tipo_sconto).','.
|
||||
' sconto_globale='.prepare($sconto).','.
|
||||
' id_documento_fe='.prepare($id_documento_fe).','.
|
||||
' num_item='.prepare($num_item).','.
|
||||
' codice_cig='.prepare($codice_cig).','.
|
||||
@ -91,14 +89,6 @@ switch (post('op')) {
|
||||
' idiva='.prepare($idiva).' WHERE id='.prepare($id_record);
|
||||
$dbo->query($query);
|
||||
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_preventivi',
|
||||
'row' => 'co_righe_preventivi',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idpreventivo',
|
||||
], $id_record);
|
||||
|
||||
// update_budget_preventivo( $id_record );
|
||||
flash()->info(tr('Preventivo modificato correttamente!'));
|
||||
}
|
||||
@ -240,6 +230,31 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_sconto':
|
||||
if (post('idriga') != null) {
|
||||
$sconto = Riga::find(post('idriga'));
|
||||
} else {
|
||||
$sconto = Riga::build($preventivo);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
$sconto->sconto_unitario = post('sconto_unitario');
|
||||
$sconto->tipo_sconto = 'UNT';
|
||||
|
||||
$sconto->save();
|
||||
|
||||
if (post('idriga') != null) {
|
||||
flash()->info(tr('Sconto/maggiorazione modificato!'));
|
||||
} else {
|
||||
flash()->info(tr('Sconto/maggiorazione aggiunta!'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'editriga':
|
||||
$idriga = post('idriga');
|
||||
$descrizione = post('descrizione');
|
||||
@ -327,8 +342,6 @@ switch (post('op')) {
|
||||
'ore_lavoro' => $rs_preventivo[0]['ore_lavoro'],
|
||||
'costo_orario' => $rs_preventivo[0]['costo_orario'],
|
||||
'costo_km' => $rs_preventivo[0]['costo_km'],
|
||||
'sconto_globale' => $rs_preventivo[0]['sconto_globale'],
|
||||
'tipo_sconto_globale' => $rs_preventivo[0]['tipo_sconto_globale'],
|
||||
'master_revision' => $rs_preventivo[0]['master_revision'],
|
||||
'default_revision' => '1',
|
||||
];
|
||||
@ -365,13 +378,3 @@ switch (post('op')) {
|
||||
flash()->info(tr('Aggiunta nuova revisione!'));
|
||||
break;
|
||||
}
|
||||
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_preventivi',
|
||||
'row' => 'co_righe_preventivi',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idpreventivo',
|
||||
], $id_record);
|
||||
}
|
||||
|
@ -93,12 +93,6 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||
</div-->
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "textarea", "label": "<?php echo tr('Esclusioni'); ?>", "name": "esclusioni", "class": "autosize", "value": "$esclusioni$" ]}
|
||||
@ -156,17 +150,31 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<?php if ($record['stato'] != 'Pagato') {
|
||||
?>
|
||||
<?php
|
||||
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/preventivi/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo"><i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?></a>
|
||||
if ($record['stato'] != 'Pagato') {
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_articolo" data-toggle="tooltip" data-title="'.tr('Aggiungi articolo').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Articolo').'
|
||||
</a>';
|
||||
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/preventivi/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_riga" data-toggle="modal" data-title="Aggiungi riga"><i class="fa fa-plus"></i> <?php echo tr('Riga'); ?></a>
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_riga" data-toggle="tooltip" data-title="'.tr('Aggiungi riga').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Riga').'
|
||||
</a>';
|
||||
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/preventivi/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_descrizione" data-toggle="modal" data-title="Aggiungi descrizione"><i class="fa fa-plus"></i> <?php echo tr('Descrizione'); ?></a>
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_descrizione" data-toggle="tooltip" data-title="'.tr('Aggiungi descrizione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Descrizione').'
|
||||
</a>';
|
||||
|
||||
<?php
|
||||
} ?>
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary" data-href="'.$structure->fileurl('row-add.php').'?id_module='.$id_module.'&id_record='.$id_record.'&is_sconto" data-toggle="tooltip" data-title="'.tr('Aggiungi sconto/maggiorazione').'">
|
||||
<i class="fa fa-plus"></i> '.tr('Sconto/maggiorazione').'
|
||||
</a>';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<!--div class="pull-right">
|
||||
{( "name": "button", "type": "print", "id_module": "<?php echo $id_module; ?>", "id_record": "<?php echo $id_record; ?>" )}
|
||||
|
@ -1,17 +1,19 @@
|
||||
<?php
|
||||
|
||||
use Modules\Preventivi\Preventivo;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info contratto
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_preventivi WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$documento = Preventivo::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'addriga',
|
||||
'action' => 'add',
|
||||
'dir' => 'entrata',
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati di default
|
||||
@ -26,11 +28,11 @@ $result = [
|
||||
];
|
||||
|
||||
// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica
|
||||
$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica));
|
||||
$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita');
|
||||
|
||||
// Aggiunta sconto di default da listino per le vendite
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($idanagrafica));
|
||||
$listino = $dbo->fetchArray('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica']));
|
||||
|
||||
if ($listino[0]['prc_guadagno'] > 0) {
|
||||
$result['sconto_unitario'] = $listino[0]['prc_guadagno'];
|
||||
@ -43,6 +45,10 @@ if (get('is_descrizione') !== null) {
|
||||
$file = 'descrizione';
|
||||
} elseif (get('is_articolo') !== null) {
|
||||
$file = 'articolo';
|
||||
} elseif (get('is_sconto') !== null) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -1,31 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Modules\Preventivi\Preventivo;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Info contratto
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_preventivi WHERE id='.prepare($id_record));
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$documento = Preventivo::find($id_record);
|
||||
|
||||
// Impostazioni per la gestione
|
||||
$options = [
|
||||
'op' => 'editriga',
|
||||
'action' => 'edit',
|
||||
'dir' => 'entrata',
|
||||
'idanagrafica' => $idanagrafica,
|
||||
'dir' => $documento->direzione,
|
||||
'idanagrafica' => $documento['idanagrafica'],
|
||||
'totale' => $documento->totale,
|
||||
];
|
||||
|
||||
// Dati della riga
|
||||
$rsr = $dbo->fetchArray('SELECT * FROM co_righe_preventivi WHERE idpreventivo='.prepare($id_record).' AND id='.prepare(get('idriga')));
|
||||
$id_riga = get('idriga');
|
||||
$riga = $documento->getRighe()->find($id_riga);
|
||||
|
||||
$result = $rsr[0];
|
||||
$result['prezzo'] = $rsr[0]['subtotale'] / $rsr[0]['qta'];
|
||||
$result = $riga->toArray();
|
||||
$result['prezzo'] = $riga->prezzo_unitario_vendita;
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
|
||||
// Importazione della gestione dedicata
|
||||
$file = 'riga';
|
||||
if (!empty($result['is_descrizione'])) {
|
||||
if ($riga->isDescrizione()) {
|
||||
$file = 'descrizione';
|
||||
} elseif (!empty($result['idarticolo'])) {
|
||||
} elseif ($riga->isArticolo()) {
|
||||
$file = 'articolo';
|
||||
} elseif ($riga->isSconto()) {
|
||||
$file = 'sconto';
|
||||
|
||||
$options['op'] = 'manage_sconto';
|
||||
}
|
||||
|
||||
echo App::load($file.'.php', $result, $options);
|
||||
|
@ -101,7 +101,7 @@ foreach ($rs as $r) {
|
||||
echo '
|
||||
<td class="text-center">';
|
||||
|
||||
if ($record['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
|
||||
if ($record['stato'] != 'Pagato') {
|
||||
echo "
|
||||
<form action='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
|
||||
<input type='hidden' name='backto' value='record-edit'>
|
||||
@ -117,12 +117,6 @@ foreach ($rs as $r) {
|
||||
</form>";
|
||||
}
|
||||
|
||||
if (empty($r['sconto_globale'])) {
|
||||
echo '
|
||||
<div class="handle clickable" style="padding:10px">
|
||||
<i class="fa fa-sort"></i>
|
||||
</div>';
|
||||
}
|
||||
echo '
|
||||
</td>
|
||||
</tr>';
|
||||
|
@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Preventivi\Components;
|
||||
|
||||
use Common\Components\Discount;
|
||||
use Modules\Preventivi\Preventivo;
|
||||
|
||||
class Sconto extends Discount
|
||||
{
|
||||
use RelationTrait;
|
||||
|
||||
protected $table = 'co_righe_preventivi';
|
||||
|
||||
/**
|
||||
* Crea una nuovo sconto globale collegato alla preventivo, oppure restituisce quello esistente.
|
||||
*
|
||||
* @param Preventivo $preventivo
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function build(Preventivo $preventivo)
|
||||
{
|
||||
$model = $preventivo->scontoGlobale;
|
||||
|
||||
if ($model == null) {
|
||||
$model = parent::build();
|
||||
|
||||
$model->setPreventivo($preventivo);
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
@ -86,16 +86,9 @@ class Preventivo extends Document
|
||||
return 'Preventivi';
|
||||
}
|
||||
|
||||
public function updateSconto()
|
||||
public function getDirezioneAttribute()
|
||||
{
|
||||
// Aggiornamento sconto
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_preventivi',
|
||||
'row' => 'co_righe_preventivi',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idpreventivo',
|
||||
], $this->id);
|
||||
return 'entrata';
|
||||
}
|
||||
|
||||
public function anagrafica()
|
||||
@ -128,11 +121,6 @@ class Preventivo extends Document
|
||||
return $this->hasMany(Components\Descrizione::class, 'idpreventivo');
|
||||
}
|
||||
|
||||
public function scontoGlobale()
|
||||
{
|
||||
return $this->hasOne(Components\Sconto::class, 'idpreventivo');
|
||||
}
|
||||
|
||||
public function interventi()
|
||||
{
|
||||
return $this->hasMany(Intervento::class, 'id_preventivo');
|
||||
|
53
modules/stati_contratto/actions.php
Normal file
53
modules/stati_contratto/actions.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
switch (post('op')) {
|
||||
case 'update':
|
||||
$dbo->update('co_staticontratti', [
|
||||
'descrizione' => (count($dbo->fetchArray('SELECT descrizione FROM co_staticontratti WHERE descrizione = '.prepare(post('descrizione')))) > 0) ? $dbo->fetchOne('SELECT descrizione FROM co_staticontratti WHERE id ='.$id_record)['descrizione'] : post('descrizione'),
|
||||
'icona' => post('icona'),
|
||||
'is_completato' => post('is_completato') ?: null,
|
||||
'is_fatturabile' => post('is_fatturabile') ?: null,
|
||||
'is_pianificabile' => post('is_pianificabile') ?: null,
|
||||
], ['id' => $id_record]);
|
||||
|
||||
flash()->info(tr('Informazioni salvate correttamente.'));
|
||||
|
||||
break;
|
||||
|
||||
case 'add':
|
||||
|
||||
$descrizione = post('descrizione');
|
||||
$icona = post('icona');
|
||||
$is_completato = post('is_completato') ?: null;
|
||||
$is_fatturabile = post('is_fatturabile') ?: null;
|
||||
$is_pianificabile = post('is_pianificabile') ?: null;
|
||||
|
||||
//controlla descrizione che non sia duplicata
|
||||
if (count($dbo->fetchArray('SELECT descrizione FROM co_staticontratti WHERE descrizione='.prepare($descrizione))) > 0) {
|
||||
flash()->error(tr('Stato di contratto già esistente.'));
|
||||
} else {
|
||||
$query = 'INSERT INTO co_staticontratti(descrizione, icona, is_completato, is_fatturabile, is_pianificabile) VALUES ('.prepare($descrizione).', '.prepare($icona).', '.prepare($is_completato).', '.prepare($is_fatturabile).', '.prepare($is_pianificabile).' )';
|
||||
$dbo->query($query);
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
flash()->info(tr('Nuovo stato contratto aggiunto.'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
|
||||
//scelgo se settare come eliminato o cancellare direttamente la riga se non è stato utilizzato nei contratti
|
||||
if (count($dbo->fetchArray('SELECT id FROM co_contratti WHERE idstato='.prepare($id_record))) > 0) {
|
||||
$query = 'UPDATE co_staticontratti SET deleted_at = NOW() WHERE id='.prepare($id_record);
|
||||
} else {
|
||||
$query = 'DELETE FROM co_staticontratti WHERE id='.prepare($id_record);
|
||||
}
|
||||
|
||||
$dbo->query($query);
|
||||
|
||||
flash()->info(tr('Stato contratto eliminato.'));
|
||||
|
||||
break;
|
||||
}
|
38
modules/stati_contratto/add.php
Normal file
38
modules/stati_contratto/add.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
?><form action="" method="post" id="add-form">
|
||||
<input type="hidden" name="op" value="add">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Completato'); ?>", "name": "is_completato", "value": "$is_completato$", "help": "<?php echo tr('I contratti che si trovano in questo stato verranno considerati come completati'); ?>", "placeholder": "<?php echo tr('Completato'); ?>", "extra": "" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Pianificabile'); ?>", "name": "is_pianificabile", "value": "$is_pianificabile$", "help": "<?php echo tr('I contratti che si trovano in questo stato verranno considerati come pianificabili'); ?>", "placeholder": "<?php echo tr('Pianificabile'); ?>", "extra": "" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Fatturabile'); ?>", "name": "is_fatturabile", "value": "$is_fatturabile$", "help": "<?php echo tr('I contratti che si trovano in questo stato verranno considerati come fatturabili'); ?>", "placeholder": "<?php echo tr('Fatturabile'); ?>", "extra": "" ]}
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Icona'); ?>", "name": "icona", "required": 1, "class": "text-center", "value": "fa ", "extra": "" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi'); ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
22
modules/stati_contratto/api/retrieve.php
Normal file
22
modules/stati_contratto/api/retrieve.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
switch ($resource) {
|
||||
// Elenco stati contratti
|
||||
case 'stati_contratto':
|
||||
$table = 'co_staticontratti';
|
||||
|
||||
$select = [
|
||||
'*',
|
||||
'id' => 'id',
|
||||
];
|
||||
|
||||
if (empty($where['deleted_at'])) {
|
||||
$where['deleted_at'] = null;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return [
|
||||
'stati_contratto',
|
||||
];
|
69
modules/stati_contratto/edit.php
Normal file
69
modules/stati_contratto/edit.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$contratti = count($dbo->fetchArray('SELECT id FROM co_contratti WHERE idstato='.prepare($id_record)));
|
||||
|
||||
if ($contratti == 0) {
|
||||
|
||||
$attr = '';
|
||||
|
||||
} else {
|
||||
|
||||
$attr = 'readonly';
|
||||
echo '<div class="alert alert-warning">'.tr('Alcune impostazioni non possono essere modificate per questo stato perché già utilizzato in alcuni contratti.').'</div>';
|
||||
|
||||
}
|
||||
?>
|
||||
<form action="" method="post" id="edit-form">
|
||||
<input type="hidden" name="op" value="update">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="id_record" value="<?php echo $id_record; ?>">
|
||||
|
||||
<div class="row">
|
||||
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Questo è uno stato completato'); ?>", "name": "is_completato", "value": "$is_completato$", "help": "<?php echo tr('I contratti che si trovano in questo stato verranno considerati come completati'); ?>", "placeholder": "<?php echo tr('Completato'); ?>", "extra": "<?php echo $attr; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Questo è uno stato pianificabile'); ?>", "name": "is_pianificabile", "value": "$is_pianificabile$", "help": "<?php echo tr('I contratti che si trovano in questo stato verranno considerati come pianificabili'); ?>", "placeholder": "<?php echo tr('Pianificabile'); ?>", "extra": "<?php echo $attr; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Questo è uno stato fatturabile'); ?>", "name": "is_fatturabile", "value": "$is_fatturabile$", "help": "<?php echo tr('I contratti che si trovano in questo stato verranno considerati come fatturabili'); ?>", "placeholder": "<?php echo tr('Fatturabile'); ?>", "extra": "<?php echo $attr; ?>" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Icona'); ?>", "name": "icona", "required": 1, "class": "text-center", "value": "$icona$", "extra": "", "icon-after": "<?php echo (!empty($record['icona'])) ? '<i class=\"'.$record['icona'].'\"></i>' : ''; ?>" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
|
||||
if (!empty($contratti)) {
|
||||
echo '
|
||||
<div class="alert alert-danger">
|
||||
'.tr('Ci sono _NUM_ contratti collegati', [
|
||||
'_NUM_' => $contratti,
|
||||
]).'.
|
||||
</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||
</a>
|
7
modules/stati_contratto/init.php
Normal file
7
modules/stati_contratto/init.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
if (isset($id_record)) {
|
||||
$record = $dbo->fetchOne('SELECT * FROM co_staticontratti WHERE id='.prepare($id_record));
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
switch ($resource) {
|
||||
// Elenco sedi per l'applicazione
|
||||
// Elenco stati intervento per l'applicazione
|
||||
case 'stati_intervento':
|
||||
$table = 'in_statiintervento';
|
||||
|
||||
|
@ -33,7 +33,7 @@ if ($record['can_delete']) {
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Abilita notifiche'); ?>", "name": "notifica", "value": "$notifica$" ]}
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Abilita notifiche'); ?>", "name": "notifica", "help": "<?php echo tr('Quando l\'intervento passa in questo stato viene inoltrata una notifica ai destinatari designati'); ?>.", "value": "$notifica$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
|
53
modules/stati_preventivo/actions.php
Normal file
53
modules/stati_preventivo/actions.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
switch (post('op')) {
|
||||
case 'update':
|
||||
$dbo->update('co_statipreventivi', [
|
||||
'descrizione' => (count($dbo->fetchArray('SELECT descrizione FROM co_statipreventivi WHERE descrizione = '.prepare(post('descrizione')))) > 0) ? $dbo->fetchOne('SELECT descrizione FROM co_statipreventivi WHERE id ='.$id_record)['descrizione'] : post('descrizione'),
|
||||
'icona' => post('icona'),
|
||||
'is_completato' => post('is_completato') ?: null,
|
||||
'is_fatturabile' => post('is_fatturabile') ?: null,
|
||||
'is_pianificabile' => post('is_pianificabile') ?: null,
|
||||
], ['id' => $id_record]);
|
||||
|
||||
flash()->info(tr('Informazioni salvate correttamente.'));
|
||||
|
||||
break;
|
||||
|
||||
case 'add':
|
||||
|
||||
$descrizione = post('descrizione');
|
||||
$icona = post('icona');
|
||||
$is_completato = post('is_completato') ?: null;
|
||||
$is_fatturabile = post('is_fatturabile') ?: null;
|
||||
$is_pianificabile = post('is_pianificabile') ?: null;
|
||||
|
||||
//controlla descrizione che non sia duplicata
|
||||
if (count($dbo->fetchArray('SELECT descrizione FROM co_statipreventivi WHERE descrizione='.prepare($descrizione))) > 0) {
|
||||
flash()->error(tr('Stato di preventivo già esistente.'));
|
||||
} else {
|
||||
$query = 'INSERT INTO co_statipreventivi(descrizione, icona, is_completato, is_fatturabile, is_pianificabile) VALUES ('.prepare($descrizione).', '.prepare($icona).', '.prepare($is_completato).', '.prepare($is_fatturabile).', '.prepare($is_pianificabile).' )';
|
||||
$dbo->query($query);
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
flash()->info(tr('Nuovo stato preventivo aggiunto.'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
|
||||
//scelgo se settare come eliminato o cancellare direttamente la riga se non è stato utilizzato nei preventivi
|
||||
if (count($dbo->fetchArray('SELECT id FROM co_preventivi WHERE idstato='.prepare($id_record))) > 0) {
|
||||
$query = 'UPDATE co_statipreventivi SET deleted_at = NOW() WHERE id='.prepare($id_record);
|
||||
} else {
|
||||
$query = 'DELETE FROM co_statipreventivi WHERE id='.prepare($id_record);
|
||||
}
|
||||
|
||||
$dbo->query($query);
|
||||
|
||||
flash()->info(tr('Stato preventivo eliminato.'));
|
||||
|
||||
break;
|
||||
}
|
38
modules/stati_preventivo/add.php
Normal file
38
modules/stati_preventivo/add.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
?><form action="" method="post" id="add-form">
|
||||
<input type="hidden" name="op" value="add">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Completato'); ?>", "name": "is_completato", "value": "$is_completato$", "help": "<?php echo tr('I preventivi che si trovano in questo stato verranno considerati come completati'); ?>", "placeholder": "<?php echo tr('Completato'); ?>", "extra": "" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Pianificabile'); ?>", "name": "is_pianificabile", "value": "$is_pianificabile$", "help": "<?php echo tr('I preventivi che si trovano in questo stato verranno considerati come pianificabili'); ?>", "placeholder": "<?php echo tr('Pianificabile'); ?>", "extra": "" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Fatturabile'); ?>", "name": "is_fatturabile", "value": "$is_fatturabile$", "help": "<?php echo tr('I preventivi che si trovano in questo stato verranno considerati come fatturabili'); ?>", "placeholder": "<?php echo tr('Fatturabile'); ?>", "extra": "" ]}
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Icona'); ?>", "name": "icona", "required": 1, "class": "text-center", "value": "fa ", "extra": "" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PULSANTI -->
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi'); ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
22
modules/stati_preventivo/api/retrieve.php
Normal file
22
modules/stati_preventivo/api/retrieve.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
switch ($resource) {
|
||||
// Elenco stati preventivi
|
||||
case 'stati_preventivo':
|
||||
$table = 'co_statipreventivi';
|
||||
|
||||
$select = [
|
||||
'*',
|
||||
'id' => 'id',
|
||||
];
|
||||
|
||||
if (empty($where['deleted_at'])) {
|
||||
$where['deleted_at'] = null;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return [
|
||||
'stati_preventivo',
|
||||
];
|
69
modules/stati_preventivo/edit.php
Normal file
69
modules/stati_preventivo/edit.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$preventivi = count($dbo->fetchArray('SELECT id FROM co_preventivi WHERE idstato='.prepare($id_record)));
|
||||
|
||||
if ($preventivi == 0) {
|
||||
|
||||
$attr = '';
|
||||
|
||||
} else {
|
||||
|
||||
$attr = 'readonly';
|
||||
echo '<div class="alert alert-warning">'.tr('Alcune impostazioni non possono essere modificate per questo stato perché già utilizzato in alcuni preventivi.').'</div>';
|
||||
|
||||
}
|
||||
?>
|
||||
<form action="" method="post" id="edit-form">
|
||||
<input type="hidden" name="op" value="update">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="id_record" value="<?php echo $id_record; ?>">
|
||||
|
||||
<div class="row">
|
||||
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Questo è uno stato completato'); ?>", "name": "is_completato", "value": "$is_completato$", "help": "<?php echo tr('I preventivi che si trovano in questo stato verranno considerati come completati'); ?>", "placeholder": "<?php echo tr('Completato'); ?>", "extra": "<?php echo $attr; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Questo è uno stato pianificabile'); ?>", "name": "is_pianificabile", "value": "$is_pianificabile$", "help": "<?php echo tr('I preventivi che si trovano in questo stato verranno considerati come pianificabili'); ?>", "placeholder": "<?php echo tr('Pianificabile'); ?>", "extra": "<?php echo $attr; ?>" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "checkbox", "label": "<?php echo tr('Questo è uno stato fatturabile'); ?>", "name": "is_fatturabile", "value": "$is_fatturabile$", "help": "<?php echo tr('I preventivi che si trovano in questo stato verranno considerati come fatturabili'); ?>", "placeholder": "<?php echo tr('Fatturabile'); ?>", "extra": "<?php echo $attr; ?>" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-6">
|
||||
{[ "type": "text", "label": "<?php echo tr('Icona'); ?>", "name": "icona", "required": 1, "class": "text-center", "value": "$icona$", "extra": "", "icon-after": "<?php echo (!empty($record['icona'])) ? '<i class=\"'.$record['icona'].'\"></i>' : ''; ?>" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
|
||||
if (!empty($preventivi)) {
|
||||
echo '
|
||||
<div class="alert alert-danger">
|
||||
'.tr('Ci sono _NUM_ preventivi collegati', [
|
||||
'_NUM_' => $preventivi,
|
||||
]).'.
|
||||
</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||
</a>
|
7
modules/stati_preventivo/init.php
Normal file
7
modules/stati_preventivo/init.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
if (isset($id_record)) {
|
||||
$record = $dbo->fetchOne('SELECT * FROM co_statipreventivi WHERE id='.prepare($id_record));
|
||||
}
|
@ -17,7 +17,7 @@ include_once __DIR__.'/../../core.php';
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
{[ "type": "number", "label": "<?php echo tr('Tempo standard'); ?>", "name": "tempo_standard", "help": "<?php echo tr('Valore compreso tra 0,25 - 24 ore. <br><small>Esempi: <em><ul><li>60 minuti = 1 ora</li><li>30 minuti = 0,5 ore</li><li>15 minuti = 0,25 ore</li></ul></em></small>'); ?>", "maxlength": 5, "min-value": "0", "max-value": "24", "class": "text-center", "value": "$tempo_standard$", "icon-after": "ore" ]}
|
||||
{[ "type": "number", "label": "<?php echo tr('Tempo standard'); ?>", "name": "tempo_standard", "help": "<?php echo tr('Valore compreso tra 0,25 - 24 ore. <br><small>Esempi: <em><ul><li>60 minuti = 1 ora</li><li>30 minuti = 0,5 ore</li><li>15 minuti = 0,25 ore</li></ul></em></small> Suggerisce il tempo solitamente impiegato per questa tipologia di attivita'); ?>.", "maxlength": 5, "min-value": "0", "max-value": "24", "class": "text-center", "value": "$tempo_standard$", "icon-after": "ore" ]}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -291,7 +291,7 @@ class FatturaElettronica
|
||||
$anagrafica = static::getAzienda();
|
||||
}
|
||||
|
||||
$prefix = 'IT'.(!empty($anagrafica['codice_fiscale'] and ($anagrafica['codice_fiscale']!=$anagrafica['piva'])) ? $anagrafica['codice_fiscale'] : str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']));
|
||||
$prefix = 'IT'.(!empty($anagrafica['codice_fiscale'] and ($anagrafica['codice_fiscale'] != $anagrafica['piva'])) ? $anagrafica['codice_fiscale'] : str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']));
|
||||
|
||||
if (empty($this->documento['progressivo_invio']) || !empty($new)) {
|
||||
$database = database();
|
||||
@ -386,7 +386,7 @@ class FatturaElettronica
|
||||
$result = [
|
||||
'IdTrasmittente' => [
|
||||
'IdPaese' => $anagrafica->nazione->iso2,
|
||||
'IdCodice' => (!empty($anagrafica['codice_fiscale']) and ($anagrafica['codice_fiscale']!=$anagrafica['piva'])) ? $anagrafica['codice_fiscale'] : str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']),
|
||||
'IdCodice' => (!empty($anagrafica['codice_fiscale']) and ($anagrafica['codice_fiscale'] != $anagrafica['piva'])) ? $anagrafica['codice_fiscale'] : str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']),
|
||||
],
|
||||
];
|
||||
|
||||
@ -644,7 +644,7 @@ class FatturaElettronica
|
||||
$percentuale = database()->fetchOne('SELECT percentuale FROM co_ritenutaacconto WHERE id = '.prepare($id_ritenuta))['percentuale'];
|
||||
|
||||
$result['DatiRitenuta'] = [
|
||||
'TipoRitenuta' => (!empty($azienda['codice_fiscale']) and ($azienda['codice_fiscale']!=$azienda['piva'])) ? 'RT01' : 'RT02',
|
||||
'TipoRitenuta' => (!empty($azienda['codice_fiscale']) and ($azienda['codice_fiscale'] != $azienda['piva'])) ? 'RT01' : 'RT02',
|
||||
'ImportoRitenuta' => $totale_ritenutaacconto,
|
||||
'AliquotaRitenuta' => $percentuale,
|
||||
'CausalePagamento' => setting("Causale ritenuta d'acconto"),
|
||||
@ -688,6 +688,8 @@ class FatturaElettronica
|
||||
}
|
||||
|
||||
// Sconto globale (2.1.1.8)
|
||||
// Disabilitazione per aggiornamento sconti
|
||||
/*
|
||||
$documento['sconto_globale'] = floatval($documento['sconto_globale']);
|
||||
if (!empty($documento['sconto_globale'])) {
|
||||
$sconto = [
|
||||
@ -702,6 +704,7 @@ class FatturaElettronica
|
||||
|
||||
$result['ScontoMaggiorazione'] = $sconto;
|
||||
}
|
||||
*/
|
||||
|
||||
// Importo Totale Documento (2.1.1.9)
|
||||
// Valorizzare l’importo complessivo lordo della fattura (onnicomprensivo di Iva, bollo, contributi previdenziali, ecc…)
|
||||
@ -1005,8 +1008,9 @@ class FatturaElettronica
|
||||
$dettaglio['AliquotaIVA'] = $percentuale;
|
||||
|
||||
if (!empty($riga['idritenutaacconto']) && empty($riga['is_descrizione'])) {
|
||||
if ($riga['calcolo_ritenuta_acconto'] == 'IMP+RIV')
|
||||
$dettaglio['Ritenuta'] = 'SI';
|
||||
if ($riga['calcolo_ritenuta_acconto'] == 'IMP+RIV') {
|
||||
$dettaglio['Ritenuta'] = 'SI';
|
||||
}
|
||||
}
|
||||
|
||||
// Controllo aggiuntivo codice_natura_fe per evitare che venga riportato il tag vuoto
|
||||
|
@ -52,7 +52,6 @@ switch (filter('op')) {
|
||||
|
||||
$id_record = $fattura_pa->saveFattura(post('pagamento'), post('id_segment'), post('id_tipo'));
|
||||
$fattura_pa->saveRighe(post('articoli'), post('iva'), post('conto'), post('movimentazione'));
|
||||
$fattura_pa->getFattura()->updateSconto();
|
||||
|
||||
$fattura_pa->saveAllegati();
|
||||
|
||||
|
@ -163,11 +163,10 @@ class FatturaElettronica
|
||||
$sede->indirizzo = $info['Indirizzo'];
|
||||
$sede->cap = $info['CAP'];
|
||||
$sede->citta = $info['Comune'];
|
||||
$sede->indirizzo = $info['Indirizzo'];
|
||||
$sede->nazione()->associate(Nazione::where('iso2', $info['Nazione'])->first());
|
||||
if (!empty($info['Provincia'])) {
|
||||
$sede->provincia = $info['Provincia'];
|
||||
}
|
||||
$sede->nazione()->associate(Nazione::where('iso2', $info['Nazione'])->first());
|
||||
|
||||
$contatti = $xml['Contatti'];
|
||||
if (!empty($contatti)) {
|
||||
@ -283,12 +282,16 @@ class FatturaElettronica
|
||||
|
||||
$diff = $totale_documento ? $totale_documento - $fattura->totale : $totale_righe - $fattura->imponibile_scontato;
|
||||
if (!empty($diff)) {
|
||||
// Rimozione dell?IVA calcolata automaticamente dal gestionale
|
||||
$iva_arrotondamento = database()->fetchOne('SELECT * FROM co_iva WHERE id='.prepare($iva[0]));
|
||||
$diff = $diff * 100 / (100 + $iva_arrotondamento['percentuale']);
|
||||
|
||||
$obj = Riga::build($fattura);
|
||||
|
||||
$obj->descrizione = tr('Arrotondamento calcolato in automatico');
|
||||
$obj->id_iva = $iva[0];
|
||||
$obj->idconto = $conto[0];
|
||||
$obj->prezzo_unitario_vendita = $diff;
|
||||
$obj->prezzo_unitario_vendita = round($diff, 4);
|
||||
$obj->qta = 1;
|
||||
|
||||
$obj->save();
|
||||
@ -376,6 +379,8 @@ class FatturaElettronica
|
||||
$stato_documento = StatoFattura::where('descrizione', 'Emessa')->first();
|
||||
$fattura->stato()->associate($stato_documento);
|
||||
|
||||
// Nodo ScontoMaggiorazione generale per il documento ignorato (issue #542)
|
||||
/*
|
||||
// Sconto globale
|
||||
$sconto = $dati_generali['ScontoMaggiorazione'];
|
||||
if (!empty($sconto)) {
|
||||
@ -386,7 +391,7 @@ class FatturaElettronica
|
||||
|
||||
$fattura->sconto_globale = $unitario;
|
||||
$fattura->tipo_sconto_globale = $tipo;
|
||||
}
|
||||
}*/
|
||||
|
||||
// Ritenuta d'Acconto
|
||||
$ritenuta = $dati_generali['DatiRitenuta'];
|
||||
|
@ -8,6 +8,7 @@ use Plugins;
|
||||
use UnexpectedValueException;
|
||||
use Uploads;
|
||||
use Util\XML;
|
||||
use Util\Zip;
|
||||
|
||||
/**
|
||||
* Classe per la gestione della fatturazione elettronica in XML.
|
||||
@ -28,7 +29,23 @@ class Ricevuta
|
||||
|
||||
public function __construct($name)
|
||||
{
|
||||
$this->file = static::getImportDirectory().'/'.$name;
|
||||
$file = static::getImportDirectory().'/'.$name;
|
||||
|
||||
if (ends_with($name, '.zip')) {
|
||||
$original_file = $file;
|
||||
|
||||
$extraction_dir = static::getImportDirectory().'/tmp';
|
||||
Zip::extract($file, $extraction_dir);
|
||||
|
||||
$name = basename($name, '.zip').'.xml';
|
||||
$file = static::getImportDirectory().'/'.$name;
|
||||
copy($extraction_dir.'/'.$name, $file);
|
||||
|
||||
delete($original_file);
|
||||
delete($extraction_dir);
|
||||
}
|
||||
|
||||
$this->file = $file;
|
||||
$this->xml = XML::readFile($this->file);
|
||||
|
||||
$filename = explode('.', $name)[0];
|
||||
@ -91,19 +108,19 @@ class Ricevuta
|
||||
$fattura = $this->getFattura();
|
||||
|
||||
// Modifica lo stato solo se la fattura non è già stata consegnata (per evitare problemi da doppi invii)
|
||||
// In realtà per le PA potrebbe esserci lo stato NE (che può essere positiva o negativa) successivo alla RC
|
||||
//if ($fattura->codice_stato_fe == 'RC') {
|
||||
//return;
|
||||
// In realtà per le PA potrebbe esserci lo stato NE (che può essere positiva o negativa) successivo alla RC
|
||||
//if ($fattura->codice_stato_fe == 'RC') {
|
||||
//return;
|
||||
//}
|
||||
|
||||
// Processo la ricevuta e salvo data ricezione, codice e messaggio
|
||||
$descrizione = $this->xml['Destinatario']['Descrizione'];
|
||||
$data = $this->xml['DataOraRicezione'];
|
||||
|
||||
$fattura->data_stato_fe = date('Y-m-d H:i:s', strtotime($data));
|
||||
|
||||
$fattura->data_stato_fe = date('Y-m-d H:i:s', strtotime($data));
|
||||
$fattura->codice_stato_fe = $codice;
|
||||
$fattura->descrizione_ricevuta_fe = $descrizione;
|
||||
|
||||
$fattura->descrizione_ricevuta_fe = $descrizione;
|
||||
|
||||
$fattura->save();
|
||||
}
|
||||
|
||||
|
@ -26,10 +26,11 @@ class Zip
|
||||
* Estrae i contenuti di un file ZIP in una cartella temporanea.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $destination
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function extract($path)
|
||||
public static function extract($path, $destination = null)
|
||||
{
|
||||
// Lettura dell'archivio
|
||||
$zip = new ZipArchive();
|
||||
@ -40,7 +41,7 @@ class Zip
|
||||
}
|
||||
|
||||
// Percorso di estrazione
|
||||
$extraction_dir = DOCROOT.'/tmp';
|
||||
$extraction_dir = !empty($destination) ? $destination : DOCROOT.'/tmp';
|
||||
directory($extraction_dir);
|
||||
|
||||
// Estrazione dell'archivio
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
include_once DOCROOT.'/modules/fatture/modutil.php';
|
||||
include_once DOCROOT.'/modules/interventi/modutil.php';
|
||||
|
||||
// Fatture di vendita e acquisto
|
||||
$results = $dbo->fetchArray("SELECT co_documenti.id, co_statidocumento.descrizione AS stato_fattura
|
||||
@ -35,6 +36,39 @@ foreach ($results as $result) {
|
||||
}
|
||||
}
|
||||
|
||||
// Aggiornamento sconti incodizionati per Interventi
|
||||
$id_iva = setting('Iva predefinita');
|
||||
$iva = $dbo->fetchOne('SELECT * FROM co_iva WHERE id='.prepare($id_iva));
|
||||
|
||||
$interventi = $dbo->fetchArray('SELECT * FROM in_interventi WHERE sconto_globale != 0');
|
||||
foreach ($interventi as $intervento) {
|
||||
$costi = get_costi_intervento($intervento['id']);
|
||||
$sconto_globale = $costi['sconto_globale'];
|
||||
|
||||
if ($intervento['tipo_sconto_globale'] == 'PRC') {
|
||||
$descrizione = $sconto_globale >= 0 ? tr('Sconto percentuale') : tr('Maggiorazione percentuale');
|
||||
$descrizione .= ' '.Translator::numberToLocale($intervento['sconto_globale']).'%';
|
||||
} else {
|
||||
$descrizione = $sconto_globale >= 0 ? tr('Sconto unitario') : tr('Maggiorazione unitaria');
|
||||
}
|
||||
|
||||
$valore_iva = $sconto_globale * $iva['percentuale'] / 100;
|
||||
|
||||
$dbo->insert('in_righe_interventi', [
|
||||
'idintervento' => $intervento['id'],
|
||||
'descrizione' => $descrizione,
|
||||
'qta' => 1,
|
||||
'sconto' => $sconto_globale,
|
||||
'sconto_unitario' => $sconto_globale,
|
||||
'tipo_sconto' => 'UNT',
|
||||
'idiva' => $id_iva['id'],
|
||||
'desc_iva' => $iva['descrizione'],
|
||||
'iva' => $valore_iva,
|
||||
]);
|
||||
}
|
||||
|
||||
$dbo->query('ALTER TABLE `in_interventi` DROP `sconto_globale`, DROP `tipo_sconto_globale`, DROP `tipo_sconto`');
|
||||
|
||||
// File e cartelle deprecate
|
||||
$files = [
|
||||
'plugins/xml/AT_v1.0.xml',
|
||||
@ -48,6 +82,12 @@ $files = [
|
||||
'plugins/xml/SE_v1.0.xml',
|
||||
'plugins/exportFE/view.php',
|
||||
'plugins/exportFE/src/stylesheet-1.2.1.xsl',
|
||||
'modules/contratti/src/Components/Sconto.php',
|
||||
'modules/fatture/src/Components/Sconto.php',
|
||||
'modules/ordini/src/Components/Sconto.php',
|
||||
'modules/ddt/src/Components/Sconto.php',
|
||||
'modules/preventivi/src/Components/Sconto.php',
|
||||
'include/src/Components/Discount.php',
|
||||
];
|
||||
|
||||
foreach ($files as $key => $value) {
|
||||
|
@ -82,4 +82,51 @@ UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `dt_ddt` INNER JOIN `d
|
||||
UPDATE `zz_views` SET `query` = 'co_movimenti.idmastrino' WHERE `name` = 'id' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Prima nota');
|
||||
|
||||
-- Stato FE (Attestazione di avvenuta trasmissione della fattura con impossibilità di recapito, estensione ricevuta .zip)
|
||||
INSERT INTO `fe_stati_documento` (`codice`, `descrizione`, `icon`) VALUES ('AT', 'Attestazione trasmissione', 'fa fa-check text-warning');
|
||||
INSERT INTO `fe_stati_documento` (`codice`, `descrizione`, `icon`) VALUES ('AT', 'Attestazione trasmissione', 'fa fa-check text-warning');
|
||||
|
||||
-- Aggiungo deleted_at per co_statipreventivi e co_staticontratti
|
||||
ALTER TABLE `co_statipreventivi` ADD `deleted_at` DATETIME NULL AFTER `updated_at`;
|
||||
ALTER TABLE `co_staticontratti` ADD `deleted_at` DATETIME NULL AFTER `updated_at`;
|
||||
|
||||
-- Aggiunto modulo per gestire gli stati dei preventivi
|
||||
INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES (NULL, 'Stati dei preventivi', 'Stati dei preventivi','stati_preventivo', 'SELECT |select| FROM `co_statipreventivi` WHERE 1=1 AND deleted_at IS NULL HAVING 2=2', '', 'fa fa-angle-right', '2.4.9', '2.4.9', '1', (SELECT `id` FROM `zz_modules` t WHERE t.`name` = 'Preventivi'), '1', '1');
|
||||
|
||||
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `default`, `visible`) VALUES
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei preventivi'), 'Fatturabile', 'IF(is_fatturabile, ''Sì'', ''No'')', 6, 1, 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei preventivi'), 'Completato', 'IF(is_completato, ''Sì'', ''No'')', 5, 1, 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei preventivi'), 'Pianificabile', 'IF(is_pianificabile, ''Sì'', ''No'')', 4, 1, 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei preventivi'), 'Icona', 'icona', 3, 1, 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei preventivi'), 'Descrizione', 'descrizione', 2, 1, 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei preventivi'), 'id', 'id', 1, 0, 0, 1, 0);
|
||||
|
||||
-- Aggiunto modulo per gestire gli stati dei contratti
|
||||
INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES (NULL, 'Stati dei contratti', 'Stati dei contratti','stati_contratto', 'SELECT |select| FROM `co_staticontratti` WHERE 1=1 AND deleted_at IS NULL HAVING 2=2', '', 'fa fa-angle-right', '2.4.9', '2.4.9', '1', (SELECT `id` FROM `zz_modules` t WHERE t.`name` = 'Contratti'), '1', '1');
|
||||
|
||||
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `default`, `visible`) VALUES
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'Fatturabile', 'IF(is_fatturabile, ''Sì'', ''No'')', 6, 1, 0, 0 ,1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'Completato', 'IF(is_completato, ''Sì'', ''No'')', 5, 1, 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'Pianificabile', 'IF(is_pianificabile, ''Sì'', ''No'')', 4, 1, 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'Icona', 'icona', 3, 1, 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'Descrizione', 'descrizione', 2, 1, 0, 0, 1),
|
||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati dei contratti'), 'id', 'id', 1, 0, 0, 1, 0);
|
||||
|
||||
-- Aggiornamento sconti incodizionati
|
||||
ALTER TABLE `co_documenti` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
|
||||
ALTER TABLE `co_preventivi` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
|
||||
ALTER TABLE `co_contratti` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
|
||||
ALTER TABLE `or_ordini` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
|
||||
ALTER TABLE `dt_ddt` DROP `sconto_globale`, DROP `tipo_sconto_globale`;
|
||||
|
||||
ALTER TABLE `co_righe_documenti` DROP `sconto_globale`;
|
||||
ALTER TABLE `co_righe_preventivi` DROP `sconto_globale`;
|
||||
ALTER TABLE `co_righe_contratti` DROP `sconto_globale`;
|
||||
ALTER TABLE `or_righe_ordini` DROP `sconto_globale`;
|
||||
ALTER TABLE `dt_righe_ddt` DROP `sconto_globale`;
|
||||
|
||||
-- Fix per la tabella in_righe_interventi
|
||||
ALTER TABLE `in_righe_interventi` ADD `is_descrizione` TINYINT(1) NOT NULL AFTER `idintervento`, ADD `idarticolo` INT(11) AFTER `idintervento`, ADD FOREIGN KEY (`idarticolo`) REFERENCES `mg_articoli`(`id`);
|
||||
ALTER TABLE `mg_articoli_interventi` ADD `is_descrizione` TINYINT(1) NOT NULL AFTER `idintervento`;
|
||||
|
||||
-- Rimozione campi inutilizzati co_ritenutaacconto
|
||||
ALTER TABLE `co_ritenutaacconto` DROP `esente`, DROP `indetraibile`;
|
||||
UPDATE `co_ritenutaacconto` SET `percentuale_imponibile` = 100;
|
||||
|
Loading…
x
Reference in New Issue
Block a user