unit proveedores;

interface

uses
  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, Vcl.DBLookup,datos,
  ZAbstractDataset, ZDataset, Data.DB, ZAbstractRODataset, ZAbstractTable,
  Vcl.ImgList;

type
  Tfproveedores = 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: TZReadOnlyQuery;
    artproveedor: TZQuery;
    proveedores: TZQuery;
    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: TZReadOnlyQuery;
    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: TZReadOnlyQuery;
    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;
    listaiconos: TImageList;
    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
  fproveedores: Tfproveedores;

implementation

{$R *.dfm}

uses entradas;

procedure Tfproveedores.btAborrarClick(Sender: TObject);
begin
   artproveedor.Delete;
end;

procedure Tfproveedores.btAcancelarClick(Sender: TObject);
begin
    artproveedor.Cancel;
end;

procedure Tfproveedores.btAguardarClick(Sender: TObject);
begin
    artproveedor.Post;
end;

procedure Tfproveedores.btALmodificarClick(Sender: TObject);
begin
    fentradas.ShowModal;
end;

procedure Tfproveedores.btALnuevoClick(Sender: TObject);
begin
   fentradas.ShowModal();
end;

procedure Tfproveedores.btAmodificarClick(Sender: TObject);
begin
    artproveedor.edit;
end;

procedure Tfproveedores.btAnuevoClick(Sender: TObject);
begin
   //artproveedor.MasterSource:=nil;
   artproveedor.append;
end;

procedure Tfproveedores.BtPborrarClick(Sender: TObject);
begin
    proveedores.Delete;
end;

procedure Tfproveedores.BtPcancelarClick(Sender: TObject);
begin
    proveedores.Cancel;
end;

procedure Tfproveedores.BtPguardarClick(Sender: TObject);
begin
    proveedores.Post;
    qproveedores.Refresh;
    proveedores.MasterSource:=dsqproveedores;
end;

procedure Tfproveedores.btPmodificarClick(Sender: TObject);
begin
   proveedores.MasterSource:=nil;
   proveedores.edit;
   dbedit1.SetFocus;
end;

procedure Tfproveedores.BtPNuevoClick(Sender: TObject);
begin
   proveedores.MasterSource:=nil;
   proveedores.append;
   dbedit1.SetFocus;
end;

procedure Tfproveedores.DBGrid2TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qcompras.SortType;
  qcompras.SortedFields:=Column.FieldName;
  If st = stAscending then qcompras.SortType:=stDescending else qcompras.SortType:=stAscending;
  dsqcompras.DataSet.First;
end;

procedure Tfproveedores.DBGrid3ColExit(Sender: TObject);
begin
  if DBGrid3.SelectedField.FieldName = DBLookupComboBox2.DataField then
    DBLookupComboBox2.Visible := False;

end;

procedure Tfproveedores.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 Tfproveedores.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 Tfproveedores.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 Tfproveedores.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 Tfproveedores.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 Tfproveedores.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then Key :=9;

    end;
end;

procedure Tfproveedores.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 Tfproveedores.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 Tfproveedores.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 Tfproveedores.tbuscarChange(Sender: TObject);
begin
    filtro:='%'+tbuscar.Text+'%';
    if todosproveedores.Checked then vertodos:=1 else vertodos:=0;
    qproveedores.Close;
    qproveedores.open;
end;

end.
