unit frm_ArticulosProveedor;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Grids,
  Vcl.DBGrids, Data.DB, Vcl.Buttons, uAppTheme, FireDAC.Stan.Param, FireDAC.Comp.Client,
  frm_BaseList;

type
  TfrmArticulosProveedor = class(TfrmBaseList)
    procedure FormShow(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnRefreshClick(Sender: TObject); override;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmArticulosProveedor: TfrmArticulosProveedor;

implementation

uses
  dmg_Main;

{$R *.dfm}

procedure TfrmArticulosProveedor.FormShow(Sender: TObject);
begin
  inherited;
  frmArticulosProveedor := Self;
  OnDestroy := FormDestroy;
  pnlSearch.Visible := True;
  lblSearch.Caption := 'Buscar Artículo Proveedor:';
  
  // Ocultar botones de edición/creación/borrado ya que es para visualizar
  btnNuevo.Visible := False;
  btnEditar.Visible := False;
  btnBorrar.Visible := False;
end;

procedure TfrmArticulosProveedor.FormDestroy(Sender: TObject);
begin
  if frmArticulosProveedor = Self then
    frmArticulosProveedor := nil;
end;

procedure TfrmArticulosProveedor.btnRefreshClick(Sender: TObject);
var
  LSql: string;
begin
  FQryMain.Close;
  LSql := 'SELECT pm.id, pm.codigo_articulo_proveedor as codigo, pm.descripcion, ' +
          'p.nombre as proveedor_nombre, pm.id_materia_prima as id_propio, ' +
          'mp.descripcion as descripcion_propia, pm.cantidad_por_bulto, pm.activo ' +
          'FROM ge_proveedores_materias_primas pm ' +
          'LEFT JOIN ge_proveedores p ON pm.id_proveedor = p.id ' +
          'LEFT JOIN ge_materias_primas mp ON pm.id_materia_prima = mp.id ' +
          'WHERE 1=1 ';
          
  if Trim(edtSearch.Text) <> '' then
  begin
    LSql := LSql + 'AND (pm.descripcion LIKE :search ' +
            'OR pm.codigo_articulo_proveedor LIKE :search ' +
            'OR p.nombre LIKE :search ' +
            'OR mp.descripcion LIKE :search) ';
  end;
  
  LSql := LSql + 'ORDER BY pm.descripcion';
  
  FQryMain.SQL.Text := LSql;
  
  if Trim(edtSearch.Text) <> '' then
    FQryMain.ParamByName('search').AsString := '%' + Trim(edtSearch.Text) + '%';
    
  FQryMain.Open;
  
  dbGridMain.Columns.Clear;
  
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'id';
    Title.Caption := 'ID';
    Width := 80;
  end;

  with dbGridMain.Columns.Add do
  begin
    FieldName := 'codigo';
    Title.Caption := 'Código';
    Width := 100;
  end;
  
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'descripcion';
    Title.Caption := 'Descripción';
    Width := 250;
  end;
  
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'proveedor_nombre';
    Title.Caption := 'Proveedor';
    Width := 200;
  end;
  
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'id_propio';
    Title.Caption := 'ID Propio';
    Width := 80;
  end;
  
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'descripcion_propia';
    Title.Caption := 'Descripción Propia';
    Width := 250;
  end;

  with dbGridMain.Columns.Add do
  begin
    FieldName := 'cantidad_por_bulto';
    Title.Caption := 'Cant. Bulto';
    Width := 90;
  end;

  with dbGridMain.Columns.Add do
  begin
    FieldName := 'activo';
    Title.Caption := 'Activo';
    Width := 60;
  end;
end;

end.
