Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Checklist

O checklist depende da configuração de 3 entrypoints cujo suas configurações e características estão sendo detalhados abaixo.

Entry point: Tela Lista de Checklists

Filtro e Painel

Filtros e exibição da lista de checklists.

Rota: /checklist
Ex: https://smartos-interno.h.simova.cloud/checklist

Valores de entrada

$this->inputValues['data']; /* Data atual padrão, ou, data filtrada */
$this->inputValues['equipamento']; /* id do Equipamento filtrado */
$this->inputValues['tecnico']; /* ARRAY com o id de Técnicos filtrados */
$this->inputValues['os']; /* id da Os filtrada */

Saida::Array

A saída é composta por dois itens, o DATA e o FILTER_DATA, que irão retornar as informações para exibir a listagem de checklists, e os dados para as opções dos filtros. Para o FILTER_DATA serão enviados os arrays compostos sempre pelo ID e a DESCRICAO, atualmente podem ser configurados os filtros para TECNICO, OS e EQP.

[
	"DATA" => [ /** Array com os dados que serão exibidos na listagem */
		[
			"SEQ_CHECKLIST" => 10, /* seq checklist */
			"NOME_TEC" => "Branco", /* Nome tecnico */
			"DH" => "2023-07-12 12:22:09" /* DH */
		],
		[
			"SEQ_CHECKLIST" => 10, /* seq checklist */
			"NOME_TEC" => "Branco", /* Nome tecnico */
			"DH" => "2023-07-12 12:22:09" /* DH */
		]
	],
	"FILTER_DATA" => [/** Array com os dados que serão usados nas options dos filtros */
		"TECNICO" => [
			[
				"ID" => 12,
				"DESCRICAO" => "Jorge Wagner"
			],
			[
				"ID" => 22,
				"DESCRICAO" => "Fábio Simplicio Silva"
			],

		],
		"OS" => [
			[
				"ID" => 224,
				"DESCRICAO" => "OS224"
			],
			[
				"ID" => 785,
				"DESCRICAO" => "OS785"
			]
		],
		"EQP" => [
			[
				"ID" => 1,
				"DESCRICAO" => "Caminhão"
			],
			[
				"ID" => 2,
				"DESCRICAO" => "Trator"
			]
		]
	]
]

Entrypoint (Exemplo)

FILE_OR_DOMAIN: CHECKLIST
ACTION: checklistGrid

// $_SESSION['DEBUG_MODE'] = 1;
// $this->inputValues = $_SESSION['DEBUG_PARAMS'];

//Filtros
$data_filtro = $this->inputValues['data'] ?? null;
$data_atual = date("Y-m-d H:i:s");
// $equipamento_filtro = $this->inputValues['equipamento'] ?? null;
// $tecnico_filtro = $this->inputValues['tecnico'] ?? null;
// $os_filtro = $this->inputValues['os'] ?? null;
$checklist_filtro = $this->inputValues['checklist'] ?? null;

$checklists_prospeccao = Dao::Table('apontamento_resposta_prospeccao')
	->select(['SEQ_DB',
			  'FUNCIONARIO_SEQ_DB',
			  'INI_DH',
              'SEQ_DB_DEVICE_CHECKLIST'
	])
	->whereBetween('INI_DH',$data_filtro,$data_atual)
	->whereIn('SEQ_DB_DEVICE_CHECKLIST',$checklist_filtro)
    ->groupBy('SEQ_DB_DEVICE_CHECKLIST')
    ->orderBy('INI_DH','DESC')
	->get();
$funcionario_fk = array_column($checklists_prospeccao,'FUNCIONARIO_SEQ_DB','FUNCIONARIO_SEQ_DB');

$funcionario_array = Dao::Table('FUNCIONARIO')->select(['SEQ_DB','CRACHA','NOME'])->whereIn('SEQ_DB',$funcionario_fk)->get();
$funcionario_list = array_column($funcionario_array,null,'SEQ_DB');

