unit fpresentaciones;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ZDataset, Data.DB, ZAbstractRODataset,
  ZAbstractDataset, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, Vcl.ExtCtrls,
  Vcl.DBCtrls, Vcl.Mask,ShellApi;

type
  Tpresentaciones = class(TForm)
    Panel2: TPanel;
    Panel5: TPanel;
    Label1: TLabel;
    todosarticulos: TCheckBox;
    tbuscar: TEdit;
    DBGrid1: TDBGrid;
    presentaciones: TZQuery;
    qpresentaciones: TZReadOnlyQuery;
    qpresentacionesid: TIntegerField;
    qpresentacioneside: TIntegerField;
    qpresentacionesdescripcion: TWideStringField;
    qpresentacionesactivo: TIntegerField;
    Panel1: TPanel;
    Panel6: TPanel;
    btfcancelar: TButton;
    btFmodificar: TButton;
    btFborrar: TButton;
    btFnuevo: TButton;
    btFguardar: TButton;
    btfduplicar: TButton;
    Panel4: TPanel;
    Panel8: TPanel;
    Panel9: TPanel;
    Panel10: TPanel;
    Button1: TButton;
    Button2: TButton;
    Panel11: TPanel;
    DBGrid2: TDBGrid;
    DBGrid3: TDBGrid;
    qarticulosfinal: TZReadOnlyQuery;
    dsqarticulosfinal: TDataSource;
    dsqpresentaciones: TDataSource;
    dspresentaciones: TDataSource;
    presentaciones_componentes: TZQuery;
    dspresentacionescomponentes: TDataSource;
    presentaciones_componenteside: TIntegerField;
    presentaciones_componentesidaf: TIntegerField;
    presentaciones_componentesidcfg: TIntegerField;
    presentaciones_componentescantidad: TFloatField;
    Panel3: TPanel;
    Panel12: TPanel;
    Panel13: TPanel;
    DBGrid4: TDBGrid;
    Panel14: TPanel;
    Button3: TButton;
    Button4: TButton;
    Panel15: TPanel;
    DBGrid5: TDBGrid;
    Panel16: TPanel;
    Label7: TLabel;
    tbuscarcomponentes: TEdit;
    qaux: TZReadOnlyQuery;
    Label2: TLabel;
    Label5: TLabel;
    DBEdit4: TDBEdit;
    presentacionesid: TIntegerField;
    presentacioneside: TIntegerField;
    presentacionesdescripcion: TWideStringField;
    presentacionesactivo: TIntegerField;
    DBCheckBox1: TDBCheckBox;
    qenvases: TZReadOnlyQuery;
    dsqenvases: TDataSource;
    qarticulosfinalidempresa: TIntegerField;
    qarticulosfinalid: TIntegerField;
    qarticulosfinalcodigo: TWideStringField;
    qarticulosfinaldescripcion: TWideStringField;
    dspresentaciones_envases: TDataSource;
    presentaciones_envases: TZQuery;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    qenvaseside: TIntegerField;
    qenvasesid: TIntegerField;
    qenvasescodigo: TWideStringField;
    qenvasesdescripcion: TWideStringField;
    DBText1: TDBText;
    presentaciones_componentescodigo: TWideStringField;
    presentaciones_componentesdescripcion: TWideStringField;
    presentaciones_envaseside: TIntegerField;
    presentaciones_envasesidcfg: TIntegerField;
    presentaciones_envasesidenv: TIntegerField;
    presentaciones_envasescodigo: TWideStringField;
    presentaciones_envasesdescripcion: TWideStringField;
    presentaciones_envasesimagen: TBlobField;
    presentaciones_envasesnomimagen: TWideStringField;
    presentaciones_envasesextension: TWideStringField;
    Label3: TLabel;
    DBEdit1: TDBEdit;
    qpresentacionesdescripcion2: TWideStringField;
    presentacionesdescripcion2: TWideStringField;
    Label4: TLabel;
    DBEdit2: TDBEdit;
    Label6: TLabel;
    DBEdit3: TDBEdit;
    presentacionescoste: TFloatField;
    presentacionespeso: TFloatField;
    presentaciones_componentescoste: TFloatField;
    presentaciones_componentespeso: TFloatField;
    Panel7: TPanel;
    Label8: TLabel;
    tbuscarenvases: TEdit;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    qarticulosfinalult_preciocompra: TFloatField;
    qarticulosfinalpeso: TFloatField;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormShow(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure dspresentaciones_envasesDataChange(Sender: TObject;
      Field: TField);
    procedure btddescargarClick(Sender: TObject);
    procedure btdverClick(Sender: TObject);
    procedure imgfotoClick(Sender: TObject);
    procedure dspresentacionesStateChange(Sender: TObject);
    procedure btFnuevoClick(Sender: TObject);
    procedure btFborrarClick(Sender: TObject);
    procedure btFmodificarClick(Sender: TObject);
    procedure btFguardarClick(Sender: TObject);
    procedure tbuscarChange(Sender: TObject);
    procedure qpresentacionesBeforeOpen(DataSet: TDataSet);
    procedure tbuscarcomponentesChange(Sender: TObject);
    procedure qarticulosfinalBeforeOpen(DataSet: TDataSet);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure btfcancelarClick(Sender: TObject);
    procedure dsqpresentacionesDataChange(Sender: TObject; Field: TField);
    procedure Button3Click(Sender: TObject);
    procedure presentaciones_componentesBeforePost(DataSet: TDataSet);
    procedure presentaciones_componentesAfterPost(DataSet: TDataSet);
    procedure DBEdit4Exit(Sender: TObject);
    procedure tbuscarenvasesChange(Sender: TObject);
    procedure qenvasesBeforeOpen(DataSet: TDataSet);
    procedure todosarticulosClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    var   filtro:string;
          vertodos,vertodosmateriales,vertodosenvases,vertodaspresentaciones:integer;
  end;

var
  presentaciones: Tpresentaciones;

implementation

{$R *.dfm}

uses datos;

procedure Tpresentaciones.btddescargarClick(Sender: TObject);
var  archivo:string;
begin
    archivo:=presentaciones_envasesnomimagen.AsString;
    savedialog1.FileName:=archivo;
    savedialog1.Execute();
    archivo:=savedialog1.FileName;
    presentaciones_envasesimagen.SaveToFile(archivo);
end;

procedure Tpresentaciones.btdverClick(Sender: TObject);
var nomarchivo:string;
begin
    nomarchivo:=presentaciones_envasesimagen.asstring;
    ShellExecute(Handle,nil,PChar('c:\agrigest\tmp\'+nomarchivo),'','',SW_SHOWNORMAL);
end;

procedure Tpresentaciones.btFborrarClick(Sender: TObject);
begin
    presentaciones.delete;
    qpresentaciones.Close;
    qpresentaciones.open;

end;

procedure Tpresentaciones.btfcancelarClick(Sender: TObject);
begin
    presentaciones.Cancel;
end;

procedure Tpresentaciones.btFguardarClick(Sender: TObject);
var id:integer;
begin
    filtro:='%'+tbuscar.Text+'%';
    vertodos:=0;
    id:=presentacionesid.AsInteger;
    presentacioneside.value:=dm.tempresaid.AsInteger;
    presentaciones.Post;
    presentaciones.Close;
    presentaciones.MasterSource:=dsqpresentaciones;
    presentaciones.Open;
    qpresentaciones.Close;
    qpresentaciones.Open;
    qpresentaciones.Locate('id',id,[locaseinsensitive,lopartialkey]);
end;

procedure Tpresentaciones.btFmodificarClick(Sender: TObject);
begin
    presentaciones.Edit;
    dbedit4.SetFocus;
end;

procedure Tpresentaciones.btFnuevoClick(Sender: TObject);
begin
    presentaciones.MasterSource:=nil;
    presentaciones.Append;
    dbedit4.SetFocus;
end;

procedure Tpresentaciones.Button1Click(Sender: TObject);
begin
    presentaciones_componentes.Delete;
    presentaciones_componentes.Refresh;
    qaux.close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select sum(peso),sum(coste) from configuraciones_detalle where ide='+presentacioneside.Asstring+' and idcfg='+presentacionesid.Asstring);
    qaux.open;
    presentaciones.Edit;
    presentacionespeso.Value:=qaux.Fields[0].AsFloat;
    presentacionescoste.Value:=qaux.Fields[1].AsFloat;
    presentaciones.post;
    presentaciones_componentes.Close;
    presentaciones_componentes.open;
end;

procedure Tpresentaciones.Button2Click(Sender: TObject);
var cantidad,ide,idcfg,idaf:integer;
begin
    qaux.SQL.Clear;
    qaux.SQL.Add('select ide,idaf,idcfg,cantidad from configuraciones_detalle where ide='+qpresentacioneside.Asstring+' and idcfg='+qpresentacionesid.Asstring+' and idaf='+qarticulosfinalid.Asstring);
    qaux.Open;
    if qaux.RecordCount>0 then
    begin
        cantidad:=qaux.Fields[3].AsInteger;
        ide:=qaux.Fields[0].AsInteger;
        idaf:=qaux.Fields[1].AsInteger;
        idcfg:=qaux.Fields[2].AsInteger;
        presentaciones_componentes.Locate('ide;idcfg;idaf',vararrayof([ide,idcfg,idaf]),[locaseinsensitive]);
        presentaciones_componentes.edit;
        presentaciones_componentescantidad.Value:=cantidad+1;
        presentaciones_componentespeso.Value:=qarticulosfinalpeso.Asfloat;
        presentaciones_componentescoste.Value:=qarticulosfinalult_preciocompra.Asfloat;
        presentaciones_componentes.Post;
    end else
    begin
        presentaciones_componentes.Append;
        presentaciones_componenteside.Value:=presentacioneside.AsInteger;
        presentaciones_componentesidaf.Value:=qarticulosfinalid.asinteger;
        presentaciones_componentescodigo.Value:=qarticulosfinalcodigo.AsString;
        presentaciones_componentescoste.Value:=qarticulosfinalult_preciocompra.Asfloat;
        presentaciones_componentespeso.Value:=qarticulosfinalpeso.Asfloat;
        presentaciones_componentesdescripcion.Value:=qarticulosfinaldescripcion.AsString;
        presentaciones_componentesidcfg.Value:=presentacionesid.AsInteger;
        presentaciones_componentescantidad.Value:=1;
        presentaciones_componentes.Post;
    end;
    qaux.close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select sum(peso),sum(coste) from configuraciones_detalle where ide='+presentacioneside.Asstring+' and idcfg='+presentacionesid.Asstring);
    qaux.open;
    presentaciones.Edit;
    presentacionespeso.Value:=qaux.Fields[0].AsFloat;
    presentacionescoste.Value:=qaux.Fields[1].AsFloat;
    presentaciones.post;
    presentaciones_componentes.Close;
    presentaciones_componentes.open;
end;

procedure Tpresentaciones.Button3Click(Sender: TObject);
begin
    presentaciones_envases.Delete;
    qenvases.Close;
    qenvases.sql.clear;
    qenvases.SQL.Add('select ide,id,codigo,descripcion from articulos_almacen where activo=1 and envase_venta=1 and (ide,id) not in (select ide,idenv from configuraciones_envases where idcfg='+qpresentacionesid.asstring+') order by descripcion asc');
    qenvases.Open;
end;

procedure Tpresentaciones.Button4Click(Sender: TObject);
begin
    presentaciones_envases.append;
    presentaciones_envaseside.Value:=qpresentacioneside.asinteger;
    presentaciones_envasesidcfg.Value:=qpresentacionesid.asinteger;
    presentaciones_envasesidenv.Value:=qenvasesid.asinteger;
    presentaciones_envasescodigo.Value:=qenvasescodigo.asstring;
    presentaciones_envasesdescripcion.Value:=qenvasesdescripcion.asstring;
    presentaciones_envases.Post;
    qenvases.Close;
    qenvases.sql.clear;
    qenvases.SQL.Add('select ide,id,codigo,descripcion from articulos_almacen where activo=1 and palet=0 and (ide,id) not in (select ide,idenv from configuraciones_envases where idcfg='+qpresentacionesid.asstring+') order by descripcion asc');
    qenvases.Open;

end;

procedure Tpresentaciones.DBEdit4Exit(Sender: TObject);
begin
    presentacionesdescripcion.Value:=presentacionesdescripcion2.AsString;
end;

procedure Tpresentaciones.dspresentacionesStateChange(Sender: TObject);
begin
    if presentaciones.State in [dsedit,dsinsert] then
    begin
       Panel3.Enabled:=true;
       panel12.Visible:=false;
       panel8.Visible:=false;
       btfnuevo.enabled:=false;
       btfmodificar.enabled:=false;
       btfguardar.enabled:=true;
       btfcancelar.enabled:=true;
    end;
    if presentaciones.State in [dsbrowse] then
    begin
       Panel3.Enabled:=false;
       panel12.Visible:=true;
       panel8.Visible:=true;
       btfnuevo.enabled:=true;
       btfmodificar.enabled:=true;
       btfguardar.enabled:=false;
       btfcancelar.enabled:=false;
    end;
end;

procedure Tpresentaciones.dspresentaciones_envasesDataChange(Sender: TObject;
  Field: TField);
var img:TPicture;
    ext,nomarchivo:string;
    SearchRec: TSearchRec;

begin
{If not DirectoryExists('c:\agrigest\tmp') then
CreateDir('c:\agrigest\tmp');
if presentaciones_envases.State in [dsbrowse] then
begin
if FindFirst('c:\agrigest\tmp\*.*', faAnyFile, SearchRec) = 0 then
repeat
Deletefile('c:\agrigest\tmp\'+SearchRec.name);
until (FindNext(SearchRec) <> 0);
FindClose(SearchRec);
    if presentaciones_envases.RecordCount>0 then
    begin
        imgfoto.Picture:=nil;
        ext:=presentaciones_envasesextension.AsString;
        nomarchivo:=presentaciones_envasesnomimagen.asstring;
        if nomarchivo<>'' then presentaciones_envasesimagen.savetofile('c:\agrigest\tmp\'+nomarchivo);
        if (ext='.jpg') or (ext='.jpeg') or (ext='.bmp') or (ext='.png') then
        begin
            imgfoto.Picture:=nil;
            if nomarchivo<>'' then imgfoto.Picture.LoadFromFile('c:\agrigest\tmp\'+nomarchivo);
            imgfoto.Visible:=true;
            btdver.Visible:=false;
        end else
        begin
            imgfoto.Visible:=false;
            btdver.Visible:=true;
        end;
    end;
    if presentaciones_envases.RecordCount=0 then
    begin
        imgfoto.Visible:=false;
        btdver.Visible:=false;
        imgfoto.Picture:=nil;
    end;
end;

 }
end;

procedure Tpresentaciones.dsqpresentacionesDataChange(Sender: TObject;
  Field: TField);
begin
    if qpresentaciones.RecordCount>0 then
    begin
      panel12.Visible:=true;
      panel8.Visible:=true;
      qenvases.Close;
      qenvases.sql.clear;
      qenvases.SQL.Add('select ide,id,codigo,descripcion from articulos_almacen where activo=1 and palet=0 and (ide,id) not in (select ide,idenv from configuraciones_envases where idcfg='+qpresentacionesid.asstring+') order by descripcion asc');
      qenvases.Open;
    end else
    begin
      panel12.Visible:=false;
      panel8.Visible:=false;
    end;
end;

procedure Tpresentaciones.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then Key :=9;
    end;

end;

procedure Tpresentaciones.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 tdbgrid) then
        begin
            key:=',';
        end;
    end;
    if (activecontrol is tdbgrid) then
    begin
        if Key = #13 then Key :=#9;
    end;

    if (key=#13) then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;
end;

procedure Tpresentaciones.FormShow(Sender: TObject);
begin
    vertodaspresentaciones:=0;
    qpresentaciones.Open;
    presentaciones.Open;
    qarticulosfinal.Open;
    presentaciones_componentes.Open;
    qenvases.Open;
    presentaciones_envases.open;
end;

procedure Tpresentaciones.imgfotoClick(Sender: TObject);
var ext,nomarchivo:string;
begin
  if opendialog1.Execute then
  begin
    try
    finally
          presentaciones_envases.edit;
          ext:= ExtractFileExt(opendialog1.FileName);
          nomarchivo:= extractfilename(opendialog1.FileName);
          presentaciones_envasesnomimagen.Value:=nomarchivo;
          presentaciones_envasesextension.Value:=ext;
          presentaciones_envasesimagen.LoadFromFile(opendialog1.FileName);
          presentaciones_envases.Post;
    end;
  end;
end;

procedure Tpresentaciones.presentaciones_componentesAfterPost(
  DataSet: TDataSet);
begin
    qaux.close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select sum(peso),sum(coste) from configuraciones_detalle where ide='+presentacioneside.Asstring+' and idcfg='+presentacionesid.Asstring);
    qaux.open;
    presentaciones.Edit;
    presentacionespeso.Value:=qaux.Fields[0].AsFloat;
    presentacionescoste.Value:=qaux.Fields[1].AsFloat;
    presentaciones.post;
end;

procedure Tpresentaciones.presentaciones_componentesBeforePost(
  DataSet: TDataSet);
begin
    qarticulosfinal.Locate('id',presentaciones_componentesidaf.AsInteger,[locaseinsensitive]);
    presentaciones_componentespeso.Value:=qarticulosfinalpeso.Asfloat*presentaciones_componentescantidad.Asinteger;
    presentaciones_componentescoste.Value:=qarticulosfinalult_preciocompra.Asfloat*presentaciones_componentescantidad.Asinteger;
end;

procedure Tpresentaciones.qarticulosfinalBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where descripcion like('+''''+filtro+''''+') or codigo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
       end;
      if vertodosmateriales=0 then
      begin
          begin
            filtrolocal:=' where (descripcion like('+''''+filtro+''''+') or codigo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+') and activo=1 ';
          end;
      end;
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodosmateriales=0 then
      begin
          filtrolocal:=' where activo=1 ';
      end;
    end;

    qarticulosfinal.SQL.Clear;
    qarticulosfinal.SQL.Add('select * from articulosf ' + filtrolocal +' order by descripcion')
end;

procedure Tpresentaciones.qenvasesBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where descripcion like('+''''+filtro+''''+') or codigo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
       end;
      if vertodosenvases=0 then
      begin
          begin
            filtrolocal:=' where (descripcion like('+''''+filtro+''''+') or codigo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+') and activo=1 ';
          end;
      end;
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodosenvases=0 then
      begin
          filtrolocal:=' where activo=1 ';
      end;
    end;

    qenvases.SQL.Clear;
    qenvases.SQL.Add('select ide,id,codigo,descripcion from articulos_almacen ' + filtrolocal +' order by descripcion');
end;

procedure Tpresentaciones.qpresentacionesBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where descripcion like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
       end;
      if vertodaspresentaciones=0 then
      begin
         filtrolocal:=' where (descripcion like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
         filtrolocal:=filtrolocal+') and activo=1 ';
      end else
          begin
            filtrolocal:=' where (descripcion like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+')';
          end
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodaspresentaciones=0 then
      begin
         filtrolocal:=' where activo=1 ';
      end else
          begin
            filtrolocal:='';
          end
    end;


    qpresentaciones.SQL.Clear;
    qpresentaciones.SQL.Add('select * from configuraciones ' + filtrolocal +' order by descripcion')


end;

procedure Tpresentaciones.tbuscarChange(Sender: TObject);
begin
    filtro:='%'+tbuscar.Text+'%';
    vertodaspresentaciones:=0;
    qpresentaciones.Close;
    qpresentaciones.open;
end;

procedure Tpresentaciones.tbuscarcomponentesChange(Sender: TObject);
begin
    filtro:='%'+tbuscarcomponentes.Text+'%';
    vertodosmateriales:=0;
    qarticulosfinal.Close;
    qarticulosfinal.open;
end;

procedure Tpresentaciones.tbuscarenvasesChange(Sender: TObject);
begin
    filtro:='%'+tbuscarenvases.Text+'%';
    vertodosenvases:=0;
    qenvases.Close;
    qenvases.open;
end;

procedure Tpresentaciones.todosarticulosClick(Sender: TObject);
begin
    if todosarticulos.Checked=true then
    begin
        vertodaspresentaciones:=1;
        qpresentaciones.Close;
        qpresentaciones.Open;
    end else
    begin
        vertodaspresentaciones:=0;
        qpresentaciones.Close;
        qpresentaciones.Open;
    end;
end;

end.
