unit fproveedores;

interface

uses
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client, uFireDacHelper,
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.DBCtrls, Vcl.Mask,
  Vcl.ComCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, datos,
    Data.DB;

type
  Tproveedores = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel5: TPanel;
    Label1: TLabel;
    todosproveedores: TCheckBox;
    tbuscar: TEdit;
    DBGrid1: TDBGrid;
    Panel3: TPanel;
    Panel4: TPanel;
    DatosProveedores: TPageControl;
    TDatosClientes: TTabSheet;
    Panel14: TPanel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    DBCheckBox2: TDBCheckBox;
    DBEdit1: TDBEdit;
    DBEdit10: TDBEdit;
    DBEdit11: TDBEdit;
    DBEdit12: TDBEdit;
    DBEdit13: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit9: TDBEdit;
    DBMemo1: TDBMemo;
    DBEdit21: TDBEdit;
    DBEdit22: TDBEdit;
    Panel6: TPanel;
    Label37: TLabel;
    BtPcancelar: TButton;
    btPmodificar: TButton;
    BtPborrar: TButton;
    BtPNuevo: TButton;
    BtPguardar: TButton;
    TDatosArticulos: TTabSheet;
    Panel7: TPanel;
    Label35: TLabel;
    btAcancelar: TButton;
    btAmodificar: TButton;
    btAborrar: TButton;
    btAnuevo: TButton;
    btAguardar: TButton;
    Panel13: TPanel;
    Panel17: TPanel;
    Detallesproveedores: TPageControl;
    TAlbaranes: TTabSheet;
    Panel10: TPanel;
    Label32: TLabel;
    btALmodificar: TButton;
    btALnuevo: TButton;
    qproveedores: TFDQuery;
    artproveedor: TFDQuery;
    proveedores: TFDQuery;
    qproveedoresnombre: TWideStringField;
    dsqproveedores: TDataSource;
    qproveedoresidempresa: TIntegerField;
    qproveedoresid: TIntegerField;
    dsproveedores: TDataSource;
    proveedoresid: TIntegerField;
    proveedoresIdempresa: TIntegerField;
    proveedoresnif: TWideStringField;
    proveedoresnombre: TWideStringField;
    proveedoresnombre_corto: TWideStringField;
    proveedoresdireccion: TWideStringField;
    proveedorespoblacion: TWideStringField;
    proveedorescodpost: TWideStringField;
    proveedoresprovincia: TWideStringField;
    proveedorestelefono: TWideStringField;
    proveedorestelefono2: TWideStringField;
    proveedoresmovil: TWideStringField;
    proveedoresemail: TWideStringField;
    proveedorespersonacontacto: TWideStringField;
    proveedorescodigomercado: TIntegerField;
    proveedoresactivo: TIntegerField;
    proveedoresobservaciones: TWideStringField;
    proveedoresccontable: TIntegerField;
    proveedoresdescuento: TFloatField;
    dsq_articulospropios: TDataSource;
    dsartproveedor: TDataSource;
    qarticulos_propios: TFDQuery;
    qarticulos_propiosidempresa: TIntegerField;
    qarticulos_propiosid: TIntegerField;
    qarticulos_propioscodigo: TWideStringField;
    qarticulos_propiosdescripcion: TWideStringField;
    qarticulos_propiosult_preciocompra: TFloatField;
    artproveedoridempresa: TIntegerField;
    artproveedoridproveedor: TIntegerField;
    artproveedorid: TWideStringField;
    artproveedorid_propio: TWideStringField;
    artproveedordescripcion: TWideStringField;
    artproveedorult_precio: TFloatField;
    artproveedoractivo: TIntegerField;
    DBGrid3: TDBGrid;
    DBLookupComboBox2: TDBLookupComboBox;
    DBGrid2: TDBGrid;
    dsqcompras: TDataSource;
    qcompras: TFDQuery;
    qcomprasidempresa: TIntegerField;
    qcomprasidproveedor: TIntegerField;
    qcomprasnombre: TWideStringField;
    qcomprasdocumento: TWideStringField;
    qcomprasfecha: TDateField;
    qcomprascodigo: TWideStringField;
    qcomprasdescripcion: TWideStringField;
    qcomprasid_propio: TWideStringField;
    qcomprasdesc_propia: TWideStringField;
    qcomprascantidad: TFloatField;
    qcomprasstock: TFloatField;
    qcomprasprecio: TFloatField;
    qaux: TFDQuery;
    procedure BtPNuevoClick(Sender: TObject);
    procedure BtPborrarClick(Sender: TObject);
    procedure btPmodificarClick(Sender: TObject);
    procedure BtPguardarClick(Sender: TObject);
    procedure BtPcancelarClick(Sender: TObject);
    procedure dsproveedoresStateChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btAborrarClick(Sender: TObject);
    procedure btAnuevoClick(Sender: TObject);
    procedure btAmodificarClick(Sender: TObject);
    procedure btAguardarClick(Sender: TObject);
    procedure btAcancelarClick(Sender: TObject);
    procedure dsartproveedorStateChange(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure tbuscarChange(Sender: TObject);
    procedure qproveedoresBeforeOpen(DataSet: TDataSet);
    procedure FormCreate(Sender: TObject);
    procedure DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid3ColExit(Sender: TObject);
    procedure DBGrid3KeyPress(Sender: TObject; var Key: Char);
    procedure btALnuevoClick(Sender: TObject);
    procedure btALmodificarClick(Sender: TObject);
    procedure DBGrid2TitleClick(Column: TColumn);
  private
    { Private declarations }
  public
    { Public declarations }
    var   filtro:string;
          vertodos:integer;
  end;

var
  proveedores: Tproveedores;

implementation

{$R *.dfm}

uses fentradas;

procedure Tproveedores.btAborrarClick(Sender: TObject);
begin
   artproveedor.Delete;
end;

procedure Tproveedores.btAcancelarClick(Sender: TObject);
begin
    artproveedor.Cancel;
end;

procedure Tproveedores.btAguardarClick(Sender: TObject);
begin
    artproveedor.Post;
end;

procedure Tproveedores.btALmodificarClick(Sender: TObject);
begin
    entradas.ShowModal;
end;

procedure Tproveedores.btALnuevoClick(Sender: TObject);
begin
   entradas.ShowModal();
end;

procedure Tproveedores.btAmodificarClick(Sender: TObject);
begin
    artproveedor.edit;
end;

procedure Tproveedores.btAnuevoClick(Sender: TObject);
begin
   //artproveedor.MasterSource:=nil;
   artproveedor.append;
end;

procedure Tproveedores.BtPborrarClick(Sender: TObject);
begin
    proveedores.Delete;
end;

procedure Tproveedores.BtPcancelarClick(Sender: TObject);
begin
    proveedores.Cancel;
end;

procedure Tproveedores.BtPguardarClick(Sender: TObject);
begin
    proveedores.Post;
    qproveedores.Refresh;
    proveedores.MasterSource:=dsqproveedores;
end;

procedure Tproveedores.btPmodificarClick(Sender: TObject);
begin
   proveedores.MasterSource:=nil;
   proveedores.edit;
   dbedit1.SetFocus;
end;

procedure Tproveedores.BtPNuevoClick(Sender: TObject);
var id:integer;
begin
   qaux.sql.clear;
   qaux.sql.add('select max(id) from proveedores');
   qaux.Open;
   if qaux.Fields[0].AsInteger>0 then id:=qaux.Fields[0].AsInteger+1 else id:=0;

   proveedores.MasterSource:=nil;
   proveedores.append;
   proveedoresid.Value:=id;
   dbedit1.SetFocus;
end;

procedure Tproveedores.DBGrid2TitleClick(Column: TColumn);
var
  st:TFDQuerySortType;
begin
  st:=qcompras.SortType;
  qcompras.SortedFields:=Column.FieldName;
  If st = stAscending then qcompras.SortType:=stDescending else qcompras.SortType:=stAscending;
  dsqcompras.DataSet.First;
end;

procedure Tproveedores.DBGrid3ColExit(Sender: TObject);
begin
  if DBGrid3.SelectedField.FieldName = DBLookupComboBox2.DataField then
    DBLookupComboBox2.Visible := False;

end;

procedure Tproveedores.DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = DBLookupComboBox2.DataField) then
    with DBLookupComboBox2 do
    begin
      Left := Rect.Left + DBGrid3.Left + 2;
      Top := Rect.Top + DBGrid3.Top + 2;
      Width := Rect.Right - Rect.Left;
      Width := Rect.Right - Rect.Left;
      Height := Rect.Bottom - Rect.Top;
      Visible := True;
    end;
  end

