unit CadTabela;
                                                          
interface

uses
  Windows, system.UItypes, IB_Access,  Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ModeloCadastro, IB_Controls, StdCtrls, IB_Grid, Mask,
  IB_Components, Grids, Buttons, ExtCtrls, ComCtrls, AppEvnts, jpeg, 
  DBClient, DBGrids, ImgList,  myChkBox, ppCtrls, ppPrnabl, ppClass,
  ppBands, ppCache, ppDBPipe, ppComm, ppRelatv, ppProd, ppReport,
  IBODataset, ppParameter, ppVar, ppModule, raCodMod, ppStrtch, ppSubRpt,
  ppCTMain, IB_Process, IB_Script,ppEmail, ppRegion, UCBase, ppDB,
  ppDesignLayer, Data.DB, IB_EditButton, System.ImageList, ppMemo;

type
  TfrmCadTabela = class(TFrModeloCadastro)
    pgcOutros: TPageControl;
    TabCadastro: TTabSheet;
    gridProdutosDisponiveis: TIB_Grid;
    qrProdutosEstoque: TIB_Query;
    dsrProdutosEstoque: TIB_DataSource;
    edtDescricaoTabela: TIB_Edit;
    GroupBox2: TGroupBox;
    IB_Edit2: TIB_Edit;
    Shape2: TShape;
    qrTabelaProdutos: TIB_Query;
    dsrTabelaProdutos: TIB_DataSource;
    btnImprimir: TBitBtn;
    btnEmail: TBitBtn;
    qrImpressao: TIBOQuery;
    dsrTabelas: TDataSource;
    ppDBPipeline1: TppDBPipeline;
    qrCliente: TIB_Query;
    qrClienteRelat: TIBOQuery;
    dsrClienteRelat: TDataSource;
    ppDBPipeline2: TppDBPipeline;
    grdProdutosNaTabela: TIB_Grid;
    IB_Edit1: TIB_Edit;
    Visualizacao: TTabSheet;
    IB_Edit6: TIB_Edit;
    GroupBox3: TGroupBox;
    edtCodigo: TLabeledEdit;
    edtPesquisaProduto: TBitBtn;
    edtProduto: TLabeledEdit;
    edtValor: TIB_Currency;
    btnExlcuiProdutoTabela: TBitBtn;
    btnInsereProdutoTabela: TBitBtn;
    IB_Memo1: TIB_Memo;
    GroupBox1: TGroupBox;
    IB_Edit3: TIB_Edit;
    IB_Edit4: TIB_Edit;
    IB_Memo2: TIB_Memo;
    IB_Edit5: TIB_Edit;
    IB_Edit7: TIB_Edit;
    Label5: TLabel;
    IB_Grid2: TIB_Grid;
    btnIncluiProduto: TBitBtn;
    rbDisponiveis: TRadioButton;
    rbNaTabela: TRadioButton;
    RelatTabelas: TppReport;
    ppParameterList2: TppParameterList;
    ppDesignLayers2: TppDesignLayers;
    ppDesignLayer2: TppDesignLayer;
    ppHeaderBand2: TppHeaderBand;
    ppDetailBand2: TppDetailBand;
    ppFooterBand2: TppFooterBand;
    ppImagemCabecalho: TppImage;
    ppRegiaoCliente: TppRegion;
    ppShape2: TppShape;
    ppDBText1: TppDBText;
    ppDBText11: TppDBText;
    ppDBText12: TppDBText;
    ppDBText13: TppDBText;
    ppDBText14: TppDBText;
    ppDBText15: TppDBText;
    ppLabel4: TppLabel;
    ppLabel6: TppLabel;
    ppLabel7: TppLabel;
    ppLabel8: TppLabel;
    ppLabel9: TppLabel;
    ppLabel10: TppLabel;
    ppGroup3: TppGroup;
    ppGroupHeaderBand3: TppGroupHeaderBand;
    ppGroupFooterBand3: TppGroupFooterBand;
    ppLabel12: TppLabel;
    ppDBText2: TppDBText;
    ppDBText5: TppDBText;
    ppGroup4: TppGroup;
    ppGroupHeaderBand4: TppGroupHeaderBand;
    ppGroupFooterBand4: TppGroupFooterBand;
    ppDBText6: TppDBText;
    ppDBText8: TppDBText;
    ppLabel1: TppLabel;
    ppDBText4: TppDBText;
    ppDBText7: TppDBText;
    ppLine1: TppLine;
    ppLine2: TppLine;
    ppSystemVariable1: TppSystemVariable;
    ppSystemVariable2: TppSystemVariable;
    lblVersao: TppLabel;
    ppDBMemo1: TppDBMemo;
    procedure BtInserirClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnInsereProdutoTabelaClick(Sender: TObject);
    procedure BtGravarClick(Sender: TObject);
    procedure BtEditarClick(Sender: TObject);
    procedure btnInsereRotaClick(Sender: TObject);
    procedure BtCancelarClick(Sender: TObject);
    procedure BtAnteriorClick(Sender: TObject);
    procedure BtProximoClick(Sender: TObject);
    procedure BtExcluirClick(Sender: TObject);
    procedure btnEditar2Click(Sender: TObject);
    procedure btnEmailClick(Sender: TObject);
    procedure btnImprimirClick(Sender: TObject);
    procedure TabCadastroShow(Sender: TObject);
    procedure btnExlcuiProdutoTabelaClick(Sender: TObject);
    procedure gridProdutosDisponiveisClick(Sender: TObject);
    procedure edtPesquisaProdutoClick(Sender: TObject);
    procedure edtCodigoExit(Sender: TObject);
    procedure btnIncluiProdutoClick(Sender: TObject);
    procedure gridProdutosDisponiveisCellGainFocus(Sender: TObject; ACol,
      ARow: Integer);
    procedure grdProdutosNaTabelaClick(Sender: TObject);
    procedure rbDisponiveisClick(Sender: TObject);
    procedure rbNaTabelaClick(Sender: TObject);

    private
    { Private declarations }
    InserindoTabela,AlterandoTabela:Boolean;
    procedure AtualizaTela;
    function ExisteNaTabela: Boolean;
    public
    { Public declarations }
  end;