$dadosGridChecklist = [];
$funcionario = null;
$data = null;
$i=0;
foreach($checklists_prospeccao as $cp){
	$funcionario_fk = $funcionario_list[$cp['FUNCIONARIO_SEQ_DB']] ?? null;
	if(!empty($funcionario_fk)){
		$funcionario = $funcionario_fk['CRACHA']." :: ".$funcionario_fk['NOME'];
		$data = $cp['INI_DH'];
		
		$dadosGridChecklist[$i]['SEQ_CHECKLIST'] = $cp['SEQ_DB_DEVICE_CHECKLIST'];
		$dadosGridChecklist[$i]['NOME_TEC'] = $funcionario;
		$dadosGridChecklist[$i]['DH'] = $data;
		$i++;
	}
}
$this->queryData['data']['DATA'] = $dadosGridChecklist;

Entry point: Relatório Checklist

  • Topo Topo do relatório

  • Conteúdo Conteúdo do relatório

  • Rodapé Rodapé

Exibição do relatório de checklist.

Rota: /checklist/<SEQ_CHECKLIST>
Ex: https://smartos-interno.h.simova.cloud/checklist/13

Entrada

$this->inputValues['checklist']; /* seq chamado na url */

Saida::Array

[
	"SEQ_CHECKLIST" => 10, /* seq checklist */
	"ORDEM_REPARACAO" => "OS2154ww1237",
	"DH" => "2023-07-12 10:55:29",
	"NOME_TEC" => "Chucky Norris",
	"COTACAO" => "0,00",
	"NOTE_1" => "3 desplazamiento",
	"NOTE_2" => "Andrés Camacho",
	"NOTE_3" => "8h labor",
	"NOME" => "Ingenio La Cabaña",
	"VEICULO" => "John Deere 6110J 2015",
	"PLACA" => "3182903",
	"VIN" => "1BM6110JTHA009297",
	"SERVICO_URGENTE" => [ /* array com os itens urgentes*/
		[
    		"SEQ_CHECKLIST_ITEM" => 1, /* seq do detalhe */
        	"TITULO_ITEM" => "Título do item 1", /* titulo do detalhe */
            "COMMENTS" => [ /* array dos comentarios, separado por virgula se mais de 1*/
            	"Aqui exibe o comentário 1"
            ],
            "QTD_FOTOS" => 2 /* quantidade de fotos que o detalhe possui*/
        ]
    ],
	"SERVICO_PRONTO" => [ /* array com os itens prontos*/
    	[
        	"SEQ_CHECKLIST_ITEM" => 5,
         	"TITULO_ITEM" => "Título do item",
         	"COMMENTS" => [
         	"Tem que ver isso aí", "Comentário 2"
                    ],
        	"QTD_FOTOS" => 2
      	]
  	],
  	"SERVICO_OK" => [ /* array com os itens ok*/
      	[
         	"SEQ_CHECKLIST_ITEM" => 8,
          	"TITULO_ITEM" => "Título do item",
           	"COMMENTS" => [
              	"Tem que ver isso aí", "Comentário 2"
           	],
           	"QTD_FOTOS" => 2
      	]
    ],
    "PHOTOS" => [ /* array com todas as fotos do checklist ok*/
      	[
           	"SEQ_CHECKLIST_ITEM" => 5, /* checklist do detalhe*/
           	"TYPE" => 'urgent', /* tipo do detalhe */
           	"TITLE" => "Títulos aqui", /* titulo do detalhe */
          	"URL" => "assets/img/checklist/teste_img.jpg" /*url da imagem*/
      	]
   	]

]

Entrypoint (Exemplo objeto)

FILE_OR_DOMAIN: CHECKLIST
ACTION: checklist

// $_SESSION['DEBUG_MODE'] = 1;
// $this->inputValues = $_SESSION['DEBUG_PARAMS'];

//Filtros
$checklist_filtro = $this->inputValues['checklist'] ?? null;

//Consulta Principal
$checklists_prospeccao = Dao::Table('apontamento_resposta_prospeccao')
	->select(['SEQ_DB',
			  'FUNCIONARIO_SEQ_DB',
			  'INI_DH',
			  'TIPO_EQUIPAMENTO_SEQ_DB',
			  'GRUPO_QUESTAO_SEQ_DB',
			  'QUESTAO_SEQ_DB',
			  'TIPO_RESPOSTA_SEQ_DB',
			  'OS_SEQ_DB',
			  'CLIENTE_SEQ_DB',
			  'CHASSI',
			  'SEQ_DB_DEVICE',
              'SEQ_DB_DEVICE_CHECKLIST',
			  'SEQ_DB_DEVICE_MASTER_SEQ_DB',
			  'OBSERVACAO'
	])
	->whereIn('SEQ_DB_DEVICE_CHECKLIST',$checklist_filtro)
    ->orderBy('INI_DH','DESC')
	->get();
