unit UImportarSiri;

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.Grids, Vcl.DBGrids, JvExDBGrids, JvDBGrid,
  Vcl.ComCtrls, Vcl.DBCtrls;

type
  TFImportarSIRI = class(TForm)
    ADOConnection1: TADOConnection;
    OpenDialog1: TOpenDialog;
    Timporta: TADOTable;
    BitBtn1: TBitBtn;
    TNodos: TADOTable;
    BitBtn2: TBitBtn;
    TEncabezado: TADOTable;
    JvDBGrid1: TJvDBGrid;
    Edit1: TEdit;
    QElegidos: TADOQuery;
    DSElegidos: TDataSource;
    DTFecha: TDateTimePicker;
    Label1: TLabel;
    QTools: TADOQuery;
    Guardar: TSaveDialog;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    CBAhorro: TCheckBox;
    DBLookupComboBox1: TDBLookupComboBox;
    DSBim: TDataSource;
    TBim: TADOTable;
    BitBtn5: TBitBtn;
    Memo1: TMemo;
    BitBtn6: TBitBtn;
    QSolidarios: TADOQuery;
    BitBtn7: TBitBtn;
    CBExten: TCheckBox;
    DBLookupComboBox2: TDBLookupComboBox;
    TExtem: TADOTable;
    DSExtem: TDataSource;
    BitBtn8: TBitBtn;
    QExtem: TADOQuery;
    CBbajas: TCheckBox;
    CBViv: TCheckBox;
    Button1: TButton;
    CBSoloViv: TCheckBox;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
    procedure BitBtn7Click(Sender: TObject);
    procedure BitBtn8Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FImportarSIRI: TFImportarSIRI;

implementation

{$R *.dfm}

uses UElegirArch, Uconexion, Udm, UCargarCurp;
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 SelMasivo (tabla: TAdoQuery; valor:string);
 begin
  with tabla do
  begin
    Active:= false;
    SQL.clear;
    SQL.add('update Empleados set Elegido = ' + valor);
    ExecSQL;
  end;
 end;

 procedure SelSoli (tabla: TAdoQuery; valor:string);
  var
    cade: string;
 begin
  with FimportarSIRI.QSolidarios do
  begin
   Active:= false;
   sql.Clear;
   cade:= 'Select NumEmp from EmpleadosBim where IdBimestre = ' + vartostr(FimportarSIRI.DBLookupComboBox1.KeyValue);
   //FimportarSIRI.memo1.lines.add(cade);
   sql.Add(cade);
   active:= true;
  end;
  FimportarSIRI.QSolidarios.First;
  while not(FimportarSIRI.QSolidarios.Eof) do
  begin
      with tabla do
      begin
        SQL.clear;
        SQL.add('update Empleados set Elegido = ' + valor + ' where NumEmp = ' + chr(39) + FimportarSIRI.QSolidarios.FieldByName('NumEmp').AsString  + chr(39));
        ExecSQL;
      end;
     FimportarSIRI.QSolidarios.Next;
  end;
 end;

  procedure SelExtem (tabla: TAdoQuery; valor:string);
  var
    cade: string;
 begin
  with FimportarSIRI.QExtem do
  begin
   Active:= false;
   sql.Clear;
   cade:= 'Select NumEmp from EmpleadosBimExt where IdBimestre = ' + vartostr(FimportarSIRI.DBLookupComboBox2.KeyValue);
   //FimportarSIRI.memo1.lines.add(cade);
   sql.Add(cade);
   active:= true;
  end;
  FimportarSIRI.QExtem.First;
  while not(FimportarSIRI.QExtem.Eof) do
  begin
      with tabla do
      begin
        SQL.clear;
        SQL.add('update Empleados set Elegido = ' + valor + ' where NumEmp = ' + chr(39) + FimportarSIRI.QExtem.FieldByName('NumEmp').AsString  + chr(39));
        ExecSQL;
      end;
     FimportarSIRI.QExtem.Next;
  end;
 end;


 function ObtAhorro(tabla: TAdoQuery; numemp:string; bime:integer):Double;
 var
   cad: string;
 begin
  with tabla do
  begin
    Active:= false;
    SQL.clear;
    cad:= 'Select Ahorro_ST from EmpleadosBim where IdBimestre = ' + inttostr(bime) + ' and NumEmp = ' + chr(39) + numemp + chr(39);
    //FImportarSiri.Memo1.Lines.Add(cad);
    SQL.add(cad);
    Active:= true;
    Result:= tabla.FieldByName('Ahorro_ST').AsFloat;
  end;
 end;
  function ObtSueldo(tabla: TAdoQuery; numemp:string; bime:integer):Double;
 var
   cad: string;
 begin
  with tabla do
  begin
    Active:= false;
    SQL.clear;
    cad:= 'Select SueldoBas from EmpleadosBimExt where IdBimestre = ' + inttostr(bime) + ' and NumEmp = ' + chr(39) + numemp + chr(39);
    SQL.add(cad);
    Active:= true;
    Result:= tabla.FieldByName('SueldoBas').AsFloat;
  end;
 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 + canti;  //Número de registros con movimientos de modificaciones
     linea:= linea + '000000000';  // 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 buscar(Query: TAdoQuery; valor: string);
 var
 cad:string;
