unit falmacendetalle2BIS;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBCtrls, StdCtrls, Buttons, ExtCtrls, Menus, Mask, db, DBTables,
  OleCtrls, Grids, DBGrids,variants,tiposdefinidos, ActnList, ImgList,
  ComCtrls, ToolWin,STRUTILS,FORDEN, ExtDlgs,MATH;

type
  TALMACENDETALLE2BIS = class(TForm)
    DSALMACENDETALLE2: TDataSource;
    ToolBar1: TToolBar;
    bsalir: TToolButton;
    ActionList1: TActionList;
    AAltas: TAction;
    ABajas: TAction;
    AConsultas: TAction;
    AModificaciones: TAction;
    ASalir: TAction;
    ImageList1: TImageList;
    OpenPictureDialog1: TOpenPictureDialog;
    ALISTADO: TAction;
    Label2: TLabel;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    Panel1: TPanel;
    DBGrid1: TDBGrid;
    Label5: TLabel;
    LVarios: TLabel;
    Luno: TLabel;
    Lnum: TLabel;
    Edit3: TEdit;
    bACEPTAR: TButton;
    bCancelar: TButton;
    Label1: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure BSalirClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure PRIMERO1Click(Sender: TObject);
    procedure ANTERIOR1Click(Sender: TObject);
    procedure SIGUIENTE1Click(Sender: TObject);
    procedure BListadoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure DSalmacendetalle2DataChange(Sender: TObject; Field: TField);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure ToolButton3Click(Sender: TObject);

    procedure DBGrid1TitleClick(Column: TColumn);
    procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure bACEPTARClick(Sender: TObject);
    procedure bCancelarClick(Sender: TObject);

  private
    { Private declarations }
    F1ENTRA :BOOLEAN;
    SORDEN:STRING;



  public
    { Public declarations }
    ver: string;
    ARORDEN : TORDEN;
    numero:string;

    Valor :string;
    Cantidad : string;




  end;

var
  ALMACENDETALLE2BIS: TALMACENDETALLE2BIS;

implementation

uses FDLGCLIENTE, RUTINAS, UDMgs, FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FLISTADOS, fprevio,
  FDLGARTICULOSAUX;

{$R *.DFM}



procedure TALMACENDETALLE2BIS.BListadoClick(Sender: TObject);
var bookmark:tbookmark;
begin

    bookmark:= dmgs.cdsq_almacendetalle2.GetBookmark ;
    DSalmacendetalle2.DataSet := NIL; // HACE FALTA
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);
    LISTADOS.FRDB.DataSet := DMGS.CDSQ_almacendetalle2;
 //   Path := ExtractFilePath(ParamStr(0));
    IF NOT FMENU.VISTACLIENTE THEN
        LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\almacendetalle2.frf');
 
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSalmacendetalle2.DataSet := DMGS.CDSQ_almacendetalle2;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    dmgs.cdsq_almacendetalle2.gotobookmark(bookmark);
    dmgs.cdsq_almacendetalle2.FreeBookmark(bookmark);
end;

//*******************************************************************//
//*******************************************************************//

procedure TALMACENDETALLE2BIS.FormCreate(Sender: TObject);
begin

  NUMERO := '';

  try
    dbgrid1.Columns.loadfromfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;

  DMGS.CDSQ_almacendetalle2.CLOSE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS := DMGS.CDSQ_almacendetalle2;
  ARORDEN.nombre  := 'CDSQ_almacendetalle2';
{
  DBCheckBox1.DataSource := Dsalmacendetalle2;
  DBCheckBox1.DataField  := 'imprime';
  DBCheckBox1.Visible    := False;
  DBCheckBox1.Color      := DBGrid1.Color;
  DBCheckBox1.Caption    := '';

  DBGRID1.Fields [0].Visible := false;
}
//explained later in the article
//  DBCheckBox1.ValueChecked := 'Yes a Winner!';
//  DBCheckBox1.ValueUnChecked := 'Not this time.';


End;