//FKs resultantes da consulta principal
$funcionario_fk = array_column($checklists_prospeccao,'FUNCIONARIO_SEQ_DB','FUNCIONARIO_SEQ_DB');
$tipo_equipamento_fk = array_column($checklists_prospeccao,'TIPO_EQUIPAMENTO_SEQ_DB','TIPO_EQUIPAMENTO_SEQ_DB');
$grupo_questao_fk = array_column($checklists_prospeccao,'GRUPO_QUESTAO_SEQ_DB','GRUPO_QUESTAO_SEQ_DB');
$questao_fk = array_column($checklists_prospeccao,'QUESTAO_SEQ_DB','QUESTAO_SEQ_DB');
$tipo_resposta_fk = array_column($checklists_prospeccao,'TIPO_RESPOSTA_SEQ_DB','TIPO_RESPOSTA_SEQ_DB');
$os_fk = array_column($checklists_prospeccao,'OS_SEQ_DB','OS_SEQ_DB');
$cliente_fk = array_column($checklists_prospeccao,'CLIENTE_SEQ_DB','CLIENTE_SEQ_DB');
$boletim_fk = array_column($checklists_prospeccao,'SEQ_DB_DEVICE_MASTER_SEQ_DB','SEQ_DB_DEVICE_MASTER_SEQ_DB');
$prospeccao_fk = array_column($checklists_prospeccao,'SEQ_DB_DEVICE','SEQ_DB_DEVICE');
$checklist_fk = array_column($checklists_prospeccao,'SEQ_DB_DEVICE_CHECKLIST','SEQ_DB_DEVICE_CHECKLIST');

//Consultas auxiliares
$apontamento_deslocamento_array = Dao::Table('APONTAMENTO_DESLOCAMENTO')->select(['SEQ_DB','OS_SEQ_DB','INI_DH','TIPO_DESLOCAMENTO','VEICULO_SEQ_DB'])->whereIsNotNull('OS_SEQ_DB')->whereRaw('TIPO_DESLOCAMENTO = 2')->whereIn('OS_SEQ_DB',$os_fk)->whereIn('SEQ_DB_DEVICE_MASTER_SEQ_DB',$boletim_fk)->get();
$veiculo_fk = array_column($apontamento_deslocamento_array,'VEICULO_SEQ_DB','VEICULO_SEQ_DB');
$apontamento_deslocamento_list = [];
foreach($apontamento_deslocamento_array as $apt){
	if(!empty($apontamento_deslocamento_list[$apt['OS_SEQ_DB']]['FIM_DESLOCAMENTO'])){
		$apontamento_deslocamento_list[$apt['OS_SEQ_DB']]['FIM_DESLOCAMENTO'] = $apontamento_deslocamento_list[$apt['OS_SEQ_DB']]['FIM_DESLOCAMENTO'] + 1;	
	}else{
		$apontamento_deslocamento_list[$apt['OS_SEQ_DB']]['FIM_DESLOCAMENTO'] = 1;
	}
	$apontamento_deslocamento_list[$apt['OS_SEQ_DB']]['VEICULO_SEQ_DB'] = $apt['VEICULO_SEQ_DB'];
}

$apontamento_array = Dao::Table('APONTAMENTO')->select(['SEQ_DB_DEVICE_MASTER_SEQ_DB','INI_FIM_DIFF_SEC'])->whereIn('SEQ_DB_DEVICE_MASTER_SEQ_DB',$boletim_fk)->get();
$apontamento_list = [];
foreach($apontamento_array as $apt){
	if(!empty($apontamento_list[$apt['SEQ_DB_DEVICE_MASTER_SEQ_DB']]['TEMPO_TRABALHADO'])){
		$apontamento_list[$apt['SEQ_DB_DEVICE_MASTER_SEQ_DB']]['TEMPO_TRABALHADO'] = $apontamento_list[$apt['SEQ_DB_DEVICE_MASTER_SEQ_DB']]['TEMPO_TRABALHADO'] + $apt['INI_FIM_DIFF_SEC'];	
	}else{
		$apontamento_list[$apt['SEQ_DB_DEVICE_MASTER_SEQ_DB']]['TEMPO_TRABALHADO'] = $apt['INI_FIM_DIFF_SEC'];	
	}
}