end;

procedure Tproveedores.DBGrid3KeyPress(Sender: TObject; var Key: Char);
begin
  //if (key = Chr(9)) then Exit;

  if (DBGrid3.SelectedField.FieldName = DBLookupComboBox2.DataField) then
  begin
    DBLookupComboBox2.SetFocus;
    SendMessage(DBLookupComboBox2.Handle, WM_Char, word(Key), 0);
  end
end;

procedure Tproveedores.dsartproveedorStateChange(Sender: TObject);
begin
    if artproveedor.State in [dsedit,dsinsert] then
    begin
       btAnuevo.enabled:=false;
       btAborrar.enabled:=false;
       btAmodificar.enabled:=false;
       btAguardar.enabled:=true;
       btAcancelar.enabled:=true;
    end;
    if artproveedor.State in [dsbrowse] then
    begin
       btAnuevo.enabled:=true;
       btAborrar.enabled:=true;
       btAmodificar.enabled:=true;
       btAguardar.enabled:=false;
       btAcancelar.enabled:=false;
    end;

end;

procedure Tproveedores.dsproveedoresStateChange(Sender: TObject);
begin
    if proveedores.State in [dsedit,dsinsert] then
    begin
       Panel14.Enabled:=true;
       btPnuevo.enabled:=false;
       btPborrar.enabled:=false;
       btPmodificar.enabled:=false;
       btPguardar.enabled:=true;
       btPcancelar.enabled:=true;
    end;
    if proveedores.State in [dsbrowse] then
    begin
       Panel14.Enabled:=false;
       btPnuevo.enabled:=true;
       btPborrar.enabled:=true;
       btPmodificar.enabled:=true;
       btPguardar.enabled:=false;
       btPcancelar.enabled:=false;
    end;

