unit frm_Tiendas;

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,
  System.UITypes, frm_BaseList;

type
  TfrmTiendas = class(TfrmBaseList)
    procedure FormShow(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnRefreshClick(Sender: TObject); override;
    procedure btnNewClick(Sender: TObject); override;
    procedure btnEditClick(Sender: TObject); override;
    procedure btnDeleteClick(Sender: TObject); override;
  private
    procedure dbGridMainDblClick(Sender: TObject);
  public
    { Public declarations }
  end;

var
  frmTiendas: TfrmTiendas;

implementation

uses
  dmg_Main, frm_TiendasEditor, uDbErrorHandler;

{$R *.dfm}

procedure TfrmTiendas.FormShow(Sender: TObject);
begin
  inherited;
  frmTiendas := Self;
  OnDestroy := FormDestroy;
  pnlSearch.Visible := True;
  lblSearch.Caption := 'Buscar Tienda:';
  dbGridMain.OnDblClick := dbGridMainDblClick;
  btnRefreshClick(nil);
end;

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

procedure TfrmTiendas.dbGridMainDblClick(Sender: TObject);
begin
  btnEditClick(nil);
end;

procedure TfrmTiendas.btnRefreshClick(Sender: TObject);
var
  LSql: string;
begin
  FQryMain.Close;
  LSql := 'SELECT t.id, t.codigo, t.nombre, t.direccion, t.poblacion, t.cp, t.provincia, ' +
          't.telefono, t.email, t.activo, t.id_empresa, t.id_almacen, ' +
          'e.nombre as empresa_nombre, a.descripcion as almacen_nombre ' +
          'FROM ge_tiendas t ' +
          'LEFT JOIN ge_empresas e ON t.id_empresa = e.id ' +
          'LEFT JOIN ge_almacenes a ON t.id_almacen = a.id ' +
          'WHERE (t.id_empresa = :emp OR :emp = 0) ';

  if Trim(edtSearch.Text) <> '' then
  begin
    LSql := LSql + 'AND (t.nombre LIKE :search OR t.codigo LIKE :search OR t.poblacion LIKE :search OR e.nombre LIKE :search) ';
  end;
  LSql := LSql + 'ORDER BY t.nombre';

  FQryMain.SQL.Text := LSql;
  FQryMain.ParamByName('emp').AsInteger := StrToIntDef(dmgMain.CurrentCompanyId, 0);

  if Trim(edtSearch.Text) <> '' then
    FQryMain.ParamByName('search').AsString := '%' + Trim(edtSearch.Text) + '%';

  FQryMain.Open;

  dbGridMain.Columns.Clear;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'codigo';
    Title.Caption := 'Código';
    Width := 80;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'nombre';
    Title.Caption := 'Nombre Tienda';
    Width := 220;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'empresa_nombre';
    Title.Caption := 'Empresa';
    Width := 180;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'almacen_nombre';
    Title.Caption := 'Almacén Stock';
    Width := 180;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'poblacion';
    Title.Caption := 'Población';
    Width := 120;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'telefono';
    Title.Caption := 'Teléfono';
    Width := 100;
  end;
  with dbGridMain.Columns.Add do
  begin
    FieldName := 'activo';
    Title.Caption := 'Activo';
    Width := 60;
  end;
end;

procedure TfrmTiendas.btnEditClick(Sender: TObject);
var
  LFrm: TfrmTiendasEditor;
begin
  if FQryMain.IsEmpty then Exit;

  LFrm := TfrmTiendasEditor.Create(Self);
  try
    LFrm.TiendaId := FQryMain.FieldByName('id').AsInteger;
    if LFrm.ShowModal = mrOk then
      btnRefreshClick(nil);
  finally
    LFrm.Free;
  end;
end;

procedure TfrmTiendas.btnNewClick(Sender: TObject);
var
  LFrm: TfrmTiendasEditor;
begin
  LFrm := TfrmTiendasEditor.Create(Self);
  try
    LFrm.TiendaId := 0;
    if LFrm.ShowModal = mrOk then
      btnRefreshClick(nil);
  finally
    LFrm.Free;
  end;
end;

procedure TfrmTiendas.btnDeleteClick(Sender: TObject);
begin
  if FQryMain.IsEmpty then Exit;

  if MessageDlg('¿Está seguro de que desea eliminar esta tienda?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    try
      dmgMain.qryExec.Close;
      dmgMain.qryExec.SQL.Text := 'DELETE FROM ge_tiendas WHERE id = :id';
      dmgMain.qryExec.ParamByName('id').AsInteger := FQryMain.FieldByName('id').AsInteger;
      dmgMain.qryExec.ExecSQL;
      btnRefreshClick(nil);
    except
      on E: Exception do
        TDbErrorHandler.HandleException(E, 'Error al eliminar la tienda');
    end;
  end;
end;

end.
