unit DeliPrincipal;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, RxGIF, Grids, DBGrids, StdCtrls, Buttons, Db, DBTables,
  ComCtrls;

type
  TfmPrincipal = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    DBGrid1: TDBGrid;
    Panel4: TPanel;
    Image1: TImage;
    Label1: TLabel;
    btPendentes: TSpeedButton;
    btNovo: TSpeedButton;
    btImprime: TSpeedButton;
    btAltera: TSpeedButton;
    btLibera: TSpeedButton;
    Panel5: TPanel;
    btFim: TSpeedButton;
    QueryPedidos: TQuery;
    dsQPedidos: TDataSource;
    btElimina: TSpeedButton;
    btProdutos: TSpeedButton;
    QueryPedidosNumero: TIntegerField;
    QueryPedidosData: TDateField;
    QueryPedidosHora: TTimeField;
    QueryPedidosCliente: TIntegerField;
    QueryPedidosValor: TCurrencyField;
    QueryPedidosSituacao: TBooleanField;
    btClientes: TSpeedButton;
    QueryPedidosNome: TStringField;
    QueryPedidosXSituacao: TStringField;
    Panel6: TPanel;
    btDia: TSpeedButton;
    DateTimePicker1: TDateTimePicker;
    btTodos: TSpeedButton;
    procedure btNovoClick(Sender: TObject);
    procedure btProdutosClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure btFimClick(Sender: TObject);
    procedure btClientesClick(Sender: TObject);
    procedure btAlteraClick(Sender: TObject);
    procedure btEliminaClick(Sender: TObject);
    procedure btLiberaClick(Sender: TObject);
    procedure QueryPedidosCalcFields(DataSet: TDataSet);
    procedure btImprimeClick(Sender: TObject);
    procedure btPendentesClick(Sender: TObject);
    procedure btTodosClick(Sender: TObject);
    procedure btDiaClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmPrincipal: TfmPrincipal;


implementation
        uses Produtos, Pedido, base, Clientes, Global,
             Cupom;
{$R *.DFM}

procedure TfmPrincipal.btNovoClick(Sender: TObject);
begin
        {Inclui Novo Pedido}

        { Incrementa Código do Pedido na Tabela de Informativo,
          Simulando um Campo AutoIncrement }

        Dados.TbInformativo.Edit; // Coloca a Tabela em Modo de Edição
        Dados.tbInformativoPedido.Value:=Dados.tbInformativoPedido.Value+1; // Incrementa
        Dados.tbInformativo.Post; // Confirma a Alteração

        { Inicia uma Transação no BancodeDados }
        Dados.BancodeDados.StartTransaction;

        { Coloca a tabela de produtos em modo de inserção }
        Dados.tbPedidos.Append;

        {Atribui o valor do campo Produto(Informativo) ao campo Codigo(Produto)}
        Dados.tbPedidosNumero.Value:=Dados.tbInformativoPedido.Value;

        { Coloca as informações Iniciais do pedido}
        Dados.tbPedidosData.Value:=Date;
        Dados.tbPedidosHora.Value:=Time;

        { Chama a tela de Pedidos }
        FmPedidos.ShowModal;

        { Atualiza a Query }
        QueryPedidos.Close;
        QueryPedidos.Open;

end;

procedure TfmPrincipal.btProdutosClick(Sender: TObject);
begin
        {Chama Tela de Produtos}
        FmProdutos.ShowModal;
end;

procedure TfmPrincipal.FormActivate(Sender: TObject);
begin
        QueryPedidos.Close;
        QueryPedidos.Open;
        DateTimePicker1.Date:=Date;

end;

procedure TfmPrincipal.btFimClick(Sender: TObject);
begin
        {Finaliza Sistema}
        Close;
end;

procedure TfmPrincipal.btClientesClick(Sender: TObject);
begin
        {Chama Tela de Clientes}
        Tela:='PRINCIPAL';
        FmClientes.ShowModal;
end;

procedure TfmPrincipal.btAlteraClick(Sender: TObject);
begin
        {Altera Pedido}

        { Posiciona o Ponteiro de Registros da Tabela de Pedidos
          de acordo com a Query}

        Dados.tbPedidos.FindKey([QueryPedidosNumero.Value]);

        { Inicia uma Transação no BancodeDados }
        Dados.BancodeDados.StartTransaction;

        { Coloca a tabela de produtos em modo de inserção }
        Dados.tbPedidos.Edit;

        { Chama a tela de Pedidos }
        FmPedidos.ShowModal;

        { Atualiza a Query }
        QueryPedidos.Close;
        QueryPedidos.Open;

end;