procedure TALMACENDETALLE2BIS.FormDestroy(Sender: TObject);
begin

  try
    dbgrid1.Columns.SAVETOfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;
//  lo utilizo fuera del formulario no lo cierro.
//   DMGS.CDSQ_almacendetalle2.close;
   ARORDEN.FREE;
   ARORDEN := NIL;
end;

procedure TALMACENDETALLE2BIS.FormShow(Sender: TObject);
begin
 IF (NUMERO <> '') AND
 (STRTOINT(NUMERO)> 0) THEN
 BEGIN
   IF arorden.sORDEN = '' THEN
      arorden.SORDEN := ' order by fecha_caducidad, cantidad';

   WITH DMGS.CDSQ_almacendetalle2  DO
   BEGIN
     DMGS.valmacendetalle2.id := NUMERO;
     DMGS.valmacendetalle2.ORDEN := ARORDEN.SORDEN;//' ORDER BY ID_ARTICULO';
     dmgs.valmacendetalle2.TIPO  := '1';
     OPEN;
   END;
   dmgs.PCANTIDAD := 0;
   DMGS.CDSQ_ALMACENDETALLE2.First;
   WHILE not dmgs.CDSQ_ALMACENDETALLE2.eof do
   begin
        IF DMGS.CDSQ_ALMACENDETALLE2.RecordCount > 0 THEN
          dmgs.PCANTIDAD := dmgs.PCANTIDAD + DMGS.CDSQ_ALMACENDETALLE2CANTIDAD.AsFloat;
        dmgs.CDSQ_ALMACENDETALLE2.NEXT;
        if dmgs.CDSQ_ALMACENDETALLE2.Eof then
        try // para evitar el error de memoria bloqueada en el server.
            DMGS.CDSQ_ALMACENDETALLE2.GetNextPacket ;
        except
        end;
   end;
  DMGS.CDSQ_ALMACENDETALLE2.First;
  END;

  F1ENTRA := FALSE;

  lnum.Caption := cantidad;
  edit3.Text := cantidad;
  if (strtoint(cantidad)>1) then
  begin
    lvarios.Visible := true;
    luno.visible := false;
  end
  else
  begin
    lvarios.Visible := false;
    luno.visible := true;
  end;
  edit3.SetFocus;


end;


