mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-06-05 22:09:38 +02:00
Merge branch 'master' of https://github.com/devcode-it/openstamanager
This commit is contained in:
@@ -21,17 +21,17 @@
|
||||
"type": "project",
|
||||
"require": {
|
||||
"php": ">=5.6",
|
||||
"ext-mbstring": "*",
|
||||
"ext-json": "*",
|
||||
"ext-pdo": "*",
|
||||
"ext-zip": "*",
|
||||
"ext-intl": "*",
|
||||
"ext-simplexml": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-curl": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-intl": "*",
|
||||
"ext-json": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-openssl": "*",
|
||||
"ext-pdo": "*",
|
||||
"ext-simplexml": "*",
|
||||
"ext-xsl": "*",
|
||||
"ext-zip": "*",
|
||||
"aluguest/ical-easy-reader": "^1.5",
|
||||
"danielstjules/stringy": "^3.1",
|
||||
"davidepastore/codice-fiscale": "^0.4.0",
|
||||
|
@@ -106,17 +106,11 @@ if (!empty($righe)) {
|
||||
echo '
|
||||
</tr>';
|
||||
|
||||
$totale = 0.00;
|
||||
|
||||
foreach ($righe as $i => $r) {
|
||||
// Descrizione
|
||||
echo '
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<input type="hidden" name="abilita_serial['.$r['id'].']" value="'.$r['abilita_serial'].'" />
|
||||
<input type="hidden" id="idarticolo_'.$i.'" name="idarticolo['.$r['id'].']" value="'.$r['idarticolo'].'" />
|
||||
<input type="hidden" id="descrizione_'.$i.'" name="descrizione['.$r['id'].']" value="'.$r['descrizione'].'" />';
|
||||
<td>';
|
||||
|
||||
// Checkbox - da evadere?
|
||||
echo '
|
||||
@@ -133,7 +127,6 @@ if (!empty($righe)) {
|
||||
echo '
|
||||
<td>
|
||||
<input type="hidden" id="qtamax_'.$i.'" value="'.($r['qta'] - $r['qta_evasa']).'" />
|
||||
<input type="hidden" id="um_'.$i.'" name="um['.$r['id'].']" value="'.$r['um'].'" />
|
||||
<p class="text-center">'.Translator::numberToLocale($r['qta_rimanente']).'</p>
|
||||
</td>';
|
||||
|
||||
@@ -152,7 +145,6 @@ if (!empty($righe)) {
|
||||
<td>
|
||||
<input type="hidden" id="subtot_'.$i.'" name="subtot['.$r['id'].']" value="'.str_replace('.', ',', ($r['subtotale'] / $r['qta'])).'" />
|
||||
<input type="hidden" id="sconto_'.$i.'" name="sconto['.$r['id'].']" value="'.str_replace('.', ',', ($r['sconto'] / $r['qta'])).'" />
|
||||
<input type="hidden" id="idiva_'.$i.'" name="idiva['.$r['id'].']" value="'.$r['idiva'].'" />
|
||||
<input type="hidden" id="iva_'.$i.'" name="iva['.$r['id'].']" value="'.str_replace('.', ',', ($r['iva'] / $r['qta'])).'" />
|
||||
|
||||
<big id="subtotale_'.$i.'">'.Translator::numberToLocale($subtotale - $sconto + $iva).' €</big><br/>
|
||||
@@ -185,8 +177,6 @@ if (!empty($righe)) {
|
||||
|
||||
echo '
|
||||
</tr>';
|
||||
|
||||
$totale += $subtotale - $sconto + $iva;
|
||||
}
|
||||
|
||||
// Totale
|
||||
@@ -196,7 +186,7 @@ if (!empty($righe)) {
|
||||
<b>'.tr('Totale').':</b>
|
||||
</td>
|
||||
<td class="text-right" colspan="2">
|
||||
<big id="totale">'.Translator::numberToLocale($totale).' €</big>
|
||||
<big id="totale"></big>
|
||||
</td>
|
||||
</tr>
|
||||
</table>';
|
||||
@@ -285,7 +275,9 @@ echo '
|
||||
|
||||
subtot = subtot - sconto;
|
||||
|
||||
if(subtot) {
|
||||
totale += subtot * qta + iva * qta;
|
||||
}
|
||||
|
||||
r++;
|
||||
|
||||
@@ -306,4 +298,6 @@ echo '
|
||||
|
||||
?>
|
||||
}
|
||||
|
||||
ricalcola_totale();
|
||||
</script>
|
||||
|
@@ -16,6 +16,7 @@ abstract class Description extends Model
|
||||
|
||||
if (!$bypass) {
|
||||
$model->is_descrizione = 1;
|
||||
$model->qta = 1;
|
||||
}
|
||||
|
||||
$model->setParent($document);
|
||||
@@ -42,6 +43,16 @@ abstract class Description extends Model
|
||||
return $diff;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce la quantità rimanente dell'elemento.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getQtaRimanenteAttribute()
|
||||
{
|
||||
return $this->qta - $this->qta_evasa;
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$this->evasione(-$this->qta);
|
||||
@@ -62,8 +73,6 @@ abstract class Description extends Model
|
||||
if (empty($this->disableOrder)) {
|
||||
$this->order = orderValue($this->table, $this->getParentID(), $document->id);
|
||||
}
|
||||
|
||||
$this->save();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -163,6 +172,7 @@ abstract class Description extends Model
|
||||
protected function customInitCopiaIn($original)
|
||||
{
|
||||
$this->is_descrizione = $original->is_descrizione;
|
||||
$this->is_sconto = $original->is_sconto;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -2,10 +2,23 @@
|
||||
|
||||
namespace Common\Components;
|
||||
|
||||
use Common\Document;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
abstract class Discount extends Row
|
||||
{
|
||||
protected $guarded = [];
|
||||
|
||||
public static function build(Document $document)
|
||||
{
|
||||
$model = parent::build($document, true);
|
||||
|
||||
$model->is_sconto = 1;
|
||||
$model->qta = 1;
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
public function getIvaAttribute()
|
||||
{
|
||||
return $this->attributes['iva'];
|
||||
@@ -31,7 +44,7 @@ abstract class Discount extends Row
|
||||
parent::boot(true);
|
||||
|
||||
static::addGlobalScope('discounts', function (Builder $builder) {
|
||||
$builder->where('subtotale', '=', 0);
|
||||
$builder->where('is_sconto', '=', 1);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -179,7 +179,7 @@ abstract class Row extends Description
|
||||
});
|
||||
|
||||
static::addGlobalScope('not_discounts', function (Builder $builder) {
|
||||
$builder->where('subtotale', '!=', 0);
|
||||
$builder->where('is_sconto', '=', 0);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -154,7 +154,6 @@ switch (post('op')) {
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case 'manage_sconto':
|
||||
if (post('idriga') != null) {
|
||||
$sconto = Sconto::find(post('idriga'));
|
||||
@@ -162,8 +161,6 @@ switch (post('op')) {
|
||||
$sconto = Sconto::build($contratto);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
|
@@ -26,7 +26,6 @@ if ($record['rinnovabile']) {
|
||||
</div>';
|
||||
}
|
||||
|
||||
|
||||
// Duplica contratto
|
||||
echo '
|
||||
<form action="" method="post" id="copia-contratto">
|
||||
|
@@ -2,7 +2,11 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Modules\Contratti\Contratto;
|
||||
|
||||
if (isset($id_record)) {
|
||||
$contratto = Contratto::find($id_record);
|
||||
|
||||
$record = $dbo->fetchOne('SELECT *,
|
||||
(SELECT tipo FROM an_anagrafiche WHERE idanagrafica = co_contratti.idanagrafica) AS tipo_anagrafica,
|
||||
(SELECT is_fatturabile FROM co_staticontratti WHERE id=idstato) AS is_fatturabile,
|
||||
|
@@ -188,8 +188,6 @@ switch (post('op')) {
|
||||
$sconto = Sconto::build($ddt);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
|
@@ -299,7 +299,7 @@ switch (post('op')) {
|
||||
|
||||
$articolo->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
|
||||
$articolo->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
|
||||
$articolo->ritenuta_contributi = post('ritenuta_contributi');
|
||||
$articolo->ritenuta_contributi = boolval(post('ritenuta_contributi'));
|
||||
$articolo->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
|
||||
|
||||
$articolo->prezzo_unitario_acquisto = post('prezzo_acquisto') ?: 0;
|
||||
@@ -339,8 +339,6 @@ switch (post('op')) {
|
||||
$sconto = Sconto::build($fattura);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
|
||||
$sconto->id_iva = post('idiva');
|
||||
@@ -348,7 +346,7 @@ switch (post('op')) {
|
||||
|
||||
$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->ritenuta_contributi = boolval(post('ritenuta_contributi'));
|
||||
$sconto->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
|
||||
|
||||
$sconto->sconto_unitario = post('sconto_unitario');
|
||||
@@ -387,7 +385,7 @@ switch (post('op')) {
|
||||
|
||||
$riga->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
|
||||
$riga->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
|
||||
$riga->ritenuta_contributi = post('ritenuta_contributi');
|
||||
$riga->ritenuta_contributi = boolval(post('ritenuta_contributi'));
|
||||
$riga->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
|
||||
|
||||
$riga->prezzo_unitario_acquisto = post('prezzo_acquisto') ?: 0;
|
||||
|
@@ -139,12 +139,26 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'registra-contabile':
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
$bulk = [
|
||||
'delete-bulk' => tr('Elimina selezionati'),
|
||||
];
|
||||
|
||||
$bulk['registra-contabile'] = [
|
||||
'text' => tr('Registra contabile pagamento'),
|
||||
'data' => [
|
||||
'msg' => tr('Vuoi aggiungere un movimento contabile per le fatture selezionate?'),
|
||||
'button' => tr('Procedi'),
|
||||
'class' => 'btn btn-lg btn-warning',
|
||||
'blank' => true,
|
||||
],
|
||||
];
|
||||
|
||||
if ($module->name == 'Fatture di vendita') {
|
||||
$bulk['export-bulk'] = [
|
||||
'text' => tr('Esporta stampe'),
|
||||
|
@@ -47,6 +47,13 @@ if (empty($record['is_fiscale'])) {
|
||||
<?php
|
||||
|
||||
if (!empty($record['is_fiscale'])) {
|
||||
//Aggiunta insoluto
|
||||
if (!empty($record['riba']) && ($record['stato'] == 'Emessa' || $record['stato'] == 'Parzialmente pagato' || $record['stato'] == 'Pagato') && $dir == 'entrata') {
|
||||
?>
|
||||
<button type="button" class="btn btn-primary" onclick="launch_modal( '<?php echo tr('Registra insoluto'); ?>', '<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&iddocumento=<?php echo $id_record; ?>&dir=<?php echo $dir; ?>&insoluto=1', 1 );"><i class="fa fa-euro"></i> <?php echo tr('Registra insoluto'); ?>...</button>
|
||||
<?php
|
||||
}
|
||||
|
||||
// Aggiunta prima nota solo se non c'è già, se non si è in bozza o se il pagamento non è completo
|
||||
$n2 = $dbo->fetchNum('SELECT id FROM co_movimenti WHERE iddocumento='.prepare($id_record).' AND primanota=1');
|
||||
|
||||
|
@@ -29,6 +29,7 @@ if (isset($id_record)) {
|
||||
LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id
|
||||
INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica
|
||||
INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id
|
||||
LEFT JOIN co_pagamenti ON co_documenti.idpagamento=co_pagamenti.id
|
||||
WHERE co_tipidocumento.dir = '.prepare($dir).' AND co_documenti.id='.prepare($id_record));
|
||||
|
||||
$note_accredito = $dbo->fetchArray("SELECT co_documenti.id, IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM co_documenti JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE reversed = 1 AND ref_documento=".prepare($id_record));
|
||||
|
@@ -122,11 +122,10 @@ function aggiorna_scadenziario($iddocumento, $totale_pagato, $data_pagamento)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
if ($totale_pagato > 0) {
|
||||
// Lettura righe scadenziario
|
||||
$query = "SELECT * FROM co_scadenziario WHERE iddocumento='$iddocumento' AND ABS(pagato) < ABS(da_pagare) ORDER BY scadenza ASC";
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$netto_fattura = get_netto_fattura($iddocumento);
|
||||
$rimanente = $netto_fattura;
|
||||
$rimanente_da_pagare = abs($rs[0]['pagato']) + $totale_pagato;
|
||||
|
||||
// Verifico se la fattura è di acquisto o di vendita per scegliere che segno mettere nel totale
|
||||
@@ -137,7 +136,7 @@ function aggiorna_scadenziario($iddocumento, $totale_pagato, $data_pagamento)
|
||||
// Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato.
|
||||
// Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
if ($rimanente_da_pagare != 0) {
|
||||
if ($rimanente_da_pagare > 0) {
|
||||
// ...riempio il pagato della rata con il totale della rata stessa se ho ricevuto un pagamento superiore alla rata stessa
|
||||
if (abs($rimanente_da_pagare) >= abs($rs[$i]['da_pagare'])) {
|
||||
$pagato = abs($rs[$i]['da_pagare']);
|
||||
@@ -169,6 +168,53 @@ function aggiorna_scadenziario($iddocumento, $totale_pagato, $data_pagamento)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Lettura righe scadenziario
|
||||
$query = "SELECT * FROM co_scadenziario WHERE iddocumento='$iddocumento' AND ABS(pagato)>0 ORDER BY scadenza DESC";
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$residuo_pagato = abs($rs[0]['pagato']) + $totale_pagato;
|
||||
|
||||
// Verifico se la fattura è di acquisto o di vendita per scegliere che segno mettere nel totale
|
||||
$query2 = 'SELECT dir FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id='.prepare($iddocumento);
|
||||
$rs2 = $dbo->fetchArray($query2);
|
||||
$dir = $rs2[0]['dir'];
|
||||
|
||||
// Ciclo tra le rate dei pagamenti per inserire su `pagato` l'importo effettivamente pagato.
|
||||
// Nel caso il pagamento superi la rata, devo distribuirlo sulle rate successive
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
if ($residuo_pagato >= 0) {
|
||||
// ...riempio il pagato della rata con il totale della rata stessa se ho ricevuto un pagamento superiore alla rata stessa
|
||||
if (abs($residuo_pagato) <= abs($rs[$i]['pagato'])) {
|
||||
$pagato = 0;
|
||||
$residuo_pagato -= abs($rs[$i]['pagato']);
|
||||
} else {
|
||||
// Se si inserisce una somma maggiore al dovuto, tengo valido il rimanente per saldare il tutto...
|
||||
if (abs($residuo_pagato) < abs($rs[$i]['pagato'])) {
|
||||
$pagato = 0;
|
||||
$residuo_pagato -= abs($rs[$i]['pagato']);
|
||||
}
|
||||
|
||||
// ...altrimenti aggiungo l'importo pagato
|
||||
else {
|
||||
$pagato = abs($residuo_pagato);
|
||||
$residuo_pagato -= abs($residuo_pagato);
|
||||
}
|
||||
}
|
||||
|
||||
if ($dir == 'uscita') {
|
||||
$residuo_pagato = -$residuo_pagato;
|
||||
}
|
||||
|
||||
if ($pagato >= 0) {
|
||||
if ($dir == 'uscita') {
|
||||
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare(-$pagato).', data_pagamento='.prepare($data_pagamento).' WHERE id='.prepare($rs[$i]['id']));
|
||||
} else {
|
||||
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($pagato).', data_pagamento='.prepare($data_pagamento).' WHERE id='.prepare($rs[$i]['id']));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -2,6 +2,8 @@
|
||||
|
||||
$r = $dbo->fetchOne('SELECT co_documenti.*,
|
||||
an_anagrafiche.email,
|
||||
an_anagrafiche.idconto_cliente,
|
||||
an_anagrafiche.idconto_fornitore,
|
||||
an_anagrafiche.pec,
|
||||
an_anagrafiche.ragione_sociale,
|
||||
(SELECT pec FROM zz_smtps WHERE zz_smtps.id='.prepare($template['id_smtp']).') AS is_pec
|
||||
@@ -9,6 +11,17 @@ FROM co_documenti INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anag
|
||||
|
||||
$logo_azienda = str_replace(DOCROOT, ROOTDIR, App::filepath('templates/base|custom|/logo_azienda.jpg'));
|
||||
|
||||
//cliente
|
||||
if ($r['idconto_cliente'] != '') {
|
||||
$conto = $r['idconto_cliente'];
|
||||
$conto_descrizione = $dbo->fetchOne('SELECT CONCAT ((SELECT numero FROM co_pianodeiconti2 WHERE id=co_pianodeiconti3.idpianodeiconti2), ".", numero, " ", descrizione) AS descrizione FROM co_pianodeiconti3 WHERE id='.prepare($conto))['descrizione'];
|
||||
}
|
||||
//Fornitore
|
||||
elseif ($r['idconto_fornitore'] != '') {
|
||||
$conto = $r['idconto_fornitore'];
|
||||
$conto_descrizione = $dbo->fetchOne('SELECT CONCAT ((SELECT numero FROM co_pianodeiconti2 WHERE id=co_pianodeiconti3.idpianodeiconti2), ".", numero, " ", descrizione) AS descrizione FROM co_pianodeiconti3 WHERE id='.prepare($conto))['descrizione'];
|
||||
}
|
||||
|
||||
// Variabili da sostituire
|
||||
return [
|
||||
'email' => $r['is_pec'] ? $r['pec'] : $r['email'],
|
||||
@@ -18,4 +31,6 @@ return [
|
||||
'note' => $r['note'],
|
||||
'data' => Translator::dateToLocale($r['data']),
|
||||
'logo_azienda' => !empty($logo_azienda) ? '<img src="'.$logo_azienda.'" />' : '',
|
||||
'conto' => $conto,
|
||||
'conto_descrizione' => $conto_descrizione,
|
||||
];
|
||||
|
@@ -332,8 +332,6 @@ switch (post('op')) {
|
||||
$sconto = Riga::build($intervento);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
|
@@ -324,15 +324,6 @@ function get_costi_intervento($id_intervento)
|
||||
$result['altro_scontato'] + ($result['altro_scontato'] * $result['altro_iva'] / 100),
|
||||
]);
|
||||
|
||||
// Calcolo dello sconto incondizionato
|
||||
$sconto = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM in_interventi WHERE id='.prepare($id_intervento))[0];
|
||||
$result['sconto_globale'] = ($sconto['tipo_sconto_globale'] == 'PRC') ? $result['totale_scontato'] * $sconto['sconto_globale'] / 100 : $sconto['sconto_globale'];
|
||||
$result['sconto_globale'] = round($result['sconto_globale'], $decimals);
|
||||
|
||||
$result['totale_scontato'] = sum($result['totale_scontato'], -$result['sconto_globale']);
|
||||
$result['iva_totale'] = sum($result['iva_totale'], -($result['sconto_globale'] * $rs_iva[0]['percentuale'] / 100));
|
||||
$result['totale'] = sum($result['totale'], -($result['sconto_globale'] + ($result['sconto_globale'] * $rs_iva[0]['percentuale'] / 100)));
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
196
modules/interventi/src/Components/Sessione.php
Normal file
196
modules/interventi/src/Components/Sessione.php
Normal file
@@ -0,0 +1,196 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Interventi\Components;
|
||||
|
||||
use Common\Model;
|
||||
use Modules\Interventi\Intervento;
|
||||
|
||||
/**
|
||||
* Notazione: i costi sono rivolti all'azienda, i prezzi al cliente.
|
||||
*
|
||||
* @since 2.4.9
|
||||
*/
|
||||
class Sessione extends Model
|
||||
{
|
||||
use RelationTrait;
|
||||
|
||||
protected $table = 'in_interventi_tecnici';
|
||||
|
||||
public function getParentID()
|
||||
{
|
||||
return 'idintervento';
|
||||
}
|
||||
|
||||
public function parent()
|
||||
{
|
||||
return $this->belongsTo(Intervento::class, $this->getParentID());
|
||||
}
|
||||
|
||||
// Costi per l'azienda
|
||||
|
||||
/**
|
||||
* Restituisce il costo orario (per l'azienda) per la sessione del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getCostoOrarioAttribute()
|
||||
{
|
||||
return $this->attributes['prezzo_ore_unitario_tecnico'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il costo del diritto di chiamata (per l'azienda) per la sessione del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getCostoDirittoChiamataAttribute()
|
||||
{
|
||||
return $this->attributes['prezzo_dirittochiamata_tecnico'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il costo chilometrico (per l'azienda) del viaggio del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getCostoChilometricoAttribute()
|
||||
{
|
||||
return $this->attributes['prezzo_km_unitario_tecnico'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il costo totale della manodopera escluso il diritto di chiamata (per l'azienda) per la sessione del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getCostoManodoperaAttribute()
|
||||
{
|
||||
return $this->costo_orario * $this->ore;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il costo totale (per l'azienda) del viaggio del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getCostoViaggioAttribute()
|
||||
{
|
||||
return $this->costo_chilometrico * $this->km;
|
||||
}
|
||||
|
||||
// Prezzi per il cliente
|
||||
|
||||
/**
|
||||
* Restituisce il prezzo del diritto di chiamata (per il cliente) per la sessione del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getPrezzoDirittoChiamataAttribute()
|
||||
{
|
||||
return $this->attributes['prezzo_dirittochiamata'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il prezzo del diritto di chiamata (per il cliente) per la sessione del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getPrezzoChilometricoAttribute()
|
||||
{
|
||||
return $this->attributes['prezzo_km_unitario'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il prezzo del diritto di chiamata (per il cliente) per la sessione del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getPrezzoOrarioAttribute()
|
||||
{
|
||||
return $this->attributes['prezzo_ore_unitario'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il prezzo totale della manodopera escluso il diritto di chiamata (per il cliente) per la sessione del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getPrezzoManodoperaAttribute()
|
||||
{
|
||||
return $this->prezzo_orario * $this->ore;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce lo sconto totale km in euro.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getScontoTotaleManodoperaAttribute()
|
||||
{
|
||||
return calcola_sconto([
|
||||
'sconto' => $this->sconto_unitario,
|
||||
'prezzo' => $this->prezzo_manodopera,
|
||||
'tipo' => $this->tipo_sconto,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il prezzo totale scontato (per il cliente) del viaggio del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getPrezzoManodoperaScontatoAttribute()
|
||||
{
|
||||
return $this->prezzo_manodopera - $this->sconto_totale_manodopera;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il prezzo totale (per il cliente) del viaggio del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getPrezzoViaggioAttribute()
|
||||
{
|
||||
return $this->prezzo_chilometrico * $this->km;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce lo sconto totale km in euro.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getScontoTotaleKmAttribute()
|
||||
{
|
||||
return calcola_sconto([
|
||||
'sconto' => $this->scontokm_unitario,
|
||||
'prezzo' => $this->prezzo_viaggio,
|
||||
'tipo' => $this->tipo_scontokm,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce il prezzo totale scontato (per il cliente) del viaggio del tecnico.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getPrezzoViaggioScontatoAttribute()
|
||||
{
|
||||
return $this->prezzo_viaggio - $this->sconto_totale_km;
|
||||
}
|
||||
|
||||
/**
|
||||
* Crea un nuova sessione collegata ad un intervento.
|
||||
*
|
||||
* @param Intervento $intervento
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public static function build(Intervento $intervento)
|
||||
{
|
||||
$model = parent::build($intervento);
|
||||
|
||||
$model->parent()->associate($intervento);
|
||||
|
||||
return $model;
|
||||
}
|
||||
}
|
@@ -5,8 +5,6 @@ namespace Modules\Interventi;
|
||||
use Common\Document;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Contratti\Contratto;
|
||||
use Modules\Interventi\Components\Articolo;
|
||||
use Modules\Interventi\Components\Riga;
|
||||
use Modules\Preventivi\Preventivo;
|
||||
use Util\Generator;
|
||||
|
||||
@@ -67,12 +65,12 @@ class Intervento extends Document
|
||||
|
||||
public function articoli()
|
||||
{
|
||||
return $this->hasMany(Articolo::class, 'idintervento');
|
||||
return $this->hasMany(Components\Articolo::class, 'idintervento');
|
||||
}
|
||||
|
||||
public function righe()
|
||||
{
|
||||
return $this->hasMany(Riga::class, 'idintervento');
|
||||
return $this->hasMany(Components\Riga::class, 'idintervento');
|
||||
}
|
||||
|
||||
public function sconti()
|
||||
@@ -85,6 +83,11 @@ class Intervento extends Document
|
||||
return $this->righe()->where('prezzo_vendita', 0);
|
||||
}
|
||||
|
||||
public function sessioni()
|
||||
{
|
||||
return $this->hasMany(Components\Sessione::class, 'idintervento');
|
||||
}
|
||||
|
||||
// Metodi statici
|
||||
|
||||
/**
|
||||
|
@@ -6,12 +6,15 @@ switch (post('op')) {
|
||||
case 'add':
|
||||
$idmastrino = get_new_idmastrino('co_movimenti_modelli');
|
||||
$descrizione = post('descrizione');
|
||||
$nome = post('nome');
|
||||
|
||||
for ($i = 0; $i < sizeof(post('idconto')); ++$i) {
|
||||
$idconto = post('idconto')[$i];
|
||||
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($descrizione).', '.prepare($idconto).')';
|
||||
if (!empty($idconto)) {
|
||||
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, nome, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($nome).', '.prepare($descrizione).', '.prepare($idconto).')';
|
||||
if ($dbo->query($query)) {
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
$id_record = $idmastrino;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,15 +23,18 @@ switch (post('op')) {
|
||||
case 'editriga':
|
||||
$idmastrino = post('idmastrino');
|
||||
$descrizione = post('descrizione');
|
||||
$nome = post('nome');
|
||||
|
||||
// Eliminazione prima nota
|
||||
$dbo->query('DELETE FROM co_movimenti_modelli WHERE idmastrino='.prepare($idmastrino));
|
||||
|
||||
for ($i = 0; $i < sizeof(post('idconto')); ++$i) {
|
||||
$idconto = post('idconto')[$i];
|
||||
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($descrizione).', '.prepare($idconto).')';
|
||||
if (!empty($idconto)) {
|
||||
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, nome, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($nome).', '.prepare($descrizione).', '.prepare($idconto).')';
|
||||
if ($dbo->query($query)) {
|
||||
$id_record = $dbo->lastInsertedID();
|
||||
$id_record = $idmastrino;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -7,8 +7,11 @@ include_once __DIR__.'/../../core.php';
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1 ]}
|
||||
<div class="col-md-5">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1 ]}
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
{[ "type": "text", "label": "<?php echo tr('Causale'); ?>", "name": "descrizione", "required": 1 ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -40,6 +43,35 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
echo '
|
||||
</table>';
|
||||
|
||||
// Variabili utilizzabili
|
||||
$variables = include Modules::filepath(Modules::get('Fatture di vendita')['id'], 'variables.php');
|
||||
|
||||
echo '
|
||||
<!-- Istruzioni per il contenuto -->
|
||||
<div class="box box-info">
|
||||
<div class="box-body">';
|
||||
|
||||
if (!empty($variables)) {
|
||||
echo '
|
||||
<p>'.tr("Puoi utilizzare le seguenti sequenze di testo all'interno del campo causale, verranno sostituite in fase generazione prima nota dalla fattura.").':</p>
|
||||
<ul>';
|
||||
|
||||
foreach ($variables as $variable => $value) {
|
||||
echo '
|
||||
<li><code>{'.$variable.'}</code></li>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</ul>';
|
||||
} else {
|
||||
echo '
|
||||
<p><i class="fa fa-warning"></i> '.tr('Non sono state definite variabili da utilizzare nel template').'.</p>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</div>
|
||||
</div>';
|
||||
?>
|
||||
|
||||
<!-- PULSANTI -->
|
||||
|
@@ -11,8 +11,11 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "text", "label": "<?php echo tr('Causale predefinita'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
|
||||
<div class="col-md-5">
|
||||
{[ "type": "text", "label": "<?php echo tr('Nome'); ?>", "name": "nome", "required": 1, "value": "$nome$" ]}
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
{[ "type": "text", "label": "<?php echo tr('Causale'); ?>", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -52,7 +55,7 @@ for ($i = 0; $i < 10; ++$i) {
|
||||
echo '
|
||||
<tr>
|
||||
<td>
|
||||
{[ "type": "select", "name": "idconto['.$i.']", "value": "'.$rs[$i]['idconto'].'", "ajax-source": "conti", "required": "'.$required.'" ]}
|
||||
{[ "type": "select", "name": "idconto['.$i.']", "value": "'.$rs[$i]['idconto'].'", "ajax-source": "conti-modelliprimanota", "required": "'.$required.'" ]}
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
@@ -80,6 +83,50 @@ echo '
|
||||
|
||||
</form>
|
||||
|
||||
<?php
|
||||
// Variabili utilizzabili
|
||||
$variables = include Modules::filepath(Modules::get('Fatture di vendita')['id'], 'variables.php');
|
||||
|
||||
echo '
|
||||
<!-- Istruzioni per il contenuto -->
|
||||
<div class="box box-info">
|
||||
<div class="box-body">';
|
||||
|
||||
if (!empty($variables)) {
|
||||
echo '
|
||||
<p>'.tr("Puoi utilizzare le seguenti sequenze di testo all'interno del campo causale, verranno sostituite in fase generazione prima nota dalla fattura.").':</p>
|
||||
<ul>';
|
||||
|
||||
foreach ($variables as $variable => $value) {
|
||||
echo '
|
||||
<li><code>{'.$variable.'}</code></li>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</ul>';
|
||||
} else {
|
||||
echo '
|
||||
<p><i class="fa fa-warning"></i> '.tr('Non sono state definite variabili da utilizzare nel template').'.</p>';
|
||||
}
|
||||
|
||||
echo '
|
||||
</div>
|
||||
</div>';
|
||||
?>
|
||||
|
||||
|
||||
<a class="btn btn-danger ask" data-backto="record-list" data-idmastrino="<?php echo $record['idmastrino']; ?>">
|
||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||
</a>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
$('select[name=idconto]').each(function(){
|
||||
this.selectAdd([{
|
||||
'value': -1,
|
||||
'text': "Conto cliente fattura",
|
||||
}]);
|
||||
});
|
||||
|
||||
</Script>
|
||||
|
@@ -1,7 +1,5 @@
|
||||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
if (isset($id_record)) {
|
||||
$record = $dbo->fetchOne('SELECT * FROM co_movimenti_modelli WHERE id='.prepare($id_record));
|
||||
$record = $dbo->fetchOne('SELECT * FROM co_movimenti_modelli WHERE idmastrino='.prepare($id_record));
|
||||
}
|
||||
|
@@ -220,6 +220,7 @@ switch (post('op')) {
|
||||
|
||||
flash()->info(tr('Riga rimossa!'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'manage_sconto':
|
||||
@@ -229,8 +230,6 @@ switch (post('op')) {
|
||||
$sconto = Sconto::build($ordine);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
|
@@ -84,4 +84,57 @@ switch ($resource) {
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'conti-modelliprimanota':
|
||||
$query = 'SELECT co_pianodeiconti2.* FROM co_pianodeiconti2 LEFT JOIN co_pianodeiconti3 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where| GROUP BY co_pianodeiconti2.id';
|
||||
|
||||
if ($search != '') {
|
||||
$wh = 'WHERE (co_pianodeiconti3.descrizione LIKE '.prepare('%'.$search.'%')." OR CONCAT( co_pianodeiconti2.numero, '.', co_pianodeiconti3.numero ) LIKE ".prepare('%'.$search.'%').')';
|
||||
} else {
|
||||
$wh = '';
|
||||
}
|
||||
$query = str_replace('|where|', $wh, $query);
|
||||
|
||||
$rs = $dbo->fetchArray($query);
|
||||
foreach ($rs as $r) {
|
||||
$results[] = ['text' => $r['numero'].' '.$r['descrizione'], 'children' => []];
|
||||
|
||||
$subquery = 'SELECT co_pianodeiconti3.* FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id |where|';
|
||||
|
||||
$where = [];
|
||||
$filter = [];
|
||||
$search_fields = [];
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$filter[] = 'co_pianodeiconti3.id='.prepare($element);
|
||||
}
|
||||
if (!empty($filter)) {
|
||||
$where[] = '('.implode(' OR ', $filter).')';
|
||||
}
|
||||
|
||||
$where[] = 'idpianodeiconti2='.prepare($r['id']);
|
||||
|
||||
if (!empty($search)) {
|
||||
$search_fields[] = '(co_pianodeiconti3.descrizione LIKE '.prepare('%'.$search.'%')." OR CONCAT(co_pianodeiconti2.numero, '.', co_pianodeiconti3.numero) LIKE ".prepare('%'.$search.'%').')';
|
||||
}
|
||||
if (!empty($search_fields)) {
|
||||
$where[] = '('.implode(' OR ', $search_fields).')';
|
||||
}
|
||||
|
||||
$wh = '';
|
||||
if (count($where) != 0) {
|
||||
$wh = 'WHERE '.implode(' AND ', $where);
|
||||
}
|
||||
$subquery = str_replace('|where|', $wh, $subquery);
|
||||
|
||||
$rs2 = $dbo->fetchArray($subquery);
|
||||
foreach ($rs2 as $r2) {
|
||||
$results[count($results) - 1]['children'][] = ['id' => $r2['id'], 'text' => $r['numero'].'.'.$r2['numero'].' '.$r2['descrizione']];
|
||||
}
|
||||
|
||||
$results[] = ['text' => 'Conto cliente/fornitore fattura', 'children' => []];
|
||||
$results[count($results) - 1]['children'][] = ['id' => '-1', 'text' => '{Conto cliente/fornitore fattura}'];
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
@@ -243,8 +243,6 @@ switch (post('op')) {
|
||||
$sconto = Sconto::build($preventivo);
|
||||
}
|
||||
|
||||
$sconto->qta = 1;
|
||||
|
||||
$sconto->descrizione = post('descrizione');
|
||||
$sconto->id_iva = post('idiva');
|
||||
|
||||
@@ -371,7 +369,6 @@ switch (post('op')) {
|
||||
'sconto' => $rs_righe_preventivo[$i]['sconto'],
|
||||
'sconto_unitario' => $rs_righe_preventivo[$i]['sconto_unitario'],
|
||||
'tipo_sconto' => $rs_righe_preventivo[$i]['tipo_sconto'],
|
||||
'sconto_globale' => $rs_righe_preventivo[$i]['sconto_globale'],
|
||||
'um' => $rs_righe_preventivo[$i]['um'],
|
||||
'qta' => $rs_righe_preventivo[$i]['qta'],
|
||||
'order' => $rs_righe_preventivo[$i]['order'],
|
||||
|
@@ -9,6 +9,7 @@ switch (post('op')) {
|
||||
$data = post('data');
|
||||
$idmastrino = get_new_idmastrino();
|
||||
$descrizione = post('descrizione');
|
||||
$insoluto = post('insoluto');
|
||||
|
||||
// Lettura info fattura
|
||||
$query = 'SELECT *, co_documenti.note, co_documenti.idpagamento, co_documenti.id AS iddocumento, co_statidocumento.descrizione AS `stato`, co_tipidocumento.descrizione AS `descrizione_tipodoc` FROM ((co_documenti LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id) INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id='.prepare($iddocumento);
|
||||
@@ -42,9 +43,12 @@ switch (post('op')) {
|
||||
}
|
||||
}
|
||||
|
||||
if ($totale_pagato != 0 && empty($insoluto)) {
|
||||
// Inserisco nello scadenziario il totale pagato
|
||||
if ($totale_pagato != 0) {
|
||||
aggiorna_scadenziario($iddocumento, abs($totale_pagato), $data);
|
||||
} elseif (!empty($insoluto)) {
|
||||
//Rimuovo dallo scadenzario l'insoluto
|
||||
aggiorna_scadenziario($iddocumento, -abs($totale_pagato), $data);
|
||||
}
|
||||
|
||||
// Se non va a buon fine qualcosa elimino il mastrino per non lasciare incongruenze nel db
|
||||
@@ -61,8 +65,10 @@ switch (post('op')) {
|
||||
// Aggiorno lo stato della fattura
|
||||
if (abs($rs[0]['tot_pagato']) == abs($rs[0]['tot_da_pagare'])) {
|
||||
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Pagato') WHERE id=".prepare($iddocumento));
|
||||
} else {
|
||||
} elseif (abs($rs[0]['tot_pagato']) != abs($rs[0]['tot_da_pagare']) && abs($rs[0]['tot_pagato']) != '0') {
|
||||
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Parzialmente pagato') WHERE id=".prepare($iddocumento));
|
||||
} else {
|
||||
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($iddocumento));
|
||||
}
|
||||
|
||||
// Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono
|
||||
@@ -101,7 +107,7 @@ switch (post('op')) {
|
||||
|
||||
for ($i = 0; $i < sizeof(post('idconto')); ++$i) {
|
||||
$idconto = post('idconto')[$i];
|
||||
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($descrizione).', '.prepare($idconto).')';
|
||||
$query = 'INSERT INTO co_movimenti_modelli(idmastrino, nome, descrizione, idconto) VALUES('.prepare($idmastrino).', '.prepare($descrizione).', '.prepare($descrizione).', '.prepare($idconto).')';
|
||||
$dbo->query($query);
|
||||
}
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
|
||||
?><form action="<?php echo ROOTDIR; ?>/controller.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>" method="post" id="add-form">
|
||||
<input type="hidden" name="op" value="add">
|
||||
<input type="hidden" name="backto" value="record-edit">
|
||||
<input type="hidden" name="iddocumento" value="<?php echo get('iddocumento'); ?>">
|
||||
<input type="hidden" name="iddocumento" id="iddocumento" value="<?php echo get('iddocumento'); ?>">
|
||||
<input type="hidden" name="crea_modello" id="crea_modello" value="0">
|
||||
<input type="hidden" name="idmastrino" id="idmastrino" value="0">
|
||||
|
||||
@@ -13,6 +13,15 @@ include_once __DIR__.'/../../core.php';
|
||||
$idconto = get('idconto');
|
||||
$iddocumento = get('iddocumento');
|
||||
$dir = get('dir');
|
||||
$insoluto = get('insoluto');
|
||||
|
||||
if (!empty($insoluto)) {
|
||||
echo '<input type="hidden" name="insoluto" value="1">';
|
||||
}
|
||||
|
||||
// Lettura delle variabili nei singoli moduli
|
||||
$id_record = $iddocumento;
|
||||
$variables = include Modules::filepath(Modules::get('Fatture di vendita')['id'], 'variables.php');
|
||||
|
||||
if (!empty($iddocumento)) {
|
||||
// Lettura numero e tipo di documento
|
||||
@@ -33,7 +42,14 @@ include_once __DIR__.'/../../core.php';
|
||||
$tipo_doc = 'fattura';
|
||||
}
|
||||
|
||||
$descrizione = tr('Pag. _DOC_ num. _NUM_ del _DATE_ (_NAME_)', [
|
||||
if (!empty($insoluto)) {
|
||||
$operation = 'Registrazione insoluto';
|
||||
} else {
|
||||
$operation = 'Pag.';
|
||||
}
|
||||
|
||||
$descrizione = tr('_OP_ _DOC_ num. _NUM_ del _DATE_ (_NAME_)', [
|
||||
'_OP_' => $operation,
|
||||
'_DOC_' => $tipo_doc,
|
||||
'_NUM_' => $numero_doc,
|
||||
'_DATE_' => Translator::dateToLocale($rs[0]['data']),
|
||||
@@ -74,7 +90,11 @@ include_once __DIR__.'/../../core.php';
|
||||
$query = 'SELECT SUM(pagato) AS tot_pagato, SUM(da_pagare) AS tot_da_pagare FROM co_scadenziario GROUP BY iddocumento HAVING iddocumento='.prepare($iddocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
if (!empty($insoluto)) {
|
||||
$importo_conto_aziendale = abs($rs[0]['tot_da_pagare']);
|
||||
} else {
|
||||
$importo_conto_aziendale = abs($rs[0]['tot_da_pagare']) - abs($rs[0]['tot_pagato']);
|
||||
}
|
||||
$totale_dare = $importo_conto_aziendale;
|
||||
}
|
||||
|
||||
@@ -124,7 +144,7 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{[ "type": "select", "label": "<?php echo tr('Modello primanota'); ?>", "id": "modello_primanota", "values": "query=SELECT idmastrino AS id, descrizione FROM co_movimenti_modelli GROUP BY idmastrino" ]}
|
||||
{[ "type": "select", "label": "<?php echo tr('Modello primanota'); ?>", "id": "modello_primanota", "values": "query=SELECT idmastrino AS id, nome AS descrizione, descrizione as causale FROM co_movimenti_modelli GROUP BY idmastrino" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -195,7 +215,7 @@ include_once __DIR__.'/../../core.php';
|
||||
}
|
||||
|
||||
// Se è una nota di credito, inverto i valori
|
||||
if ($nota_credito) {
|
||||
if ($nota_credito || $insoluto) {
|
||||
$tmp = $value_dare;
|
||||
$value_dare = $value_avere;
|
||||
$value_avere = $tmp;
|
||||
@@ -351,24 +371,51 @@ include_once __DIR__.'/../../core.php';
|
||||
}
|
||||
|
||||
var idmastrino = $(this).val();
|
||||
var variables = <?php echo json_encode($variables); ?>;
|
||||
|
||||
var replaced = 0;
|
||||
|
||||
if(idmastrino!=''){
|
||||
var causale = $(this).find('option:selected').text();
|
||||
var causale = $(this).find('option:selected').data('causale');
|
||||
|
||||
if($('#iddocumento').val()!=''){
|
||||
for (i in variables){
|
||||
if(causale.includes('{'+i+'}')){
|
||||
replaced++;
|
||||
causale = causale.replace('{'+i+'}', variables[i]);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for (i in variables){
|
||||
causale = causale.replace('{'+i+'}', '_');
|
||||
}
|
||||
}
|
||||
|
||||
//aggiornava erroneamente anche la causale ed eventuale numero di fattura e data
|
||||
<?php if (empty($iddocumento)) {
|
||||
?>
|
||||
if(replaced>0 || $('#iddocumento').val()==''){
|
||||
$('#bs-popup #desc').val(causale);
|
||||
<?php
|
||||
} ?>
|
||||
}
|
||||
|
||||
$.get('<?php echo $rootdir; ?>/ajax_complete.php?op=get_conti&idmastrino='+idmastrino, function(data){
|
||||
var conti = data.split(',');
|
||||
for(i=0;i<conti.length;i++){
|
||||
var conto = conti[i].split(';');
|
||||
//Sostituzione conto cliente/fornitore
|
||||
if(conto[0]==-1){
|
||||
if($('#iddocumento').val()!=''){
|
||||
var option = $("<option selected></option>").val(variables['conto']).text(variables['conto_descrizione']);
|
||||
$('#bs-popup #conto'+i).selectReset();
|
||||
$('#bs-popup #conto'+i).append(option).trigger('change');
|
||||
}
|
||||
}else{
|
||||
var option = $("<option selected></option>").val(conto[0]).text(conto[1]);
|
||||
$('#bs-popup #conto'+i).selectReset();
|
||||
$('#bs-popup #conto'+i).append(option).trigger('change');
|
||||
}
|
||||
}
|
||||
for(i=9;i>=conti.length;i--){
|
||||
$('#bs-popup #conto'+i).selectReset();
|
||||
console.log('#bs-popup #conto'+i);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@ switch ($resource) {
|
||||
case 'get_conti':
|
||||
$idmastrino = get('idmastrino');
|
||||
$conti = [];
|
||||
$rs_conti = $dbo->fetchArray('SELECT *, (SELECT descrizione FROM co_pianodeiconti3 WHERE id=co_movimenti_modelli.idconto) AS descrizione_conto FROM co_movimenti_modelli WHERE idmastrino='.prepare($idmastrino).' GROUP BY id');
|
||||
$rs_conti = $dbo->fetchArray('SELECT *, (SELECT CONCAT ((SELECT numero FROM co_pianodeiconti2 WHERE id=co_pianodeiconti3.idpianodeiconti2), ".", numero, " ", descrizione) FROM co_pianodeiconti3 WHERE id=co_movimenti_modelli.idconto) AS descrizione_conto FROM co_movimenti_modelli WHERE idmastrino='.prepare($idmastrino).' GROUP BY id ORDER BY id');
|
||||
|
||||
for ($i = 0; $i < sizeof($rs_conti); ++$i) {
|
||||
$conti[$i] = $rs_conti[$i]['idconto'].';'.$rs_conti[$i]['descrizione_conto'];
|
||||
|
@@ -128,7 +128,9 @@ echo '
|
||||
|
||||
</table>
|
||||
|
||||
<a onclick="launch_modal( 'Aggiungi prima nota', '<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&iddocumento=<?php echo $record['iddocumento']; ?>&dir=<?php echo $dir; ?>', 1 );" class="btn btn-sm btn-primary pull-right"><i class="fa fa-euro"></i> <?php echo tr('Aggiungi prima nota...'); ?></a>
|
||||
<div class='pull-right'>
|
||||
<a onclick="launch_modal( 'Aggiungi prima nota', '<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&iddocumento=<?php echo $record['iddocumento']; ?>&dir=<?php echo $dir; ?>', 1 );" class="btn btn-sm btn-primary"><i class="fa fa-euro"></i> <?php echo tr('Aggiungi prima nota...'); ?></a>
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
|
||||
|
@@ -689,22 +689,6 @@ 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 = [
|
||||
'Tipo' => $documento['sconto_globale'] > 0 ? 'SC' : 'MG',
|
||||
];
|
||||
|
||||
if ($documento['tipo_sconto_globale'] == 'PRC') {
|
||||
$sconto['Percentuale'] = $documento['sconto_globale'];
|
||||
} else {
|
||||
$sconto['Importo'] = $documento['sconto_globale'];
|
||||
}
|
||||
|
||||
$result['ScontoMaggiorazione'] = $sconto;
|
||||
}
|
||||
*/
|
||||
|
||||
// Importo Totale Documento (2.1.1.9)
|
||||
// Valorizzare l’importo complessivo lordo della fattura (onnicomprensivo di Iva, bollo, contributi previdenziali, ecc…)
|
||||
|
@@ -61,6 +61,7 @@ foreach ($interventi as $intervento) {
|
||||
'sconto' => $sconto_globale,
|
||||
'sconto_unitario' => $sconto_globale,
|
||||
'tipo_sconto' => 'UNT',
|
||||
'is_sconto' => 1,
|
||||
'idiva' => $id_iva['id'],
|
||||
'desc_iva' => $iva['descrizione'],
|
||||
'iva' => $valore_iva,
|
||||
|
@@ -117,24 +117,29 @@ 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`;
|
||||
|
||||
UPDATE `co_righe_documenti` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT' WHERE `sconto_globale` != 0;
|
||||
ALTER TABLE `co_righe_documenti` ADD `is_sconto` BOOLEAN DEFAULT FALSE NOT NULL AFTER `is_descrizione`;
|
||||
UPDATE `co_righe_documenti` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT', `is_sconto` = 1 WHERE `sconto_globale` != 0;
|
||||
ALTER TABLE `co_righe_documenti` DROP `sconto_globale`;
|
||||
|
||||
UPDATE `co_righe_preventivi` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT' WHERE `sconto_globale` != 0;
|
||||
ALTER TABLE `co_righe_preventivi` ADD `is_sconto` BOOLEAN DEFAULT FALSE NOT NULL AFTER `is_descrizione`;
|
||||
UPDATE `co_righe_preventivi` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT', `is_sconto` = 1 WHERE `sconto_globale` != 0;
|
||||
ALTER TABLE `co_righe_preventivi` DROP `sconto_globale`;
|
||||
|
||||
UPDATE `co_righe_contratti` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT' WHERE `sconto_globale` != 0;
|
||||
ALTER TABLE `co_righe_contratti` ADD `is_sconto` BOOLEAN DEFAULT FALSE NOT NULL AFTER `is_descrizione`;
|
||||
UPDATE `co_righe_contratti` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT', `is_sconto` = 1 WHERE `sconto_globale` != 0;
|
||||
ALTER TABLE `co_righe_contratti` DROP `sconto_globale`;
|
||||
|
||||
UPDATE `or_righe_ordini` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT' WHERE `sconto_globale` != 0;
|
||||
ALTER TABLE `or_righe_ordini` ADD `is_sconto` BOOLEAN DEFAULT FALSE NOT NULL AFTER `is_descrizione`;
|
||||
UPDATE `or_righe_ordini` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT', `is_sconto` = 1 WHERE `sconto_globale` != 0;
|
||||
ALTER TABLE `or_righe_ordini` DROP `sconto_globale`;
|
||||
|
||||
UPDATE `dt_righe_ddt` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT' WHERE `sconto_globale` != 0;
|
||||
ALTER TABLE `dt_righe_ddt` ADD `is_sconto` BOOLEAN DEFAULT FALSE NOT NULL AFTER `is_descrizione`;
|
||||
UPDATE `dt_righe_ddt` SET `sconto` = `sconto_globale`, `sconto_unitario` = `sconto_globale`, `tipo_sconto` = 'UNT', `is_sconto` = 1 WHERE `sconto_globale` != 0;
|
||||
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`;
|
||||
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`), ADD `is_sconto` BOOLEAN DEFAULT FALSE NOT NULL AFTER `is_descrizione`;
|
||||
ALTER TABLE `mg_articoli_interventi` ADD `is_descrizione` TINYINT(1) NOT NULL AFTER `idintervento`, ADD `is_sconto` BOOLEAN DEFAULT FALSE NOT NULL AFTER `is_descrizione`;
|
||||
|
||||
-- Rimozione campi inutilizzati co_ritenutaacconto
|
||||
ALTER TABLE `co_ritenutaacconto` DROP `esente`, DROP `indetraibile`;
|
||||
@@ -145,3 +150,57 @@ UPDATE `zz_widgets` SET `query` = 'SELECT CONCAT_WS('' '', REPLACE(REPLACE(REPLA
|
||||
|
||||
-- Aggiunta idsede anche preventivi (completamento 2.4.1)
|
||||
ALTER TABLE `co_preventivi` ADD `idsede` INT NOT NULL AFTER `idanagrafica`;
|
||||
|
||||
-- Aggiunta flag riba per tipi di pagamento Ri.Ba.
|
||||
ALTER TABLE `co_pagamenti` ADD `riba` TINYINT(1) NOT NULL DEFAULT '0' AFTER `codice_modalita_pagamento_fe`;
|
||||
UPDATE `co_pagamenti` SET `riba` = 1 WHERE `descrizione` LIKE 'Ri.Ba.%';
|
||||
|
||||
-- Creazione nuovo conto per anticipi Ri.Ba.
|
||||
INSERT INTO `co_pianodeiconti3` (`id`, `numero`, `descrizione`, `idpianodeiconti2`, `dir`, `can_delete`, `can_edit`) VALUES (NULL, '000021', 'Banca C/C (conto anticipi)', '1', '', '0', '0');
|
||||
|
||||
-- Aggiunta colonna nome per i modelli primanota
|
||||
ALTER TABLE `co_movimenti_modelli` ADD `nome` VARCHAR(255) NOT NULL AFTER `idmastrino`;
|
||||
|
||||
UPDATE `zz_views` SET `name` = 'Nome', `query` = 'co_movimenti_modelli.nome' WHERE `zz_views`.`id_module` = (SELECT id FROM zz_modules WHERE name='Modelli prima nota') AND `zz_views`.`name`='Causale predefinita';
|
||||
UPDATE `zz_views` SET `query` = 'co_movimenti_modelli.idmastrino' WHERE `zz_views`.`id_module` = (SELECT id FROM zz_modules WHERE name='Modelli prima nota') AND `zz_views`.`name`='id';
|
||||
|
||||
-- Modelli primanota default
|
||||
INSERT INTO `co_movimenti_modelli` (`id`, `idmastrino`, `nome`, `descrizione`, `idconto`) VALUES
|
||||
(NULL, 1, 'Anticipo fattura', 'Anticipo fattura num. {numero} del {data}', -1),
|
||||
(NULL, 1, 'Anticipo fattura', 'Anticipo fattura num. {numero} del {data}', (SELECT id FROM co_pianodeiconti3 WHERE descrizione = 'Banca C/C (conto anticipi)')),
|
||||
(NULL, 1, 'Anticipo fattura', 'Anticipo fattura num. {numero} del {data}', (SELECT id FROM co_pianodeiconti3 WHERE descrizione = 'Spese bancarie')),
|
||||
(NULL, 2, 'Accredito anticipo', 'Accredito anticipo fattura num. {numero} del {data}', (SELECT id FROM co_pianodeiconti3 WHERE descrizione = 'Banca C/C (conto anticipi)')),
|
||||
(NULL, 2, 'Accredito anticipo', 'Accredito anticipo fattura num. {numero} del {data}', (SELECT id FROM co_pianodeiconti3 WHERE descrizione = 'Banca C/C'));
|
||||
|
||||
-- Segmenti per modulo scadenzario
|
||||
INSERT INTO `zz_segments` (`id`, `id_module`, `name`, `clause`, `position`, `pattern`, `note`, `predefined`, `predefined_accredito`, `predefined_addebito`, `is_fiscale`) VALUES
|
||||
(NULL, (SELECT id FROM zz_modules WHERE name='Scadenzario'), 'Scadenzario totale', '1=1', 'WHR', '####', '', 1, 0, 0, 1),
|
||||
(NULL, (SELECT id FROM zz_modules WHERE name='Scadenzario'), 'Scadenzario clienti', '((SELECT dir FROM co_tipidocumento WHERE co_tipidocumento.id=co_documenti.idtipodocumento)=\'entrata\')', 'WHR', '####', '', 0, 0, 0, 0),
|
||||
(NULL, (SELECT id FROM zz_modules WHERE name='Scadenzario'), 'Scadenzario fornitori', '((SELECT dir FROM co_tipidocumento WHERE co_tipidocumento.id=co_documenti.idtipodocumento)=\'uscita\')', 'WHR', '####', '', 0, 0, 0, 0),
|
||||
(NULL, (SELECT id FROM zz_modules WHERE name='Scadenzario'), 'Scadenzario Ri.Ba.', 'co_pagamenti.riba=1', 'WHR', '####', '', 0, 0, 0, 0);
|
||||
|
||||
-- Fix vari
|
||||
ALTER TABLE `co_righe_documenti` CHANGE `um` `um` VARCHAR(20) NULL;
|
||||
UPDATE `co_righe_documenti` SET `um` = NULL WHERE `um` = '';
|
||||
ALTER TABLE `co_righe_documenti` CHANGE `idritenutaacconto` `idritenutaacconto` INT(11) NULL, CHANGE `idrivalsainps` `idrivalsainps` INT(11) NULL;
|
||||
UPDATE `co_righe_documenti` SET `idritenutaacconto` = NULL WHERE `idritenutaacconto` = 0;
|
||||
UPDATE `co_righe_documenti` SET `idrivalsainps` = NULL WHERE `idrivalsainps` = 0;
|
||||
|
||||
ALTER TABLE `co_righe_preventivi` CHANGE `um` `um` VARCHAR(20) NULL;
|
||||
UPDATE `co_righe_preventivi` SET `um` = NULL WHERE `um` = '';
|
||||
|
||||
ALTER TABLE `co_righe_contratti` CHANGE `um` `um` VARCHAR(20) NULL;
|
||||
UPDATE `co_righe_contratti` SET `um` = NULL WHERE `um` = '';
|
||||
|
||||
ALTER TABLE `or_righe_ordini` CHANGE `um` `um` VARCHAR(20) NULL;
|
||||
UPDATE `or_righe_ordini` SET `um` = NULL WHERE `um` = '';
|
||||
|
||||
ALTER TABLE `dt_righe_ddt` CHANGE `um` `um` VARCHAR(20) NULL;
|
||||
UPDATE `dt_righe_ddt` SET `um` = NULL WHERE `um` = '';
|
||||
|
||||
ALTER TABLE `in_righe_interventi` CHANGE `um` `um` VARCHAR(20) NULL;
|
||||
UPDATE `in_righe_interventi` SET `um` = NULL WHERE `um` = '';
|
||||
|
||||
ALTER TABLE `mg_articoli_interventi` CHANGE `um` `um` VARCHAR(20) NULL;
|
||||
UPDATE `mg_articoli_interventi` SET `um` = NULL WHERE `um` = '';
|
||||
|
||||
|
Reference in New Issue
Block a user