<?php

class Seguro_VistoriapreviaController extends Agro_Controller_Action {
	protected $_paginator = false;
	public function init() {
		$this->view->title = 'Gerência de Vistorias Prévias » Listagem';
		ini_set('memory_limit','512M');
	}


	public function getModel() {
		return new Seguro_Model_VistoriaPrevia();
	}

	public function getForm() {
		return new Seguro_Form_VistoriaPrevia();
	}

	public function getFormFilter() {
		return new Seguro_Form_VistoriaPreviaFilter();
	}

	public function getFormConsulta() {
		return new Seguro_Form_VistoriaPreviaConsulta();
	}

	/**
	* Monta a tela de pesquisa de propostas
	*
	*/
	public function indexAction() {
		//formulário do filtro
		$this->view->form = $this->getFormFilter();
	}


	public function encaminharvistoriaAction(){
		$this->isAjax();
		$dados = $this->getRequest()->getParams();

		$Model = $this->getModel();
        $adapter = Agro_Db_Table_Abstract::getDefaultAdapter();
        $mensagem = count($dados['id_propostas'])." proposta(s) encaminhada(s) com sucesso!";

		try {
            $adapter->beginTransaction();

			if($Model->save($dados, true)) {
                $adapter->commit();
			}else{
                $mensagem = "Erro ao encaminhar proposta!";
                $adapter->rollback();
			}
		} catch (Zend_Exception $ze) {
            $mensagem = $ze->getMessage();
            $adapter->rollback();
		} catch (Exception $ze) {
		    if ($ze->getCode() === Seguro_Model_VistoriaPrevia::EXCEPTION_PROPOSTAS_COM_SINISTRO) {
                $mensagem = $ze->getMessage();
                $adapter->commit();
            } else {
                $mensagem = "Erro ao encaminhar proposta!";
                $adapter->rollback();
            }
		}

        $this->getResponse()->setBody(Zend_Json::encode($mensagem));
	}

	/**
	 * Altera o status da Vistoria para Dispensado
	 */
	public function dispensarAction() {
		$this->isAjax();
		$dados = $this->getRequest()->getParams();

		$Model = $this->getModel();

		try {
			if($Model->dispensar($dados)) {
				$result = count($dados['id_propostas'])." proposta(s) dispensada(s) com sucesso!";
			}else{
				$result = "Erro ao dispensar proposta!";
			}
		} catch (Zend_Exception $ze) {
			$result = $ze->getMessage();
		} catch (Exception $e) {
			$result = "Erro ao dispensar proposta!";
		} 

		$this->getResponse()->setBody(Zend_Json::encode($result));
	}


	public function marcapropostasAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$Adapter = new Zend_File_Transfer_Adapter_Http();
		$Adapter->setDestination(APPLICATION_PATH.'/upload_files/temp/');
		$file = $Adapter->getFileInfo();
		if(!$Adapter->receive($file['propostas']['name'])){
			$result['status'] = false;
		} else {
			$dados = file_get_contents(APPLICATION_PATH.'/upload_files/temp/' . $file['propostas']['name']);
			// $dados = str_replace("\r\n", ",", $dados);
			$propostas = explode("\r\n", trim($dados));

			$model = new Seguro_Model_Propostas;
			$propostasVigentes = $model->getPropostasVigentes($propostas);
			$propostasVigentes = array_map(function($value) {
				return $value['id_proposta'];
			}, $propostasVigentes);
			
			$result['propostas'] = implode(',', $propostasVigentes);
			$result['status'] = true;
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));
	}

	public function listAction() {
		$this->getHelper('layout')->disableLayout();
		$where = $this->getFilter();
		$Model = $this->getModel();

		if ($this->getRequest()->getParam("o")) {
			$Model->_order = trim($this->getRequest()->getParam("o") .' '. $this->getRequest()->getParam("s"));
		}
		
		try {
			$Rs = $Model->getData($where);
		} catch (Exception $e) {
			echo ($e->getMessage());
			dump($e->getTraceAsString());
		}

		$this->view->paginator = $Rs;

	}
