unit dmVendasUnt;

interface

uses
  SysUtils, Classes, DBXpress, DB, SqlExpr, FMTBcd, Provider, DBClient;

type
  TdmVendas = class(TDataModule)
    cnxVendas: TSQLConnection;
    qryCliente: TSQLQuery;
    dspCliente: TDataSetProvider;
    cdsCliente: TClientDataSet;
    dtsCliente: TDataSource;
    qryProduto: TSQLQuery;
    dspProduto: TDataSetProvider;
    cdsProduto: TClientDataSet;
    dtsProduto: TDataSource;
    qryVenda: TSQLQuery;
    dspVenda: TDataSetProvider;
    cdsVenda: TClientDataSet;
    dtsVenda: TDataSource;
    qryItemVenda: TSQLQuery;
    cdsItemVenda: TClientDataSet;
    dtsItemVenda: TDataSource;
    dtsVendaItemMD: TDataSource;
    cdsVendaPED_NUM: TIntegerField;
    cdsVendaPED_DTA_ABE: TDateField;
    cdsVendaPED_SIT: TStringField;
    cdsVendaPED_DTA_FEC: TDateField;
    cdsVendaPED_FOR_PAG: TStringField;
    cdsVendaPED_DES_TOT: TIntegerField;
    cdsVendaCLI_COD: TIntegerField;
    cdsVendaqryItemVenda: TDataSetField;
    cdsProdutoPRO_COD: TIntegerField;
    cdsProdutoPRO_DES: TStringField;
    cdsProdutoPRO_UNI: TStringField;
    cdsProdutoPRO_QTD_EST: TSmallintField;
    cdsProdutoPRO_VAL_VEN: TFMTBCDField;
    cdsClienteCLI_COD: TIntegerField;
    cdsClienteCLI_NOM: TStringField;
    cdsClienteCLI_RUA: TStringField;
    cdsClienteCLI_NUM_RUA: TSmallintField;
    cdsClienteCLI_BAI: TStringField;
    cdsClienteCLI_CID: TStringField;
    cdsClienteCLI_UF: TStringField;
    cdsClienteCLI_CEP: TStringField;
    cdsClienteCLI_TEL_FIX: TStringField;
    cdsClienteCLI_TEL_CEL: TStringField;
    cdsItemVendaPED_NUM: TIntegerField;
    cdsItemVendaPRO_COD: TIntegerField;
    cdsItemVendaITE_QTD: TSmallintField;
    cdsItemVendaITE_VAL_UNI: TFMTBCDField;
    cdsItemVendaPRO_DESCRICAO: TStringField;
    cdsItemVendaITE_TOTAL_DO_ITEM: TCurrencyField;
    cdsItemVendaITE_TOTAL_DA_VENDA: TAggregateField;
    spCodigoVenda: TSQLQuery;
    procedure evEnviarParaServidor(DataSet: TDataSet);
    procedure evReconciliarErro(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure evCalcularTotalItem(DataSet: TDataSet);
    procedure evEnviarAtualizarRegistro(DataSet: TDataSet);
    procedure evAtribuirNumeroVenda(DataSet: TDataSet);
  private
    { Private declarations }
    // função retorna o numero gerado através da execução do
    // procedimento armazenado
    function pegarNovoNumero : integer ;
  public
    { Public declarations }
  end;

var
  dmVendas: TdmVendas;

implementation

uses frmReconciliarErroUnt;

{$R *.dfm}

procedure TdmVendas.evEnviarParaServidor(DataSet: TDataSet);
begin
  with DataSet as TClientDataSet do
    ApplyUpdates(0);
end;

procedure TdmVendas.evReconciliarErro(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
   Action := HandleReconcileError(DataSet,UpdateKind,E);
end;

procedure TdmVendas.evCalcularTotalItem(DataSet: TDataSet);
begin
  cdsItemVendaITE_TOTAL_DO_ITEM.AsCurrency :=
  (cdsItemVendaITE_QTD.AsInteger *
   cdsItemVendaITE_VAL_UNI.AsCurrency);
end;

procedure TdmVendas.evEnviarAtualizarRegistro(DataSet: TDataSet);
 var
   estado : TUpdateStatus ;
begin
  with DataSet as TClientDataSet do
    begin
      estado := UpdateStatus ;
      ApplyUpdates(0);
      //verifica o estado anterior
      if estado = usInserted then
        begin
          // fecha o CDS
          close ;
         // abre o CDS
          open ;
         // posiciona no ultimo registro
          last ;
       end;
   end;

end;
function TdmVendas.pegarNovoNumero: integer;
begin
  // utiliza o operador com "with" para enviar várias mensagens
  // para o componente "SQLQuery" que tem a chamada do SP
  with spCodigoVenda do
    begin
      //fecha a query
      close ;
      //abre a query;
      open;
      //pega o numero gerado
      result := FieldByName('V_CODIGO').AsInteger ;
   end; // with   
end;

procedure TdmVendas.evAtribuirNumeroVenda(DataSet: TDataSet);
begin
  DataSet.FieldByName('PED_NUM').AsInteger :=
  pegarNovoNumero ;
end;

end.