procedure TfmPrincipal.btEliminaClick(Sender: TObject);
begin
        { Rotinas para Exclusão de Pedidos}

        { Pergunta ao usuário sobre a Exclusão do Pedido}

 if Application.MessageBox(
         PCHAR('Deseja Excluir o Pedido Número ['+InttoStr(QueryPedidosNumero.Value)+']'),
         'Exclusão de Pedidos',
         MB_YESNO + MB_DEFBUTTON1)= IDYes then
        begin
                { Posiciona o Ponteiro de Registros da Tabela de Pedidos
                de acordo com a Query}

                Dados.tbPedidos.FindKey([QueryPedidosNumero.Value]);

                { Posiciona a tabela de Itens no primeiro registro }
                Dados.tbItens.First;

                { Laço para eliminar o valor dos itens}
                while not(Dados.tbItens.Eof) do
                        begin
                                Dados.TbItens.Delete;
                        end;

                { Elimina o Pedido em definitivo }

                Dados.TbPedidos.delete;

                QueryPedidos.Close;
                QueryPedidos.Open;


        end;

end;

procedure TfmPrincipal.btLiberaClick(Sender: TObject);
begin
        { Rotinas para Liberar Pedidos}

        { Pergunta ao usuário sobre a Liberação do Pedido}

 if Application.MessageBox(
         PCHAR('Deseja Liberar o Pedido Número ['+InttoStr(QueryPedidosNumero.Value)+']'),
         'Liberação de Pedidos',
         MB_YESNO + MB_DEFBUTTON1)= IDYes then
        begin
                { Posiciona o Ponteiro de Registros da Tabela de Pedidos
                de acordo com a Query}

                Dados.tbPedidos.FindKey([QueryPedidosNumero.Value]);


                { Edita a tabela de Pedidos, atribuindo um novo valor ao
                  campo Situacao }
                dados.tbPedidos.Edit;
                dados.tbPedidosSituacao.Value:=True;
                dados.tbPedidos.Post;

        end;

 { Pergunta se deseja imprimir o Pedido }

 if Application.MessageBox(
         PCHAR('Deseja Imprimir o Pedido Número ['+InttoStr(QueryPedidosNumero.Value)+']'),
         'Liberação de Pedidos',
         MB_YESNO + MB_DEFBUTTON1)= IDYes then
        begin
                {Imprime Pedido}

                { Posiciona o Ponteiro de Registros da Tabela de Pedidos
                de acordo com a Query}

                Dados.tbPedidos.FindKey([QueryPedidosNumero.Value]);
                FmCupom.QrCupom.Preview;

        end;



end;

procedure TfmPrincipal.QueryPedidosCalcFields(DataSet: TDataSet);
begin
 if QueryPedidosSituacao.Value=True then QueryPedidosXSituacao.Value:='LIBERADO' else
           QueryPedidosXSituacao.Value:='em ABERTO';

end;

procedure TfmPrincipal.btImprimeClick(Sender: TObject);
begin
        {Imprime Pedido}

        { Posiciona o Ponteiro de Registros da Tabela de Pedidos
          de acordo com a Query}

        Dados.tbPedidos.FindKey([QueryPedidosNumero.Value]);
        FmCupom.QrCupom.Preview;

end;

procedure TfmPrincipal.btPendentesClick(Sender: TObject);
begin

        { Fecha a Query }
        QueryPedidos.Close;

        { Limpa a Instrução SQL da Query }
        QueryPedidos.SQL.Clear;

        { Adiciona Instrução SQL para selecionar registros
          da tabela de pedidos}
        QueryPedidos.SQL.ADD('Select * From Pedidos');

        { Adiciona Instrução SQL para filtrar apenas os
          registros pendentes }
        QueryPedidos.SQL.ADD('WHERE Situacao=False or Situacao Is Null');

        { Abre a Query}
        QueryPedidos.Open;

end;

procedure TfmPrincipal.btTodosClick(Sender: TObject);
begin

        { Fecha a Query }
        QueryPedidos.Close;

        { Limpa a Instrução SQL da Query }
        QueryPedidos.SQL.Clear;

        { Adiciona Instrução SQL para selecionar registros
          da tabela de pedidos}
        QueryPedidos.SQL.ADD('Select * From Pedidos');

        { Abre a Query}
        QueryPedidos.Open;

end;

procedure TfmPrincipal.btDiaClick(Sender: TObject);
begin

        { Fecha a Query }
        QueryPedidos.Close;

        { Limpa a Instrução SQL da Query }
        QueryPedidos.SQL.Clear;

        { Adiciona Instrução SQL para selecionar registros
          da tabela de pedidos}
        QueryPedidos.SQL.ADD('Select * From Pedidos');

        { Adiciona Instrução SQL para filtrar apenas os
          registros pendentes }
        QueryPedidos.SQL.ADD('WHERE Data=:DataPedido');

        QueryPedidos.ParamByName('DataPedido').AsDate:=DateTimePicker1.Date;

        { Abre a Query}
        QueryPedidos.Open;

end;

end.
