Guest User

Untitled

a guest
May 25th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 9.72 KB | None | 0 0
  1.      // Currency amount rounding.
  2.      with QryTemp do
  3.      begin
  4.         // Currency rules
  5.         Close;
  6.         SQL.Clear;
  7.         SQL.Add('SELECT DISTINCT FDecimal, RoundRule FROM CURR WHERE CurrLid = ' + IntToStr(CurrLid));
  8.         if ChargeDebug then
  9.            R2Utils.ShowMessage('Get Currency RoundRule; %s',SQL.Text,'','',''); {ivde}
  10.         Open;
  11.         if not EOF then
  12.         begin
  13.            CurrRoundRule  := FieldByName('RoundRule').AsInteger;
  14.            CurrDecimals   := FieldByName('FDecimal').AsInteger;
  15.         end;
  16.         Close;
  17.      end;
  18.      // Currency amount.
  19.      If CurrRoundRule = 0 then
  20.      begin
  21.         Rnd00(SumCurrFinal,    RndCurrFinal,    CurrDecimals);
  22.         Rnd00(SumCurrPreFinal, RndCurrPreFinal, CurrDecimals);
  23.         Rnd00(SumCurrPrepay,   RndCurrPrepay,   CurrDecimals);
  24.      end;
  25.      If CurrRoundRule = 1 then // Rounded to closest .25, .50, .75 or .00
  26.      begin
  27.         Rnd25(SumCurrFinal,    RndCurrFinal);
  28.         Rnd25(SumCurrPreFinal, RndCurrPreFinal);
  29.         Rnd25(SumCurrPrepay,   RndCurrPrepay);
  30.      end;
  31.      If CurrRoundRule = 2 then // Rounded to closest 5, 10, 15, 20 ....
  32.      begin
  33.         Rnd500(SumCurrFinal,    RndCurrFinal);
  34.         Rnd500(SumCurrPreFinal, RndCurrPreFinal);
  35.         Rnd500(SumCurrPrepay,   RndCurrPrepay);
  36.      end;
  37.  
  38.      // Local amount rounding.
  39.      with QryTemp do
  40.      begin
  41.         // Local currency rules
  42.         Close;
  43.         SQL.Clear;
  44.         SQL.Add('SELECT  DISTINCT FDecimal, RoundRule FROM Curr WHERE Desc1 = ' + StrToSQL(Utils.GetIniStr('Defaults', 'Currency')));
  45.         if ChargeDebug then
  46.            R2Utils.ShowMessage('Get Local RoundRule; %s',SQL.Text,'','',''); {ivde}
  47.         Open;
  48.         if not EOF then
  49.         begin
  50.            LocalRoundRule  := FieldByName('RoundRule').AsInteger;
  51.            LocalDecimals   := FieldByName('FDecimal').AsInteger;
  52.         end;
  53.         Close;
  54.      end;
  55.      If LocalRoundRule = 0 then
  56.      begin
  57.         Rnd00(SumFinalBrut,    RndFinalBrut,    LocalDecimals);
  58.         Rnd00(SumPreFinalBrut, RndPreFinalBrut, LocalDecimals);
  59.         Rnd00(SumPrepayBrut,   RndPrepayBrut,   LocalDecimals);
  60.         Rnd00(SumFeeBrut,      RndFeeBrut,      LocalDecimals);
  61.         Rnd00(SumEcommBrut,    RndEcommBrut,    LocalDecimals);
  62.         Rnd00(SumDiscount1Brut,RndDiscount1Brut,LocalDecimals);
  63.         Rnd00(SumDiscount2Brut,RndDiscount2Brut,LocalDecimals);
  64.         Rnd00(SumDiscount3Brut,RndDiscount3Brut,LocalDecimals);
  65.         Rnd00(SumDiscount4Brut,RndDiscount4Brut,LocalDecimals);
  66.         Rnd00(SumDiscount5Brut,RndDiscount5Brut,LocalDecimals);
  67.      end;
  68.  
  69.      If LocalRoundRule = 1 then // Rounded to closest .25, .50, .75 or .00
  70.      begin
  71.         Rnd25(SumFinalBrut,    RndFinalBrut);
  72.         Rnd25(SumPreFinalBrut, RndPreFinalBrut);
  73.         Rnd25(SumPrepayBrut,   RndPrepayBrut);
  74.         Rnd25(SumFeeBrut,      RndFeeBrut);
  75.         Rnd25(SumEcommBrut,    RndEcommBrut);
  76.         Rnd25(SumDiscount1Brut,RndDiscount1Brut);
  77.         Rnd25(SumDiscount2Brut,RndDiscount2Brut);
  78.         Rnd25(SumDiscount3Brut,RndDiscount3Brut);
  79.         Rnd25(SumDiscount4Brut,RndDiscount4Brut);
  80.         Rnd25(SumDiscount5Brut,RndDiscount5Brut);
  81.      end;
  82.  
  83.      If LocalRoundRule = 2 then // Rounded to closest 5, 10, 15, 20 ....
  84.      begin
  85.         Rnd500(SumFinalBrut,    RndFinalBrut);
  86.         Rnd500(SumPreFinalBrut, RndPreFinalBrut);
  87.         Rnd500(SumPrepayBrut,   RndPrepayBrut);
  88.         Rnd500(SumFeeBrut,      RndFeeBrut);
  89.         Rnd500(SumEcommBrut,    RndEcommBrut);
  90.         Rnd500(SumDiscount1Brut,RndDiscount1Brut);
  91.         Rnd500(SumDiscount2Brut,RndDiscount2Brut);
  92.         Rnd500(SumDiscount3Brut,RndDiscount3Brut);
  93.         Rnd500(SumDiscount4Brut,RndDiscount4Brut);
  94.         Rnd500(SumDiscount5Brut,RndDiscount5Brut);
  95.      end;
  96.  
  97.   end;
  98.  
  99.   with QryUpdateDoc do
  100.   begin
  101.      Close;
  102.      SQL.Clear;
  103.      SQL.Add('UPDATE CHARGEDOC SET');
  104.      SQL.Add('  CurrFinal = '       + FloatToSQL(SumCurrFinal,     CurrDecimals+2));
  105.      SQL.Add(', CurrPreFinal = '    + FloatToSQL(SumCurrPreFinal,  CurrDecimals+2));
  106.      SQL.Add(', CurrPrepay = '      + FloatToSQL(SumCurrPrepay,    CurrDecimals+2));
  107.      SQL.Add(', FinalNet = '        + FloatToSQL(SumFinalNet,      LocalDecimals+2));
  108.      SQL.Add(', FinalBrut = '       + FloatToSQL(SumFinalBrut,     LocalDecimals+2));
  109.      SQL.Add(', FinalRounded = '    + FloatToSQL(RndFinalBrut,     LocalDecimals+2));
  110.      SQL.Add(', PreFinalNet = '     + FloatToSQL(SumPreFinalNet,   LocalDecimals+2));
  111.      SQL.Add(', PreFinalBrut = '    + FloatToSQL(SumPreFinalBrut,  LocalDecimals+2));
  112.      SQL.Add(', PreFinalRounded = ' + FloatToSQL(RndPreFinalBrut,  LocalDecimals+2));
  113.      SQL.Add(', PrePayNet = '       + FloatToSQL(SumPrePayNet,     LocalDecimals+2));
  114.      SQL.Add(', PrePayBrut = '      + FloatToSQL(SumPrePayBrut,    LocalDecimals+2));
  115.      SQL.Add(', PrePayRounded = '   + FloatToSQL(RndPrePayBrut,    LocalDecimals+2));
  116.      SQL.Add(', FeeNet = '          + FloatToSQL(SumFeeNet,        LocalDecimals+2));
  117.      SQL.Add(', FeeBrut = '         + FloatToSQL(SumFeeBrut,       LocalDecimals+2));
  118.      SQL.Add(', EcommNet = '        + FloatToSQL(SumEcommNet,      LocalDecimals+2));
  119.      SQL.Add(', EcommBrut = '       + FloatToSQL(SumEcommBrut,     LocalDecimals+2));
  120.      SQL.Add(', EcommRounded = '    + FloatToSQL(RndEcommBrut,     LocalDecimals+2));
  121.      SQL.Add(', Discount1Net = '    + FloatToSQL(SumDiscount1Net, LocalDecimals+2));
  122.      SQL.Add(', Discount1Brut = '   + FloatToSQL(SumDiscount1Brut,LocalDecimals+2));
  123.      SQL.Add(', Discount1Rounded = '+ FloatToSQL(RndDiscount1Brut,LocalDecimals+2));
  124.      SQL.Add(', Discount2Net = '    + FloatToSQL(SumDiscount2Net, LocalDecimals+2));
  125.      SQL.Add(', Discount2Brut = '   + FloatToSQL(SumDiscount2Brut,LocalDecimals+2));
  126.      SQL.Add(', Discount2Rounded = '+ FloatToSQL(RndDiscount2Brut,LocalDecimals+2));
  127.      SQL.Add(', Discount3Net = '    + FloatToSQL(SumDiscount3Net, LocalDecimals+2));
  128.      SQL.Add(', Discount3Brut = '   + FloatToSQL(SumDiscount3Brut,LocalDecimals+2));
  129.      SQL.Add(', Discount3Rounded = '+ FloatToSQL(RndDiscount3Brut,LocalDecimals+2));
  130.      SQL.Add(', Discount4Net = '    + FloatToSQL(SumDiscount4Net, LocalDecimals+2));
  131.      SQL.Add(', Discount4Brut = '   + FloatToSQL(SumDiscount4Brut,LocalDecimals+2));
  132.      SQL.Add(', Discount4Rounded = '+ FloatToSQL(RndDiscount4Brut,LocalDecimals+2));
  133.      SQL.Add(', Discount5Net = '    + FloatToSQL(SumDiscount5Net, LocalDecimals+2));
  134.      SQL.Add(', Discount5Brut = '   + FloatToSQL(SumDiscount5Brut,LocalDecimals+2));
  135.      SQL.Add(', Discount5Rounded = '+ FloatToSQL(RndDiscount5Brut,LocalDecimals+2));
  136.      SQL.Add(' WHERE DOCLID = ' + IntToStr(SerialLid));
  137.      if ChargeDebug then
  138.         R2Utils.ShowMessage('UpdateDoc; %s',SQL.Text,'','','');
  139.      sleep(GintWaitMsec);
  140.      ExecSQL;
  141.   end;
  142.  
  143.  
  144. Procedure TDoCharge.Rnd00(var OrgAmount, RndAmount: Real; NofDecimals: Integer);
  145. var
  146.    X: Real;
  147.    Y: Real;
  148. begin
  149.    WriteLogg('Proc: Rnd00');
  150.    if NofDecimals = 0 then
  151.    begin                                                      //OrgAmount = 4,612
  152.       X := StrToFloat(FloatToStrF(OrgAmount,ffFixed, 18, 0)); // X = 5,00
  153.       RndAmount := X - OrgAmount;                             // 5,00 - 4,612 -> [0,388]
  154.       OrgAmount := X;                                         // 5,00         -> [5,00]
  155.    end;
  156.    if NofDecimals = 1 then
  157.    begin
  158.       X := StrToFloat(FloatToStrF(OrgAmount,ffFixed, 17, 1));
  159.       RndAmount := X - OrgAmount;
  160.       OrgAmount := X;
  161.    end;
  162.    if NofDecimals = 2 then
  163.    begin                                                      //OrgAmount = 4,612
  164.       X := StrToFloat(FloatToStrF(OrgAmount,ffFixed, 16, 2)); // X = 4,61
  165.       RndAmount := X - OrgAmount;     // 4,61 - 4,612 -> [-0,002]
  166.       OrgAmount := X;                 // 4,61         ->  [5,61]
  167.    end;
  168.    if NofDecimals = 3 then
  169.    begin
  170.       X := StrToFloat(FloatToStrF(OrgAmount,ffFixed, 15, 3));
  171.       RndAmount := X - OrgAmount;
  172.       OrgAmount := X;
  173.    end;
  174.    if NofDecimals = 4 then
  175.    begin
  176.       X := StrToFloat(FloatToStrF(OrgAmount,ffFixed, 14, 4));
  177.       RndAmount := X - OrgAmount;
  178.       OrgAmount := X;
  179.    end;
  180.    WriteLogg('Proc: Rnd00, Done!');
  181. end;
  182.  
  183. // Rounded to 25, 50, 75, 00  (Curr.db:RoundRule #1)
  184. Procedure TDoCharge.Rnd25(var OrgAmount, RndAmount: Real);
  185. var
  186.    X: Real;
  187.    Y: Real;
  188.    I: Integer;
  189. begin                                    // OrgAmount =                          4,61   4,63
  190.    WriteLogg('Proc: Rnd25');
  191.    I := Trunc(OrgAmount);                // I = 4,00                                    4,00
  192.    X := OrgAmount - I;                   // X = 0,61                                    0,63
  193.    Y := 1.00;                            // Y = 1,00                                    1,00
  194.    if X < 0.87 then Y := 0.75;           // Y = 0,75                                    0,75
  195.    if X < 0.62 then Y := 0.50;           // Y = 0,50                                    N/A
  196.    if X < 0.37 then Y := 0.25;           // N/A                                         N/A
  197.    if X < 0.12 then Y := 0;              // N/A                                         N/A
  198.    RndAmount := (I + Y) - OrgAmount;     // RndAmount = (4,00 + 0,50) - 4,61 -> -0,11   0,12
  199.    OrgAmount := (I + Y);                 // OrgAmoutn = (4,00 + 0,50)        ->  4,50   4,75
  200.    WriteLogg('Proc: Rnd25, Done!');
  201. end;
  202.  
  203. // Rounded to 5, 10, 15, 20  (Curr.db:RoundRule #2)
  204. Procedure TDoCharge.Rnd500(var OrgAmount, RndAmount: Real);
  205. var
  206.    X: Real;
  207.    Y: Real;
  208.    I: Integer;
  209. begin
  210.    WriteLogg('Proc: Rnd500');
  211.    OrgAmount := OrgAmount / 10;
  212.    I := Trunc(OrgAmount);
  213.    X := OrgAmount - I;
  214.    Y := 1.00;
  215.    if X < 0.5   then Y := 0;
  216.    RndAmount := ((I + Y) - OrgAmount) * 10;
  217.    OrgAmount := (I + Y) * 10;
  218.    WriteLogg('Proc: Rnd500, Done!');
  219. end;
Add Comment
Please, Sign In to add comment