/*
	public function salvaagendamentoAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$Model = $this->getModel();
		$dados = $this->getRequest()->getParams();

		$result = array();
		if($Model->saveAgendamento($dados)) {
			$result['status'] = 1;
		} else {
			$result['status'] = 0;
		}
		$this->getResponse()->setBody(Zend_Json::encode($result));
	}*/

	public function getFilter() {
		$User = Zend_Auth::getInstance()->getIdentity();
		$where = array();

		if ($this->getRequest()->getParam('dt_inicio')) {
			$where[] = array(
				'field' => 'sub.data_semeadura',
				'operator' => '<=',
				'value' => Agro_Util::formatDate($this->getRequest()->getParam('dt_inicio'), 'Y-MM-dd')
			);
		}

		if($this->getRequest()->getParam('fl_filtro_data_plantio')){
			$where[] = array(
				'field' => 'fl_filtro_data_plantio',
				'operator' => '=',
				'value' => true
			);
		}

		$id_municipio = $this->getRequest()->getParam('id_municipio');
		if ($id_municipio && $id_municipio != 0) {
			$where[] = array(
				'field' => 'm.id',
				'operator' => '=',
				'value' => $id_municipio
			);
		}

		$id_estado = $this->getRequest()->getParam('id_estado');
		if ($id_estado && $id_estado != 0) {
			$where[] = array(
				'field' => 'm.id_estado',
				'operator' => '=',
				'value' => $id_estado
			);
		}

		if ($this->getRequest()->getParam('id_status')) {
			$where[] = array(
				'field' => 'vp.id_status',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_status')
			);
		} else {
			$where[] = array(
				'field' => 'vp.id_status',
				'operator' => ' is ',
				'value' => 'null'
			);
		}

		if ($this->getRequest()->getParam('id_safra')) {
			$where[] = array(
				'field' => 'saf.id',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_safra')
			);
		}


		if ($this->getRequest()->getParam('id_produto')) {
			//busca pelo produto geral em vez do produto para não conflitar os dados com a safra
			$modelPG = new Produto_Model_ProdutosGeral;
			$produtoGeral = $modelPG->getProdutosGeralbyProduto($this->getRequest()->getParam('id_produto'));
			$arTMP = array();
			foreach ($produtoGeral as $pg) {
				$arTMP[] = $pg['id'];
			}
			$where[] = array(
				'field' => 'prodg.id',
				'operator' => 'in',
				'value' => '('.implode(',',$arTMP).')'
			);
		}

		if ($this->getRequest()->getParam('id_corretor')) {
			$where[] = "usu.id in (".implode(',', $this->getRequest()->getParam('id_corretor')).")";
		}
		
		if ($this->getRequest()->getParam('vl_pesquisar_por')) {
		   
			switch ($this->getRequest()->getParam('pesquisar_por')) {
				case 'ds_nome_proponente':
				case 'ds_cpf_proponente':
					$value = "'%".$this->getRequest()->getParam('vl_pesquisar_por')."%'";
					$operator = 'ilike';
					break;
				case 'p.id':
				    $value = "(select id_endosso from seguro.propostas where id = (".$this->getRequest()->getParam('vl_pesquisar_por')."))";
				    $operator = '=';
				    $field_filter = 'p.id_endosso';
				    break;
				default:
					$value = $this->getRequest()->getParam('vl_pesquisar_por');
					$operator = '=';
					break;
			}

			$where[] = array (
			    'field' => ($field_filter ? $field_filter : $this->getRequest()->getParam('pesquisar_por')),
				'operator' => $operator,
				'value' => $value
			);
		}

		if ($this->getRequest()->getParam('dt_criacao')) {
			$where[] = array(
				'field' => 'to_char(vp.dt_criacao, \'DD/MM/YYYY\')',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('dt_criacao')
			);
		}

		if ($this->getRequest()->getParam('situacao_boleto')) {
			switch ($this->getRequest()->getParam('situacao_boleto')){
				case '1':
					$value = 'true';
					break;
				case '2':
					$value = 'false';
					break;
			}
			$where[] = array(
				'field' => 'pb.fl_pago',
				'operator' => 'is',
				'value' => $value
			);
		}

		return $where;
	}

	public function listhistoricoAction() {
		$this->getHelper('layout')->disableLayout();

		$Historico = new Seguro_Model_VistoriaPreviaHistorico();
		$this->view->historicos = $Historico->getHistoricoByVistoria($this->getRequest()->getParam('id_proposta_vistoria'))->toArray();
	}

	public function importarsolicitacaoAction() {
		$this->view->title = "Seguro » Vistoria Prévia » Importar Solicitação";

		$this->view->form = $this->getForm();

		if ($this->getRequest()->isPost()) {
			$this->isAjax();
			try {
				$resposta = array();
				if ($this->getRequest()->getParam('id_empresa')) {
					$Adapter = new Zend_File_Transfer_Adapter_Http();
					$Adapter->setDestination(APPLICATION_PATH.'/upload_files/temp/');
					$file = $Adapter->getFileInfo();

					if (!$Adapter->receive($file['solicitacoes']['name'])) {
						$resposta['status'] = 'Erro ao importar Solicitações!';
					} else {
						$extensao = explode('.',$file['solicitacoes']['name']);
						if ($extensao[1] == 'csv') {
							$arquivo = fopen(APPLICATION_PATH.'/upload_files/temp/' . $file['solicitacoes']['name'],"r");
							$vistoriaNovaDados = array(
								'id_propostas' => array(),
								'id_empresa' => $this->getRequest()->getParam('id_empresa')
							);
							while(($dados = fgetcsv($arquivo, 0, ";")) != false){
								if (is_numeric($dados[0])) {
									$vistoriaNovaDados['id_propostas'][] = $dados[0];
								}
							}

							$Model = $this->getModel();
							$saved = $Model->save($vistoriaNovaDados);

							$resposta['status'] = 'Importação concluída com sucesso!';
							if ($saved !== true) {
								$resposta['status'] = $saved;
							}
						} else {
							$resposta['status'] = 'Formato de arquivo inválido!';
						}
					}
				} else {
					$resposta['status'] = 'Empresa inválida!';
				}
			} catch (Exception $e) {
				$resposta['status'] = 'Ocorreu um erro ao importar as solicitações!';
			}

			$this->getResponse()->setBody(Zend_Json::encode($resposta));
		}
	}

	public function consultarvistoriaAction() {
		$this->view->form = $this->getFormConsulta();
	}

	public function listconsultarAction() {
		$this->getHelper('layout')->disableLayout();
		$where = $this->getFilterConsultar();
		$Model = $this->getModel();

		$this->_paginator = $this->getRequest()->getParam('show_paginacao');
		$recordsPerPage = ($this->recordsPerPage ? $this->recordsPerPage :  RECORDS_PER_PAGE);

		try {
			$Rs = $Model->getDataConsulta($where);

			if (empty($Rs)) {
			    throw new Exception('Não há Vistoria Prévia encaminhada para os dados informados.');
            }

			$this->view->paginator = $Model->getPaginator($Rs, $this->getRequest()->getParam('page'), $recordsPerPage, $this->_paginator);
		} catch (Exception $e) {
            $this->getResponse()->setBody('<script>alert("' . $e->getMessage() . '");</script>');
		}
	}

	private function getFilterConsultar() {
		$where = array();
        $usuarioLogado = Zend_Auth::getInstance()->getIdentity();
        $usuarioCorretorSublogin = [
          Sistema_Model_Usuarios::TIPO_USUARIO_CORRETOR,
          Sistema_Model_Usuarios::TIPO_USUARIO_PREPOSTO
        ];

		$statusPrevia = Sistema_Model_Status::VP_AGUARDANDO_VISTORIA . ','
			. Sistema_Model_Status::VP_ENC . ','
			. Sistema_Model_Status::VP_TRANSMITIDA . ','
			. Sistema_Model_Status::VP_TRANSMITIDA_SEM_FOTOS;

        if ($this->getRequest()->getParam('id_status_empresa')) {
            $statusPrevia = implode(",", $this->getRequest()->getParam('id_status_empresa'));
        }
        $where[] = "pvp.id_status in ({$statusPrevia})";

        $operatorAnalise = "not in";
        $statusAnalise = "234";
        if ($this->getRequest()->getParam('id_status_analise_search')) {
            $statusAnalise = implode("," , $this->getRequest()->getParam('id_status_analise_search'));
            $operatorAnalise = "in";
        }
        $where[] = "pvp.id_status_analise {$operatorAnalise} ({$statusAnalise})";

		if ($this->getRequest()->getParam('vl_pesquisar_por') && $this->getRequest()->getParam('pesquisar_por') !== '') {
		   
			switch ($this->getRequest()->getParam('pesquisar_por')) {
				case 'prop.ds_nome_proponente':
				case 'prop.cpf_cnpj':
					$value = "'%".$this->getRequest()->getParam('vl_pesquisar_por')."%'";
					$operator = 'ilike';
					break;
				case 'p.id':
				    $value = "(select id_endosso from seguro.propostas where id = (".$this->getRequest()->getParam('vl_pesquisar_por')."))";
				    $operator = '=';
				    $field_filter = 'p.id_endosso';
				    break;
				default:
					$value = $this->getRequest()->getParam('vl_pesquisar_por');
					$operator = '=';
					break;
			}
			$field_filter =  $field_filter ? $field_filter : $this->getRequest()->getParam('pesquisar_por');
			$where[] = "{$field_filter} {$operator} {$value}";

			if ($this->getRequest()->getParam('pesquisar_por') == 'p.id') {
				return $where;
			}	
		}

		if ($this->getRequest()->getParam('id_preposto')) {
			$where[] = "sp.id_usuario = " . $this->getRequest()->getParam('id_preposto');
		} else if (in_array($usuarioLogado->tp_usuario, $usuarioCorretorSublogin)) {
            $where[] = "p.id_usuario_criacao = {$usuarioLogado->id}";
        }

		if ($this->getRequest()->getParam('id_safra')) {
			$where[] = "prod.id_safra = " . $this->getRequest()->getParam('id_safra');
		}

		if ($this->getRequest()->getParam('id_produto') && $this->getRequest()->getParam('id_produto') != 0) {
			$where[] = "prod.id = " . $this->getRequest()->getParam('id_produto');
		}

		return $where;
	}

	public function listadocumentoAction()
    {
        $this->isAjax(true);
        $dados = $this->getRequest()->getParams();
        $idPropostaVistoria = !Agro_Util::filterVariable($dados['id_proposta_vistoria'])
            ? 0
            : (int)$dados['id_proposta_vistoria'];

        $arquivos = (new Seguro_Model_Vistoriapreviaempresaarquivos())->getArquivos($idPropostaVistoria);
        $this->view->arquivos = $arquivos;

        $dadosLaudo = [
            "module" => 'regulacao',
            "controller" => 'lvp001',
            "action" => 'formnovo',
            "id_proposta" => $dados['id_proposta'],
            "id_proposta_vistoria" => $idPropostaVistoria,
        ];

        $modelVistoriaEmpresa = new Seguro_Model_VistoriaPreviaEmpresa();
        $laudo = $modelVistoriaEmpresa->getLaudo($idPropostaVistoria, $dados['id_proposta']);

        if (!empty($laudo) && !empty($laudo['id'])) {
            $dadosLaudo['id_laudo'] = $laudo['id'];
        }

        //busca informações da vistoria mãe para validar se há quadras indicadas para nova vistoria nessa nova vistoria
        $vp = $modelVistoriaEmpresa->find($dadosLaudo['id_proposta_vistoria'])->current();
        $itensLaudoMae = null;

        if ($vp->id_vistoria_mae) {
            $arTMP = array_merge($dadosLaudo, array('id_proposta_vistoria' => $vp->id_vistoria_mae));
            $dadosLaudoMae = $modelVistoriaEmpresa->getLaudo($arTMP['id_proposta_vistoria'], $arTMP['id_proposta']);

            if (!empty($dadosLaudoMae) && !empty($dadosLaudoMae['id'])) {
                $arTMP['id_laudo'] = $dadosLaudoMae['id'];
            }

            $arTMP['fl_habilitar_nova_vistoria'] = true;
            $itensLaudoMae = $modelVistoriaEmpresa->getItensLaudo($arTMP);
            $arItensMae = array();

            foreach ($itensLaudoMae as $item) {
                //quando é vistoria nova, não traz os campos preenchidos
                $arItensMae[] = array(
                    'id_proposta' => $dadosLaudo['id_proposta'],
                    'id_proposta_vistoria' => $dadosLaudo['id_proposta_vistoria'],
                    'nr_item_segurado' => $item['nr_item_segurado'],
                    'id_item_segurado' => $item['id_item_segurado'],
                    'id_item' => $item['id_item'],
                    'ds_item_segurado' => $item['ds_item_segurado'] ? $item['ds_item_segurado'] : $item['nr_quadra'],
                    'vl_rendimento_tonelada' => $item['vl_rendimento_tonelada'],
                    'vl_lmga' => $item['vl_lmga'],
                    'vl_area' => $item['vl_area'],
                );
            }
        }

        //valida se há itens setados para nova vistoria da vistoria anterior
        $itensLaudo = $arItensMae && !$dadosLaudo['id_laudo']
            ? $arItensMae
            : $modelVistoriaEmpresa->getItensLaudo($dadosLaudo);

        //adiciona a coluna nr_quadra a tabela de arquivos
        foreach ($this->view->arquivos as $key => $arquivo) {
            if ($arquivo['ds_tipo_arquivo'] == 'Declaração' && !$arquivo['fl_fila_transmissao']) {
                unset($this->view->arquivos[$key]);
                continue;
            }

            foreach ($itensLaudo as $key2 => $item) {
                if (strtolower($arquivo['ds_tipo_arquivo']) == 'foto') {
                    $fileName = explode('_', $arquivo['ds_nome_arquivo']);

                    if ($fileName[3] == $item['id_item_segurado']) {
                        $nroItem = ($item['nr_item_segurado'] ? $item['nr_item_segurado'] : $key2 + 1);
                        $nrQuadra = ($item['nr_quadra'] ? $item['nr_quadra'] : $item['ds_item_segurado']);
                        $this->view->arquivos[$key]['nr_quadra'] = $nroItem . "." . $nrQuadra;
                    }
                }
            }
        }
    }

	public function atualizastatusarquivosfotoparavistoriastransmitidasAction(): void
	{
		$this->isAjax();
		
		$dados = $this->getRequest()->getParams();

		try {
			$modelArquivos = new Seguro_Model_Vistoriapreviaempresaarquivos();
	
			$idsPropostasVistoriasaStatusTransmitidas = $modelArquivos
				->findIdsPropostaVistoriasPreviasNaoTransmitidosByIdSafra((int) $dados['idSafra']);
			$idsPropostasVistoriasaStatusTransmitidasSemFotos = $modelArquivos
				->findIdsPropostaVistoriaPreviaToFixArquivosRecebidosByIdSafra(
					(int) $dados['idSafra'],
					Sistema_Model_Status::VP_TRANSMITIDA_SEM_FOTOS,
					true
				);
			
			if (
				empty($idsPropostasVistoriasaStatusTransmitidas)
				&& empty($idsPropostasVistoriasaStatusTransmitidasSemFotos)
			) {
				throw new Exception('Não foram encontrados arquivos para atualizar.');
			}

			$message = '';

			if (!empty($idsPropostasVistoriasaStatusTransmitidas)) {
				$affectedRowsTransmitida = (new Seguro_Model_VistoriaPreviaEmpresa())->update(
					['id_status' => Sistema_Model_Status::VP_TRANSMITIDA_SEM_FOTOS],
					"id IN ({$idsPropostasVistoriasaStatusTransmitidas})"
				);

				if (!$affectedRowsTransmitida) {
					throw new Exception('Erro ao tentar atualizar o status de vistorias prévias TRANSMITIDAS dos arquivos.');
				}

				$message = 'Propostas vistorias prévias com fl_transmitido_seguradora false '
					. 'e status TRANSMITIDA com os seguintes IDs foram atualizados: '
					.  $idsPropostasVistoriasaStatusTransmitidas;
			}

			if (!empty($idsPropostasVistoriasaStatusTransmitidasSemFotos)) {
				$affectedRowsTransmitidaSemFotos = (new Seguro_Model_VistoriaPreviaEmpresa())->update(
					['id_status' => Sistema_Model_Status::VP_TRANSMITIDA],
					"id IN ({$idsPropostasVistoriasaStatusTransmitidasSemFotos})"
				);

				if (!$affectedRowsTransmitidaSemFotos) {
					throw new Exception('Erro ao tentar atualizar o status de vistorias prévias TRANSMITIDAS SEM FOTOS dos arquivos.');
				}

				$message .= "\n\nPropostas vistorias prévias com fl_transmitido_seguradora true "
					. 'e status TRANSMITIDA_SEM_FOTOS com os seguintes IDs foram atualizados: '
					.  $idsPropostasVistoriasaStatusTransmitidasSemFotos;
			}

			$this->getResponse()->setBody(Zend_Json::encode(
				[
					'message' => $message,
					'statusCode' => 200
				]
			));
			
		} catch (Exception $e) {
			$this->getResponse()->setBody(Zend_Json::encode(
				[
					'message' => $e->getMessage(),
					'statusCode' => 406
				]
			));
		}
	}

	public function atualizaflagtransmitidoseguradoraarquivosfotoAction(): void
	{
		$this->isAjax();

		try {
			$dados = $this->getRequest()->getParams();
			$idSafra = $dados['idSafra'];

			$modelArquivos = new Seguro_Model_Vistoriapreviaempresaarquivos();

			$arquivos = $modelArquivos->findArquivosFotoTransmitidosViaTabletByIdSafra($idSafra);
			$idsArquivos = [];
			
			foreach ($arquivos as $arquivo) {
				if (file_exists(APPLICATION_PATH . '/upload_files/laudoprevia/' . $arquivo['ds_nome_arquivo'])) {
					$idsArquivos[] = $arquivo['id'];
				}
			}

			$strIdsArquivos = implode(',', $idsArquivos);

			if (!empty($idsArquivos)) {
				$affectedRows = $modelArquivos
					->update(['fl_transmitido_seguradora' => true], 'id IN ('. $strIdsArquivos .')');

				if (!$affectedRows) {
					throw new Exception("Erro ao alterar os ids dos arquivos: {$strIdsArquivos}");
				}
			}

			$this->getResponse()->setBody(Zend_Json::encode(
				[
					'message' => 'Arquivos com os seguintes IDs foram atualizados: '. $strIdsArquivos,
					'statusCode' => 200
				]
			));
		} catch (Exception $e) {
			$this->getResponse()->setBody(Zend_Json::encode(
				[
					'message' => $e->getMessage(),
					'statusCode' => 406
				]
			));
		}
	}

	public function atualizastatusarquivosfotoAction()
	{
		$this->isAjax();
		
		$dados = $this->getRequest()->getParams();
		
		try {
			if (empty($dados)) {
				throw new \Exception('Dados não foi informados.');
			}
			
			$modelVistoriaPrevia = new Seguro_Model_VistoriaPrevia();
			$modelVistoriaPreviaEmpresa = new Seguro_Model_VistoriaPreviaEmpresa();
			$modelArquivos = new Seguro_Model_Vistoriapreviaempresaarquivos();
			$modelVistoriaPreviaHistorico = new Seguro_Model_VistoriaPreviaHistorico();
			$modelLvp001 = new Regulacao_Model_Lvp001();
			
			$idPropostaVistoria = $modelVistoriaPrevia
                ->getIdByPropostaVistoria(
                    (int)$dados['idProposta'],
                    (int)$dados['idVistoria']
                )->id;
			
            $vistoriaPrevia = $modelVistoriaPreviaEmpresa
				->find($idPropostaVistoria)
				->current();

            if (empty($idPropostaVistoria) || empty($vistoriaPrevia)) {
                throw new \Exception('Vistoria não encontrada.');
            }

			$lvp001 = $modelLvp001->findByIdPropostaVistoria($idPropostaVistoria);

			if (!$vistoriaPrevia['fl_transmitido_tablet'] || empty($lvp001)) {
				throw new \Exception('Arquivo json não recebido');
			}

			$arquivos = $modelArquivos->getArquivosFoto($idPropostaVistoria);
			$idsArquivos = [];
			$totalArquivos = $totalArquivosRecebidos = 0;
	
			foreach ($arquivos as $arquivo) {
				if ($arquivo['id_tipo_arquivo_laudo_previa'] == 3) {
					if (file_exists(APPLICATION_PATH . '/upload_files/laudoprevia/' . $arquivo['ds_nome_arquivo'])) {
						$idsArquivos[] = $arquivo['id'];
						++$totalArquivosRecebidos;
					}
				}
	
				++$totalArquivos;
			}
	
			if (!empty($idsArquivos)) {
				$modelArquivos->update(
					['fl_transmitido_seguradora' => true,],
					'id IN ('. implode(',', $idsArquivos) .') AND fl_transmitido_seguradora = false'
				);
			}
			
			// Caso todos arquivos de foto tenham sido recebidos, atualiza o status
			if ($totalArquivos === $totalArquivosRecebidos && $totalArquivos > 0) {
				$modelVistoriaPreviaEmpresa->update(
					['id_status' => Sistema_Model_Status::VP_TRANSMITIDA],
					'id = '. $idPropostaVistoria
				);

				$idEmpresa = (new Sistema_Model_VistoriasEmpresas())->getEmpresaByVistoria((int)$dados['idVistoria']);
				
				if (!$modelVistoriaPreviaHistorico->todosArquivosFotoTransferidos($idPropostaVistoria)) {
					$modelVistoriaPreviaHistorico->insert(
						[
							'id_status' => Sistema_Model_Status::VP_TRANSMITIDA,
							'id_proposta_vistoria' => $idPropostaVistoria,
							'id_status_analise' => $vistoriaPrevia['id_status_analise'],
							'id_empresa' => $idEmpresa,
							'ds_motivo' => 'Todos arquivos foto recebidos.'
						]
					);
				}
			}
	
			$this->getResponse()->setBody(Zend_Json::encode(
				[
					'message' => 'Arquivos com os seguintes IDs foram atualizados: '. implode(', ', $idsArquivos),
					'ids_arquivos_atualizados' => $idsArquivos,
					'statusCode' => 200
				]
			));
		} catch (\Exception $e) {
			$this->getResponse()->setBody(Zend_Json::encode(
				[
					'message' => $e->getMessage(),
					'statusCode' => 400
				]
			));
		}
	}
}
