Fórum Ajuda para bolar a regra de negocio? #388573

15/10/2010

0

Pessoal, estou com um problema numa regra de negocio que preciso fazer aqui em um form de ordem de serviço...

Tenho que alimentar este form da segunte maneira

Chamo um nova OS.

Se não for cliente cadastrado é acionado uma tabela de preços chamada TABELA PREÇO GLOBAL

Se a OS for para algum cliente que tenha vinculado a ele a tabela de preço então o Sistema busca a TABELA DE PREÇO INDIVIDUAL pois cada cliente tem preços diferenciados.

Então neste caso temos dois tipos de tabelas diferente que o formulario de OS deve tratar. Isso o sistema ja faz com precisão.

Agora, um cliente me pediu para ver se tem como fazer outra regra neste OS.

Por exemplo nast tabelas de preços tanto global quanto individual, existe um indice que é do condutor que entrga a mercadoria. Porém este cliente quer trabalhar com preços diferenciados, dependendo do condutor do veiculo. Ou seja uns ganham porcentagem X e outros porcentagem Y.

Ai é que esta, não estou sabendo montar a regra de negocio para este caso ai.

Cheguei a abrir um campo novo no Cadastro de Condutor e colocar o valor do indice no cadastro do condutor.

Ai o sistema na hora de incluir um OS verificar se o condutor tem um indice de porcentagem ai calcular o valor do frete dele cfe o indice de seu cadastro.

Funcionou novamente. Mais ai fiquei barrado em uma questão que complicou.

Estes OS, são pré-preenchidos e em alguns casos define um condutor para fazer o frete e grava no banco, mais a qualquer momento pode alterar o condutor neste OS, e ai que o "bixo pega"... Como alterar varios pedidos desta ordem novamente? Pois quando estou fazendo um a um o sistema verifica todas as chaves das tabelas envolvidas, mais depois de gravado em outra tabela chamada serviços isso ja fica impossivel de fazer a verificação, pois na época que foi crado não foi bolado para este tipo de rergra.   Segue a imagem de como estou fazendo...
// Se vc repararem existe um calculo na hora que estou incluindo na grade, que vai pra tabela servicos.

Ai depois se eu precisar alterar o nome do condutor eu não estou conseguindo alterar os serviços, pois alguns condutores vão ter indice na tabela, mais outros não. Então não estou sabendo deonde pegar estas informações para o recalculo.     Então neste exemplo quando existe um cliente ele possui a tabela individual   Se vc reparar tenho na imagem acima a tabela de preço de um dos clientes, e tem o indice de 65% para cada serviço - o serviço - o valor do serviço e o valor do condutor. Isso foi uma regra que o usuario colocou para este cliente. Então este cliente paga o serviço desta forma ai.

Mais neste caso não diz que o condutor x tem que receber 85% e o condutor Y 70%, diz que todos condutores receberão 65%.

Só que tenho um condutor diferenciado que no serviços executados ele recebe 85% e não 65%, ai é que eu criei este novo campo na tabela do condutor.

Ai neste form o sistema verifica se o condutor tem este indice diferenciado e aplica na tabela de serviço, na grid que mostra no primeira imagem.

então inclui no codigo que faz este tratamento
Código: procedure Tfrmcadordserv.tabpreco_cfe_tipo_clie;
var
  _ChamaFrm : TfrmPesq;
  qryTemp: TZQuery;
  sTipoServ: String;
  cPercServ, cVlrMotoboy: Real;
begin

  //faço uma verificação se for cliente avuslo abro a lista de precos da tabela de precos
  //frmPesq.qryTabserv.Connection := dm.connection;
  _ChamaFrm := TfrmPesq.Create(Application);
  qryTemp := TZQuery.Create(nil);
  try
    //Autor: Adriano
    //Data: 12/10/2010
    //Para tratar os condutores que tem valor diferenciado de seu salario dentro do form cadmotoboy
    with qryTemp do
    begin
      if condutor.KeyValue <> null then
      begin
        Connection := dm.connection;
        Close;
        SQL.Clear;
        SQL.Add(' select TIPOSERV, PERCSERV, VLRMOTOBOY  ');
        SQL.Add(' from motoboy where idmotoboy = :iBusca ');
        ParamByName('iBusca').AsInteger := condutor.KeyValue;
        Open;
        if not IsEmpty then //Se não estiver vazio
        begin
          sTipoServ := qryTemp.FieldByName('TIPOSERV').AsString;
          if Trim(sTipoServ) 0 then
            cPercentual := cPercServ; //Variavel publica recebe o valor do motoboy individual
          cValorMotoboy := 0; //Quando usar variavel publica, global etc...sempre limpar antes de iniciar para não ficar dados alocados.
          if cVlrMotoboy > 0 then
            cValorMotoboy := cVlrMotoboy; //Variavel publica recebe o valor do motoboy individual
        end;
      end;
    end;
    /////////-------------------------------------------////////////
    if (trim(dbtext2.Caption) = EmptyStr) or (dbtext2.caption = '0') and (resultpesq = EmptyStr) then
    begin
      //precolocal := nil;
      //CriaQuery(TComponent(Self), precolocal, dm.connection, dsprecolocal);
      _resultLabel_Pesq('Listagem de preços [Modo Global]');
      with qryTabserv do
      begin
        close;
        SQL.clear;
        SQL.Add (' select * from preco  ');
        open;
      end;
    end else
    begin
      //se for cliente cadastrado então abro a tabela preco e serviços local do proprio cliente
      //precoservlocal := nil;
      //CriaQuery(TComponent(Self), precoservlocal, dm.connection, dsprecoservlocal);
      _resultLabel_Pesq('Listagem de preços [Modo Individual] '+lblcliente.Caption);
      with qryTabserv do
      begin
        close;
        SQL.clear;
        SQL.Add (' select * from preserv           ');
        SQL.Add (' where idclientes = :pidclientes ');
        SQL.Add (' and ativar = '+ QuotedStr('T')   ); //carrega somente os preços marcados na tabela de preco
        ParamByName('pidclientes').asinteger := strtoint(DBText2.Caption); // Pega a ID do cliente
        open;
      end;
    end;
  finally
     _ChamaFrm.Free;
     qryTemp.Free;
  end;
end;

Funciona...Mais como disse anteriormente, os condutores são mudados constantemente depois que ja encerrou a ordem de serviço.



Adriano Dolce

Adriano Dolce

Responder

Posts

17/10/2010

Adriano Dolce

Este post eu ja resolvi...

Não presiso mais de ajuda...

Obrigado pessoal.

Topico encerrado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar