// crear notas de crédito para el set de prueba $notas_credito = [ \sasco\LibreDTE\Arreglo::mergeRecursiveDistinct($set_pruebas[0], [ 'Encabezado' => [ 'IdDoc' => [ 'TipoDTE' => 61, 'Folio' => $folios[61], 'MntBruto' => 1, ], 'Totales' => [ // estos valores serán calculados automáticamente 'MntNeto' => 0, 'TasaIVA' => \sasco\LibreDTE\Sii::getIVA(), 'IVA' => 0, 'MntTotal' => 0, ], ], 'Referencia' => [ 'TpoDocRef' => $set_pruebas[0]['Encabezado']['IdDoc']['TipoDTE'], 'FolioRef' => $set_pruebas[0]['Encabezado']['IdDoc']['Folio'], 'CodRef' => 1, 'RazonRef' => 'ANULA BOLETA', ], ]), \sasco\LibreDTE\Arreglo::mergeRecursiveDistinct($set_pruebas[2], [ 'Encabezado' => [ 'IdDoc' => [ 'TipoDTE' => 61, 'Folio' => $folios[61]+1, 'MntBruto' => 1, ], 'Totales' => [ // estos valores serán calculados automáticamente 'MntNeto' => 0, 'TasaIVA' => \sasco\LibreDTE\Sii::getIVA(), 'IVA' => 0, 'MntTotal' => 0, ], ], 'Referencia' => [ 'TpoDocRef' => $set_pruebas[2]['Encabezado']['IdDoc']['TipoDTE'], 'FolioRef' => $set_pruebas[2]['Encabezado']['IdDoc']['Folio'], 'CodRef' => 1, 'RazonRef' => 'ANULA BOLETA', ], ]), \sasco\LibreDTE\Arreglo::mergeRecursiveDistinct($set_pruebas[4], [ 'Encabezado' => [ 'IdDoc' => [ 'TipoDTE' => 61, 'Folio' => $folios[61]+2, 'MntBruto' => 1, ], 'Totales' => [ // estos valores serán calculados automáticamente 'MntNeto' => 0, 'TasaIVA' => \sasco\LibreDTE\Sii::getIVA(), 'IVA' => 0, 'MntTotal' => 0, ], ], 'Referencia' => [ 'TpoDocRef' => $set_pruebas[4]['Encabezado']['IdDoc']['TipoDTE'], 'FolioRef' => $set_pruebas[4]['Encabezado']['IdDoc']['Folio'], 'CodRef' => 1, 'RazonRef' => 'ANULA BOLETA', ], ]), \sasco\LibreDTE\Arreglo::mergeRecursiveDistinct($set_pruebas[6], [ 'Encabezado' => [ 'IdDoc' => [ 'TipoDTE' => 61, 'Folio' => $folios[61]+3, 'MntBruto' => 1, ], 'Totales' => [ // estos valores serán calculados automáticamente 'MntNeto' => 0, 'TasaIVA' => \sasco\LibreDTE\Sii::getIVA(), 'IVA' => 0, 'MntTotal' => 0, ], ], 'Detalle' => [ [ 'QtyItem' => $set_pruebas[6]['Detalle'][0]['QtyItem']*0.4, ] ], 'Referencia' => [ 'TpoDocRef' => $set_pruebas[6]['Encabezado']['IdDoc']['TipoDTE'], 'FolioRef' => $set_pruebas[6]['Encabezado']['IdDoc']['Folio'], 'CodRef' => 3, 'RazonRef' => 'SE REBAJA EN UN 40%', ], ]), \sasco\LibreDTE\Arreglo::mergeRecursiveDistinct($set_pruebas[9], [ 'Encabezado' => [ 'IdDoc' => [ 'TipoDTE' => 61, 'Folio' => $folios[61]+4, 'MntBruto' => 1, ], 'Totales' => [ // estos valores serán calculados automáticamente 'MntNeto' => 0, 'TasaIVA' => \sasco\LibreDTE\Sii::getIVA(), 'IVA' => 0, 'MntTotal' => 0, ], ], 'Detalle' => [ [ 'QtyItem' => $set_pruebas[9]['Detalle'][0]['QtyItem']*0.4, ] ], 'Referencia' => [ 'TpoDocRef' => $set_pruebas[9]['Encabezado']['IdDoc']['TipoDTE'], 'FolioRef' => $set_pruebas[9]['Encabezado']['IdDoc']['Folio'], 'CodRef' => 3, 'RazonRef' => 'SE REBAJA EN UN 40%', ], ]), ]; // Objetos de Firma y Folios $Firma = new \sasco\LibreDTE\FirmaElectronica($config['firma']); $Folios = []; foreach ($folios as $tipo => $cantidad) $Folios[$tipo] = new \sasco\LibreDTE\Sii\Folios(file_get_contents('xml/'.$tipo.'.xml')); // generar cada DTE, timbrar, firmar y agregar al sobre de EnvioBOLETA $EnvioDTE = new \sasco\LibreDTE\Sii\EnvioDte(); foreach ($notas_credito as $documento) { $DTE = new \sasco\LibreDTE\Sii\Dte($documento); if (!$DTE->timbrar($Folios[$DTE->getTipo()])) break; if (!$DTE->firmar($Firma)) break; $EnvioDTE->agregar($DTE); } $EnvioDTE->setFirma($Firma); $EnvioDTE->setCaratula($caratula); $EnvioDTE->generar(); file_put_contents('xml/EnvioNC.xml', $EnvioDTE->generar()); // guardar XML en sistema de archivos echo $EnvioDTE->generar();