end;

procedure Tproveedores.FormCreate(Sender: TObject);
begin
 with DBLookupComboBox2 do
 begin
   DataSource := dsartproveedor; // -> AdoTable1 -> DBGrid1
   ListSource := dsq_articulospropios;
   DataField   := 'id_propio'; // from AdoTable1 - displayed in the DBGrid
   KeyField  := 'codigo';
   ListField := 'descripcion;codigo';
   Visible    := False;
 end;
end;

procedure Tproveedores.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then Key :=9;

    end;
end;

procedure Tproveedores.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 Tproveedores.FormShow(Sender: TObject);
begin
    qproveedores.Close;
    qproveedores.Open;
    proveedores.Close;
    proveedores.Open;
    qarticulos_propios.Close;
    qarticulos_propios.Open;
    artproveedor.close;
    artproveedor.Open;
    qcompras.Close;
    qcompras.Open;
    datosproveedores.ActivePageIndex:=0;
    detallesproveedores.ActivePageIndex:=0;
end;

procedure Tproveedores.qproveedoresBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where nombre like('+''''+filtro+''''+') or nombre_corto like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
       end;
      if vertodos=0 then
      begin
          begin
            filtrolocal:=' where (nombre like('+''''+filtro+''''+') or nombre_corto like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+') and activo=1 ';
          end;
      end;
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodos=0 then
      begin
          filtrolocal:=' where activo=1 ';
      end;
    end;


    qproveedores.SQL.Clear;
    qproveedores.SQL.Add('select idempresa,id,nombre_corto as nombre from proveedores ' + filtrolocal +' order by nombre_corto')


end;

procedure Tproveedores.tbuscarChange(Sender: TObject);
begin
    filtro:='%'+tbuscar.Text+'%';
    if todosproveedores.Checked then vertodos:=1 else vertodos:=0;
    qproveedores.Close;
    qproveedores.open;
end;

end.
