unit UBajas;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.StdCtrls, System.DateUtils,
  Vcl.Buttons, system.StrUtils, Vcl.ComCtrls;

type
  TFBajas = class(TForm)
    BitBtn1: TBitBtn;
    OpenDialog1: TOpenDialog;
    ADOConnection1: TADOConnection;
    TNodos: TADOTable;
    Timporta: TADOTable;
    BitBtn2: TBitBtn;
    TEncabezado: TADOTable;
    QTools: TADOQuery;
    DTFecha: TDateTimePicker;
    guardar: TSaveDialog;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FBajas: TFBajas;

implementation

{$R *.dfm}

uses UElegirBaja, Udm;

function formatear_fecha(fecha: Tdatetime): string;
  var
    texto: string;
begin
  texto := datetostr(fecha);
  result:=  AnsiRightStr(texto, 4) + copy(texto, 4, 2) + AnsiLeftStr(texto,2);
end;

function AgregarEspacios(cadena: string; conta: integer): string ;
var
 i, long: byte;
 cadi: string;
begin
 cadi := '';
 long := conta - length(trim(cadena));
 for i := 1 to long do
  begin
   cadi:= cadi + ' ';
  end;
  result:= trim(cadena) + cadi;
end;

Function AgregarCar(cadena: string; conta: integer; carac: string) : string;
var
 i, long: byte;
 cad: string;
begin
 cad := '';
 long := conta - length(trim(cadena));
 for i := 1 to long do
  begin
   cad:= carac + cad;
  end;
  Result:= cad + trim(cadena);
end;

Procedure Crear_encabezado_Ext(cabeza: TAdoTable; numreg:integer; fecha: Tdate; var enca: AnsiString);
    var
      linea, canti: AnsiString;
      sumato: real;
   begin
     canti:= '';
     linea:= '01099606' + cabeza.FieldByName('ClaveEntOr').AsString;  //clave entidad origen
     linea:= linea + cabeza.FieldByName('TipoEntDes').AsString; //Tipo entidad destino
     linea:= linea + cabeza.FieldByName('ClaveEntDes').AsString; //Clave entidad destino
     linea:= linea + formatear_fecha(fecha); //fecha de transmision
     //linea:= linea + cabeza.FieldByName('TipoPago').AsString; //Tipo de Pago
    // linea:= linea + periodo; //Período de pago
     linea:= linea + cabeza.FieldByName('RFCDep').AsString; //RFC Dependencia
     linea:= linea + AgregarEspacios(cabeza.FieldByName('NomDep').AsString, 130); //Nombre Dependencia
     linea:= linea + cabeza.FieldByName('IdcenPagSAR').AsString; //Identificador de centro de pago
     linea:= linea + cabeza.FieldByName('ClaveRamo').AsString; //clave de ramo
     linea:= linea + cabeza.FieldByName('ClavePag').AsString; //clave de pagaduría
     linea:= linea + AgregarEspacios(cabeza.FieldByName('CalleDep').AsAnsiString, 40); //Calle y Número, domicilio dependencia
     linea:= linea + AgregarEspacios(cabeza.FieldByName('ColoniaDep').AsString, 25); //Colonia Dependencia
     linea:= linea + AgregarEspacios(cabeza.FieldByName('MunicipioDep').AsString, 25); //Municipio Dependencia
     linea:= linea + cabeza.FieldByName('CodPos').AsString; //Código postal
     linea:= linea + AgregarEspacios(cabeza.FieldByName('Entidad').AsString, 23); //Entidad Federativa
     linea:= linea + cabeza.FieldByName('TelDep').AsString; //Teléfono Dependencia
     //linea:= linea + formatear_fecha(fecha); //fecha de Aportación
     canti:= inttostr(numreg);
     canti := AgregarCar(canti, 9, '0');
     linea:= linea + '000000000'; // Número de registros con movimientos de alta
     linea:= linea + '000000000';  //Número de registros con movimientos de modificaciones
     linea:= linea + canti;  // Número de registros con movimientos de bajas
     linea:= linea + canti; //total de registros en detalle
     linea:= linea + AgregarEspacios('',264); //Filler
     linea:= linea + AgregarEspacios('',11); //Motivos de rechazo
     enca:= linea;
   end;

