mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-23 06:47:40 +01:00
Modifica modutil per permettere aggiunta custom
This commit is contained in:
parent
09fe13d5d9
commit
0c41dc9bb8
@ -22,20 +22,38 @@
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function customStructure()
|
||||
{
|
||||
$results = [];
|
||||
|
||||
$dirs = [
|
||||
'modules',
|
||||
'templates',
|
||||
'plugins',
|
||||
];
|
||||
if (!function_exists('customStructure')) {
|
||||
function customStructure()
|
||||
{
|
||||
$results = [];
|
||||
|
||||
// Controlli di personalizzazione fisica
|
||||
foreach ($dirs as $dir) {
|
||||
$files = glob(base_dir().'/'.$dir.'/*/custom/*.{php,html}', GLOB_BRACE);
|
||||
$recursive_files = glob(base_dir().'/'.$dir.'/*/custom/**/*.{php,html}', GLOB_BRACE);
|
||||
$dirs = [
|
||||
'modules',
|
||||
'templates',
|
||||
'plugins',
|
||||
];
|
||||
|
||||
// Controlli di personalizzazione fisica
|
||||
foreach ($dirs as $dir) {
|
||||
$files = glob(base_dir().'/'.$dir.'/*/custom/*.{php,html}', GLOB_BRACE);
|
||||
$recursive_files = glob(base_dir().'/'.$dir.'/*/custom/**/*.{php,html}', GLOB_BRACE);
|
||||
|
||||
$files = array_merge($files, $recursive_files);
|
||||
|
||||
foreach ($files as $file) {
|
||||
$file = str_replace(base_dir().'/', '', $file);
|
||||
$result = explode('/custom/', $file)[0];
|
||||
|
||||
if (!in_array($result, $results)) {
|
||||
$results[] = $result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Gestione cartella include
|
||||
$files = glob(base_dir().'/include/custom/*.{php,html}', GLOB_BRACE);
|
||||
$recursive_files = glob(base_dir().'/include/custom/**/*.{php,html}', GLOB_BRACE);
|
||||
|
||||
$files = array_merge($files, $recursive_files);
|
||||
|
||||
@ -47,24 +65,9 @@ function customStructure()
|
||||
$results[] = $result;
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
// Gestione cartella include
|
||||
$files = glob(base_dir().'/include/custom/*.{php,html}', GLOB_BRACE);
|
||||
$recursive_files = glob(base_dir().'/include/custom/**/*.{php,html}', GLOB_BRACE);
|
||||
|
||||
$files = array_merge($files, $recursive_files);
|
||||
|
||||
foreach ($files as $file) {
|
||||
$file = str_replace(base_dir().'/', '', $file);
|
||||
$result = explode('/custom/', $file)[0];
|
||||
|
||||
if (!in_array($result, $results)) {
|
||||
$results[] = $result;
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,20 +75,22 @@ function customStructure()
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function customTables()
|
||||
{
|
||||
$tables = include base_dir().'/update/tables.php';
|
||||
if (!function_exists('customTables')) {
|
||||
function customTables()
|
||||
{
|
||||
$tables = include base_dir().'/update/tables.php';
|
||||
|
||||
$names = [];
|
||||
foreach ($tables as $table) {
|
||||
$names[] = prepare($table);
|
||||
$names = [];
|
||||
foreach ($tables as $table) {
|
||||
$names[] = prepare($table);
|
||||
}
|
||||
|
||||
$database = database();
|
||||
|
||||
$results = $database->fetchArray('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '.prepare($database->getDatabaseName()).' AND TABLE_NAME NOT IN ('.implode(',', $names).") AND TABLE_NAME != 'updates'");
|
||||
|
||||
return array_column($results, 'TABLE_NAME');
|
||||
}
|
||||
|
||||
$database = database();
|
||||
|
||||
$results = $database->fetchArray('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '.prepare($database->getDatabaseName()).' AND TABLE_NAME NOT IN ('.implode(',', $names).") AND TABLE_NAME != 'updates'");
|
||||
|
||||
return array_column($results, 'TABLE_NAME');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -93,44 +98,49 @@ function customTables()
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function customDatabase()
|
||||
{
|
||||
$database = database();
|
||||
$modules = $database->fetchArray("SELECT name, CONCAT('modules/', directory) AS directory FROM zz_modules WHERE options2 != ''");
|
||||
$plugins = $database->fetchArray("SELECT name, CONCAT('plugins/', directory) AS directory FROM zz_plugins WHERE options2 != ''");
|
||||
|
||||
$results = array_merge($modules, $plugins);
|
||||
if (!function_exists('customDatabase')) {
|
||||
function customDatabase()
|
||||
{
|
||||
$database = database();
|
||||
$modules = $database->fetchArray("SELECT name, CONCAT('modules/', directory) AS directory FROM zz_modules WHERE options2 != ''");
|
||||
$plugins = $database->fetchArray("SELECT name, CONCAT('plugins/', directory) AS directory FROM zz_plugins WHERE options2 != ''");
|
||||
|
||||
return $results;
|
||||
$results = array_merge($modules, $plugins);
|
||||
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
|
||||
function customComponents()
|
||||
{
|
||||
$database_check = customDatabase();
|
||||
$structure_check = customStructure();
|
||||
if (!function_exists('customComponents')) {
|
||||
function customComponents()
|
||||
{
|
||||
$database_check = customDatabase();
|
||||
$structure_check = customStructure();
|
||||
|
||||
$list = [];
|
||||
foreach ($database_check as $element) {
|
||||
$pos = array_search($element['directory'], $structure_check);
|
||||
$list = [];
|
||||
foreach ($database_check as $element) {
|
||||
$pos = array_search($element['directory'], $structure_check);
|
||||
|
||||
$list[] = [
|
||||
'path' => $element['directory'],
|
||||
'database' => true,
|
||||
'directory' => $pos !== false,
|
||||
];
|
||||
$list[] = [
|
||||
'path' => $element['directory'],
|
||||
'database' => true,
|
||||
'directory' => $pos !== false,
|
||||
];
|
||||
|
||||
if ($pos !== false) {
|
||||
unset($structure_check[$pos]);
|
||||
if ($pos !== false) {
|
||||
unset($structure_check[$pos]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($structure_check as $element) {
|
||||
$list[] = [
|
||||
'path' => $element,
|
||||
'database' => false,
|
||||
'directory' => true,
|
||||
];
|
||||
}
|
||||
foreach ($structure_check as $element) {
|
||||
$list[] = [
|
||||
'path' => $element,
|
||||
'database' => false,
|
||||
'directory' => true,
|
||||
];
|
||||
}
|
||||
|
||||
return $list;
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
}
|
@ -22,27 +22,29 @@ include_once __DIR__.'/../../core.php';
|
||||
/**
|
||||
* Funzione per aggiornare le sedi nei movimenti di magazzino.
|
||||
*/
|
||||
function aggiorna_sedi_movimenti($module, $id)
|
||||
{
|
||||
$dbo = database();
|
||||
if (!function_exists('aggiorna_sedi_movimenti')) {
|
||||
function aggiorna_sedi_movimenti($module, $id)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
if ($module == 'ddt') {
|
||||
$rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione, dir FROM dt_ddt INNER JOIN dt_tipiddt ON dt_tipiddt.id = dt_ddt.idtipoddt WHERE dt_ddt.id='.prepare($id));
|
||||
if ($module == 'ddt') {
|
||||
$rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione, dir FROM dt_ddt INNER JOIN dt_tipiddt ON dt_tipiddt.id = dt_ddt.idtipoddt WHERE dt_ddt.id='.prepare($id));
|
||||
|
||||
$idsede = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza'];
|
||||
$idsede = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza'];
|
||||
|
||||
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare('Modules\DDT\DDT').' AND reference_id='.prepare($id));
|
||||
} elseif ($module == 'documenti') {
|
||||
$rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione, dir FROM co_documenti INNER JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento WHERE co_documenti.id='.prepare($id));
|
||||
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare('Modules\DDT\DDT').' AND reference_id='.prepare($id));
|
||||
} elseif ($module == 'documenti') {
|
||||
$rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione, dir FROM co_documenti INNER JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento WHERE co_documenti.id='.prepare($id));
|
||||
|
||||
$idsede = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza'];
|
||||
$idsede = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza'];
|
||||
|
||||
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare('Modules\Fatture\Fattura').' AND reference_id='.prepare($id));
|
||||
} elseif ($module == 'interventi') {
|
||||
$rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione FROM in_interventi WHERE in_interventi.id='.prepare($id));
|
||||
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare('Modules\Fatture\Fattura').' AND reference_id='.prepare($id));
|
||||
} elseif ($module == 'interventi') {
|
||||
$rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione FROM in_interventi WHERE in_interventi.id='.prepare($id));
|
||||
|
||||
$idsede = $rs[0]['idsede_partenza'];
|
||||
$idsede = $rs[0]['idsede_partenza'];
|
||||
|
||||
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare('Modules\Interventi\Intervento').' AND reference_id='.prepare($id));
|
||||
$dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE reference_type='.prepare('Modules\Interventi\Intervento').' AND reference_id='.prepare($id));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -17,185 +17,191 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
function renderChecklist($check, $level = 1, $parent = 0)
|
||||
{
|
||||
global $structure;
|
||||
if (!function_exists('renderChecklist')) {
|
||||
function renderChecklist($check, $level = 1, $parent = 0)
|
||||
{
|
||||
global $structure;
|
||||
|
||||
$user = auth()->getUser();
|
||||
$enabled = $check->assignedUsers ? ($check->assignedUsers->pluck('id')->search($user->id) !== false || ($user->idgruppo) == 1) : true;
|
||||
$user = auth()->getUser();
|
||||
$enabled = $check->assignedUsers ? ($check->assignedUsers->pluck('id')->search($user->id) !== false || ($user->idgruppo) == 1) : true;
|
||||
|
||||
$margin = ($level * 20);
|
||||
$margin = ($level * 20);
|
||||
|
||||
$result = '
|
||||
<tr id="check_'.$check->id.'" data-id="'.$check->id.'" class="sortablerow sonof_'.$parent.'" >
|
||||
<td style="padding-top:0px;padding-bottom:0px;border-top:0px;">
|
||||
<table class="table" style="margin-bottom:0px;">
|
||||
<tr>';
|
||||
if ($check->is_titolo) {
|
||||
$result .= '
|
||||
<td style="width:40px;"></td>
|
||||
<td colspan="3" style="border-top:0px;">
|
||||
<span class="text unblockable"><big>'.$check->content.'</big></span>
|
||||
</td>';
|
||||
} else {
|
||||
$result .= '
|
||||
<td style="width:40px;text-align:center;border-top:0px;border-left:3px solid #eaeaea;">
|
||||
<input type="checkbox" class="checkbox unblockable" data-id="'.$check->id.'" value="'.(!empty($check->checked_at) ? '1' : '0').'" '.(!empty($check->checked_at) ? 'checked' : '').' '.(!$enabled ? 'disabled' : '').'>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="border-top:0px;">
|
||||
<span class="text unblockable" style="'.(!empty($check->checked_at) ? 'text-decoration:line-through;' : '').'">'.$check->content.' </span>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="border-top:0px;">
|
||||
<span class="label label-default pull-right verificato '.(!$check->checked_at ? 'hidden' : '').'" style="margin-right:5px;padding:6px 8px;">'.(!empty($check->checked_at) ? tr('Verificato da _NAME_ il _DATE_', [
|
||||
'_NAME_' => $check->checkUser->username,
|
||||
'_DATE_' => timestampFormat($check->checked_at),
|
||||
]) : '').'
|
||||
</span>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="width:500px;border-top:0px;">
|
||||
{[ "type": "textarea", "class": "unblockable", "name": "note_checklist", "placeholder": "'.tr('Note').'...", "id": "note_'.$check->id.'", "value": "'.$check->note.'" ]}
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="width:150px;border-top:0px;">
|
||||
<button class="btn btn-default btn-xs '.(!$enabled ? 'disabled' : '').' save-nota" onclick="saveNota(\''.$check->id.'\')"><i class="fa fa-check"></i> '.tr('Salva nota').'</button>';
|
||||
|
||||
if (intval($check->assignedUsers->pluck('id')->toArray()) > 0) {
|
||||
$result .= ' <span class="label label-info pull-right" style="padding:6px 8px;" data-toggle="tooltip" title="Assegnato a '.implode(', ', $check->assignedUsers->pluck('username')->toArray()).'"><i class="fa fa-user"></i></span>';
|
||||
$result = '
|
||||
<tr id="check_'.$check->id.'" data-id="'.$check->id.'" class="sortablerow sonof_'.$parent.'" >
|
||||
<td style="padding-top:0px;padding-bottom:0px;border-top:0px;">
|
||||
<table class="table" style="margin-bottom:0px;">
|
||||
<tr>';
|
||||
if ($check->is_titolo) {
|
||||
$result .= '
|
||||
<td style="width:40px;"></td>
|
||||
<td colspan="3" style="border-top:0px;">
|
||||
<span class="text unblockable"><big>'.$check->content.'</big></span>
|
||||
</td>';
|
||||
} else {
|
||||
$result .= ' <span class="label label-danger pull-right" style="padding:6px 8px;" data-toggle="tooltip" title="'.tr('Nessun utente assegnato').'"><i class="fa fa-user-times"></i></span>';
|
||||
$result .= '
|
||||
<td style="width:40px;text-align:center;border-top:0px;border-left:3px solid #eaeaea;">
|
||||
<input type="checkbox" class="checkbox unblockable" data-id="'.$check->id.'" value="'.(!empty($check->checked_at) ? '1' : '0').'" '.(!empty($check->checked_at) ? 'checked' : '').' '.(!$enabled ? 'disabled' : '').'>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="border-top:0px;">
|
||||
<span class="text unblockable" style="'.(!empty($check->checked_at) ? 'text-decoration:line-through;' : '').'">'.$check->content.' </span>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="border-top:0px;">
|
||||
<span class="label label-default pull-right verificato '.(!$check->checked_at ? 'hidden' : '').'" style="margin-right:5px;padding:6px 8px;">'.(!empty($check->checked_at) ? tr('Verificato da _NAME_ il _DATE_', [
|
||||
'_NAME_' => $check->checkUser->username,
|
||||
'_DATE_' => timestampFormat($check->checked_at),
|
||||
]) : '').'
|
||||
</span>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="width:500px;border-top:0px;">
|
||||
{[ "type": "textarea", "class": "unblockable", "name": "note_checklist", "placeholder": "'.tr('Note').'...", "id": "note_'.$check->id.'", "value": "'.$check->note.'" ]}
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="width:150px;border-top:0px;">
|
||||
<button class="btn btn-default btn-xs '.(!$enabled ? 'disabled' : '').' save-nota" onclick="saveNota(\''.$check->id.'\')"><i class="fa fa-check"></i> '.tr('Salva nota').'</button>';
|
||||
|
||||
if (intval($check->assignedUsers->pluck('id')->toArray()) > 0) {
|
||||
$result .= ' <span class="label label-info pull-right" style="padding:6px 8px;" data-toggle="tooltip" title="Assegnato a '.implode(', ', $check->assignedUsers->pluck('username')->toArray()).'"><i class="fa fa-user"></i></span>';
|
||||
} else {
|
||||
$result .= ' <span class="label label-danger pull-right" style="padding:6px 8px;" data-toggle="tooltip" title="'.tr('Nessun utente assegnato').'"><i class="fa fa-user-times"></i></span>';
|
||||
}
|
||||
|
||||
$result .= '
|
||||
</td>';
|
||||
}
|
||||
|
||||
$result .= '
|
||||
</td>';
|
||||
}
|
||||
<td style="width:10px;text-align:center;border-top:0px;">
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-warning btn-xs '.(!$enabled ? 'disabled' : '').'" onclick="edit_check(\''.$check->id.'\')"><i class="fa fa-edit"></i></button>
|
||||
<button class="btn btn-danger btn-xs '.(!$enabled ? 'disabled' : '').'" onclick="delete_check(\''.$check->id.'\')"><i class="fa fa-trash"></i></button>
|
||||
<button class="btn btn-xs btn-default handle" title="Modifica ordine delle righe" draggable="true"><i class="fa fa-sort"></i></button>
|
||||
</div>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="width:10px;text-align:center;border-top:0px;">
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-warning btn-xs '.(!$enabled ? 'disabled' : '').'" onclick="edit_check(\''.$check->id.'\')"><i class="fa fa-edit"></i></button>
|
||||
<button class="btn btn-danger btn-xs '.(!$enabled ? 'disabled' : '').'" onclick="delete_check(\''.$check->id.'\')"><i class="fa fa-trash"></i></button>
|
||||
<button class="btn btn-xs btn-default handle" title="Modifica ordine delle righe" draggable="true"><i class="fa fa-sort"></i></button>
|
||||
</div>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
</tr>';
|
||||
|
||||
if (sizeof($check->children) > 0) {
|
||||
$result .= '
|
||||
<tr>
|
||||
<td colspan="5" style="padding-left:'.$margin.'px;padding-right:10px;padding-top:0px;padding-bottom:0px;border-top:0px;">
|
||||
<table class="table" style="margin-bottom:0px;">
|
||||
<tbody class="sort" data-sonof="'.$check->id.'">';
|
||||
$children = $structure->checks()->where('id_parent', $check->id)->orderBy('order')->get();
|
||||
</tr>';
|
||||
|
||||
if (sizeof($check->children) > 0) {
|
||||
$result .= '
|
||||
<tr>
|
||||
<td colspan="5" style="padding-left:'.$margin.'px;padding-right:10px;padding-top:0px;padding-bottom:0px;border-top:0px;">
|
||||
<table class="table" style="margin-bottom:0px;">
|
||||
<tbody class="sort" data-sonof="'.$check->id.'">';
|
||||
$children = $structure->checks()->where('id_parent', $check->id)->orderBy('order')->get();
|
||||
foreach ($children as $child) {
|
||||
$result .= renderChecklist($child, $level + 1, $check->id);
|
||||
}
|
||||
$result .= '
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
$result .= '
|
||||
</table>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('renderChecklistInserimento')) {
|
||||
function renderChecklistInserimento($check, $level = 1, $parent = 0)
|
||||
{
|
||||
global $record;
|
||||
|
||||
$margin = ($level * 20);
|
||||
|
||||
$result = '
|
||||
<tr id="check_'.$check->id.'" data-id="'.$check->id.'" class="sortablerow sonof_'.$parent.'" >
|
||||
<td style="padding-top:0px;padding-bottom:0px;border-top:0px;">
|
||||
<table class="table" style="margin-bottom:0px;">
|
||||
<tr>';
|
||||
|
||||
$result .= '
|
||||
<td style="width:40px;border-top:0px;border-left:3px solid #eaeaea;">';
|
||||
$result .= '
|
||||
<span class="text">'.$check->content.'</span>';
|
||||
$result .= '
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="width:40px;text-align:right;border-top:0px;">
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-warning btn-xs" onclick="edit_check(\''.$check->id.'\')"><i class="fa fa-edit"></i></button>
|
||||
<button class="btn btn-danger btn-xs" onclick="delete_check(\''.$check->id.'\')"><i class="fa fa-trash"></i></button>
|
||||
</div>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
</tr>';
|
||||
|
||||
if (sizeof($check->children) > 0) {
|
||||
$result .= '
|
||||
<tr>
|
||||
<td colspan="4" style="padding-left:'.$margin.'px;padding-right:0px;padding-top:0px;padding-bottom:0px;border-top:0px;">
|
||||
<table class="table" style="margin-bottom:0px;">
|
||||
<tbody class="sort" data-sonof="'.$check->id.'">';
|
||||
$children = $record->checks()->where('id_parent', $check->id)->orderBy('order')->get();
|
||||
foreach ($children as $child) {
|
||||
$result .= renderChecklistInserimento($child, $level + 1, $check->id);
|
||||
}
|
||||
$result .= '
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
$result .= '
|
||||
</table>
|
||||
</td>
|
||||
|
||||
<td style="width:40px;text-align:center;border-top:0px;">
|
||||
<button class="btn btn-xs btn-default handle" title="Modifica ordine delle righe" draggable="true">
|
||||
<i class="fa fa-sort"></i>
|
||||
</button>
|
||||
</td>
|
||||
|
||||
</tr>';
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('renderChecklistHtml')) {
|
||||
function renderChecklistHtml($check, $level = 0)
|
||||
{
|
||||
$user = auth()->getUser();
|
||||
$enabled = $check->assignedUsers ? $check->assignedUsers->pluck('id')->search($user->id) !== false : true;
|
||||
|
||||
$width = 10 + 20 * $level;
|
||||
|
||||
$result = '
|
||||
<tr>
|
||||
<td class="text-center" style="width:30px;">
|
||||
'.(!empty($check->checked_at) ? '<img src="'.ROOTDIR.'/templates/interventi/check.png" style="width:10px;">' : '').'
|
||||
</td>
|
||||
<td style="padding-left:'.$width.'px;">
|
||||
<span class="text"><b>'.$check->content.'</b>'.(!empty($check->value) ? ': '.$check->value : '').'</span>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$children = $check->children;
|
||||
foreach ($children as $child) {
|
||||
$result .= renderChecklist($child, $level + 1, $check->id);
|
||||
$result .= renderChecklistHtml($child, $level + 1);
|
||||
}
|
||||
$result .= '
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
$result .= '
|
||||
</table>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
function renderChecklistInserimento($check, $level = 1, $parent = 0)
|
||||
{
|
||||
global $record;
|
||||
|
||||
$margin = ($level * 20);
|
||||
|
||||
$result = '
|
||||
<tr id="check_'.$check->id.'" data-id="'.$check->id.'" class="sortablerow sonof_'.$parent.'" >
|
||||
<td style="padding-top:0px;padding-bottom:0px;border-top:0px;">
|
||||
<table class="table" style="margin-bottom:0px;">
|
||||
<tr>';
|
||||
|
||||
$result .= '
|
||||
<td style="width:40px;border-top:0px;border-left:3px solid #eaeaea;">';
|
||||
$result .= '
|
||||
<span class="text">'.$check->content.'</span>';
|
||||
$result .= '
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
<td style="width:40px;text-align:right;border-top:0px;">
|
||||
<div class="input-group-btn">
|
||||
<button class="btn btn-warning btn-xs" onclick="edit_check(\''.$check->id.'\')"><i class="fa fa-edit"></i></button>
|
||||
<button class="btn btn-danger btn-xs" onclick="delete_check(\''.$check->id.'\')"><i class="fa fa-trash"></i></button>
|
||||
</div>
|
||||
</td>';
|
||||
|
||||
$result .= '
|
||||
</tr>';
|
||||
|
||||
if (sizeof($check->children) > 0) {
|
||||
$result .= '
|
||||
<tr>
|
||||
<td colspan="4" style="padding-left:'.$margin.'px;padding-right:0px;padding-top:0px;padding-bottom:0px;border-top:0px;">
|
||||
<table class="table" style="margin-bottom:0px;">
|
||||
<tbody class="sort" data-sonof="'.$check->id.'">';
|
||||
$children = $record->checks()->where('id_parent', $check->id)->orderBy('order')->get();
|
||||
foreach ($children as $child) {
|
||||
$result .= renderChecklistInserimento($child, $level + 1, $check->id);
|
||||
}
|
||||
$result .= '
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
|
||||
$result .= '
|
||||
</table>
|
||||
</td>
|
||||
|
||||
<td style="width:40px;text-align:center;border-top:0px;">
|
||||
<button class="btn btn-xs btn-default handle" title="Modifica ordine delle righe" draggable="true">
|
||||
<i class="fa fa-sort"></i>
|
||||
</button>
|
||||
</td>
|
||||
|
||||
</tr>';
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
function renderChecklistHtml($check, $level = 0)
|
||||
{
|
||||
$user = auth()->getUser();
|
||||
$enabled = $check->assignedUsers ? $check->assignedUsers->pluck('id')->search($user->id) !== false : true;
|
||||
|
||||
$width = 10 + 20 * $level;
|
||||
|
||||
$result = '
|
||||
<tr>
|
||||
<td class="text-center" style="width:30px;">
|
||||
'.(!empty($check->checked_at) ? '<img src="'.ROOTDIR.'/templates/interventi/check.png" style="width:10px;">' : '').'
|
||||
</td>
|
||||
<td style="padding-left:'.$width.'px;">
|
||||
<span class="text"><b>'.$check->content.'</b>'.(!empty($check->value) ? ': '.$check->value : '').'</span>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$children = $check->children;
|
||||
foreach ($children as $child) {
|
||||
$result .= renderChecklistHtml($child, $level + 1);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
@ -7,22 +7,24 @@
|
||||
*
|
||||
* @return array|array[]
|
||||
*/
|
||||
function cartesian($input)
|
||||
{
|
||||
$result = [[]];
|
||||
if (!function_exists('cartesian')) {
|
||||
function cartesian($input)
|
||||
{
|
||||
$result = [[]];
|
||||
|
||||
foreach ($input as $key => $values) {
|
||||
$append = [];
|
||||
foreach ($input as $key => $values) {
|
||||
$append = [];
|
||||
|
||||
foreach ($result as $product) {
|
||||
foreach ($values as $item) {
|
||||
$product[$key] = $item;
|
||||
$append[] = $product;
|
||||
foreach ($result as $product) {
|
||||
foreach ($values as $item) {
|
||||
$product[$key] = $item;
|
||||
$append[] = $product;
|
||||
}
|
||||
}
|
||||
|
||||
$result = $append;
|
||||
}
|
||||
|
||||
$result = $append;
|
||||
return $result;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
@ -25,19 +25,23 @@ use Modules\Interventi\Intervento;
|
||||
/**
|
||||
* Calcolo imponibile contratto (totale_righe - sconto).
|
||||
*/
|
||||
function get_imponibile_contratto($idcontratto)
|
||||
{
|
||||
$contratto = Contratto::find($idcontratto);
|
||||
if (!function_exists('get_imponibile_contratto')) {
|
||||
function get_imponibile_contratto($idcontratto)
|
||||
{
|
||||
$contratto = Contratto::find($idcontratto);
|
||||
|
||||
return $contratto->totale_imponibile;
|
||||
return $contratto->totale_imponibile;
|
||||
}
|
||||
}
|
||||
|
||||
function get_totale_interventi_contratto($idcontratto)
|
||||
{
|
||||
$interventi = Intervento::where('id_contratto', $idcontratto)->get();
|
||||
$array_interventi = $interventi->toArray();
|
||||
if (!function_exists('get_totale_interventi_contratto')) {
|
||||
function get_totale_interventi_contratto($idcontratto)
|
||||
{
|
||||
$interventi = Intervento::where('id_contratto', $idcontratto)->get();
|
||||
$array_interventi = $interventi->toArray();
|
||||
|
||||
$totale = sum(array_column($array_interventi, 'totale_imponibile'));
|
||||
$totale = sum(array_column($array_interventi, 'totale_imponibile'));
|
||||
|
||||
return $totale;
|
||||
}
|
||||
return $totale;
|
||||
}
|
||||
}
|
@ -27,11 +27,13 @@ use Util\Generator;
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_new_numeroddt($data)
|
||||
{
|
||||
global $dir;
|
||||
if (!function_exists('get_new_numeroddt')) {
|
||||
function get_new_numeroddt($data)
|
||||
{
|
||||
global $dir;
|
||||
|
||||
return DDT::getNextNumero($data, $dir);
|
||||
return DDT::getNextNumero($data, $dir);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -39,12 +41,14 @@ function get_new_numeroddt($data)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_new_numerosecondarioddt($data)
|
||||
{
|
||||
global $dir;
|
||||
global $id_segment;
|
||||
if (!function_exists('get_new_numerosecondarioddt')) {
|
||||
function get_new_numerosecondarioddt($data)
|
||||
{
|
||||
global $dir;
|
||||
global $id_segment;
|
||||
|
||||
return DDT::getNextNumeroSecondario($data, $dir, $id_segment);
|
||||
return DDT::getNextNumeroSecondario($data, $dir, $id_segment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -52,11 +56,13 @@ function get_new_numerosecondarioddt($data)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_imponibile_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
if (!function_exists('get_imponibile_ddt')) {
|
||||
function get_imponibile_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
|
||||
return $ddt->imponibile;
|
||||
return $ddt->imponibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -64,23 +70,26 @@ function get_imponibile_ddt($id_ddt)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_totale_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
if (!function_exists('get_totale_ddt')) {
|
||||
function get_totale_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
|
||||
return $ddt->totale;
|
||||
return $ddt->totale;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcolo netto a pagare ddt (totale - ritenute - bolli).
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_netto_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
if (!function_exists('get_netto_ddt')) {
|
||||
function get_netto_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
|
||||
return $ddt->netto;
|
||||
return $ddt->netto;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -88,11 +97,13 @@ function get_netto_ddt($id_ddt)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_ivadetraibile_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
if (!function_exists('get_ivadetraibile_ddt')) {
|
||||
function get_ivadetraibile_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
|
||||
return $ddt->iva_detraibile;
|
||||
return $ddt->iva_detraibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -100,11 +111,13 @@ function get_ivadetraibile_ddt($id_ddt)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_ivaindetraibile_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
if (!function_exists('get_ivaindetraibile_ddt')) {
|
||||
function get_ivaindetraibile_ddt($id_ddt)
|
||||
{
|
||||
$ddt = DDT::find($id_ddt);
|
||||
|
||||
return $ddt->iva_indetraibile;
|
||||
return $ddt->iva_indetraibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -115,148 +128,154 @@ function get_ivaindetraibile_ddt($id_ddt)
|
||||
* $idritenutaacconto int ID della ritenuta d'acconto da applicare. Se omesso viene utilizzata quella impostata di default
|
||||
* $bolli float Costi aggiuntivi delle marche da bollo. Se omesso verrà usata la cifra predefinita.
|
||||
*/
|
||||
function ricalcola_costiagg_ddt($idddt, $idrivalsainps = '', $idritenutaacconto = '', $bolli = '')
|
||||
{
|
||||
global $dir;
|
||||
if (!function_exists('ricalcola_costiagg_ddt')) {
|
||||
function ricalcola_costiagg_ddt($idddt, $idrivalsainps = '', $idritenutaacconto = '', $bolli = '')
|
||||
{
|
||||
global $dir;
|
||||
|
||||
$dbo = database();
|
||||
$dbo = database();
|
||||
|
||||
// Se ci sono righe nel ddt faccio i conteggi, altrimenti azzero gli sconti e le spese aggiuntive (inps, ritenuta, marche da bollo)
|
||||
$query = "SELECT COUNT(id) AS righe FROM dt_righe_ddt WHERE idddt='$idddt'";
|
||||
$rs = $dbo->fetchArray($query);
|
||||
if ($rs[0]['righe'] > 0) {
|
||||
$totale_imponibile = get_imponibile_ddt($idddt);
|
||||
$totale_ddt = get_totale_ddt($idddt);
|
||||
|
||||
// Leggo gli id dei costi aggiuntivi
|
||||
if ($dir == 'uscita') {
|
||||
$query2 = "SELECT idrivalsainps, idritenutaacconto, bollo FROM dt_ddt WHERE id='$idddt'";
|
||||
$rs2 = $dbo->fetchArray($query2);
|
||||
$idrivalsainps = $rs2[0]['idrivalsainps'];
|
||||
$idritenutaacconto = $rs2[0]['idritenutaacconto'];
|
||||
$bollo = $rs2[0]['bollo'];
|
||||
}
|
||||
|
||||
// Leggo la rivalsa inps se c'è (per i ddt di vendita lo leggo dalle impostazioni)
|
||||
if ($dir == 'entrata') {
|
||||
if (!empty($idrivalsainps)) {
|
||||
$idrivalsainps = setting('Cassa previdenziale predefinita');
|
||||
}
|
||||
}
|
||||
|
||||
$query = "SELECT percentuale FROM co_rivalse WHERE id='".$idrivalsainps."'";
|
||||
// Se ci sono righe nel ddt faccio i conteggi, altrimenti azzero gli sconti e le spese aggiuntive (inps, ritenuta, marche da bollo)
|
||||
$query = "SELECT COUNT(id) AS righe FROM dt_righe_ddt WHERE idddt='$idddt'";
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$rivalsainps = $totale_imponibile / 100 * $rs[0]['percentuale'];
|
||||
if ($rs[0]['righe'] > 0) {
|
||||
$totale_imponibile = get_imponibile_ddt($idddt);
|
||||
$totale_ddt = get_totale_ddt($idddt);
|
||||
|
||||
// Leggo l'iva predefinita per calcolare l'iva aggiuntiva sulla rivalsa inps
|
||||
$qi = "SELECT percentuale FROM co_iva WHERE id='".setting('Iva predefinita')."'";
|
||||
$rsi = $dbo->fetchArray($qi);
|
||||
$iva_rivalsainps = $rivalsainps / 100 * $rsi[0]['percentuale'];
|
||||
// Leggo gli id dei costi aggiuntivi
|
||||
if ($dir == 'uscita') {
|
||||
$query2 = "SELECT idrivalsainps, idritenutaacconto, bollo FROM dt_ddt WHERE id='$idddt'";
|
||||
$rs2 = $dbo->fetchArray($query2);
|
||||
$idrivalsainps = $rs2[0]['idrivalsainps'];
|
||||
$idritenutaacconto = $rs2[0]['idritenutaacconto'];
|
||||
$bollo = $rs2[0]['bollo'];
|
||||
}
|
||||
|
||||
// Aggiorno la rivalsa inps
|
||||
$dbo->query("UPDATE dt_ddt SET rivalsainps='$rivalsainps', iva_rivalsainps='$iva_rivalsainps' WHERE id='$idddt'");
|
||||
|
||||
$totale_ddt = get_totale_ddt($idddt);
|
||||
|
||||
// Leggo la ritenuta d'acconto se c'è (per i ddt di vendita lo leggo dalle impostazioni)
|
||||
if (!empty($idritenutaacconto)) {
|
||||
// Leggo la rivalsa inps se c'è (per i ddt di vendita lo leggo dalle impostazioni)
|
||||
if ($dir == 'entrata') {
|
||||
$idritenutaacconto = setting("Ritenuta d'acconto predefinita");
|
||||
}
|
||||
}
|
||||
|
||||
$query = "SELECT percentuale FROM co_ritenutaacconto WHERE id='".$idritenutaacconto."'";
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$ritenutaacconto = $totale_ddt / 100 * $rs[0]['percentuale'];
|
||||
$netto_a_pagare = $totale_ddt - $ritenutaacconto;
|
||||
|
||||
// Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
|
||||
$bolli = str_replace(',', '.', $bolli);
|
||||
$bolli = floatval($bolli);
|
||||
if ($dir == 'uscita') {
|
||||
if ($bolli != 0.00) {
|
||||
$bolli = str_replace(',', '.', $bolli);
|
||||
if (abs($bolli) > 0 && abs($netto_a_pagare > setting("Soglia minima per l'applicazione della marca da bollo"))) {
|
||||
$marca_da_bollo = str_replace(',', '.', $bolli);
|
||||
} else {
|
||||
$marca_da_bollo = 0.00;
|
||||
if (!empty($idrivalsainps)) {
|
||||
$idrivalsainps = setting('Cassa previdenziale predefinita');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$marca_da_bollo = 0.00;
|
||||
}
|
||||
|
||||
$dbo->query("UPDATE dt_ddt SET ritenutaacconto='$ritenutaacconto', bollo='$marca_da_bollo' WHERE id='$idddt'");
|
||||
} else {
|
||||
$dbo->query("UPDATE dt_ddt SET ritenutaacconto='0', bollo='0', rivalsainps='0', iva_rivalsainps='0' WHERE id='$idddt'");
|
||||
$query = "SELECT percentuale FROM co_rivalse WHERE id='".$idrivalsainps."'";
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$rivalsainps = $totale_imponibile / 100 * $rs[0]['percentuale'];
|
||||
|
||||
// Leggo l'iva predefinita per calcolare l'iva aggiuntiva sulla rivalsa inps
|
||||
$qi = "SELECT percentuale FROM co_iva WHERE id='".setting('Iva predefinita')."'";
|
||||
$rsi = $dbo->fetchArray($qi);
|
||||
$iva_rivalsainps = $rivalsainps / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
// Aggiorno la rivalsa inps
|
||||
$dbo->query("UPDATE dt_ddt SET rivalsainps='$rivalsainps', iva_rivalsainps='$iva_rivalsainps' WHERE id='$idddt'");
|
||||
|
||||
$totale_ddt = get_totale_ddt($idddt);
|
||||
|
||||
// Leggo la ritenuta d'acconto se c'è (per i ddt di vendita lo leggo dalle impostazioni)
|
||||
if (!empty($idritenutaacconto)) {
|
||||
if ($dir == 'entrata') {
|
||||
$idritenutaacconto = setting("Ritenuta d'acconto predefinita");
|
||||
}
|
||||
}
|
||||
|
||||
$query = "SELECT percentuale FROM co_ritenutaacconto WHERE id='".$idritenutaacconto."'";
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$ritenutaacconto = $totale_ddt / 100 * $rs[0]['percentuale'];
|
||||
$netto_a_pagare = $totale_ddt - $ritenutaacconto;
|
||||
|
||||
// Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
|
||||
$bolli = str_replace(',', '.', $bolli);
|
||||
$bolli = floatval($bolli);
|
||||
if ($dir == 'uscita') {
|
||||
if ($bolli != 0.00) {
|
||||
$bolli = str_replace(',', '.', $bolli);
|
||||
if (abs($bolli) > 0 && abs($netto_a_pagare > setting("Soglia minima per l'applicazione della marca da bollo"))) {
|
||||
$marca_da_bollo = str_replace(',', '.', $bolli);
|
||||
} else {
|
||||
$marca_da_bollo = 0.00;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$marca_da_bollo = 0.00;
|
||||
}
|
||||
|
||||
$dbo->query("UPDATE dt_ddt SET ritenutaacconto='$ritenutaacconto', bollo='$marca_da_bollo' WHERE id='$idddt'");
|
||||
} else {
|
||||
$dbo->query("UPDATE dt_ddt SET ritenutaacconto='0', bollo='0', rivalsainps='0', iva_rivalsainps='0' WHERE id='$idddt'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce lo stato del ddt in base alle righe.
|
||||
*/
|
||||
function get_stato_ddt($idddt)
|
||||
{
|
||||
$dbo = database();
|
||||
if (!function_exists('get_stato_ddt')) {
|
||||
function get_stato_ddt($idddt)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT SUM(qta) AS qta, SUM(qta_evasa) AS qta_evasa FROM dt_righe_ddt GROUP BY idddt HAVING idddt='.prepare($idddt));
|
||||
$rs = $dbo->fetchArray('SELECT SUM(qta) AS qta, SUM(qta_evasa) AS qta_evasa FROM dt_righe_ddt GROUP BY idddt HAVING idddt='.prepare($idddt));
|
||||
|
||||
if ($rs[0]['qta'] == 0) {
|
||||
return 'Bozza';
|
||||
} else {
|
||||
if ($rs[0]['qta_evasa'] > 0) {
|
||||
if ($rs[0]['qta'] > $rs[0]['qta_evasa']) {
|
||||
return 'Parzialmente fatturato';
|
||||
} elseif ($rs[0]['qta'] == $rs[0]['qta_evasa']) {
|
||||
return 'Fatturato';
|
||||
}
|
||||
if ($rs[0]['qta'] == 0) {
|
||||
return 'Bozza';
|
||||
} else {
|
||||
return 'Evaso';
|
||||
if ($rs[0]['qta_evasa'] > 0) {
|
||||
if ($rs[0]['qta'] > $rs[0]['qta_evasa']) {
|
||||
return 'Parzialmente fatturato';
|
||||
} elseif ($rs[0]['qta'] == $rs[0]['qta_evasa']) {
|
||||
return 'Fatturato';
|
||||
}
|
||||
} else {
|
||||
return 'Evaso';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function verifica_numero_ddt(DDT $ddt)
|
||||
{
|
||||
global $dbo;
|
||||
if (!function_exists('verifica_numero_ddt')) {
|
||||
function verifica_numero_ddt(DDT $ddt)
|
||||
{
|
||||
global $dbo;
|
||||
|
||||
$data = $ddt->data;
|
||||
$tipo = $ddt->tipo;
|
||||
$dir = $ddt->direzione;
|
||||
$numero = ($dir == 'entrata' ? $ddt->numero_esterno : $ddt->numero);
|
||||
$campo = ($dir == 'entrata' ? 'numero_esterno' : 'numero');
|
||||
$data = $ddt->data;
|
||||
$tipo = $ddt->tipo;
|
||||
$dir = $ddt->direzione;
|
||||
$numero = ($dir == 'entrata' ? $ddt->numero_esterno : $ddt->numero);
|
||||
$campo = ($dir == 'entrata' ? 'numero_esterno' : 'numero');
|
||||
|
||||
if (empty($numero)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$documenti = DDT::where('idtipoddt', $tipo->id)
|
||||
->where('data', $data)
|
||||
->get();
|
||||
|
||||
// Recupero maschera per questo segmento
|
||||
$maschera = setting('Formato numero secondario ddt');
|
||||
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'dt_ddt', $campo, [
|
||||
'data < '.prepare(date('Y-m-d', strtotime($data))),
|
||||
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
|
||||
'idtipoddt = '.prepare($tipo->id),
|
||||
], $data);
|
||||
|
||||
do {
|
||||
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
|
||||
|
||||
$filtered = $documenti->reject(function ($item, $key) use ($numero) {
|
||||
return $item->numero_esterno == $numero;
|
||||
});
|
||||
|
||||
if ($documenti->count() == $filtered->count()) {
|
||||
return $numero;
|
||||
}
|
||||
|
||||
$documenti = $filtered;
|
||||
$ultimo = $numero;
|
||||
} while ($numero != $ddt->numero_esterno);
|
||||
|
||||
if (empty($numero)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$documenti = DDT::where('idtipoddt', $tipo->id)
|
||||
->where('data', $data)
|
||||
->get();
|
||||
|
||||
// Recupero maschera per questo segmento
|
||||
$maschera = setting('Formato numero secondario ddt');
|
||||
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'dt_ddt', $campo, [
|
||||
'data < '.prepare(date('Y-m-d', strtotime($data))),
|
||||
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
|
||||
'idtipoddt = '.prepare($tipo->id),
|
||||
], $data);
|
||||
|
||||
do {
|
||||
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
|
||||
|
||||
$filtered = $documenti->reject(function ($item, $key) use ($numero) {
|
||||
return $item->numero_esterno == $numero;
|
||||
});
|
||||
|
||||
if ($documenti->count() == $filtered->count()) {
|
||||
return $numero;
|
||||
}
|
||||
|
||||
$documenti = $filtered;
|
||||
$ultimo = $numero;
|
||||
} while ($numero != $ddt->numero_esterno);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@ -25,12 +25,14 @@ use Util\Generator;
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_new_numerofattura($data)
|
||||
{
|
||||
global $dir;
|
||||
global $id_segment;
|
||||
if (!function_exists('get_new_numerofattura')) {
|
||||
function get_new_numerofattura($data)
|
||||
{
|
||||
global $dir;
|
||||
global $id_segment;
|
||||
|
||||
return Fattura::getNextNumero($data, $dir, $id_segment);
|
||||
return Fattura::getNextNumero($data, $dir, $id_segment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -38,12 +40,15 @@ function get_new_numerofattura($data)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_new_numerosecondariofattura($data)
|
||||
{
|
||||
global $dir;
|
||||
global $id_segment;
|
||||
|
||||
return Fattura::getNextNumeroSecondario($data, $dir, $id_segment);
|
||||
if (!function_exists('get_new_numerosecondariofattura')) {
|
||||
function get_new_numerosecondariofattura($data)
|
||||
{
|
||||
global $dir;
|
||||
global $id_segment;
|
||||
|
||||
return Fattura::getNextNumeroSecondario($data, $dir, $id_segment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -51,11 +56,14 @@ function get_new_numerosecondariofattura($data)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_imponibile_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
|
||||
return $fattura->imponibile;
|
||||
if (!function_exists('get_imponibile_fattura')) {
|
||||
function get_imponibile_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
|
||||
return $fattura->imponibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -63,23 +71,26 @@ function get_imponibile_fattura($iddocumento)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_totale_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
if (!function_exists('get_totale_fattura')) {
|
||||
function get_totale_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
|
||||
return $fattura->totale;
|
||||
return $fattura->totale;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcolo netto a pagare fattura (totale - ritenute - bolli).
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_netto_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
if (!function_exists('get_netto_fattura')) {
|
||||
function get_netto_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
|
||||
return $fattura->netto;
|
||||
return $fattura->netto;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -87,11 +98,13 @@ function get_netto_fattura($iddocumento)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_ivadetraibile_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
if (!function_exists('get_ivadetraibile_fattura')) {
|
||||
function get_ivadetraibile_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
|
||||
return $fattura->iva_detraibile;
|
||||
return $fattura->iva_detraibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -99,11 +112,14 @@ function get_ivadetraibile_fattura($iddocumento)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_ivaindetraibile_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
|
||||
return $fattura->iva_indetraibile;
|
||||
if (!function_exists('get_ivaindetraibile_fattura')) {
|
||||
function get_ivaindetraibile_fattura($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
|
||||
return $fattura->iva_indetraibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -111,13 +127,14 @@ function get_ivaindetraibile_fattura($iddocumento)
|
||||
*
|
||||
* @deprecated 2.4.17
|
||||
*/
|
||||
function elimina_scadenze($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
if (!function_exists('elimina_scadenze')) {
|
||||
function elimina_scadenze($iddocumento)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
|
||||
$fattura->rimuoviScadenze();
|
||||
$fattura->rimuoviScadenze();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Funzione per ricalcolare lo scadenzario di una determinata fattura
|
||||
* $iddocumento string E' l'id del documento di cui ricalcolare lo scadenzario
|
||||
@ -126,11 +143,13 @@ function elimina_scadenze($iddocumento)
|
||||
*
|
||||
* @deprecated 2.4.17
|
||||
*/
|
||||
function aggiungi_scadenza($iddocumento, $pagamento = '', $pagato = false)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
if (!function_exists('aggiungi_scadenza')) {
|
||||
function aggiungi_scadenza($iddocumento, $pagamento = '', $pagato = false)
|
||||
{
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
|
||||
$fattura->registraScadenze($pagato);
|
||||
$fattura->registraScadenze($pagato);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -142,14 +161,17 @@ function aggiungi_scadenza($iddocumento, $pagamento = '', $pagato = false)
|
||||
*
|
||||
* @deprecated 2.4.17
|
||||
*/
|
||||
function elimina_movimenti($id_documento, $prima_nota = 0)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
$idmastrino = $dbo->fetchOne('SELECT idmastrino FROM co_movimenti WHERE iddocumento='.prepare($id_documento).' AND primanota='.prepare($prima_nota))['idmastrino'];
|
||||
if (!function_exists('elimina_movimenti')) {
|
||||
function elimina_movimenti($id_documento, $prima_nota = 0)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
$query2 = 'DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota='.prepare($prima_nota);
|
||||
$dbo->query($query2);
|
||||
$idmastrino = $dbo->fetchOne('SELECT idmastrino FROM co_movimenti WHERE iddocumento='.prepare($id_documento).' AND primanota='.prepare($prima_nota))['idmastrino'];
|
||||
|
||||
$query2 = 'DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota='.prepare($prima_nota);
|
||||
$dbo->query($query2);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -160,218 +182,221 @@ function elimina_movimenti($id_documento, $prima_nota = 0)
|
||||
*
|
||||
* @deprecated 2.4.17
|
||||
*/
|
||||
function aggiungi_movimento($iddocumento, $dir, $primanota = 0)
|
||||
{
|
||||
$dbo = database();
|
||||
if (!function_exists('aggiungi_movimento')) {
|
||||
function aggiungi_movimento($iddocumento, $dir, $primanota = 0)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
$fattura = Modules\Fatture\Fattura::find($iddocumento);
|
||||
$is_nota = $fattura->isNota();
|
||||
$fattura = Modules\Fatture\Fattura::find($iddocumento);
|
||||
$is_nota = $fattura->isNota();
|
||||
|
||||
// Totale marca da bollo, inps, ritenuta, idagente
|
||||
$query = 'SELECT data, bollo, ritenutaacconto, rivalsainps, split_payment FROM co_documenti WHERE id='.prepare($iddocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$totale_bolli = $is_nota ? -$rs[0]['bollo'] : $rs[0]['bollo'];
|
||||
$totale_ritenutaacconto = $is_nota ? -$rs[0]['ritenutaacconto'] : $rs[0]['ritenutaacconto'];
|
||||
$totale_ritenutacontributi = $is_nota ? -$fattura->totale_ritenuta_contributi : $fattura->totale_ritenuta_contributi;
|
||||
$totale_rivalsainps = $is_nota ? -$rs[0]['rivalsainps'] : $rs[0]['rivalsainps'];
|
||||
$data_documento = $rs[0]['data'];
|
||||
$split_payment = $rs[0]['split_payment'];
|
||||
|
||||
$netto_fattura = get_netto_fattura($iddocumento);
|
||||
$totale_fattura = get_totale_fattura($iddocumento);
|
||||
$totale_fattura = $is_nota ? -$totale_fattura : $totale_fattura;
|
||||
|
||||
$imponibile_fattura = get_imponibile_fattura($iddocumento);
|
||||
|
||||
// Calcolo l'iva della rivalsa inps
|
||||
$iva_rivalsainps = 0;
|
||||
|
||||
$rsr = $dbo->fetchArray('SELECT idiva, rivalsainps FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento));
|
||||
|
||||
for ($r = 0; $r < sizeof($rsr); ++$r) {
|
||||
$qi = 'SELECT percentuale FROM co_iva WHERE id='.prepare($rsr[$r]['idiva']);
|
||||
$rsi = $dbo->fetchArray($qi);
|
||||
$iva_rivalsainps += $rsr[$r]['rivalsainps'] / 100 * $rsi[0]['percentuale'];
|
||||
}
|
||||
|
||||
// Lettura iva indetraibile fattura
|
||||
$query = 'SELECT SUM(iva_indetraibile) AS iva_indetraibile FROM co_righe_documenti GROUP BY iddocumento HAVING iddocumento='.prepare($iddocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$iva_indetraibile_fattura = $is_nota ? -$rs[0]['iva_indetraibile'] : $rs[0]['iva_indetraibile'];
|
||||
|
||||
// Lettura iva delle righe in fattura
|
||||
$query = 'SELECT iva FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$iva_fattura = sum(array_column($rs, 'iva'), null) + $iva_rivalsainps - $iva_indetraibile_fattura;
|
||||
$iva_fattura = $is_nota ? -$iva_fattura : $iva_fattura;
|
||||
|
||||
// Imposto i segni + e - in base se la fattura è di acquisto o vendita
|
||||
if ($dir == 'uscita') {
|
||||
$segno_mov1_cliente = -1;
|
||||
$segno_mov2_ricavivendite = 1;
|
||||
$segno_mov3_iva = 1;
|
||||
|
||||
$segno_mov4_inps = 1;
|
||||
$segno_mov5_ritenutaacconto = -1;
|
||||
|
||||
// Lettura conto fornitore
|
||||
$query = 'SELECT idconto_fornitore FROM an_anagrafiche INNER JOIN co_documenti ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_documenti.id='.prepare($iddocumento);
|
||||
// Totale marca da bollo, inps, ritenuta, idagente
|
||||
$query = 'SELECT data, bollo, ritenutaacconto, rivalsainps, split_payment FROM co_documenti WHERE id='.prepare($iddocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$idconto_controparte = $rs[0]['idconto_fornitore'];
|
||||
$totale_bolli = $is_nota ? -$rs[0]['bollo'] : $rs[0]['bollo'];
|
||||
$totale_ritenutaacconto = $is_nota ? -$rs[0]['ritenutaacconto'] : $rs[0]['ritenutaacconto'];
|
||||
$totale_ritenutacontributi = $is_nota ? -$fattura->totale_ritenuta_contributi : $fattura->totale_ritenuta_contributi;
|
||||
$totale_rivalsainps = $is_nota ? -$rs[0]['rivalsainps'] : $rs[0]['rivalsainps'];
|
||||
$data_documento = $rs[0]['data'];
|
||||
$split_payment = $rs[0]['split_payment'];
|
||||
|
||||
if ($idconto_controparte == '') {
|
||||
$idconto_controparte = setting('Conto per Riepilogativo fornitori');
|
||||
$netto_fattura = get_netto_fattura($iddocumento);
|
||||
$totale_fattura = get_totale_fattura($iddocumento);
|
||||
$totale_fattura = $is_nota ? -$totale_fattura : $totale_fattura;
|
||||
|
||||
$imponibile_fattura = get_imponibile_fattura($iddocumento);
|
||||
|
||||
// Calcolo l'iva della rivalsa inps
|
||||
$iva_rivalsainps = 0;
|
||||
|
||||
$rsr = $dbo->fetchArray('SELECT idiva, rivalsainps FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento));
|
||||
|
||||
for ($r = 0; $r < sizeof($rsr); ++$r) {
|
||||
$qi = 'SELECT percentuale FROM co_iva WHERE id='.prepare($rsr[$r]['idiva']);
|
||||
$rsi = $dbo->fetchArray($qi);
|
||||
$iva_rivalsainps += $rsr[$r]['rivalsainps'] / 100 * $rsi[0]['percentuale'];
|
||||
}
|
||||
} else {
|
||||
$segno_mov1_cliente = 1;
|
||||
$segno_mov2_ricavivendite = -1;
|
||||
$segno_mov3_iva = -1;
|
||||
|
||||
$segno_mov4_inps = -1;
|
||||
$segno_mov5_ritenutaacconto = 1;
|
||||
|
||||
// Lettura conto cliente
|
||||
$query = 'SELECT idconto_cliente FROM an_anagrafiche INNER JOIN co_documenti ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_documenti.id='.prepare($iddocumento);
|
||||
// Lettura iva indetraibile fattura
|
||||
$query = 'SELECT SUM(iva_indetraibile) AS iva_indetraibile FROM co_righe_documenti GROUP BY iddocumento HAVING iddocumento='.prepare($iddocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$idconto_controparte = $rs[0]['idconto_cliente'];
|
||||
$iva_indetraibile_fattura = $is_nota ? -$rs[0]['iva_indetraibile'] : $rs[0]['iva_indetraibile'];
|
||||
|
||||
if ($idconto_controparte == '') {
|
||||
$idconto_controparte = setting('Conto per Riepilogativo clienti');
|
||||
// Lettura iva delle righe in fattura
|
||||
$query = 'SELECT iva FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$iva_fattura = sum(array_column($rs, 'iva'), null) + $iva_rivalsainps - $iva_indetraibile_fattura;
|
||||
$iva_fattura = $is_nota ? -$iva_fattura : $iva_fattura;
|
||||
|
||||
// Imposto i segni + e - in base se la fattura è di acquisto o vendita
|
||||
if ($dir == 'uscita') {
|
||||
$segno_mov1_cliente = -1;
|
||||
$segno_mov2_ricavivendite = 1;
|
||||
$segno_mov3_iva = 1;
|
||||
|
||||
$segno_mov4_inps = 1;
|
||||
$segno_mov5_ritenutaacconto = -1;
|
||||
|
||||
// Lettura conto fornitore
|
||||
$query = 'SELECT idconto_fornitore FROM an_anagrafiche INNER JOIN co_documenti ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_documenti.id='.prepare($iddocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$idconto_controparte = $rs[0]['idconto_fornitore'];
|
||||
|
||||
if ($idconto_controparte == '') {
|
||||
$idconto_controparte = setting('Conto per Riepilogativo fornitori');
|
||||
}
|
||||
} else {
|
||||
$segno_mov1_cliente = 1;
|
||||
$segno_mov2_ricavivendite = -1;
|
||||
$segno_mov3_iva = -1;
|
||||
|
||||
$segno_mov4_inps = -1;
|
||||
$segno_mov5_ritenutaacconto = 1;
|
||||
|
||||
// Lettura conto cliente
|
||||
$query = 'SELECT idconto_cliente FROM an_anagrafiche INNER JOIN co_documenti ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_documenti.id='.prepare($iddocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$idconto_controparte = $rs[0]['idconto_cliente'];
|
||||
|
||||
if ($idconto_controparte == '') {
|
||||
$idconto_controparte = setting('Conto per Riepilogativo clienti');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Lettura info fattura
|
||||
$query = 'SELECT *, co_documenti.data_competenza, co_documenti.note, co_documenti.idpagamento, co_documenti.id AS iddocumento, co_statidocumento.descrizione AS `stato`, co_tipidocumento.descrizione AS `descrizione_tipo` 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);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$n = sizeof($rs);
|
||||
$data = $rs[0]['data_competenza'];
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$ragione_sociale = $rs[0]['ragione_sociale'];
|
||||
$stato = $rs[0]['stato'];
|
||||
// Lettura info fattura
|
||||
$query = 'SELECT *, co_documenti.data_competenza, co_documenti.note, co_documenti.idpagamento, co_documenti.id AS iddocumento, co_statidocumento.descrizione AS `stato`, co_tipidocumento.descrizione AS `descrizione_tipo` 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);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$n = sizeof($rs);
|
||||
$data = $rs[0]['data_competenza'];
|
||||
$idanagrafica = $rs[0]['idanagrafica'];
|
||||
$ragione_sociale = $rs[0]['ragione_sociale'];
|
||||
$stato = $rs[0]['stato'];
|
||||
|
||||
$idmastrino = get_new_idmastrino();
|
||||
$idmastrino = get_new_idmastrino();
|
||||
|
||||
// Prendo il numero doc. esterno se c'è, altrimenti quello normale
|
||||
if (!empty($rs[0]['numero_esterno'])) {
|
||||
$numero = $rs[0]['numero_esterno'];
|
||||
} else {
|
||||
$numero = $rs[0]['numero'];
|
||||
}
|
||||
// Prendo il numero doc. esterno se c'è, altrimenti quello normale
|
||||
if (!empty($rs[0]['numero_esterno'])) {
|
||||
$numero = $rs[0]['numero_esterno'];
|
||||
} else {
|
||||
$numero = $rs[0]['numero'];
|
||||
}
|
||||
|
||||
// Abbreviazioni contabili dei movimenti
|
||||
$tipodoc = '';
|
||||
if ($rs[0]['descrizione_tipo'] == 'Nota di credito') {
|
||||
$tipodoc = 'Nota di credito';
|
||||
} elseif ($rs[0]['descrizione_tipo'] == 'Nota di debito') {
|
||||
$tipodoc = 'Nota di debito';
|
||||
} else {
|
||||
$tipodoc = 'Fattura';
|
||||
}
|
||||
// Abbreviazioni contabili dei movimenti
|
||||
$tipodoc = '';
|
||||
if ($rs[0]['descrizione_tipo'] == 'Nota di credito') {
|
||||
$tipodoc = 'Nota di credito';
|
||||
} elseif ($rs[0]['descrizione_tipo'] == 'Nota di debito') {
|
||||
$tipodoc = 'Nota di debito';
|
||||
} else {
|
||||
$tipodoc = 'Fattura';
|
||||
}
|
||||
|
||||
$descrizione = $tipodoc.' num. '.$numero;
|
||||
$descrizione = $tipodoc.' num. '.$numero;
|
||||
|
||||
/*
|
||||
Il mastrino si apre con almeno 3 righe di solito (esempio fattura di vendita):
|
||||
1) dare imponibile+iva al conto cliente
|
||||
2) avere imponibile sul conto dei ricavi
|
||||
3) avere iva sul conto dell'iva a credito (ed eventuale iva indetraibile sul rispettivo conto)
|
||||
/*
|
||||
Il mastrino si apre con almeno 3 righe di solito (esempio fattura di vendita):
|
||||
1) dare imponibile+iva al conto cliente
|
||||
2) avere imponibile sul conto dei ricavi
|
||||
3) avere iva sul conto dell'iva a credito (ed eventuale iva indetraibile sul rispettivo conto)
|
||||
|
||||
aggiuntivo:
|
||||
4) eventuale rivalsa inps
|
||||
5) eventuale ritenuta d'acconto
|
||||
*/
|
||||
// 1) Aggiungo la riga del conto cliente
|
||||
$importo_cliente = $totale_fattura;
|
||||
aggiuntivo:
|
||||
4) eventuale rivalsa inps
|
||||
5) eventuale ritenuta d'acconto
|
||||
*/
|
||||
// 1) Aggiungo la riga del conto cliente
|
||||
$importo_cliente = $totale_fattura;
|
||||
|
||||
if ($split_payment) {
|
||||
$importo_cliente = sum($importo_cliente, -$iva_fattura, 2);
|
||||
}
|
||||
if ($split_payment) {
|
||||
$importo_cliente = sum($importo_cliente, -$iva_fattura, 2);
|
||||
}
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($importo_cliente + $totale_bolli) * $segno_mov1_cliente).', '.prepare($primanota).' )';
|
||||
$dbo->query($query2);
|
||||
|
||||
// 2) Aggiungo il totale sul conto dei ricavi/spese scelto
|
||||
// Lettura descrizione conto ricavi/spese per ogni riga del documento
|
||||
$righe = $dbo->fetchArray('SELECT idconto, SUM(subtotale - sconto) AS imponibile FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' GROUP BY idconto');
|
||||
|
||||
foreach ($righe as $riga) {
|
||||
// Retrocompatibilità
|
||||
$idconto_riga = !empty($riga['idconto']) ? $riga['idconto'] : $idconto;
|
||||
$riga['imponibile'] = $is_nota ? -$riga['imponibile'] : $riga['imponibile'];
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_riga).', '.prepare($riga['imponibile'] * $segno_mov2_ricavivendite).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
// 3) Aggiungo il totale sul conto dell'iva
|
||||
// Lettura id conto iva
|
||||
if ($iva_fattura != 0 && !$split_payment) {
|
||||
$descrizione_conto_iva = ($dir == 'entrata') ? 'Iva su vendite' : 'Iva su acquisti';
|
||||
$idconto_iva = setting('Conto per '.$descrizione_conto_iva);
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_iva).', '.prepare($iva_fattura * $segno_mov3_iva).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
// Lettura id conto iva indetraibile
|
||||
if ($iva_indetraibile_fattura != 0 && !$split_payment) {
|
||||
$idconto_iva2 = setting('Conto per Iva indetraibile');
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_iva2).', '.prepare($iva_indetraibile_fattura * $segno_mov3_iva).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
// 4) Aggiungo la rivalsa INPS se c'è
|
||||
// Lettura id conto inps
|
||||
if ($totale_rivalsainps != 0) {
|
||||
$idconto_inps = setting('Conto per Erario c/INPS');
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_inps).', '.prepare($totale_rivalsainps * $segno_mov4_inps).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
// 5) Aggiungo la ritenuta d'acconto se c'è
|
||||
// Lettura id conto ritenuta e la storno subito
|
||||
if ($totale_ritenutaacconto != 0) {
|
||||
$idconto_ritenutaacconto = setting("Conto per Erario c/ritenute d'acconto");
|
||||
|
||||
// DARE nel conto ritenuta
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_ritenutaacconto).', '.prepare($totale_ritenutaacconto * $segno_mov5_ritenutaacconto).', '.prepare($primanota).')';
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($importo_cliente + $totale_bolli) * $segno_mov1_cliente).', '.prepare($primanota).' )';
|
||||
$dbo->query($query2);
|
||||
|
||||
// AVERE nel riepilogativo clienti
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($totale_ritenutaacconto * $segno_mov5_ritenutaacconto) * -1).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
// 2) Aggiungo il totale sul conto dei ricavi/spese scelto
|
||||
// Lettura descrizione conto ricavi/spese per ogni riga del documento
|
||||
$righe = $dbo->fetchArray('SELECT idconto, SUM(subtotale - sconto) AS imponibile FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' GROUP BY idconto');
|
||||
|
||||
// 6) Aggiungo la ritenuta enasarco se c'è
|
||||
// Lettura id conto ritenuta e la storno subito
|
||||
if ($totale_ritenutacontributi != 0) {
|
||||
$idconto_ritenutaenasarco = setting('Conto per Erario c/enasarco');
|
||||
foreach ($righe as $riga) {
|
||||
// Retrocompatibilità
|
||||
$idconto_riga = !empty($riga['idconto']) ? $riga['idconto'] : $idconto;
|
||||
$riga['imponibile'] = $is_nota ? -$riga['imponibile'] : $riga['imponibile'];
|
||||
|
||||
// DARE nel conto ritenuta
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_ritenutaenasarco).', '.prepare($totale_ritenutacontributi * $segno_mov5_ritenutaacconto).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_riga).', '.prepare($riga['imponibile'] * $segno_mov2_ricavivendite).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
// AVERE nel riepilogativo clienti
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($totale_ritenutacontributi * $segno_mov5_ritenutaacconto) * -1).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
// 3) Aggiungo il totale sul conto dell'iva
|
||||
// Lettura id conto iva
|
||||
if ($iva_fattura != 0 && !$split_payment) {
|
||||
$descrizione_conto_iva = ($dir == 'entrata') ? 'Iva su vendite' : 'Iva su acquisti';
|
||||
$idconto_iva = setting('Conto per '.$descrizione_conto_iva);
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_iva).', '.prepare($iva_fattura * $segno_mov3_iva).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
// Lettura id conto iva indetraibile
|
||||
if ($iva_indetraibile_fattura != 0 && !$split_payment) {
|
||||
$idconto_iva2 = setting('Conto per Iva indetraibile');
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_iva2).', '.prepare($iva_indetraibile_fattura * $segno_mov3_iva).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
// 4) Aggiungo la rivalsa INPS se c'è
|
||||
// Lettura id conto inps
|
||||
if ($totale_rivalsainps != 0) {
|
||||
$idconto_inps = setting('Conto per Erario c/INPS');
|
||||
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_inps).', '.prepare($totale_rivalsainps * $segno_mov4_inps).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
// 5) Aggiungo la ritenuta d'acconto se c'è
|
||||
// Lettura id conto ritenuta e la storno subito
|
||||
if ($totale_ritenutaacconto != 0) {
|
||||
$idconto_ritenutaacconto = setting("Conto per Erario c/ritenute d'acconto");
|
||||
|
||||
// DARE nel conto ritenuta
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_ritenutaacconto).', '.prepare($totale_ritenutaacconto * $segno_mov5_ritenutaacconto).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
|
||||
// AVERE nel riepilogativo clienti
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($totale_ritenutaacconto * $segno_mov5_ritenutaacconto) * -1).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
|
||||
// 6) Aggiungo la ritenuta enasarco se c'è
|
||||
// Lettura id conto ritenuta e la storno subito
|
||||
if ($totale_ritenutacontributi != 0) {
|
||||
$idconto_ritenutaenasarco = setting('Conto per Erario c/enasarco');
|
||||
|
||||
// DARE nel conto ritenuta
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_ritenutaenasarco).', '.prepare($totale_ritenutacontributi * $segno_mov5_ritenutaacconto).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
|
||||
// AVERE nel riepilogativo clienti
|
||||
$query2 = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, id_anagrafica, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).", '', ".prepare($descrizione.' del '.date('d/m/Y', strtotime($data)).' ('.$ragione_sociale.')').', '.prepare($idconto_controparte).', '.prepare(($totale_ritenutacontributi * $segno_mov5_ritenutaacconto) * -1).', '.prepare($primanota).')';
|
||||
$dbo->query($query2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Funzione per generare un nuovo codice per il mastrino.
|
||||
*
|
||||
* @deprecated 2.4.17
|
||||
*/
|
||||
function get_new_idmastrino($table = 'co_movimenti')
|
||||
{
|
||||
$dbo = database();
|
||||
if (!function_exists('get_new_idmastrino')) {
|
||||
function get_new_idmastrino($table = 'co_movimenti')
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
$query = 'SELECT MAX(idmastrino) AS maxidmastrino FROM '.$table;
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$query = 'SELECT MAX(idmastrino) AS maxidmastrino FROM '.$table;
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
return intval($rs[0]['maxidmastrino']) + 1;
|
||||
return intval($rs[0]['maxidmastrino']) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -381,12 +406,15 @@ function get_new_idmastrino($table = 'co_movimenti')
|
||||
*
|
||||
* @deprecated 2.4.17
|
||||
*/
|
||||
function ricalcola_costiagg_fattura($iddocumento)
|
||||
{
|
||||
global $dir;
|
||||
|
||||
if (!function_exists('ricalcola_costiagg_fattura')) {
|
||||
function ricalcola_costiagg_fattura($iddocumento)
|
||||
{
|
||||
global $dir;
|
||||
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
$fattura->save();
|
||||
$fattura = Fattura::find($iddocumento);
|
||||
$fattura->save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -395,42 +423,44 @@ function ricalcola_costiagg_fattura($iddocumento)
|
||||
*
|
||||
* @return bool|string
|
||||
*/
|
||||
function verifica_numero_fattura(Fattura $fattura)
|
||||
{
|
||||
if (empty($fattura->numero_esterno)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$id_segment = $fattura->id_segment;
|
||||
$data = $fattura->data;
|
||||
|
||||
$documenti = Fattura::where('id_segment', '=', $id_segment)
|
||||
->where('data', '=', $data)
|
||||
->get();
|
||||
|
||||
// Recupero maschera per questo segmento
|
||||
$maschera = Generator::getMaschera($id_segment);
|
||||
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'co_documenti', 'numero_esterno', [
|
||||
'data < '.prepare(date('Y-m-d', strtotime($data))),
|
||||
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
|
||||
'id_segment = '.prepare($id_segment),
|
||||
], $data);
|
||||
|
||||
do {
|
||||
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
|
||||
|
||||
$filtered = $documenti->reject(function ($item, $key) use ($numero) {
|
||||
return $item->numero_esterno == $numero;
|
||||
});
|
||||
|
||||
if ($documenti->count() == $filtered->count()) {
|
||||
return $numero;
|
||||
if (!function_exists('verifica_numero_fattura')) {
|
||||
function verifica_numero_fattura(Fattura $fattura)
|
||||
{
|
||||
if (empty($fattura->numero_esterno)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$documenti = $filtered;
|
||||
$ultimo = $numero;
|
||||
} while ($numero != $fattura->numero_esterno);
|
||||
$id_segment = $fattura->id_segment;
|
||||
$data = $fattura->data;
|
||||
|
||||
return null;
|
||||
}
|
||||
$documenti = Fattura::where('id_segment', '=', $id_segment)
|
||||
->where('data', '=', $data)
|
||||
->get();
|
||||
|
||||
// Recupero maschera per questo segmento
|
||||
$maschera = Generator::getMaschera($id_segment);
|
||||
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'co_documenti', 'numero_esterno', [
|
||||
'data < '.prepare(date('Y-m-d', strtotime($data))),
|
||||
'YEAR(data) = '.prepare(date('Y', strtotime($data))),
|
||||
'id_segment = '.prepare($id_segment),
|
||||
], $data);
|
||||
|
||||
do {
|
||||
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data));
|
||||
|
||||
$filtered = $documenti->reject(function ($item, $key) use ($numero) {
|
||||
return $item->numero_esterno == $numero;
|
||||
});
|
||||
|
||||
if ($documenti->count() == $filtered->count()) {
|
||||
return $numero;
|
||||
}
|
||||
|
||||
$documenti = $filtered;
|
||||
$ultimo = $numero;
|
||||
} while ($numero != $fattura->numero_esterno);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@ -21,18 +21,20 @@ use Util\Ini;
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
function crea_form_componente($contenuto)
|
||||
{
|
||||
$fields = Ini::getFields($contenuto);
|
||||
$title = array_shift($fields);
|
||||
if (!function_exists('crea_form_componente')) {
|
||||
function crea_form_componente($contenuto)
|
||||
{
|
||||
$fields = Ini::getFields($contenuto);
|
||||
$title = array_shift($fields);
|
||||
|
||||
foreach ($fields as $key => $value) {
|
||||
$fields[$key] = '<div class="col-md-4">'.$value.'</div>';
|
||||
foreach ($fields as $key => $value) {
|
||||
$fields[$key] = '<div class="col-md-4">'.$value.'</div>';
|
||||
}
|
||||
|
||||
echo $title.'
|
||||
<div class="row">
|
||||
'.implode(PHP_EOL, $fields).'
|
||||
<script>restart_inputs()</script>
|
||||
</div>';
|
||||
}
|
||||
|
||||
echo $title.'
|
||||
<div class="row">
|
||||
'.implode(PHP_EOL, $fields).'
|
||||
<script>restart_inputs()</script>
|
||||
</div>';
|
||||
}
|
||||
}
|
@ -39,11 +39,14 @@ use Util\Ini;
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
function get_ore_intervento($id_intervento)
|
||||
{
|
||||
$intervento = Intervento::find($id_intervento);
|
||||
|
||||
return $intervento->ore_totali;
|
||||
if (!function_exists('get_ore_intervento')) {
|
||||
function get_ore_intervento($id_intervento)
|
||||
{
|
||||
$intervento = Intervento::find($id_intervento);
|
||||
|
||||
return $intervento->ore_totali;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -56,77 +59,81 @@ function get_ore_intervento($id_intervento)
|
||||
*
|
||||
* @deprecated 2.4.25
|
||||
*/
|
||||
function link_componente_to_articolo($id_intervento, $id_impianto, $id_articolo, $qta)
|
||||
{
|
||||
if (empty($id_impianto) || empty($id_intervento)) {
|
||||
return;
|
||||
}
|
||||
if (!function_exists('link_componente_to_articolo')) {
|
||||
function link_componente_to_articolo($id_intervento, $id_impianto, $id_articolo, $qta)
|
||||
{
|
||||
if (empty($id_impianto) || empty($id_intervento)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$dbo = database();
|
||||
$intervento = Intervento::find($id_intervento);
|
||||
$dbo = database();
|
||||
$intervento = Intervento::find($id_intervento);
|
||||
|
||||
// Data di inizio dell'intervento (data_richiesta in caso di assenza di sessioni)
|
||||
$data = $intervento->inizio ?: $intervento->data_richiesta;
|
||||
// Data di inizio dell'intervento (data_richiesta in caso di assenza di sessioni)
|
||||
$data = $intervento->inizio ?: $intervento->data_richiesta;
|
||||
|
||||
// Se l'articolo aggiunto è collegato a un componente, aggiungo il componente all'impianto selezionato
|
||||
$componente_articolo = $dbo->fetchOne('SELECT componente_filename, contenuto FROM mg_articoli WHERE id = '.prepare($id_articolo));
|
||||
if (!empty($componente_articolo) && !empty($componente_articolo['componente_filename'])) {
|
||||
$contenuto_ini = Ini::read($componente_articolo['contenuto']);
|
||||
$nome_componente = Ini::getValue($contenuto_ini, 'Nome');
|
||||
// Se l'articolo aggiunto è collegato a un componente, aggiungo il componente all'impianto selezionato
|
||||
$componente_articolo = $dbo->fetchOne('SELECT componente_filename, contenuto FROM mg_articoli WHERE id = '.prepare($id_articolo));
|
||||
if (!empty($componente_articolo) && !empty($componente_articolo['componente_filename'])) {
|
||||
$contenuto_ini = Ini::read($componente_articolo['contenuto']);
|
||||
$nome_componente = Ini::getValue($contenuto_ini, 'Nome');
|
||||
|
||||
$dati = [
|
||||
'idimpianto' => $id_impianto,
|
||||
'idintervento' => $id_intervento,
|
||||
'nome' => $nome_componente,
|
||||
'data' => $data,
|
||||
'filename' => $componente_articolo['componente_filename'],
|
||||
'contenuto' => $componente_articolo['contenuto'],
|
||||
];
|
||||
$dati = [
|
||||
'idimpianto' => $id_impianto,
|
||||
'idintervento' => $id_intervento,
|
||||
'nome' => $nome_componente,
|
||||
'data' => $data,
|
||||
'filename' => $componente_articolo['componente_filename'],
|
||||
'contenuto' => $componente_articolo['contenuto'],
|
||||
];
|
||||
|
||||
// Inserisco il componente tante volte quante la quantità degli articoli inseriti
|
||||
for ($q = 0; $q < $qta; ++$q) {
|
||||
$dbo->insert('my_impianto_componenti', $dati);
|
||||
// Inserisco il componente tante volte quante la quantità degli articoli inseriti
|
||||
for ($q = 0; $q < $qta; ++$q) {
|
||||
$dbo->insert('my_impianto_componenti', $dati);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function add_tecnico($id_intervento, $idtecnico, $inizio, $fine, $idcontratto = null)
|
||||
{
|
||||
$intervento = Intervento::find($id_intervento);
|
||||
$anagrafica = Anagrafica::find($idtecnico);
|
||||
if (!function_exists('add_tecnico')) {
|
||||
function add_tecnico($id_intervento, $idtecnico, $inizio, $fine, $idcontratto = null)
|
||||
{
|
||||
$intervento = Intervento::find($id_intervento);
|
||||
$anagrafica = Anagrafica::find($idtecnico);
|
||||
|
||||
$sessione = Sessione::build($intervento, $anagrafica, $inizio, $fine);
|
||||
$sessione = Sessione::build($intervento, $anagrafica, $inizio, $fine);
|
||||
|
||||
// Notifica nuovo intervento al tecnico
|
||||
if (setting('Notifica al tecnico l\'aggiunta della sessione nell\'attività')) {
|
||||
if (!empty($anagrafica['email'])) {
|
||||
$template = Template::pool('Notifica intervento');
|
||||
// Notifica nuovo intervento al tecnico
|
||||
if (setting('Notifica al tecnico l\'aggiunta della sessione nell\'attività')) {
|
||||
if (!empty($anagrafica['email'])) {
|
||||
$template = Template::pool('Notifica intervento');
|
||||
|
||||
if (!empty($template)) {
|
||||
$mail = Mail::build(auth()->getUser(), $template, $id_intervento);
|
||||
$mail->addReceiver($anagrafica['email']);
|
||||
$mail->save();
|
||||
if (!empty($template)) {
|
||||
$mail = Mail::build(auth()->getUser(), $template, $id_intervento);
|
||||
$mail->addReceiver($anagrafica['email']);
|
||||
$mail->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Inserisco le righe aggiuntive previste dal tipo di intervento
|
||||
$righe_aggiuntive = database()->fetchArray('SELECT * FROM in_righe_tipiinterventi WHERE id_tipointervento='.prepare($sessione->idtipointervento));
|
||||
|
||||
foreach ($righe_aggiuntive as $riga_aggiuntiva) {
|
||||
$riga = RigaIntervento::build($intervento);
|
||||
|
||||
$riga->descrizione = $riga_aggiuntiva['descrizione'];
|
||||
$riga->um = $riga_aggiuntiva['um'];
|
||||
|
||||
$riga->costo_unitario = $riga_aggiuntiva['prezzo_acquisto'];
|
||||
$riga->setPrezzoUnitario($riga_aggiuntiva['prezzo_vendita'], $riga_aggiuntiva['idiva']);
|
||||
$riga->qta = $riga_aggiuntiva['qta'];
|
||||
|
||||
$riga->save();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//Inserisco le righe aggiuntive previste dal tipo di intervento
|
||||
$righe_aggiuntive = database()->fetchArray('SELECT * FROM in_righe_tipiinterventi WHERE id_tipointervento='.prepare($sessione->idtipointervento));
|
||||
|
||||
foreach ($righe_aggiuntive as $riga_aggiuntiva) {
|
||||
$riga = RigaIntervento::build($intervento);
|
||||
|
||||
$riga->descrizione = $riga_aggiuntiva['descrizione'];
|
||||
$riga->um = $riga_aggiuntiva['um'];
|
||||
|
||||
$riga->costo_unitario = $riga_aggiuntiva['prezzo_acquisto'];
|
||||
$riga->setPrezzoUnitario($riga_aggiuntiva['prezzo_vendita'], $riga_aggiuntiva['idiva']);
|
||||
$riga->qta = $riga_aggiuntiva['qta'];
|
||||
|
||||
$riga->save();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -139,190 +146,194 @@ function add_tecnico($id_intervento, $idtecnico, $inizio, $fine, $idcontratto =
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
function calcola_ore_intervento($orario_inizio, $orario_fine)
|
||||
{
|
||||
$inizio = new DateTime($orario_inizio);
|
||||
$diff = $inizio->diff(new DateTime($orario_fine));
|
||||
if (!function_exists('calcola_ore_intervento')) {
|
||||
function calcola_ore_intervento($orario_inizio, $orario_fine)
|
||||
{
|
||||
$inizio = new DateTime($orario_inizio);
|
||||
$diff = $inizio->diff(new DateTime($orario_fine));
|
||||
|
||||
$ore = $diff->i / 60 + $diff->h + ($diff->days * 24);
|
||||
$ore = $diff->i / 60 + $diff->h + ($diff->days * 24);
|
||||
|
||||
return $ore;
|
||||
return $ore;
|
||||
}
|
||||
}
|
||||
|
||||
function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizione, $id_iva, $id_conto, $id_rivalsa_inps = false, $id_ritenuta_acconto = false, $calcolo_ritenuta_acconto = false)
|
||||
{
|
||||
$dbo = database();
|
||||
if (!function_exists('aggiungi_intervento_in_fattura')) {
|
||||
function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizione, $id_iva, $id_conto, $id_rivalsa_inps = false, $id_ritenuta_acconto = false, $calcolo_ritenuta_acconto = false)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
$id_rivalsa_inps = $id_rivalsa_inps !== false ? $id_rivalsa_inps : setting('Cassa previdenziale predefinita');
|
||||
$id_ritenuta_acconto = $id_ritenuta_acconto !== false ? $id_ritenuta_acconto : setting("Ritenuta d'acconto predefinita");
|
||||
$calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto !== false ? $calcolo_ritenuta_acconto : setting("Metodologia calcolo ritenuta d'acconto predefinito");
|
||||
$id_rivalsa_inps = $id_rivalsa_inps !== false ? $id_rivalsa_inps : setting('Cassa previdenziale predefinita');
|
||||
$id_ritenuta_acconto = $id_ritenuta_acconto !== false ? $id_ritenuta_acconto : setting("Ritenuta d'acconto predefinita");
|
||||
$calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto !== false ? $calcolo_ritenuta_acconto : setting("Metodologia calcolo ritenuta d'acconto predefinito");
|
||||
|
||||
$fattura = Fattura::find($id_fattura);
|
||||
$intervento = Intervento::find($id_intervento);
|
||||
$fattura = Fattura::find($id_fattura);
|
||||
$intervento = Intervento::find($id_intervento);
|
||||
|
||||
$data = $intervento->fine;
|
||||
$codice = $intervento->codice;
|
||||
$data = $intervento->fine;
|
||||
$codice = $intervento->codice;
|
||||
|
||||
// Riga di descrizione
|
||||
$riga = Descrizione::build($fattura);
|
||||
$riga->descrizione = $descrizione;
|
||||
$riga->idintervento = $id_intervento;
|
||||
$riga->save();
|
||||
// Riga di descrizione
|
||||
$riga = Descrizione::build($fattura);
|
||||
$riga->descrizione = $descrizione;
|
||||
$riga->idintervento = $id_intervento;
|
||||
$riga->save();
|
||||
|
||||
// Ore di lavoro raggruppate per costo orario
|
||||
$sessioni = $intervento->sessioni;
|
||||
// Ore di lavoro raggruppate per costo orario
|
||||
$sessioni = $intervento->sessioni;
|
||||
|
||||
if (empty($sessioni)) {
|
||||
flash()->warning(tr("L'attività _NUM_ non ha sessioni di lavoro!", [
|
||||
'_NUM_' => $codice,
|
||||
]));
|
||||
} else {
|
||||
$decimals = setting('Cifre decimali per quantità');
|
||||
|
||||
$ore_di_lavoro = $sessioni->groupBy(function ($item, $key) {
|
||||
return $item['prezzo_orario'].'|'.$item['sconto_unitario'].'|'.$item['tipo_sconto'];
|
||||
});
|
||||
foreach ($ore_di_lavoro as $gruppo) {
|
||||
$sessione = $gruppo->first();
|
||||
$riga = Riga::build($fattura);
|
||||
|
||||
$riga->descrizione = tr("Ore di lavoro dell'attività _NUM_ del _DATE_", [
|
||||
if (empty($sessioni)) {
|
||||
flash()->warning(tr("L'attività _NUM_ non ha sessioni di lavoro!", [
|
||||
'_NUM_' => $codice,
|
||||
'_DATE_' => dateFormat($data),
|
||||
]);
|
||||
$riga->idintervento = $id_intervento;
|
||||
$riga->um = 'ore';
|
||||
]));
|
||||
} else {
|
||||
$decimals = setting('Cifre decimali per quantità');
|
||||
|
||||
$riga->id_iva = $id_iva;
|
||||
$riga->idconto = $id_conto;
|
||||
$ore_di_lavoro = $sessioni->groupBy(function ($item, $key) {
|
||||
return $item['prezzo_orario'].'|'.$item['sconto_unitario'].'|'.$item['tipo_sconto'];
|
||||
});
|
||||
foreach ($ore_di_lavoro as $gruppo) {
|
||||
$sessione = $gruppo->first();
|
||||
$riga = Riga::build($fattura);
|
||||
|
||||
$riga->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
|
||||
$riga->id_ritenuta_acconto = $id_ritenuta_acconto;
|
||||
$riga->id_rivalsa_inps = $id_rivalsa_inps;
|
||||
$riga->descrizione = tr("Ore di lavoro dell'attività _NUM_ del _DATE_", [
|
||||
'_NUM_' => $codice,
|
||||
'_DATE_' => dateFormat($data),
|
||||
]);
|
||||
$riga->idintervento = $id_intervento;
|
||||
$riga->um = 'ore';
|
||||
|
||||
$riga->prezzo_unitario = $sessione->prezzo_orario;
|
||||
$riga->costo_unitario = $sessione->prezzo_ore_unitario_tecnico;
|
||||
//Calcolo lo sconto unitario della sessione in base all'impostazione sui prezzi ivati
|
||||
$iva = $dbo->table('co_iva')->where('id', $id_iva)->first();
|
||||
if ($sessione->tipo_sconto == 'UNT' && setting('Utilizza prezzi di vendita comprensivi di IVA')) {
|
||||
$sconto_unitario = $sessione->sconto_unitario + (($sessione->sconto_unitario * $iva->percentuale) / 100);
|
||||
} else {
|
||||
$sconto_unitario = $sessione->sconto_unitario;
|
||||
$riga->id_iva = $id_iva;
|
||||
$riga->idconto = $id_conto;
|
||||
|
||||
$riga->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
|
||||
$riga->id_ritenuta_acconto = $id_ritenuta_acconto;
|
||||
$riga->id_rivalsa_inps = $id_rivalsa_inps;
|
||||
|
||||
$riga->prezzo_unitario = $sessione->prezzo_orario;
|
||||
$riga->costo_unitario = $sessione->prezzo_ore_unitario_tecnico;
|
||||
//Calcolo lo sconto unitario della sessione in base all'impostazione sui prezzi ivati
|
||||
$iva = $dbo->table('co_iva')->where('id', $id_iva)->first();
|
||||
if ($sessione->tipo_sconto == 'UNT' && setting('Utilizza prezzi di vendita comprensivi di IVA')) {
|
||||
$sconto_unitario = $sessione->sconto_unitario + (($sessione->sconto_unitario * $iva->percentuale) / 100);
|
||||
} else {
|
||||
$sconto_unitario = $sessione->sconto_unitario;
|
||||
}
|
||||
|
||||
$riga->setSconto($sconto_unitario, $sessione->tipo_sconto);
|
||||
|
||||
$qta_gruppo = $gruppo->sum('ore');
|
||||
$riga->qta = round($qta_gruppo, $decimals);
|
||||
|
||||
// Riferimento al documento di origine
|
||||
$riga->original_document_type = get_class($intervento);
|
||||
$riga->original_document_id = $intervento->id;
|
||||
|
||||
$riga->save();
|
||||
}
|
||||
|
||||
$riga->setSconto($sconto_unitario, $sessione->tipo_sconto);
|
||||
// Diritti di chiamata raggruppati per costo
|
||||
$diritti_chiamata = $sessioni->where('prezzo_diritto_chiamata', '>', 0)->groupBy(function ($item, $key) {
|
||||
return $item['prezzo_diritto_chiamata'];
|
||||
});
|
||||
foreach ($diritti_chiamata as $gruppo) {
|
||||
$diritto_chiamata = $gruppo->first();
|
||||
$riga = Riga::build($fattura);
|
||||
|
||||
$qta_gruppo = $gruppo->sum('ore');
|
||||
$riga->qta = round($qta_gruppo, $decimals);
|
||||
$riga->descrizione = tr("Diritto di chiamata dell'attività _NUM_ del _DATE_", [
|
||||
'_NUM_' => $codice,
|
||||
'_DATE_' => dateFormat($data),
|
||||
]);
|
||||
$riga->idintervento = $id_intervento;
|
||||
//$riga->um = 'ore';
|
||||
|
||||
// Riferimento al documento di origine
|
||||
$riga->original_document_type = get_class($intervento);
|
||||
$riga->original_document_id = $intervento->id;
|
||||
$riga->id_iva = $id_iva;
|
||||
$riga->idconto = $id_conto;
|
||||
|
||||
$riga->save();
|
||||
}
|
||||
$riga->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
|
||||
$riga->id_ritenuta_acconto = $id_ritenuta_acconto;
|
||||
$riga->id_rivalsa_inps = $id_rivalsa_inps;
|
||||
|
||||
// Diritti di chiamata raggruppati per costo
|
||||
$diritti_chiamata = $sessioni->where('prezzo_diritto_chiamata', '>', 0)->groupBy(function ($item, $key) {
|
||||
return $item['prezzo_diritto_chiamata'];
|
||||
});
|
||||
foreach ($diritti_chiamata as $gruppo) {
|
||||
$diritto_chiamata = $gruppo->first();
|
||||
$riga = Riga::build($fattura);
|
||||
$riga->prezzo_unitario = $diritto_chiamata->prezzo_diritto_chiamata;
|
||||
$riga->costo_unitario = $sessione->prezzo_dirittochiamata_tecnico;
|
||||
$riga->qta = $gruppo->count();
|
||||
|
||||
$riga->descrizione = tr("Diritto di chiamata dell'attività _NUM_ del _DATE_", [
|
||||
'_NUM_' => $codice,
|
||||
'_DATE_' => dateFormat($data),
|
||||
]);
|
||||
$riga->idintervento = $id_intervento;
|
||||
//$riga->um = 'ore';
|
||||
// Riferimento al documento di origine
|
||||
$riga->original_document_type = get_class($intervento);
|
||||
$riga->original_document_id = $intervento->id;
|
||||
|
||||
$riga->id_iva = $id_iva;
|
||||
$riga->idconto = $id_conto;
|
||||
|
||||
$riga->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
|
||||
$riga->id_ritenuta_acconto = $id_ritenuta_acconto;
|
||||
$riga->id_rivalsa_inps = $id_rivalsa_inps;
|
||||
|
||||
$riga->prezzo_unitario = $diritto_chiamata->prezzo_diritto_chiamata;
|
||||
$riga->costo_unitario = $sessione->prezzo_dirittochiamata_tecnico;
|
||||
$riga->qta = $gruppo->count();
|
||||
|
||||
// Riferimento al documento di origine
|
||||
$riga->original_document_type = get_class($intervento);
|
||||
$riga->original_document_id = $intervento->id;
|
||||
|
||||
$riga->save();
|
||||
}
|
||||
|
||||
// Viaggi raggruppati per costo
|
||||
$viaggi = $sessioni->where('prezzo_km_unitario', '>', 0)->groupBy(function ($item, $key) {
|
||||
return $item['prezzo_km_unitario'].'|'.$item['scontokm_unitario'].'|'.$item['tipo_scontokm'];
|
||||
});
|
||||
foreach ($viaggi as $gruppo) {
|
||||
$qta_trasferta = $gruppo->sum('km');
|
||||
if ($qta_trasferta == 0) {
|
||||
continue;
|
||||
$riga->save();
|
||||
}
|
||||
|
||||
$viaggio = $gruppo->first();
|
||||
$riga = Riga::build($fattura);
|
||||
// Viaggi raggruppati per costo
|
||||
$viaggi = $sessioni->where('prezzo_km_unitario', '>', 0)->groupBy(function ($item, $key) {
|
||||
return $item['prezzo_km_unitario'].'|'.$item['scontokm_unitario'].'|'.$item['tipo_scontokm'];
|
||||
});
|
||||
foreach ($viaggi as $gruppo) {
|
||||
$qta_trasferta = $gruppo->sum('km');
|
||||
if ($qta_trasferta == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$riga->descrizione = tr("Trasferta dell'attività _NUM_ del _DATE_", [
|
||||
'_NUM_' => $codice,
|
||||
'_DATE_' => dateFormat($data),
|
||||
]);
|
||||
$riga->idintervento = $id_intervento;
|
||||
$riga->um = 'km';
|
||||
$viaggio = $gruppo->first();
|
||||
$riga = Riga::build($fattura);
|
||||
|
||||
$riga->id_iva = $id_iva;
|
||||
$riga->idconto = $id_conto;
|
||||
$riga->descrizione = tr("Trasferta dell'attività _NUM_ del _DATE_", [
|
||||
'_NUM_' => $codice,
|
||||
'_DATE_' => dateFormat($data),
|
||||
]);
|
||||
$riga->idintervento = $id_intervento;
|
||||
$riga->um = 'km';
|
||||
|
||||
$riga->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
|
||||
$riga->id_ritenuta_acconto = $id_ritenuta_acconto;
|
||||
$riga->id_rivalsa_inps = $id_rivalsa_inps;
|
||||
$riga->id_iva = $id_iva;
|
||||
$riga->idconto = $id_conto;
|
||||
|
||||
$riga->prezzo_unitario = $viaggio->prezzo_km_unitario;
|
||||
$riga->costo_unitario = $sessione->prezzo_km_unitario_tecnico;
|
||||
$riga->setSconto($viaggio->scontokm_unitario, $viaggio->tipo_scontokm);
|
||||
$riga->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
|
||||
$riga->id_ritenuta_acconto = $id_ritenuta_acconto;
|
||||
$riga->id_rivalsa_inps = $id_rivalsa_inps;
|
||||
|
||||
// Riferimento al documento di origine
|
||||
$riga->original_document_type = get_class($intervento);
|
||||
$riga->original_document_id = $intervento->id;
|
||||
$riga->prezzo_unitario = $viaggio->prezzo_km_unitario;
|
||||
$riga->costo_unitario = $sessione->prezzo_km_unitario_tecnico;
|
||||
$riga->setSconto($viaggio->scontokm_unitario, $viaggio->tipo_scontokm);
|
||||
|
||||
$riga->qta = $qta_trasferta;
|
||||
// Riferimento al documento di origine
|
||||
$riga->original_document_type = get_class($intervento);
|
||||
$riga->original_document_id = $intervento->id;
|
||||
|
||||
$riga->save();
|
||||
}
|
||||
}
|
||||
$riga->qta = $qta_trasferta;
|
||||
|
||||
// Articoli, righe, sconti e descrizioni collegati all'intervento
|
||||
$righe = $intervento->getRighe();
|
||||
foreach ($righe as $riga) {
|
||||
$qta = $riga->qta;
|
||||
$copia = $riga->copiaIn($fattura, $qta);
|
||||
|
||||
$copia->id_conto = $id_conto;
|
||||
|
||||
$copia->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
|
||||
$copia->id_ritenuta_acconto = $id_ritenuta_acconto;
|
||||
$copia->id_rivalsa_inps = $id_rivalsa_inps;
|
||||
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
if ($copia->isArticolo()) {
|
||||
$copia->serials = $riga->serials;
|
||||
$articolo = ArticoloOriginale::find($copia->idarticolo);
|
||||
$copia->id_conto = ($articolo->idconto_vendita ? $articolo->idconto_vendita : $id_conto);
|
||||
$riga->save();
|
||||
}
|
||||
}
|
||||
|
||||
$copia->save();
|
||||
// Articoli, righe, sconti e descrizioni collegati all'intervento
|
||||
$righe = $intervento->getRighe();
|
||||
foreach ($righe as $riga) {
|
||||
$qta = $riga->qta;
|
||||
$copia = $riga->copiaIn($fattura, $qta);
|
||||
|
||||
$copia->id_conto = $id_conto;
|
||||
|
||||
$copia->calcolo_ritenuta_acconto = $calcolo_ritenuta_acconto;
|
||||
$copia->id_ritenuta_acconto = $id_ritenuta_acconto;
|
||||
$copia->id_rivalsa_inps = $id_rivalsa_inps;
|
||||
|
||||
// Aggiornamento seriali dalla riga dell'ordine
|
||||
if ($copia->isArticolo()) {
|
||||
$copia->serials = $riga->serials;
|
||||
$articolo = ArticoloOriginale::find($copia->idarticolo);
|
||||
$copia->id_conto = ($articolo->idconto_vendita ? $articolo->idconto_vendita : $id_conto);
|
||||
}
|
||||
|
||||
$copia->save();
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
ricalcola_costiagg_fattura($id_fattura);
|
||||
|
||||
// Metto l'intervento in stato "Fatturato"
|
||||
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE codice='FAT') WHERE id=".prepare($id_intervento));
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
ricalcola_costiagg_fattura($id_fattura);
|
||||
|
||||
// Metto l'intervento in stato "Fatturato"
|
||||
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE codice='FAT') WHERE id=".prepare($id_intervento));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -331,44 +342,46 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion
|
||||
*
|
||||
* @return bool|string
|
||||
*/
|
||||
function verifica_numero_intervento(Intervento $intervento)
|
||||
{
|
||||
if (empty($intervento->codice)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$data = $intervento->data_richiesta;
|
||||
$documenti = Intervento::whereDate('data_richiesta', '=', $data->format('Y-m-d'))
|
||||
->get();
|
||||
|
||||
// Recupero maschera per questo segmento
|
||||
$maschera = setting('Formato codice attività');
|
||||
|
||||
if ((strpos($maschera, 'YYYY') == false) or (strpos($maschera, 'yy') == false)) {
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice', [
|
||||
'DATE(data_richiesta) < '.prepare($data->format('Y-m-d')),
|
||||
'YEAR(data_richiesta) = '.prepare($data->format('Y')),
|
||||
], $data);
|
||||
} else {
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice', [
|
||||
'DATE(data_richiesta) < '.prepare($data->format('Y-m-d')),
|
||||
]);
|
||||
}
|
||||
|
||||
do {
|
||||
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data), $data);
|
||||
|
||||
$filtered = $documenti->reject(function ($item, $key) use ($numero) {
|
||||
return $item->codice == $numero;
|
||||
});
|
||||
|
||||
if ($documenti->count() == $filtered->count()) {
|
||||
return $numero;
|
||||
if (!function_exists('verifica_numero_intervento')) {
|
||||
function verifica_numero_intervento(Intervento $intervento)
|
||||
{
|
||||
if (empty($intervento->codice)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$documenti = $filtered;
|
||||
$ultimo = $numero;
|
||||
} while ($numero != $intervento->codice);
|
||||
$data = $intervento->data_richiesta;
|
||||
$documenti = Intervento::whereDate('data_richiesta', '=', $data->format('Y-m-d'))
|
||||
->get();
|
||||
|
||||
return null;
|
||||
}
|
||||
// Recupero maschera per questo segmento
|
||||
$maschera = setting('Formato codice attività');
|
||||
|
||||
if ((strpos($maschera, 'YYYY') == false) or (strpos($maschera, 'yy') == false)) {
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice', [
|
||||
'DATE(data_richiesta) < '.prepare($data->format('Y-m-d')),
|
||||
'YEAR(data_richiesta) = '.prepare($data->format('Y')),
|
||||
], $data);
|
||||
} else {
|
||||
$ultimo = Generator::getPreviousFrom($maschera, 'in_interventi', 'codice', [
|
||||
'DATE(data_richiesta) < '.prepare($data->format('Y-m-d')),
|
||||
]);
|
||||
}
|
||||
|
||||
do {
|
||||
$numero = Generator::generate($maschera, $ultimo, 1, Generator::dateToPattern($data), $data);
|
||||
|
||||
$filtered = $documenti->reject(function ($item, $key) use ($numero) {
|
||||
return $item->codice == $numero;
|
||||
});
|
||||
|
||||
if ($documenti->count() == $filtered->count()) {
|
||||
return $numero;
|
||||
}
|
||||
|
||||
$documenti = $filtered;
|
||||
$ultimo = $numero;
|
||||
} while ($numero != $intervento->codice);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@ -27,11 +27,13 @@ use Modules\Ordini\Ordine;
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_new_numeroordine($data)
|
||||
{
|
||||
global $dir;
|
||||
if (!function_exists('get_new_numeroordine')) {
|
||||
function get_new_numeroordine($data)
|
||||
{
|
||||
global $dir;
|
||||
|
||||
return Ordine::getNextNumero($data, $dir);
|
||||
return Ordine::getNextNumero($data, $dir);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -39,12 +41,15 @@ function get_new_numeroordine($data)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_new_numerosecondarioordine($data)
|
||||
{
|
||||
global $dir;
|
||||
global $id_segment;
|
||||
|
||||
return Ordine::getNextNumeroSecondario($data, $dir, $id_segment);
|
||||
if (!function_exists('get_new_numerosecondarioordine')) {
|
||||
function get_new_numerosecondarioordine($data)
|
||||
{
|
||||
global $dir;
|
||||
global $id_segment;
|
||||
|
||||
return Ordine::getNextNumeroSecondario($data, $dir, $id_segment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -52,11 +57,14 @@ function get_new_numerosecondarioordine($data)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_imponibile_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
|
||||
return $ordine->imponibile;
|
||||
if (!function_exists('get_imponibile_ordine')) {
|
||||
function get_imponibile_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
|
||||
return $ordine->imponibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -64,11 +72,13 @@ function get_imponibile_ordine($idordine)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_totale_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
if (!function_exists('get_totale_ordine')) {
|
||||
function get_totale_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
|
||||
return $ordine->totale;
|
||||
return $ordine->totale;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -76,23 +86,27 @@ function get_totale_ordine($idordine)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_netto_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
|
||||
return $ordine->netto;
|
||||
if (!function_exists('get_netto_ordine')) {
|
||||
function get_netto_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
|
||||
return $ordine->netto;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcolo iva detraibile ordine.
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_ivadetraibile_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
if (!function_exists('get_ivadetraibile_ordine')) {
|
||||
function get_ivadetraibile_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
|
||||
return $ordine->iva_detraibile;
|
||||
return $ordine->iva_detraibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -100,13 +114,14 @@ function get_ivadetraibile_ordine($idordine)
|
||||
*
|
||||
* @deprecated 2.4.5
|
||||
*/
|
||||
function get_ivaindetraibile_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
if (!function_exists('get_ivaindetraibile_ordine')) {
|
||||
function get_ivaindetraibile_ordine($idordine)
|
||||
{
|
||||
$ordine = Ordine::find($idordine);
|
||||
|
||||
return $ordine->iva_indetraibile;
|
||||
return $ordine->iva_indetraibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ricalcola i costi aggiuntivi in ordine (rivalsa inps, ritenuta d'acconto, marca da bollo)
|
||||
* Deve essere eseguito ogni volta che si aggiunge o toglie una riga
|
||||
@ -115,140 +130,145 @@ function get_ivaindetraibile_ordine($idordine)
|
||||
* $idritenutaacconto int ID della ritenuta d'acconto da applicare. Se omesso viene utilizzata quella impostata di default
|
||||
* $bolli float Costi aggiuntivi delle marche da bollo. Se omesso verrà usata la cifra predefinita.
|
||||
*/
|
||||
function ricalcola_costiagg_ordine($idordine, $idrivalsainps = '', $idritenutaacconto = '', $bolli = '')
|
||||
{
|
||||
global $dir;
|
||||
if (!function_exists('ricalcola_costiagg_ordine')) {
|
||||
function ricalcola_costiagg_ordine($idordine, $idrivalsainps = '', $idritenutaacconto = '', $bolli = '')
|
||||
{
|
||||
global $dir;
|
||||
|
||||
$dbo = database();
|
||||
$dbo = database();
|
||||
|
||||
// Se ci sono righe nel ordine faccio i conteggi, altrimenti azzero gli sconti e le spese aggiuntive (inps, ritenuta, marche da bollo)
|
||||
$query = 'SELECT COUNT(id) AS righe FROM or_righe_ordini WHERE idordine='.prepare($idordine);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
if ($rs[0]['righe'] > 0) {
|
||||
$totale_imponibile = get_imponibile_ordine($idordine);
|
||||
$totale_ordine = get_totale_ordine($idordine);
|
||||
|
||||
// Leggo gli id dei costi aggiuntivi
|
||||
if ($dir == 'uscita') {
|
||||
$query2 = 'SELECT idrivalsainps, idritenutaacconto, bollo FROM or_ordini WHERE id='.prepare($idordine);
|
||||
$rs2 = $dbo->fetchArray($query2);
|
||||
$idrivalsainps = $rs2[0]['idrivalsainps'];
|
||||
$idritenutaacconto = $rs2[0]['idritenutaacconto'];
|
||||
$bollo = $rs2[0]['bollo'];
|
||||
}
|
||||
|
||||
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
|
||||
if ($dir == 'entrata') {
|
||||
if (!empty($idrivalsainps)) {
|
||||
$idrivalsainps = setting('Cassa previdenziale predefinita');
|
||||
}
|
||||
}
|
||||
|
||||
$query = 'SELECT percentuale FROM co_rivalse WHERE id='.prepare($idrivalsainps);
|
||||
// Se ci sono righe nel ordine faccio i conteggi, altrimenti azzero gli sconti e le spese aggiuntive (inps, ritenuta, marche da bollo)
|
||||
$query = 'SELECT COUNT(id) AS righe FROM or_righe_ordini WHERE idordine='.prepare($idordine);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$rivalsainps = $totale_imponibile / 100 * $rs[0]['percentuale'];
|
||||
if ($rs[0]['righe'] > 0) {
|
||||
$totale_imponibile = get_imponibile_ordine($idordine);
|
||||
$totale_ordine = get_totale_ordine($idordine);
|
||||
|
||||
// Aggiorno la rivalsa inps
|
||||
$dbo->query("UPDATE or_ordini SET rivalsainps='$rivalsainps' WHERE id=".prepare($idordine));
|
||||
// Leggo gli id dei costi aggiuntivi
|
||||
if ($dir == 'uscita') {
|
||||
$query2 = 'SELECT idrivalsainps, idritenutaacconto, bollo FROM or_ordini WHERE id='.prepare($idordine);
|
||||
$rs2 = $dbo->fetchArray($query2);
|
||||
$idrivalsainps = $rs2[0]['idrivalsainps'];
|
||||
$idritenutaacconto = $rs2[0]['idritenutaacconto'];
|
||||
$bollo = $rs2[0]['bollo'];
|
||||
}
|
||||
|
||||
// Leggo la ritenuta d'acconto se c'è
|
||||
$totale_ordine = get_totale_ordine($idordine);
|
||||
|
||||
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
|
||||
if (!empty($idritenutaacconto)) {
|
||||
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
|
||||
if ($dir == 'entrata') {
|
||||
$idritenutaacconto = setting("Ritenuta d'acconto predefinita");
|
||||
}
|
||||
}
|
||||
|
||||
$query = 'SELECT percentuale FROM co_ritenutaacconto WHERE id='.prepare($idritenutaacconto);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$ritenutaacconto = $totale_ordine / 100 * $rs[0]['percentuale'];
|
||||
$netto_a_pagare = $totale_ordine - $ritenutaacconto;
|
||||
|
||||
// Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
|
||||
$bolli = str_replace(',', '.', $bolli);
|
||||
$bolli = floatval($bolli);
|
||||
if ($dir == 'uscita') {
|
||||
if ($bolli != 0.00) {
|
||||
$bolli = str_replace(',', '.', $bolli);
|
||||
if (abs($bolli) > 0 && abs($netto_a_pagare > setting("Soglia minima per l'applicazione della marca da bollo"))) {
|
||||
$marca_da_bollo = str_replace(',', '.', $bolli);
|
||||
} else {
|
||||
$marca_da_bollo = 0.00;
|
||||
if (!empty($idrivalsainps)) {
|
||||
$idrivalsainps = setting('Cassa previdenziale predefinita');
|
||||
}
|
||||
}
|
||||
|
||||
$query = 'SELECT percentuale FROM co_rivalse WHERE id='.prepare($idrivalsainps);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$rivalsainps = $totale_imponibile / 100 * $rs[0]['percentuale'];
|
||||
|
||||
// Aggiorno la rivalsa inps
|
||||
$dbo->query("UPDATE or_ordini SET rivalsainps='$rivalsainps' WHERE id=".prepare($idordine));
|
||||
|
||||
// Leggo la ritenuta d'acconto se c'è
|
||||
$totale_ordine = get_totale_ordine($idordine);
|
||||
|
||||
// Leggo la rivalsa inps se c'è (per i ordine di vendita lo leggo dalle impostazioni)
|
||||
if (!empty($idritenutaacconto)) {
|
||||
if ($dir == 'entrata') {
|
||||
$idritenutaacconto = setting("Ritenuta d'acconto predefinita");
|
||||
}
|
||||
}
|
||||
|
||||
$query = 'SELECT percentuale FROM co_ritenutaacconto WHERE id='.prepare($idritenutaacconto);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$ritenutaacconto = $totale_ordine / 100 * $rs[0]['percentuale'];
|
||||
$netto_a_pagare = $totale_ordine - $ritenutaacconto;
|
||||
|
||||
// Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia
|
||||
$bolli = str_replace(',', '.', $bolli);
|
||||
$bolli = floatval($bolli);
|
||||
if ($dir == 'uscita') {
|
||||
if ($bolli != 0.00) {
|
||||
$bolli = str_replace(',', '.', $bolli);
|
||||
if (abs($bolli) > 0 && abs($netto_a_pagare > setting("Soglia minima per l'applicazione della marca da bollo"))) {
|
||||
$marca_da_bollo = str_replace(',', '.', $bolli);
|
||||
} else {
|
||||
$marca_da_bollo = 0.00;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$marca_da_bollo = 0.00;
|
||||
}
|
||||
|
||||
// Leggo l'iva predefinita per calcolare l'iva aggiuntiva sulla rivalsa inps
|
||||
$qi = 'SELECT percentuale FROM co_iva WHERE id='.prepare(setting('Iva predefinita'));
|
||||
$rsi = $dbo->fetchArray($qi);
|
||||
$iva_rivalsainps = $rivalsainps / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$dbo->query('UPDATE or_ordini SET ritenutaacconto='.prepare($ritenutaacconto).', bollo='.prepare($marca_da_bollo).', iva_rivalsainps='.prepare($iva_rivalsainps).' WHERE id='.prepare($idordine));
|
||||
} else {
|
||||
$marca_da_bollo = 0.00;
|
||||
$dbo->query("UPDATE or_ordini SET ritenutaacconto='0', bollo='0', rivalsainps='0' WHERE id=".prepare($idordine));
|
||||
}
|
||||
|
||||
// Leggo l'iva predefinita per calcolare l'iva aggiuntiva sulla rivalsa inps
|
||||
$qi = 'SELECT percentuale FROM co_iva WHERE id='.prepare(setting('Iva predefinita'));
|
||||
$rsi = $dbo->fetchArray($qi);
|
||||
$iva_rivalsainps = $rivalsainps / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$dbo->query('UPDATE or_ordini SET ritenutaacconto='.prepare($ritenutaacconto).', bollo='.prepare($marca_da_bollo).', iva_rivalsainps='.prepare($iva_rivalsainps).' WHERE id='.prepare($idordine));
|
||||
} else {
|
||||
$dbo->query("UPDATE or_ordini SET ritenutaacconto='0', bollo='0', rivalsainps='0' WHERE id=".prepare($idordine));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce lo stato dell'ordine in base alle righe.
|
||||
*/
|
||||
function get_stato_ordine($idordine)
|
||||
{
|
||||
$dbo = database();
|
||||
if (!function_exists('get_stato_ordine')) {
|
||||
function get_stato_ordine($idordine)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
$rs_ordine = $dbo->fetchArray("SELECT IFNULL(SUM(qta), 0) AS qta FROM or_righe_ordini WHERE idordine='".$idordine."'");
|
||||
$qta_ordine = $rs_ordine[0]['qta'];
|
||||
$rs_ordine = $dbo->fetchArray("SELECT IFNULL(SUM(qta), 0) AS qta FROM or_righe_ordini WHERE idordine='".$idordine."'");
|
||||
$qta_ordine = $rs_ordine[0]['qta'];
|
||||
|
||||
//Righe dell'ordine in ddt
|
||||
$rs_ddt = $dbo->fetchArray('SELECT IFNULL(SUM(qta), 0) AS qta FROM dt_righe_ddt WHERE idordine='.prepare($idordine));
|
||||
$qta_ddt = $rs_ddt[0]['qta'];
|
||||
//Righe dell'ordine in ddt
|
||||
$rs_ddt = $dbo->fetchArray('SELECT IFNULL(SUM(qta), 0) AS qta FROM dt_righe_ddt WHERE idordine='.prepare($idordine));
|
||||
$qta_ddt = $rs_ddt[0]['qta'];
|
||||
|
||||
//Righe dell'ordine in fattura
|
||||
$rs_fattura = $dbo->fetchArray('SELECT IFNULL(SUM(qta), 0) AS qta FROM co_righe_documenti WHERE idordine='.prepare($idordine));
|
||||
$qta_fattura = $rs_fattura[0]['qta'];
|
||||
//Righe dell'ordine in fattura
|
||||
$rs_fattura = $dbo->fetchArray('SELECT IFNULL(SUM(qta), 0) AS qta FROM co_righe_documenti WHERE idordine='.prepare($idordine));
|
||||
$qta_fattura = $rs_fattura[0]['qta'];
|
||||
|
||||
//Righe dell'ordine in fattura passando da ddt
|
||||
$rs_ddt_fattura = $dbo->fetchArray("SELECT IFNULL(SUM(qta), 0) AS qta FROM co_righe_documenti WHERE idddt IN(SELECT DISTINCT idddt FROM dt_righe_ddt WHERE idordine='".$idordine."')");
|
||||
$qta_ddt_fattura = $rs_ddt_fattura[0]['qta'];
|
||||
//Righe dell'ordine in fattura passando da ddt
|
||||
$rs_ddt_fattura = $dbo->fetchArray("SELECT IFNULL(SUM(qta), 0) AS qta FROM co_righe_documenti WHERE idddt IN(SELECT DISTINCT idddt FROM dt_righe_ddt WHERE idordine='".$idordine."')");
|
||||
$qta_ddt_fattura = $rs_ddt_fattura[0]['qta'];
|
||||
|
||||
if ($qta_ddt == 0) {
|
||||
$stato = 'Accettato';
|
||||
}
|
||||
if ($qta_fattura == 0) {
|
||||
$stato = 'Accettato';
|
||||
}
|
||||
if ($qta_ddt > 0 && $qta_ddt < $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Parzialmente evaso';
|
||||
}
|
||||
if ($qta_ddt == $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Evaso';
|
||||
}
|
||||
if ($qta_fattura > 0 && $qta_fattura < $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Parzialmente fatturato';
|
||||
}
|
||||
if ($qta_fattura == $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Fatturato';
|
||||
}
|
||||
if ($qta_ddt_fattura > 0 && $qta_ddt_fattura < $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Parzialmente fatturato';
|
||||
}
|
||||
if ($qta_ddt_fattura == $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Fatturato';
|
||||
}
|
||||
if ($qta_ddt == 0) {
|
||||
$stato = 'Accettato';
|
||||
}
|
||||
if ($qta_fattura == 0) {
|
||||
$stato = 'Accettato';
|
||||
}
|
||||
if ($qta_ddt > 0 && $qta_ddt < $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Parzialmente evaso';
|
||||
}
|
||||
if ($qta_ddt == $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Evaso';
|
||||
}
|
||||
if ($qta_fattura > 0 && $qta_fattura < $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Parzialmente fatturato';
|
||||
}
|
||||
if ($qta_fattura == $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Fatturato';
|
||||
}
|
||||
if ($qta_ddt_fattura > 0 && $qta_ddt_fattura < $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Parzialmente fatturato';
|
||||
}
|
||||
if ($qta_ddt_fattura == $qta_ordine && $qta_ordine > 0) {
|
||||
$stato = 'Fatturato';
|
||||
}
|
||||
|
||||
return $stato;
|
||||
return $stato;
|
||||
}
|
||||
}
|
||||
|
||||
function get_totale_interventi_ordine($idordine)
|
||||
{
|
||||
$interventi = Intervento::where('id_ordine', $idordine)->get();
|
||||
$array_interventi = $interventi->toArray();
|
||||
if (!function_exists('get_totale_interventi_ordine')) {
|
||||
function get_totale_interventi_ordine($idordine)
|
||||
{
|
||||
$interventi = Intervento::where('id_ordine', $idordine)->get();
|
||||
$array_interventi = $interventi->toArray();
|
||||
|
||||
$totale = sum(array_column($array_interventi, 'totale_imponibile'));
|
||||
$totale = sum(array_column($array_interventi, 'totale_imponibile'));
|
||||
|
||||
return $totale;
|
||||
}
|
||||
return $totale;
|
||||
}
|
||||
}
|
@ -22,39 +22,46 @@ include_once __DIR__.'/../../core.php';
|
||||
use Modules\Interventi\Intervento;
|
||||
use Modules\Preventivi\Preventivo;
|
||||
|
||||
if (!function_exists('get_imponibile_preventivo')) {
|
||||
function get_imponibile_preventivo($idpreventivo)
|
||||
{
|
||||
$preventivo = Preventivo::find($idpreventivo);
|
||||
{
|
||||
$preventivo = Preventivo::find($idpreventivo);
|
||||
|
||||
return $preventivo->totale_imponibile;
|
||||
return $preventivo->totale_imponibile;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Restituisce lo stato del preventivo in base alle righe.
|
||||
*/
|
||||
function get_stato_preventivo($idpreventivo)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT SUM(qta) AS qta, SUM(qta_evasa) AS qta_evasa FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo));
|
||||
if (!function_exists('get_stato_preventivo')) {
|
||||
function get_stato_preventivo($idpreventivo)
|
||||
{
|
||||
$dbo = database();
|
||||
|
||||
if ($rs[0]['qta_evasa'] > 0) {
|
||||
if ($rs[0]['qta'] > $rs[0]['qta_evasa']) {
|
||||
return 'Parzialmente evaso';
|
||||
} elseif ($rs[0]['qta'] == $rs[0]['qta_evasa']) {
|
||||
return 'Evaso';
|
||||
$rs = $dbo->fetchArray('SELECT SUM(qta) AS qta, SUM(qta_evasa) AS qta_evasa FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo));
|
||||
|
||||
if ($rs[0]['qta_evasa'] > 0) {
|
||||
if ($rs[0]['qta'] > $rs[0]['qta_evasa']) {
|
||||
return 'Parzialmente evaso';
|
||||
} elseif ($rs[0]['qta'] == $rs[0]['qta_evasa']) {
|
||||
return 'Evaso';
|
||||
}
|
||||
} else {
|
||||
return 'Non evaso';
|
||||
}
|
||||
} else {
|
||||
return 'Non evaso';
|
||||
}
|
||||
}
|
||||
|
||||
function get_totale_interventi_preventivo($idpreventivo)
|
||||
{
|
||||
$interventi = Intervento::where('id_preventivo', $idpreventivo)->get();
|
||||
$array_interventi = $interventi->toArray();
|
||||
if (!function_exists('get_totale_interventi_preventivo')) {
|
||||
function get_totale_interventi_preventivo($idpreventivo)
|
||||
{
|
||||
$interventi = Intervento::where('id_preventivo', $idpreventivo)->get();
|
||||
$array_interventi = $interventi->toArray();
|
||||
|
||||
$totale = sum(array_column($array_interventi, 'totale_imponibile'));
|
||||
$totale = sum(array_column($array_interventi, 'totale_imponibile'));
|
||||
|
||||
return $totale;
|
||||
}
|
||||
return $totale;
|
||||
}
|
||||
}
|
@ -19,53 +19,55 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
function menuSelection($element, $group_id, $depth, $permessi_disponibili)
|
||||
{
|
||||
$dbo = database();
|
||||
++$depth;
|
||||
if (!function_exists('menuSelection')) {
|
||||
function menuSelection($element, $group_id, $depth, $permessi_disponibili)
|
||||
{
|
||||
$dbo = database();
|
||||
++$depth;
|
||||
|
||||
// Permessi impostati per il gruppo
|
||||
$permesso_salvato = $dbo->fetchOne('SELECT permessi FROM zz_permissions WHERE idgruppo = '.prepare($group_id).' AND idmodule = '.prepare($element['id']));
|
||||
// Permessi impostati per il gruppo
|
||||
$permesso_salvato = $dbo->fetchOne('SELECT permessi FROM zz_permissions WHERE idgruppo = '.prepare($group_id).' AND idmodule = '.prepare($element['id']));
|
||||
|
||||
$permessi = $permesso_salvato ? $permesso_salvato['permessi'] : '-';
|
||||
$permessi = $permesso_salvato ? $permesso_salvato['permessi'] : '-';
|
||||
|
||||
$result = '
|
||||
<tr>
|
||||
<td>'.str_repeat(' ', $depth).'<span>'.$element['title'].'</span></td>
|
||||
<td>
|
||||
<select name="permesso_'.$element['id'].'" id="permesso_'.$element['id'].'" class="form-control superselect openstamanager-input select-input" onchange="update_permissions('.$element['id'].', $(this).find(\'option:selected\').val(), $(this).find(\'option:selected\').data(\'color\'))">';
|
||||
$result = '
|
||||
<tr>
|
||||
<td>'.str_repeat(' ', $depth).'<span>'.$element['title'].'</span></td>
|
||||
<td>
|
||||
<select name="permesso_'.$element['id'].'" id="permesso_'.$element['id'].'" class="form-control superselect openstamanager-input select-input" onchange="update_permissions('.$element['id'].', $(this).find(\'option:selected\').val(), $(this).find(\'option:selected\').data(\'color\'))">';
|
||||
|
||||
foreach ($permessi_disponibili as $id => $nome) {
|
||||
switch ($id) {
|
||||
case 'rw':
|
||||
$bgcolor = 'green';
|
||||
break;
|
||||
case 'r':
|
||||
$bgcolor = 'orange';
|
||||
break;
|
||||
case '-':
|
||||
$bgcolor = 'red';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
foreach ($permessi_disponibili as $id => $nome) {
|
||||
switch ($id) {
|
||||
case 'rw':
|
||||
$bgcolor = 'green';
|
||||
break;
|
||||
case 'r':
|
||||
$bgcolor = 'orange';
|
||||
break;
|
||||
case '-':
|
||||
$bgcolor = 'red';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
$attr = ($id == $permessi) ? ' selected="selected"' : '';
|
||||
|
||||
$result .= '
|
||||
<option data-color="text-'.$bgcolor.'" _bgcolor_="'.$bgcolor.'" value="'.$id.'" '.$attr.'>'.$nome.'</option>';
|
||||
}
|
||||
$attr = ($id == $permessi) ? ' selected="selected"' : '';
|
||||
|
||||
$result .= '
|
||||
<option data-color="text-'.$bgcolor.'" _bgcolor_="'.$bgcolor.'" value="'.$id.'" '.$attr.'>'.$nome.'</option>';
|
||||
}
|
||||
</select>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$result .= '
|
||||
</select>
|
||||
</td>
|
||||
</tr>';
|
||||
|
||||
$submenus = $element['all_children'];
|
||||
if (!empty($submenus)) {
|
||||
foreach ($submenus as $submenu) {
|
||||
$result .= menuSelection($submenu, $group_id, $depth, $permessi_disponibili, $perms_names);
|
||||
$submenus = $element['all_children'];
|
||||
if (!empty($submenus)) {
|
||||
foreach ($submenus as $submenu) {
|
||||
$result .= menuSelection($submenu, $group_id, $depth, $permessi_disponibili, $perms_names);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
@ -2,40 +2,42 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
function variables($descrizione = '', $inizio = null, $fine = null, $rata = null, $numero_fatture = null)
|
||||
{
|
||||
$mese = [
|
||||
'01' => 'Gennaio',
|
||||
'02' => 'Febbraio',
|
||||
'03' => 'Marzo',
|
||||
'04' => 'Aprile',
|
||||
'05' => 'Maggio',
|
||||
'06' => 'Giugno',
|
||||
'07' => 'Luglio',
|
||||
'08' => 'Agosto',
|
||||
'09' => 'Settembre',
|
||||
'10' => 'Ottobre',
|
||||
'11' => 'Novembre',
|
||||
'12' => 'Dicembre',
|
||||
];
|
||||
if (!function_exists('variables')) {
|
||||
function variables($descrizione = '', $inizio = null, $fine = null, $rata = null, $numero_fatture = null)
|
||||
{
|
||||
$mese = [
|
||||
'01' => 'Gennaio',
|
||||
'02' => 'Febbraio',
|
||||
'03' => 'Marzo',
|
||||
'04' => 'Aprile',
|
||||
'05' => 'Maggio',
|
||||
'06' => 'Giugno',
|
||||
'07' => 'Luglio',
|
||||
'08' => 'Agosto',
|
||||
'09' => 'Settembre',
|
||||
'10' => 'Ottobre',
|
||||
'11' => 'Novembre',
|
||||
'12' => 'Dicembre',
|
||||
];
|
||||
|
||||
$result['list'] = '<ul>
|
||||
<li><code>{periodo}</code></li>
|
||||
<li><code>{data_inizio}</code></li>
|
||||
<li><code>{data_fine}</code></li>
|
||||
<li><code>{mese_fatturazione}</code></li>
|
||||
<li><code>{rata_attuale}</code></li>
|
||||
<li><code>{numero_rate}</code></li>
|
||||
</ul>';
|
||||
$result['list'] = '<ul>
|
||||
<li><code>{periodo}</code></li>
|
||||
<li><code>{data_inizio}</code></li>
|
||||
<li><code>{data_fine}</code></li>
|
||||
<li><code>{mese_fatturazione}</code></li>
|
||||
<li><code>{rata_attuale}</code></li>
|
||||
<li><code>{numero_rate}</code></li>
|
||||
</ul>';
|
||||
|
||||
if (!empty($descrizione)) {
|
||||
$result['descrizione'] = str_replace('{periodo}', 'durata dal '.Translator::dateToLocale($inizio).' al '.Translator::dateToLocale($fine), $descrizione);
|
||||
$result['descrizione'] = str_replace('{data_inizio}', Translator::dateToLocale($inizio), $result['descrizione']);
|
||||
$result['descrizione'] = str_replace('{data_fine}', Translator::dateToLocale($fine), $result['descrizione']);
|
||||
$result['descrizione'] = str_replace('{mese_fatturazione}', $mese[date('m', strtotime($inizio))], $result['descrizione']);
|
||||
$result['descrizione'] = str_replace('{rata_attuale}', $rata, $result['descrizione']);
|
||||
$result['descrizione'] = str_replace('{numero_rate}', $numero_fatture, $result['descrizione']);
|
||||
if (!empty($descrizione)) {
|
||||
$result['descrizione'] = str_replace('{periodo}', 'durata dal '.Translator::dateToLocale($inizio).' al '.Translator::dateToLocale($fine), $descrizione);
|
||||
$result['descrizione'] = str_replace('{data_inizio}', Translator::dateToLocale($inizio), $result['descrizione']);
|
||||
$result['descrizione'] = str_replace('{data_fine}', Translator::dateToLocale($fine), $result['descrizione']);
|
||||
$result['descrizione'] = str_replace('{mese_fatturazione}', $mese[date('m', strtotime($inizio))], $result['descrizione']);
|
||||
$result['descrizione'] = str_replace('{rata_attuale}', $rata, $result['descrizione']);
|
||||
$result['descrizione'] = str_replace('{numero_rate}', $numero_fatture, $result['descrizione']);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user