var
  frmCadTabela: TfrmCadTabela;

implementation

uses DataModulo, ModeloPesquisa, Rotinas, cadProduto;

{$R *.dfm}

procedure TfrmCadTabela.BtInserirClick(Sender: TObject);
begin
   inherited;
   edtValor.Clear;
   pgcOutros.ActivePage := TabCadastro;
   btnImprimir.Visible  := False;
   btnEmail.Visible     := False;
   TbPrincipal.FieldByName('DATACADASTRO').Value:=Date;
   qrTabelaProdutos.Open;
   rbDisponiveis.Checked:=True;
   rbNaTabela.Checked:=False;
end;

procedure TfrmCadTabela.FormCreate(Sender: TObject);
begin
  inherited;
   Gera_Codigo     := True;
   Descricao_Unica :=True;
   Campo_Tabela    := 'DESCRICAO';
   Chave_Tabela    := 'COD_TABELA';
   qrProdutosEstoque.Open;
end;

procedure TfrmCadTabela.btnInsereProdutoTabelaClick(Sender: TObject);
begin
  inherited;
   if edtValor.Visible then
   begin
      if edtValor.Value = 0 then
      begin
        if (MessageDlg('O valor informado é 0,00 confirma o lançamento de um item com o valor zerado?', mtConfirmation, [mbYes, mbNo], 0) = mrNO) then
        begin
         edtValor.SetFocus;
         Exit;
        end; 
      end;
   end;

  if ( TbPrincipal.State in [dssinsert]) then
    TbPrincipal.PostRetaining;

  if NOT ExisteNaTabela then
  begin
    qrTabelaProdutos.Insert;
    qrTabelaProdutos.FieldByName('COD_TABELA').Value:=TbPrincipal.FieldByName('COD_TABELA').Value;
    qrTabelaProdutos.FieldByName('COD_PRODUTO').Value:=qrProdutosEstoque.FieldByName('COD_PRODUTO').Value;
    qrTabelaProdutos.FieldByName('VALOR').Value:=edtValor.Value;
    qrTabelaProdutos.Post;
    qrTabelaProdutos.RefreshAll;
  end
  else
  begin
   if InserindoTabela then
   begin
     qrTabelaProdutos.Locate('COD_PRODUTO',qrProdutosEstoque.FieldByName('COD_PRODUTO').Value,[]);
      MessageDlg('Já cadastrado', mtWarning, [mbOK], 0);

      qrProdutosEstoque.Next;
      edtCodigo.Text:= qrProdutosEstoque.FieldByName('cod_produto').Value;
      edtProduto.Text:= qrProdutosEstoque.FieldByName('descricao ').Value;
   end
   else
   if AlterandoTabela then
    begin
      qrTabelaProdutos.Edit;
      qrTabelaProdutos.FieldByName('COD_TABELA').Value:=TbPrincipal.FieldByName('COD_TABELA').Value;
      qrTabelaProdutos.FieldByName('COD_PRODUTO').Value:=qrProdutosEstoque.FieldByName('COD_PRODUTO').Value;
      qrTabelaProdutos.FieldByName('VALOR').Value:=edtValor.Value;
      qrTabelaProdutos.Post;
      qrTabelaProdutos.RefreshAll;
    end;
  end;

  if rbDisponiveis.Checked then
  begin
    qrProdutosEstoque.Next;
    gridProdutosDisponiveisClick(frmCadTabela);
  end
  else
  begin
    qrTabelaProdutos.Next;
    grdProdutosNaTabelaClick(frmCadTabela);
  end;
  edtValor.SetFocus;

