midrange.com code scratchpad
Name:
Dates: RPG Code
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
08/20/2014 06:48:49 pm
IP:
Logged
Description:
The user was to lazy to give a description
Code:
  1.      H NOMAIN
  2.       /DEFINE Copy_DtTools
  3.       /INCLUDE CDSRCLIB/QPROTOTYPE,COPYCOMMON
  4.  
  5.        //=======================================================================
  6.        //    ___  _    ___     _    ___
  7.        //   |   \| |_ / __|___| |_ / __|___ _ _
  8.        //   | |) |  _| (_ / -_)  _| (_ / -_) ' \
  9.        //   |___/ \__|\___\___|\__|\___\___|_||_|
  10.        //
  11.        //Gets a Lot of Useful General Items Regarding Input Date.
  12.        //=======================================================================
  13.      PDtGetGen         B                   Export
  14.      DDtGetGen         PI                  LikeDS(DtGen)
  15.      D InputDt                         D   Const
  16.       //Local Variables
  17.      D X               S             10I 0 Inz
  18.      D DSDtGen         DS                  LikeDS(DtGen) Inz
  19.       /Free
  20.  
  21.          DSDtGen.Date = InputDt;
  22.          DSDtGen.Year = %subdt(InputDt:*YEARS);
  23.          DSDtGen.Month = %subdt(InputDt:*MONTHS);
  24.          DSDtGen.Day = %subdt(InputDt:*DAYS);
  25.          DSDtGen.Period = DtGetPerDt(InputDt);
  26.          DSDtGen.DayOfWk = DtGetDay(InputDt);
  27.          DSDtGen.PrevDt = InputDt - %days(1);
  28.          DSDtGen.NextDt = InputDt + %days(1);
  29.          DSDtGen.FirstOfMth = DtGetFoM(InputDt);
  30.          DSDtGen.LastOfMth = DtGetLoM(InputDt);
  31.          DSDtGen.Firsts = DtGetFirsts(InputDt);
  32.          DSDtGen.Lasts = DtGetLasts(InputDt);
  33.          DSDtGen.DayFoY = DtGetDayFoY(%subdt(InputDt:*YEARS));
  34.          DSDtGen.DayLoY = DtGetDayLoY(%subdt(InputDt:*YEARS));
  35.  
  36.          Return DSDtGen;
  37.  
  38.       /End-Free
  39.      PDtGetGen         E
  40.  
  41.  
  42.        //=======================================================================
  43.        //    ___  _    ___     _   ___
  44.        //   |   \| |_ / __|___| |_|   \ __ _ _  _
  45.        //   | |) |  _| (_ / -_)  _| |) / _` | || |
  46.        //   |___/ \__|\___\___|\__|___/\__,_|\_, |
  47.        //                                    |__/
  48.        //
  49.        //Gets Day of Week (Num: 1-7; Name: SUNDAY-SATURDAY) for Input Date.
  50.        //=======================================================================
  51.      PDtGetDay         B                   Export
  52.      DDtGetDay         PI                  LikeDS(DtDay)
  53.      D InputDt                         D   Const
  54.       //Local Variables
  55.      D TmpNum          S              1S 0 Inz
  56.      D DSDtDay         DS                  LikeDS(DtDay) Inz
  57.       /Free
  58.  
  59.          //1=Sun, 2=Mon, 3=Tues, 4=Wed, 5=Thu, 6=Fri, 7=Sat
  60.          Exec SQL Set :TmpNum = DayOfWeek(:InputDt);
  61.          DSDtDay.Num = TmpNum;
  62.          Select;
  63.            When DSDtDay.Num = 1;
  64.              DSDtDay.Name = 'SUNDAY';
  65.            When DSDtDay.Num = 2;
  66.              DSDtDay.Name = 'MONDAY';
  67.            When DSDtDay.Num = 3;
  68.              DSDtDay.Name = 'TUESDAY';
  69.            When DSDtDay.Num = 4;
  70.              DSDtDay.Name = 'WEDNESDAY';
  71.            When DSDtDay.Num = 5;
  72.              DSDtDay.Name = 'THURSDAY';
  73.            When DSDtDay.Num = 6;
  74.              DSDtDay.Name = 'FRIDAY';
  75.            When DSDtDay.Num = 7;
  76.              DSDtDay.Name = 'SATURDAY';
  77.          EndSl;
  78.  
  79.          Return DSDtDay;
  80.  
  81.       /End-Free
  82.      PDtGetDay         E
  83.  
  84.  
  85.        //=======================================================================
  86.        //    ___  _    ___     _   ___            ___  _
  87.        //   |   \| |_ / __|___| |_|   \ __ _ _  _|   \| |_
  88.        //   | |) |  _| (_ / -_)  _| |) / _` | || | |) |  _|
  89.        //   |___/ \__|\___\___|\__|___/\__,_|\_, |___/ \__|
  90.        //                                    |__/
  91.        //Gets the Date for a Specified Previous or Future Occurrence of a
  92.        // Specified Day(SUNDAY-SATURDAY) for Input Date.
  93.        //=======================================================================
  94.      PDtGetDayDt       B                   Export
  95.      DDtGetDayDt       PI              D
  96.      D InputDt                         D   Const
  97.      D InputDayNum                    1S 0 Const
  98.      D InputOp                        1A   Const
  99.      D InputOccur                     2S 0 Const
  100.       //LocalVariables
  101.      D InDays          S              1S 0 Inz
  102.      D X               S              2S 0 Inz
  103.      D DSDtDay         DS                  LikeDS(DtDay) Inz
  104.      D Date            S               D   Inz
  105.       /Free
  106.  
  107.          DSDtDay = DtGetDay(InputDt);
  108.          If InputOp = '+';
  109.            If DSDtDay.Num >= InputDayNum;
  110.              InDays = (7-DSDtDay.Num) + InputDayNum;
  111.            Else;
  112.              InDays = InputDayNum - DSDtDay.Num;
  113.            EndIf;
  114.            Date = InputDt + %days(InDays);
  115.            If InputOccur = 1;
  116.              Return Date;
  117.            Else;
  118.              For X = 2 to InputOccur;
  119.                Date += %days(7);
  120.              EndFor;
  121.            EndIf;
  122.          ElseIf InputOp = '-';
  123.            If DSDtDay.Num <= InputDayNum;
  124.              InDays = (7-InputDayNum) + DSDtDay.Num;
  125.            Else;
  126.              InDays = DSDtDay.Num - InputDayNum;
  127.            EndIf;
  128.            Date = InputDt - %days(InDays);
  129.            If InputOccur = 1;
  130.              Return Date;
  131.            Else;
  132.              For X = 2 to InputOccur;
  133.                Date -= %days(7);
  134.              EndFor;
  135.              Return Date;
  136.            EndIf;
  137.          EndIf;
  138.  
  139.          Return Date;
  140.  
  141.       /End-Free
  142.      PDtGetDayDt       E
  143.  
  144.  
  145.        //=======================================================================
  146.        //    ___  _    ___     _   ___            ___  __   __
  147.        //   |   \| |_ / __|___| |_|   \ __ _ _  _| __|_\ \ / /
  148.        //   | |) |  _| (_ / -_)  _| |) / _` | || | _/ _ \ V /
  149.        //   |___/ \__|\___\___|\__|___/\__,_|\_, |_|\___/|_|
  150.        //                                    |__/
  151.        //Gets Day (Num: 1-7; Name: SUNDAY-SATURDAY) for the First Day of the
  152.        // Year for Input Year.
  153.        //=======================================================================
  154.      PDtGetDayFoY      B                   Export
  155.      DDtGetDayFoY      PI                  LikeDS(DtDay)
  156.      D InputYr                        4S 0 Const
  157.       //Local Variables
  158.      D FoYDate         S               D   Inz
  159.      D DSDtDay         DS                  LikeDS(DtDay) Inz
  160.       /Free
  161.  
  162.          FoYDate = %date(%char(InputYr) + '-01-01');
  163.          DSDtDay = DtGetDay(FoYDate);
  164.  
  165.          Return DSDtDay;
  166.  
  167.       /End-Free
  168.      PDtGetDayFoY      E
  169.  
  170.  
  171.        //=======================================================================
  172.        //    ___  _    ___     _   ___            _      __   __
  173.        //   |   \| |_ / __|___| |_|   \ __ _ _  _| |   __\ \ / /
  174.        //   | |) |  _| (_ / -_)  _| |) / _` | || | |__/ _ \ V /
  175.        //   |___/ \__|\___\___|\__|___/\__,_|\_, |____\___/|_|
  176.        //                                    |__/
  177.        //Gets Day (Num: 1-7; Name: SUNDAY-SATURDAY) for the Last Day of the Year
  178.        // for Input Year.
  179.        //=======================================================================
  180.      PDtGetDayLoY      B                   Export
  181.      DDtGetDayLoY      PI                  LikeDS(DtDay)
  182.      D InputYr                        4S 0 Const
  183.       //Local Variables
  184.      D LoYDate         S               D   Inz
  185.      D DSDtDay         DS                  LikeDS(DtDay) Inz
  186.       /Free
  187.  
  188.          LoYDate = %date(%char(InputYr) + '-12-31');
  189.          DSDtDay = DtGetDay(LoYDate);
  190.  
  191.          Return DSDtDay;
  192.  
  193.       /End-Free
  194.      PDtGetDayLoY      E
  195.  
  196.  
  197.        //=======================================================================
  198.        //    ___  _    ___     _   ___ _        _
  199.        //   |   \| |_ / __|___| |_| __(_)_ _ __| |_ ___
  200.        //   | |) |  _| (_ / -_)  _| _|| | '_(_-<  _(_-<
  201.        //   |___/ \__|\___\___|\__|_| |_|_| /__/\__/__/
  202.        //
  203.        //Gets the Date of the First Sun-Sat of the Month for Input Date.
  204.        //=======================================================================
  205.      PDtGetFirsts      B                   Export
  206.      DDtGetFirsts      PI                  LikeDS(DtFirstLast)
  207.      D InputDt                         D   Const
  208.       //Local Variables
  209.      D TmpDate         S               D   Inz
  210.      D X               S             10I 0 Inz
  211.      D TmpDay          DS                  LikeDS(DtDay) Inz
  212.      D DSDtFirsts      DS                  LikeDS(DtFirstLast) Inz
  213.       /Free
  214.  
  215.          TmpDate = DtGetFoM(InputDt);
  216.          For X = 1 to 7;
  217.            TmpDay = DtGetDay(TmpDate);
  218.            Select;
  219.              When TmpDay.Num = 1;
  220.                DSDtFirsts.Sun = TmpDate;
  221.              When TmpDay.Num = 2;
  222.                DSDtFirsts.Mon = TmpDate;
  223.              When TmpDay.Num = 3;
  224.                DSDtFirsts.Tue = TmpDate;
  225.              When TmpDay.Num = 4;
  226.                DSDtFirsts.Wed = TmpDate;
  227.              When TmpDay.Num = 5;
  228.                DSDtFirsts.Thu = TmpDate;
  229.              When TmpDay.Num = 6;
  230.                DSDtFirsts.Fri = TmpDate;
  231.              When TmpDay.Num = 7;
  232.                DSDtFirsts.Sat = TmpDate;
  233.            EndSl;
  234.            TmpDate = TmpDate + %days(1);
  235.          EndFor;
  236.  
  237.          Return DSDtFirsts;
  238.  
  239.       /End-Free
  240.      PDtGetFirsts      E
  241.  
  242.  
  243.        //=======================================================================
  244.        //    ___  _    ___     _   ___    __  __
  245.        //   |   \| |_ / __|___| |_| __|__|  \/  |
  246.        //   | |) |  _| (_ / -_)  _| _/ _ \ |\/| |
  247.        //   |___/ \__|\___\___|\__|_|\___/_|  |_|
  248.        //
  249.        //Gets the Date of the First Day of the Month for Input Date.
  250.        //=======================================================================
  251.      PDtGetFoM         B                   Export
  252.      DDtGetFoM         PI              D
  253.      D InputDt                         D   Const
  254.       //Local Variables
  255.      D FirstOfMthChr   S             10A   Inz
  256.      D FirstOfMth      S               D   Inz
  257.       /Free
  258.  
  259.          FirstOfMthChr = %char(%subdt(InputDt:*years)) + '-' +
  260.                           %char(%subdt(InputDt:*months)) +
  261.                           '-01';
  262.          FirstOfMth = %date(FirstOfMthChr);
  263.  
  264.          Return FirstOfMth;
  265.  
  266.       /End-Free
  267.      PDtGetFoM         E
  268.  
  269.  
  270.        //=======================================================================
  271.        //    ___  _    ___     _   _            _
  272.        //   |   \| |_ / __|___| |_| |   __ _ __| |_ ___
  273.        //   | |) |  _| (_ / -_)  _| |__/ _` (_-<  _(_-<
  274.        //   |___/ \__|\___\___|\__|____\__,_/__/\__/__/
  275.        //
  276.        //Gets the Date of the Last Sun-Sat of the Month for Input Date.
  277.        //=======================================================================
  278.      PDtGetLasts       B                   Export
  279.      DDtGetLasts       PI                  LikeDS(DtFirstLast)
  280.      D InputDt                         D   Const
  281.       //Local Variables
  282.      D TmpDate         S               D   Inz
  283.      D X               S             10I 0 Inz
  284.      D TmpDay          DS                  LikeDS(DtDay) Inz
  285.      D DSDtLasts       DS                  LikeDS(DtFirstLast) Inz
  286.       /Free
  287.  
  288.          TmpDate = DtGetLoM(InputDt);
  289.          For X = 7 downto 1;
  290.            TmpDay = DtGetDay(TmpDate);
  291.            Select;
  292.              When TmpDay.Num = 1;
  293.                DSDtLasts.Sun = TmpDate;
  294.              When TmpDay.Num = 2;
  295.                DSDtLasts.Mon = TmpDate;
  296.              When TmpDay.Num = 3;
  297.                DSDtLasts.Tue = TmpDate;
  298.              When TmpDay.Num = 4;
  299.                DSDtLasts.Wed = TmpDate;
  300.              When TmpDay.Num = 5;
  301.                DSDtLasts.Thu = TmpDate;
  302.              When TmpDay.Num = 6;
  303.                DSDtLasts.Fri = TmpDate;
  304.              When TmpDay.Num = 7;
  305.                DSDtLasts.Sat = TmpDate;
  306.            EndSl;
  307.            TmpDate = TmpDate - %days(1);
  308.          EndFor;
  309.  
  310.          Return DSDtLasts;
  311.  
  312.       /End-Free
  313.      PDtGetLasts       E
  314.      P
  315.  
  316.        //=======================================================================
  317.        //    ___  _    ___     _   _        __  __
  318.        //   |   \| |_ / __|___| |_| |   ___|  \/  |
  319.        //   | |) |  _| (_ / -_)  _| |__/ _ \ |\/| |
  320.        //   |___/ \__|\___\___|\__|____\___/_|  |_|
  321.        //
  322.        //Gets the Date of the Last Day of the Month for Input Date.
  323.        //=======================================================================
  324.      PDtGetLoM         B                   Export
  325.      DDtGetLoM         PI              D
  326.      D InputDt                         D   Const
  327.       //Local Variables
  328.      D FirstOfMth      S               D   Inz
  329.      D LastOfMth       S               D   Inz
  330.       /Free
  331.  
  332.          FirstOfMth = DtGetFoM(InputDt);
  333.          LastOfMth = (FirstOfMth +
  334.                       %months(1)) - %days(1);
  335.  
  336.          Return LastOfMth;
  337.  
  338.       /End-Free
  339.      PDtGetLoM         E
  340.  
  341.  
  342.        //=======================================================================
  343.        //    ___  _    ___     _   ___
  344.        //   |   \| |_ / __|___| |_| _ \___ _ _
  345.        //   | |) |  _| (_ / -_)  _|  _/ -_) '_|
  346.        //   |___/ \__|\___\___|\__|_| \___|_|
  347.        //
  348.        //Gets the beginning and Ending Dates of Period for Input Year and Period
  349.        // Number
  350.        //=======================================================================
  351.      PDtGetPer         B                   Export
  352.      DDtGetPer         PI                  LikeDS(DtPer)
  353.      D InputYr                        4S 0 Const
  354.      D InputNum                       2S 0 Const
  355.       //LocalVariables
  356.      D DSDtPer         DS                  LikeDS(DtPer)
  357.       /Free
  358.  
  359.          DSDtPer.BegPer = %date('2012-12-29');
  360.          DSDtPer.EndPer = %date('2013-01-25');
  361.          DSDtPer.PerNum = 1;
  362.          DSDtPer.PerYr = 2013;
  363.  
  364.          //Requested Period Before First Period Tracked
  365.          If InputNum < DSDtPer.PerNum
  366.          And InputYr <= DSDtPer.PerYr;
  367.            Clear DSDtPer;
  368.            Return DSDtPer;
  369.          //Requested Period Equals First Period Tracked
  370.          ElseIf InputNum = DSDtPer.PerNum
  371.          And InputYr = DSDtPer.PerYr;
  372.            Return DSDtPer;
  373.          EndIf;
  374.  
  375.          DoU InputNum = DSDtPer.PerNum
  376.          And InputYr = DSDtPer.PerYr;
  377.            DSDtPer.BegPer = DSDtPer.EndPer + %days(1);
  378.            DSDtPer.EndPer = DSDtPer.EndPer + %days(28);
  379.            If DSDtPer.PerNum = 13;
  380.              DSDtPer.PerNum = 1;
  381.              DSDtPer.PerYr += 1;
  382.            ElseIf DSDtPer.PerNum = 12;
  383.              If %subdt(DSDtPer.EndPer:*days) < 28
  384.              And %subdt(DSDtPer.EndPer:*days) > 20;
  385.                DSDtPer.EndPer = DSDtPer.EndPer + %days(7);
  386.              EndIf;
  387.              DSDtPer.PerNum += 1;
  388.            Else;
  389.              DSDtPer.PerNum += 1;
  390.            EndIf;
  391.          EndDo;
  392.  
  393.          Return DSDtPer;
  394.  
  395.       /End-Free
  396.      PDtGetPer         E
  397.  
  398.  
  399.        //=======================================================================
  400.        //    ___  _    ___     _   ___         ___  _
  401.        //   |   \| |_ / __|___| |_| _ \___ _ _|   \| |_
  402.        //   | |) |  _| (_ / -_)  _|  _/ -_) '_| |) |  _|
  403.        //   |___/ \__|\___\___|\__|_| \___|_| |___/ \__|
  404.        //
  405.        //Gets the Beginning and Ending Dates of Period, As Well as the Period
  406.        // Number for Input Date.
  407.        //=======================================================================
  408.      PDtGetPerDt       B                   Export
  409.      DDtGetPerDt       PI                  LikeDS(DtPer)
  410.      D InputDt                         D   Const
  411.      D InputOp                        1A   Const Options(*NoPass)
  412.      D InputOccur                     2S 0 Const Options(*NoPass)
  413.       //LocalVariables
  414.      D X               S             10I 0 Inz
  415.      D Period          S              2S 0 Inz
  416.      D Year            S              4S 0 Inz
  417.      D DSDtPer         DS                  LikeDS(DtPer)
  418.       /Free
  419.  
  420.          DSDtPer.BegPer = %date('2012-12-29');
  421.          DSDtPer.EndPer = %date('2013-01-25');
  422.          DSDtPer.PerNum = 1;
  423.          DSDtPer.PerYr = 2013;
  424.  
  425.          //Date Before First Period Tracked
  426.          If InputDt < DSDtPer.BegPer;
  427.            Clear DSDtPer;
  428.            Return DSDtPer;
  429.          //Date Within First Period Tracked
  430.          ElseIf InputDt >= DSDtPer.BegPer
  431.          And InputDt <= DSDtPer.EndPer;
  432.            Return DSDtPer;
  433.          EndIf;
  434.  
  435.          //Get Period of Input Date
  436.          DoU DSDtPer.EndPer >= InputDt;
  437.            DSDtPer.BegPer = DSDtPer.EndPer + %days(1);
  438.            DSDtPer.EndPer = DSDtPer.EndPer + %days(28);
  439.            If DSDtPer.PerNum = 13;
  440.              DSDtPer.PerNum = 1;
  441.              DSDtPer.PerYr += 1;
  442.            ElseIf DSDtPer.PerNum = 12;
  443.              If %subdt(DSDtPer.EndPer:*days) < 28
  444.              And %subdt(DSDtPer.EndPer:*days) > 20;
  445.                DSDtPer.EndPer = DSDtPer.EndPer + %days(7);
  446.              EndIf;
  447.              DSDtPer.PerNum += 1;
  448.            Else;
  449.              DSDtPer.PerNum += 1;
  450.            EndIf;
  451.          EndDo;
  452.  
  453.          //Calculate Previous or Future Period if Specified
  454.          If %parms > 1
  455.          And (InputOp = '+'
  456.          Or InputOp = '-');
  457.            Period = DSDtPer.PerNum;
  458.            Year = DSDtPer.PerYr;
  459.            Select;
  460.              //Future Period
  461.              When InputOp = '+';
  462.                For X = 1 to InputOccur;
  463.                  If Period = 13;
  464.                    Period = 1;
  465.                    Year += 1;
  466.                  Else;
  467.                    Period += 1;
  468.                  EndIf;
  469.                EndFor;
  470.              //Previous Period
  471.              When InputOp = '-';
  472.                For X = 1 to InputOccur;
  473.                  If Period = 1;
  474.                    Period = 13;
  475.                    Year -= 1;
  476.                  Else;
  477.                    Period -= 1;
  478.                  EndIf;
  479.                EndFor;
  480.            EndSl;
  481.            DSDtPer = DtGetPer(Year:Period);
  482.          EndIf;
  483.  
  484.          Return DSDtPer;
  485.  
  486.       /End-Free
  487.      PDtGetPerDt       E 
© 2004-2019 by midrange.com generated in 0.006s valid xhtml & css