/**
  * Método que permite generar un libro de Compras o Ventas a partir de un
  * archivo CSV con el detalle del mismo
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-12-24
  */
 public function generar_libro()
 {
     // si no se viene por post terminar
     if (!isset($_POST['submit'])) {
         return;
     }
     // verificar campos no estén vacíos
     $campos = ['TipoOperacion', 'RutEmisorLibro', 'PeriodoTributario', 'FchResol', 'NroResol', 'TipoLibro', 'TipoEnvio', 'FolioNotificacion', 'contrasenia'];
     foreach ($campos as $campo) {
         if (empty($_POST[$campo])) {
             \sowerphp\core\Model_Datasource_Session::message($campo . ' no puede estar en blanco', 'error');
             return;
         }
     }
     // si no se pasó el archivo error
     if (!isset($_FILES['archivo']) or $_FILES['archivo']['error']) {
         \sowerphp\core\Model_Datasource_Session::message('Debes enviar el archivo CSV con el detalle de las compras o ventas al que deseas generar su XML', 'error');
         return;
     }
     // si no se pasó la firma error
     if (!isset($_FILES['firma']) or $_FILES['firma']['error']) {
         \sowerphp\core\Model_Datasource_Session::message('Debes enviar el archivo con la firma digital', 'error');
         return;
     }
     // Objeto de la Firma
     try {
         $Firma = new \sasco\LibreDTE\FirmaElectronica(['data' => file_get_contents($_FILES['firma']['tmp_name']), 'pass' => $_POST['contrasenia']]);
     } catch (\Exception $e) {
         \sowerphp\core\Model_Datasource_Session::message('No fue posible abrir la firma digital, quizás contraseña incorrecta', 'error');
         return;
     }
     // generar caratula del libro
     $caratula = ['RutEmisorLibro' => str_replace('.', '', $_POST['RutEmisorLibro']), 'RutEnvia' => $Firma->getID(), 'PeriodoTributario' => $_POST['PeriodoTributario'], 'FchResol' => $_POST['FchResol'], 'NroResol' => $_POST['NroResol'], 'TipoOperacion' => $_POST['TipoOperacion'], 'TipoLibro' => $_POST['TipoLibro'], 'TipoEnvio' => $_POST['TipoEnvio'], 'FolioNotificacion' => $_POST['FolioNotificacion']];
     // definir si es certificacion
     $caratula_certificacion = ['COMPRA' => ['PeriodoTributario' => 2000, 'FchResol' => '2006-01-20', 'NroResol' => 102006, 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 102006], 'VENTA' => ['PeriodoTributario' => 1980, 'FchResol' => '2006-01-20', 'NroResol' => 102006, 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 102006]];
     $certificacion = true;
     foreach ($caratula_certificacion[$caratula['TipoOperacion']] as $attr => $val) {
         if ($caratula[$attr] != $val or $attr == 'PeriodoTributario' and substr($caratula[$attr], 0, 4) != $val) {
             $certificacion = false;
             break;
         }
     }
     // generar libro de compras o venta
     $LibroCompraVenta = new \sasco\LibreDTE\Sii\LibroCompraVenta((bool) $_POST['simplificado']);
     if ($caratula['TipoOperacion'] === 'COMPRA') {
         $LibroCompraVenta->agregarComprasCSV($_FILES['archivo']['tmp_name']);
     } else {
         $LibroCompraVenta->agregarVentasCSV($_FILES['archivo']['tmp_name']);
     }
     $LibroCompraVenta->setCaratula($caratula);
     $LibroCompraVenta->setFirma($Firma);
     $xml = $LibroCompraVenta->generar();
     if (!$LibroCompraVenta->schemaValidate()) {
         \sowerphp\core\Model_Datasource_Session::message(implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error');
         return;
     }
     // descargar XML
     $file = TMP . '/' . $LibroCompraVenta->getID() . '.xml';
     file_put_contents($file, $xml);
     \sasco\LibreDTE\File::compress($file, ['format' => 'zip', 'delete' => true]);
     exit;
 }
 /**
  * Acción que genera el libro de ventas a partir del XML de EnvioDTE creado
  * para la certificación
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-12-16
  */
 public function set_pruebas_ventas()
 {
     // si no se pasó el archivo error
     if (!isset($_FILES['archivo']) or $_FILES['archivo']['error']) {
         \sowerphp\core\Model_Datasource_Session::message('Debes enviar el archivo XML del EnvioDTE al que quieres generar su Libro de Ventas', 'error');
         $this->redirect('/certificacion/set_pruebas#ventas');
     }
     // obtener documentos
     $EnvioDte = new \sasco\LibreDTE\Sii\EnvioDte();
     $EnvioDte->loadXML(file_get_contents($_FILES['archivo']['tmp_name']));
     $Caratula = $EnvioDte->getCaratula();
     $Documentos = $EnvioDte->getDocumentos();
     // amar caratula
     $caratula = ['RutEmisorLibro' => $Caratula['RutEmisor'], 'RutEnvia' => $Caratula['RutEnvia'], 'PeriodoTributario' => $_POST['PeriodoTributario'], 'FchResol' => '2006-01-20', 'NroResol' => 102006, 'TipoOperacion' => 'VENTA', 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 102006];
     // armar libro de ventas
     $LibroCompraVenta = new \sasco\LibreDTE\Sii\LibroCompraVenta(true);
     // libro simplificado
     foreach ($Documentos as $DTE) {
         $LibroCompraVenta->agregar($DTE->getResumen(), false);
         // agregar detalle sin normalizar
     }
     // generar XML con el libro de ventas
     $LibroCompraVenta->setCaratula($caratula);
     $xml = $LibroCompraVenta->generar(false);
     // generar XML sin firma y sin detalle
     // verificar problemas de esquema
     /*if (!$LibroCompraVenta->schemaValidate()) {
           \sowerphp\core\Model_Datasource_Session::message(
               implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error'
           );
           $this->redirect('/certificacion/set_pruebas#ventas');
       }*/
     // descargar XML
     $file = TMP . '/' . $LibroCompraVenta->getID() . '.xml';
     file_put_contents($file, $xml);
     \sasco\LibreDTE\File::compress($file, ['format' => 'zip', 'delete' => true]);
     exit;
 }