unit frm_SelectMateriaPrima;

interface

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

type
  TfrmSelectMateriaPrima = class(TfrmBaseSelect)
    btnNuevo: TButton;
    procedure btnNuevoClick(Sender: TObject);
  protected
    procedure DoSearch; override;
    procedure DoSelect; override;
  end;

var
  frmSelectMateriaPrima: TfrmSelectMateriaPrima;

implementation

uses
  dmg_Main, frm_MateriasPrimasEditor;

{$R *.dfm}

procedure TfrmSelectMateriaPrima.btnNuevoClick(Sender: TObject);
begin
  if not Assigned(frmMateriasPrimasEditor) then
    Application.CreateForm(TfrmMateriasPrimasEditor, frmMateriasPrimasEditor);
  
  frmMateriasPrimasEditor.ParentForm := Self;
  frmMateriasPrimasEditor.MateriaPrimaId := '';
  if frmMateriasPrimasEditor.ShowModal = mrOk then
  begin
    DoSearch;
    if frmMateriasPrimasEditor.MateriaPrimaId <> '' then
    begin
      SelectedId := frmMateriasPrimasEditor.MateriaPrimaId;
      SelectedCode := frmMateriasPrimasEditor.MateriaPrimaId;
      if dmgMain.qryExec.Locate('id', SelectedId, []) then
      begin
        SelectedDesc := dmgMain.qryExec.FieldByName('descripcion').AsString;
        ModalResult := mrOk;
      end;
    end;
  end;
end;

procedure TfrmSelectMateriaPrima.DoSearch;
begin
  dmgMain.qryExec.Close;
  dmgMain.qryExec.SQL.Text := 
    'SELECT t.id, t.descripcion, t.tipo, t.es_articulo FROM (' +
    '  SELECT mp.id, ' +
    '         CONVERT(mp.descripcion USING utf8mb4) COLLATE utf8mb4_general_ci AS descripcion, ' +
    '         CONVERT(''Materia Prima'' USING utf8mb4) COLLATE utf8mb4_general_ci AS tipo, ' +
    '         0 AS es_articulo ' +
    '  FROM ge_materias_primas mp WHERE mp.activo = 1 ' +
    '  UNION ALL ' +
    '  SELECT a.id, ' +
    '         CONVERT(a.descripcion USING utf8mb4) COLLATE utf8mb4_general_ci AS descripcion, ' +
    '         CONVERT(''Artículo'' USING utf8mb4) COLLATE utf8mb4_general_ci AS tipo, ' +
    '         1 AS es_articulo ' +
    '  FROM ge_articulos a WHERE a.activo = 1 AND a.ingrediente = 1 ' +
    ') t ';
  
  if Trim(edtSearch.Text) <> '' then
  begin
    dmgMain.qryExec.SQL.Add('WHERE (t.descripcion LIKE :search) ');
    dmgMain.qryExec.ParamByName('search').DataType := ftWideString;
    dmgMain.qryExec.ParamByName('search').AsWideString := '%' + Trim(edtSearch.Text) + '%';
  end;
  
  dmgMain.qryExec.SQL.Add('ORDER BY t.descripcion');
  dmgMain.qryExec.Open;
  
  // Ocultar la columna ID y es_articulo en la rejilla y ajustar etiquetas
  if dmgMain.qryExec.FindField('id') <> nil then
    dmgMain.qryExec.FieldByName('id').Visible := False;
  if dmgMain.qryExec.FindField('es_articulo') <> nil then
    dmgMain.qryExec.FieldByName('es_articulo').Visible := False;
  if dmgMain.qryExec.FindField('tipo') <> nil then
  begin
    dmgMain.qryExec.FieldByName('tipo').DisplayLabel := 'Tipo';
    dmgMain.qryExec.FieldByName('tipo').DisplayWidth := 15;
  end;
  if dmgMain.qryExec.FindField('descripcion') <> nil then
  begin
    dmgMain.qryExec.FieldByName('descripcion').DisplayLabel := 'Descripción';
    dmgMain.qryExec.FieldByName('descripcion').DisplayWidth := 45;
  end;
end;

procedure TfrmSelectMateriaPrima.DoSelect;
begin
  if MultiSelect then
    inherited
  else
  begin
    if not dmgMain.qryExec.IsEmpty then
    begin
      SelectedId := dmgMain.qryExec.FieldByName('id').AsString;
      SelectedCode := dmgMain.qryExec.FieldByName('id').AsString;
      SelectedDesc := dmgMain.qryExec.FieldByName('descripcion').AsString;
      ModalResult := mrOk;
    end;
  end;
end;

end.
