Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit DescontoUnitario;
- interface
- uses SysUtils,DB,AcbrUtil;
- type TTipoDesconto = (aTpValor,aTpPercentual);
- type IDescontoUnitario = interface
- ['{58F2148F-3468-4B8F-8D18-DF84B034FEB0}']
- function AddNumerodaVenda(NumVenda: INteger): Integer;
- function AddPosicaodoItem(Posicao: Integer): Integer;
- function AddValorUnitarioProd(aValor: Currency): Currency;
- function AddValordoDesconto(aValor: Currency): Currency;
- Function AddQuantidade(aQuantidade: Currency): Currency;
- function AddPercentualDesconto(aValor: Currency): Currency;
- Function VerificaPermissaodoUsuario(apercentdescUser: Currency): Boolean;
- Procedure ContabilizaValordoDesconto(aDatasetVendas,aDatasetItens: Tdataset);
- end;
- type TDescontoUnitario = class(TInterfacedObject,IDescontoUnitario )
- private
- FTipodesconto: TTipoDesconto;
- NumeroVenda: integer;
- PosicaoItem: INteger;
- ValorUn: Currency;
- ValorDesconto: Currency;
- Quantidade: Currency;
- PercentualDesconto: Currency;
- {Private declaration}
- protected
- {Protected declaration}
- public
- {Public declaration declaration}
- function New: IDescontoUnitario;
- function AddNumerodaVenda(NumVenda: INteger): Integer;
- function AddPosicaodoItem(Posicao: Integer): Integer;
- function AddValorUnitarioProd(aValor: Currency): Currency;
- function AddPercentualDesconto(aValor: Currency): Currency;
- function AddValordoDesconto(aValor: Currency): Currency;
- Function AddQuantidade(aQuantidade: Currency): Currency;
- function RetornaPct(adescontoValue,aValeUn,aQtd: Currency): Currency;
- Function VerificaPermissaodoUsuario(apercentdescUser: Currency): Boolean;
- Function CalulaValordoDesconto: Currency;
- Procedure ContabilizaValordoDesconto(aDatasetVendas,aDatasetItens: Tdataset);
- property Tipodesconto: TTipoDesconto read FTipodesconto write FTipodesconto;
- procedure AfterConstruction; Override;
- procedure BeforeDestruction; Override;
- constructor Create; (*Metodos do Constructor*)
- destructor Destroy; override;
- published
- {Protected declaration}
- end;
- implementation
- { TDescontoUnitario }
- uses FuncoesLibraryClass;
- function TDescontoUnitario.AddNumerodaVenda(NumVenda: INteger): Integer;
- begin
- NumeroVenda:= NumVenda;
- end;
- function TDescontoUnitario.AddPercentualDesconto(aValor: Currency): Currency;
- begin
- PercentualDesconto := aValor;
- Result:= (ValorUn * PercentualDesconto) / 100;
- ValorDesconto:= Result;
- end;
- function TDescontoUnitario.AddPosicaodoItem(Posicao: Integer): Integer;
- begin
- PosicaoItem := Posicao;
- end;
- function TDescontoUnitario.AddQuantidade(aQuantidade: Currency): Currency;
- begin
- Quantidade:= aQuantidade;
- Result:= Quantidade;
- end;
- function TDescontoUnitario.AddValordoDesconto(aValor: Currency): Currency;
- begin
- ValorDesconto:= aValor;
- Result:= RetornaPct(aValor,ValorUn,Quantidade);
- end;
- function TDescontoUnitario.AddValorUnitarioProd(aValor: Currency): Currency;
- begin
- ValorUn:= aValor;
- end;
- procedure TDescontoUnitario.AfterConstruction;
- begin
- inherited AfterConstruction;
- end;
- procedure TDescontoUnitario.BeforeDestruction;
- begin
- inherited BeforeDestruction;
- end;
- function TDescontoUnitario.CalulaValordoDesconto: Currency;
- begin
- end;
- procedure TDescontoUnitario.ContabilizaValordoDesconto(aDatasetVendas,aDatasetItens: Tdataset);
- var ValorTotalDescontos: Currency;
- begin
- CarregaWait('Aplicando descontos na venda ' ,500);
- aDatasetItens.Edit;
- aDatasetItens.FieldByName('ITENS_DESCVL').AsCurrency:= 0;
- aDatasetItens.FieldByName('ITENS_DESCVL').AsCurrency := ValorDesconto;
- aDatasetItens.FieldByName('ITENS_TOTAL').AsFloat :=
- (aDatasetItens.FieldByName('ITENS_VLUN').AsFloat - ValorDesconto) *
- aDatasetItens.FieldByName('ITENS_QUANTIDADE').AsFloat;
- aDatasetItens.FieldByName('ITENS_SITUACAO').AsString := 'VDC';
- aDatasetItens.Post;
- aDatasetItens.Refresh;
- ValorTotalDescontos := 0;
- aDatasetItens.First;
- while not aDatasetItens.Eof do
- begin
- CarregaWait('Ajustando descontos ' ,200);
- ValorTotalDescontos := ValorTotalDescontos +
- aDatasetItens.FieldByName('ITENS_DESCVL').AsCurrency;
- aDatasetItens.Next;
- end;
- { aqui eu posiciono a tabela da venda em edição }
- aDatasetVendas.Edit;
- { Aqui eu começo a posicionar os totalizadores da venda ja com os calculos dos descontos }
- aDatasetVendas.FieldByName('VENDA_DESCONTOS').AsFloat :=
- ValorTotalDescontos;
- // (DESC * TDtmItensdaVenda.CDSITENS.FieldByName('ITENS_QUANTIDADE').AsFloat);
- { Alimento aqui o valor total da venda na tabela CDSVENDA }
- aDatasetVendas.FieldByName('VENDA_VALORTOTAL').AsFloat :=
- AcbrUtil.RoundABNT(aDatasetVendas.FieldByName('VENDA_VALORVENDA')
- .AsCurrency + aDatasetVendas.FieldByName('VENDA_ACRESCIMOS')
- .AsCurrency - aDatasetVendas.FieldByName('VENDA_DESCONTOS')
- .AsCurrency, 2);
- { Aqui eu gravo a tabela da venda }
- aDatasetVendas.Post;
- CarregaWait('Desconto Aplicado com sucesso! ' ,1000);
- end;
- constructor TDescontoUnitario.Create;
- begin
- inherited Create;
- end;
- destructor TDescontoUnitario.Destroy;
- begin
- inherited;
- end;
- function TDescontoUnitario.New: IDescontoUnitario;
- begin
- Result:= TDescontoUnitario.Create;
- end;
- function TDescontoUnitario.RetornaPct(adescontoValue, aValeUn, aQtd: Currency): Currency;
- begin
- Result:= (adescontoValue / aValeUn * aQtd ) * 100;
- end;
- function TDescontoUnitario.VerificaPermissaodoUsuario(apercentdescUser: Currency): Boolean;
- begin
- if apercentdescUser < PercentualDesconto then begin
- Result:= False;
- CarregaWait('Usuário sem permissão para aplicar descontos ' ,3000);
- end else
- if apercentdescUser >= PercentualDesconto then begin
- Result:= true;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement