예제 #1
0
 public function guiadetallesAdicionales($adiDoc)
 {
     $valida = new VSValidador();
     $xmldata = '<detallesAdicionales>';
     for ($i = 0; $i < sizeof($adiDoc); $i++) {
         if (strlen(trim($adiDoc[$i]['Descripcion'])) > 0) {
             $xmldata .= '<detAdicional nombre="' . trim($adiDoc[$i]['Nombre']) . '" valor="' . $valida->limpioCaracteresXML(trim($adiDoc[$i]['Descripcion'])) . '">';
         }
     }
     $xmldata .= '</detallesAdicionales>';
     return $xmldata;
 }
예제 #2
0
 public function claveAcceso($tip_doc, $fec_doc, $ruc, $ambiente, $serie, $numDoc, $tipoemision)
 {
     $valida = new VSValidador();
     //http://es.wikipedia.org/wiki/C%C3%B3digo_de_control
     $clave = '';
     $fecha = date("dmY", strtotime($fec_doc));
     //ddmmyyyy
     //Se multiplica la Numero Documento para que nos de un valor Unico y para la coprobacion
     //se divide y se extrae el valor que debera ser comparado con la serie
     $codNumerico = $valida->ajusteNumDoc(floatval($numDoc) * 777, 8);
     //Generado por Seguridad Comprobacion 8 Digitos
     $clave = $fecha . $tip_doc . $ruc . $ambiente . $serie . $numDoc . $codNumerico . $tipoemision;
     //echo '<br>'.strlen($clave);
     //echo '<br>'.$clave.$this->modulo11($clave);
     return $clave . $this->modulo11($clave);
 }
예제 #3
0
 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);
 }
예제 #4
0
echo Yii::t('PERSONA', 'TipoEmision');
?>
</label>
        <?php 
echo CHtml::dropDownList("cmb_TipoEmision", 0, VSValidador::tipoEmision(), ["class" => "form-control", "id" => "cmb_TipoEmision"]);
?>
    </div>
    

    <div class="form-group">
        <label><?php 
echo Yii::t('PERSONA', 'ObligadoContabilidad');
?>
</label>
        <?php 
echo CHtml::dropDownList("cmb_ObligadoContabilidad", 0, VSValidador::tipoEstado(), ["class" => "form-control", "id" => "cmb_ObligadoContabilidad"]);
?>
    </div>
    <div class="form-group">
        <label><?php 
echo Yii::t('PERSONA', 'ContribuyenteEspecial');
?>
</label>
        <?php 
echo CHtml::textField('txt_ContribuyenteEspecial', '', array('size' => 10, 'maxlength' => 20, 'class' => 'form-control'));
?>
    </div>
        <div class="form-group">
        <label><?php 
echo Yii::t('PERSONA', 'Correo Empresa');
?>
예제 #5
0
 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);
 }
예제 #6
0
 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);
 }