$apontamento_fotos_array = Dao::Table('APONTAMENTO_FOTO_RESPOSTA_PROSPECCAO')->select(['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST','FOTO_THUMBNAIL'])->whereIn('SEQ_DB_DEVICE_RESPOSTA_CHECKLIST',$prospeccao_fk)->whereIn('SEQ_DB_DEVICE_CHECKLIST',$checklist_fk)->get();
$apontamento_fotos_list = [];
foreach($apontamento_fotos_array as $apt){
	if(!empty($apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['QTD_FOTOS'])){
		$apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['QTD_FOTOS'] = $apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['QTD_FOTOS'] + 1;
	}else{
		$apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['QTD_FOTOS'] = 1;
	}
	$apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['FOTOS'][] = $apt['FOTO_THUMBNAIL'];
}

$funcionario_array = Dao::Table('FUNCIONARIO')->select(['SEQ_DB','CRACHA','NOME'])->whereIn('SEQ_DB',$funcionario_fk)->get();
$funcionario_list = array_column($funcionario_array,null,'SEQ_DB');

$tipo_equipamento_array = Dao::Table('TIPO_EQUIPAMENTO')->select(['SEQ_DB','CODIGO','DESCRICAO'])->whereIn('SEQ_DB',$tipo_equipamento_fk)->get();
$tipo_equipamento_list = array_column($tipo_equipamento_array,null,'SEQ_DB');

$grupo_questao_array = Dao::Table('GRUPO_QUESTAO')->select(['SEQ_DB','DESCRICAO'])->whereIn('SEQ_DB',$grupo_questao_fk)->get();
$grupo_questao_list = array_column($grupo_questao_array,'DESCRICAO','SEQ_DB');

$questao_array = Dao::Table('QUESTAO')->select(['SEQ_DB','DESCRICAO'])->whereIn('SEQ_DB',$questao_fk)->get();
$questao_list = array_column($questao_array,'DESCRICAO','SEQ_DB');

$tipo_resposta_array = Dao::Table('TIPO_RESPOSTA')->select(['SEQ_DB','CLASSIFICACAO_RESPOSTA','DESCRICAO'])->whereIn('SEQ_DB',$tipo_resposta_fk)->get();
$tipo_resposta_list = array_column($tipo_resposta_array,null,'SEQ_DB');

$os_array = Dao::Table('OS')->select(['SEQ_DB','CODIGO'])->whereIn('SEQ_DB',$os_fk)->get();
$os_list = array_column($os_array,'CODIGO','SEQ_DB');

$veiculo_array = Dao::Table('VEICULO')->select(['SEQ_DB','PLACA','DESCRICAO'])->whereIn('SEQ_DB',$veiculo_fk)->get();
$veiculo_list = array_column($veiculo_array,null,'SEQ_DB');

$cliente_array = Dao::Table('CLIENTE')->select(['SEQ_DB','CODIGO','DESCRICAO'])->whereIn('SEQ_DB',$cliente_fk)->get();
$cliente_list = array_column($cliente_array,null,'SEQ_DB');

