unit FLISTADOENTRADAS;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, Buttons,dateutils, Grids, ExtCtrls;

type
  TLISTADOENTRADAS = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Label2: TLabel;
    MaskEdit1: TMaskEdit;
    Label3: TLabel;
    MaskEdit2: TMaskEdit;
    Label1: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label9: TLabel;
    Edit3: TEdit;
    Label10: TLabel;
    Label11: TLabel;
    Edit4: TEdit;
    Label12: TLabel;
    Edit5: TEdit;
    SGORDEN1: TStringGrid;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    ORDEN: TLabel;
    GroupBox1: TGroupBox;
    DTOTAL: TRadioButton;
    DDETALLE: TRadioButton;
    Label4: TLabel;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    procedure MaskEdit1Exit(Sender: TObject);
    procedure MaskEdit2Exit(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit1DblClick(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit3DblClick(Sender: TObject);
    procedure Edit4DblClick(Sender: TObject);
    procedure Edit3KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit4KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit5DblClick(Sender: TObject);
    procedure Edit5KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit1Exit(Sender: TObject);
    procedure Edit2Exit(Sender: TObject);
    procedure Edit5Exit(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
  private
    { Private declarations }
    procedure PROVEEDOR;
    FUNCTION ARTICULO:STRING;
    FUNCTION FPAGO:STRING;
    PROCEDURE EMPRESA;
    FUNCTION ESENTERO(AUX:STRING):BOOLEAN;
    FUNCTION ESFLOAT(AUX:STRING):BOOLEAN;
    FUNCTION OBTENERCADENA(AUX,AUX2:STRING):STRING;
    FUNCTION OBTENERORDEN(AUX,AUX2,AUX3:STRING):STRING;
  public
    { Public declarations }
    FECHAINICIO,FECHAFINAL: tdatetime;
    FECHAINICIOA,FECHAFINALA: tdatetime;
    CENTRADAS:STRING;
    GENTRADAS:STRING;
    OENTRADAS:STRING;    
    sfechainicio,sfechafinal:string;
    sfechainicioA,sfechafinalA:string;
    cadena :string;
    IMPRESO,COBRADO,TItodo,TCTODO,TOTAL,DETALLE :boolean;
  end;

var
  LISTADOENTRADAS: TLISTADOENTRADAS;

implementation

uses UDMGS, FDLGPROVEEDORAUX, FDLGTICKETAUX, FDLGEMPRESAAUX, menu,
  FDLGARTICULOSaux, DLGFORMAPAGOAUX;

{$R *.dfm}

procedure TLISTADOENTRADAS.BitBtn1Click(Sender: TObject);
VAR EMPRESA,ANYO,PROVEEDOR,ORDEN,GRUPO,CAMPOS:STRING;
    I:SMALLINT;
begin


    if DTOTAL.Checked then
    begin
       TOTAL := true;
       DETALLE := false;
    end;
    if DDETALLE.Checked then
    begin
       TOTAL := false;
       DETALLE := TRUE;
    end;


    CENTRADAS := '';
    GENTRADAS := '';
    OENTRADAS := OBTENERORDEN ('LE','ID_ENTRADA','EN');
    IF DETALLE THEN

    // PROBANDO EL DETALLE PRIMERO

       CENTRADAS := ' SELECT LE.IVA,LE.ID_ARTICULO,LE.CANTIDAD,LE.PRECIO,LE.IMPORTE,EN.ID_ENTRADA AS NUMERO,EN.ANYO,EN.ID_EMPRESA, ' +
//       ' ((LE.PRECIO  * CANTIDAD) - IMPORTE) + (LE.IMPORTE *  (EN.TOTALDESCUENTO / (SELECT TOTAL FROM ESCERO (EN.BASE_ENTRADA,EN.TOTALDESCUENTO)))) AS TOTALDESCUENTO, '+
       ' ((LE.PRECIO - LE.PRECIO_REAL) * CANTIDAD)+ (LE.IMPORTE *  (EN.TOTALDESCUENTO / (ESCERO (EN.BASE_ENTRADA,EN.TOTALDESCUENTO)))) AS TOTALDESCUENTO, '+

       // CALCULA EL IMPORTE DE LA LINEA

//       ' ((LE.PRECIO* CANTIDAD)-((LE.PRECIO * CANTIDAD) - IMPORTE + (LE.IMPORTE *  (EN.TOTALDESCUENTO / (SELECT TOTAL FROM ESCERO (EN.BASE_ENTRADA,EN.TOTALDESCUENTO)))))) AS IMPORTEDES,'+
       ' ((LE.PRECIO* CANTIDAD)-(((LE.PRECIO - LE.PRECIO_REAL) * CANTIDAD) + (LE.IMPORTE *  (EN.TOTALDESCUENTO / (ESCERO (EN.BASE_ENTRADA,EN.TOTALDESCUENTO)))))) AS IMPORTEDES,'+
       ' LE.DESCRIPCION,PRECIO_REAL FROM LIN_E_PROVEEDOR_ACREEDOR LE,E_PROVEEDOR_ACREEDOR EN '+
       ' WHERE EN.ID_ENTRADA=LE.ID_ENTRADA AND EN.ID_EMPRESA=LE.ID_EMPRESA AND EN.ANYO=LE.ANYO AND '+OBTENERCADENA('LE','EN') ;

    IF TOTAL THEN
    BEGIN

       CENTRADAS := ' SELECT LE.IVA,LE.ID_ARTICULO,SUM(LE.CANTIDAD) AS CANTIDAD,LE.PRECIO,SUM(LE.IMPORTE) AS IMPORTE,EN.ANYO,EN.ID_EMPRESA, ' +
       ' SUM(((LE.PRECIO * CANTIDAD) - IMPORTE) + (LE.IMPORTE *  (EN.TOTALDESCUENTO / (ESCERO (EN.BASE_ENTRADA,EN.TOTALDESCUENTO))))) AS TOTALDESCUENTO, '+

       // CALCULA EL IMPORTE DE LA LINEA

       ' (SUM((LE.PRECIO* CANTIDAD))-SUM(((LE.PRECIO * CANTIDAD) - IMPORTE) + (LE.IMPORTE *  (EN.TOTALDESCUENTO /(ESCERO (EN.BASE_ENTRADA,EN.TOTALDESCUENTO)))))) AS IMPORTEDES,'+
       ' LE.DESCRIPCION,PRECIO_REAL FROM LIN_E_PROVEEDOR_ACREEDOR LE,E_PROVEEDOR_ACREEDOR EN '+
       ' WHERE EN.ID_ENTRADA=LE.ID_ENTRADA AND EN.ID_EMPRESA=LE.ID_EMPRESA AND EN.ANYO=LE.ANYO AND '+OBTENERCADENA('LE','EN');

       GENTRADAS := ' GROUP BY LE.IVA,EN.ID_EMPRESA,EN.ANYO,LE.ID_ARTICULO,LE.PRECIO,PRECIO_REAL,DESCRIPCION ';
       OENTRADAS :=' ORDER BY ID_ARTICULO';
    END;

    modalresult:=mrok;

end;

procedure TLISTADOENTRADAS.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if ActiveControl=nil then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;

    if (key = #13) and not (activecontrol is tbutton) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
end;

procedure TLISTADOENTRADAS.FormShow(Sender: TObject);
begin
 MASKEDIT1.TEXT := '';
 MASKEDIT2.TEXT := '';
 EDIT1.SETFOCUS;
end;

procedure TLISTADOENTRADAS.MaskEdit1Exit(Sender: TObject);
begin
  if trim(maskedit1.Text) <> '/  /' then
  begin
    try
        fechainicio:=strtodate(maskedit1.text);
    except
        on e:exception do
        begin
            messagedlg('LA FECHA INICIAL NO ES CORRECTA. INTRODUZCA dd/mm/aaaa.',mterror,[mbok],0);
            maskedit1.setfocus;
            abort;
        end;
    end;
    sfechaINiCIO := inttostr(yearof(FECHAINICIO))+'-'+inttostr(monthof(FECHAINICIO))+'-'+inttostr(dayof(FECHAINICIO));
  end;

end;

procedure TLISTADOENTRADAS.MaskEdit2Exit(Sender: TObject);
begin
  if trim(maskedit2.Text) <> '/  /' then
  begin
    try
        fechafinal:=strtodate(maskedit2.text);
    except
        on e:exception do
        begin
            messagedlg('LA FECHA FINAL NO ES CORRECTA. INTRODUZCA dd/mm/aaaa.',mterror,[mbok],0);
            maskedit2.setfocus;
            abort;
        end;
    end;
//        sfechafinal := inttostr(yearof(fechafinal))+'/'+inttostr(monthof(fechafinal))+'/'+inttostr(dayof(fechafinal));
        sfechafinal := inttostr(yearof(fechafinal))+'-'+inttostr(monthof(fechafinal))+'-'+inttostr(dayof(fechafinal));
  end;
end;

procedure TLISTADOENTRADAS.FormCreate(Sender: TObject);
begin
 cadena := '';
 cobrado := false;
 IMPRESO:=FALSE;
 TCtodo := true;
 TITODO := TRUE;
 DETALLE := TRUE;
 TOTAL := FALSE;
 sfechainicio:='';
 sfechafinal:='';
 SGORDEN1.CELLS[0,0] := 'ID_PROVEEDOR';
 SGORDEN1.CELLS[0,1] := 'AŅO';
 SGORDEN1.CELLS[0,2] := 'FECHA';
 SGORDEN1.CELLS[0,3] := 'NUMERO';
// SGORDEN1.CELLS[0,4] := 'ID_ARTICULO';
 EDIT2.TEXT := FMENU.ANYO;
 EDIT5.TEXT := FMENU.ID_EMPRESA;
end;



procedure TLISTADOENTRADAS.Edit1DblClick(Sender: TObject);
begin
    PROVEEDOR;
end;
procedure TLISTADOENTRADAS.PROVEEDOR;
begin
        DMGS.cdsq_proveedor_acreedor.Close;
        dlgPROVEEDORAUX := tdlgPROVEEDORAUX.Create(NIL);
        if dlgPROVEEDORAUX.Showmodal=mrok then
        begin
            EDIT1.TEXT := dlgPROVEEDORaux.codigo;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        dlgPROVEEDORaux.Free;
        dlgPROVEEDORaux := nil;
end;

procedure TLISTADOENTRADAS.Edit1KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
   if key=112 then
      PROVEEDOR;
end;
FUNCTION TLISTADOENTRADAS.ARTICULO:STRING;
BEGIN
        RESULT := '';
        DMGS.CDSQ_ARTICULOSAUX.Close;
        dlgARTICULOSAUX := tdlgARTICULOSAUX.Create(NIL);
        if dlgARTICULOSAUX.Showmodal=mrok then
        begin
            RESULT := DMGS.CDSQ_ARTICULOSAUXID_ARTICULO.ASSTRING;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        dlgARTICULOSaux.Free;
        dlgARTICULOSaux := nil;
END;

procedure TLISTADOENTRADAS.Edit3DblClick(Sender: TObject);
begin
   EDIT3.Text := ARTICULO;
end;

procedure TLISTADOENTRADAS.Edit4DblClick(Sender: TObject);
begin
   EDIT4.TEXT := ARTICULO;
end;

procedure TLISTADOENTRADAS.Edit3KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  IF KEY=112 THEN
    EDIT3.TEXT := ARTICULO;
end;

procedure TLISTADOENTRADAS.Edit4KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  IF KEY=112 THEN
   EDIT4.TEXT := ARTICULO;
end;

procedure TLISTADOENTRADAS.Edit5DblClick(Sender: TObject);
begin
   EMPRESA;
end;

procedure TLISTADOENTRADAS.Edit5KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  IF KEY=112 THEN
     EMPRESA;
end;

PROCEDURE TLISTADOENTRADAS.EMPRESA;
BEGIN
        DLGEMPRESAAUX := TDLGEMPRESAAUX.Create(NIL);
        if DLGEMPRESAAUX.Showmodal=mrok then
        begin
            EDIT5.Text := DLGEMPRESAAUX.codigo;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        DLGEMPRESAAUX.Free;
        DLGEMPRESAAUX := nil;
END;
FUNCTION TLISTADOENTRADAS.ESENTERO(AUX:STRING):BOOLEAN;
VAR IAUX:INTEGER;
BEGIN
 RESULT := TRUE;
 IF TRIM(AUX)<>'' THEN
  TRY
    IAUX := STRTOINT(AUX);
  EXCEPT
    SHOWMESSAGE('EL NUMERO INTRODUCIDO NO ES CORRECTO ');
    RESULT := FALSE;
  END;
END;
FUNCTION TLISTADOENTRADAS.ESFLOAT(AUX:STRING):BOOLEAN;
VAR DAUX:DOUBLE;
BEGIN
 RESULT := TRUE;
 IF TRIM(AUX)<>'' THEN
  TRY
    DAUX := STRTOFLOAT(AUX);
  EXCEPT
    SHOWMESSAGE('EL NUMERO INTRODUCIDO NO ES CORRECTO ');
    RESULT := FALSE;    
  END;
END;


procedure TLISTADOENTRADAS.Edit1Exit(Sender: TObject);
begin
 IF  NOT ESENTERO(EDIT1.Text) THEN
    EDIT1.SetFocus;
end;

procedure TLISTADOENTRADAS.Edit2Exit(Sender: TObject);
begin
 IF  NOT ESENTERO(EDIT2.Text) THEN
    EDIT2.SetFocus;
end;

procedure TLISTADOENTRADAS.Edit5Exit(Sender: TObject);
begin
 IF  NOT ESENTERO(EDIT5.Text) THEN
    EDIT5.SetFocus;
end;

procedure TLISTADOENTRADAS.BitBtn5Click(Sender: TObject);
VAR AUX,AUX1:STRING;
begin
   IF  SGORDEN1.Row <> 0 THEN
   BEGIN
      AUX1 := SGORDEN1.Cells[0,SGORDEN1.Row];
      AUX  := SGORDEN1.Cells[0,SGORDEN1.Row-1];
      SGORDEN1.Cells[0,SGORDEN1.Row]:= AUX;
      SGORDEN1.Cells[0,SGORDEN1.Row-1] := AUX1;
      SGORDEN1.Row := SGORDEN1.ROW - 1;
   END;
end;
procedure TLISTADOENTRADAS.BitBtn6Click(Sender: TObject);
VAR AUX,AUX1:STRING;
begin
   IF SGORDEN1.Row <> (SGORDEN1.RowCount -1) THEN
   BEGIN
      AUX1 := SGORDEN1.Cells[0,SGORDEN1.Row];
      AUX  := SGORDEN1.Cells[0,SGORDEN1.Row+1];
      SGORDEN1.Cells[0,SGORDEN1.Row]:= AUX;
      SGORDEN1.Cells[0,SGORDEN1.Row+1] := AUX1;
      SGORDEN1.Row := SGORDEN1.ROW + 1;
   END;
end;

FUNCTION TLISTADOENTRADAS.OBTENERCADENA(AUX,AUX2:STRING):STRING;
VAR CADENA:STRING;
   AUXB:STRING;
BEGIN
  RESULT := '';
    if trim(maskedit1.Text) <> '/  /' then
  begin
    try
        fechainicio:=strtodate(maskedit1.text);
    except
        on e:exception do
        begin
            messagedlg('LA FECHA INICIAL NO ES CORRECTA. INTRODUZCA dd/mm/aaaa.',mterror,[mbok],0);
            maskedit1.setfocus;
            abort;
        end;
    end;
//    sfechaINiCIO := inttostr(yearof(FECHAINICIO))+'/'+inttostr(monthof(FECHAINICIO))+'/'+inttostr(dayof(FECHAINICIO));
    sfechaINiCIO := inttostr(yearof(FECHAINICIO))+'-'+inttostr(monthof(FECHAINICIO))+'-'+inttostr(dayof(FECHAINICIO));
  end;
  if trim(maskedit2.Text) <> '/  /' then
  begin
    try
        fechafinal:=strtodate(maskedit2.text);
    except
        on e:exception do
        begin
            messagedlg('LA FECHA FINAL NO ES CORRECTA. INTRODUZCA dd/mm/aaaa.',mterror,[mbok],0);
            maskedit2.setfocus;
            abort;
        end;
    end;
//    sfechafinal := inttostr(yearof(fechafinal))+'/'+inttostr(monthof(fechafinal))+'/'+inttostr(dayof(fechafinal));
    sfechafinal := inttostr(yearof(fechafinal))+'-'+inttostr(monthof(fechafinal))+'-'+inttostr(dayof(fechafinal));
 end;

    cadena := '';

    if sfechainicio <> '' then
      cadena := ' '+AUX2+'.fecha >= '''+sfechainicio+''' ';
    if sfechafinal <> '' then
     if cadena <> '' then
      cadena := cadena + ' and '+AUX2+'.fecha <= '''+sfechafinal+''' '
     else
      cadena := ' '+AUX2+'.fecha <= '''+sfechafinal+''' ';

  IF TRIM(EDIT1.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX2+'.ID_PROVEEDOR='+EDIT1.TEXT
       ELSE
          CADENA := AUX2+'.ID_PROVEEDOR='+EDIT1.TEXT  ;

    IF TRIM(EDIT2.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX+'.ANYO='+EDIT2.TEXT
       ELSE
          CADENA := ' '+AUX+'.ANYO='+EDIT2.TEXT;

    IF TRIM(EDIT5.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX+'.ID_EMPRESA='+EDIT5.TEXT
       ELSE
          CADENA := ' '+AUX+'.ID_EMPRESA='+EDIT5.TEXT;


    IF TRIM(EDIT3.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX+'.ID_ARTICULO>='''+EDIT3.TEXT+''' '
       ELSE
          CADENA := ' '+AUX+'.ID_ARTICULO>='''+EDIT3.TEXT+''' ';

    IF TRIM(EDIT4.Text) <> '' THEN
       IF TRIM(CADENA)<>'' THEN
          CADENA := CADENA+' AND '+AUX+'.ID_ARTICULO<='''+EDIT4.TEXT+''' '
       ELSE
          CADENA := ' '+AUX+'.ID_ARTICULO<='''+EDIT4.TEXT+''' ';

    RESULT:=CADENA;
END;
FUNCTION TLISTADOENTRADAS.OBTENERORDEN(AUX,AUX2,AUX3:STRING):STRING;
VAR ORDEN:STRING;
   I:SMALLINT;
BEGIN
    RESULT :='';
    ORDEN :='';
    FOR I:=0 TO 2 DO
    BEGIN
       IF SGORDEN1.CELLS[0,I] ='ID_ARTICULO' THEN
         ORDEN := ORDEN + AUX+'.ID_ARTICULO,'
       ELSE IF SGORDEN1.CELLS[0,I] ='AŅO' THEN
         ORDEN := ORDEN + AUX3+'.ANYO,'
       ELSE
       IF SGORDEN1.CELLS[0,I] ='NUMERO' THEN
         ORDEN := ORDEN + AUX3+'.'+AUX2+','
       ELSE IF (SGORDEN1.CELLS[0,I] ='ID_PROVEEDOR') OR
            (SGORDEN1.CELLS[0,I] ='FECHA')
       THEN
         ORDEN := ORDEN + AUX3+'.'+SGORDEN1.CELLS[0,I]+','
       ELSE
         ORDEN := ORDEN + AUX+'.'+SGORDEN1.CELLS[0,I]+',';
    END;
    IF SGORDEN1.CELLS[0,3] ='ID_ARTICULO' THEN
         ORDEN := ' ORDER BY '+ ORDEN + AUX+'.ID_ARTICULO'
    ELSE IF SGORDEN1.CELLS[0,3] ='AŅO' THEN
       ORDEN:= ' ORDER BY ' + ORDEN + AUX+'.ANYO'
    ELSE IF SGORDEN1.CELLS[0,3] ='NUMERO' THEN
       ORDEN:= ' ORDER BY ' + ORDEN + AUX3+'.'+AUX2
    ELSE IF (SGORDEN1.CELLS[0,3] ='ID_PROVEEDOR') OR
            (SGORDEN1.CELLS[0,3] ='FECHA') THEN
       ORDEN :=' ORDER BY '+ ORDEN + AUX3+'.'+SGORDEN1.CELLS[0,3]
    ELSE
       ORDEN:= ' ORDER BY ' + ORDEN + AUX+'.'+SGORDEN1.CELLS[0,3] ;

    RESULT := ORDEN;

END;





FUNCTION TLISTADOENTRADAS.FPAGO:STRING;
BEGIN
        RESULT := '';
        DMGS.cdsq_formapagoaux.Close;
        fdlgformapagoAUX := tfdlgformapagoAUX.Create(NIL);
        if fdlgformapagoAUX.Showmodal=mrok then
        begin
            RESULT := dmgs.cdsq_formapagoauxid_forma.AsString ;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgformapagoaux.Free;
        fdlgformapagoaux := nil;
END;

end.
