thegreenter / demo

Ejemplos utilizando Greenter (UBL 2.1, SOAP, Firma digital, PDF, QR)
https://greenter-sample.herokuapp.com
MIT License
60 stars 51 forks source link

enviar comprobante "solo" del xml generado #46

Closed abelnexus closed 5 years ago

abelnexus commented 5 years ago

hola amigo, estoy tratando de cambiar la forma de envio de mis comprobantes por que me da muchos problemas enviarlos directamente. genero y firmo correctamente el xml pero luego al querer enviarlo usando tu ejemplo: $res = $see->sendXml(get_class($invoice), $invoice->getName(), file_get_contents($ruta)); la ruta la obtengo normal el detalle es en la variable "$invoice" hay alguna manera de obtener directamente los datos de esa variable del xml ya generado ?

giansalex commented 5 years ago

si se podría, ya que todos esos datos están en el XML, podrias guiarte de este archivo

abelnexus commented 5 years ago

y exactamente que datos necesita esa variable $invoice ? por que ya estuve haciendo de esta manera: como los datos lo almaceno en la bd, con una consulta obtengo de nuevo los datos y vuelvo a generar la estructura pero me pregunto si esos datos ya los tengo en el xml generado o $invoice solo necesita algo en concreto

vuelvo a generar el archivo $invoice pero es muy largo el proceso y pueden ocurrir fallas por eso me preguntaba si del xml mismo se podrian extraer.

 $client = new Client();
                                  $client->setTipoDoc($comprobante[0][9])
                                  ->setNumDoc($comprobante[0][7])
                                  ->setRznSocial($comprobante[0][8])
                                  ->setAddress((new Address())
                                  ->setDireccion($comprobante[0][10]));
                                  // Emisor
                                  $address = new Address();
                                  $address->setUbigueo($ubigeo)
                                  ->setDepartamento($departamento)
                                  ->setProvincia($provincia)
                                  ->setDistrito($distrito)
                                  ->setUrbanizacion($urbanizacion)
                                  ->setDireccion($direccionempresa);

                                  $company = new Company();
                                  $company->setRuc($rucempresa)
                                  ->setRazonSocial($razonempresa)
                                  ->setNombreComercial($nombre_comercial)
                                  ->setAddress($address);

                         $item = $this->model->listado_item($data);
                                foreach ($this->$item as $clave => $valor) {           

                                               $total2 = $valor[5];
                                               $ulgv = Validar::calcular_igv($total2);         
                                               $valorunitario = $valor[4] - $ulgv;
                                               $preciounitario = $valor[4];
                                               $valorventa = Validar::calcular_subtotal($total2);

                                               $detail = new SaleDetail();
                                               $detail ->setUnidad($valor[8])
                                               ->setCantidad($valor[2])
                                               ->setDescripcion($valor[6])
                                               ->setCodProducto($valor[7])                                       
                                               ->setMtoValorVenta($valorventa)
                                               ->setMtoValorUnitario($valorunitario)
                                               ->setMtoBaseIgv($valorventa)
                                               ->setPorcentajeIgv(18)
                                               ->setIgv($ulgv)
                                               ->setTipAfeIgv($valor[3])                                               
                                                ->setTotalImpuestos($ulgv)
                                               ->setMtoPrecioUnitario($preciounitario);

                                               $items[] = $detail;

                                               }  

                          $invoice = new Invoice();                             
                          $invoice->setUblVersion('2.1')
                                  ->setTipoOperacion('0101')                           
                                  ->setTipoDoc($comprobante[0][4])
                                  ->setSerie($comprobante[0][5])
                                  ->setCorrelativo($comprobante[0][6])
                                  ->setFechaEmision(new DateTime())
                                  ->setTipoMoneda($comprobante[0][11])
                                  ->setClient($client)
                                  ->setMtoOperGravadas($comprobante[0][13])
                                  ->setValorVenta($comprobante[0][13])
                                  ->setMtoOperExoneradas(0)
                                  ->setMtoOperInafectas(0)                                
                                  ->setMtoIGV($comprobante[0][14])
                                  ->setMtoImpVenta($comprobante[0][12])
                                  ->setTotalImpuestos($comprobante[0][14])

                                  ->setCompany($company);
                                  $legend = new Legend();
                                  $legend->setCode('1000')
                                  ->setValue($comprobante[0][16]); 

                                  $invoice->setDetails($items)
                                  ->setLegends([$legend]);
abelnexus commented 5 years ago

y al hacer esto lo envio sin items(por que me da error) pero igual lo envia y hay cdr de aceptado entonces me doy cuenta que solo necesita algunos datos y no se cuales son esos datos

giansalex commented 5 years ago

Los datos son el RUC de la empresa, tipo documento, serie y correlativo, lo puedes ver inspeccionando el método getName() en Invoice

abelnexus commented 5 years ago

gracias amigo ya lo pude solucionar lo del $invoice. no recuerdo bien pero me dijiste creo que ahora cuando es: if ($res->isSuccess()){ ya sea aceptado, aceptado con error, aceptado con observación, en caso que haya cdr cualquiera sea la respuesta no se puede volver a usar la misma numeración verdad ?

giansalex commented 5 years ago

si, y era para el caso de Resumen diario y Comunicacion de Baja.

AnthonyLJ96 commented 5 years ago

Gracias

itamaradin15 commented 5 years ago

hola amigos, tengo una duda, he estado leyendo en las noticias que apartir del 1 de marzo se debe emitir desde el contribuyente en tal caso entonces usar esta libreria ya no seria de utilidad? o aun se podra seguir emitidiendo documentos sin problemas?

giansalex commented 5 years ago

Esta librería es para emitir desde los sistemas del contribuyente, seguirá funcionando.

El 1 de marzo las empresas están obligadas a emitir en la versión UBL 2.1, y algunas ya no enviarán los comprobantes a SUNAT sino a los Operadores de Servicios Electronicos (OSE)

AnthonyLJ96 commented 5 years ago

Buenos días, desde el primero de marzo será obligatorio para todos enviar los comprobantes a las OSE?

giansalex commented 5 years ago

@AnthonyLJ96 , es obligatorio para los principales contribuyentes al 31 de diciembre del 2018

UnGatito commented 5 years ago

Hola amigos no logro hacerlo funcionar me sale el siguiente error Warning: require(D:\Server_FsJ\www\public_html\lunita.pe\examples/../vendor/autoload.php): failed to open stream: No such file or directory in

giansalex commented 5 years ago

Hola, ejecutaste composer install

giansalex commented 5 years ago

Se agrego un nuevo metodo sendXmlFile($xml), que permite el envio del xml generado previamente, sin necesidad de pasar el tipo de documento, ni nombre. https://github.com/giansalex/greenter/commit/dae0b162e3cbd612ba5fbeb27fc064f46c5a8382

FrankMontilla commented 4 years ago

disculpe me sale el siguiente error : Call to a member function getRuc() on null

giansalex commented 4 years ago

Tal vez no estas pasando el parametro correcto

FrankMontilla commented 4 years ago

envío estos parametros : $XML = file_get_contents('filesfact/comprobantes/'.$xmlname); $res = $see->sendXmlFile($XML);

giansalex commented 4 years ago

disculpe me sale el siguiente error : Call to a member function getRuc() on null

No te salio una linea de codigo, en el error