﻿unit fcc_expediciones;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, ZDataset, Vcl.StdCtrls, wgssSTU_TLB,SignatureForm,
  Vcl.ExtCtrls, ZAbstractTable, ZAbstractRODataset, ZAbstractDataset, Vcl.Grids,
  Vcl.DBGrids, Vcl.DBCtrls, Vcl.Mask, frxClass, frxExportPDF, frxDBSet,
  frxExportBaseDialog;

type
  Tcc_expediciones = class(TForm)
    Panel2: TPanel;
    Panel3: TPanel;
    DBGrid1: TDBGrid;
    dsqexpediciones: TDataSource;
    qcc_expediciones: TZQuery;
    tfirmas: TImage;
    btfirmar: TButton;
    qalbaranes: TZReadOnlyQuery;
    qcontroladores: TZReadOnlyQuery;
    qcontroladoresnombre: TWideStringField;
    qalbaranesidempresa: TIntegerField;
    qalbaranesserie: TWideStringField;
    qalbaranesid: TIntegerField;
    qcontroladoreside: TIntegerField;
    qvariedades: TZReadOnlyQuery;
    qalbaranesfecha: TDateField;
    comboencargado: TDBLookupComboBox;
    dsqvariedades: TDataSource;
    dsqalbaranes: TDataSource;
    dscontroladores: TDataSource;
    Panel14: TPanel;
    btEcancelar: TButton;
    btEmodificar: TButton;
    btEborrar: TButton;
    btEnuevo: TButton;
    btEguardar: TButton;
    bteimprimir: TButton;
    Label3: TLabel;
    Label1: TLabel;
    comboalbaran: TDBLookupComboBox;
    qcc_expedicioneside: TIntegerField;
    qcc_expedicionesserie: TWideStringField;
    qcc_expedicionesfecha: TDateField;
    qcc_expedicionesvariedad: TWideStringField;
    qcc_expedicionesausencia: TWideStringField;
    qcc_expedicioneslimpieza: TWideStringField;
    qcc_expedicionesestado_vehiculo: TWideStringField;
    qcc_expedicionesestado_carga: TWideStringField;
    qcc_expedicionesetiquetado: TWideStringField;
    qcc_expedicionestemp_camion: TIntegerField;
    qcc_expedicionestemp_producto: TIntegerField;
    qcc_expedicionessabotaje: TWideStringField;
    qcc_expedicionesnomresponsable: TWideStringField;
    Label2: TLabel;
    combovariedad: TDBLookupComboBox;
    qvariedadesdescripcion: TWideStringField;
    qvariedadesidempresa: TIntegerField;
    DBCheckBox4: TDBCheckBox;
    DBCheckBox1: TDBCheckBox;
    DBCheckBox2: TDBCheckBox;
    DBCheckBox3: TDBCheckBox;
    DBCheckBox5: TDBCheckBox;
    DBCheckBox6: TDBCheckBox;
    Label4: TLabel;
    combocampanya: TDBLookupComboBox;
    dscampanyas: TDataSource;
    qcampanyas: TZReadOnlyQuery;
    qcampanyasid: TIntegerField;
    qcampanyasidempresa: TIntegerField;
    qcampanyasid_anterior: TIntegerField;
    qcampanyasdescripcion: TWideStringField;
    qcampanyasfechainicio: TDateField;
    qcampanyasfechafin: TDateField;
    qcampanyasult_pesada: TIntegerField;
    qcontroladoresid: TSmallintField;
    qcontroladoresfirma: TBlobField;
    DBText1: TDBText;
    DBText2: TDBText;
    Label5: TLabel;
    Label6: TLabel;
    qcc_expedicionesfirma: TBlobField;
    Label7: TLabel;
    Label8: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    informedb: TfrxDBDataset;
    informes: TfrxReport;
    frxPDFExport1: TfrxPDFExport;
    qaux: TZReadOnlyQuery;
    qcc_expedicionesida: TIntegerField;
    dsqexpedicionesinf: TDataSource;
    qexpedicionesinf: TZQuery;
    qexpedicionesinfide: TIntegerField;
    qexpedicionesinfserie: TWideStringField;
    qexpedicionesinfida: TIntegerField;
    qexpedicionesinffecha: TDateField;
    qexpedicionesinfvariedad: TWideStringField;
    qexpedicionesinfausencia: TWideStringField;
    qexpedicionesinflimpieza: TWideStringField;
    qexpedicionesinfestado_vehiculo: TWideStringField;
    qexpedicionesinfestado_carga: TWideStringField;
    qexpedicionesinfetiquetado: TWideStringField;
    qexpedicionesinftemp_camion: TIntegerField;
    qexpedicionesinftemp_producto: TIntegerField;
    qexpedicionesinfsabotaje: TWideStringField;
    qexpedicionesinfnomresponsable: TWideStringField;
    qexpedicionesinffirma: TBlobField;
    Label9: TLabel;
    DBEdit3: TDBEdit;
    informedbempresa: TfrxDBDataset;
    qcc_expedicionesbrix: TIntegerField;
    qexpedicionesinfbrix: TIntegerField;
    informedbencargado: TfrxDBDataset;
    procedure btfirmarClick(Sender: TObject);
    procedure dsqexpedicionesStateChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure dscampanyasDataChange(Sender: TObject; Field: TField);
    procedure btEnuevoClick(Sender: TObject);
    procedure btEborrarClick(Sender: TObject);
    procedure btEmodificarClick(Sender: TObject);
    procedure btEguardarClick(Sender: TObject);
    procedure btEcancelarClick(Sender: TObject);
    procedure qcc_expedicionesBeforePost(DataSet: TDataSet);
    procedure dsqexpedicionesDataChange(Sender: TObject; Field: TField);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure bteimprimirClick(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure qcc_expedicionesBeforeDelete(DataSet: TDataSet);
  private
    { Private declarations }
    hWndC,hWndC2 : THandle;
  public
    { Public declarations }
  end;

var
  cc_expediciones: Tcc_expediciones;
const

  rojo=$00AAAAFF;
  amarillo=$00B9FFFF;
  verde=$00C7FBAA;
  azul=$00FFFFBB;

function capCreateCaptureWindowA(lpszWindowName: PCHAR; dwStyle, x, y, nWidth, nHeight: integer; ParentWin: HWND; nId: integer): HWND; stdcall external 'AVICAP32.DLL';

implementation

{$R *.dfm}

uses datos;



procedure Tcc_expediciones.btEborrarClick(Sender: TObject);
begin
    qcc_expediciones.Delete;
    qalbaranes.Refresh;
    qalbaranes.First;
    comboalbaran.keyvalue:=qalbaranesid.AsString;

end;

procedure Tcc_expediciones.btEcancelarClick(Sender: TObject);
begin
  qcc_expediciones.Cancel;
end;

procedure Tcc_expediciones.btEguardarClick(Sender: TObject);
begin
  if qcc_expediciones.State in [dsinsert] then
  begin
      qcc_expedicionesserie.Value:=qalbaranesserie.AsString;
      qcc_expedicionesida.Value:=qalbaranesid.Asinteger;
      qcc_expedicioneside.Value:=qalbaranesidempresa.Asinteger;
      qcc_expedicionesfecha.Value:=qalbaranesfecha.Asdatetime;
      qcc_expedicionesvariedad.Value:=qvariedadesdescripcion.Asstring;
      qcc_expedicionesnomresponsable.Value:=qcontroladoresnombre.Asstring;
      qcc_expediciones.Post;
  end else
  begin
      if combovariedad.keyvalue<>null then qcc_expedicionesvariedad.Value:=qvariedadesdescripcion.Asstring;
      if comboencargado.KeyValue<>null then qcc_expedicionesnomresponsable.Value:=qcontroladoresnombre.Asstring;
      if qcontroladoresfirma.AsString='' then
      begin
       qcc_expedicionesfirma.Value:=nil;
      end else
      begin
         btfirmar.Click;
      end;
      qcc_expediciones.Post;
  end;
  qalbaranes.Refresh;
  qalbaranes.First;
  comboalbaran.keyvalue:=qalbaranesid.AsString;

end;

procedure Tcc_expediciones.bteimprimirClick(Sender: TObject);
begin
   qexpedicionesinf.SQL.Clear;
   qexpedicionesinf.SQL.Add('select * from ('+qcc_expediciones.sql.text+') as expediciones where firma is not null and temp_camion is not null and temp_producto is not null order by serie,ida');
   qexpedicionesinf.Open;
   informedb.Datasource:=dsqexpedicionesinf;
   informes.Report.Clear;
   informes.LoadFromFile('c:\agrigest\informes\infccexpediciones.fr3');
   informes.Variables.Variables['CAMPANYA']:=QUOTEDSTR(qcampanyasdescripcion.asstring);
   informes.ShowReport();

end;

procedure Tcc_expediciones.btEmodificarClick(Sender: TObject);
begin
   qcc_expediciones.Edit;
end;

procedure Tcc_expediciones.btEnuevoClick(Sender: TObject);
begin
    qcc_expediciones.Append;
    qcc_expedicionesausencia.Value:='C';
    qcc_expedicioneslimpieza.Value:='C';
    qcc_expedicionesestado_vehiculo.Value:='C';
    qcc_expedicionesestado_carga.Value:='C';
    qcc_expedicionesetiquetado.Value:='C';
    qcc_expedicionessabotaje.Value:='NO';

end;

procedure Tcc_expediciones.btfirmarClick(Sender: TObject);
var
  usbDevices : IUsbDevices;
  usbDevice  : IUsbDevice;
  vcontrolador:string;
begin
      vcontrolador:=qcc_expedicionesnomresponsable.asstring;
      if vcontrolador='' then
      begin
        comboencargado.KeyValue:=null;
      end else
      begin
        qaux.close;
        qaux.sql.clear;
        qaux.sql.add('select id from trabajadores where nombre='+''''+vcontrolador+'''');
        qaux.open;
        if qaux.RecordCount>0 then
        begin
          qcontroladores.Locate('nombre',vcontrolador,[locaseinsensitive]);
          comboencargado.KeyValue:=qcontroladoresnombre.AsString;
        end;
      end;
    tfirmas.Picture:=nil;
    usbDevices := CoUsbDevices.Create();
    if (usbDevices.Count > 0) then
    begin
      try
        begin
          usbDevice := usbDevices.Item[0]; //select the first device
          vfirmas := Tvfirmas.Create(nil);
          try
            VFirmas.connect(usbDevice);
            VFirmas.ShowModal();
          finally
            vfirmas.Free;
          end;

        end;
      except
        on e : Exception do
          ShowMessage(e.Message);
      end;
      if qcc_expediciones.State in [dsedit,dsinsert] then
      begin
        qcc_expedicionesfirma.LoadFromFile('c:\agrigest\tmp\firma.bmp');
//        bteguardar.Click;
      end else
      begin
        qcc_expediciones.edit;
        qcc_expedicionesfirma.LoadFromFile('c:\agrigest\tmp\firma.bmp');
//        bteguardar.Click;
      end;
//      tfirmas.Picture.LoadFromFile('c:\agrigest\tmp\firma.bmp');
//      Deletefile('c:\agrigest\informes\firma.bmp');
    end
    else
    begin

      qcontroladoresfirma.SaveToFile('c:\agrigest\tmp\firma.bmp');
      if qcc_expediciones.State in [dsedit,dsinsert] then
      begin
        qcc_expedicionesfirma.LoadFromFile('c:\agrigest\tmp\firma.bmp');
//        bteguardar.Click;
      end else
      begin
        qcc_expediciones.edit;
        qcc_expedicionesfirma.LoadFromFile('c:\agrigest\tmp\firma.bmp');
        qcc_expediciones.Post;//.Click;
      end;
   //   tfirmas.Picture.LoadFromFile('c:\agrigest\tmp\firma.bmp');
  //    Deletefile('c:\agrigest\informes\firma.bmp');

//      ShowMessage('Dispositivo de firmas no conectado');
    end;

end;

procedure Tcc_expediciones.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
     if (qcc_expedicionesfirma.AsString='') or (qcc_expedicionestemp_camion.AsString='') or (qcc_expedicionestemp_producto.AsString='') then
    begin
        DBGrid1.Canvas.brush.Color := rojo;
    end else
        DBGrid1.Canvas.brush.Color := verde;

    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure Tcc_expediciones.dscampanyasDataChange(Sender: TObject;
  Field: TField);
var anyo,mes,dia:word;
    vanyo,vmes,vdia,vmessig,vfechainicio,vfechafin,variedades:string;
begin
    decodedate(qcampanyasfechainicio.AsDateTime,anyo,mes,dia);
    vanyo:=floattostr(anyo);
    vmes:=floattostr(mes);
    vdia:=floattostr(dia);
    vfechainicio:=''''+vanyo+'-'+vmes+'-'+vdia+'''';
    decodedate(qcampanyasfechafin.AsDateTime,anyo,mes,dia);
    vanyo:=floattostr(anyo);
    vmes:=floattostr(mes);
    vdia:=floattostr(dia);
    vfechafin:=''''+vanyo+'-'+vmes+'-'+vdia+'''';
    qalbaranes.SQL.Clear;
    qalbaranes.SQL.Add('select idempresa,serie,id,fecha from albaranes where fecha>='+vfechainicio+' and fecha<='+vfechafin+' and (idempresa,serie,id) not in (select ide,serie,ida  from cc_expediciones) order by serie,id desc');
    qalbaranes.Open;
    qcc_expediciones.SQL.Clear;
    qcc_expediciones.SQL.Add('select * from cc_expediciones where fecha>='+vfechainicio+' and fecha<='+vfechafin+' order by serie,ida');
    qcc_expediciones.Open;
    if qalbaranes.RecordCount>0 then
    begin
      while not qalbaranes.Eof do
      begin
         variedades:='';
         qcc_expediciones.Append;
         qcc_expedicioneside.value:=qalbaranesidempresa.AsInteger;
         qcc_expedicionesserie.value:=qalbaranesserie.Asstring;
         qcc_expedicionesida.value:=qalbaranesid.Asinteger;
         qcc_expedicionesfecha.value:=qalbaranesfecha.Asdatetime;
         qaux.close;
         qaux.ParamByName('ALBARAN').AsString:=qalbaranesserie.AsString+'/'+qalbaranesid.AsString;
         qaux.Prepare;
         qaux.Open;
         while not qaux.Eof do
         begin
            variedades:=variedades+qaux.Fields[0].AsString+'/';
            qaux.Next;
         end;
         qcc_expedicionesvariedad.value:=variedades;
         qcc_expedicionesausencia.value:='C';
         qcc_expedicioneslimpieza.value:='C';
         qcc_expedicionesestado_vehiculo.value:='C';
         qcc_expedicionesestado_carga.value:='C';
         qcc_expedicionesetiquetado.value:='C';
         qcc_expedicionessabotaje.value:='NO';
         qcc_expediciones.Post;
         qalbaranes.Next;
      end;
    end;

end;

procedure Tcc_expediciones.dsqexpedicionesDataChange(Sender: TObject;
  Field: TField);
begin
//      Deletefile('c:\agrigest\tmp\firma.bmp');
   if qcc_expediciones.State in [dsbrowse] then
   begin
      if qcc_expedicionesfirma.AsString<>'' then
      begin
        qcc_expedicionesfirma.savetoFile('c:\agrigest\tmp\firma.bmp');
        tfirmas.Picture.LoadFromFile('c:\agrigest\tmp\firma.bmp');
        Deletefile('c:\agrigest\tmp\firma.bmp');
      end else
      begin
        tfirmas.Picture:=nil;
      end;
   end;

end;

procedure Tcc_expediciones.dsqexpedicionesStateChange(Sender: TObject);
var vcontrolador,vvariedad:string;
begin
    if qcc_expediciones.State in [dsedit] then
    begin
      vcontrolador:=qcc_expedicionesnomresponsable.asstring;
      vvariedad:=qcc_expedicionesvariedad.AsString;
      if vcontrolador='' then
      begin
        comboencargado.KeyValue:=null;
      end else
      begin
        qaux.close;
        qaux.sql.clear;
        qaux.sql.add('select id from trabajadores where nombre='+''''+vcontrolador+'''');
        qaux.open;
        if qaux.RecordCount>0 then
        begin
          qcontroladores.Locate('nombre',vcontrolador,[locaseinsensitive]);
          comboencargado.KeyValue:=qcontroladoresnombre.AsString;
        end;
      end;
      if vvariedad='' then
      begin
        combovariedad.KeyValue:=null;
      end else
      begin
        qaux.sql.clear;
        qaux.sql.add('select * from materias_primas where descripcion='+''''+vvariedad+'''');
        qaux.open;
        if qaux.RecordCount>0 then
        begin
          qvariedades.Locate('descripcion',vcontrolador,[locaseinsensitive]);
          combovariedad.KeyValue:=qvariedadesdescripcion.AsString;
        end else
            begin
              combovariedad.KeyValue:=null;
            end;
      end;

    end;
    if qcc_expediciones.State in [dsedit,dsinsert] then
    begin
        btenuevo.Enabled:=false;
        btemodificar.Enabled:=false;
        bteborrar.Enabled:=false;
        btecancelar.Enabled:=true;
        bteguardar.Enabled:=true;
    end else
    begin
        btenuevo.Enabled:=true;
        btemodificar.Enabled:=true;
        bteborrar.Enabled:=true;
        btecancelar.Enabled:=false;
        bteguardar.Enabled:=false;
    end;
end;

procedure Tcc_expediciones.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then Key :=9;
    end;
end;

procedure Tcc_expediciones.FormKeyPress(Sender: TObject; var Key: Char);
var formatos:tformatsettings;
punto:string;
begin
    GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatos);
    punto:=formatos.DecimalSeparator;
    if punto=',' then
    begin
        key:=upcase(key);
        if (key='.') and (activecontrol is tdbedit) then
        begin
           if  (activecontrol as tdbedit).Field.DataType in [ftfloat,ftCurrency,ftbcd,ftfmtbcd] then key:=','
        end;
        if (key='.') and (activecontrol is tedit) then
        begin
           key:=','
        end;

        if (key='.') and (activecontrol is tdbgrid) then
        begin
            key:=',';
        end;
    end;
    if (activecontrol is tdbgrid) then
    begin
        if Key = #13 then Key :=#9;
    end;
    if (activecontrol is tdbcheckbox) then
    begin
        if Key = #13 then Key :=#9;
    end;

    if (key=#13) then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;
end;

procedure Tcc_expediciones.FormShow(Sender: TObject);
begin
    qcampanyas.Open;
    combocampanya.KeyValue:=qcampanyasdescripcion.AsString;
    qalbaranes.Open;
    comboalbaran.keyvalue:=qalbaranesid.AsString;
    qcontroladores.Open;
    comboencargado.KeyValue:=qcontroladoresnombre.AsString;
    qvariedades.Open;
    combovariedad.KeyValue:=qvariedadesdescripcion.AsString;
    qcc_expediciones.open;
end;

procedure Tcc_expediciones.qcc_expedicionesBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('¿Confirma que desea borrar este registro?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Tcc_expediciones.qcc_expedicionesBeforePost(DataSet: TDataSet);
begin
    if qcc_expedicionesserie.asstring='' then
    begin
      qcc_expedicionesserie.Value:=qalbaranesserie.AsString;
      qcc_expedicioneside.Value:=qalbaranesidempresa.Asinteger;
    end;
end;

end.
