<?php

include_once('db_config.php');

$Year = "";
$Month = "";
$mode = 0;

if( $argc > 1 ) {
   $mode =  intval( $argv[1] );  // 1 = Ventas   2 = Compras   3 = Alicuotas Compra 
}
else die( "exportarAFIP.php <year> <month>\n" );

if( $argc > 2 ) {
   $y =  intval( $argv[2] );  // Year
}


   for( $i = $y; $i < $y+1; $i++ ) {
      for( $m = 1; $m < 13; $m++ ) {

         if( $mode == 1 )
            $filename = sprintf( "./regimen/%04d%02d_ventas.txt", $i, $m );   
         if( $mode == 2 )
            $filename = sprintf( "./regimen/%04d%02d_compras.txt", $i, $m );   
         if( $mode == 3 )
            $filename = sprintf( "./regimen/%04d%02d_compras_alicuotas.txt", $i, $m );   
         if( $mode == 4 )
            $filename = sprintf( "./regimen/%04d%02d_ventas_alicuotas.txt", $i, $m );   

         $file = fopen($filename, "w+");      
         $Year = $i;
         $Month = $m;
         $sql = "select sql_no_cache comprobantes.id as idc, empresas.tipo_iva as tipo_iva, comprobantes.cuit as ccuit, empresas.cuit as ecuit, operacion, fecha, numero, Etiquetas, empresas.id as code_empresa, empresas.nombre as nombre_empresa, comprobantes.nombre as nombre, iva_105, iva_21, iva_27, iva_MT, ( iva_105 + iva_21 +iva_27 + iva_MT ) as sin_iva, iva, importe, retenciones, retenciones_iva, op_exentas, ( retenciones_iva + op_exentas + otras_retenciones ) as otras, importe, retenciones_ganancias from comprobantes left join empresas on empresas.id = comprobantes.cliente where year(fecha)="  . $Year . " and month(fecha)=" . $Month . " and comprobantes.Borrado=0 and (operacion=1 or operacion=2) order by fecha";

//         printf( "%s\n", $sql );   
         $result = $conn->query($sql);
         if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()) {
      
               $date = date_create($row["fecha"]);
               $formatted = date_format($date, 'Ymd');
               $tc = $row["operacion"];
               $tipo_iva = $row["tipo_iva"];
               $numero_tc = $row["numero"];
               $pv = intval(substr($numero_tc,0,4));
               $numero = intval( substr($numero_tc,5,8));
               $importe= floatval( $row["importe"] ) * 100;
               $neto = floatval( $row["sin_iva"] ) * 100;
               $otros = ( floatval( $row["retenciones"] ) + floatval( $row["otras"] ) + floatval( $row["retenciones_ganancias"] ) ) * 100;
               $exentas= floatval( $row["op_exentas"] ) * 100 ;
               $nacionales= ( floatval( $row["retenciones_iva"] ) + floatval( $row["retenciones_ganancias"] ) ) * 100;
               $iibb = floatval( $row["retenciones"] ) * 100;
               $tipo_moneda= "PES";
               $iva= $row["iva"] * 100; 
               $nombre= $row["nombre"];
               if( $nombre == "" ) $nombre= $row["nombre_empresa"];

      
               $nombre = substr($nombre,0,30);
               $cuit= $row["ccuit"];
               if( $cuit == "" ) $cuit= $row["ecuit"];
               $cuit = str_replace("-", "", $cuit);



               if( $pv == 0 ) continue;
//               if( $neto <= 0 ) continue;
      
      //         retenciones, retenciones_iva, op_exentas, ( retenciones_iva + op_exentas + otras_retenciones ) as otras, importe, retenciones_ganancias
      
               $Op = "N/C";
      
               $ok = false;
               switch( $tipo_iva ) {
      
                  // Resp Inscripto
                  case 1:
                     switch( $op = $row["operacion"] ) {

                        // Ventas
                        case 1:  
                           $Op = "001"; 
                           if( $mode == 1 || $mode == 4 ) $ok = true;
//                           printf( "Venta %s\n", $ok );
                           break;
      
                        // Compras
                        case 2:  
                           $Op = "001"; 
                           if( $mode == 2 || $mode == 3 ) $ok = true;
//                           printf( "Compra %s\n", $ok );
                           break;
      
                        default: break;
                     }
                     break;
      
                  case 2:
                     switch( $op = $row["operacion"] ) {
                        case 1:  $Op = "001"; break;
                        default: break;
                     }
                     break;
      
      
                  default:
                     break;
               }
      
               $documento_comprador = 80;
               $iden_comprador = $cuit;
               $importes_no = 0;
               $no_categoria = 0;
               $internos = 0;
               $tipo_cambio = sprintf( "%011.6lf", 1 );
               $tipo_cambio = str_replace(".", "", $tipo_cambio);
               $tipo_cambio = "0001000000";

               $alicuotas = 1;
               $otros_tributos = 0;
               $opcode = "0";

               //////////////////
               // Ventas
               //////////////////
               if( $mode == 1 ) {
                  $registro = sprintf("%s%s%05d%020.0lf%020.0lf%02d%020s%-30s%015.0lf%015.0lf%015.0lf%015.0lf%015.0lf%015.0lf%015.0lf%015.0lf%3s%s%1d%s%015.0lf%s",$formatted,$Op,$pv,$numero,$numero,$documento_comprador,$iden_comprador,$nombre,$importe,$importes_no,$no_categoria,$exentas,$nacionales,$iibb,$no_categoria,$internos,$tipo_moneda,$tipo_cambio,$alicuotas,$opcode, $otros_tributos,$formatted);
               }
       
               //////////////////
               // Compras
               //////////////////
               if( $mode == 2 ) {
                  
                  $alicuotas = 0;
                  if( floatval( $row["iva_105"] ) > 0 ) ++$alicuotas;
                  if( floatval( $row["iva_21"] ) > 0 ) ++$alicuotas;
                  if( floatval( $row["iva_27"] ) > 0 ) ++$alicuotas;
                  if( floatval( $row["iva_MT"] ) > 0 ) ++$alicuotas;


                  $importes_no = $otros_tributos + $reten_iva + $nacionales + $iibb + $exentas;
                  $importes_no = 0;
                  $reten_iva = floatval( $row["retenciones_iva"] ) * 100;
                  $nacionales = ( floatval( $row["retenciones_ganancias"] + floatval( $row["retenciones_iva"] )) ) * 100;
                  $nacionales = 0;

            
                  $registro1 = sprintf("%s%s%05d%020.0lf%16s%02d%020s%-30s",$formatted,$Op,$pv,$numero," ",$documento_comprador,$iden_comprador,$nombre );
                  $registro2 = sprintf("%015.0lf%015.0lf%015.0lf%015.0lf%015.0lf%015.0lf%015.0lf%015.0lf",$importe,$importes_no,$exentas,$reten_iva,$nacionales,$iibb,$no_categoria,$internos );
                  $registro3 = sprintf("%3s%s%1d%s%015.0lf%015.0lf%011.0lf%30s%015.0lf",$tipo_moneda,$tipo_cambio,$alicuotas,$opcode,$iva,$otros_tributos,0," ", 0);
                  $registro = $registro1 . $registro2 . $registro3;


//                  printf( "Neto:        %12.0lf\n", $neto  );
/*
                  printf( "No:          %12.0lf\n", $importes_no  );
                  printf( "Exentas:     %12.0lf\n", $exentas  );
                  printf( "Ret.IVA:     %12.0lf\n", $reten_iva  );
                  printf( "IIBB:        %12.0lf\n", $iibb );
                  printf( "Ret.Otros:   %12.0lf\n", $nacionales );
                  printf( "IVA:         %12.0lf\n", $iva );
//                  printf( "Retenciones: %12.0lf\n", $otros_tributos + $reten_iva + $nacionales + $iibb + $exentas );
                  printf( "Bruto:       %12.0lf\n", $importe );
                  */
               }

               // Alicuotas    Compras
               if( $mode == 3 && $ok == true ) {
                  $importes_no = $neto - $iva ;
                  $iva_105 = floatval( $row["iva_105"] );
                  $iva_21 = floatval( $row["iva_21"] );
                  $iva_27 = floatval( $row["iva_27"] );
                  $iva_MT = floatval( $row["iva_MT"] );

//                  printf( "%12.0lf\n", $importes_no );

                  $registro1 = sprintf("%s%05d%020.0lf%02d%020s",$Op,$pv,$numero,$documento_comprador,$iden_comprador );
                  if( $iva_105 > 0 ) {
                     $importes_no = $iva_105 * 100;
                     $registro2 = sprintf("%015.0lf0004%015.0lf",$importes_no,$iva_105 * 10.5);
                     $registro = $registro1 . $registro2;
                     fprintf( $file, "%s\r\n", $registro );
                     printf( "%s\n", $registro );
                  }

                  if( $iva_21 > 0 ) {
                     $importes_no = $iva_21 * 100;
                     $registro2 = sprintf("%015.0lf0005%015.0lf",$importes_no,$iva_21 * 21);
                     $registro = $registro1 . $registro2;
                     fprintf( $file, "%s\r\n", $registro );
                     printf( "%s\n", $registro );
                  }

                  if( $iva_27 > 0 ) {
                     $importes_no = $iva_27 * 100;
                     $registro2 = sprintf("%015.0lf0006%015.0lf",$importes_no,$iva_27 * 27);
                     $registro = $registro1 . $registro2;
                     fprintf( $file, "%s\r\n", $registro );
                     printf( "%s\n", $registro );
                  }

                  if( $iva_MT > 0 ) {
                     $importes_no = $iva_MT * 100;
                     $registro2 = sprintf("%015.0lf0003%015.0lf",$importes_no,$iva_105 * 0);
                     $registro = $registro1 . $registro2;
                     fprintf( $file, "%s\r\n", $registro );
                     printf( "%s\n", $registro );
                  }

                  $ok = false;
               }

               // Alicuotas  Ventas
               if( $mode == 4 && $ok == true ) {
                  $importes_no = $neto;

                  $iva_105 = floatval( $row["iva_105"] );
                  $iva_21 = floatval( $row["iva_21"] );
                  $iva_27 = floatval( $row["iva_27"] );
                  $iva_MT = floatval( $row["iva_MT"] );


                  $registro1 = sprintf("%s%05d%020.0lf",$Op,$pv,$numero );
                  if( $iva_105 > 0 ) {
                     $importes_no = $iva_105 * 100;
                     $registro2 = sprintf("%015.0lf0004%015.0lf",$importes_no,$iva_105 * 10.5);
                     $registro = $registro1 . $registro2;
                     fprintf( $file, "%s\r\n", $registro );
                     printf( "%s\n", $registro );
                  }

                  if( $iva_21 > 0 ) {
                     $importes_no = $iva_21 * 100;
                     $registro2 = sprintf("%015.0lf0005%015.0lf",$importes_no,$iva_21 * 21 );
                     $registro = $registro1 . $registro2;
                     fprintf( $file, "%s\r\n", $registro );
                     printf( "%s\n", $registro );
                  }

                  if( $iva_27 > 0 ) {
                     $importes_no = $iva_27 * 100;
                     $registro2 = sprintf("%015.0lf0006%015.0lf",$importes_no,$iva_27 * 27 );
                     $registro = $registro1 . $registro2;
                     fprintf( $file, "%s\r\n", $registro );
                     printf( "%s\n", $registro );
                  }
                  $ok = false;
               }

      
               if( $ok == true ) {
                  fprintf( $file, "%s\r\n", $registro );
                  printf( "%s\n", $registro );
      //            printf( "Fecha: %s  TC: %s:%s- %s %05d-%020d Importe: %13.2lf Neto Gravado: %13.2lf Otros:%13.2lf, Exentas:%13.2lf, Nacionales:%13.2lf, IIBB:%13.2lf\n", $formatted, $op, $tipo_iva, $Op, intval($pv), $numero, $importe, $neto , $otros, $exentas, $nacionales, $iibb);
               }
            }
         }                              
         fclose( $file );   
      } 
    }
    mysqli_close($conn);

