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