//Variáveis para montagem dos dados
$dados = [];
$data_hora = null;
$deslocamento = null;
$veiculo_descricao = null;
$veiculo_placa = null;
$os = null;
$cliente = null;
$grupo_questao = null;
$questao = null;
$tipo_resposta = null;
$observacao = null;
$funcionario = null;
$chassi = null;
$horas_trabalhadas = null;
$qtd_deslocamento = null;
$horas_trabalhadas = null;
$qtd_fotos = null;
$fotos = null;
$a=0;
$b=0;
$c=0;
$i=0;
$f=0;
//Montagem do array de dados
foreach($checklists_prospeccao as $check){
	//Preenchimento das variáveis
	$os = $os_list[$check['OS_SEQ_DB']] ?? null;
	$cliente = $cliente_list[$check['CLIENTE_SEQ_DB']]['CODIGO']."::".$cliente_list[$check['CLIENTE_SEQ_DB']]['DESCRICAO'] ?? null;
	$data_hora = date("d/m/Y H:i:s", strtotime($check['INI_DH']));
	$funcionario = $funcionario_list[$check['FUNCIONARIO_SEQ_DB']]['CRACHA']."::".$funcionario_list[$check['FUNCIONARIO_SEQ_DB']]['NOME'] ?? null;
	$deslocamento = $apontamento_deslocamento_list[$check['OS_SEQ_DB']] ?? null;
	if(!empty($deslocamento)){
		$qtd_deslocamento = $deslocamento['FIM_DESLOCAMENTO'];
		$veiculo_descricao = $veiculo_list[$deslocamento['VEICULO_SEQ_DB']]['DESCRICAO'] ?? null;
		$veiculo_placa = $veiculo_list[$deslocamento['VEICULO_SEQ_DB']]['PLACA'] ?? null;
	}
	$horas_trabalhadas_fk = $apontamento_list[$check['SEQ_DB_DEVICE_MASTER_SEQ_DB']]['TEMPO_TRABALHADO'] ?? null;
	if(!empty($horas_trabalhadas_fk)){
		$horas_trabalhadas = gmdate('H:i:s',$horas_trabalhadas_fk);
	}
	$chassi = $check['CHASSI'] ?? null;
	$grupo_questao = $grupo_questao_list[$check['GRUPO_QUESTAO_SEQ_DB']] ?? null;
	$questao = $questao_list[$check['QUESTAO_SEQ_DB']] ?? null;
	$tipo_resposta = $tipo_resposta_list[$check['TIPO_RESPOSTA_SEQ_DB']] ?? null;
	$observacao = $check['OBSERVACAO'] ?? null;
	$fotos = $apontamento_fotos_list[$check['SEQ_DB_DEVICE']] ?? null;
	$qtd_fotos = $fotos['QTD_FOTOS'] ?? 0;
	
	$dados['SEQ_CHECKLIST'] = $check['SEQ_DB_DEVICE_CHECKLIST'];
	$dados['ORDEM_REPARACAO'] = $os;
	$dados['DH'] = $data_hora;
	$dados['NOME_TEC'] = $funcionario;
	//	$dados['COTACAO'] = "0,00";
	$dados['NOTE_1'] = $qtd_deslocamento;
	$dados['NOTE_2'] = $cliente;
	$dados['NOTE_3'] = $horas_trabalhadas;
	$dados['NOME'] = $funcionario;
	$dados['VEICULO'] = $veiculo_descricao;
	$dados['PLACA'] = $veiculo_placa;
	$dados['VIN'] = $chassi;
	
	if($tipo_resposta['CLASSIFICACAO_RESPOSTA'] == 2){
		$dados['SERVICO_URGENTE'][$a]['SEQ_CHECKLIST_ITEM'] = $check['SEQ_DB'];
		$dados['SERVICO_URGENTE'][$a]['TITULO_ITEM'] = $questao;
		$dados['SERVICO_URGENTE'][$a]['COMMENTS'][0] = $observacao;
		$dados['SERVICO_URGENTE'][$a]['QTD_FOTOS'] = $qtd_fotos;
		
		if(!empty($fotos)){
			foreach($fotos['FOTOS'] as $foto){
				$dados['PHOTOS'][$f]['SEQ_CHECKLIST_ITEM'] = $check['SEQ_DB'];
				$dados['PHOTOS'][$f]['TYPE'] = 'urgent';
				$dados['PHOTOS'][$f]['TITLE'] = $questao;
				$dados['PHOTOS'][$f]['URL'] = $foto;	
				$f++;
			}
		}

		$a++;
	}else if($tipo_resposta['CLASSIFICACAO_RESPOSTA'] == 1){
		$dados['SERVICO_PRONTO'][$b]['SEQ_CHECKLIST_ITEM'] = $check['SEQ_DB'];
		$dados['SERVICO_PRONTO'][$b]['TITULO_ITEM'] = $questao;
		$dados['SERVICO_PRONTO'][$b]['COMMENTS'][0] = $observacao;
		$dados['SERVICO_PRONTO'][$b]['QTD_FOTOS'] = $qtd_fotos;
		
		if(!empty($fotos)){
			foreach($fotos['FOTOS'] as $foto){
				$dados['PHOTOS'][$f]['SEQ_CHECKLIST_ITEM'] = $check['SEQ_DB'];
				$dados['PHOTOS'][$f]['TYPE'] = 'ready';
				$dados['PHOTOS'][$f]['TITLE'] = $questao;
				$dados['PHOTOS'][$f]['URL'] = $foto;	
				$f++;
			}
		}

		$b++;
	}else if($tipo_resposta['CLASSIFICACAO_RESPOSTA'] == 0){
		$dados['SERVICO_OK'][$c]['SEQ_CHECKLIST_ITEM'] = $check['SEQ_DB'];
		$dados['SERVICO_OK'][$c]['TITULO_ITEM'] = $questao;
		$dados['SERVICO_OK'][$c]['COMMENTS'][0] = $observacao;
		$dados['SERVICO_OK'][$c]['QTD_FOTOS'] = $qtd_fotos;
		
		if(!empty($fotos)){
			foreach($fotos['FOTOS'] as $foto){
				$dados['PHOTOS'][$f]['SEQ_CHECKLIST_ITEM'] = $check['SEQ_DB'];
				$dados['PHOTOS'][$f]['TYPE'] = 'ok';
				$dados['PHOTOS'][$f]['TITLE'] = $questao;
				$dados['PHOTOS'][$f]['URL'] = $foto;	
				$f++;
			}
		}
		$c++;
	}
}

