unit frm_EntradasMateriasPrimas;

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
  TfrmEntradasMateriasPrimas = class(TfrmBaseList)
    procedure FormShow(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnRefreshClick(Sender: TObject); override;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmEntradasMateriasPrimas: TfrmEntradasMateriasPrimas;

implementation

uses
  dmg_Main, uDbErrorHandler;

{$R *.dfm}

procedure TfrmEntradasMateriasPrimas.FormShow(Sender: TObject);
begin
  inherited;
  frmEntradasMateriasPrimas := Self;
  OnDestroy := FormDestroy;
  pnlSearch.Visible := True;
  lblSearch.Caption := 'Buscar Entrada/Lote:';
  
  // Desactivar/ocultar botones CRUD ya que se nutre de albaranes/facturas
  btnNuevo.Visible := False;
  btnEditar.Visible := False;
  btnBorrar.Visible := False;
end;

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

procedure TfrmEntradasMateriasPrimas.btnRefreshClick(Sender: TObject);
var
  LSql: string;
begin
  FQryMain.Close;
  LSql := 'SELECT emp.id, alm.descripcion as almacen_desc, mp.descripcion as materia_prima_desc, ' +
          'emp.lote, emp.fecha_entrada, emp.fecha_caducidad, emp.precio_compra, emp.cantidad_compra, emp.stock_restante ' +
          'FROM ge_entradas_materias_primas emp ' +
          'JOIN ge_almacenes alm ON emp.id_almacen = alm.id ' +
          'JOIN ge_materias_primas mp ON emp.id_materia_prima = mp.id ' +
          'WHERE emp.id_empresa = :emp ';
          
  if Trim(edtSearch.Text) <> '' then
  begin
    LSql := LSql + 'AND (emp.lote LIKE :search OR mp.descripcion LIKE :search) ';
  end;
  LSql := LSql + 'ORDER BY emp.created_at DESC';
  
  FQryMain.SQL.Text := LSql;
  FQryMain.ParamByName('emp').AsString := dmgMain.CurrentCompanyId;
  
  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 := 60;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'almacen_desc';
    Title.Caption := 'Almacén';
    Width := 120;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'materia_prima_desc';
    Title.Caption := 'Materia Prima';
    Width := 200;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'lote';
    Title.Caption := 'Lote';
    Width := 100;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'fecha_entrada';
    Title.Caption := 'F. Entrada';
    Width := 80;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'fecha_caducidad';
    Title.Caption := 'F. Caducidad';
    Width := 80;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'precio_compra';
    Title.Caption := 'P. Compra';
    Width := 80;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'cantidad_compra';
    Title.Caption := 'Cant. Compra';
    Width := 90;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'stock_restante';
    Title.Caption := 'Stock Restante';
    Width := 90;
  end;
end;

end.