begin
  Query.Active:= false;
  Query.SQL.Clear;
  cad:= 'SELECT trim([Nombres]) & " " & [Apaterno] &" " & [AMaterno] As NombreCom, Curp, Elegido FROM Empleados ';
  cad := cad + ' Where (NumEmp like ' + chr(39) + '%' + valor +  '%' + chr(39) + ') or  ((trim([Nombres]) & " " & [Apaterno] &" " & [AMaterno]) like ' + chr(39) + '%' + valor +  '%' + chr(39)+ ')';
  //cad:= cad + 'Or Apaterno '
  Query.SQL.Add(Cad);
  //Query.SQL.Add(cons + ' Where Empleado like '+ chr(39) + '%' + valor +  '%' + chr(39));
  //Query.SQL.Add(cad + ' Or Curp like '+ chr(39) + '%' + valor +  '%' + chr(39));
  Query.Active:= true;
end;

function formatear_cantidades(cantidad : real): string;
 var
    formato: string;
 begin
    //canti := floattostr(cantidad);
    formato:= StringReplace(FormatFloat('0.00',cantidad) , '.', '', [rfReplaceAll]);
    formato:= StringReplace(formato , ',', '', [rfReplaceAll]);
    result:= formato;
 end;

procedure TFImportarSIRI.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(FElegirArch.Combobox1.Items,false);
        FElegirArch.ComboBox1.Text := FElegirArch.Combobox1.Items[0];
        FElegirArch.Showmodal;
      end
      else
        messagedlg('El usuario canceló la operación',mtinformation,[mbok],0);
 end;

end;

procedure TFImportarSIRI.BitBtn2Click(Sender: TObject);
var
  periodo, canti, canti2: AnsiString;
  linea, prueb: AnsiString;
  filas: longint;
  Datos : TextFile;
  suma: real;
