unit base;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables;

type
  TDados = class(TDataModule)
    dsPedidos: TDataSource;
    tbPedidos: TTable;
    dsProdutos: TDataSource;
    tbProdutos: TTable;
    dsClientes: TDataSource;
    tbClientes: TTable;
    BancodeDados: TDatabase;
    dsItens: TDataSource;
    tbItens: TTable;
    tbProdutosCodigo: TIntegerField;
    tbProdutosDescricao: TStringField;
    tbProdutosPreco_Unit: TCurrencyField;
    tbClientesCodigo: TIntegerField;
    tbClientesNome: TStringField;
    tbClientesEndereco: TStringField;
    tbClientesTelefone: TStringField;
    tbPedidosNumero: TIntegerField;
    tbPedidosData: TDateField;
    tbPedidosHora: TTimeField;
    tbPedidosCliente: TIntegerField;
    tbPedidosValor: TCurrencyField;
    tbPedidosSituacao: TBooleanField;
    tbItensNumero: TIntegerField;
    tbItensProduto: TIntegerField;
    tbItensQuantidade: TIntegerField;
    tbItensValor: TCurrencyField;
    dsInformativo: TDataSource;
    tbInformativo: TTable;
    tbInformativoCliente: TIntegerField;
    tbInformativoProduto: TIntegerField;
    tbInformativoPedido: TIntegerField;
    tbItensDescricao: TStringField;
    tbItensPreco: TCurrencyField;
    tbPedidosNome: TStringField;
    tbItensTotal: TCurrencyField;
    tbPedidosXSituacao: TStringField;
    tbPedidosNomeCliente: TStringField;
    tbPedidosEndereco: TStringField;
    tbPedidosTelefoneCliente: TStringField;
    procedure DataModuleCreate(Sender: TObject);
    procedure tbItensCalcFields(DataSet: TDataSet);
    procedure tbItensAfterPost(DataSet: TDataSet);
    procedure tbItensProdutoChange(Sender: TField);
    procedure tbPedidosCalcFields(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Dados: TDados;

implementation

{$R *.DFM}

procedure TDados.DataModuleCreate(Sender: TObject);
begin
        {Conecta Banco de Dados}
        BancodeDados.Connected:=True;

        {Abre as Tabelas}
        TbClientes.Open;
        TbPedidos.Open;
        tbItens.Open;
        tbProdutos.Open;
        tbInformativo.Open;

end;

procedure TDados.tbItensCalcFields(DataSet: TDataSet);
begin
        tbItensTotal.Value:=tbItensQuantidade.Value*tbItensPreco.Value;
end;

procedure TDados.tbItensAfterPost(DataSet: TDataSet);
var
        TotalPedido:Real; // declara variavel para calcular pedido
begin
        { Rotina para Calcular o Valor Total do Pedido}

        { desabilita controles das tabelas TbPEdidos, TbItens
          favorecendo o processamento dos dados}
        tbPedidos.DisableControls;
        tbItens.DisableControls;

        { Vai para o inicio da tabela de itens}
        tbItens.First;

        { Zera variável TotalPedido}

        TotalPedido:=0;

        { Laço para calcular o valor dos itens}
        while not(tbItens.Eof) do
                begin
                        TotalPedido:=TotalPedido+tbItensTotal.Value;
                        TbItens.Next;
                end;

        { Atribui valor ao campo Valor(Pedido) a variável TotalPedido}

        tbPedidos.Edit;
        tbPedidosValor.Value:=TotalPedido;
        tbPedidos.Post;

        { Habilita os controles das tabelas }
        tbPedidos.EnableControls;
        tbItens.EnableControls;


end;

procedure TDados.tbItensProdutoChange(Sender: TField);
begin
        { Altera o valor do campo VALOR
          Esta atribuição faz com que o Preço Unitário
          do Produto na tabela de itens, seja automaticamente
          calculado de acordo com a tabela de Produtos.
        }

        tbItensValor.Value:=tbItensPreco.Value;

end;

procedure TDados.tbPedidosCalcFields(DataSet: TDataSet);
begin
        if tbPedidosSituacao.Value=True then tbPedidosXSituacao.Value:='LIBERADO' else
           tbPedidosXSituacao.Value:='em ABERTO';

end;

end.