$this->queryData['data'] = $dados;

Entry point: Tela detalhes do checklist

Tela de detalhes

Exibe as imagens e detalhes do item.

Rota: checklist/<SEQ_CHECKLIST>/detail/<SEQ_DETALHE>
Ex: https://smartos-interno.h.simova.cloud/checklist/10/details/5

Entrada

$this->inputValues['checklist']; /*seq do checklist vindo da url*/
$this->inputValues['detail']; /*seq do detalhe vindo da url*/

Saida::Array

[
    "SEQ_CHECKLIST" => 10,
    "SEQ_CHECKLIST_ITEM" => 23,
    "TYPE" => 'ok', /* urgent, ready, ou ok*/
    "TITLE" => "Luces de servicio delanteras (altas y bajas)",
    "COMMENTS" => [
        "Tem que ver isso aí", "Comentário 2"
    ],
    "PHOTOS" => [
        [
            "URL" => "assets/img/checklist/teste_img.jpg",
            "PHOTO_TITLE" => "Vehículo: John Deere 6110j 2015",
            "PHOTO_SUBTITLE" => "Hora de Carga Certificada: 27/01/2023 7:46 p.m."
        ],
        [
            "URL" => "assets/img/checklist/teste_img1.jpg",
            "PHOTO_TITLE" => "Vehículo: John Wick 2015",
            "PHOTO_SUBTITLE" => "Hora de Carga Certificada: 20/10/2023 7:46 p.m."
        ]
    ]
];

Entrypoint (Exemplo - kurosu.h.simova.cloud)

FILE_OR_DOMAIN: CHECKLIST
ACTION: checklistDetail

// $_SESSION['DEBUG_MODE'] = 1;
// $this->inputValues = $_SESSION['DEBUG_PARAMS'];

//Filtros
$checklist_filtro = $this->inputValues['checklist'] ?? null;
$details_filtro = $this->inputValues['detail'] ?? null;

//Consulta Principal
$checklists_prospeccao = Dao::Table('apontamento_resposta_prospeccao')
	->select(['SEQ_DB',
			  'FUNCIONARIO_SEQ_DB',
			  'INI_DH',
			  'TIPO_EQUIPAMENTO_SEQ_DB',
			  'GRUPO_QUESTAO_SEQ_DB',
			  'QUESTAO_SEQ_DB',
			  'TIPO_RESPOSTA_SEQ_DB',
			  'OS_SEQ_DB',
			  'CLIENTE_SEQ_DB',
			  'CHASSI',
			  'SEQ_DB_DEVICE',
              'SEQ_DB_DEVICE_CHECKLIST',
			  'SEQ_DB_DEVICE_MASTER_SEQ_DB',
			  'OBSERVACAO'
	])
	->whereIn('SEQ_DB_DEVICE_CHECKLIST',$checklist_filtro)
	->whereIn('SEQ_DB',$details_filtro)
    ->orderBy('INI_DH','DESC')
	->get();