procedure TALMACENDETALLE2BIS.FormKeyPress(Sender: TObject; var Key: Char);
VAR AUXI:INTEGER;
begin
    if (ActiveControl=nil) and (key=#13) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
   if (key = #13) and not (DMGS.CDSQ_almacendetalle2.State in [dsedit,dsinsert]) then
    begin
//       if dbgrid1.Focused then
      IF (ACTIVECONTROL IS TDBGRID) THEN
       begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
        begin
          DMGS.CDSQ_almacendetalle2.next;
          IF DMGS.CDSQ_almacendetalle2.EOF THEN
//             BALTAS.Click;
          dbgrid1.selectedindex := 0;
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
       end
       else
           Perform(WM_NextDLGCtl, 0, 0);
       key:=#0;
    end;

//    if not (activeControl is TDBEdit) then
    IF (( NOT (DMGS.CDSQ_almacendetalle2.State IN [DSEDIT,DSINSERT]))) THEN
    begin
       if ( key <> #27 )
       AND (NOT (DMGS.CDSQ_almacendetalle2.ACTIVE)) then
           key:=#0;
    end;
end;
procedure TALMACENDETALLE2BIS.BSalirClick(Sender: TObject);
begin
    close;
    SELF.ModalResult:=mrOk;
end;
procedure TALMACENDETALLE2BIS.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if key=38 then CambiarControl(self,false);
    if key=40 then CambiarControl(self,true);
end;

procedure TALMACENDETALLE2BIS.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_almacendetalle2.first;
end;

procedure TALMACENDETALLE2BIS.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_almacendetalle2.Prior;
end;

procedure TALMACENDETALLE2BIS.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_almacendetalle2.next;
end;




procedure TALMACENDETALLE2BIS.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if (DMGS.CDSQ_almacendetalle2.State in [dsedit,dsinsert]) AND
      (NOT dmgs.ralmacendetalle2.BUSCANDO) then
       DMGS.CDSQ_almacendetalle2.Post;
    Action := caFree;
end;

procedure TALMACENDETALLE2BIS.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_almacendetalle2.Eof THEN
  try // para evitar el error de memoria bloqueada en el server.
     DMGS.CDSQ_almacendetalle2.GetNextPacket ;
  except
  end;
end;

procedure TALMACENDETALLE2BIS.DSalmacendetalle2DataChange(Sender: TObject;
  Field: TField);
begin
    IF ((DMGS.CDSQ_almacendetalle2.Eof)   AND (NOT (DMGS.CDSQ_almacendetalle2.STATE IN [DSEDIT,DSINSERT]))) THEN
    BEGIN
      try // para evitar el error de memoria bloqueada en el server.
        DMGS.CDSQ_almacendetalle2.GetNextPacket ;
      except
      end;
    END;
end;

procedure TALMACENDETALLE2BIS.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
   const
   azul = TColor($FFFFEE);//C1   0000ff rojo  ; 00ff00 verde feo ; $ff0000 azul
   azul2 = TColor($FFFF0F);
   otro = TColor($2492FF);

   rojo =TColor($8080FF);
   verde =TColor($E0FFBB);




  VAR   Check,REG: Integer;

 begin
       if ((DMGS.CDSQ_almacendetalle2.RecNo   mod 2 )= 0)then
           If (gdFocused in State)
           OR (DBGRID1.SelectedRows.CurrentRowSelected )
           then
           BEGIN
               dbgrid1.canvas.brush.color := OTRO;//clblue
               DBGRID1.Canvas.Font.Color := CLYELLOW;
           END
           else
           BEGIN
               dbgrid1.canvas.brush.color := azul//clPaleGreen;
           END
       ELSE
           If (gdFocused in State)
             then dbgrid1.canvas.brush.color := otro;//clblue
 //            else dbgrid1.canvas.brush.color := azul2;//clPaleGreen;

               dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State) ;

     //*******************************************************

    If (TRIM(Column.Field.Dataset.FieldbyName('IMPRIME').ASSTRING) = '0') then
    begin
    REG:=Column.Field.Dataset.RecNo;
       if ((DMGS.CDSQ_ALMACENDETALLE2.RecordCount   mod 2 )= 0)then
           If (gdFocused in State)
             then dbgrid1.canvas.brush.color := otro//clblue
             else dbgrid1.canvas.brush.color := rojo//clPaleGreen;
       ELSE
           If (gdFocused in State)
             then dbgrid1.canvas.brush.color := otro//clblue
             else dbgrid1.canvas.brush.color := rojo//clPaleGreen;
    end;
    If (TRIM(Column.Field.Dataset.FieldbyName('IMPRIME').ASSTRING) = '1') then
    begin
       if ((DMGS.CDSQ_ALMACENDETALLE2.RecordCount   mod 2 )= 0)then
           If (gdFocused in State)
             then dbgrid1.canvas.brush.color := otro//clblue
             else dbgrid1.canvas.brush.color := verde//clPaleGreen;
       ELSE
           If (gdFocused in State)
             then dbgrid1.canvas.brush.color := otro//clblue
             else dbgrid1.canvas.brush.color := verde//clPaleGreen;
    end;

     dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);


   if Column.FieldName = 'IMPRIME' then
   begin
      DBGrid1.Canvas.FillRect(Rect);
      Check := 0;
      IF ((DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsSTRING='1') OR (DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsSTRING='0')) THEN
              if DMGS.CDSQ_ALMACENDETALLE2['IMPRIME'] then Check := DFCS_CHECKED
         ELSE CHECK:=0;
      DrawFrameControl(DBGrid1.Canvas.Handle, Rect,
         DFC_BUTTON, DFCS_BUTTONCHECK or Check);
   end
   else
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);



 end;



procedure TALMACENDETALLE2BIS.ToolButton3Click(Sender: TObject);
BEGIN
  ARORDEN.ShowModal;