end;

procedure TfrmCadTabela.BtGravarClick(Sender: TObject);
begin
  TbPrincipal.FieldByName('ITEMS').Value:=qrTabelaProdutos.RecordCount;
   inherited;
   pgcOutros.ActivePage := Visualizacao;
   btnImprimir.Visible := True;
   btnEmail.Visible    := True;
   AtualizaTela;
end;

procedure TfrmCadTabela.BtEditarClick(Sender: TObject);
begin
  inherited;
   pgcOutros.ActivePage := Visualizacao;
   AtualizaTela;
end;

procedure TfrmCadTabela.btnInsereRotaClick(Sender: TObject);
begin
  inherited;
   pgcOutros.ActivePage := TabCadastro;
   InserindoTabela  := True;

   edtValor.Clear;
end;

procedure TfrmCadTabela.BtCancelarClick(Sender: TObject);
begin
  inherited;
   pgcOutros.ActivePage := Visualizacao;
   InserindoTabela       := False;
   btnImprimir.Visible := True;
   btnEmail.Visible    := True;
end;

procedure TfrmCadTabela.BtAnteriorClick(Sender: TObject);
begin
  inherited;
   AtualizaTela
end;

procedure TfrmCadTabela.BtProximoClick(Sender: TObject);
begin
  inherited;
   AtualizaTela
end;

procedure TfrmCadTabela.BtExcluirClick(Sender: TObject);
begin
   descricao_auditoria := 'Excluiu a tabela ' + TbPrincipal.FieldByName('COD_TABELA').AsString + ' - ' + TbPrincipal.FieldByName('DESCRICAO').AsString;
   inherited;
   AtualizaTela
end;

procedure TfrmCadTabela.btnEditar2Click(Sender: TObject);
begin
  inherited;
   btnImprimir.Visible := False;
   btnEmail.Visible    := False;
   pgcOutros.ActivePage := TabCadastro;
   rbDisponiveis.Checked:=False;
   rbNaTabela.Checked:=True;
end;

