/** * Método que entrega del intercambio el objeto del Resultado del DTE * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-12-23 */ public function getIntercambioResultado() { $Resultado = new Model_DteIntercambioResultadoDte($this->emisor, $this->dte, $this->folio, $this->certificacion); return $Resultado->exists() ? $Resultado : false; }
/** * Método que guarda el XML del Resultado de un intercambio * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-12-23 */ public function saveXML($Emisor, $xml) { // crear respuesta $RespuestaEnvio = new \sasco\LibreDTE\Sii\RespuestaEnvio(); $RespuestaEnvio->loadXML($xml); if (!$RespuestaEnvio->esResultadoDTE()) { return null; } $Resultado = $RespuestaEnvio->toArray()['RespuestaDTE']['Resultado']; if (explode('-', $Resultado['Caratula']['RutRecibe'])[0] != $Emisor->rut) { return false; } // guardar recepción $this->db->beginTransaction(); $this->responde = explode('-', $Resultado['Caratula']['RutResponde'])[0]; $this->recibe = $Emisor->rut; $this->codigo = md5($xml); $this->contacto = !empty($Resultado['Caratula']['NmbContacto']) ? substr($Resultado['Caratula']['NmbContacto'], 0, 40) : null; $this->telefono = !empty($Resultado['Caratula']['FonoContacto']) ? substr($Resultado['Caratula']['FonoContacto'], 0, 40) : null; $this->email = !empty($Resultado['Caratula']['MailContacto']) ? substr($Resultado['Caratula']['MailContacto'], 0, 80) : null; $this->fecha_hora = str_replace('T', ' ', $Resultado['Caratula']['TmstFirmaResp']); $this->xml = base64_encode($xml); if (!$this->save()) { $this->db->rollback(); return false; } // procesar cada resultado foreach ($RespuestaEnvio->getResultados() as $Resultado) { // si el RUT del emisor no corresponde con el del contribuyente el // acuse no es para este if (explode('-', $Resultado['RUTEmisor'])[0] != $Emisor->rut) { $this->db->rollback(); return false; } // buscar DTE emitido en el ambiente del emisor $DteEmitido = new Model_DteEmitido($Emisor->rut, $Resultado['TipoDTE'], $Resultado['Folio'], $Emisor->certificacion); // si no existe o si los datos del DTE emitido no corresponden error if (!$DteEmitido->exists() or explode('-', $Resultado['RUTRecep'])[0] != $DteEmitido->receptor or $Resultado['FchEmis'] != $DteEmitido->fecha or $Resultado['MntTotal'] != $DteEmitido->total) { $this->db->rollback(); return false; } // guardar recibo para el DTE $DteIntercambioResultadoDte = new Model_DteIntercambioResultadoDte($DteEmitido->emisor, $DteEmitido->dte, $DteEmitido->folio, $DteEmitido->certificacion); $DteIntercambioResultadoDte->responde = $this->responde; $DteIntercambioResultadoDte->codigo = $this->codigo; $DteIntercambioResultadoDte->estado = $Resultado['EstadoDTE']; $DteIntercambioResultadoDte->glosa = substr($Resultado['EstadoDTEGlosa'], 0, 256); if (!$DteIntercambioResultadoDte->save()) { $this->db->rollback(); return false; } } // aceptar transacción $this->db->commit(); return true; }