end;


procedure TALMACENDETALLE2BIS.DBGrid1TitleClick(Column: TColumn);
var aux:string;
begin
// CON ESTA FUNCION ORDENO ASCENDENTE Y DESCENDENTE LAS COLUMNAS
// AL PULSAR SOBRE EL TITULO
 aux := uppercase(column.Field.Name);
 IF AUX = 'CDSQ_almacendetalle2FECHA_CADUCIDAD' THEN
    IF dmgs.CDSQ_almacendetalle2.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_almacendetalle2.IndexFIELDNameS := 'FECHA_CADUCIDAD' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_almacendetalle2.IndexName := 'FECHA_CADUCIDAD'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_almacendetalle2NUMEROSERIE' THEN
    IF dmgs.CDSQ_almacendetalle2.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_almacendetalle2.IndexFIELDNameS := 'NUMEROSERIE' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_almacendetalle2.IndexName := 'NUMEROSERIE'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_almacendetalle2CANTIDAD' THEN
    IF dmgs.CDSQ_almacendetalle2.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_almacendetalle2.IndexFIELDNameS := 'CANTIDAD' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_almacendetalle2.IndexName := 'CANTIDAD'; // ORDENA DESCENDENTE

END;


procedure TALMACENDETALLE2BIS.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
VAR
  PT :TGRIDCOORD;
begin
  PT := DBGRID1.MouseCoord(X,Y);
  IF PT.Y=0 THEN
     DBGRID1.Cursor := CRHANDPOINT
  ELSE
     DBGRID1.Cursor := CRDEFAULT;
END;

procedure TALMACENDETALLE2BIS.DBGrid1DblClick(Sender: TObject);
begin
// hacer que se seleccionen todos, y se deseleccionen.
  dmgs.cdsq_almacendetalle2.First;
  while not dmgs.cdsq_almacendetalle2.Eof do
  begin

     dmgs.cdsq_almacendetalle2.Next;
  end;
end;

procedure TALMACENDETALLE2BIS.ToolButton2Click(Sender: TObject);
begin
  modalresult:= mrok;
end;

procedure TALMACENDETALLE2BIS.DBGrid1CellClick(Column: TColumn);
begin
   if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='IMPRIME' then
   BEGIN
     DMGS.RALMACENDETALLE2.PREGUNTA := FALSE;
     DMGS.RALMACENDETALLE2.PREGUNTAEDIT := FALSE;        
     DMGS.CDSQ_ALMACENDETALLE2.Edit;
     IF ((DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsString = '0') OR
        (DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsString = ''))
     THEN
        DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsString := '1'
     ELSE
        DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsString := '0';
     DMGS.CDSQ_ALMACENDETALLE2.Post;

   END;
end;

procedure TALMACENDETALLE2BIS.bACEPTARClick(Sender: TObject);
var aux:integer;
begin
  aux := 0;
  try
     aux :=  strtoint(edit3.Text);
     if ((aux > strtoint(cantidad))  or (aux<0)) then
     begin
        showmessage('La cantidad debe estar entre 0 y '+cantidad);
        edit3.SetFocus;
        edit3.Text := cantidad;
     end
     else
        self.modalresult := mrok;
  except
     showmessage ('El valor no es válido');
     edit3.Text := cantidad;
     edit3.SetFocus;
  end;
  valor := edit3.Text;
end;

procedure TALMACENDETALLE2BIS.bCancelarClick(Sender: TObject);
begin
 self.modalresult := mrcancel;
 valor := '0';
end;

end.




procedure TFDIARIO.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
   const
   clPaleGreen = TColor($CCFFCC);
   clPaleRed =   TColor($CCCCFF);
   otro = TColor($2492FF);
   azul = TColor($FFFFC1);//0000ff rojo  ; 00ff00 verde feo ; $ff0000 azul
   azul2 = TColor($FFFF0F);

   verde2 =TColor($CCFF33);

   rojo2=TColor($4F4FFF);

begin





end;
