/** * Método que entrega del intercambio el objeto de la Recepcion del DTE * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-12-23 */ public function getIntercambioRecepcion() { $Recepcion = new Model_DteIntercambioRecepcionDte($this->emisor, $this->dte, $this->folio, $this->certificacion); return $Recepcion->exists() ? $Recepcion : false; }
/** * Método que guarda el XML de la Recepción de un intercambio * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-12-23 */ public function saveXML($Emisor, $xml) { $RespuestaEnvio = new \sasco\LibreDTE\Sii\RespuestaEnvio(); $RespuestaEnvio->loadXML($xml); if (!$RespuestaEnvio->esRecepcionEnvio()) { 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->estado = $Resultado['RecepcionEnvio']['EstadoRecepEnv']; $this->glosa = substr($Resultado['RecepcionEnvio']['RecepEnvGlosa'], 0, 256); $this->xml = base64_encode($xml); if (!$this->save()) { $this->db->rollback(); return false; } // procesar cada recepción foreach ($RespuestaEnvio->getRecepciones() as $Recepcion) { // si el RUT del emisor no corresponde con el del contribuyente el // acuse no es para este if (explode('-', $Recepcion['RUTEmisor'])[0] != $Emisor->rut) { $this->db->rollback(); return false; } // buscar DTE emitido en el ambiente del emisor $DteEmitido = new Model_DteEmitido($Emisor->rut, $Recepcion['TipoDTE'], $Recepcion['Folio'], $Emisor->certificacion); // si no existe o si los datos del DTE emitido no corresponden error if (!$DteEmitido->exists() or explode('-', $Recepcion['RUTRecep'])[0] != $DteEmitido->receptor or $Recepcion['FchEmis'] != $DteEmitido->fecha or $Recepcion['MntTotal'] != $DteEmitido->total) { $this->db->rollback(); return false; } // guardar recibo para el DTE $DteIntercambioRecepcionDte = new Model_DteIntercambioRecepcionDte($DteEmitido->emisor, $DteEmitido->dte, $DteEmitido->folio, $DteEmitido->certificacion); $DteIntercambioRecepcionDte->responde = $this->responde; $DteIntercambioRecepcionDte->codigo = $this->codigo; $DteIntercambioRecepcionDte->estado = $Recepcion['EstadoRecepDTE']; $DteIntercambioRecepcionDte->glosa = substr($Recepcion['RecepDTEGlosa'], 0, 256); if (!$DteIntercambioRecepcionDte->save()) { $this->db->rollback(); return false; } } // aceptar transacción $this->db->commit(); return true; }