unit UBimestre;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Data.DB,
  Data.Win.ADODB, Vcl.Grids, Vcl.DBGrids, Vcl.Buttons, Vcl.Mask, Vcl.DBCtrls,
  JvExStdCtrls, JvCombobox, JvDBCombobox, System.DateUtils, system.StrUtils,
  Vcl.ComCtrls;

type
  TFBimestre = class(TForm)
    PBim: TPanel;
    Label1: TLabel;
    JvDBComboBox1: TJvDBComboBox;
    Label2: TLabel;
    JvDBComboBox2: TJvDBComboBox;
    Label3: TLabel;
    DBEdit1: TDBEdit;
    BtnNuevo: TBitBtn;
    BtnEditar: TBitBtn;
    BtnGuardar: TBitBtn;
    BtnCancelar: TBitBtn;
    PNodos: TPanel;
    Panel1: TPanel;
    DBGrid1: TDBGrid;
    BitBtn1: TBitBtn;
    TBimestres: TADOTable;
    DSBimestres: TDataSource;
    DSNodos: TDataSource;
    BtnEliminar: TBitBtn;
    QEmpleados: TADOQuery;
    QConsultas: TADOQuery;
    btnBuscar: TBitBtn;
    QTools: TADOQuery;
    OpenDialog1: TOpenDialog;
    Timporta: TADOTable;
    BitBtn4: TBitBtn;
    ADOConnection1: TADOConnection;
    TEncabezado: TADOTable;
    DSNodosBim: TDataSource;
    TNodosBim: TADOTable;
    TNodos: TADOTable;
    Guardar: TSaveDialog;
    DSQTools: TDataSource;
    FechaEm: TDateTimePicker;
    Label4: TLabel;
    BitBtn2: TBitBtn;
    BitBtn5: TBitBtn;
    procedure btnPrimeroClick(Sender: TObject);
    procedure DSBimestresStateChange(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure btnBuscarClick(Sender: TObject);
    procedure BtnEditarClick(Sender: TObject);
    procedure BtnEliminarClick(Sender: TObject);
    procedure BtnGuardarClick(Sender: TObject);
    procedure BtnCancelarClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure TBimestresAfterScroll(DataSet: TDataSet);
    procedure BitBtn5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FBimestre: TFBimestre;
  Estado: byte;
  activado: boolean;

implementation

{$R *.dfm}

uses Udm, Uconexion, UBuscarBim, UElegirHoja;

Function ObtenerSumatoria(Qvar: TAdoQuery; IdBim: integer): real;
 var
   parEmp: string;
 begin
   parEmp:= 'Select sum(Ahorro_ST) As Resul from EmpleadosBim where IdBimestre = '+inttostr(IdBim);
   with qvar do
    begin
      active:= false;
      sql.Clear;
      sql.Add(parEmp);
      active:= true
    end;
   result:= qvar.FieldByName('Resul').AsFloat;
 end;

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

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

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 formatear_cantidades(cantidad : real): string;
 var
   canti, formato: string;
 begin
    //canti := floattostr(cantidad);
    formato:= StringReplace(FormatFloat('0.00',cantidad) , '.', '', [rfReplaceAll]);
    formato:= StringReplace(formato , ',', '', [rfReplaceAll]);
    result:= formato;
 end;

 Procedure Crear_encabezado(cabeza: TAdoTable; numreg:integer; fecha: Tdate; var enca: string);
    var
      linea, canti: string;
      sumato: real;
   begin
     canti:= '';
     linea:= '01098206' + 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('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').AsString, 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, 6, '0');
     linea:= linea + canti;  // Número de registro
     linea:= linea + '000000000000'; //Aportaciones Ahorro Largo Plazo
     ObtenerSumatoria(FBimestre.QConsultas, FBimestre.TBimestres.FieldByName('IdBimestre').ASInteger);
     sumato:= ObtenerSumatoria(FBimestre.QConsultas, FBimestre.TBimestres.FieldByName('IdBimestre').ASInteger);
     linea := linea + AgregarCar(formatear_cantidades(sumato), 12, '0');  //Suma aportaciones voluntarias
     linea:= linea + '000000000000'; //Aportaciones complementarias
     linea := linea + AgregarCar(formatear_cantidades(sumato), 12, '0');  //Monto total
     linea:= linea + AgregarEspacios('',28); //Filler
     linea:= linea + AgregarCar('',2,'0'); //Resultado
     linea:= linea + AgregarCar('',3,'0'); //Motivo de rechazo 1
     linea:= linea + AgregarCar('',3,'0'); //Motivo de rechazo 2
     linea:= linea + AgregarCar('',3,'0'); //Motivo de rechazo 3
     enca:= linea;
   end;
  { Procedure Crear_encabezado(cabeza: TAdoTable; numreg:integer; fecha: Tdate; var enca: string);
    var
      linea, canti: string;
   begin
     canti:= '';
     linea:= '01098706' + 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('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
     canti:= inttostr(numreg);
     canti := AgregarCar(canti, 9, '0');
     linea:= linea + canti;  // Número de registro
     linea:= linea + '000000000'; //CETES
     linea:= linea + AgregarEspacios('',216); //Uso futuro
     enca:= linea;
   end;  }
   Procedure Crear_encabezado_Ext(cabeza: TAdoTable; numreg:integer; fecha: Tdate; var enca: string; periodo:string);
    var
      linea, canti: string;
      sumato: real;
   begin
     canti:= '';
     linea:= '01098106' + 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').AsString, 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, 6, '0');
     linea:= linea + canti;  // Número de registros de pagos extemporaneos
     linea:= linea + '000000000'; //Número de registros de pagos por Laudos
     linea:= linea + AgregarEspacios('',55); //Filler
     linea:= linea + AgregarCar('',2,'0'); //Resultado
     linea:= linea + AgregarCar('',3,'0'); //Motivo de rechazo 1
     linea:= linea + AgregarCar('',3,'0'); //Motivo de rechazo 2
     linea:= linea + AgregarCar('',3,'0'); //Motivo de rechazo 3
     enca:= linea;
   end;



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

procedure TFBimestre.BitBtn2Click(Sender: TObject);
begin
close
end;

procedure TFBimestre.BitBtn3Click(Sender: TObject);
begin
 {Timporta.Active:=false;
 Timporta.TableName:= Combobox1.Text;
 Timporta.Active:=true; }
 showmessage(AgregarCar(formatear_cantidades(453.21),10,'0'));
end;

procedure TFBimestre.BitBtn4Click(Sender: TObject);
 var
  linea: string;
  filas: longint;
  Datos : TextFile;
  suma: real;
begin
  //Inicio
 if TNodos.RecordCount > 0 then
 begin
 TEncabezado.Active:= false;
 TEncabezado.Active:= true;
 Crear_encabezado(TEncabezado, TNodos.RecordCount, FechaEm.Date, linea);
 //memo1.Lines.Add(linea);
 if guardar.Execute then
 begin
   AssignFile(Datos, Guardar.FileName);
   Rewrite(Datos);
   TNodos.First;
   Screen.Cursor:= CrHourGlass;
   writeln(Datos,linea);
   linea:= '';
   suma:= 0;
   while not(TNodos.Eof) do
   begin
     QTools.Active:= false;
     QTools.SQL.Clear;
     QTools.SQL.Add('Select * from Empleados where NumEmp = ' +   chr(39) + AgregarCar(TNodos.FieldByName('NumEmp').AsString, 10, '0') + chr(39));
     QTools.Active:= true;
     //memo1.Lines.Add('Select * from Empleados where NumEmp = ' +   chr(39) + AgregarCar(TNodos.FieldByName('NumEmp').AsString, 10, '0') + chr(39));
     linea:= '020982'; //Detalle del trabajador - Recaudación - Operación
     linea:= linea + AgregarEspacios(QTools.FieldByName('Rfc').AsString, 13);//  RFC
     linea:= linea + AgregarEspacios(QTools.FieldByName('Curp').AsString, 18);//  CURP
     linea:= linea + AgregarEspacios(QTools.FieldByName('NSS').AsString, 11);//  NSS
     linea:= linea + AgregarEspacios(QTools.FieldByName('Apaterno').AsString, 40);//  Apellido Paterno
     linea:= linea + AgregarEspacios(QTools.FieldByName('Amaterno').AsString, 40);//  Apellido Materno
     linea:= linea + AgregarEspacios(QTools.FieldByName('Nombres').AsString, 40);//  Nombres
     linea:= linea + AgregarEspacios(QTools.FieldByName('Cve_ramo').AsString, 20);//  Clave de Reparto
     //linea:= linea + AgregarEspacios(QTools.FieldByName('Cve_entidad').AsString, 3);//  Clave Entidad Receptora
     linea:= linea + '000000000000'; //Aportaciones de Ahorro a largo plazo
     linea:= linea + AgregarCar(formatear_cantidades(TNodos.FieldByName('Ahorro_ST').AsFloat),12,'0'); //Aportaciones Voluntarias
     linea:= linea + '000000000000'; //Aportaciones Complementarias
     linea:= linea + AgregarEspacios('',185); //Filler
     linea:= linea + AgregarCar('',2,'0'); //Resultado
     linea:= linea + AgregarCar('',3,'0'); //Motivo de rechazo 1
     linea:= linea + AgregarCar('',3,'0'); //Motivo de rechazo 2
     linea:= linea + AgregarCar('',3,'0'); //Motivo de rechazo 3
     writeln(Datos,linea);
     linea:= '';
     TNodos.Next;
   end;
   CloseFile(Datos);
   messagedlg('Conversión terminada',mtinformation,[mbok],0);
   Screen.Cursor:= CrDefault;
 end;
 end
 else
   MessageDLG('No existen registros para exportar', mterror,[mbok],0);

end;

procedure TFBimestre.BitBtn5Click(Sender: TObject);
begin
 if messageDLG('Esto eliminará todas las aportaciones, ¿está seguro (a)?',mtconfirmation,[mbyes, mbno],0)= mryes then
   begin
     with Qtools do
      begin
        active:= false;
        sql.Clear;
        sql.Add('Delete from EmpleadosBim where IdBimestre = ' + inttostr(TBimestres.FieldByName('IdBimestre').AsInteger));
        execSQL;
        TNodos.Active:= false;
        TNodos.Active:= true;
      end;
   end;
end;

procedure TFBimestre.btnBuscarClick(Sender: TObject);
 var
   anioactual, mesactual: integer;
begin
  anioactual := YearOf(Now);
  mesactual := MonthOf(Now);
  //FBuscarbim.CBAnio.Text:= inttostr(anioactual);
  FBuscarbim.QBimestres.Active:=false;
  FBuscarbim.QBimestres.Active:=true;
  if (FBuscarbim.ShowModal = mrok) and (FBuscarbim.QBimestres.RecordCount > 0) then
  begin
    TBimestres.Locate('IdBimestre',FBuscarbim.QBimestres.FieldByName('IdBimestre').AsInteger,[]);
    //Qnodos.Active:= false;
  end;

end;

procedure TFBimestre.BtnCancelarClick(Sender: TObject);
begin
 TBimestres.Cancel
end;

procedure TFBimestre.BtnEditarClick(Sender: TObject);
begin
 Tbimestres.Edit;
end;

procedure TFBimestre.BtnEliminarClick(Sender: TObject);
begin
 TBimestres.Delete;
end;

procedure TFBimestre.BtnGuardarClick(Sender: TObject);
begin
 Tbimestres.post
end;

procedure TFBimestre.btnPrimeroClick(Sender: TObject);
begin
 //DBControles((Sender As Tbitbtn).Tag, TBimestres, btnPrimero, btnAtras, btnSiguiente, btnUltimo, btnNuevo, btnEditar, btnEliminar, btnGuardar, btnCancelar);
 TBimestres.Insert;
end;


procedure TFBimestre.DSBimestresStateChange(Sender: TObject);
begin
  if TBimestres.state in [dsinsert, dsedit] then
    begin
      BtnGuardar.Enabled:= true;
      BtnCancelar.Enabled:= true;
      BtnEditar.Enabled:= false;
      BtnNuevo.Enabled:= false;
      btnBuscar.Enabled:= false;
    end
    else
     begin
      BtnGuardar.Enabled:= false;
      BtnCancelar.Enabled:= false;
      BtnEditar.Enabled:= true;
      BtnNuevo.Enabled:= true;
      btnBuscar.Enabled:= true;
     end;
end;

procedure TFBimestre.FormCreate(Sender: TObject);
begin
 FechaEm.Date:= date;
end;

procedure TFBimestre.TBimestresAfterScroll(DataSet: TDataSet);
begin
  TNodos.Filtered:= false;
  TNodos.Filter:= 'IdBimestre = ' + QuotedStr(inttostr(TBimestres.FieldByname('IdBimestre').ASinteger));
  TNodos.Filtered:= true;
  TNodos.Active:= false;
  TNodos.Active:= true;
end;

end.