begin
     QElegidos.Active:= false;
     //QElegidos.SQL.Text:= 'select trim([Nombres]) & " " & [Apaterno] &" " & [AMaterno] As NombreCom, Curp, Elegido From Empleados  Where(Empleados.Elegido)';
     if CBbajas.checked then
       QElegidos.SQL.Text:= 'Select * From Empleados  Where Empleados.FechaBaja is null and (Empleados.Elegido)'
     else
       QElegidos.SQL.Text:= 'Select * From Empleados  Where (Empleados.Elegido)';
     QElegidos.Active:= true;
     linea:='';
     Crear_encabezado_ext(TEncabezado, QElegidos.RecordCount, DTFecha.Date, linea);
     if guardar.Execute then
       begin
          AssignFile(Datos, Guardar.FileName);
          Rewrite(Datos);
          QElegidos.First;
           Screen.Cursor:= CrHourGlass;
           writeln(Datos,linea);
           linea:= '';
            while not(QElegidos.Eof) do
             begin
               linea:= 'M'; //detalle de movimiento
               linea:= linea + AgregarEspacios(trim(QElegidos.FieldByName('Rfc').AsString), 13);//  RFC anterior
               linea:= linea + AgregarEspacios(trim(QElegidos.FieldByName('Curp').AsString), 18);//  CURP anterior
               linea:= linea + AgregarEspacios(trim(QElegidos.FieldByName('NSS').AsString), 11);//  NSS Anterior
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Apaterno').AsAnsiString, 40);//  Apellido Paterno anterior
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Amaterno').AsAnsiString, 40);//  Apellido Materno anterior
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Nombres').AsAnsiString, 40);//  Nombres anteriores
               linea:= linea + AgregarEspacios(trim(QElegidos.FieldByName('Rfc').AsString), 13);//  RFC Modificado
               linea:= linea + AgregarEspacios(trim(QElegidos.FieldByName('Curp').AsString), 18);//  CURP Modificado
               linea:= linea + AgregarEspacios(trim(QElegidos.FieldByName('NSS').AsString), 11);//  NSS Modificado
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Cve_ramo').AsString, 20);//  Clave de Reparto modificada
               linea:= linea + QElegidos.FieldByName('Cve_Pagaduria').AsString;//  Clave de pagaduría modificada
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Apaterno').AsAnsiString, 40);//  Apellido Paterno modificado
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Amaterno').AsAnsiString, 40);//  Apellido Materno modificado
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Nombres').AsAnsiString, 40);//  Nombres modificados
               linea:= linea + formatear_fecha(QElegidos.FieldByName('Fecha_nac').AsDateTime); //Fecha de nacimiento modificada
               linea:= linea + AgregarCar(inttostr(QElegidos.FieldByName('Entidad_Nac').AsInteger), 2, '0');  // Entidad de nacimiento modificada
               linea:= linea + QElegidos.FieldByName('Sexo').AsString;  //Sexo Modificado
               linea:= linea + inttostr(QElegidos.FieldByName('EdoCivil').AsInteger);  //Estado Civil Modificado
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Domicilio').AsAnsiString, 60);//  Domicilio modificado
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Colonia').AsAnsiString, 30);//  Colonia modificada
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('Poblacion').AsAnsiString, 30);//  Población modificada
               linea:= linea + AgregarEspacios(QElegidos.FieldByName('CodPos').AsAnsiString, 5);//  Código Postal modificado
               linea:= linea + AgregarCar(inttostr(QElegidos.FieldByName('Entidad').AsInteger), 2, '0');  // Entidad federativa modificada
               linea:= linea + inttostr(QElegidos.FieldByName('Nombramiento').AsInteger);  //Nombramiento Modificado
               linea:= linea + trim(QElegidos.FieldByName('NumEmp').AsString);//  Número de Empleado modificado
               linea:= linea + AgregarEspacios(TEncabezado.FieldByName('Cve_entidad').AsString, 3);//  Clave Entidad Receptora modificada
               linea:= linea + inttostr(QElegidos.FieldByName('RegAfore').AsInteger);  //Trabajador registrado en Afore Modificado
               linea:= linea + formatear_fecha(QElegidos.FieldByName('fechaIngreso').AsDateTime); //Fecha de Ingreso modificada
               linea:= linea + formatear_fecha(QElegidos.FieldByName('fechaCot').AsDateTime); //Fecha de cotización modificada
               linea:= linea + formatear_fecha(QElegidos.FieldByName('fechaIngreso').AsDateTime); //Fecha de modificacion de sueldo
               linea:= linea + inttostr(QElegidos.FieldByName('CredFov').AsInteger);  //Crédito Fovissste modificado
               linea:= linea + QElegidos.FieldByName('DiasCot').AsString;  //Dias cotizados en el bimestre Modificado
               linea:= linea + QElegidos.FieldByName('DiasInc').AsString;  //Dias de incapacidad en el bimestre Modificado
               linea:= linea + QElegidos.FieldByName('DiasAus').AsString;  //Dias de Ausentismo en el bimestre Modificado
                  //si estamos tomando un extemporaneo
               if CbExten.Checked then
               canti:= AgregarCar(formatear_cantidades(ObtSueldo(Qtools,QElegidos.FieldByName('NumEmp').AsString,DBLookupComboBox2.KeyValue)),7,'0')
               else
               canti:= AgregarCar(formatear_cantidades(QElegidos.FieldByName('SueldoBasCot').AsFloat),7,'0'); //formateo Sueldo Básico
               canti2:= canti;
              if CBSoloViv.Checked then
                canti:= '0000000';
               linea:= linea +  canti; //Sueldo Básico modificado
               linea:= linea +  canti; //Sueldo Básico de cotizacion al RCV modificado
               if CBviv.Checked then
                linea:= linea +  '0000000'
                else
               linea:= linea +  canti2; //Sueldo Básico de vivienda modificado
               linea:= linea + inttostr(QElegidos.FieldByName('AhorroSol').AsInteger);  //Ahorro solidario Modificado
               if CBAhorro.Checked then
                 //Si es de ahorro solidario
                 linea:= linea + AgregarCar(formatear_cantidades(ObtAhorro(Qtools,QElegidos.FieldByName('NumEmp').AsString,DBLookupComboBox1.KeyValue)),7,'0')
               else
               linea:= linea + AgregarCar(formatear_cantidades(QElegidos.FieldByName('ImpAhoSol').AsFloat),7,'0'); //Importe Ahorro Solidario Modificado
               linea:= linea + AgregarEspacios('',25); //Uso futuro
               linea:= linea + AgregarEspacios('',17); //Filler
               linea:= linea + AgregarEspacios('',11); //motivos de rechazo
               writeln(Datos, linea);
               linea:= '';
               memo1.Lines.Add(QElegidos.FieldByName('Curp').AsString);
               QElegidos.Next;
             end;
       end;
     CloseFile(Datos);
     messagedlg('Conversión terminada',mtinformation,[mbok],0);
     Screen.Cursor:= CrDefault;
     QElegidos.Active:= false;
     QElegidos.SQL.Text:= 'select trim([Nombres]) & " " & [Apaterno] &" " & [AMaterno] As NombreCom, Curp, Elegido From Empleados  Where(Empleados.Elegido)';
     QElegidos.Active:= true;