procedure TfrmCadTabela.btnEmailClick(Sender: TObject);
var Anexo : string;
begin
  inherited;
   ppRegiaoCliente.Visible := False;
   if (MessageDlg('Deseja selecionar um cliente?', mtWarning, [mbYes, mbNo], 0) = mrYes) then
   begin
      frmModeloPesquisa := TfrmModeloPesquisa.Create(Application);
      frmModeloPesquisa.Tabela := qrCliente;
      if frmModeloPesquisa.ShowModal = mrok then
      begin
         qrClienteRelat.Close;
         qrClienteRelat.ParamByName('codcliente').Value := frmModeloPesquisa.TbPrincipal.FieldByName('COD_CLIENTE').Value;
         qrClienteRelat.Open;
         ppRegiaoCliente.Visible := True;
      end
      else
      begin
         frmModeloPesquisa.Destroy;
         Exit;
      end;
      frmModeloPesquisa.Destroy;
   end;

   Anexo                                := PastaTemporaria + '\tabela de preço.pdf';
   RelatTabelas.AllowPrintToFile        := True;
   RelatTabelas.ShowPrintDialog         := False;
   RelatTabelas.DeviceType              := 'PDF';
   RelatTabelas.TextFileName            := anexo;
   RelatTabelas.PDFSettings.Author      := 'SYSHOP 2.0';
   RelatTabelas.PDFSettings.Title       := 'TABELA DE PREÇOS!';
   RelatTabelas.PDFSettings.OpenPDFFile := False;
   RelatTabelas.Print;

   RelatTabelas.AllowPrintToFile        := True;
   RelatTabelas.ShowPrintDialog         := False;
   RelatTabelas.DeviceType              := 'Screen';
   RelatTabelas.TextFileName            := '';
   RelatTabelas.PDFSettings.Author      := '';
   RelatTabelas.PDFSettings.Title       := '';
   RelatTabelas.PDFSettings.OpenPDFFile := False;

   if EnviaEmail('','Tabela de preços', 'Em anexo a tabela de preço', Anexo) = False then
   begin
      MessageDlg('Não é possível enviar o E-Mail.'+#13+#10+'Verifique as configurações de E-Mail', mtWarning, [mbOK], 0);
   end;

   DeleteFile(Anexo);
end;

procedure TfrmCadTabela.btnImprimirClick(Sender: TObject);
begin
  inherited;
   try
     ppImagemCabecalho.Picture.LoadFromFile(Dados.tbConfig.FieldByName('LOCAL_IMAGENS').AsString+'cabecalho.jpg');
   except
   end;

   ppRegiaoCliente.Visible := False;
   if (MessageDlg('Deseja selecionar um cliente?', mtWarning, [mbYes, mbNo], 0) = mrYes) then
   begin
      frmModeloPesquisa := TfrmModeloPesquisa.Create(Application);
      frmModeloPesquisa.Tabela := qrCliente;
      if frmModeloPesquisa.ShowModal = mrok then
      begin
         qrClienteRelat.Close;
         qrClienteRelat.ParamByName('codcliente').Value := frmModeloPesquisa.TbPrincipal.FieldByName('COD_CLIENTE').Value;
         qrClienteRelat.Open;
         ppRegiaoCliente.Visible := True;
      end
      else
      begin
         frmModeloPesquisa.Destroy;
         Exit;
      end;
      frmModeloPesquisa.Destroy;
   end;

   if (MessageDlg('Deseja imprimir o cabeçalho?', mtWarning, [mbYes, mbNo], 0) = mrYes) then
      ppImagemCabecalho.Visible := True
   else
     ppImagemCabecalho.Visible := False;

   qrImpressao.Close;
   qrImpressao.ParamByName('codTabela').Value := TbPrincipal.FieldByName('COD_TABELA').Value;
   qrImpressao.Open;

   lblVersao.Text := ExtractFileName(Application.ExeName) + ' - ' +PegaVersao;
//   RelatTabelas.Print;

   ImpressaoBaseadaNoModelo(RelatTabelas,False, 'Tabela de cálculo - ' + edtDescricaoTabela.Text,'');
end;

procedure TfrmCadTabela.TabCadastroShow(Sender: TObject);
begin
  inherited;
   if edtDescricaoTabela.CanFocus then
      edtDescricaoTabela.SetFocus;
end;

procedure TfrmCadTabela.AtualizaTela;
begin
  qrTabelaProdutos.Close;
  qrTabelaProdutos.ParamByName('VARTABELA').Value:=TbPrincipal.FieldByName('COD_TABELA').Value;
  qrTabelaProdutos.Open;
end;

procedure TfrmCadTabela.btnExlcuiProdutoTabelaClick(Sender: TObject);
begin
  inherited;
  qrTabelaProdutos.Delete;
end;

procedure TfrmCadTabela.gridProdutosDisponiveisClick(Sender: TObject);
begin
  inherited;
  edtCodigo.Text:= qrProdutosEstoque.FieldByName('cod_produto').Value;
  edtProduto.Text:= qrProdutosEstoque.FieldByName('descricao ').Value;
end;

procedure TfrmCadTabela.edtPesquisaProdutoClick(Sender: TObject);
begin
  inherited;
   //==================== Pesquisa Produtos ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrProdutosEstoque;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Produtos';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
     qrProdutosEstoque.Locate('COD_PRODUTO', frmModeloPesquisa.TbPrincipal.FieldByName('COD_PRODUTO').Value ,[]);
     edtValor.SetFocus;
   end;  
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmCadTabela.edtCodigoExit(Sender: TObject);
begin
  inherited;
  edtProduto.Clear;
  if NOT qrProdutosEstoque.Locate('COD_PRODUTO', edtCodigo.Text ,[]) then
  begin
    if (MessageDlg('Produto não cadastrado! Deseja cadastrar?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
      btnIncluiProduto.Click;
  end;
end;

function TfrmCadTabela.ExisteNaTabela:Boolean;
begin
  qryPesquisa.Close;
  qryPesquisa.SQL.Clear;
  qryPesquisa.SQL.Add('SELECT * ');
  qryPesquisa.SQL.Add('  FROM TABELA_PRODUTOS ');
  qryPesquisa.SQL.Add('  WHERE COD_PRODUTO=:VARPRODUTO AND COD_TABELA =:VARTABELA ');
  qryPesquisa.ParamByName('VARPRODUTO').Value:=qrProdutosEstoque.FieldByName('COD_PRODUTO').Value;
  qryPesquisa.ParamByName('VARTABELA').Value:=TbPrincipal.FieldByName('COD_TABELA').Value;
  qryPesquisa.Open;

  if qryPesquisa.RecordCount > 0 then
    Result:=True
  else Result:=False;
end;
procedure TfrmCadTabela.btnIncluiProdutoClick(Sender: TObject);
begin
  inherited;
  frmCadProduto := TfrmCadProduto.Create(Application);
  frmCadProduto.OutraTela := True;
  if edtProduto.Text <> '' then
    edtCodigo.Clear;

  if edtCodigo.Text <> '' then
    frmCadProduto.TbPrincipal.FieldByName('COD_PRODUTO').Value := edtCodigo.Text;
  frmCadProduto.BtInserirClick(Self);
  frmCadProduto.ShowModal;

   //============== Localiza o novo produto ============
  qrProdutosEstoque.RefreshAll;
  qrProdutosEstoque.Locate('COD_PRODUTO', frmCadProduto.TbPrincipal.FieldByName('COD_PRODUTO').Value ,[]);
  edtCodigo.Text:= qrProdutosEstoque.FieldByName('cod_produto').Value;
  edtProduto.Text:= qrProdutosEstoque.FieldByName('descricao ').Value;
  edtValor.SetFocus;
  frmCadProduto.Destroy;
  AtualizaTela;
  Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmCadTabela.gridProdutosDisponiveisCellGainFocus(
  Sender: TObject; ACol, ARow: Integer);
begin
  inherited;
  AlterandoTabela:=False;
  InserindoTabela:=True;
end;

procedure TfrmCadTabela.grdProdutosNaTabelaClick(Sender: TObject);
begin
  inherited;
  if qrProdutosEstoque.Locate('COD_PRODUTO', qrTabelaProdutos.FieldByName('COD_PRODUTO').Value, []) then
  begin
    edtCodigo.Text:= qrProdutosEstoque.FieldByName('cod_produto').Value;
    edtProduto.Text:= qrProdutosEstoque.FieldByName('descricao ').Value;
    edtValor.Text:= qrTabelaProdutos.FieldByName('valor').Value;
  end;
  AlterandoTabela:=True;
  InserindoTabela:=False;
end;

procedure TfrmCadTabela.rbDisponiveisClick(Sender: TObject);
begin
  inherited;
   rbDisponiveis.Checked:=True;
   rbNaTabela.Checked:=False;
end;

procedure TfrmCadTabela.rbNaTabelaClick(Sender: TObject);
begin
  inherited;
   rbDisponiveis.Checked:=False;
   rbNaTabela.Checked:=True;

end;

end.