procedure TFBajas.BitBtn1Click(Sender: TObject);
var
   Llave, bd: string;
 begin
if OpenDialog1.Execute then
  begin
     bd:= OpenDialog1.FileName;
      if bd <> '' then
      begin
        ADOConnection1.Connected := false;
        Llave:= 'Provider=Microsoft.ACE.OLEDB.12.0; User ID=Admin;Data Source=';
        Llave := Llave + bd + ';Mode=Share Deny None;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"';
        ADOConnection1.ConnectionString:= Llave;
        ADOConnection1.Connected:= true;
        ADOConnection1.GetTableNames(FElegirBaja.Combobox1.Items,false);
        FElegirBaja.Combobox1.Text := FElegirBaja.Combobox1.Items[0];
        FElegirBaja.Showmodal;
      end
      else
        messagedlg('El usuario canceló la operación',mtinformation,[mbok],0);

 end;
  // FElegirBaja.Showmodal;
end;

procedure TFBajas.BitBtn2Click(Sender: TObject);
var
  periodo, canti: AnsiString;
  linea, prueb: AnsiString;
  filas: longint;
  Datos : TextFile;
  suma: real;
begin
  QTools.Active:= false;
  QTools.SQL.Clear;
  QTools.SQL.Add('Select * From siri  Where (siri.Elegido)');
  QTools.Active:= true;
  linea:='';
  Crear_encabezado_ext(TEncabezado, QTools.RecordCount, DTFecha.Date, linea);
    if guardar.Execute then
       begin
          AssignFile(Datos, Guardar.FileName);
          Rewrite(Datos);
          QTools.First;
           Screen.Cursor:= CrHourGlass;
           writeln(Datos,linea);
           linea:= '';
            while not(QTools.Eof) do
            begin
              //showmessage('entre');
               linea:= 'B'; //detalle de movimiento
               linea:= linea + AgregarEspacios(trim(QTools.FieldByName('Rfc').AsString), 13);//  RFC anterior
               linea:= linea + AgregarEspacios(trim(QTools.FieldByName('Curp').AsString), 18);//  CURP anterior
               linea:= linea + AgregarEspacios(trim(QTools.FieldByName('NSS').AsString), 11);//  NSS Anterior
               linea:= linea + AgregarEspacios(QTools.FieldByName('Apaterno').AsAnsiString, 40);//  Apellido Paterno anterior
               linea:= linea + AgregarEspacios(QTools.FieldByName('Amaterno').AsAnsiString, 40);//  Apellido Materno anterior
               linea:= linea + AgregarEspacios(QTools.FieldByName('Nombres').AsAnsiString, 40);//  Nombres anteriores
               linea:= linea + AgregarEspacios(formatear_fecha(QTools.FieldByName('Fecha_nac').AsDateTime), 8);//  Fecha de nacimiento
               linea:= linea + QTools.FieldByName('Sexo').AsString;   //sexo
               linea:= linea + AgregarEspacios(formatear_fecha(QTools.FieldByName('FechaIngreso').AsDateTime), 8);//  Fecha de Ingreso
               linea:= linea + AgregarEspacios(formatear_fecha(QTools.FieldByName('FechaBaja').AsDateTime), 8);//  Fecha de Baja
               linea:= linea + inttostr(QTools.FieldByName('MotivoBaja').AsInteger);   //sexo
               linea:= linea + 'T';
               linea:= linea + AgregarEspacios('',429); //filler
               linea:= linea + AgregarEspacios('',11);  //resto
               writeln(Datos, linea);
               linea:= '';
               QTools.Next
            end;
             CloseFile(Datos);
             messagedlg('Conversión terminada',mtinformation,[mbok],0);
            Screen.Cursor:= CrDefault;
       end;
end;

end.