end;

procedure TFImportarSIRI.BitBtn3Click(Sender: TObject);
begin
SelMasivo(QTools, '1');
Qelegidos.Active:=false;
Qelegidos.Active:=true;
end;

procedure TFImportarSIRI.BitBtn4Click(Sender: TObject);
begin
SelMasivo(QTools, '0');
Qelegidos.Active:=false;
Qelegidos.Active:=true;
end;

procedure TFImportarSIRI.BitBtn6Click(Sender: TObject);
begin
SelSoli (QTools, '1');
Qelegidos.Active:=false;
Qelegidos.Active:=true;
showmessage('hecho');
end;

procedure TFImportarSIRI.BitBtn7Click(Sender: TObject);
begin
 Fcargarcurp.ShowModal
end;

procedure TFImportarSIRI.BitBtn8Click(Sender: TObject);
begin
 SelExtem (QTools, '1');
Qelegidos.Active:=false;
Qelegidos.Active:=true;
showmessage('hecho');
end;

procedure TFImportarSIRI.Button1Click(Sender: TObject);
var
 con: integer;
begin
     QElegidos.Active:= false;
     //QElegidos.SQL.Text:= 'select trim([Nombres]) & " " & [Apaterno] &" " & [AMaterno] As NombreCom, Curp, Elegido From Empleados  Where(Empleados.Elegido)';
     QElegidos.SQL.Text:= 'Select * From Empleados  Where (Empleados.Elegido)';
     QElegidos.Active:= true;
     QElegidos.First;
     con:= 0;
     while not(QElegidos.Eof) do
      begin
      //if varIsNull(QElegidos.FieldByName('MotivoBaja').AsInteger)  then
       memo1.Lines.Add(QElegidos.FieldByName('Curp').AsString);
       QElegidos.Next;
       inc(con);
      end;
     memo1.Lines.Add(inttostr(con));
end;

procedure TFImportarSIRI.Edit1Change(Sender: TObject);
begin
  buscar(QElegidos, edit1.Text);
end;

procedure TFImportarSIRI.FormCreate(Sender: TObject);
begin
DTFecha.Date:= date;
end;

end.
