Closed abelnexus closed 6 years ago
el otro seria en $legend $legend = new Legend(); $legend->setCode('1000') ->setValue('SON CIEN CON 00/100 SOLES');
ese setcode(1000) es determinado ?
el otro seria si quiero ser emisor electronico escuche que sunat te pide el certificado digital y su clave pero el certificado que usamos con extension .pem no requiere clave como se hace en ese caso y que y como solicito a sunat para ser emisor
otro seria en el codigo qr de la representacion impresa debe ir ese contendio? cuando lo escaneo me bota los atributos de la factura como en un texto plano. y tambien escuche que se debe enviar a su correo del cliente la representacion impresa
entonces el codigo motivo solo es '07' y '08 ?'
->setTipoDoc('07') este si se que es 07 por que es nota_credito ->setCodMotivo('07') estaba seguro que era ese cuadro que te meustro arriba
el código motivo puede ser de 2 listas, para NCR es del catalogo 9 y para NDB es del catalogo 10
amigo como saco el status o descripcion de un xml ya creado (la factura nro f001-000001 ha sido aceptada) y mostrarlo con un echo
Esa respuesta se obtiene del xml de respuesta que te devuelve sunat (dentro de zip - CDR), para ello puedes usar
$path = __DIR__ . '/R-20600995805-01-F001-1.xml';
$xml = file_get_contents($path);
$reader = new DomCdrReaderInterface();
$cdr = $reader->getCdrResponse($xml);
echo $cdr->getDescription();
DomCdrReaderInterface forma parte de greenter/ws
el cual ya esta incluido en greenter
stoy usando estas clases use Greenter\Model\DocumentInterface; use Greenter\Model\Response\CdrResponse; y no me reconoce el 'DomCdrReaderInterface'
Disculpa el namespace es este:
use Greenter\Ws\Reader\DomCdrReaderInterface;
no entiendo que esta mal este es el codigo <?php include '../vendor/autoload.php';
use Greenter\Ws\Reader\DomCdrReaderInterface;
$path = DIR.'../files/R-20491037785-01-F001-000112.xml'; $xml = file_get_contents($path); $reader = new DomCdrReaderInterface(); $cdr = $reader->getCdrResponse($xml);
echo $cdr->getDescription(); ?>
y este el error
y este el archivo que quiero abrir
el codigo que te mostre es explicitamente para obtenerlo de un XML no de ZIP, el codigo completo seria este.
use Greenter\Ws\Reader\DomCdrReaderInterface;
use Greenter\Zip\ZipHelper;
$path = DIR.'../files/R-20491037785-01-F001-000112.zip';
$zip = file_get_contents($path);
$helper = new ZipHelper();
$xml = $helper->decompressXmlFile($zip);
$reader = new DomCdrReaderInterface();
$cdr = $reader->getCdrResponse($xml);
echo $cdr->getDescription();
ya salio gracias papi :D
D: amigo como evito que me muestre el mensaje de error
<?php
$path = 'files/R-20491037785-01-'.$valor['serie'].'-'.$valor['numeracion'].'.zip'; if(isset($path)){ $zip = file_get_contents($path); $helper = new ZipHelper(); $xml = $helper->decompressXmlFile($zip);
$reader = new DomCdrReaderInterface(); $cdr = $reader->getCdrResponse($xml);
echo $cdr->getDescription(); } else{ echo 'no existe respeusta'; }
?>
ya lo solucione amigo: <?php
$path = 'files/R-20491037785-01-'.$valor['serie'].'-'.$valor['numeracion'].'.zip'; if(file_exists($path)){ $zip = file_get_contents($path); $helper = new ZipHelper(); $xml = $helper->decompressXmlFile($zip);
$reader = new DomCdrReaderInterface(); $cdr = $reader->getCdrResponse($xml);
echo $cdr->getDescription(); } else{ echo 'no existe respeusta'; }
?>
ahora si bien me muestra que se envio se puede saber si tiene errores o falta enviar ?
pero eso tendria que ir directo al xml verdad ?
esa información de estados debes alojarla en la base de datos, cuando envias recibes la respuesta, si fue aceptada, tiene errores o es rechazada. De alli actualizas el estado de la venta.
si pensaba hacer eso pero al momento de recibir el error
solo me mustra objet objet nada mas:
$this->sms = $util->getResponseFromCdr($cdr);
} else {
$this->sms = $res->getError();
solo me muestra ese error
es que ambos te devuelven un object, en el primero debes obtener $util->getResponseFromCdr($cdr)->getDescription();
y del error $res->getError()->getMessage();
:o amigo donde aprendiste a programar o como sabes tanto, que debo leer para saber estas cosas
Lo normal - de libros, cursos, tutoriales.
Tambien es bueno usar un buen IDE, por ejemplo para php uso PhpStorm de esa forma no tienes que buscar documentación, los metodos hablan por si solos. Y ya que greenter
no tiene un documentación general aun, esto es una buena ayuda.
Ya puse la primera piedra para la documentación en esta pagina https://giansalex.github.io/greenter/
seguir estudiando duro entoces :D gracias
hola amigo una duda para las facturas que son mayores de 700 tiene que haber detracción o retencion creo es eso se debe programar tambien al momento de crear la factura ?
la detracción se aplica cuando tiene servicios, la retención depende si la empresa es agente de retención.
de lo que estoy haciendo es prestacion de servicios como aplico esa detraccion en mi factura (solo si es mayor de 700 el monto) debo sacarle el mondot de detraccion o solo envio el monto total y sunat ya ve que hace ?
hay un campo para la detraccion.
$invoice = new Invoice();
$invoice->setDetraccion((new Detraction())
->setMount(2228.3)
->setPercent(9)
);
hola amigo las notas de debito y credito son para facturas y boletas ?
que es 'Nro.R.I. Emisor: 212321' ? '
Es la resolución de Sunat que te autoriza como Emisor Electronico
amigo como hago para que windows.open(url) funcione despues de 5 seg ?
setTimeout(function(){
windows.open(url);
}, 5000); // 5000 ms
hola amigo gracias funcione en window.open ahora tengo un problema mayorrrrr: ya resulta que si puedo abrir el pdf pero no es dinamico
tengo este codigo $(".frm-ventas").submit(function(event) { event.preventDefault(); var url = $(this).attr('action'); var data = $(this).serialize(); $.ajax({ type:'POST', dataType:'json', url:url, data:data, success:function(response){ $('#caja').toggle(); $("span").remove( ".mensaje" ); $("i").remove('.glyphicon'); $("#caja").fadeOut(5000);
if (response.respuesta == true) {
$(".box-pago").hide();
setTimeout(function(){
window.open("examples/report/factura.php");
}, 5000); // 5000 ms
$('#caja').removeClass('alert-danger').addClass('alert-info');
$("#caja").append("<i class='glyphicon glyphicon-info-sign' aria-hidden='true'></i>");
$("#caja").append("<span class='mensaje'>"+" RESPUESTA SUNAT: "+response.mensaje+"</span>");
$('.cargando').toggle();
$('.cargando p').html('Limpiando el carrito...');
setTimeout(llenar_tabla_json, 2000);
limpiarformulario($(".frm-ventas"));
}else{
$('#caja').removeClass('alert-info').addClass('alert-danger');
$("#caja").append("<i class='glyphicon glyphicon-exclamation-sign' aria-hidden='true'></i>");
$("#caja").append("<span class='mensaje'>"+" Error: "+response.mensaje+"</span>");
}
},error:function(){
alert("Ha ocurrido un error");
}
});
});
captura el momento de enviar el submit y me bota el mensaje de confirmacion y eso ahora $invoice->setDetails($items) ->setLegends([$legend]);
$mensaje = $this->model->generar_factura($invoice);
$mensajeError = $mensaje;
alguna manera de enviar esa variable $invoice mediante el codigo de arriba y asi sea dinamico el pdf ?
Fatal error: Uncaught TypeError: Argument 1 passed to Util::getPdf() must be an instance of Greenter\Model\DocumentInterface, string given, called in C:\xampp\htdocs\invoice\examples\report\factura.php on line 9 and defined in C:\xampp\htdocs\invoice\src\Util.php:74 Stack trace: #0 C:\xampp\htdocs\invoice\examples\report\factura.php(9): Util->getPdf('[object Object]') #1 {main} thrown in C:\xampp\htdocs\invoice\src\Util.php on line 74
Segun el error estas pasando un string en vez de un object (Invoice por ejemplo)
este codigoe stoy usando amigo
require DIR . '/../../vendor/autoload.php';
$data = $_GET['invoice']; $util = Util::getInstance();
$pdf = $util->getPdf($data);
$util->showPdf($pdf, $data->getName().'.pdf');
y este es la url localhost:82/invoice/examples/report/factura.php?invoice=[object%20Object]
de donde obtienes $data
, en la url envias invoice=[object%20Object]
, ese valor no debe ser valido, que valor pretendes enviar en invoice.
$data es la variable que captura por get la variable invoice que envie desde ajax
pretendo enviar la variable $invoice
$client->setTipoDoc('6')
->setNumDoc(trim($_POST['ruc']))
->setRznSocial(trim($_POST['cliente']))
->setAddress((new Address())
->setDireccion(trim($_POST['direccion'])));
// 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);
// Venta
$invoice = new Invoice();
$invoice
->setFecVencimiento(new DateTime())
->setTipoDoc($tipo_documento)
->setSerie(trim($_POST['serie']))
->setCorrelativo(trim($_POST['numero']))
->setFechaEmision(new DateTime())
->setTipoMoneda(trim($_POST['pago']))
->setClient($client)
->setMtoOperGravadas($gravadas)
->setMtoIGV($importeIGV)
->setMtoImpVenta($importe)
->setCompany($company);
$leyenda = trim($_POST['total']);
$centimos = substr($leyenda, -2);
$legn = validar::convertir($leyenda,'CON '.$centimos.'/100 SOLES');
$legend = new Legend();
$legend->setCode('1000')
->setValue($legn);
$invoice->setDetails($items)
->setLegends([$legend]);
para enviar objetos complejos deberias enviarlos por POST
lo envio de esta manera amigo: $salidaJson=array('respuesta' => $mensajeOk,'mensaje' => $mensajeError, 'invoice' => $invoice); echo json_encode($salidaJson);
$(".frm-ventas").submit(function(event) {
event.preventDefault();
var url = $(this).attr('action');
var data = $(this).serialize();
$.ajax({
type:'POST',
dataType:'json',
url:url,
data:data,
success:function(response){
$('#caja').toggle();
$("span").remove( ".mensaje" );
$("i").remove('.glyphicon');
$("#caja").fadeOut(5000);
if (response.respuesta == true) {
$(".box-pago").hide();
setTimeout(function(){
window.open("examples/report/factura.php?invoice="+response.invoice);
}, 5000); // 5000 ms
$('#caja').removeClass('alert-danger').addClass('alert-info');
$("#caja").append("<i class='glyphicon glyphicon-info-sign' aria-hidden='true'></i>");
$("#caja").append("<span class='mensaje'>"+" ok: "+response.mensaje+"</span>");
$('.cargando').toggle();
$('.cargando p').html('Limpiando el carrito...');
setTimeout(llenar_tabla_json, 2000);
limpiarformulario($(".frm-ventas"));
}else{
$('#caja').removeClass('alert-info').addClass('alert-danger');
$("#caja").append("<i class='glyphicon glyphicon-exclamation-sign' aria-hidden='true'></i>");
$("#caja").append("<span class='mensaje'>"+" Error: "+response.mensaje+"</span>");
}
},error:function(){
alert("Ha ocurrido un error");
}
});
});
hola amigo tengo algunas dudas que quisiera me ayudaras: primero en nota_credito ese esta variable ->setCodMotivo('07')
se refiere a esto?