public function actionEnviarCorreccion() { if (Yii::app()->request->isAjaxRequest) { $modelo = new NubeRetencion(); //Ejmpleo code 3 $errAuto = new VSexception(); $ids = isset($_POST['ids']) ? base64_decode($_POST['ids']) : NULL; $result = VSDocumentos::anularDodSri($ids, 'FA', 5); //Anula Documentos Retenciones del Sistema $arroout = $errAuto->messageSystem('NO_OK', null, 1, null, null); if ($result['status'] == 'OK') { //Si es Verdadero actualizo datos de base intermedia $result = VSDocumentos::corregirDocSEA($ids, 'FA'); if ($result['status'] == 'OK') { $arroout = $errAuto->messageSystem('OK', null, 12, null, null); } } header('Content-type: application/json'); echo CJavaScript::jsonEncode($arroout); return; } }
private function generarFileXML($ids) { $autDoc = new VSAutoDocumento(); $msgAuto = new VSexception(); $valida = new VSValidador(); $xmlGen = new VSXmlGenerador(); $codDoc = $this->tipoDoc; //Documento Factura $cabFact = $this->mostrarCabFactura($ids); if (count($cabFact) > 0) { switch ($cabFact["Estado"]) { case 2: //RECIBIDO SRI (AUTORIZADOS) return $msgAuto->messageFileXML('NO_OK', $cabFact["NumDocumento"], null, 42, null, null); break; case 4: //DEVUELTA (NO AUTORIZADOS EN PROCESO) //Cuando son devueltas no se deben generar de nuevo la clave de acceso //hay que esperar hasta que responda switch ($cabFact["CodigoError"]) { case 43: //CLAVE DE ACCESO REGISTRADA //No genera Nada Envia los datos generados anteriormente //Retorna Automaticamente sin Generar Documento //LA CLAVE DE ACCESO REGISTRADA ingresa directamente a Obtener su autorizacion return $msgAuto->messageFileXML('OK_REG', $cabFact["NombreDocumento"], $cabFact["ClaveAcceso"], 43, null, null); break; case 70: //CLAVE DE ACCESO EN PROCESO return $msgAuto->messageFileXML('OK', $cabFact["NombreDocumento"], $cabFact["ClaveAcceso"], 43, null, null); break; default: //Documento Devuelto hay que volver a generar la clave de Acceso //Esto es Opcional /*$objCla = new VSClaveAcceso(); $serie = $cabFact['Establecimiento'] . $cabFact['PuntoEmision']; $fec_doc = date("Y-m-d", strtotime($cabFact['FechaEmision'])); $ClaveAcceso = $objCla->claveAcceso($codDoc, $fec_doc, $cabFact['Ruc'], $cabFact['Ambiente'], $serie, $cabFact['Secuencial'], $cabFact['TipoEmision']); //$this->actualizaClaveAccesoFactura($ids,$ClaveAcceso); $autDoc->actualizaClaveAccesoDocumento($ids, $ClaveAcceso, 'NubeFactura', 'IdFactura'); $cabFact = $this->mostrarCabFactura($ids); //Vuelve a Consultar con la Clave de Acceso Nueva.*/ } break; case 8: //DOCUMENTO ANULADO return $msgAuto->messageSystem('NO_OK', null, 11, null, null); //Peticion Invalida break; default: } } else { //Si la Cabecera no devuelve registros Retorna un resultado de False return $msgAuto->messageFileXML('NO_OK', null, null, 1, null, null); } $detFact = $this->mostrarDetFacturaImp($ids); $impFact = $this->mostrarFacturaImp($ids); $adiFact = $this->mostrarFacturaDataAdicional($ids); $pagFact = $this->mostrarFormaPago($ids); //Agregar forma de pago $xmldata = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; //$xmldata .='<factura id="comprobante" version="1.0.0">';//Version Normal Para 2 Decimales $xmldata .= '<factura id="comprobante" version="1.1.0">'; //Version para 4 Decimales en Precio Unitario $xmldata .= $xmlGen->infoTributaria($cabFact); $xmldata .= '<infoFactura>'; $xmldata .= '<fechaEmision>' . date(Yii::app()->params["dateXML"], strtotime($cabFact["FechaEmision"])) . '</fechaEmision>'; $xmldata .= '<dirEstablecimiento>' . utf8_encode(trim($cabFact["DireccionEstablecimiento"])) . '</dirEstablecimiento>'; if (strlen(trim($cabFact['ContribuyenteEspecial'])) > 0) { $xmldata .= '<contribuyenteEspecial>' . utf8_encode(trim($cabFact["ContribuyenteEspecial"])) . '</contribuyenteEspecial>'; } $xmldata .= '<obligadoContabilidad>' . utf8_encode(trim($cabFact["ObligadoContabilidad"])) . '</obligadoContabilidad>'; $xmldata .= '<tipoIdentificacionComprador>' . utf8_encode(trim($cabFact["TipoIdentificacionComprador"])) . '</tipoIdentificacionComprador>'; //$xmldata .='<razonSocialComprador>' . utf8_encode($valida->limpioCaracteresXML(trim($cabFact["RazonSocialComprador"]))) . '</razonSocialComprador>'; $xmldata .= '<razonSocialComprador>' . $valida->limpioCaracteresXML(trim($cabFact["RazonSocialComprador"])) . '</razonSocialComprador>'; //SValidador::putMessageLogFile($valida->limpioCaracteresXML(trim($cabFact["RazonSocialComprador"]))); //VSValidador::putMessageLogFile(trim($cabFact["RazonSocialComprador"])); $xmldata .= '<identificacionComprador>' . utf8_encode(trim($cabFact["IdentificacionComprador"])) . '</identificacionComprador>'; $xmldata .= '<totalSinImpuestos>' . Yii::app()->format->formatNumber($cabFact["TotalSinImpuesto"]) . '</totalSinImpuestos>'; $xmldata .= '<totalDescuento>' . Yii::app()->format->formatNumber($cabFact["TotalDescuento"]) . '</totalDescuento>'; $xmldata .= '<totalConImpuestos>'; $IRBPNR = 0; //NOta validar si existe casos para estos $ICE = 0; for ($i = 0; $i < sizeof($impFact); $i++) { if ($impFact[$i]['Codigo'] == '2') { //Valores de IVA switch ($impFact[$i]['CodigoPorcentaje']) { case 0: $BASEIVA0 = $impFact[$i]['BaseImponible']; $xmldata .= '<totalImpuesto>'; $xmldata .= '<codigo>' . $impFact[$i]["Codigo"] . '</codigo>'; $xmldata .= '<codigoPorcentaje>' . $impFact[$i]["CodigoPorcentaje"] . '</codigoPorcentaje>'; $xmldata .= '<baseImponible>' . Yii::app()->format->formatNumber($impFact[$i]["BaseImponible"]) . '</baseImponible>'; //$xmldata .='<tarifa>' . Yii::app()->format->formatNumber($impFact[$i]["Tarifa"]) . '</tarifa>'; $xmldata .= '<valor>' . Yii::app()->format->formatNumber($impFact[$i]["Valor"]) . '</valor>'; $xmldata .= '</totalImpuesto>'; break; case 2: //IVA 12% $BASEIVA12 = $impFact[$i]['BaseImponible']; $VALORIVA12 = $impFact[$i]['Valor']; $xmldata .= '<totalImpuesto>'; $xmldata .= '<codigo>' . $impFact[$i]["Codigo"] . '</codigo>'; $xmldata .= '<codigoPorcentaje>' . $impFact[$i]["CodigoPorcentaje"] . '</codigoPorcentaje>'; $xmldata .= '<baseImponible>' . Yii::app()->format->formatNumber($impFact[$i]["BaseImponible"]) . '</baseImponible>'; //$xmldata .='<tarifa>' . Yii::app()->format->formatNumber($impFact[$i]["Tarifa"]) . '</tarifa>'; $xmldata .= '<valor>' . Yii::app()->format->formatNumber($impFact[$i]["Valor"]) . '</valor>'; $xmldata .= '</totalImpuesto>'; break; case 3: //IVA 14% $BASEIVA12 = $impFact[$i]['BaseImponible']; $VALORIVA12 = $impFact[$i]['Valor']; $xmldata .= '<totalImpuesto>'; $xmldata .= '<codigo>' . $impFact[$i]["Codigo"] . '</codigo>'; $xmldata .= '<codigoPorcentaje>' . $impFact[$i]["CodigoPorcentaje"] . '</codigoPorcentaje>'; $xmldata .= '<baseImponible>' . Yii::app()->format->formatNumber($impFact[$i]["BaseImponible"]) . '</baseImponible>'; //$xmldata .='<tarifa>' . Yii::app()->format->formatNumber($impFact[$i]["Tarifa"]) . '</tarifa>'; $xmldata .= '<valor>' . Yii::app()->format->formatNumber($impFact[$i]["Valor"]) . '</valor>'; $xmldata .= '</totalImpuesto>'; break; case 6: //No objeto Iva //$NOOBJIVA=$impFact[$i]['BaseImponible']; break; case 7: //Excento de Iva //$EXENTOIVA=$impFact[$i]['BaseImponible']; break; default: } } //NOta Verificar cuando el COdigo sea igual a 3 o 5 Para los demas impuestos } $xmldata .= '</totalConImpuestos>'; $xmldata .= '<propina>' . Yii::app()->format->formatNumber($cabFact["Propina"]) . '</propina>'; $xmldata .= '<importeTotal>' . Yii::app()->format->formatNumber($cabFact["ImporteTotal"]) . '</importeTotal>'; $xmldata .= '<moneda>' . utf8_encode(trim($cabFact["Moneda"])) . '</moneda>'; //DATOS DE FORMA DE PAGO APLICADO 8 SEP 2016 $xmldata .= '<pagos>'; for ($xi = 0; $xi < sizeof($pagFact); $xi++) { $xmldata .= '<pago>'; $xmldata .= '<formaPago>' . $valida->ajusteNumDoc(trim($pagFact[$xi]['Codigo']), 2) . '</formaPago>'; //Completa los 01 de al formato XSD <xsd:pattern value="[0][1-9]"/> $xmldata .= '<total>' . Yii::app()->format->formatNumber($pagFact[$xi]['Total']) . '</total>'; $xmldata .= '<plazo>' . Yii::app()->format->formatNumber($pagFact[$xi]['Plazo']) . '</plazo>'; $xmldata .= '<unidadTiempo>' . utf8_encode(trim($pagFact[$xi]['UnidadTiempo'])) . '</unidadTiempo>'; $xmldata .= '</pago>'; } $xmldata .= '</pagos>'; //Fin Forma de Pago $xmldata .= '</infoFactura>'; $xmldata .= '<detalles>'; for ($i = 0; $i < sizeof($detFact); $i++) { //DETALLE DE FACTURAS $xmldata .= '<detalle>'; $xmldata .= '<codigoPrincipal>' . utf8_encode(trim($detFact[$i]['CodigoPrincipal'])) . '</codigoPrincipal>'; $xmldata .= '<codigoAuxiliar>' . utf8_encode(trim($detFact[$i]['CodigoAuxiliar'])) . '</codigoAuxiliar>'; $xmldata .= '<descripcion>' . $valida->limpioCaracteresXML(trim($detFact[$i]['Descripcion'])) . '</descripcion>'; //VSValidador::putMessageLogFile($valida->limpioCaracteresXML(trim($detFact[$i]['Descripcion']))); $xmldata .= '<cantidad>' . Yii::app()->format->formatNumber($detFact[$i]['Cantidad']) . '</cantidad>'; //$xmldata .='<precioUnitario>' . Yii::app()->format->formatNumber($detFact[$i]['PrecioUnitario']) . '</precioUnitario>'; //Problemas de Redondeo Usar Roud(valor,deci) $xmldata .= '<precioUnitario>' . (string) $detFact[$i]['PrecioUnitario'] . '</precioUnitario>'; $xmldata .= '<descuento>' . Yii::app()->format->formatNumber($detFact[$i]['Descuento']) . '</descuento>'; $xmldata .= '<precioTotalSinImpuesto>' . Yii::app()->format->formatNumber($detFact[$i]['PrecioTotalSinImpuesto']) . '</precioTotalSinImpuesto>'; $xmldata .= '<impuestos>'; $impuesto = $detFact[$i]['impuestos']; for ($j = 0; $j < sizeof($impuesto); $j++) { //DETALLE IMPUESTO DE FACTURA $xmldata .= '<impuesto>'; $xmldata .= '<codigo>' . $impuesto[$j]['Codigo'] . '</codigo>'; $xmldata .= '<codigoPorcentaje>' . $impuesto[$j]['CodigoPorcentaje'] . '</codigoPorcentaje>'; $xmldata .= '<tarifa>' . Yii::app()->format->formatNumber($impuesto[$j]['Tarifa']) . '</tarifa>'; $xmldata .= '<baseImponible>' . Yii::app()->format->formatNumber($impuesto[$j]['BaseImponible']) . '</baseImponible>'; $xmldata .= '<valor>' . Yii::app()->format->formatNumber($impuesto[$j]['Valor']) . '</valor>'; $xmldata .= '</impuesto>'; } $xmldata .= '</impuestos>'; $xmldata .= '</detalle>'; } $xmldata .= '</detalles>'; // <retenciones> // <retencion> // <codigo>4</codigo> // <codigoPorcentaje>327</codigoPorcentaje> // <tarifa>0.00</tarifa> // <valor>0.00</valor> // </retencion> // <retencion> // <codigo>4</codigo> // <codigoPorcentaje>328</codigoPorcentaje> // <tarifa>0.00</tarifa> // <valor>0.00</valor> // </retencion> // <retencion> // <codigo>4</codigo> // <codigoPorcentaje>3</codigoPorcentaje> // <tarifa>1</tarifa> // <valor>0.00</valor> // </retencion> // </retenciones> $xmldata .= '<infoAdicional>'; for ($i = 0; $i < sizeof($adiFact); $i++) { if (strlen(trim($adiFact[$i]['Descripcion'])) > 0) { //$xmldata .='<campoAdicional nombre="' . utf8_encode(trim($adiFact[$i]['Nombre'])) . '">' . utf8_encode($valida->limpioCaracteresXML(trim($adiFact[$i]['Descripcion']))) . '</campoAdicional>'; $xmldata .= '<campoAdicional nombre="' . $valida->limpioCaracteresXML(trim($adiFact[$i]['Nombre'])) . '">' . $valida->limpioCaracteresXML(trim($adiFact[$i]['Descripcion'])) . '</campoAdicional>'; } } $xmldata .= '</infoAdicional>'; //$xmldata .=$firma; $xmldata .= '</factura>'; //echo htmlentities($xmldata); $nomDocfile = $cabFact['NombreDocumento'] . '-' . $cabFact['NumDocumento'] . '.xml'; file_put_contents(Yii::app()->params['seaDocXml'] . $nomDocfile, $xmldata); //Escribo el Archivo Xml return $msgAuto->messageFileXML('OK', $nomDocfile, $cabFact["ClaveAcceso"], 2, null, null); }
public function cambiarMailDoc($ids, $correo) { $msg = new VSexception(); $con = Yii::app()->db; $trans = $con->beginTransaction(); if ($ids == 0) { return $msg->messageSystem('NO_OK', $e->getMessage(), 11, null, null); } try { $sql = "UPDATE " . $con->dbname . ".USUARIO SET USU_CORREO='{$correo}' WHERE USU_ID={$ids} "; $comando = $con->createCommand($sql); $comando->execute(); //echo $sql; $trans->commit(); $con->active = false; return $msg->messageSystem('OK', null, 20, null, null); } catch (Exception $e) { // se arroja una excepción si una consulta falla $trans->rollBack(); //throw $e; $con->active = false; return $msg->messageSystem('NO_OK', $e->getMessage(), 11, null, null); } }
private function recibeDocSriDevuelto($response, $ids, $NombreDocumento, $DirDocFirmado, $DBTabDoc, $CampoID) { $con = Yii::app()->dbvsseaint; $msg = new VSexception(); $trans = $con->beginTransaction(); try { $UsuId = Yii::app()->getSession()->get('user_id', FALSE); //[estado] => DEVUELTA $estado = $response['estado']; $CodigoError = ''; $DescripcionError = ''; $comprobanteRac = $response['comprobantes']['comprobante']; $codEstado = '4'; $mensaje = $comprobanteRac['mensajes']['mensaje']; //Array de Errores Sri //$this->mensajeErrorDocumentos($con, $mensaje, $ids, 'FACTURA'); $CodigoError = $mensaje['identificador']; $MensajeSRI = $mensaje['mensaje']; $InformacionAdicional = !empty($mensaje['informacionAdicional']) ? $mensaje['informacionAdicional'] : ''; $DescripcionError = utf8_encode("ID=>{$CodigoError} Error=> {$InformacionAdicional}"); $DirectorioDocumento = $DirDocFirmado; $sql = 'UPDATE ' . $con->dbname . '.' . $DBTabDoc . ' SET DirectorioDocumento="' . $DirectorioDocumento . '",NombreDocumento="' . $NombreDocumento . '", EstadoDocumento="' . $estado . '",Estado="' . $codEstado . '", DescripcionError="' . $DescripcionError . '",CodigoError="' . $CodigoError . '",USU_ID="' . $UsuId . '" WHERE ' . $CampoID . '=' . $ids; //echo $sql; $command = $con->createCommand($sql); $command->execute(); $trans->commit(); $con->active = false; //Su documento fue devuelto por errores en el comprobante //Dependiendo del Error arrojado por el SRI return $msg->messageWSSRI('OK', null, $CodigoError, $MensajeSRI, null); //Web service Sri } catch (Exception $e) { $trans->rollback(); $con->active = false; throw $e; return $msg->messageSystem('NO_OK', $e->getMessage(), 41, null, null); } }
private function generarFileXML($ids) { $autDoc = new VSAutoDocumento(); $msgAuto = new VSexception(); $valida = new VSValidador(); $xmlGen = new VSXmlGenerador(); $codDoc = $this->tipoDoc; //Documento Factura $cabFact = $this->mostrarCabGuia($ids); if (count($cabFact) > 0) { switch ($cabFact["Estado"]) { case 2: //RECIBIDO SRI (AUTORIZADOS) return $msgAuto->messageFileXML('NO_OK', $cabFact["NumDocumento"], null, 42, null, null); break; case 4: //DEVUELTA (NO AUTORIZADOS EN PROCESO) //Cuando son devueltas no se deben generar de nuevo la clave de acceso //hay que esperar hasta que responda switch ($cabFact["CodigoError"]) { case 43: //CLAVE DE ACCESO REGISTRADA //No genera Nada Envia los datos generados anteriormente //Retorna Automaticamente sin Generar Documento //LA CLAVE DE ACCESO REGISTRADA ingresa directamente a Obtener su autorizacion return $msgAuto->messageFileXML('OK_REG', $cabFact["NombreDocumento"], $cabFact["ClaveAcceso"], 43, null, null); break; case 70: //CLAVE DE ACCESO EN PROCESO return $msgAuto->messageFileXML('OK', $cabFact["NombreDocumento"], $cabFact["ClaveAcceso"], 43, null, null); break; default: //Documento Devuelto hay que volver a generar la clave de Acceso //Esto es Opcional /*$objCla = new VSClaveAcceso(); $serie = $cabFact['Establecimiento'] . $cabFact['PuntoEmision']; $fec_doc = date("Y-m-d", strtotime($cabFact['FechaEmisionErp'])); $ClaveAcceso = $objCla->claveAcceso($codDoc, $fec_doc, $cabFact['Ruc'], $cabFact['Ambiente'], $serie, $cabFact['Secuencial'], $cabFact['TipoEmision']); $autDoc->actualizaClaveAccesoDocumento($ids, $ClaveAcceso, 'NubeGuiaRemision', 'IdGuiaRemision'); $cabFact = $this->mostrarCabGuia($ids);//Vuelve a Consultar con la Clave de Acceso Nueva.*/ } break; case 8: //DOCUMENTO ANULADO return $msgAuto->messageSystem('NO_OK', null, 11, null, null); //Peticion Invalida break; default: } } else { //Si la Cabecera no devuelve registros Retorna un resultado de False return $msgAuto->messageFileXML('NO_OK', null, null, 1, null, null); } $destDoc = $this->mostrarDestinoGuia($ids); $adiFact = $this->mostrarCabGuiaDataAdicional($ids); $xmldata = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; $xmldata .= '<guiaRemision id="comprobante" version="1.0.0">'; //Version Normal Para 2 Decimales //$xmldata .='<comprobanteRetencion id="comprobante" version="1.1.0">';//Version para 4 Decimales en Precio Unitario $xmldata .= $xmlGen->infoTributaria($cabFact); $xmldata .= '<infoGuiaRemision>'; if (strlen(trim($cabFact['DireccionEstablecimiento'])) > 0) { $xmldata .= '<dirEstablecimiento>' . utf8_encode(trim($cabFact["DireccionEstablecimiento"])) . '</dirEstablecimiento>'; //Obligado cuando Corresponda } $xmldata .= '<dirPartida>' . utf8_encode(trim($cabFact["DireccionPartida"])) . '</dirPartida>'; $xmldata .= '<razonSocialTransportista>' . $valida->limpioCaracteresXML(trim($cabFact["RazonSocialTransportista"])) . '</razonSocialTransportista>'; $xmldata .= '<tipoIdentificacionTransportista>' . utf8_encode(trim($cabFact["TipoIdentificacionTransportista"])) . '</tipoIdentificacionTransportista>'; $xmldata .= '<rucTransportista>' . trim($cabFact["IdentificacionTransportista"]) . '</rucTransportista>'; if (strlen(trim($cabFact['Rise'])) > 0) { $xmldata .= '<rise>' . utf8_encode(trim($cabFact["Rise"])) . '</rise>'; //Obligado cuando Corresponda } if (strlen(trim($cabFact['ObligadoContabilidad'])) > 0) { $xmldata .= '<obligadoContabilidad>' . utf8_encode(trim($cabFact["ObligadoContabilidad"])) . '</obligadoContabilidad>'; //Obligado cuando Corresponda } if (strlen(trim($cabFact['ContribuyenteEspecial'])) > 0) { $xmldata .= '<contribuyenteEspecial>' . utf8_encode(trim($cabFact["ContribuyenteEspecial"])) . '</contribuyenteEspecial>'; //Obligado cuando Corresponda } $xmldata .= '<fechaIniTransporte>' . date(Yii::app()->params["dateXML"], strtotime($cabFact["FechaInicioTransporte"])) . '</fechaIniTransporte>'; $xmldata .= '<fechaFinTransporte>' . date(Yii::app()->params["dateXML"], strtotime($cabFact["FechaFinTransporte"])) . '</fechaFinTransporte>'; $xmldata .= '<placa>' . trim($cabFact["Placa"]) . '</placa>'; $xmldata .= '</infoGuiaRemision>'; $xmldata .= '<destinatarios>'; for ($i = 0; $i < sizeof($destDoc); $i++) { $xmldata .= '<destinatario>'; $xmldata .= '<identificacionDestinatario>' . utf8_encode(trim($destDoc[$i]['IdentificacionDestinatario'])) . '</identificacionDestinatario>'; $xmldata .= '<razonSocialDestinatario>' . $valida->limpioCaracteresXML(trim($destDoc[$i]["RazonSocialDestinatario"])) . '</razonSocialDestinatario>'; $xmldata .= '<dirDestinatario>' . $valida->limpioCaracteresXML(trim($destDoc[$i]["DirDestinatario"])) . '</dirDestinatario>'; $xmldata .= '<motivoTraslado>' . trim($destDoc[$i]['MotivoTraslado']) . '</motivoTraslado>'; //NOTA Verificar si estos campos No Obligados son Necesarios si en algun momento almens uno se cumple if (strlen(trim($destDoc[$i]['DocAduaneroUnico'])) > 0) { $xmldata .= '<docAduaneroUnico>' . utf8_encode(trim($destDoc[$i]['DocAduaneroUnico'])) . '</docAduaneroUnico>'; //Obligado cuando Corresponda } if (strlen(trim($destDoc[$i]['CodEstabDestino'])) > 0) { $xmldata .= '<codEstabDestino>' . utf8_encode(trim($destDoc[$i]['CodEstabDestino'])) . '</codEstabDestino>'; //Obligado cuando Corresponda } if (strlen(trim($destDoc[$i]['Ruta'])) > 0) { $xmldata .= '<ruta>' . $valida->limpioCaracteresXML(trim($destDoc[$i]["Ruta"])) . '</ruta>'; //Obligado cuando Corresponda } if (strlen(trim($destDoc[$i]['CodDocSustento'])) > 0) { $xmldata .= '<codDocSustento>' . utf8_encode(trim($destDoc[$i]['CodDocSustento'])) . '</codDocSustento>'; //Obligado cuando Corresponda } if (strlen(trim($destDoc[$i]['NumDocSustento'])) > 0) { $xmldata .= '<numDocSustento>' . utf8_encode(trim($destDoc[$i]['NumDocSustento'])) . '</numDocSustento>'; //Obligado cuando Corresponda } if (strlen(trim($destDoc[$i]['NumAutDocSustento'])) > 0) { $xmldata .= '<numAutDocSustento>' . utf8_encode(trim($destDoc[$i]['NumAutDocSustento'])) . '</numAutDocSustento>'; //Obligado cuando Corresponda } if (trim($destDoc[$i]['FechaEmisionDocSustento']) != '0000-00-00') { //Formato de Fecha Mysql $xmldata .= '<fechaEmisionDocSustento>' . date(Yii::app()->params["dateXML"], strtotime($destDoc[$i]["FechaEmisionDocSustento"])) . '</fechaEmisionDocSustento>'; //Obligado cuando Corresponda } $xmldata .= '<detalles>'; $detDoc = $destDoc[$i]['GuiaDet']; //Extrae el Detalle de la Guia de Remision for ($j = 0; $j < sizeof($detDoc); $j++) { $xmldata .= '<detalle>'; $xmldata .= '<codigoInterno>' . utf8_encode(trim($detDoc[$j]['CodigoInterno'])) . '</codigoInterno>'; if (strlen(trim($detDoc[$j]['CodigoAdicional'])) > 0) { $xmldata .= '<codigoAdicional>' . utf8_encode(trim($detDoc[$j]['CodigoAdicional'])) . '</codigoAdicional>'; //Obligado cuando Corresponda } $xmldata .= '<descripcion>' . utf8_encode($valida->limpioCaracteresXML(trim($detDoc[$j]["Descripcion"]))) . '</descripcion>'; $xmldata .= '<cantidad>' . Yii::app()->format->formatNumber($detDoc[$j]['Cantidad']) . '</cantidad>'; $detAdi = $detDoc[$j]['GuiaDetAdi']; //Recupera Datos Adicionales del Detalle de la GUia if (sizeof($detAdi) > 0) { $xmldata .= $xmlGen->guiadetallesAdicionales($detAdi); } $xmldata .= '</detalle>'; } $xmldata .= '</detalles>'; $xmldata .= '</destinatario>'; } $xmldata .= '</destinatarios>'; $xmldata .= $xmlGen->infoAdicional($adiFact); //$xmldata .=$firma; $xmldata .= '</guiaRemision>'; //echo htmlentities($xmldata); $nomDocfile = $cabFact['NombreDocumento'] . '-' . $cabFact['NumDocumento'] . '.xml'; file_put_contents(Yii::app()->params['seaDocXml'] . $nomDocfile, $xmldata); //Escribo el Archivo Xml return $msgAuto->messageFileXML('OK', $nomDocfile, $cabFact["ClaveAcceso"], 2, null, null); }
private function generarFileXML($ids) { $autDoc = new VSAutoDocumento(); $msgAuto = new VSexception(); $valida = new VSValidador(); $xmlGen = new VSXmlGenerador(); $codDoc = $this->tipoDoc; //Documento Factura $cabFact = $this->mostrarCabRetencion($ids); if (count($cabFact) > 0) { switch ($cabFact["Estado"]) { case 2: //RECIBIDO SRI (AUTORIZADOS) return $msgAuto->messageFileXML('NO_OK', $cabFact["NumDocumento"], null, 42, null, null); break; case 4: //DEVUELTA (NO AUTORIZADOS EN PROCESO) //Cuando son devueltas no se deben generar de nuevo la clave de acceso //hay que esperar hasta que responda switch ($cabFact["CodigoError"]) { case 43: //CLAVE DE ACCESO REGISTRADA //No genera Nada Envia los datos generados anteriormente //Retorna Automaticamente sin Generar Documento //LA CLAVE DE ACCESO REGISTRADA ingresa directamente a Obtener su autorizacion return $msgAuto->messageFileXML('OK_REG', $cabFact["NombreDocumento"], $cabFact["ClaveAcceso"], 43, null, null); break; case 70: //CLAVE DE ACCESO EN PROCESO return $msgAuto->messageFileXML('OK', $cabFact["NombreDocumento"], $cabFact["ClaveAcceso"], 43, null, null); break; default: //Documento Devuelto hay que volver a generar la clave de Acceso //Esto es Opcional /*$objCla = new VSClaveAcceso(); $serie = $cabFact['Establecimiento'] . $cabFact['PuntoEmision']; $fec_doc = date("Y-m-d", strtotime($cabFact['FechaEmision'])); $ClaveAcceso = $objCla->claveAcceso($codDoc, $fec_doc, $cabFact['Ruc'], $cabFact['Ambiente'], $serie, $cabFact['Secuencial'], $cabFact['TipoEmision']); $autDoc->actualizaClaveAccesoDocumento($ids, $ClaveAcceso, 'NubeRetencion', 'IdRetencion'); $cabFact = $this->mostrarCabRetencion($ids);//Vuelve a Consultar con la Clave de Acceso Nueva.*/ } break; case 8: //DOCUMENTO ANULADO return $msgAuto->messageSystem('NO_OK', null, 11, null, null); //Peticion Invalida break; default: } } else { //Si la Cabecera no devuelve registros Retorna un resultado de False return $msgAuto->messageFileXML('NO_OK', null, null, 1, null, null); } $detDoc = $this->mostrarDetRetencion($ids); //$impFact = $this->mostrarFacturaImp($ids); $adiFact = $this->mostrarRetencionDataAdicional($ids); $xmldata = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; $xmldata .= '<comprobanteRetencion id="comprobante" version="1.0.0">'; //Version Normal Para 2 Decimales //$xmldata .='<comprobanteRetencion id="comprobante" version="1.1.0">';//Version para 4 Decimales en Precio Unitario $xmldata .= $xmlGen->infoTributaria($cabFact); $xmldata .= '<infoCompRetencion>'; $xmldata .= '<fechaEmision>' . date(Yii::app()->params["dateXML"], strtotime($cabFact["FechaEmision"])) . '</fechaEmision>'; $xmldata .= '<dirEstablecimiento>' . utf8_encode(trim($cabFact["DireccionEstablecimiento"])) . '</dirEstablecimiento>'; if (strlen(trim($cabFact['ContribuyenteEspecial'])) > 0) { $xmldata .= '<contribuyenteEspecial>' . utf8_encode(trim($cabFact["ContribuyenteEspecial"])) . '</contribuyenteEspecial>'; } if (strlen(trim($cabFact['ObligadoContabilidad'])) > 0) { $xmldata .= '<obligadoContabilidad>' . utf8_encode(trim($cabFact["ObligadoContabilidad"])) . '</obligadoContabilidad>'; } $xmldata .= '<tipoIdentificacionSujetoRetenido>' . utf8_encode(trim($cabFact["TipoIdentificacionSujetoRetenido"])) . '</tipoIdentificacionSujetoRetenido>'; $xmldata .= '<razonSocialSujetoRetenido>' . $valida->limpioCaracteresXML(trim($cabFact["RazonSocialSujetoRetenido"])) . '</razonSocialSujetoRetenido>'; $xmldata .= '<identificacionSujetoRetenido>' . utf8_encode(trim($cabFact["IdentificacionSujetoRetenido"])) . '</identificacionSujetoRetenido>'; $xmldata .= '<periodoFiscal>' . utf8_encode(trim($cabFact["PeriodoFiscal"])) . '</periodoFiscal>'; $xmldata .= '</infoCompRetencion>'; $xmldata .= '<impuestos>'; for ($i = 0; $i < sizeof($detDoc); $i++) { $xmldata .= '<impuesto>'; $xmldata .= '<codigo>' . $detDoc[$i]['Codigo'] . '</codigo>'; $xmldata .= '<codigoRetencion>' . $detDoc[$i]['CodigoRetencion'] . '</codigoRetencion>'; $xmldata .= '<baseImponible>' . Yii::app()->format->formatNumber($detDoc[$i]["BaseImponible"]) . '</baseImponible>'; $xmldata .= '<porcentajeRetener>' . (int) $detDoc[$i]['PorcentajeRetener'] . '</porcentajeRetener>'; $xmldata .= '<valorRetenido>' . Yii::app()->format->formatNumber($detDoc[$i]["ValorRetenido"]) . '</valorRetenido>'; $xmldata .= '<codDocSustento>' . $detDoc[$i]['CodDocRetener'] . '</codDocSustento>'; if (strlen(trim($detDoc[$i]['NumDocRetener'])) > 0) { //OPCIONAL CUANDO EXISTA $xmldata .= '<numDocSustento>' . $detDoc[$i]['NumDocRetener'] . '</numDocSustento>'; } if (strlen(trim($detDoc[$i]['FechaEmisionDocRetener'])) > 0) { //Obligatorio cuando corresponda $xmldata .= '<fechaEmisionDocSustento>' . date(Yii::app()->params["dateXML"], strtotime($detDoc[$i]["FechaEmisionDocRetener"])) . '</fechaEmisionDocSustento>'; } $xmldata .= '</impuesto>'; } $xmldata .= '</impuestos>'; $xmldata .= $xmlGen->infoAdicional($adiFact); //$xmldata .=$firma; $xmldata .= '</comprobanteRetencion>'; //echo htmlentities($xmldata); $nomDocfile = $cabFact['NombreDocumento'] . '-' . $cabFact['NumDocumento'] . '.xml'; file_put_contents(Yii::app()->params['seaDocXml'] . $nomDocfile, $xmldata); //Escribo el Archivo Xml return $msgAuto->messageFileXML('OK', $nomDocfile, $cabFact["ClaveAcceso"], 2, null, null); }
public function actionEnviarCorreccion() { if (Yii::app()->request->isAjaxRequest) { $modelo = new NubeRetencion(); //Ejmpleo code 3 $errAuto = new VSexception(); $ids = isset($_POST['ids']) ? base64_decode($_POST['ids']) : NULL; $cabDoc = $modelo->mostrarCabRetencion($ids); $tipDoc = substr($cabDoc['CodigoTransaccionERP'], 0, 2); //Devuelve las 2 primero caracters sean CO Y PP $result = VSDocumentos::anularDodSri($ids, 'RT', 5); //Anula Documentos Retenciones del Sistema $arroout = $errAuto->messageSystem('NO_OK', null, 1, null, null); if ($result['status'] == 'OK') { //Si es Verdadero actualizo datos de base intermedia $result = VSDocumentos::corregirDocSEA($ids, $tipDoc); if ($result['status'] == 'OK') { $arroout = $errAuto->messageSystem('OK', null, 12, null, null); } } header('Content-type: application/json'); echo CJavaScript::jsonEncode($arroout); return; } }
public function enviarMailInforma($body, $CabPed, $DatVen, $Subject, $op) { $msg = new VSexception(); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPSecure = "ssl"; $mail->Port = $this->port; $mail->Host = $this->mailSMTP; $mail->setFrom($this->noResponder, 'Servicio de envío automático ' . $this->domEmpresa); $mail->Subject = $Subject; $mail->MsgHTML($body); switch ($op) { case 1: //NOTIFICA A USUARIOS DEL SISTEMA WEBSEA PARA ANULACION $mail->AddAddress($DatVen["CorreoUser"], $DatVen["NombreUser"]); //Usuario Genera Pedido $mail->AddAddress(Yii::app()->getSession()->get('CorreoConta', FALSE), "Contabiliad"); break; case 2: //NOTIFICA A CLIENTES //$mail->AddAddress($CabPed[0]["CorreoUser"], $CabPed[0]["NombreUser"]);//Usuario Autoriza Pedido break; default: //NOTIFICA ADMINISTRADOR $mail->AddAddress("*****@*****.**", "Byron Villa"); } // si el SMTP necesita autenticación $mail->SMTPAuth = true; // credenciales usuario $mail->Username = $this->noResponder; $mail->Password = $this->noResponderPass; $mail->CharSet = $this->charSet; if (!$mail->Send()) { return $msg->messageSystem('NO_OK', "Error enviando: " . $mail->ErrorInfo, 11, null, null); } else { //echo "¡¡Enviado!!"; return $msg->messageSystem('OK', "¡¡Enviado!!", 30, null, null); } }
public static function reenviarDodSri($Ids, $tipDoc, $Estado) { //2 = ESTE ESTADO PERMITE QUE SE REENVIE EL CORREO $errAuto = new VSexception(); $con = Yii::app()->dbvsseaint; $trans = $con->beginTransaction(); try { switch ($tipDoc) { case "FA": //FACTURAS $sql = "UPDATE " . $con->dbname . ".NubeFactura SET EstadoEnv='{$Estado}' WHERE IdFactura='{$Ids}';"; break; case "GR": //GUIAS DE REMISION $sql = "UPDATE " . $con->dbname . ".NubeGuiaRemision SET EstadoEnv='{$Estado}' WHERE IdGuiaRemision='{$Ids}';"; break; case "RT": //RETENCIONES $sql = "UPDATE " . $con->dbname . ".NubeRetencion SET EstadoEnv='{$Estado}' WHERE IdRetencion='{$Ids}';"; break; case "NC": //NOTAS DE CREDITO $sql = "UPDATE " . $con->dbname . ".NubeNotaCredito SET EstadoEnv='{$Estado}' WHERE IdNotaCredito='{$Ids}';"; break; case "ND": //NOTAS DE DEBITO //$sql = "UPDATE " . $con->dbname . ".NubeFactura SET EstadoEnv='$Estado' WHERE IdFactura='$Ids';"; break; } //VSValidador::putMessageLogFile($sql); if ($sql != '') { //Verifica si Existe Sentencia SQL $comando = $con->createCommand($sql); $comando->execute(); $trans->commit(); $con->active = false; //return true; return $errAuto->messageSystem('OK', null, 44, null, null); } else { $con->active = false; //return false; return $errAuto->messageSystem('NO_OK', null, 1, null, null); } } catch (Exception $e) { // se arroja una excepción si una consulta falla $trans->rollBack(); throw $e; $con->active = false; //return false; return $errAuto->messageSystem('NO_OK', null, 1, null, null); } }