unit AtendimentoCliente;
                                 
interface

uses
  Windows, system.UItypes, IB_Access,  Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TelaComum, StdCtrls, IB_Controls, ExtCtrls, IB_Grid, Mask,
  IB_Components, Buttons,  IBODataset,  Menus, ImgList, System.ImageList;

type
  TfrmAtendimentoCliente = class(TfrmTelaComum)
    edtTipoAtendimento: TIB_LookupCombo;
    edtDescricao: TIB_Memo;
    qrTipoAtendimento: TIB_Query;
    dsrTipoAtendimento: TIB_DataSource;
    IB_CheckBox1: TIB_CheckBox;
    BitBtn1: TBitBtn;
    Panel4: TPanel;
    Label3: TLabel;
    Label4: TLabel;
    IB_Text1: TIB_Text;
    IB_Text2: TIB_Text;
    IB_Text3: TIB_Text;
    Label1: TLabel;
    IB_Text4: TIB_Text;
    IB_Text5: TIB_Text;
    Label5: TLabel;
    Label6: TLabel;
    IB_Text6: TIB_Text;
    Label8: TLabel;
    qrSetor: TIB_Query;
    dsrSetor: TIB_DataSource;
    edtSetor: TIB_LookupCombo;
    popTipoAtendimento: TPopupMenu;
    CadastrarTiposdeAtendimentos1: TMenuItem;
    popSetor: TPopupMenu;
    CadastrarSetor1: TMenuItem;
    PesquisarTiposdeAtendimentos1: TMenuItem;
    PsquisarSetores1: TMenuItem;
    edtCodTipoAtendimento: TEdit;
    edtCodSetor: TEdit;
    qrUsuario: TIB_Query;
    dsrUsuario: TIB_DataSource;
    procedure BtGravarClick(Sender: TObject);
    procedure BtCancelarClick(Sender: TObject);
    procedure edtTipoAtendimentoChange(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure edtDescricaoKeyPress(Sender: TObject; var Key: Char);
    procedure CadastrarTiposdeAtendimentos1Click(Sender: TObject);
    procedure CadastrarSetor1Click(Sender: TObject);
    procedure PesquisarTiposdeAtendimentos1Click(Sender: TObject);
    procedure edtCodTipoAtendimentoExit(Sender: TObject);
    procedure edtCodSetorExit(Sender: TObject);
    procedure edtCodTipoAtendimentoKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure edtCodSetorKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure PsquisarSetores1Click(Sender: TObject);
    procedure edtSetorChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmAtendimentoCliente: TfrmAtendimentoCliente;
  CodigoDeErro_Tabela:Integer;

implementation

uses DataModulo, CadTipoAtendimento, CadCliente, CadSetor, ModeloPesquisa,
  Rotinas;

{$R *.dfm}

procedure TfrmAtendimentoCliente.BtGravarClick(Sender: TObject);
begin
   if edtTipoAtendimento.Text = '' then
   begin
      MessageDlg('Informe o tipo de atendimento', mtWarning, [mbOK], 0);
      edtTipoAtendimento.SetFocus;
      Exit;
   end;

   if edtSetor.Text = '' then
   begin
      MessageDlg('Selecione o setor responsável', mtInformation, [mbOK], 0);
      edtSetor.SetFocus;
      Exit;
   end;
   if edtDescricao.Text = '' then
   begin
      MessageDlg('Informe a descrição para o atendimento', mtWarning, [mbOK], 0);
      edtDescricao.SetFocus;
      Exit;
   end;

   frmCadCliente.tbAtendimentoCliente.FieldByName('COD_TIPO_ATENDIMENTO').Value := qrTipoAtendimento.FieldByName('COD_TIPO_ATENDIMENTO').Value;
   frmCadCliente.tbAtendimentoCliente.FieldByName('COD_SETOR').Value            := qrSetor.FieldByName('COD_SETOR').Value;
   if frmCadCliente.tbAtendimentoCliente.Modified then
      frmCadCliente.tbAtendimentoCliente.FieldByName('COD_USUARIO').Value  := Dados.qrUsuario.FieldByName('COD_USUARIO').Value;

   if frmCadCliente.tbAtendimentoCliente.State in [dssInsert] then
   begin
      descricao_auditoria := 'CADASTROU O ATENDIMENTO '+ qrTipoAtendimento.FieldByName('DESCRICAO').AsString + ' PARA O CLIENTE ' + frmCadCliente.TbPrincipal.FieldByName('CNPJ').AsString+' '+ frmCadCliente.TbPrincipal.FieldByName('RAZAOSOCIAL').AsString;
   end;

   if frmCadCliente.tbAtendimentoCliente.State in [dssEdit] then
   begin
      descricao_auditoria := 'ALTEROU O ATENDIMENTO '+ qrTipoAtendimento.FieldByName('DESCRICAO').OldAsString + ' N° '+ frmCadCliente.tbAtendimentoCliente.FieldByName('COD_ATEND_CLIENTE').OldAsString + 'DO CLIENTE ' + frmCadCliente.TbPrincipal.FieldByName('CNPJ').OldAsString+' '+ frmCadCliente.TbPrincipal.FieldByName('RAZAOSOCIAL').OldAsString;
   end;

   GravaAuditoria(False,frmCadCliente.tbAtendimentoCliente);

   //INICIO================= TESTA A CHAvE DA TABELA =============
   try
      frmCadCliente.tbAtendimentoCliente.Post;
      except
         if (CodigoDeErro_Tabela = 335544665) then
         begin
            frmCadCliente.tbAtendimentoCliente.FieldByName('COD_ATEND_CLIENTE').Value := frmCadCliente.tbAtendimentoCliente.FieldByName('COD_ATEND_CLIENTE').AsInteger +1;
            BtGravar.Click;
         end;
   end;
  //FIM==============================
   Close;
  inherited;
end;

procedure TfrmAtendimentoCliente.BtCancelarClick(Sender: TObject);
begin
  inherited;
  frmCadCliente.tbAtendimentoCliente.Cancel;
  Close;
end;

procedure TfrmAtendimentoCliente.edtTipoAtendimentoChange(Sender: TObject);
begin
  inherited;
   if edtTipoAtendimento.Text = '' then
   begin
      edtCodTipoAtendimento.Clear;
      Exit;
   end;

   if frmCadCliente.tbAtendimentoCliente.State in [dssinsert] then
      frmCadCliente.tbAtendimentoCliente.FieldByName('avisar').Value := qrTipoAtendimento.FieldByName('avisar').AsString;

    edtCodTipoAtendimento.Text := qrTipoAtendimento.FieldByName('COD_TIPO_ATENDIMENTO').AsString;

end;

procedure TfrmAtendimentoCliente.BitBtn1Click(Sender: TObject);
begin
  inherited;
   if MessageDlg('Deseja realmente excluir o atendimento?', mtConfirmation, [mbYes, mbNo], 0) =mryes then
   begin
      if frmCadCliente.tbAtendimentoCliente.State in [dssEdit] then
      begin
         frmCadCliente.tbAtendimentoCliente.Cancel;
         descricao_auditoria := 'EXCLUI O ATENDIMENTO N° '+ frmCadCliente.tbAtendimentoCliente.FieldByName('COD_ATEND_CLIENTE').AsString  +' DO CLIENTE '+ frmCadCliente.TbPrincipal.FieldByName('CNPJ').AsString+' '+ frmCadCliente.TbPrincipal.FieldByName('RAZAOSOCIAL').AsString;
         GravaAuditoria(True,frmCadCliente.tbAtendimentoCliente);
         frmCadCliente.tbAtendimentoCliente.Delete;
      end;
   end;
   Close;
end;

procedure TfrmAtendimentoCliente.FormCreate(Sender: TObject);
begin
  inherited;
   Chave_Tabela := 'COD_ATEND_CLIENTE';
   frmCadCliente.tbAtendimentoCliente.Open;
   qrTipoAtendimento.Open;
   qrSetor.Open;
   qrUsuario.Open;

   if frmCadCliente.tbAtendimentoCliente.State in [dssInsert] then
   begin
      qrUsuario.Locate('COD_USUARIO', Dados.qrUsuario.FieldByName('COD_USUARIO').Value, []);
      if qrSetor.Locate('COD_SETOR',Dados.qrUsuario.FieldByName('COD_SETOR').Value, []) = False then
      begin
         if not qrSetor.Bof then
         begin
            qrSetor.First;
            qrSetor.Prior;
         end;
      end;
   end
   else
   begin
      qrUsuario.Locate('COD_USUARIO', frmCadCliente.tbAtendimentoCliente.FieldByName('COD_USUARIO').Value, []);
      qrSetor.Locate('COD_SETOR',frmCadCliente.tbAtendimentoCliente.FieldByName('COD_SETOR').Value, []);
   end;

   if not qrTipoAtendimento.Bof then
   begin
      qrTipoAtendimento.First;
      qrTipoAtendimento.Prior;
   end;

end;

procedure TfrmAtendimentoCliente.edtDescricaoKeyPress(Sender: TObject;
  var Key: Char);
begin
  inherited;
   Key := UpCase(KEY);
end;

procedure TfrmAtendimentoCliente.CadastrarTiposdeAtendimentos1Click(
  Sender: TObject);
var codTipoAtendimento : Integer;
begin
  inherited;
   frmCadTipoAtendimento := TfrmCadTipoAtendimento.Create(Self);
   frmCadTipoAtendimento.OutraTela := True;
   frmCadTipoAtendimento.BtInserir.Click;
   frmCadTipoAtendimento.ShowModal;
   codTipoAtendimento := frmCadTipoAtendimento.TbPrincipal.FieldByName('COD_TIPO_ATENDIMENTO').Value;
   frmCadTipoAtendimento.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrTipoAtendimento.RefreshAll;
   qrTipoAtendimento.Locate('COD_TIPO_ATENDIMENTO',codTipoAtendimento,[]);
end;
procedure TfrmAtendimentoCliente.CadastrarSetor1Click(Sender: TObject);
var cod : Integer;
begin
  inherited;
   frmCadSetor := TfrmCadSetor.Create(Self);
   frmCadSetor.OutraTela := True;
   frmCadSetor.BtInserir.Click;
   frmCadSetor.ShowModal;
   cod := frmCadSetor.TbPrincipal.FieldByName('COD_SETOR').Value;
   frmCadSetor.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
   qrSetor.RefreshAll;
   qrSetor.Locate('COD_SETOR',cod,[]);
end;

procedure TfrmAtendimentoCliente.PesquisarTiposdeAtendimentos1Click(
  Sender: TObject);
begin
  inherited;
   //==================== Pesquisa ´tipo de atendimento ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrTipoAtendimento ;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Tipos de Atendimento';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrTipoAtendimento.Locate('COD_TIPO_ATENDIMENTO', frmModeloPesquisa.TbPrincipal.FieldByName('COD_TIPO_ATENDIMENTO').Value ,[]);

   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;
end;

procedure TfrmAtendimentoCliente.edtCodTipoAtendimentoExit(
  Sender: TObject);
var cod : Integer;
begin
   inherited;
   if edtCodTipoAtendimento.Text = '' then
      Exit;

   try
      cod := StrToInt(edtCodTipoAtendimento.Text)
      except
         MessageDlg('O código informado não é válido', mtInformation, [mbOK], 0);
         edtCodTipoAtendimento.SetFocus;
         Exit;
   end;

   if not qrTipoAtendimento.Locate('COD_TIPO_ATENDIMENTO',cod,[]) then
   begin
      if not qrTipoAtendimento.Bof then
      begin
         qrTipoAtendimento.First;
         qrTipoAtendimento.Prior;
      end;
      MessageDlg('Tipo de atendimento não disponível', mtInformation, [mbOK], 0);
   end;
end;

procedure TfrmAtendimentoCliente.edtCodSetorExit(Sender: TObject);
var cod : Integer;
begin
   inherited;
   if edtCodSetor.Text = '' then
      Exit;

   try
      cod := StrToInt(edtCodSetor.Text)
      except
         MessageDlg('O código informado não é válido', mtInformation, [mbOK], 0);
         edtCodTipoAtendimento.SetFocus;
         Exit;
   end;

   if not qrSetor.Locate('COD_SETOR',cod,[]) then
   begin
      if not qrSetor.Bof then
      begin
         qrSetor.First;
         qrSetor.Prior;
      end;
      MessageDlg('Setor não disponível', mtInformation, [mbOK], 0);
   end;
end;

procedure TfrmAtendimentoCliente.edtCodTipoAtendimentoKeyDown(
  Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  inherited;
   if (Key =  VerificaAtalho(Dados.tbConfig.FieldByName('ATALHO_PESQUISA').AsString)) and (edtCodTipoAtendimento.Focused or edtTipoAtendimento.Focused)then
      PesquisarTiposdeAtendimentos1Click(Self);
end;

procedure TfrmAtendimentoCliente.edtCodSetorKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
   if (Key =  VerificaAtalho(Dados.tbConfig.FieldByName('ATALHO_PESQUISA').AsString)) and (edtCodSetor .Focused or edtSetor.Focused)then
    PsquisarSetores1Click(SELF)
end;

procedure TfrmAtendimentoCliente.PsquisarSetores1Click(Sender: TObject);
begin
  inherited;
   //==================== Pesquisa setores ============
   frmModeloPesquisa        := TfrmModeloPesquisa.Create(Application);
   frmModeloPesquisa.Tabela := qrSetor;
   frmModeloPesquisa.lbltitulo.Caption := 'Pesquisa Setores';
   if frmModeloPesquisa.ShowModal = mrok then
   begin
      qrSetor.Locate('COD_SETOR', frmModeloPesquisa.TbPrincipal.FieldByName('COD_SETOR').Value ,[]);

   end;
   frmModeloPesquisa.Destroy;
   Screen.OnActiveControlChange := TrocaCor;

end;

procedure TfrmAtendimentoCliente.edtSetorChange(Sender: TObject);
begin
  inherited;
   if edtSetor.Text = '' then
   begin
      edtCodSetor.Clear;
      Exit;
   end;

   edtCodSetor.Text := qrSetor.FieldByName('COD_SETOR').AsString;
end;

end.