//FKs resultantes da consulta principal
$grupo_questao_fk = array_column($checklists_prospeccao,'GRUPO_QUESTAO_SEQ_DB','GRUPO_QUESTAO_SEQ_DB');
$questao_fk = array_column($checklists_prospeccao,'QUESTAO_SEQ_DB','QUESTAO_SEQ_DB');
$tipo_resposta_fk = array_column($checklists_prospeccao,'TIPO_RESPOSTA_SEQ_DB','TIPO_RESPOSTA_SEQ_DB');
$prospeccao_fk = array_column($checklists_prospeccao,'SEQ_DB_DEVICE','SEQ_DB_DEVICE');
$checklist_fk = array_column($checklists_prospeccao,'SEQ_DB_DEVICE_CHECKLIST','SEQ_DB_DEVICE_CHECKLIST');

//Consultas auxiliares
$apontamento_fotos_array = Dao::Table('APONTAMENTO_FOTO_RESPOSTA_PROSPECCAO')->select(['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST','FOTO_THUMBNAIL'])->whereIn('SEQ_DB_DEVICE_RESPOSTA_CHECKLIST',$prospeccao_fk)->whereIn('SEQ_DB_DEVICE_CHECKLIST',$checklist_fk)->get();
$apontamento_fotos_list = [];
foreach($apontamento_fotos_array as $apt){
	if(!empty($apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['QTD_FOTOS'])){
		$apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['QTD_FOTOS'] = $apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['QTD_FOTOS'] + 1;
	}else{
		$apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['QTD_FOTOS'] = 1;
	}
	$apontamento_fotos_list[$apt['SEQ_DB_DEVICE_RESPOSTA_CHECKLIST']]['FOTOS'][] = $apt['FOTO_THUMBNAIL'];
}

$grupo_questao_array = Dao::Table('GRUPO_QUESTAO')->select(['SEQ_DB','DESCRICAO'])->whereIn('SEQ_DB',$grupo_questao_fk)->get();
$grupo_questao_list = array_column($grupo_questao_array,'DESCRICAO','SEQ_DB');

$questao_array = Dao::Table('QUESTAO')->select(['SEQ_DB','DESCRICAO'])->whereIn('SEQ_DB',$questao_fk)->get();
$questao_list = array_column($questao_array,'DESCRICAO','SEQ_DB');

$tipo_resposta_array = Dao::Table('TIPO_RESPOSTA')->select(['SEQ_DB','CLASSIFICACAO_RESPOSTA','DESCRICAO'])->whereIn('SEQ_DB',$tipo_resposta_fk)->get();
$tipo_resposta_list = array_column($tipo_resposta_array,null,'SEQ_DB');


//Variáveis para montagem dos dados
$dados = [];
$grupo_questao = null;
$questao = null;
$tipo_resposta = null;
$observacao = null;
$fotos = null;
$a=0;
//Montagem do array de dados
foreach($checklists_prospeccao as $check){
	//Preenchimento das variáveis
	$grupo_questao = $grupo_questao_list[$check['GRUPO_QUESTAO_SEQ_DB']] ?? null;
	$questao = $questao_list[$check['QUESTAO_SEQ_DB']] ?? null;
	$tipo_resposta = $tipo_resposta_list[$check['TIPO_RESPOSTA_SEQ_DB']] ?? null;
	$observacao = $check['OBSERVACAO'] ?? null;
	$fotos = $apontamento_fotos_list[$check['SEQ_DB_DEVICE']] ?? null;
	
	$dados['SEQ_CHECKLIST'] = $check['SEQ_DB_DEVICE_CHECKLIST'];
	$dados['SEQ_CHECKLIST_ITEM'] = $check['SEQ_DB'];
	if($tipo_resposta['CLASSIFICACAO_RESPOSTA'] == 2){
		$dados['TYPE'] = 'urgent';
	}else if($tipo_resposta['CLASSIFICACAO_RESPOSTA'] == 1){
		$dados['TYPE'] = 'ready';
	}else if($tipo_resposta['CLASSIFICACAO_RESPOSTA'] == 0){
		$dados['TYPE'] = 'ok';
	}
	$dados['TITLE'] = $questao;
	$dados['COMMENTS'][0] = $observacao;
	if(!empty($fotos)){
		foreach($fotos['FOTOS'] as $foto){
			$dados['PHOTOS'][$a]['URL'] = $foto;
			$dados['PHOTOS'][$a]['PHOTO_TITLE'] = $tipo_resposta['DESCRICAO'];
			$dados['PHOTOS'][$a]['PHOTO_SUBTITLE'] = '';
			$a++;
		}
	}
}

$this->queryData['data'] = $dados;