PageRenderTime 56ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/con1_importartransacao002.php

https://github.com/andremilk/e-cidade
PHP | 392 lines | 258 code | 45 blank | 89 comment | 26 complexity | 22910b3aebe6576ed8c14e01cf0ac7ac MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. /*
  3. * E-cidade Software Publico para Gestao Municipal
  4. * Copyright (C) 2012 DBselller Servicos de Informatica
  5. * www.dbseller.com.br
  6. * e-cidade@dbseller.com.br
  7. *
  8. * Este programa e software livre; voce pode redistribui-lo e/ou
  9. * modifica-lo sob os termos da Licenca Publica Geral GNU, conforme
  10. * publicada pela Free Software Foundation; tanto a versao 2 da
  11. * Licenca como (a seu criterio) qualquer versao mais nova.
  12. *
  13. * Este programa e distribuido na expectativa de ser util, mas SEM
  14. * QUALQUER GARANTIA; sem mesmo a garantia implicita de
  15. * COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM
  16. * PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais
  17. * detalhes.
  18. *
  19. * Voce deve ter recebido uma copia da Licenca Publica Geral GNU
  20. * junto com este programa; se nao, escreva para a Free Software
  21. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  22. * 02111-1307, USA.
  23. *
  24. * Copia da licenca no diretorio licenca/licenca_en.txt
  25. * licenca/licenca_pt.txt
  26. */
  27. /**
  28. * Carregamos as bibliotecas nescessárias
  29. */
  30. require_once("libs/db_stdlib.php");
  31. require_once("libs/db_utils.php");
  32. require_once("libs/db_conecta.php");
  33. require_once("libs/db_sessoes.php");
  34. require_once("libs/db_usuariosonline.php");
  35. require_once("dbforms/db_funcoes.php");
  36. require_once("model/contabilidade/EventoContabil.model.php");
  37. require_once("model/contabilidade/EventoContabilLancamento.model.php");
  38. require_once("model/contabilidade/RegraLancamentoContabil.model.php");
  39. /**
  40. * Verificamos se o arquivo é de extensão xml e enviamos o mesmo para o tmp.
  41. * Caso houver um problema em algum desses processos redirecionamos para a página anterior
  42. * e informamos o ocorrido.
  43. */
  44. if ($_FILES['arquivoTransacoes']['type'] != 'text/xml') {
  45. $sErrorMessage = "O arquivo enviado não é do formato correto. Favor verificar o arquivo.";
  46. db_redireciona("con1_importartransacao001.php?lErro=true&sErrorMessage=".$sErrorMessage);
  47. }
  48. if (!move_uploaded_file($_FILES['arquivoTransacoes']['tmp_name'], "/tmp/importacaotransacao{$_FILES['arquivoTransacoes']['name']}")) {
  49. $sErrorMessage = "Ocorreu um erro na importação do arquivo de implantação. Favor verificar o arquivo.";
  50. db_redireciona("con1_importartransacao001.php?lErro=true&sErrorMessage=".$sErrorMessage);
  51. }
  52. /**
  53. * Verifica existência do documento passado na assinatuta na tabela "conhistdoc"
  54. * @param integer $iCodigoDocumento
  55. * @return boolean
  56. */
  57. function existeDocumentoTransacao($iCodigoDocumento) {
  58. $oDaoConhistdoc = db_utils::getDao('conhistdoc');
  59. $sSqlBuscaDocumento = $oDaoConhistdoc->sql_query_file($iCodigoDocumento);
  60. $rsBuscaDocumento = $oDaoConhistdoc->sql_record($sSqlBuscaDocumento);
  61. if ($oDaoConhistdoc->numrows > 0) {
  62. return true;
  63. }
  64. return false;
  65. }
  66. /**
  67. * Verifica existência da transação para para o documento informado e o ano e intituição logadas
  68. * @param integer $iCodigoDocumento
  69. * @return boolean
  70. */
  71. function existeTransacaoParaDocumento($iCodigoDocumento) {
  72. $oDaoContrans = db_utils::getDao('contrans');
  73. $iAnousu = db_getsession("DB_anousu");
  74. $iInstituicao = db_getsession("DB_instit");
  75. $sWhereBuscaTransacao = " c45_coddoc = {$iCodigoDocumento} ";
  76. $sWhereBuscaTransacao .= " and c45_anousu = {$iAnousu} ";
  77. $sWhereBuscaTransacao .= " and c45_instit = {$iInstituicao} ";
  78. $sSqlBuscaTransacao = $oDaoContrans->sql_query_file(null, "*", null, $sWhereBuscaTransacao);
  79. $rsBuscaTransacao = $oDaoContrans->sql_record($sSqlBuscaTransacao);
  80. if ($oDaoContrans->numrows > 0) {
  81. return true;
  82. }
  83. return false;
  84. }
  85. /**
  86. * Verifica existência de registro na conplano para o estrutural passado na asinatura.
  87. * Se o mesmo for 0 retorna como se houvesse pois isso indica que a conta não possui conta
  88. * de crédito/débito (alguns casos possuem apenas conta de credito ou débito)
  89. * @param string $sEstrutural
  90. * @return boolean
  91. */
  92. function existeEstrutural($sEstrutural) {
  93. if ($sEstrutural == "0") {
  94. return true;
  95. }
  96. $oDaoConplano = db_utils::getDao('conplano');
  97. $sWhereBuscaEstrutural = " c60_estrut = '{$sEstrutural}' and c60_anousu = ".db_getsession("DB_anousu");
  98. $sSqlBuscaEstrutural = $oDaoConplano->sql_query_file(null, null, "*", null, $sWhereBuscaEstrutural);
  99. $rsBuscaEstrutural = $oDaoConplano->sql_record($sSqlBuscaEstrutural);
  100. if ($oDaoConplano->numrows > 0) {
  101. return true;
  102. }
  103. return false;
  104. }
  105. /**
  106. * Verifica existência de reduzido para o estrutural passado na assinatura.
  107. * Se o mesmo for 0 retorna como se houvesse pois isso indica que a conta não possui conta
  108. * de crédito/débito (alguns casos possuem apenas conta de crédito ou débito)
  109. * @param string $sEstrutural
  110. * @return boolean
  111. */
  112. function existeReduzido($sEstrutural) {
  113. if ($sEstrutural == "0") {
  114. return true;
  115. }
  116. $oDaoConplanoReduz = db_utils::getDao('conplanoreduz');
  117. $sWhereBuscaReduzido = " conplano.c60_estrut = '{$sEstrutural}' ";
  118. $sWhereBuscaReduzido .= " and conplano.c60_anousu = ".db_getsession("DB_anousu") ;
  119. $sWhereBuscaReduzido .= " and conplanoreduz.c61_reduz is not null and c61_instit = ".db_getsession("DB_instit");
  120. $sSqlBuscaReduzido = $oDaoConplanoReduz->sql_query(null, null, "*", null, $sWhereBuscaReduzido);
  121. $rsSqlBuscaReduzido = $oDaoConplanoReduz->sql_record($sSqlBuscaReduzido);
  122. if ($oDaoConplanoReduz->numrows > 0) {
  123. return true;
  124. }
  125. return false;
  126. }
  127. /**
  128. * Buscamos o reduzido através do estrutural da conta
  129. * @param string $sEstrutural
  130. */
  131. function getReduzidoFromEstrutural($sEstrutural) {
  132. if ($sEstrutural == "0") {
  133. return '0';
  134. }
  135. $oDaoConplanoReduz = db_utils::getDao('conplanoreduz');
  136. $iAnoUsu = db_getsession("DB_anousu");
  137. $sWhereBuscaReduzido = " conplano.c60_estrut = '{$sEstrutural}' and conplanoreduz.c61_anousu = {$iAnoUsu} and c61_instit = ".db_getsession("DB_instit");
  138. $sSqlBuscaReduzido = $oDaoConplanoReduz->sql_query(null, null, " conplanoreduz.c61_reduz ",
  139. null, $sWhereBuscaReduzido);
  140. $rsBuscaReduzido = $oDaoConplanoReduz->sql_record($sSqlBuscaReduzido);
  141. if ($oDaoConplanoReduz->numrows > 0) {
  142. $oBuscaReduzido = db_utils::fieldsMemory($rsBuscaReduzido, 0);
  143. return $oBuscaReduzido->c61_reduz;
  144. }
  145. return null;
  146. }
  147. /**
  148. * Carregamos o arquivo de importação de transações na classe DOMDocument e após isso
  149. * percorremos o mesmo e montamos uma collection com as informações do mesmo
  150. */
  151. $oDomXML = new DomDocument();
  152. $oDomXML->load('/tmp/importacaotransacao'.$_FILES["arquivoTransacoes"]['name']);
  153. $aTransacoes = array();
  154. $oTransacoes = $oDomXML->getElementsByTagName('transacao');
  155. foreach ($oTransacoes as $oTransacao) {
  156. $oTransacaoAtual = new stdClass();
  157. $oTransacaoAtual->c45_seqtrans = $oTransacao->getAttribute('c45_seqtrans');
  158. $oTransacaoAtual->c45_anousu = $oTransacao->getAttribute('c45_anousu');
  159. $oTransacaoAtual->c45_coddoc = $oTransacao->getAttribute('c45_coddoc');
  160. $oTransacaoAtual->c53_descr = trim(utf8_decode($oTransacao->getAttribute('c53_descr')));
  161. $oTransacaoAtual->c45_instit = $oTransacao->getAttribute('c45_instit');
  162. $oTransacaoAtual->aLancamentos = array();
  163. foreach ($oTransacao->getElementsByTagName('lancamento') as $oLancamento) {
  164. $oLancamentoAtual = new stdClass();
  165. $oLancamentoAtual->c46_seqtranslan = $oLancamento->getAttribute('c46_seqtranslan');
  166. $oLancamentoAtual->c46_seqtrans = $oLancamento->getAttribute('c46_seqtrans');
  167. $oLancamentoAtual->c46_codhist = $oLancamento->getAttribute('c46_codhist');
  168. $oLancamentoAtual->c46_obs = trim(utf8_decode($oLancamento->getAttribute('c46_obs')));
  169. $oLancamentoAtual->c46_valor = trim(utf8_decode($oLancamento->getAttribute('c46_valor')));
  170. $oLancamentoAtual->c46_obrigatorio = $oLancamento->getAttribute('c46_obrigatorio');
  171. $oLancamentoAtual->c46_evento = $oLancamento->getAttribute('c46_evento');
  172. $oLancamentoAtual->c46_descricao = trim(utf8_decode($oLancamento->getAttribute('c46_descricao')));
  173. $oLancamentoAtual->c46_ordem = $oLancamento->getAttribute('c46_ordem');
  174. $oLancamentoAtual->aContas = array();
  175. foreach ($oLancamento->getElementsByTagName('conta') as $oConta) {
  176. $oContaAtual = new stdClass();
  177. $oContaAtual->c47_seqtranslr = $oConta->getAttribute('c47_seqtranslr');
  178. $oContaAtual->c47_seqtranslan = $oConta->getAttribute('c47_seqtranslan');
  179. $oContaAtual->c47_debito = trim(utf8_decode($oConta->getAttribute('c47_debito')));
  180. $oContaAtual->c47_debito_descricao = trim(utf8_decode($oConta->getAttribute('c47_debito_descricao')));
  181. $oContaAtual->c47_credito = trim(utf8_decode($oConta->getAttribute('c47_credito')));
  182. $oContaAtual->c47_credito_descricao = trim(utf8_decode($oConta->getAttribute('c47_credito_descricao')));
  183. $oContaAtual->c47_obs = trim(utf8_decode($oConta->getAttribute('c47_obs')));
  184. $oContaAtual->c47_ref = trim(utf8_decode($oConta->getAttribute('c47_ref')));
  185. $oContaAtual->c47_anousu = $oConta->getAttribute('c47_anousu');
  186. $oContaAtual->c47_instit = $oConta->getAttribute('c47_instit');
  187. $oContaAtual->c47_compara = trim(utf8_decode($oConta->getAttribute('c47_compara')));
  188. $oContaAtual->c47_tiporesto = trim(utf8_decode($oConta->getAttribute('c47_tiporesto')));
  189. $oLancamentoAtual->aContas[] = $oContaAtual;
  190. }
  191. $oTransacaoAtual->aLancamentos[] = $oLancamentoAtual;
  192. }
  193. $aTransacoes[] = $oTransacaoAtual;
  194. }
  195. /**
  196. * Iniciamos o pré-processamento para avaliar possíveis erros na importação de transações.
  197. * Todos os erros encontrados nesse processo são enviados para o array de erros
  198. */
  199. $iIstituicaoDestino = db_getsession("DB_instit");
  200. $iAnoUsuDestino = db_getsession("DB_anousu");
  201. $aLogErrosTransacoes = array();
  202. $aLogErros = array();
  203. /**
  204. * Pré-processamento das transações
  205. */
  206. foreach ($aTransacoes as $oTransacao) {
  207. if (!existeDocumentoTransacao($oTransacao->c45_coddoc)) {
  208. $oErroTransacao = new stdClass();
  209. $oErroTransacao->c45_seqtrans = $oTransacao->c45_seqtrans;
  210. $oErroTransacao->c53_descr = $oTransacao->c53_descr;
  211. $oErroTransacao->sDescricao = "Documento não existe na tabela 'conhistdoc'.";
  212. $aLogErrosTransacoes[] = $oErroTransacao;
  213. }
  214. if (existeTransacaoParaDocumento($oTransacao->c45_coddoc)) {
  215. $oErroTransacao = new stdClass();
  216. $oErroTransacao->c45_seqtrans = $oTransacao->c45_seqtrans;
  217. $oErroTransacao->c53_descr = $oTransacao->c53_descr;
  218. $oErroTransacao->sDescricao = "Já existe transação para o documento com o ano e instituiçao atuais.";
  219. $aLogErrosTransacoes[] = $oErroTransacao;
  220. }
  221. }
  222. /**
  223. * Se não houverem problemas no pré-processamento das transações passamos ao pré-processamento
  224. * dos lançamentos e das contas.
  225. */
  226. if (count($aLogErrosTransacoes) == 0) {
  227. foreach ($aTransacoes as $oTransacao) {
  228. foreach ($oTransacao->aLancamentos as $oLancamento) {
  229. foreach ($oLancamento->aContas as $oConta) {
  230. /**
  231. * Efetuamos as validações competentes às contas
  232. */
  233. if (!existeEstrutural($oConta->c47_debito)) {
  234. $oErro = new stdClass();
  235. $oErro->c45_coddoc = $oTransacao->c45_coddoc;
  236. $oErro->c53_descr = $oTransacao->c53_descr;
  237. $oErro->c46_descricao = $oLancamento->c46_descricao;
  238. $oErro->c46_ordem = $oLancamento->c46_ordem;
  239. $oErro->c47_seqtranslr = $oConta->c47_seqtranslr;
  240. $oErro->c47_debito = $oConta->c47_debito;
  241. $oErro->c47_credito = $oConta->c47_credito;
  242. $oErro->sDescricao = "A conta de débito não existe na tabela 'conplano'.";
  243. $aLogErros[] = $oErro;
  244. } else if (!existeReduzido($oConta->c47_debito)) {
  245. $oErro = new stdClass();
  246. $oErro->c45_coddoc = $oTransacao->c45_coddoc;
  247. $oErro->c53_descr = $oTransacao->c53_descr;
  248. $oErro->c46_descricao = $oLancamento->c46_descricao;
  249. $oErro->c46_ordem = $oLancamento->c46_ordem;
  250. $oErro->c47_seqtranslr = $oConta->c47_seqtranslr;
  251. $oErro->c47_debito = $oConta->c47_debito;
  252. $oErro->c47_credito = $oConta->c47_credito;
  253. $oErro->sDescricao = "A conta de débito não existe não possui reduzido.";
  254. $aLogErros[] = $oErro;
  255. }
  256. if (!existeEstrutural($oConta->c47_credito)) {
  257. $oErro = new stdClass();
  258. $oErro->c45_coddoc = $oTransacao->c45_coddoc;
  259. $oErro->c53_descr = $oTransacao->c53_descr;
  260. $oErro->c46_descricao = $oLancamento->c46_descricao;
  261. $oErro->c46_ordem = $oLancamento->c46_ordem;
  262. $oErro->c47_seqtranslr = $oConta->c47_seqtranslr;
  263. $oErro->c47_debito = $oConta->c47_debito;
  264. $oErro->c47_credito = $oConta->c47_credito;
  265. $oErro->sDescricao = "A conta de crétido não existe na tabela 'conplano'.";
  266. $aLogErros[] = $oErro;
  267. } else if (!existeReduzido($oConta->c47_credito)) {
  268. $oErro = new stdClass();
  269. $oErro->c45_coddoc = $oTransacao->c45_coddoc;
  270. $oErro->c53_descr = $oTransacao->c53_descr;
  271. $oErro->c46_descricao = $oLancamento->c46_descricao;
  272. $oErro->c46_ordem = $oLancamento->c46_ordem;
  273. $oErro->c47_seqtranslr = $oConta->c47_seqtranslr;
  274. $oErro->c47_debito = $oConta->c47_debito;
  275. $oErro->c47_credito = $oConta->c47_credito;
  276. $oErro->sDescricao = "A conta de crédito não existe não possui reduzido.";
  277. $aLogErros[] = $oErro;
  278. }
  279. }
  280. }
  281. }
  282. if (count($aLogErros) > 0) {
  283. $_SESSION['aConflitoLancamento'] = $aLogErros;
  284. $_SESSION['sMsgConflitoTransacaoLancamento'] = "Houve conflito entre lançamentos. Confira no relatório que será emitido a seguir.";
  285. db_redireciona("con1_importartransacao001.php?lRelatorio=true&sUrlRelatorio=con2_lancamentosemconflito002.php");
  286. }
  287. //print_r($aLogErros);
  288. } else {
  289. $_SESSION['aConflitoTransacoes'] = $aLogErrosTransacoes;
  290. $_SESSION['sMsgConflitoTransacaoLancamento'] = "Houve conflito entre transações. Confira no relatório que será emitido a seguir.";
  291. db_redireciona("con1_importartransacao001.php?lRelatorio=true&sUrlRelatorio=con2_transacoesemconflito002.php");
  292. }
  293. /**
  294. * Aqui encerramos o pré-processamento e iniciamos a importação das inclusões
  295. */
  296. try {
  297. db_inicio_transacao();
  298. foreach ($aTransacoes as $oTransacao) {
  299. /**
  300. * Setamos as informações de transação
  301. */
  302. $oEventoContabil = new EventoContabil();
  303. $oEventoContabil->setCodigoDocumento($oTransacao->c45_coddoc);
  304. $oEventoContabil->setInstituicao(db_getsession("DB_instit"));
  305. $oEventoContabil->setAnoUso(db_getsession("DB_anousu"));
  306. $oEventoContabil->salvar();
  307. foreach ($oTransacao->aLancamentos as $oLancamento) {
  308. /**
  309. * Setamos as informações de lançamento
  310. */
  311. $oEventoContabilLancamento = new EventoContabilLancamento();
  312. $oEventoContabilLancamento->setHistorico($oLancamento->c46_codhist);
  313. $oEventoContabilLancamento->setObservacao($oLancamento->c46_obs);
  314. $oEventoContabilLancamento->setValor($oLancamento->c46_valor);
  315. $oEventoContabilLancamento->setObrigatorio($oLancamento->c46_obrigatorio);
  316. $oEventoContabilLancamento->setEvento($oLancamento->c46_evento);
  317. $oEventoContabilLancamento->setDescricao($oLancamento->c46_descricao);
  318. $oEventoContabilLancamento->setOrdem($oLancamento->c46_ordem);
  319. $oEventoContabilLancamento->setSequencialTransacao($oEventoContabil->getSequencialTransacao());
  320. $oEventoContabilLancamento->salvar();
  321. foreach ($oLancamento->aContas as $oConta) {
  322. $oRegraLancamentoContabil = new RegraLancamentoContabil();
  323. $oRegraLancamentoContabil->setSequencialLancamento($oEventoContabilLancamento->getSequencialLancamento());
  324. $oRegraLancamentoContabil->setContaDebito(getReduzidoFromEstrutural($oConta->c47_debito));
  325. $oRegraLancamentoContabil->setContaCredito(getReduzidoFromEstrutural($oConta->c47_credito));
  326. $oRegraLancamentoContabil->setObservacao(str_replace("\\", "", $oConta->c47_obs));
  327. $oRegraLancamentoContabil->setReferencia($oConta->c47_ref);
  328. $oRegraLancamentoContabil->setAnoUso(db_getsession("DB_anousu"));
  329. $oRegraLancamentoContabil->setInstituicao(db_getsession("DB_instit"));
  330. $oRegraLancamentoContabil->setCompara($oConta->c47_compara);
  331. $oRegraLancamentoContabil->setTipoResto($oConta->c47_tiporesto);
  332. $oRegraLancamentoContabil->salvar();
  333. }
  334. }
  335. unset($oRegraLancamentoContabil);
  336. unset($oEventoContabilLancamento);
  337. unset($oEventoContabil);
  338. }
  339. db_fim_transacao(false);
  340. $sMessage = "Importação das transações realizada com sucesso!";
  341. $_SESSION['sMsgConflitoTransacaoLancamento'] = $sMessage;
  342. db_redireciona('con1_importartransacao001.php?lErro=true');
  343. } catch (Exception $eException) {
  344. db_fim_transacao(true);
  345. $_SESSION['sMsgConflitoTransacaoLancamento'] = $eException->getMessage();
  346. db_redireciona('con1_importartransacao001.php?lErro=true');
  347. }