From 7905c43278d1ccefaaeae03b75a1a37b3be896ea Mon Sep 17 00:00:00 2001 From: Jason Soltys <17367223+jsoltys@users.noreply.github.com> Date: Tue, 14 Jul 2026 00:41:31 -0500 Subject: [PATCH] first commit --- AOMAST.NTX | Bin 0 -> 2048 bytes AQMAST.NTX | Bin 0 -> 2048 bytes CGW0000.PRG | 372 +++ CGW0100.PRG | 1062 ++++++ CGW0200.PRG | 714 ++++ CGW0300.PRG | 1862 +++++++++++ CGW0350.PRG | 1864 +++++++++++ CGW0400.PRG | 210 ++ CGW0450.PRG | 50 + CGW0AC.NTX | Bin 0 -> 4096 bytes CGW0AO.NTX | Bin 0 -> 21504 bytes CGW0AR.NTX | Bin 0 -> 2048 bytes CGW0AT.NTX | Bin 0 -> 5120 bytes CGW0BP.NTX | Bin 0 -> 2048 bytes CGW0CA.NTX | Bin 0 -> 9216 bytes CGW0CB.NTX | Bin 0 -> 2048 bytes CGW0CBL.NTX | Bin 0 -> 2048 bytes CGW0CM.NTX | Bin 0 -> 13312 bytes CGW0CO.NTX | Bin 0 -> 26624 bytes CGW0CP.NTX | Bin 0 -> 81920 bytes CGW0CPE.NTX | Bin 0 -> 2048 bytes CGW0CPO.NTX | Bin 0 -> 2048 bytes CGW0CPT.NTX | Bin 0 -> 2048 bytes CGW0CS.NTX | Bin 0 -> 16384 bytes CGW0GB.NTX | Bin 0 -> 2048 bytes CGW0IM.NTX | Bin 0 -> 2048 bytes CGW0IPO.NTX | Bin 0 -> 2048 bytes CGW0KA.NTX | Bin 0 -> 2048 bytes CGW0MC.NTX | Bin 0 -> 2048 bytes CGW0MI.NTX | Bin 0 -> 2048 bytes CGW0MIC.NTX | Bin 0 -> 2048 bytes CGW0MIP.NTX | Bin 0 -> 2048 bytes CGW0ML.NTX | Bin 0 -> 2048 bytes CGW0MP.NTX | Bin 0 -> 47104 bytes CGW0MU.NTX | Bin 0 -> 2048 bytes CGW0OL.NTX | Bin 0 -> 8192 bytes CGW0OMI.NTX | Bin 0 -> 4096 bytes CGW0OO.NTX | Bin 0 -> 49152 bytes CGW0PA.NTX | Bin 0 -> 2048 bytes CGW0PC.NTX | Bin 0 -> 4096 bytes CGW0PE.NTX | Bin 0 -> 10240 bytes CGW0PO.NTX | Bin 0 -> 235520 bytes CGW0PR.NTX | Bin 0 -> 6144 bytes CGW0PT.NTX | Bin 0 -> 49152 bytes CGW0QL.NTX | Bin 0 -> 4096 bytes CGW0QM.NTX | Bin 0 -> 4096 bytes CGW0QMI.NTX | Bin 0 -> 2048 bytes CGW0QO.NTX | Bin 0 -> 11264 bytes CGW0QX.NTX | Bin 0 -> 2048 bytes CGW0QXO.NTX | Bin 0 -> 2048 bytes CGW0RP.NTX | Bin 0 -> 20480 bytes CGW0RU.NTX | Bin 0 -> 24576 bytes CGW0SBS.NTX | Bin 0 -> 4096 bytes CGW0SC.NTX | Bin 0 -> 2048 bytes CGW0SM.NTX | Bin 0 -> 2048 bytes CGW0SS.NTX | Bin 0 -> 69632 bytes CGW0SV.NTX | Bin 0 -> 2048 bytes CGW0TD.NTX | Bin 0 -> 2048 bytes CGW0TR.NTX | Bin 0 -> 2048 bytes CGW0TS.NTX | Bin 0 -> 4096 bytes CGW0XL.NTX | Bin 0 -> 5120 bytes CGW0XO.NTX | Bin 0 -> 28672 bytes CGW1170.PRG | 160 + CGW1AC.NTX | Bin 0 -> 4096 bytes CGW1AO.NTX | Bin 0 -> 20480 bytes CGW1AR.NTX | Bin 0 -> 2048 bytes CGW1ASA.NTX | Bin 0 -> 2048 bytes CGW1AT.NTX | Bin 0 -> 5120 bytes CGW1BP.NTX | Bin 0 -> 10240 bytes CGW1BT.NTX | Bin 0 -> 2048 bytes CGW1CA.NTX | Bin 0 -> 9216 bytes CGW1CB.NTX | Bin 0 -> 2048 bytes CGW1CBL.NTX | Bin 0 -> 2048 bytes CGW1CM.NTX | Bin 0 -> 14336 bytes CGW1CO.NTX | Bin 0 -> 23552 bytes CGW1CP.NTX | Bin 0 -> 81920 bytes CGW1CPE.NTX | Bin 0 -> 2048 bytes CGW1CPO.NTX | Bin 0 -> 2048 bytes CGW1CPT.NTX | Bin 0 -> 7168 bytes CGW1CS.NTX | Bin 0 -> 15360 bytes CGW1DD.NTX | Bin 0 -> 4096 bytes CGW1GB.NTX | Bin 0 -> 2048 bytes CGW1GL.NTX | Bin 0 -> 2048 bytes CGW1IC.NTX | Bin 0 -> 48128 bytes CGW1IM.NTX | Bin 0 -> 2048 bytes CGW1IPO.NTX | Bin 0 -> 6144 bytes CGW1KA.NTX | Bin 0 -> 2048 bytes CGW1MC.NTX | Bin 0 -> 2048 bytes CGW1MI.NTX | Bin 0 -> 2048 bytes CGW1MIC.NTX | Bin 0 -> 2048 bytes CGW1MIP.NTX | Bin 0 -> 2048 bytes CGW1ML.NTX | Bin 0 -> 2048 bytes CGW1MP.NTX | Bin 0 -> 51200 bytes CGW1MU.NTX | Bin 0 -> 2048 bytes CGW1OL.NTX | Bin 0 -> 10240 bytes CGW1OM.NTX | Bin 0 -> 7168 bytes CGW1OMI.NTX | Bin 0 -> 5120 bytes CGW1OO.NTX | Bin 0 -> 60416 bytes CGW1OPT.NTX | Bin 0 -> 2048 bytes CGW1OPW.NTX | Bin 0 -> 2048 bytes CGW1OSA.NTX | Bin 0 -> 2048 bytes CGW1OST.NTX | Bin 0 -> 13312 bytes CGW1OSW.NTX | Bin 0 -> 2048 bytes CGW1PA.NTX | Bin 0 -> 2048 bytes CGW1PC.NTX | Bin 0 -> 2048 bytes CGW1PE.NTX | Bin 0 -> 11264 bytes CGW1PO.NTX | Bin 0 -> 240640 bytes CGW1PR.NTX | Bin 0 -> 5120 bytes CGW1PT.NTX | Bin 0 -> 52224 bytes CGW1QL.NTX | Bin 0 -> 4096 bytes CGW1QM.NTX | Bin 0 -> 4096 bytes CGW1QMI.NTX | Bin 0 -> 2048 bytes CGW1QO.NTX | Bin 0 -> 14336 bytes CGW1QX.NTX | Bin 0 -> 2048 bytes CGW1QXO.NTX | Bin 0 -> 2048 bytes CGW1RP.NTX | Bin 0 -> 21504 bytes CGW1RU.NTX | Bin 0 -> 10240 bytes CGW1SBS.NTX | Bin 0 -> 4096 bytes CGW1SC.NTX | Bin 0 -> 2048 bytes CGW1SH.NTX | Bin 0 -> 278528 bytes CGW1SM.NTX | Bin 0 -> 2048 bytes CGW1SS.NTX | Bin 0 -> 74752 bytes CGW1SV.NTX | Bin 0 -> 2048 bytes CGW1TD.NTX | Bin 0 -> 2048 bytes CGW1TOL.NTX | Bin 0 -> 2048 bytes CGW1TR.NTX | Bin 0 -> 2048 bytes CGW1TS.NTX | Bin 0 -> 2048 bytes CGW1WS.NTX | Bin 0 -> 5120 bytes CGW1XL.NTX | Bin 0 -> 7168 bytes CGW1XO.NTX | Bin 0 -> 29696 bytes CGW2ABW.PRG | 292 ++ CGW2AC.NTX | Bin 0 -> 6144 bytes CGW2AO.NTX | Bin 0 -> 20480 bytes CGW2AT.NTX | Bin 0 -> 9216 bytes CGW2CA.NTX | Bin 0 -> 10240 bytes CGW2CB.NTX | Bin 0 -> 2048 bytes CGW2CM.NTX | Bin 0 -> 35840 bytes CGW2CO.NTX | Bin 0 -> 23552 bytes CGW2CP.NTX | Bin 0 -> 81920 bytes CGW2CPE.NTX | Bin 0 -> 2048 bytes CGW2CPO.NTX | Bin 0 -> 2048 bytes CGW2CPT.NTX | Bin 0 -> 7168 bytes CGW2CS.NTX | Bin 0 -> 12288 bytes CGW2DD.NTX | Bin 0 -> 4096 bytes CGW2IC.NTX | Bin 0 -> 38912 bytes CGW2IPO.NTX | Bin 0 -> 6144 bytes CGW2MC.NTX | Bin 0 -> 2048 bytes CGW2MI.NTX | Bin 0 -> 2048 bytes CGW2MIC.NTX | Bin 0 -> 2048 bytes CGW2MIP.NTX | Bin 0 -> 2048 bytes CGW2ML.NTX | Bin 0 -> 2048 bytes CGW2MP.NTX | Bin 0 -> 51200 bytes CGW2MU.NTX | Bin 0 -> 2048 bytes CGW2OM.NTX | Bin 0 -> 9216 bytes CGW2OPT.NTX | Bin 0 -> 2048 bytes CGW2OPW.NTX | Bin 0 -> 2048 bytes CGW2OST.NTX | Bin 0 -> 12288 bytes CGW2OSW.NTX | Bin 0 -> 2048 bytes CGW2PC.NTX | Bin 0 -> 4096 bytes CGW2PE.NTX | Bin 0 -> 12288 bytes CGW2PO.NTX | Bin 0 -> 240640 bytes CGW2PR.NTX | Bin 0 -> 11264 bytes CGW2PT.NTX | Bin 0 -> 54272 bytes CGW2QM.NTX | Bin 0 -> 4096 bytes CGW2QX.NTX | Bin 0 -> 2048 bytes CGW2RU.NTX | Bin 0 -> 24576 bytes CGW2SH.NTX | Bin 0 -> 278528 bytes CGW2SM.NTX | Bin 0 -> 2048 bytes CGW2SS.NTX | Bin 0 -> 74752 bytes CGW2SV.NTX | Bin 0 -> 2048 bytes CGW2TD.NTX | Bin 0 -> 2048 bytes CGW2TOL.NTX | Bin 0 -> 2048 bytes CGW2TR.NTX | Bin 0 -> 2048 bytes CGW2TS.NTX | Bin 0 -> 4096 bytes CGW2XL.NTX | Bin 0 -> 7168 bytes CGW3AC.NTX | Bin 0 -> 4096 bytes CGW3AO.NTX | Bin 0 -> 22528 bytes CGW3AT.NTX | Bin 0 -> 6144 bytes CGW3CM.NTX | Bin 0 -> 44032 bytes CGW3CO.NTX | Bin 0 -> 27648 bytes CGW3CP.NTX | Bin 0 -> 81920 bytes CGW3CPO.NTX | Bin 0 -> 2048 bytes CGW3CS.NTX | Bin 0 -> 16384 bytes CGW3DD.NTX | Bin 0 -> 5120 bytes CGW3IC.NTX | Bin 0 -> 48128 bytes CGW3IPO.NTX | Bin 0 -> 6144 bytes CGW3MI.NTX | Bin 0 -> 2048 bytes CGW3MIP.NTX | Bin 0 -> 2048 bytes CGW3MP.NTX | Bin 0 -> 35840 bytes CGW3OM.NTX | Bin 0 -> 8192 bytes CGW3OST.NTX | Bin 0 -> 10240 bytes CGW3PO.NTX | Bin 0 -> 266240 bytes CGW3PR.NTX | Bin 0 -> 6144 bytes CGW3QM.NTX | Bin 0 -> 4096 bytes CGW3QX.NTX | Bin 0 -> 2048 bytes CGW3SH.NTX | Bin 0 -> 370688 bytes CGW3TD.NTX | Bin 0 -> 2048 bytes CGW3XL.NTX | Bin 0 -> 6144 bytes CGW4CM.NTX | Bin 0 -> 38912 bytes CGW4IC.NTX | Bin 0 -> 36864 bytes CGW4IPO.NTX | Bin 0 -> 6144 bytes CGW4MI.NTX | Bin 0 -> 2048 bytes CGW4OM.NTX | Bin 0 -> 12288 bytes CGW4PR.NTX | Bin 0 -> 6144 bytes CGW4QM.NTX | Bin 0 -> 5120 bytes CGW4SH.NTX | Bin 0 -> 370688 bytes CGW4TD.NTX | Bin 0 -> 2048 bytes CGW5MI.NTX | Bin 0 -> 2048 bytes CGW5OM.NTX | Bin 0 -> 25600 bytes CGW5QM.NTX | Bin 0 -> 8192 bytes CGW5SH.NTX | Bin 0 -> 207872 bytes CGWASCNV.PRG | 29 + CGWB0000.PRG | 41 + CGWB0100.PRG | 727 ++++ CGWB0200.PRG | 137 + CGWB1100.PRG | 89 + CGWB1170.PRG | 193 ++ CGWB1210.PRG | 51 + CGWB1220.PRG | 103 + CGWB1300.PRG | 233 ++ CGWB1310.PRG | 62 + CGWBTREV.PRG | 156 + CGWFIELD.PRG | 44 + CGWFUNC.PRG | 117 + CGWINCLD.PRG | 30 + CGWMATH.PRG | 1256 +++++++ CGWPDEF.PRG | 1230 +++++++ CGWPRINT.PRG | 5578 +++++++++++++++++++++++++++++++ CGWPRNT2.PRG | 2365 +++++++++++++ CGWPRNT3.PRG | 428 +++ CGWPRPO.PRG | 8149 +++++++++++++++++++++++++++++++++++++++++++++ CGWPRPO0.PRG | 8964 ++++++++++++++++++++++++++++++++++++++++++++++++++ CGWRULE.PRG | 1137 +++++++ CGWUGRAD.PRG | 214 ++ FMASTER.NTX | Bin 0 -> 2048 bytes GL.NTX | Bin 0 -> 210944 bytes GRA1CS.NTX | Bin 0 -> 12288 bytes GRA1MP.NTX | Bin 0 -> 27648 bytes GRA2CS.NTX | Bin 0 -> 10240 bytes GRA2MP.NTX | Bin 0 -> 32768 bytes GRA3CS.NTX | Bin 0 -> 15360 bytes OL.NTX | Bin 0 -> 2048 bytes OST.NTX | Bin 0 -> 2048 bytes README.md | 0 TEMP.NTX | Bin 0 -> 281600 bytes TMP.NTX | Bin 0 -> 21504 bytes mh32.bat | 63 + mh64.bat | 86 + 248 files changed, 38068 insertions(+) create mode 100644 AOMAST.NTX create mode 100644 AQMAST.NTX create mode 100644 CGW0000.PRG create mode 100644 CGW0100.PRG create mode 100644 CGW0200.PRG create mode 100644 CGW0300.PRG create mode 100644 CGW0350.PRG create mode 100644 CGW0400.PRG create mode 100644 CGW0450.PRG create mode 100644 CGW0AC.NTX create mode 100644 CGW0AO.NTX create mode 100644 CGW0AR.NTX create mode 100644 CGW0AT.NTX create mode 100644 CGW0BP.NTX create mode 100644 CGW0CA.NTX create mode 100644 CGW0CB.NTX create mode 100644 CGW0CBL.NTX create mode 100644 CGW0CM.NTX create mode 100644 CGW0CO.NTX create mode 100644 CGW0CP.NTX create mode 100644 CGW0CPE.NTX create mode 100644 CGW0CPO.NTX create mode 100644 CGW0CPT.NTX create mode 100644 CGW0CS.NTX create mode 100644 CGW0GB.NTX create mode 100644 CGW0IM.NTX create mode 100644 CGW0IPO.NTX create mode 100644 CGW0KA.NTX create mode 100644 CGW0MC.NTX create mode 100644 CGW0MI.NTX create mode 100644 CGW0MIC.NTX create mode 100644 CGW0MIP.NTX create mode 100644 CGW0ML.NTX create mode 100644 CGW0MP.NTX create mode 100644 CGW0MU.NTX create mode 100644 CGW0OL.NTX create mode 100644 CGW0OMI.NTX create mode 100644 CGW0OO.NTX create mode 100644 CGW0PA.NTX create mode 100644 CGW0PC.NTX create mode 100644 CGW0PE.NTX create mode 100644 CGW0PO.NTX create mode 100644 CGW0PR.NTX create mode 100644 CGW0PT.NTX create mode 100644 CGW0QL.NTX create mode 100644 CGW0QM.NTX create mode 100644 CGW0QMI.NTX create mode 100644 CGW0QO.NTX create mode 100644 CGW0QX.NTX create mode 100644 CGW0QXO.NTX create mode 100644 CGW0RP.NTX create mode 100644 CGW0RU.NTX create mode 100644 CGW0SBS.NTX create mode 100644 CGW0SC.NTX create mode 100644 CGW0SM.NTX create mode 100644 CGW0SS.NTX create mode 100644 CGW0SV.NTX create mode 100644 CGW0TD.NTX create mode 100644 CGW0TR.NTX create mode 100644 CGW0TS.NTX create mode 100644 CGW0XL.NTX create mode 100644 CGW0XO.NTX create mode 100644 CGW1170.PRG create mode 100644 CGW1AC.NTX create mode 100644 CGW1AO.NTX create mode 100644 CGW1AR.NTX create mode 100644 CGW1ASA.NTX create mode 100644 CGW1AT.NTX create mode 100644 CGW1BP.NTX create mode 100644 CGW1BT.NTX create mode 100644 CGW1CA.NTX create mode 100644 CGW1CB.NTX create mode 100644 CGW1CBL.NTX create mode 100644 CGW1CM.NTX create mode 100644 CGW1CO.NTX create mode 100644 CGW1CP.NTX create mode 100644 CGW1CPE.NTX create mode 100644 CGW1CPO.NTX create mode 100644 CGW1CPT.NTX create mode 100644 CGW1CS.NTX create mode 100644 CGW1DD.NTX create mode 100644 CGW1GB.NTX create mode 100644 CGW1GL.NTX create mode 100644 CGW1IC.NTX create mode 100644 CGW1IM.NTX create mode 100644 CGW1IPO.NTX create mode 100644 CGW1KA.NTX create mode 100644 CGW1MC.NTX create mode 100644 CGW1MI.NTX create mode 100644 CGW1MIC.NTX create mode 100644 CGW1MIP.NTX create mode 100644 CGW1ML.NTX create mode 100644 CGW1MP.NTX create mode 100644 CGW1MU.NTX create mode 100644 CGW1OL.NTX create mode 100644 CGW1OM.NTX create mode 100644 CGW1OMI.NTX create mode 100644 CGW1OO.NTX create mode 100644 CGW1OPT.NTX create mode 100644 CGW1OPW.NTX create mode 100644 CGW1OSA.NTX create mode 100644 CGW1OST.NTX create mode 100644 CGW1OSW.NTX create mode 100644 CGW1PA.NTX create mode 100644 CGW1PC.NTX create mode 100644 CGW1PE.NTX create mode 100644 CGW1PO.NTX create mode 100644 CGW1PR.NTX create mode 100644 CGW1PT.NTX create mode 100644 CGW1QL.NTX create mode 100644 CGW1QM.NTX create mode 100644 CGW1QMI.NTX create mode 100644 CGW1QO.NTX create mode 100644 CGW1QX.NTX create mode 100644 CGW1QXO.NTX create mode 100644 CGW1RP.NTX create mode 100644 CGW1RU.NTX create mode 100644 CGW1SBS.NTX create mode 100644 CGW1SC.NTX create mode 100644 CGW1SH.NTX create mode 100644 CGW1SM.NTX create mode 100644 CGW1SS.NTX create mode 100644 CGW1SV.NTX create mode 100644 CGW1TD.NTX create mode 100644 CGW1TOL.NTX create mode 100644 CGW1TR.NTX create mode 100644 CGW1TS.NTX create mode 100644 CGW1WS.NTX create mode 100644 CGW1XL.NTX create mode 100644 CGW1XO.NTX create mode 100644 CGW2ABW.PRG create mode 100644 CGW2AC.NTX create mode 100644 CGW2AO.NTX create mode 100644 CGW2AT.NTX create mode 100644 CGW2CA.NTX create mode 100644 CGW2CB.NTX create mode 100644 CGW2CM.NTX create mode 100644 CGW2CO.NTX create mode 100644 CGW2CP.NTX create mode 100644 CGW2CPE.NTX create mode 100644 CGW2CPO.NTX create mode 100644 CGW2CPT.NTX create mode 100644 CGW2CS.NTX create mode 100644 CGW2DD.NTX create mode 100644 CGW2IC.NTX create mode 100644 CGW2IPO.NTX create mode 100644 CGW2MC.NTX create mode 100644 CGW2MI.NTX create mode 100644 CGW2MIC.NTX create mode 100644 CGW2MIP.NTX create mode 100644 CGW2ML.NTX create mode 100644 CGW2MP.NTX create mode 100644 CGW2MU.NTX create mode 100644 CGW2OM.NTX create mode 100644 CGW2OPT.NTX create mode 100644 CGW2OPW.NTX create mode 100644 CGW2OST.NTX create mode 100644 CGW2OSW.NTX create mode 100644 CGW2PC.NTX create mode 100644 CGW2PE.NTX create mode 100644 CGW2PO.NTX create mode 100644 CGW2PR.NTX create mode 100644 CGW2PT.NTX create mode 100644 CGW2QM.NTX create mode 100644 CGW2QX.NTX create mode 100644 CGW2RU.NTX create mode 100644 CGW2SH.NTX create mode 100644 CGW2SM.NTX create mode 100644 CGW2SS.NTX create mode 100644 CGW2SV.NTX create mode 100644 CGW2TD.NTX create mode 100644 CGW2TOL.NTX create mode 100644 CGW2TR.NTX create mode 100644 CGW2TS.NTX create mode 100644 CGW2XL.NTX create mode 100644 CGW3AC.NTX create mode 100644 CGW3AO.NTX create mode 100644 CGW3AT.NTX create mode 100644 CGW3CM.NTX create mode 100644 CGW3CO.NTX create mode 100644 CGW3CP.NTX create mode 100644 CGW3CPO.NTX create mode 100644 CGW3CS.NTX create mode 100644 CGW3DD.NTX create mode 100644 CGW3IC.NTX create mode 100644 CGW3IPO.NTX create mode 100644 CGW3MI.NTX create mode 100644 CGW3MIP.NTX create mode 100644 CGW3MP.NTX create mode 100644 CGW3OM.NTX create mode 100644 CGW3OST.NTX create mode 100644 CGW3PO.NTX create mode 100644 CGW3PR.NTX create mode 100644 CGW3QM.NTX create mode 100644 CGW3QX.NTX create mode 100644 CGW3SH.NTX create mode 100644 CGW3TD.NTX create mode 100644 CGW3XL.NTX create mode 100644 CGW4CM.NTX create mode 100644 CGW4IC.NTX create mode 100644 CGW4IPO.NTX create mode 100644 CGW4MI.NTX create mode 100644 CGW4OM.NTX create mode 100644 CGW4PR.NTX create mode 100644 CGW4QM.NTX create mode 100644 CGW4SH.NTX create mode 100644 CGW4TD.NTX create mode 100644 CGW5MI.NTX create mode 100644 CGW5OM.NTX create mode 100644 CGW5QM.NTX create mode 100644 CGW5SH.NTX create mode 100644 CGWASCNV.PRG create mode 100644 CGWB0000.PRG create mode 100644 CGWB0100.PRG create mode 100644 CGWB0200.PRG create mode 100644 CGWB1100.PRG create mode 100644 CGWB1170.PRG create mode 100644 CGWB1210.PRG create mode 100644 CGWB1220.PRG create mode 100644 CGWB1300.PRG create mode 100644 CGWB1310.PRG create mode 100644 CGWBTREV.PRG create mode 100644 CGWFIELD.PRG create mode 100644 CGWFUNC.PRG create mode 100644 CGWINCLD.PRG create mode 100644 CGWMATH.PRG create mode 100644 CGWPDEF.PRG create mode 100644 CGWPRINT.PRG create mode 100644 CGWPRNT2.PRG create mode 100644 CGWPRNT3.PRG create mode 100644 CGWPRPO.PRG create mode 100644 CGWPRPO0.PRG create mode 100644 CGWRULE.PRG create mode 100644 CGWUGRAD.PRG create mode 100644 FMASTER.NTX create mode 100644 GL.NTX create mode 100644 GRA1CS.NTX create mode 100644 GRA1MP.NTX create mode 100644 GRA2CS.NTX create mode 100644 GRA2MP.NTX create mode 100644 GRA3CS.NTX create mode 100644 OL.NTX create mode 100644 OST.NTX create mode 100644 README.md create mode 100644 TEMP.NTX create mode 100644 TMP.NTX create mode 100644 mh32.bat create mode 100644 mh64.bat diff --git a/AOMAST.NTX b/AOMAST.NTX new file mode 100644 index 0000000000000000000000000000000000000000..98bed46f8e16fbd0ec388de3e2746f9cd73d892a GIT binary patch literal 2048 zcmZQ$U}RumVE_X@1~wpV#~{z(ALQa16z>=63y~NlM?+vV1cqe@urf3-^fAm~SjDh| z;TXdehDQt^82&NvFiJ6MFq$#CFa|LuFy=AVFm^G{U|hzyh4B#M1;%@fZy0|uaxjT8 zsW2HaIWYM##V}=63y~NlM?+vV1cqq{G%)lr%wbr?u!G?k z!xe@{3?CT&G4L=-F={ZHF}g4YF(xqPG1f44G0tFI#<+#?5aR{LdyH=we=%|}i7}}# z88JC9`7y;XWieGSwJ}X$TEw)0X&=)Wrdv!en7%QwFbgp&FzYefFncjaFsCt>FgGzz eV4lakhItqB3Fd3ePnd^kppJTLGz5l32mk 0 .OR. ; + +ELSEIF .T. .OR. ; + AT('.BAT', WORKPROG ) > 0 .OR. ; + AT('.EXE', WORKPROG ) > 0 .OR. ; + AT('.COM', WORKPROG ) > 0 .OR. ; + SUBS( PROG, 1, 4 ) = 'DEL ' .OR. ; + SUBS( PROG, 1, 4 ) = 'REN ' .OR. ; + SUBS( PROG, 1, 6 ) = 'XCOPY ' .OR. ; + SUBS( PROG, 1, 5 ) = 'COPY ' + + //EXECUTABLE FILE TYPE FOUND - OK + + IF !EMPTY( ODLG ) .AND. !EMPTY(MSGARR) + WAIT_REFRESH( ODLG, MSGARR ) + ENDIF + + //IF EMPTY(SWITCH) + // SWITCH := SW_MINIMIZE + //ENDIF + + // RETCODE := WINEXEC( PROG ) + RETCODE := WAITRUN( PROG ) + + // RETCODE := WAITRUN ( PROG ) + // ** IF RETCODE > 0 .AND. RETCODE < 32 // changed to >1 8-31-007 + // call to our exe returns 1 + IF RETCODE > 1 .AND. RETCODE < 32 + MSGALERT( 'Return Code From External DonWaitRun ' +CR_LF(2)+; + 'The External command is - "' + PROG +'"', ; + 'Execution Return Code - "' + alltrim( STR( RETCODE , 10 ) )+'"' ) + RETVAL := .F. + ELSE + RETVAL := .T. + ENDIF + + // IF >= 32, THIS IS THE INSTANCE(?) HANDLE RETURNED FROM WINAPI + // OTHERWISE SOME ERROR MESSAGE - SEE WINEXEC() DOCUMENTATION + // IN FIVEWIN / TURBO C++ HELP ON WINDOWS API. +ELSE + + // ERRORDIALOG( , .T., ,'INVALID COMMAND During WINRUN!' ) //** force error log to be written + MSGSTOP( 'Bad COMMAND - '+ALLTRIM(PROG)+' Invalid file extention!' + CR_LF() ; + + 'MUST have an extention of - ".BAT", ".EXE", OR ".COM", ' + CR_LF() ; + + 'OR You May Invoke the "COPY", "REN" or "DEL" Commands.' + CR_LF() ; + , 'INVALID COMMAND During WINRUN!' ) + RETVAL := .F. + +ENDIF + +SYSREFRESH() + +RETURN RETVAL + + +****************************************************** + + +//FUNCTION GET_FILEPARM(MALIAS) +//RETURN GET_FILEPA(MALIAS) + +************************************************************ + +******************************************************** + +FUNCTION WAIT_REFRESH( ODLG, MSGARR ) +LOCAL I + +PAINTDLG( ODLG, MSGARR ) + +RETURN .T. + +*************************************************************** + + +// DETERMINES IS A STRING IS IN CODE BLOCK FORMAT +FUNCTION ISCODEBLOCK( PASSVAR ) +LOCAL RETVAL := .F. + +PASSVAR := ALLTRIM( PASSVAR ) +IF LEFT( PASSVAR,1 ) = '{' + IF RIGHT( PASSVAR,1 ) = '}' + IF AT( '|', PASSVAR ) > 0 ; + .OR. AT( '\\', PASSVAR ) > 0 // DON 10-01-10 + RETVAL := .T. + ENDIF + ENDIF +ENDIF +RETURN RETVAL + + +************************************************************** + + +//** P3N - 4/21/00 +//** ADDED THE FOLLOWING REFERENCES TO GET RID OF ANY +//** BLINKER UNRESOLVED MESSAGES - FROM DOSWIN.PRG +FUNCTION WNETGETUSE() //** P3N - 4/21/00 +RETURN //** P3N - 4/21/00 + +FUNCTION GETMODULEF() //** P3N - 4/21/00 +RETURN //** P3N - 4/21/00 + +FUNCTION GETINSTANC() //** P3N - 4/21/00 +RETURN //** P3N - 4/21/00 + +FUNCTION GETPVPROFS() //** P3N - 4/21/00 +RETURN //** P3N - 4/21/00 + +************************************************************************ + +**************************** + +function d_altd( SETCMD ) // don't have to code altd twice 11-11-007 don + + +IF !EMPTY( SETCMD ) + M->DEBUG_SWITCH := UPPER( SETCMD ) +ENDIF + + +// comment out for production +altd(1) +altd() + +return nil + +*********************************************************************** + +// moved to winutil next to d_altd() function 7/8/2019 + +//** comment out these 2 requests for Production Make/Link +//** p3n - 03/22/13 these requests are required harb v3.2 for debug console mode + +#ifdef __FWH13__ + + +// comment out to supress extra window for debug. +// activate if you WANT the console window for debug. + + + REQUEST HB_GT_WIN + REQUEST HB_GT_WIN_DEFAULT + + + // Harbour requirement for console debug mode comment out for Production Make/Link Windows + // But always required for console mode PROGRAM EXECUTION, LIKE CGW is. + procedure hb_gt_gui_default + return + +#ENDIF + + + +*************************************** +********************************************************************** +//** P3N - 03/14/14 +//** USE IN LIEU OF LL_MEMOWRIT() +********************************************************************** +FUNCTION LL_MEMOWRIT( MFILE, MDATA ) + +LOCAL SUCCESS := .T. +LOCAL RETVAL := 0 +LOCAL CREATECD + +MFILE := ALLTRIM( MFILE ) // 10-12-2020 +CREATECD := FCREATE( MFILE,0 ) //** NORMAL - READ/WRITE + +IF CREATECD < 0 + MSGSTOP('LL_MEMOWRIT() - FCreate() File Name - "'+MFILE+'"', ; + 'File CREATE Error - '+STR(CREATECD) ) + SUCCESS := .F. + + //DISP_STACK() // 3/12/19 + +ENDIF + +// d_altd() + +IF VALTYPE( MDATA )$'C' .AND. LEN( MDATA ) > 0 // 10-5-2020 - WHY WOULD MDATA <> 'C' ??? + // GOOD DATA TO WRITE +ELSE + SUCCESS := .F. + MSGSTOP( 'Bad Data to Write' + cr_lf() ; + + "MDATA's DATA TYPE was: " + VALTYPE( MDATA ) + CR_LF() ; + + "MDATA's LENGTH was: " + IF( VALTYPE( MDATA )$'C', STR( LEN( MDATA )) , '??' ) , ; + 'Can Not Write Data File' ) +ENDIF + +IF SUCCESS + RETVAL := FWRITE( CREATECD, MDATA ) // write REQUEST to TXT fil + IF RETVAL = LEN( MDATA ) + //** FWRITE SUCCESSFULL - CONTINUE + ELSE + MSGSTOP('FWrite() Error - "' + MFILE + '"' + CR_LF() ; + + 'Length of Message: ' + ALLTRIM( STR( LEN( MDATA ) ) ) , ; + 'File WRITE Error - '+STR(CREATECD) ) + SUCCESS := .F. + ENDIF + + IF SUCCESS + IF FCLOSE( CREATECD ) + //** FILE SUCCESSFULLY CLOSED - CONTINUE + ELSE + MSGSTOP('FClose() Error - "'+MFILE+'"', ; + 'File CLOSE Error - '+STR(CREATECD) ) + SUCCESS := .F. + ENDIF + ENDIF + +ENDIF + +RETURN SUCCESS + +********************************************************************** diff --git a/CGW0100.PRG b/CGW0100.PRG new file mode 100644 index 0000000..10ba062 --- /dev/null +++ b/CGW0100.PRG @@ -0,0 +1,1062 @@ + + + +#include 'fivewin.ch' + +PROCEDURE CGW0100(INIT) +****************************************************** +** MIKE LEWIS - MAIN MENU 09-10-93 - CGW0100 +****************************************************** +CLS +PRIVATE COLVAR := HNOR + ',N/W,,,' + LNOR + +************************** +// LOAD UP PRIVATE VARIABLES FROM THE CONTROL FILE TO MEMORY + + + +// ? m->abend + +// 3/18/2020 - CLEAN UP LLINK64.LOG FILES +IF FILE( 'CGW64.LOG' ) + FErase( 'CGW64.LOG' ) +ENDIF + +// 9/02/2020 - CLEAN UP LLINK64.LOG FILES +IF FILE( 'CS.LOG' ) + FErase( 'CS.LOG' ) +ENDIF + + + + + +DBOPEN('IMPCUST') +DBOPEN('CONTROL') +MLMAR := SPACE(LMAR) //* CONTROL FILE FIELDS FOR TOP MARGIN +MTMAR := TMAR //* USED IN CGWPRINT +MBODY_LEN := BODY_LEN +MHEAD_LEN := HEAD_LEN +MSING_SHEET := UPPER(SING_SHEET) + //* +//** OBSOLETE 01/22/07 +**MSLS_TAX_PCT := SLS_TX_PCT + //* +MHOME_LOC_CODE := LOC_CODE +MBASE_NUM = BASE_NUM +MMULL_SASH := MULL_SASH +MMULL_GLASS := MULL_GLASS +MPICKUPTAX := PICKUPTAX +MPICKUPDISC := PICKUPDISC +MPREPAYCODE := PREPAY_COD + //** P3N - 07/09/01 +IF AT('{',MPREPAYCODE ) > 0 .AND. AT('}',MPREPAYCODE ) > 0 + MPREPAYCODE := &MPREPAYCODE +ELSE + ERR_BOX(' "CONTROL" file PRE PAY CODE ARRAY is INVALID ', ; + ' go to the FILE menu - TABLES AND CODE Definitions ', ; + ' SYSTEM CONTROL file and fix the ARRAY!', ; + ' Order entry will NOT be correct until this is fixed!') +ENDIF +MDEL_SHIP := DEL_SHIP + //** P3N - 07/09/01 +IF AT('{',MDEL_SHIP ) > 0 .AND. AT('}',MDEL_SHIP ) > 0 + MDEL_SHIP := &MDEL_SHIP +ELSE + ERR_BOX(' "CONTROL" file DELIVER ARRAY is INVALID ', ; + ' go to the FILE menu - TABLES AND CODE Definitions ', ; + ' SYSTEM CONTROL file and fix the ARRAY!', ; + ' Order entry will NOT be correct until this is fixed!') +ENDIF +MPU_SHIP := PU_SHIP + //** P3N - 07/09/01 +IF AT('{',MPU_SHIP ) > 0 .AND. AT('}',MPU_SHIP ) > 0 + MPU_SHIP := &MPU_SHIP +ELSE + ERR_BOX(' "CONTROL" file PU ARRAY is INVALID ', ; + ' go to the FILE menu - TABLES AND CODE Definitions ', ; + ' SYSTEM CONTROL file and fix the ARRAY!', ; + ' Order entry will NOT be correct until this is fixed!') +ENDIF +MINST_SHIP := INST_SHIP + //** P3N - 07/09/01 +IF AT('{',MINST_SHIP ) > 0 .AND. AT('}',MINST_SHIP ) > 0 + MINST_SHIP := &MINST_SHIP +ELSE + ERR_BOX(' "CONTROL" file INSTALLER ARRAY is INVALID ', ; + ' go to the FILE menu - TABLES AND CODE Definitions ', ; + ' SYSTEM CONTROL file and fix the ARRAY!', ; + ' Order entry will NOT be correct until this is fixed!') +ENDIF +MGL521_AMT := GL521_AMT +MCOD_ARR := COD_CODE + //** P3N - 07/09/01 +IF AT('{',MCOD_ARR ) > 0 .AND. AT('}',MCOD_ARR ) > 0 + MCOD_ARR := &MCOD_ARR +ELSE + ERR_BOX(' "CONTROL" file COD code array is INVALID ', ; + ' go to the FILE menu - TABLES AND CODE Definitions ', ; + ' SYSTEM CONTROL file and fix the ARRAY!', ; + ' Order entry will NOT be correct until this is fixed!') +ENDIF + +FRACTION_ARR := MAKE_FRACTARR() + +SELECT CONTROL +USE + +************************** +// INVOKE THE MAIN MENU FROM HERE + +*** +*** THIS LOOP INVOKES THE MAIN MENU +*** +OPTION := 0 +CLS +DO WHILE .T. + CALLMENU(SYSCODE + '0000', OPTION) +ENDDO + + + +**************************************************** + +PROCEDURE BUILDMENUS(INIT, ARCHIVE) +LOCAL SYSTITLE, REVVAR, REVVARARR, TITLE1, TITLE2, TITLE3 +LOCAL EXTRA_UTIL := {} +LOCAL LSTART := 0 + +PRIVATE LONGITEM, TROW, BROW, LCOL, RCOL, MENUTYPE +PRIVATE ITEMARR, MENUPARM + +MENUARR := {} + +IF EMPTY(ARCHIVE) + ARCHIVE := .F. + BLDPRNTMENU(5,42) + BLDMASTMENU(ARCHIVE) + BLDIMPORTMENU(INIT, FUN1, FUN4, 0, 5) // MENUPOS = 0, LSTART = 5 +ELSE + ARCHIVE := .T. + BLDMASTMENU(ARCHIVE) + BLDARCHMENU() + RETURN //** EXIT BUILDMENUS PROCEDURE!!! +ENDIF + +// THE UTILITY MENU IS CALLED FROM BELOW + + +// IS THE USER PROPERLY SIGNED ON??? +IF EMPTY(USER) + // NO KICK THEM OUT!!!!!!! + ERR_BOX(' Invalid User - Sign ON to USE the System! ' ) + QUITPROC() +ENDIF + +// SEE IF ORDER CONTROL CAPABLE! + +DBOPEN('PASSWORD') +SEEK USER +IF O_CONTROL = 'X' .OR. INIT = '_FMAINT' + SETAVAR( 'SET', 'ACTION_CODE', 'ADD' ) + _OC_CAPABLE = .T. +ELSE + _OC_CAPABLE = .F. +ENDIF +USE + + +IF INIT = '_FMAINT' + M->_THISUSER_TEMP := ALLTRIM( INIT ) +ELSE + M->_THISUSER_TEMP := ALLTRIM( USER ) +ENDIF +// 6/3/2020 +M->_THISUSER_TEMP := GETENV( 'APPDATA' ) + '\LAAPC\' + M->_THISUSER_TEMP + '.TXT' + +MENU_POS := {} // HOLDS LCOL POSITION OF MAIN MENU OPTION NAMES +AADD(MENU_POS, 0) +AADD(MENU_POS, 10) +AADD(MENU_POS, 22) +AADD(MENU_POS, 34) +AADD(MENU_POS, 44) +AADD(MENU_POS, 54) + +OFFSET = 5 // AMOUNT TO STAGGER SUB MENUS +X = 0 // ARRAY POINTER + + +*********************************** +** FILE MENU +*********************************** + +IF FUN1 = 'X' //////////////// F I L E \\\\\\\\\\\\\\\\\\\ + + X++ + LSTART = MENU_POS[X] + + ITEMARR := {} + MENUID := 'FILE000' + MENUTYPE := 'V' + TROW := 2 + LCOL := LSTART + AADD(ITEMARR, {'OPEN', 'CGW1100', 'M', .T.}) + AADD(ITEMARR, {'---------------------', , 'M', .F.}) + AADD(ITEMARR, {'SYSTEM ADMINSTRATION', 'IMP1200', 'M', .T.}) + AADD(ITEMARR, {'---------------------', , 'M', .F.}) +**AADD(ITEMARR, {'PRINT / REVIEW Setup Data', 'PRNTDISP', 'M', .T.}) + AADD(ITEMARR, {'ARCHIVE Processing', 'ARCHMENU', 'M', .T.}) + AADD(ITEMARR, {'---------------------', , 'M', .F.}) + AADD(ITEMARR, {'EXIT (Alt-E) ', 'ALTEPROC', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'CGW1100' + MENUTYPE := 'V' + TROW := 4 + LCOL := LSTART + OFFSET + AADD(ITEMARR, {'MODEL/PRODUCT Setup', 'CGW1111', 'M', .T.}) + AADD(ITEMARR, {'CATEGORY Setup', 'CGW1121', 'M', .T.}) + AADD(ITEMARR, {'ATTRIBUTE Definitions', 'CGW1140', 'M', .T.}) + AADD(ITEMARR, {'FRAME CUTTING Attributes', 'CGW1130', 'M', .T.}) + AADD(ITEMARR, {'CUSTOMER Maintenance', 'CGW1170', 'M', .T.}) + AADD(ITEMARR, {'RULE BASE (System Wide)', 'CGW1150', 'M', .T.}) + AADD(ITEMARR, {'TABLES and CODE Definitions', 'TABLECODE', 'M', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ///////////////// PRODUCTS \\\\\\\\\\\\\\\\\\\\\\\\\\\ + ITEMARR := {} + MENUID := 'CGW1111' + MENUTYPE := 'V' + TROW = 6 + LCOL := LSTART + (OFFSET*2) + TITLE1 = 'DEFINE Models' + TITLE2 := 'DEFAULT CHOICES for MODEL Attributes' + TITLE3 = 'DELETE Model from System' + TITLE4 = 'REVIEW Model Setup Definitions' + AADD(ITEMARR, {TITLE1, "CGWACD('PRODUCTS')" , 'P', .T.}) + AADD(ITEMARR, {TITLE3, "ACD_PAR_CHILD({'PRODUCT', 'PROD_ATTS', .T., 3, 'DEL' })", 'P', DEL_CAPABLE}) + AADD(ITEMARR, {'BASE PRICES for Model', "CGWPRICE", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {'STANDARD SIZE Definitions', "ACD_PAR_CHILD({'PRODUCT', 'STD_SIZES', .F., 6, 'ADD' })", 'P', ADD_CAPABLE}) +**AADD(ITEMARR, {'MISCELEANOUS PARTS Setup', "ACD_PAR_CHILD({NIL, 'MISC_ITEMS', .F., 3, 'ADD' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {'MISCELEANOUS PARTS Setup', "MISC_WHATWAY()" ,'P', ADD_CAPABLE}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + ///////////////// CATEGORY \\\\\\\\\\\\\\\\\\\\\\\\\\\ + ITEMARR := {} + MENUID := 'CGW1121' + MENUTYPE := 'V' + TROW = 7 + LCOL := LSTART + (OFFSET*2) + TITLE1 = 'DEFINE Categories' + TITLE2 := 'PRICING EXTRAS for Category' + TITLE3 = 'DELETE Categories from System' + TITLE4 = 'REVIEW Category Setup Definitions' + AADD(ITEMARR, {TITLE1, "CGWACD('CATEGORY')" , 'P', .T.}) + AADD(ITEMARR, {TITLE3, "ADD_SING_REC({'CATEGORY', .T.,,,,,'DEL' })", 'P', DEL_CAPABLE}) + AADD(ITEMARR, {TITLE2, "ACD_PAR_CHILD({'CATEGORY', 'PRI_EXTRAS', .F., 6, 'ADD' })", 'P', ADD_CAPABLE}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + ///////////////// ATTRIBUTES \\\\\\\\\\\\\\\\\\\\\\ + ITEMARR := {} + MENUID := 'CGW1140' + MENUTYPE := 'V' + TROW = 8 + LCOL := LSTART + (OFFSET*2) + TITLE1 = 'ADD/CHANGE SYSTEM ATTRIBUTE Codes' + TITLE2 = 'DELETE Attributes from System' + TITLE3 = 'REVIEW Attribute Code Tables' + TITLE4 = 'RENAME Attributes' + AADD(ITEMARR, {TITLE1, "ACD_PAR_CHILD({'ATTRIBUTES','ATT_OPTS', .T., 3, 'ADD' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {TITLE2, "ACD_PAR_CHILD({'ATTRIBUTES','ATT_OPTS', .T., 3, 'DEL' })", 'P', DEL_CAPABLE}) + AADD(ITEMARR, {TITLE4, "REN_ATT()", 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'CGW1130' + MENUTYPE := 'V' + TROW = 9 + LCOL := LSTART + (OFFSET*2) + TITLE1 = 'ADD/CHANGE SYSTEM CUTTING ATTRIBUTE Codes' + TITLE2 = 'DELETE Cutting Attributes from System' + TITLE3 = 'REVIEW Cutting Attribute Code Tables' + + + AADD(ITEMARR, {TITLE1, "ACD_PAR_CHILD({NIL, 'ATTRIB_CUT', .T. })", 'P', ADD_CAPABLE}) +**AADD(ITEMARR, {TITLE1, "ADD_SING_REC({'ATTRIB_CUT', .T. })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {TITLE2, "ADD_SING_REC({'ATTRIB_CUT', .T.})", 'P', DEL_CAPABLE}) + AADD(ITEMARR, {TITLE3, "GBROWSE({'ATTRIB_CUT', {}, .F., })", 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + ///////////////// CUSTOMER MASTER \\\\\\\\\\\\\\\\\\\ + ITEMARR := {} + MENUID := 'CGW1170' + MENUTYPE := 'V' + TROW := 10 + LCOL := LSTART + (OFFSET*2) + TITLE1 = 'ADD/CHANGE Customers' + TITLE2 = 'DELETE Customers ' + TITLE3 = 'REVIEW Customers ' + + AADD(ITEMARR, {TITLE1, "ADD_SING_REC({'CUST_MAST', .T.,,,,,'ADD',,.T.})", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {"SPECIAL CUSTOMER PRICING", "SPEC_PRICING(.T.)", 'P', .T.}) + AADD(ITEMARR, {TITLE2, "ADD_SING_REC({'CUST_MAST', .T.,,,,,'DEL',,.T.})", 'P', DEL_CAPABLE}) + AADD(ITEMARR, {TITLE3, "GBROWSE({'CUST_MAST', {'CUST_PRICE'}, .F., })", 'P', .T.}) + AADD(ITEMARR, {'UPDATE/REVIEW GREAT PLAINS Files', "CALL_BTREV()", 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ///////////////// RULE BASE \\\\\\\\\\\\\\\\\\\\\\ + ITEMARR := {} + MENUID := 'CGW1150' + MENUTYPE := 'V' + TROW = 11 + LCOL := LSTART + (OFFSET*2) + TITLE1 = 'ADD/CHANGE System Rules' + TITLE2 = 'DELETE Rules from System' + TITLE3 = 'REVIEW Rules' + + AADD(ITEMARR, {TITLE1, "ACD_PAR_CHILD({'RULES', 'RULEPACK', .T., 6, 'ADD',,,,,,.T.,'USERFILEI' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {TITLE2, "ACD_PAR_CHILD({'RULES', 'RULEPACK', .T., 6, 'DEL',,,,,,.T.,'USERFILEI' })", 'P', DEL_CAPABLE}) + AADD(ITEMARR, {"VERIFY RULES Report", 'PRNTDISP("RULE REPORT")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + ITEMARR := {} + MENUID := 'TABLECODE' + MENUTYPE := 'V' + TROW := 12 + LCOL := LSTART + (OFFSET*2) + AADD(ITEMARR, {'TAX TABLE Maintenance', "TAXMENU", 'M', .T.}) + AADD(ITEMARR, {'MANUFACTURING LOCATIONS ', 'MGFMENU', 'M', .T.}) + AADD(ITEMARR, {'GLASS BOX Sizes', "ACD_PAR_CHILD({NIL, 'GLASS_BOX', .T., 3, 'ADD' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {'UOM Master List', "ACD_PAR_CHILD({NIL, 'UOMFILE', .T., 3, 'ADD' ,,,,,,.T.,'USERFILEX' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {'COLOR Master List', "ACD_PAR_CHILD({NIL, 'COLOR_LIST', .T., 3, 'ADD',,,,,,.T.,'USERFILEX' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {'REPAYMENT TERMS List', "ACD_PAR_CHILD({NIL, 'TERMS', .T., 3, 'ADD' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {'SALES MEN Master List', "ACD_PAR_CHILD({NIL, 'SALESMEN', .T., 3, 'ADD' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {'SHIPPING Methods', "ACD_PAR_CHILD({NIL, 'SHIPMETH', .T., 3, 'ADD' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {'SYSTEM CONTROL File', "ADD_SING_REC({'CONTROL', .T., , , , ,'ADD', , ,.F. })", 'P', ADD_CAPABLE}) // DO_MANYGETS = .F. + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'TAXMENU' + MENUTYPE := 'V' + TROW = 14 + LCOL := LSTART + (OFFSET*3) + TITLE3 = 'TAX SCHEDULE Update' + TITLE4 = 'TAX DETAIL Update' + AADD(ITEMARR, {TITLE3, "ACD_PAR_CHILD({NIL, 'TAX_SCHED', .T., 3, 'ADD' })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {TITLE4, "ACD_PAR_CHILD({NIL, 'TAX_DETAIL', .F., 3, 'ADD',,,,.T.,,, })", 'P', ADD_CAPABLE}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + ///////////////// MFG LOCATION \\\\\\\\\\\\\\\\\\\ + ITEMARR := {} + MENUID := 'MGFMENU' + MENUTYPE := 'V' + TROW := 15 + LCOL := LSTART + (OFFSET*3) + TITLE1 = 'ADD/CHANGE Manufacturing Locations' + TITLE2 = 'DELETE Manufacturing Locations from System' + TITLE3 = 'REVIEW Manufacturing Locations' + + AADD(ITEMARR, {TITLE1, "ADD_SING_REC({'MFG_LOC', .T. })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {TITLE2, "ADD_SING_REC({'MFG_LOC', .T.})", 'P', DEL_CAPABLE}) + AADD(ITEMARR, {TITLE3, "GBROWSE({'MFG_LOC', {}, .F., })", 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ENDIF + +*********************************** +** ARCHIVE MENU +*********************************** + + +ITEMARR := {} +MENUID := 'ARCHMENU' +MENUTYPE := 'V' +TROW := 8 +LCOL := LSTART + OFFSET +AADD(ITEMARR, {'Select ARCHIVE', 'SET_ARCHIVE()', 'P', .T.}) +**IF _OC_CAPABLE +IF INIT = '_FMAINT' .OR. FUN6 = 'X' + AADD(ITEMARR, {'ARCHIVE Orders ', 'ORD_ARCHIVE()', 'P', .T.}) +ENDIF +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + +*********************************** +** PROCESS MENU +*********************************** + +IF FUN2 = 'X' + X++ + LSTART = MENU_POS[X] + + ITEMARR := {} + MENUID := 'PROCESS000' + MENUTYPE := 'V' + TROW := 2 + LCOL := LSTART + AADD(ITEMARR, {'ORDER ENTRY', 'OPEN2100("NEWOPEN", "CGW2100")', 'P', .T.}) + AADD(ITEMARR, {'PRINT ORDERS', 'OPEN2100("NEWOPEN", "CGW2200")', 'P', .T.}) + IF _OC_CAPABLE + AADD(ITEMARR, {'CONTROL', 'CONTROL000', 'M', .T. }) + IF INIT = '_FMAINT' .OR. FUN6 = 'X' + AADD(ITEMARR, {'POST To Accounting', "POST_ACCT", 'M', .T. }) + ENDIF + ENDIF + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + ITEMARR := {} + MENUID := 'CONTROL000' + MENUTYPE := 'V' + TROW := 6 + LCOL := LSTART + OFFSET + AADD(ITEMARR, {'PRODUCTION CONTROL', "CNTRL_FUNC('PROD')", 'P', .T. }) + IF INIT = '_FMAINT' .OR. FUN6 = 'X' + AADD(ITEMARR, {'ORDER CONTROL', "CNTRL_FUNC('SHIP')", 'P', .T. }) + ENDIF + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +//** P3N - COMMENTED OUT 1/15/99 - I DO NOT THINK IT IS USED!!!! +//**ITEMARR := {} +//**MENUID := 'CONTROL030' //P3N - 5/12/98 - PRINT MENU BACKORDER +//**MENUTYPE := 'V' +//**TROW := 19 +//**LCOL := LSTART + (OFFSET*3) +//**AADD(ITEMARR, {'SHIP ENTIRE ORDER', "SHIP_TOTQTY('ORD_MAST',.F.)", 'P', .T. }) +//**AADD(ITEMARR, {'ORDER SHIPPING (LINE ITEMS)', "ACD_PAR_CHILD({ , 'OS_WORK', .F., 3, 'ADD NOAPPEND',,,,,'2135',.F.,'USERFILE2'})", 'P', .T. }) +//**AADD(ITEMARR, {'ORDER SHIPPING (LINE ITEMS)', "ACD_PAR_CHILD({ , 'ORD_SHIP', .F., 3, 'ADD NOAPPEND',,,,,'2135',.F.,'USERFILE2'})", 'P', .T. }) +//**ADDMENU(MENUARR, ITEMARR, TROW, LCOL) +//** P3N - COMMENTED OUT 1/15/99 - I DO NOT THINK IT IS USED!!!! + + + ITEMARR := {} + MENUID := 'CGW2100' + MENUTYPE := 'V' + TROW := 4 + LCOL := LSTART + OFFSET + IF _OC_CAPABLE + AADD(ITEMARR, {'SALES ORDER Processing', 'OPEN2100("ORDER")', 'P', _OC_CAPABLE }) + ENDIF + AADD(ITEMARR, {'QUOTE Processing', 'OPEN2100("QUOTE")', 'P', .T.}) + IF _OC_CAPABLE + AADD(ITEMARR, {'CONVERT Quotes to Orders', 'OPEN2100("CONV_QUOTE")', 'P', ADD_CAPABLE}) + ENDIF + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'CGW2110' + MENUTYPE := 'V' + TROW := 6 + LCOL := LSTART + (OFFSET*2) + TITLE1 := 'ADD Sales Orders' + TITLE2 := 'DELETE Sales Orders' + TITLE3 := 'CHANGE Sales Orders' + TITLE4 := 'REVIEW Sales Orders' + TITLE5 := 'REVIEW Customers ' +**SCRNUM := '2110' + AADD(ITEMARR, {TITLE1, "ACD_ORDERS({'ORD_MAST', 'ORD_LINES' , .T., 3, 'ADD',,,,,, .F. })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {TITLE3, "ACD_ORDERS({'ORD_MAST', 'ORD_LINES', .T., 3, 'ADD',,,,,, .F.,,'2110',,.T. })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {TITLE2, "ACD_ORDERS({'ORD_MAST', 'ORD_LINES', .T., 3, 'DEL',,,,,, .F. })", 'P', DEL_CAPABLE}) + AADD(ITEMARR, {TITLE4, "ACD_ORDERS({'ORD_MAST', 'ORD_LINES', .T., 3, 'REV',,,,,, .F.,,'2110',,.T. })", 'P', .T.}) + AADD(ITEMARR, {TITLE5, "GBROWSE({'CUST_MAST', {'CUST_PRICE'}, .F., })", 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'CGW2112' + MENUTYPE := 'V' + TROW := 7 + LCOL := LSTART + (OFFSET*2) + TITLE1 := 'ADD Quote' + TITLE2 := 'DELETE Quote' + TITLE3 := 'CHANGE Quote' + TITLE4 := 'REVIEW Quotes' +**SCRNUM := '2210' + AADD(ITEMARR, {TITLE1, "ACD_ORDERS({'QUOTE_MAST', 'QUOTE_LINE', .T., 3, 'ADD',,,,,, .F. })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {TITLE3, "ACD_ORDERS({'QUOTE_MAST', 'QUOTE_LINE', .T., 3, 'ADD',,,,,, .F.,,'2210',,.T. })", 'P', ADD_CAPABLE}) + AADD(ITEMARR, {TITLE2, "ACD_ORDERS({'QUOTE_MAST', 'QUOTE_LINE', .T., 3, 'DEL',,,,,, .F. })", 'P', DEL_CAPABLE}) + AADD(ITEMARR, {TITLE4, "ACD_ORDERS({'QUOTE_MAST', 'QUOTE_LINE', .T., 3, 'REV',,,,,, .F.,,'2210',,.T. })", 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'CGW2200' + MENUTYPE := 'V' + TROW := 5 + LCOL := LSTART + (OFFSET*1) + AADD(ITEMARR, {'ORDER Print', 'CGW2210', 'M', .T.}) + AADD(ITEMARR, {'QUOTE Print', 'OPEN2100("PRT QUOTE")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'CGW2210' + MENUTYPE := 'V' + TROW := 7 + LCOL := LSTART + (OFFSET * 2) + AADD(ITEMARR, {'SELECTED Orders', 'OPEN2100("PRT ORD", , "SEL")', 'P', .T.}) + AADD(ITEMARR, {'ALL UNPRINTED Orders', 'OPEN2100("PRT ORD", , "ALL")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + ITEMARR := {} + MENUID := 'ORDERS020' + MENUTYPE := 'V' + TROW := 10 + LCOL := LSTART + (OFFSET*2) + AADD(ITEMARR, {'PRODUCTION Orders', 'PRODORDER', 'M', .T.}) + AADD(ITEMARR, {'DELIVERY Tickets', 'PRNT_ORDER("DEL")', 'P', .T.}) + AADD(ITEMARR, {'ORDER DESK SPINDLE Copy', 'PRNT_ORDER("OD")', 'P', .T.}) + AADD(ITEMARR, {'INTERCOMPANY Purchase Order', 'PRNT_ORDER("PO")', 'P', .T.}) + IF _OC_CAPABLE + IF INIT = '_FMAINT' .OR. FUN6 = 'X' + AADD(ITEMARR, {'CUSTOMER Invoice', 'PRNT_ORDER("INV")', 'P', .T.}) + ENDIF + ENDIF + AADD(ITEMARR, {'PRE-BILL Invoice', 'PRNT_ORDER("PREBILL")', 'P', .T.}) + AADD(ITEMARR, {'PRE-COST Copy', 'PRNT_ORDER("PRECOST")', 'P', .T.}) + AADD(ITEMARR, {'BACKORDER Copy', 'PRNT_ORDER("BACKORD")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'PRODORDER' + MENUTYPE := 'V' + TROW := 12 + LCOL := LSTART + (OFFSET*3) + AADD(ITEMARR, {'PRODUCTION Orders', 'PRNT_ORDER("PROD")', 'P', .T.}) + AADD(ITEMARR, {'GOLDEN ROD CONTROL Copies', 'PRNT_ORDER("GOLDEN")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'ORDERS022' + MENUTYPE := 'V' + LCOL := LSTART + (OFFSET*2) + AADD(ITEMARR, {'Print CUSTOMER QUOTE', 'PRNT_ORDER("INV")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'ORDERS024' + MENUTYPE := 'V' + LCOL := LSTART + (OFFSET*2) + AADD(ITEMARR, {'CUSTOMER Invoice', 'PRNT_ORDER("INV")', 'P', .T.}) + AADD(ITEMARR, {'BACKORDER Copy', 'PRNT_ORDER("BACKORD")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'POST_ACCT' + MENUTYPE := 'V' + TROW := 7 + LCOL := LSTART + OFFSET + AADD(ITEMARR, {'Pre-Post Control Report', 'PRNTDISP("BILLTRAN RECAP")', 'P', .T.}) + AADD(ITEMARR, {'POST INVOICES to Accounting', 'POST_BILLTRAN', 'P', .T.}) + AADD(ITEMARR, {'REVIEW Posted MAPIX Transaction Files', 'REV_BILLTRAN', 'P', .T.}) + AADD(ITEMARR, {'REVIEW Posted ABW Transaction Files', 'REV_ABWTRAN', 'P', .T.}) + AADD(ITEMARR, {'Manual ZAP of Unposted File', 'ZAP_BILLTRAN', 'P', .T.}) + + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ENDIF + +*********************************** +** REPORTS MENU +*********************************** + + +IF FUN3 = 'X' + X++ + LSTART = MENU_POS[X] + + ITEMARR := {} + MENUID := 'OUTPUT000' + MENUTYPE := 'V' + TROW := 2 + LCOL := LSTART + AADD(ITEMARR, {"REPORTS", 'REPORTS', 'M', .T.}) + AADD(ITEMARR, {"LABELS", 'LABELS', 'M', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +******* +// REPORTS OUTPUT OPTION + ITEMARR := {} + MENUID := 'REPORTS' + MENUTYPE := 'V' + TROW := 4 + LCOL := LSTART + OFFSET + AADD(ITEMARR, {"SALES History", 'PRNTDISP("SALEHIST RECAP")', 'P', .T.}) + AADD(ITEMARR, {"CUSTOMER Information", 'CUSTINFO', 'M', .T.}) + AADD(ITEMARR, {"ORDER Reports", 'PRNTDISP("ORDER MASTER")', 'P', .T.}) + AADD(ITEMARR, {"ORDER Fulfillment", 'PRNTDISP("ORDER FULFILLMENT")', 'P', .T.}) + AADD(ITEMARR, {"PRODUCTION Reports", 'PRNTDISP("MONTHLY PRODUCTION")', 'P', .T.}) + AADD(ITEMARR, {"PRICING Reports", 'PRICEMENU', 'M', .T.}) + AADD(ITEMARR, {"CUTTING Reports", 'CUTMENU', 'M', .T.}) + AADD(ITEMARR, {"SETUP REFERENCE Files", 'PRDIMENU', 'M', .T.}) + AADD(ITEMARR, {"VERIFY RULES Report", 'PRNTDISP("RULE REPORT")', 'P', .T.}) + // AADD(ITEMARR, {"Printer Setup", 'PRINTERSETUP()', 'P', .T. , .T. }) // 1-20-20 CALL AS_IS - NO ADDITIONAL MENU / RUN PARMS + //**AADD(ITEMARR, {"UNPOSTED BILLING Transactions", 'PRNTDISP("BILLTRAN RECAP")', 'P', .T.}) + + + + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'CUSTINFO' + MENUTYPE := 'V' + TROW := 6 + LCOL := LSTART + (OFFSET*2) + AADD(ITEMARR, {"DELIVERY / SETUP", 'DELTERM', 'M', .T.}) + AADD(ITEMARR, {"SPECIAL PRICING", 'SPECPRICE', 'M', .T.}) + AADD(ITEMARR, {'CUSTOMER MASTER', 'PRNTDISP( [CUSTOMER MASTER] )', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'DELTERM' + MENUTYPE := 'V' + TROW := 8 + LCOL := LSTART + (OFFSET*3) + AADD(ITEMARR, {'DELIVERY Information', 'PRNTDISP("CUSTDEL")', 'P', .T.}) + AADD(ITEMARR, {'SETUP Information', 'PRNTDISP("CUSTSETUP")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'SPECPRICE' + MENUTYPE := 'V' + TROW := 9 + LCOL := LSTART + (OFFSET*3) + AADD(ITEMARR, {"Special Pricing LIST", 'PRNTDISP("SPEC PRICE")', 'P', .T.}) + AADD(ITEMARR, {"Special Pricing SETUP Report", 'PRNTDISP("PRICING REPORT-CUST")', 'P', .T.}) + AADD(ITEMARR, {"DISCOUNTS Report", 'PRNTDISP("DISCOUNTS")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'PRICEMENU' + MENUTYPE := 'V' + TROW := 9 + LCOL := LSTART + (OFFSET*2) + AADD(ITEMARR, {"MODEL Pricing Reports", 'PRNTDISP("PRICING REPORT-MODEL")', 'P', .T.}) + AADD(ITEMARR, {"BASE PRICE TABLE Report", 'PRICERPT', 'M', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'PRICERPT' + MENUTYPE := 'V' + TROW := 12 + LCOL := LSTART + (OFFSET*3) + AADD(ITEMARR, {'SPECIFIC Product', 'CGWPRINT("MODEL BASE PRICE")', 'P', .T.}) + AADD(ITEMARR, {'ALL PRODUCTS in a CATEGORY', 'CGWPRINT("CATEGORY BASE PRICE")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'CUTMENU' + MENUTYPE := 'V' + TROW := 10 + LCOL := LSTART + (OFFSET*2) + AADD(ITEMARR, {"MODEL PRODUCTION CUTTING Report", 'PRNTDISP("PRODUCT REPORT-MODEL")', 'P', .T.}) + AADD(ITEMARR, {"CUSTOMER PRODUCTION CUTTING Report", 'PRNTDISP("PRODUCT REPORT-CUST")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +******* +// LABEL OUTPUT OPTION + ITEMARR := {} + MENUID := 'LABELS' + MENUTYPE := 'V' + TROW := 5 + LCOL := LSTART + OFFSET + AADD(ITEMARR, {"CUSTOMER Mailing Labels", 'MAILLABEL', 'M', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'MAILLABEL' + MENUTYPE := 'V' + TROW := 7 + LCOL := LSTART + (OFFSET * 2) + AADD(ITEMARR, {"ONE Customer", 'LABEL_RUN("CUSTOMER-ONE")', 'P', .T.}) + AADD(ITEMARR, {"MANY Customers", 'LABEL_RUN("CUSTOMER-MANY")', 'P', .T.}) + AADD(ITEMARR, {"ONE Customer - Shipping Address", 'LABEL_RUN("CUSTOMER-ONE-SHIP")', 'P', .T.}) + AADD(ITEMARR, {"MANY Customers - Shipping Address", 'LABEL_RUN("CUSTOMER-MANY-SHIP")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + //// PRINT / REVIEW \\\\\\ + ITEMARR := {} + MENUID := 'PRDIMENU' + MENUTYPE := 'V' + TROW := 11 + LCOL := LSTART + (OFFSET*2) + AADD(ITEMARR, {'MODEL Definitions', 'PRNTMODL', 'M', .T.}) + AADD(ITEMARR, {'CATEGORY Definitions', 'PRNTCAT', 'M', .T.}) + AADD(ITEMARR, {'System Wide ATTRIBUTE Definitions', 'PRNTATT', 'M', .T.}) + AADD(ITEMARR, {'MANUFACTURING LOCATIONS', 'PRNTDISP( [MANUFACTURING LOCATIONS] )', 'P', .T.}) + AADD(ITEMARR, {'STANDARD SIZES', 'PRNTDISP("STD_SIZES")', 'P', .T.}) + AADD(ITEMARR, {'PRICING EXTRAS', 'PRNTDISP("PRICING EXTRAS")', 'P', .T.}) + AADD(ITEMARR, {'RULES', 'PRNTDISP("RULES")', 'P', .T.}) + AADD(ITEMARR, {'TAX Information', 'TAXDISP', 'M', .T.}) + + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'PRNTMODL' + MENUTYPE := 'V' + TROW++ + TROW++ + LCOL := LSTART + (OFFSET*3) + AADD(ITEMARR, {'DEFAULT CHOICES - Model Attributes', 'CGWPRINT("MODEL OPTIONS")', 'P', .T.}) + AADD(ITEMARR, {'ATTRIBUTES Assigned to Models', 'PRNTDISP("MODEL ATTRIBUTES")', 'P', .T.}) + AADD(ITEMARR, {'LIST of Models', 'PRNTDISP("MODEL")', 'P', .T.}) + AADD(ITEMARR, {'MISCELLEANOUS Items List', 'PRNTDISP("MISC ITEMS")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'PRNTCAT' + MENUTYPE := 'V' + TROW++ + LCOL := LSTART + (OFFSET*3) + AADD(ITEMARR, {'DEFAULT CHOICES - Category Attributes', 'CGWPRINT("CATEGORY OPTIONS")', 'P', .T.}) + AADD(ITEMARR, {'ATTRIBUTES Assigned to Categories', 'PRNTDISP("CATEGORY ATTRIBUTES")', 'P', .T.}) + AADD(ITEMARR, {'LIST of Categories', 'PRNTDISP("CATEGORY")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + ITEMARR := {} + MENUID := 'PRNTATT' + MENUTYPE := 'V' + TROW++ + LCOL := LSTART + (OFFSET*3) + AADD(ITEMARR, {'System Wide Attribute CHOICES', 'PRNTDISP("ATTRIBUTE OPTIONS")', 'P', .T.}) + AADD(ITEMARR, {'LIST of System Wide Attributes', 'PRNTDISP("ATTRIBUTES")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + ITEMARR := {} + MENUID := 'TAXDISP' + MENUTYPE := 'V' + TROW := 20 + LCOL := LSTART + (OFFSET*4) + AADD(ITEMARR, {'SUMMARY SCHEDULES', 'PRNTDISP("TAX SUMMARY SCHEDULES")', 'P', .T.}) + AADD(ITEMARR, {'DETAIL COMPONENTS', 'PRNTDISP("TAX DETAIL COMPONENTS")', 'P', .T.}) + ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + + + + + +* ITEMARR := {} +* MENUID := 'REPORTS' +* MENUTYPE := 'V' +* TROW := 4 +* LCOL := LSTART + OFFSET +* AADD(ITEMARR, {"PRICING Report", 'PRICEMENU', 'M', .T.}) +* AADD(ITEMARR, {"PRODUCTION CUTTING Report", 'CUTMENU', 'M', .T.}) +* AADD(ITEMARR, {"CUSTOMER Listings", 'CUSTLIST', 'M', .T.}) +* AADD(ITEMARR, {"MONTHLY PRODCTION Report", 'PRNTDISP("MONTHLY PRODUCTION")', 'P', .T.}) +* AADD(ITEMARR, {"ORDER MASTER Report", 'PRNTDISP("ORDER MASTER")', 'P', .T.}) +* ADDMENU(MENUARR, ITEMARR, TROW, LCOL) +* +* ITEMARR := {} +* MENUID := 'PRICEMENU' +* MENUTYPE := 'V' +* TROW := 6 +* LCOL := LSTART + (OFFSET*2) +* AADD(ITEMARR, {"MODEL Pricing Reports", 'PRNTDISP("PRICING REPORT-MODEL")', 'P', .T.}) +* AADD(ITEMARR, {"BASE PRICE TABLE Report", 'PRICERPT', 'M', .T.}) +* AADD(ITEMARR, {"CUSTOMER Pricing Reports", 'CUSTPRICE', 'M', .T.}) +* ADDMENU(MENUARR, ITEMARR, TROW, LCOL) +* +* ITEMARR := {} +* MENUID := 'CUSTPRICE' +* MENUTYPE := 'V' +* TROW := 10 +* LCOL := LSTART + (OFFSET*3) +* AADD(ITEMARR, {"DISCOUNTS Report", 'PRNTDISP("DISCOUNTS")', 'P', .T.}) +* AADD(ITEMARR, {"SPECIAL PRICING List", 'PRNTDISP("SPEC PRICE")', 'P', .T.}) +* AADD(ITEMARR, {"CUSTOMER Pricing SETUP Report", 'PRNTDISP("PRICING REPORT-CUST")', 'P', .T.}) +* ADDMENU(MENUARR, ITEMARR, TROW, LCOL) +* +* ITEMARR := {} +* MENUID := 'CUTMENU' +* MENUTYPE := 'V' +* TROW := 7 +* LCOL := LSTART + (OFFSET*2) +* AADD(ITEMARR, {"MODEL PRODUCTION CUTTING Report", 'PRNTDISP("PRODUCT REPORT-MODEL")', 'P', .T.}) +* AADD(ITEMARR, {"CUSTOMER PRODUCTION CUTTING Report", 'PRNTDISP("PRODUCT REPORT-CUST")', 'P', .T.}) +* ADDMENU(MENUARR, ITEMARR, TROW, LCOL) +* +* ITEMARR := {} +* MENUID := 'PRICERPT' +* MENUTYPE := 'V' +* TROW := 9 +* LCOL := LSTART + (OFFSET*3) +* AADD(ITEMARR, {'SPECIFIC Product', 'CGWPRINT("MODEL BASE PRICE")', 'P', .T.}) +* AADD(ITEMARR, {'ALL PRODUCTS in a Category', 'CGWPRINT("CATEGORY BASE PRICE")', 'P', .T.}) +* ADDMENU(MENUARR, ITEMARR, TROW, LCOL) +* +* ITEMARR := {} +* MENUID := 'CUSTLIST' +* MENUTYPE := 'V' +* TROW := 10 +* LCOL := LSTART + (OFFSET*2) +* AADD(ITEMARR, {'DELIVERY Information', 'PRNTDISP("CUSTDEL")', 'P', .T.}) +* AADD(ITEMARR, {'CUSTOMER SALES TERMS/SETUP', 'PRNTDISP("CUSTSETUP")', 'P', .T.}) +* ADDMENU(MENUARR, ITEMARR, TROW, LCOL) +ENDIF + + +*********************************** +** UTILITY MENU +*********************************** + +X++ +LSTART = MENU_POS[X] + +AADD(EXTRA_UTIL, {'SEND/RECEIVE Setup Data', 'SEND/RECV', 'M', .T.}) +** IF _OC_CAPABLE +IF INIT = '_FMAINT' .OR. FUN6 = 'X' + AADD(EXTRA_UTIL, {'RESTORE Order/Quote Archive files', 'UTIL_OQFILES("RESTORE",.F.)', 'P', .T.}) +ENDIF +**AADD(EXTRA_UTIL, {'POST INVOICE to History', 'POST_BILLTRAN', 'P', .T.}) +BLDUTILMENU(LSTART, OFFSET, EXTRA_UTIL ) + +ITEMARR := {} +MENUID := 'SEND/RECV' +MENUTYPE := 'V' +TROW := 9 +LCOL := LSTART + OFFSET +AADD(ITEMARR, {'SEND Setup Data', 'SENDOPT', 'M', .T.}) +AADD(ITEMARR, {'RECEIVE Setup Data', 'RECVOPT', 'M', .T.}) +AADD(ITEMARR, {'BROWSE Transfer Data', 'REVUOPT', 'M', .T.}) +AADD(ITEMARR, {'ZAP Transfer Data', 'ZAPOPT', 'M', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ITEMARR := {} +MENUID := 'REVUOPT' +MENUTYPE := 'V' +TROW := 13 +LCOL := LSTART + (OFFSET*2) +AADD(ITEMARR, {'ATTRIBUTE Transfer Review', 'SEND_RECV("ATT", "REVU")', 'P', .T.}) +AADD(ITEMARR, {'CUTTING ATTS Transfer Review', 'SEND_RECV("CUT", "REVU")', 'P', .T.}) +AADD(ITEMARR, {'CATEGORY Transfer Review', 'SEND_RECV("CAT", "REVU")', 'P', .T.}) +AADD(ITEMARR, {'MODEL Transfer Review', 'SEND_RECV("MODEL", "REVU")', 'P', .T.}) +AADD(ITEMARR, {'RULE Transfer Review', 'SEND_RECV("RULE", "REVU")', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ITEMARR := {} +MENUID := 'SENDOPT' +MENUTYPE := 'V' +TROW := 11 +LCOL := LSTART + (OFFSET*2) +AADD(ITEMARR, {'ATTRIBUTE Send', 'SEND_RECV("ATT", "SEND")', 'P', .T.}) +AADD(ITEMARR, {'CUTTING ATTS Send', 'SEND_RECV("CUT", "SEND")', 'P', .T.}) +AADD(ITEMARR, {'CATEGORY Send', 'SEND_RECV("CAT", "SEND")', 'P', .T.}) +AADD(ITEMARR, {'MODEL Send', 'SEND_RECV("MODEL", "SEND")', 'P', .T.}) +AADD(ITEMARR, {'RULE Send', 'SEND_RECV("RULE", "SEND")', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ITEMARR := {} +MENUID := 'ZAPOPT' +MENUTYPE := 'V' +TROW := 14 +LCOL := LSTART + (OFFSET*2) +AADD(ITEMARR, {'ATTRIBUTE Zap', 'SEND_RECV("ATT", "ZAP")', 'P', .T.}) +AADD(ITEMARR, {'CUTTING ATTS Zap', 'SEND_RECV("CUT", "ZAP")', 'P', .T.}) +AADD(ITEMARR, {'CATEGORY Zap', 'SEND_RECV("CAT", "ZAP")', 'P', .T.}) +AADD(ITEMARR, {'MODEL Zap', 'SEND_RECV("MODEL", "ZAP")', 'P', .T.}) +AADD(ITEMARR, {'RULE Zap', 'SEND_RECV("RULE", "ZAP")', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ITEMARR := {} +MENUID := 'RECVOPT' +MENUTYPE := 'V' +TROW := 12 +LCOL := LSTART + (OFFSET*2) +AADD(ITEMARR, {'ATTRIBUTE Receive', 'SEND_RECV("ATT", "RECV")', 'P', .T.}) +AADD(ITEMARR, {'CUTTING ATTS Receive', 'SEND_RECV("CUT", "RECV")', 'P', .T.}) +AADD(ITEMARR, {'CATEGORY Receive', 'SEND_RECV("CAT", "RECV")', 'P', .T.}) +AADD(ITEMARR, {'MODEL Receive', 'SEND_RECV("MODEL", "RECV")', 'P', .T.}) +AADD(ITEMARR, {'RULE Receive', 'SEND_RECV("RULE","RECV")', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + +RETURN + +****************************************************************** +****************************************************************** +****************************************************************** +PROCEDURE BLDMASTMENU(ARCHIVE) +LOCAL PD_MENU1 := ' File ' +LOCAL PD_MENU2 := ' Process ' +LOCAL AR_MENU2 := ' Process Archive' +LOCAL PD_MENU3 := ' Output ' +LOCAL PD_MENU4 := ' Utility' +LOCAL PD_MENU5 := ' Passwords ' + +ITEMARR := {} +IF EMPTY(ARCHIVE) + ARCHIVE := .F. + MENUID := 'CGW0000' +ELSE + ARCHIVE := .T. + MENUID := 'CGWARCH' +ENDIF +MENUTYPE := 'H' +TROW := 0 +LCOL := 0 + +IF ARCHIVE + AADD(ITEMARR, {AR_MENU2, ALLTRIM(UPPER(PD_MENU2))+'000', 'M', .T.}) +**AADD(ITEMARR, {PD_MENU3, ALLTRIM(UPPER(PD_MENU3))+'000', 'M', .T.}) +ELSE + IF FUN1 = 'X' + AADD(ITEMARR, {PD_MENU1, ALLTRIM(UPPER(PD_MENU1))+'000', 'M', .T.}) + ENDIF + IF FUN2 = 'X' + **AADD(ITEMARR, {PD_MENU2, ALLTRIM(UPPER(PD_MENU2))+'000', 'M', .T.}) + AADD(ITEMARR, {PD_MENU2, ALLTRIM(UPPER(PD_MENU2))+'000', 'M', .T.}) + ENDIF + IF FUN3 = 'X' + AADD(ITEMARR, {PD_MENU3, ALLTRIM(UPPER(PD_MENU3))+'000', 'M', .T.}) + ENDIF + AADD(ITEMARR, {PD_MENU4, ALLTRIM(UPPER(PD_MENU4))+'000', 'M', .T.}) + IF FUN5 = 'X' + AADD(ITEMARR, {PD_MENU5, ALLTRIM(UPPER(PD_MENU5))+'000', 'M', .T.}) + ENDIF +ENDIF +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) +RETURN +************************************************************* +* BUILD THE ARCHIVE MENU +************************************************************* +FUNCTION BLDARCHMENU() +LOCAL LSTART := 5 +LOCAL OFFSET := 5 +LOCAL TITLE1 := 'REVIEW Archived Orders' +LOCAL TITL1Q := 'REVIEW Archived Quotes' +LOCAL TITLE2 := 'PRINT Archived Orders' +LOCAL TITL2Q := 'PRINT Archived Quotes' + +ITEMARR := {} +MENUID := 'PROCESS000' +MENUTYPE := 'V' +TROW := 2 +LCOL := LSTART +AADD(ITEMARR, {'REVIEW ARCHIVE', 'OPEN2100("NEWOPEN", "CGW2100",,.T.)', 'P', .T.}) +AADD(ITEMARR, {'PRINT ARCHIVE', 'OPEN2100("NEWOPEN", "CGW2200",,.T.)', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ITEMARR := {} +MENUID := 'CGW2100' +MENUTYPE := 'V' +TROW := TROW+2 +LCOL := LSTART + (OFFSET*1) +AADD(ITEMARR, {'ORDER Processing', 'OPEN2100("ORDER",,,.T.)', 'P', .T.}) +AADD(ITEMARR, {'QUOTE Processing', 'OPEN2100("QUOTE",,,.T.)', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ITEMARR := {} +MENUID := 'CGW2110' +MENUTYPE := 'V' +TROW := TROW+2 +LCOL := LSTART + (OFFSET*2) +**SCRNUM := '2130' +AADD(ITEMARR, {TITLE1, "ACD_ORDERS({'ORD_MAST', 'ORD_LINES', .T., 3, 'REV',,,,,, .F.,,'2130',,.T. } )", 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +TROW := TROW+1 +ITEMARR := {} +MENUID := 'CGW2112' +MENUTYPE := 'V' +**SCRNUM := '2230' +AADD(ITEMARR, {TITL1Q, "ACD_ORDERS({'QUOTE_MAST', 'QUOTE_LINE', .T., 3, 'REV',,,,,, .F.,,'2230',,.T. })", 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ITEMARR := {} +MENUID := 'CGW2200' +MENUTYPE := 'V' +TROW := 5 +LCOL := LSTART + (OFFSET*1) +AADD(ITEMARR, {'PRINT ORDERS', 'OPEN2100("PRT ORD", "ORDERS020")', 'P', .T.}) +AADD(ITEMARR, {'QUOTE Print', 'OPEN2100("PRT QUOTE", "ORDERS022")', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + + +ITEMARR := {} +MENUID := 'ORDERS020' +MENUTYPE := 'V' +TROW := TROW+1 +LCOL := LSTART + (OFFSET*2) +AADD(ITEMARR, {'PRODUCTION Orders', 'PRODORDER', 'M', .T.}) +AADD(ITEMARR, {'DELIVERY Tickets', 'PRNT_ORDER("DEL_ARCH")', 'P', .T.}) +AADD(ITEMARR, {'ORDER DESK SPINDLE Copy', 'PRNT_ORDER("OD_ARCH")', 'P', .T.}) +AADD(ITEMARR, {'INTERCOMPANY Purchase Order', 'PRNT_ORDER("PO_ARCH")', 'P', .T.}) +AADD(ITEMARR, {'CUSTOMER Invoice', 'PRNT_ORDER("INV_ARCH")', 'P', .T.}) +AADD(ITEMARR, {'PRE-BILL Invoice', 'PRNT_ORDER("PREBILL_ARCH")', 'P', .T.}) +AADD(ITEMARR, {'PRE-COST Copy', 'PRNT_ORDER("PRECOST_ARCH")', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ITEMARR := {} +MENUID := 'PRODORDER' +MENUTYPE := 'V' +TROW := TROW+2 +LCOL := LSTART + (OFFSET*3) +AADD(ITEMARR, {'PRODUCTION Orders', 'PRNT_ORDER("PROD_ARCH")', 'P', .T.}) +AADD(ITEMARR, {'GOLDEN ROD CONTROL Copies', 'PRNT_ORDER("GOLDEN_ARCH")', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +ITEMARR := {} +MENUID := 'ORDERS022' +MENUTYPE := 'V' +LCOL := LSTART + (OFFSET*2) +TROW := 6 +AADD(ITEMARR, {'Print CUSTOMER QUOTE', 'PRNT_ORDER("INV_ARCH")', 'P', .T.}) +ADDMENU(MENUARR, ITEMARR, TROW, LCOL) + +RETURN +**************************************************************** +**************************************************************** +**************************************************************** + +FUNCTION MAKE_FRACTARR() +LOCAL L, MTOP, MBOTT, LAST_TOP, LAST_BOTT, MDECIMAL +LOCAL FRACTION_ARR := {}, MFRACTION + + +SET DECIMALS TO 5 +FOR L = 1 TO MBASE_NUM - 1 + MTOP = L + MBOTT = MBASE_NUM + IF L > 1 + LAST_TOP = MTOP + LAST_BOTT = MBOTT + MDECIMAL = MTOP / MBOTT // TURN FRACTION INTO DECIMAL NUMBER + // FIND REDUCED FRACTION VALUE + DO WHILE .T. + + + MTOP = MDECIMAL * MBOTT + IF MTOP - INT(MDECIMAL*MBOTT) <> 0 + // CAN'T REDUCE ANY FARTHER, SO EXIT + MTOP = LAST_TOP + MBOTT = LAST_BOTT + EXIT + ENDIF + LAST_TOP = MTOP + LAST_BOTT = MBOTT + MBOTT = MBOTT / 2 // CUT DENIMINATOR IN HALF FOR NEXT REDUCTION TEST! + IF MBOTT-INT(MBOTT) <> 0 + // CAN'T REDUCE ANY FARTHER, SO EXIT + MTOP = LAST_TOP + MBOTT = LAST_BOTT + EXIT + ENDIF + ENDDO + ELSE + MDECIMAL = MTOP / MBOTT // TURN FRACTION INTO DECIMAL NUMBER + ENDIF + + MFRACTION = STR(MTOP,2) + '/' + LTRIM(STR(INT(MBOTT))) + AADD(FRACTION_ARR, {MFRACTION, MDECIMAL} ) +NEXT +SET DECIMALS TO 2 +RETURN FRACTION_ARR + \ No newline at end of file diff --git a/CGW0200.PRG b/CGW0200.PRG new file mode 100644 index 0000000..d821209 --- /dev/null +++ b/CGW0200.PRG @@ -0,0 +1,714 @@ +* MIKE LEWIS -BUILD ADD, CHANGE, DELETE ARRAY- CGW0200 4-08-93 +PROCEDURE BUILDACD(MALIAS, SCR_NUM) + +PRIVATE ACDARR := {} +PRIVATE SCRNUM +PRIVATE FILELIST := {} +PRIVATE PREPROC := {} +PRIVATE POSTPROC := '' +PRIVATE OFFSET := 0 +PRIVATE EDITPROC := '' +PRIVATE COMPLETEKEY := NIL +PRIVATE CONVERT_KEY := '' +PRIVATE RELATED_DBF := '' +PRIVATE DOPROC +PRIVATE XTRA_HEADING +PRIVATE XTRA_CARGO +PRIVATE ESC_PROC + +IF SELECT('IMPCUST') = 0 + IC_PARMS = DBOPEN('IMPCUST') +ENDIF + //**** ACDARR LAYOUT ****\\ + // 1 = FILE ALIAS + // 2 = SCREEN NUMBER + // 3 = ARRAY OF FILES THAT NEED TO BE OPEN + // 4 = PROC TO EXECUTE BEFORE THE SAYS AND GETS + // ie TO PAINT ADDITIONAL INFO ON SCREEN, etc..... + // 5 = PROC TO EXECUTE AFTER THE GETS + // ie TO UPDATE ANY NON RELATED VARIABLES ...... + // 6 = HORIZONTAL OFFSET FOR SCREEN GETS + // 7 = PROC TO EDIT THE GET FIELDS + // 8 = ARRAY OF PARTIAL KEYS WHICH MAKE RECORD UNIQUE. + // IF ARRAY IS EMPTY, THEN ONLY ONE COMPONENT OF THE KEY + // 9 = KEY CONVERSION PROC - IE PAD WITH LEADING ZEROS, ETC. + // 10 = LIST OF DBF'S THAT SHOULD BE CONSIDERED WHEN DELETING INFO + // 1 ARRAY FOR EACH DBF. ELEMENT 1 = DBF ALIAS NAME, ELEM 2 = INDEX SEEK ORDER + // 11 = OPTIONAL TOP HEADING FOR ACD_BROWSE + // 12 = OPTIONAL ACD CARGO FOR HOT KEYS USED IN ACD_BROWSE + +DO CASE + + // DATA DICTIONARY + CASE MALIAS = 'DATADICT' + SCRNUM = '0950' + ACDARR := LOAD_ACDARR(MALIAS) + + // CONTROL FILE + CASE MALIAS = 'CONTROL' + SCRNUM = '9990' + PREPROC = { { 'CURVER' , 'G'},{'OPN_MFG()', 'I' } } +******PREPROC = { { 'CURVER' , 'G'},{'SVPRNTDTS()', 'I'} } // GETKEY PREPROC TO STUFF CURVER +***** POSTPROC = {'CLOSE_MFG()'} + ACDARR := LOAD_ACDARR(MALIAS) + + // GL ALLOC FILE + CASE MALIAS = 'GL_ALLOC' + SCRNUM = '8880' + AADD(PREPROC,{'ADDL_KEY()', 'K'} ) // KEY PREPROC +******AADD(PREPROC,{'TOT_GLALLOC(MORDER_NUM)', 'P'} ) //PAINT PREPROC +******PREPROC = { { 'CURVER' , 'G'} } +******PREPROC = { { 'CURVER' , 'G'},{'SVPRNTDTS()', 'I'} } // GETKEY PREPROC TO STUFF CURVER +******POSTPROC = {'RESET_PRNTDTS()'} + ACDARR := LOAD_ACDARR(MALIAS) + + // PRODUCTS + CASE MALIAS = 'PRODUCT' + SCRNUM = '1110' + PREPROC = { {'SET_NOTES("PRODUCT->NOTES", "Product")','P'} } // SETS HOT KEY FOR NOTE UPDATE + AADD(PREPROC, {'NEW_ITEM("MODEL")', 'M'}) + AADD(PREPROC, {'PAINT_KEYS("PROD_CODE",,41)','P'} ) // PAINT KEY FIELD + AADD(PREPROC, {'CAT_PAINT()', 'P'}) + POSTPROC = {'RESET_NOTES()', 'CONT_PROC("Are the MODEL ATTRIBUTES",'; + + '"DIFFERENT from the STANDARD",'; + + '"CATEGORY ATTRIBUTES?")'} + AADD(POSTPROC, {'CHK_PRODDEL()','D'} ) //** P3N - 9/22/00 + RELATED_DBF := { {'PROD_ATTS',1}, {'PROD_OPTS',1} } + AADD(RELATED_DBF, {'STD_SIZES', 1} ) + AADD(RELATED_DBF, {'STD_SASH', 1} ) + AADD(RELATED_DBF, {'CUT_SPEC', 1} ) +//** AADD(RELATED_DBF, {'MATHPACK', 1} ) + + + ACDARR := LOAD_ACDARR(MALIAS) + + + // PRODUCT CATEGORY + CASE MALIAS = 'CATEGORY' + SCRNUM = '1120' + AADD(PREPROC, {'NEW_ITEM("CATEGORY")', 'M'}) + AADD(PREPROC, {'PAINT_KEYS("CAT_CODE",,41)','P'} ) // PAINT KEY FIELD + AADD(PREPROC, {'CATPAINT2()', 'P'}) //** P3N - 02/13/04 + RELATED_DBF := { {'CAT_ATTS',1}, {'CAT_OPTS',1}, {'MATHPACK',1}} + ACDARR := LOAD_ACDARR(MALIAS) + + // RULES + CASE MALIAS = 'RULES' + SCRNUM = '1150' + AADD(PREPROC, {'PAINT_KEYS("RULE_CODE",,41)','P'} ) // PAINT KEY FIELD + ACDARR := LOAD_ACDARR(MALIAS) + + // MANUFACTURING LOACTION + CASE MALIAS = 'MFG_LOC' + SCRNUM := '1160' + AADD(PREPROC, {'PAINT_KEYS("LOC_CODE",,41)','P'} ) // PAINT KEY FIELD + ACDARR := LOAD_ACDARR(MALIAS) + + // SHIPPING METHODS + CASE MALIAS = 'SHIPMETH' + SCRNUM := '1180' + ACDARR := LOAD_ACDARR(MALIAS) + + // SHIPPING TERMS CODES + CASE MALIAS = 'TERMS' + SCRNUM := '1190' + ACDARR := LOAD_ACDARR(MALIAS) + + // SALES MEN MASTER LIST + CASE MALIAS = 'SALESMEN' + SCRNUM := '1100' + ACDARR := LOAD_ACDARR(MALIAS) + + // CUTTING SPEC ATTRIBUTES + CASE MALIAS = 'ATTRIB_CUT' + SCRNUM := '1130' + RELATED_DBF := { {'CUT_SPEC',3},{'MATHPACK',2} } + AADD(PREPROC, {'PAINT_KEYS("ATT_CODE",,41)','P'} ) // PAINT KEY FIELD + ACDARR := LOAD_ACDARR(MALIAS) + + // RULE PACKS + CASE MALIAS = 'RULEPACK' + FILELIST := {'ATTRIBUTES', 'ATT_OPTS', 'CAT_OPTS', 'PROD_OPTS'} + SCRNUM = '11150' + + RELATED_DBF := { {'RULE_PACK',1} } + ACDARR := LOAD_ACDARR(MALIAS) + + + // ATTRIBUTES + CASE MALIAS = 'ATTRIBUTES' + SCRNUM = '1130' + + AADD(PREPROC, {'PAINT_KEYS("ATT_CODE",,41)','P'} ) // PAINT KEY FIELD + RELATED_DBF := { {'ATT_OPTS',1} } + ACDARR := LOAD_ACDARR(MALIAS) + + // ATTRIBUTES OPTIONS + CASE MALIAS = 'ATT_OPTS' + SCRNUM = '11350' + ACDARR := LOAD_ACDARR(MALIAS) + + // CATEGORY ATTRIBUTES + CASE MALIAS = 'CAT_ATTS' + SCRNUM = '112B0' + FILELIST = {"ATTRIBUTES"} // OPEN ATTRIBUTE FILE + // INITIAL PREPROC + PREPROC = { {"MAKE_MATH('5')", 'I'},{ 'COPYSTD()', 'M'} } // MODEL AFTER / KEY PROC + ACDARR := LOAD_ACDARR(MALIAS) + + // CATEGORY SIZE TABLES + CASE MALIAS = 'STD_SIZES' + SCRNUM = '1140' + ACDARR := LOAD_ACDARR(MALIAS) + + // CATEGORY PRICING EXTRAS + CASE MALIAS = 'PRI_EXTRAS' + SCRNUM = '1250' + FILELIST = {"CUST_MAST"} + RELATED_DBF := { {'CUST_ATTS',1}, {'CUST_OPTS',1} } + ACDARR := LOAD_ACDARR(MALIAS) + + // CATEGORY OPTIONS + CASE MALIAS = 'CAT_OPTS' + SCRNUM = '11210' + FILELIST = {"ATT_OPTS"} + AADD(FILELIST, 'RULES') + AADD(FILELIST, 'RULEPACK') + PREPROC = { {'CGW11PRE("CATEGORY", 2)', 'K'} , ; // KEY PREPROC + {'COPY_OPTS("ATT_OPTS", "CAT_OPTS")', 'M'} } // MODEL AFTER + + XTRA_HEADING := SETUP_XHEAD('CAT_OPTS') + + ACDARR := LOAD_ACDARR(MALIAS) + + // CUSTOMER MASTER + CASE MALIAS = 'CUST_MAST' + IF SCR_NUM = NIL .OR. SCR_NUM = '1170' + SCRNUM := '1170' + FILELIST := {'TAX_SCHED', 'TAX_DETAIL'} + RELATED_DBF := { {'CUST_PRICE',1}, {'CUST_BP',1} } + PREPROC := { {'ORD_PAINT(9,14,9,47, "LNOR")','P'} } // paint bill to/ship to + AADD(PREPROC, {'PAINT_KEYS("CUST_ID",,41)','P'} ) // PAINT KEY FIELD + POSTPROC = {'SPEC_PRICING()'} + XTRA_CARGO := CUST_HOTKEYS() +//** COMMENTED OUT - WHY HERE??????? //** P3N - 5/26/98 +//** ELSE //** P3N - 5/26/98 +//** SCRNUM := '3245' //** P3N - 5/26/98 + ENDIF + ACDARR := LOAD_ACDARR(MALIAS) + + // CUSTOMER PRICING DISCOUNT TABLE + CASE MALIAS = 'CUST_PRICE' + SCRNUM := '11710' + AADD(PREPROC,{'{CUST_MAST->CUST_ID}', 'K'} ) // KEY PREPROC + ACDARR := LOAD_ACDARR(MALIAS) + + CASE MALIAS = 'CUST_BP' + SCRNUM := '11720' + AADD(PREPROC,{'{CUST_MAST->CUST_ID}', 'K'} ) // KEY PREPROC + RELATED_DBF := { {'CUST_OPTS',1}, {'CUST_ATTS',1} } //** P3N - 3/12/99 + ACDARR := LOAD_ACDARR(MALIAS) + + // TAX TABLE SCHEDULE + CASE MALIAS = 'TAX_SCHED' + SCRNUM := 'TX10' + FILELIST := {'TAX_DETAIL'} + ACDARR := LOAD_ACDARR(MALIAS) + + // TAX TABLE detail gl acct numbers + CASE MALIAS = 'TAX_DETAIL' + IF SCR_NUM = NIL + SCRNUM := 'TX20' + ELSE + SCRNUM := SCR_NUM + ENDIF + ACDARR := LOAD_ACDARR(MALIAS) + + // PRODUCT ATTRIBUTES + CASE MALIAS = 'PROD_ATTS' + SCRNUM = '11110' + FILELIST = {"CAT_ATTS",'CATEGORY'} // OPEN ATTRIBUTE FILE + // INITIAL PREPROC + PREPROC = { {"MAKE_MATH('5')", 'I'}, ; + {'MODELAFTER("CAT_ATTS", "USERFILE2", "PROD_ATTS", "PRODUCT", 1 )', 'M'} } // MODEL AFTER + ACDARR := LOAD_ACDARR(MALIAS) + + // PRODUCT ATTRIBUTE OPTIONS + CASE MALIAS = 'PROD_OPTS' + SCRNUM = '11120' + FILELIST = {"ATT_OPTS","CAT_OPTS",'CATEGORY'} // OPEN category level files for model after + AADD(FILELIST, 'RULES') + AADD(FILELIST, 'RULEPACK') + PREPROC = { {'CGW11PRE("PRODUCT", 2)', 'K'} ,; // KEY PREPROC + {'COPY_OPTS("CAT_OPTS", "PROD_OPTS")', 'M'} , ; // MODEL AFTER + {'COPY_OPTS("ATT_OPTS", "PROD_OPTS")', 'M'} } // MODEL AFTER + + XTRA_HEADING := SETUP_XHEAD('PROD_OPTS') + + ACDARR := LOAD_ACDARR(MALIAS) + + // PASSWORDS + CASE MALIAS = 'PASSWORD' + SCRNUM = '6100' + PREPROC = { {'XXXPASSP()','P'} } // PAINTS INSTRUCTION BOX ON SCREEN + POSTPROC = 'XXXPASSS()' // UPDATE PASSWORD AND AUTHORIZATION VARIABLES + // IF THE CURRENT USER CHANGES HIS OPTIONS + OFFSET = -5 + + ACDARR := LOAD_ACDARR(MALIAS) + + // ORDER MASTER + CASE MALIAS = 'ORD_MAST' + CONVERT_KEY = 'KEY_CONV(C_MKEY)' +******IF SCR_NUM = NIL .OR. SCR_NUM = '2110' .OR. SCR_NUM = '2310' + IF SCR_NUM = NIL .OR. RIGHT( SCR_NUM, 1 )$'0' + IF SCR_NUM = NIL + // called from menu - nothing open + SCR_NUM = '2110' + PREPROC = { {'GET_ORD_NUM()','G'} } // GET ORDER NUMBER + ELSE + // screen num IS AVAILABLE - NOT SCREEN 2115 (SUMMARY) + IF SCR_NUM = '2130' + // ARCHIVE PROCESS +*********** PREPROC = { {'GET_ORD_NUM(,"MANUAL")','G'} } // GET ORDER NUMBER + ELSE + IF SCR_NUM = '2120' + // RECURSIVE ORDER PROCESSING FROM PRINT SCREEN + PREPROC = { { 'ORD_MAST->ORDER_NUM','G'} } // CHANGE ORDER + ENDIF + ENDIF + ENDIF + AADD(PREPROC, {'GET_THE_CUST( , "RESET")','I'}) // RESET STATIC VARIABLES + AADD(PREPROC, {'ZAP_FILE689()','I'}) // ZAP THE USERFILES + AADD(PREPROC, {'PAINT_KEYS("ORDER_NUM",,41)','P'} ) // PAINT KEY FIELD + AADD(PREPROC, {'ORD_PAINT(10,12,10,49, "LNOR" )','P'} ) // paint bill to/ship to + AADD(PREPROC, {'NOTES_MSG("O")','P'}) //Are notes present on order???? + POSTPROC = 'ORD_USER()' + ESC_PROC := 'RESET_CNTL()' + ELSEIF SCR_NUM = '2115' + PREPROC := { {'MISCP_PAINT()','P'} } // PAINT PREPROC + ENDIF + + SCRNUM := SCR_NUM + + RELATED_DBF := { {'ORD_LINES',1}, {'ORDER_OPTS',1},; + {'ORD_MISC',1}, {'ORD_SHIP',1} ,; + {'ADDL_LINES',1}, {'ADDL_OPTS',1},; + {'ALTSHIPADR',1} } + + XTRA_CARGO := ORD_HOTKEY("ORDERS", SCRNUM) + ACDARR := LOAD_ACDARR(MALIAS) + + + // ORDER LINES + CASE MALIAS = 'ORD_LINES' + // OPEN DBF'S + IF SCR_NUM = NIL + // extra files opened in cgwprpo0 + SCRNUM = '2110' + PREPROC = { {'SET_TCALC()', 'I'}, ; + {'SEEKFUNC("ORD_LINES", "ORD_MAST->ORDER_NUM")', 'I'},; // INITIALIZE PROC + {'MODELAFTER("ORDER_OPTS", "USERFILE8", "ORDER_OPTS", "ORD_MAST",{"ORDER_OPTS->ORDER_NUM","ORD_MAST->ORDER_NUM"} )', 'I'},; // INITIALIZE PROC + {'MODELAFTER("ADDL_OPTS", "USERFILE9", "ADDL_OPTS", "ORD_MAST",{"ADDL_OPTS->ORDER_NUM", "ORD_MAST->ORDER_NUM"} )', 'I'}, ; // INITIALIZE PROC + {'MODELAFTER("ADDL_LINES", "USERFILE6", "ADDL_LINES", "ORD_MAST",{"ADDL_LINES->ORDER_NUM","ORD_MAST->ORDER_NUM"} )', 'I'}} // INITIALIZE PROC + + POSTPROC = {'UPDATE_ORDS("USERFILE8")', ; // UPDATE ORDER OPTIONS FROM USERFILE8 + 'UPDATE_ORDS("USERFILE9")', ; // UPDATE ADDITIONAL OPTIONS FROM USERFILE9 + 'UPDATE_LINES("USERFILE6")', ; // UPDATE ADDITIONAL ORDER LINES FROM USERFILE6 + 'DO_ADDL_LINES()',; // UPDATE ADDITIONAL LINES + 'UPDATE_ORDS("FILE8FILE9")', ; // UPDATE ADDITIONAL ORDER OPTIONS FROM USERFILE8 + 'MISC_PRICING( )' ,; // UPDATE TAX/ETC + 'ORD_PRINT(NIL, "Print Order", "OE" )' } // PRINT ORDER (IN CGWPRINT) + ENDIF + + ACDARR := LOAD_ACDARR(MALIAS) + + // TEMP ORDER LINES + CASE MALIAS = 'TORD_LINES' + IF SCR_NUM = NIL .OR. SCR_NUM = '322' + SCRNUM = '3220' //** ORDER CONTROL SCREEN + XTRA_CARGO := TOL_HOTKEYS('SHIP') + XTRA_HEADING := {SPACE(55)+'F1-Delete ALL Shipping', ; + SPACE(23)+'Select Product(s) to Ship'+ ; + SPACE(7) +'F2-NOTES (BO / Common)', ; + SPACE(55)+'F3-Alt. Shipping Info.', ' ' } + POSTPROC := { {'DEL_ORD_SHIP(ORD_MAST->ORDER_NUM)', 'A' } } + ELSEIF SCR_NUM = '321' //** ORDER ENTRY - BROWSE SHIPPING INFO + SCRNUM = '3210' //** BROWSE ONLY SCREEN + XTRA_HEADING := {} //** P3N - 1/27/00 + XTRA_CARGO := TOL_HOTKEYS('OE') //** P3N - 1/27/00 + ELSEIF SCR_NUM = '323' + SCRNUM = '3230' //** PRODUCTION CONTROL SCREEN + XTRA_CARGO := TOL_HOTKEYS('PROD') + XTRA_HEADING := {' ', SPACE(23)+'Select Product(s) Completed' , ; + ' ', ' ' } +//*** POSTPROC := { {'DEL_ORD_SHIP(ORD_MAST->ORDER_NUM)', 'A' } } + ENDIF + + ACDARR := LOAD_ACDARR(MALIAS) + + // ORDER LINES PRODUCED - P3N - 5/13/98 + CASE MALIAS = 'ORD_PROD' + IF SCR_NUM = NIL .OR. SCR_NUM = '22350' + PREPROC := {} + AADD( PREPROC, { 'GET_CTL_KEY()' , 'K' } ) + AADD( PREPROC, { 'BLD_TMPOPT()' , 'I' } ) //** P3N - 1/15/02 + XTRA_HEADING := {' Enter Date to INDICATE COMPLETED' , ; + ' ZERO Qty to REMOVE Transaction', ' ' } + ELSEIF SCR_NUM = '22360' + AADD( PREPROC, { 'GET_CTL_KEY(1)' , 'K' } ) + ELSEIF SCR_NUM = '223' + SCRNUM := SCR_NUM + ENDIF + SCRNUM = '22350' + ACDARR := LOAD_ACDARR(MALIAS) + // ORDER LINES SHIPPED - P3N - 5/13/98 + CASE MALIAS = 'ORD_SHIP' + PREPROC := {} + IF SCR_NUM = NIL .OR. SCR_NUM = '21350' + AADD( PREPROC, { 'GET_CTL_KEY()' , 'K' } ) + AADD( PREPROC, { 'BLD_TMP_OST()' , 'I' } ) //** P3N - 1/15/99 + //UPDATE ORDER SHIPPING TRANSACTIONS + POSTPROC := { {'DEL_ORD_SHIP(TORD_LINES->ORDER_NUM)', 'A' } } + XTRA_HEADING := {' Enter Date to INDICATE SHIPPED', ; + ' ZERO Qty to REMOVE Transaction', ' ',{||DSPLBO_QTY()},' ' } + ELSEIF SCR_NUM = '21360' + AADD( PREPROC, { 'GET_CTL_KEY(1)' , 'K' } ) + ENDIF + SCRNUM = '21350' + ACDARR := LOAD_ACDARR(MALIAS) + // ADDITIONAL ORDER LINES + CASE MALIAS = 'ADDL_LINES' + // OPEN DBF'S + + SCRNUM = '21120' + PREPROC = { {'ADDL_KEY()', 'K'} } // KEY PREPROC + ACDARR := LOAD_ACDARR(MALIAS) + + //** P3N - 11/13/98 (FRIDAY THE 13TH-OMINUS) + // ALTERNATE SHIPPING ADDRESS INFO + CASE MALIAS = 'ALTSHIPADR' + SCRNUM := '3245' + AADD( PREPROC, { 'GET_ASA_KEY()' , 'K' } ) +******PREPROC := { {'??MODELAFTER("ORDER_OPTS", "USERFILE2", "ORDER_OPTS", "ORD_MAST")', 'I'} } // INITIALIZE PROC + ACDARR := LOAD_ACDARR(MALIAS) + + // ORDER OPTIONS + CASE MALIAS = 'ORDER_OPTS' + SCRNUM := '2120' + PREPROC := { {'??MODELAFTER("ORDER_OPTS", "USERFILE2", "ORDER_OPTS", "ORD_MAST")', 'I'} } // INITIALIZE PROC + ACDARR := LOAD_ACDARR(MALIAS) + + // ADDITIONAL ORDER OPTIONS + CASE MALIAS = 'ADDL_OPTS' + SCRNUM := '2122' + PREPROC := { {'??MODELAFTER("ORDER_OPTS", "USERFILE2", "ORDER_OPTS", "ORD_MAST")', 'I'} } // INITIALIZE PROC + POSTPROC = { 'STUFF_ENTER_KEY()' } // FORCE ENTER ON BLANK GET + ACDARR := LOAD_ACDARR(MALIAS) + + + // QUOTE MASTER + CASE MALIAS = 'QUOTE_MAST' + CONVERT_KEY = 'KEY_CONV(C_MKEY)' + + IF SCR_NUM = NIL .OR. RIGHT( SCR_NUM, 1 )$'0' + IF SCR_NUM = NIL + SCR_NUM := '2210' + PREPROC := { {'GET_ORD_NUM()','G'}, ; // GET ORDER NUMBER + {'GET_THE_CUST( , "RESET")','I'}, ; // RESET STATIC VARIABLES + {'ZAP_FILE689()','I'}, ; // ZAP THE USERFILES + {'ORD_PAINT(8,12,8,49, "LNOR" )','P'} } // paint bill to/ship to + AADD(PREPROC, {'NOTES_MSG("Q")','P'}) //Are notes present on quote???? + POSTPROC := 'ORD_USER()' + ESC_PROC := 'RESET_CNTL()' + ELSEIF SCR_NUM = '2220' + PREPROC := { { 'QUOTE_MAST->ORDER_NUM','G'}, ; // CHANGE ORDER + {'GET_THE_CUST( , "RESET")','I'}, ; // RESET STATIC VARIABLES + {'ZAP_FILE689()','I'}, ; // ZAP THE USERFILES + {'ORD_PAINT(8,12,8,49, "LNOR" )','P'} } // paint bill to/ship to + AADD(PREPROC, {'PAINT_KEYS("ORDER_NUM",,41)','P'} ) // PAINT KEY FIELD +//** AADD(PREPROC, {'PAINT_KEYS("QUOTE_NUM",,41)','P'} ) // PAINT KEY FIELD + AADD(PREPROC, {'NOTES_MSG("Q")','P'}) //Are notes present on quote???? + ELSEIF SCR_NUM = '2230' + PREPROC := { {'GET_THE_CUST( , "RESET")','I'}, ; // RESET STATIC VARIABLES + {'ZAP_FILE689()','I'}, ; // ZAP THE USERFILES + {'ORD_PAINT(8,12,8,49, "LNOR" )','P'} } // paint bill to/ship to + AADD(PREPROC, {'NOTES_MSG("Q")','P'}) //Are notes present on quote???? + ENDIF + ELSEIF SCR_NUM = '2115' + PREPROC := { {'MISCP_PAINT()','P'} } // PAINT PREPROC + ENDIF + + SCRNUM := SCR_NUM + + RELATED_DBF := { {'QUOTE_OPTS',1},; + {'QUOTE_ADDL',1}, {'ADDL_QOPT',1} } + + XTRA_CARGO := ORD_HOTKEY("QUOTE", SCRNUM) + ACDARR := LOAD_ACDARR(MALIAS) + + // QUOTE LINES + CASE MALIAS = 'QUOTE_LINE' + // OPEN DBF'S + IF SCR_NUM = NIL + // extra files opened in cgwprpo0 + SCRNUM = '2210' + PREPROC = { {'SET_TCALC()', 'I'}, ; + {'SEEKFUNC("QUOTE_LINE", "QUOTE_MAST->ORDER_NUM")', 'I'},; // INITIALIZE PROC + {'MODELAFTER("QUOTE_OPTS", "USERFILE8", "QUOTE_OPTS", "QUOTE_LINE",{"QUOTE_OPTS->ORDER_NUM","QUOTE_MAST->ORDER_NUM"} )', 'I'},; // INITIALIZE PROC + {'MODELAFTER("ADDL_QOPT", "USERFILE9", "ADDL_QOPT", "QUOTE_LINE", {"ADDL_QOPT->ORDER_NUM", "QUOTE_MAST->ORDER_NUM"} )', 'I'}, ; // INITIALIZE PROC + {'MODELAFTER("QUOTE_ADDL", "USERFILE6", "QUOTE_ADDL", "QUOTE_LINE",{"QUOTE_ADDL->ORDER_NUM","QUOTE_MAST->ORDER_NUM"} )', 'I'}} // INITIALIZE PROC + + POSTPROC = {'UPDATE_ORDS("USERFILE8")', ; // UPDATE ORDER OPTIONS FROM USERFILE8 + 'UPDATE_ORDS("USERFILE9")', ; // UPDATE ADDITIONAL OPTIONS FROM USERFILE9 + 'UPDATE_LINES("USERFILE6")', ; // UPDATE ADDITIONAL ORDER LINES FROM USERFILE6 + 'DO_ADDL_LINES()',; // UPDATE ADDITIONAL LINES + 'UPDATE_ORDS("FILE8FILE9")', ; // UPDATE ADDITIONAL ORDER OPTIONS FROM USERFILE8 + 'MISC_PRICING()',; // UPDATE TAX/ETC + 'ORD_PRINT(NIL, "Print Quote", "OE")' } // PRINT ORDER (IN CGWPRINT) + + + ELSEIF SCR_NUM = '2225' + SCRNUM := SCR_NUM + XTRA_HEADING := {'Enter Date to INDICATE COMPLETED PROCESS'} + XTRA_CARGO := { {'CTRL + T = Current Date', 20, 'GET_CURDATE()'} , ; + {'CTRL + Q = Total Qty', 17, 'GET_TOTQTY()'} } + ENDIF + + ACDARR := LOAD_ACDARR(MALIAS) + + // ADDITIONAL QUOTE LINES + CASE MALIAS = 'QUOTE_ADDL' + // OPEN DBF'S + + SCRNUM = '2220' + PREPROC = { {'ADDL_KEY()', 'K'} } // KEY PREPROC + ACDARR := LOAD_ACDARR(MALIAS) + + + // QUOTE OPTIONS + CASE MALIAS = 'QUOTE_OPTS' + SCRNUM := '2230' + PREPROC := { {'?MODELAFTER("QUOTE_OPTS", "USERFILE2", "QUOTE_OPTS", "QUOTE_MAST")', 'I'} } // INITIALIZE PROC + ACDARR := LOAD_ACDARR(MALIAS) + + // ADDITIONAL QUOTE OPTIONS + CASE MALIAS = 'ADDL_QOPT' + SCRNUM := '2232' + PREPROC := { {'?MODELAFTER("QUOTE_OPTS", "USERFILE2", "QUOTE_OPTS", "QUOTE_MAST")', 'I'} } // INITIALIZE PROC + POSTPROC = { 'STUFF_ENTER_KEY()' } // FORCE ENTER ON BLANK GET + ACDARR := LOAD_ACDARR(MALIAS) + + + // CUST ATTRIBUTES + CASE MALIAS = 'CUST_ATTS' + + SCRNUM = '3110' + FILELIST = {"CAT_ATTS",'CATEGORY'} // OPEN ATTRIBUTE FILE + + // INITIAL PREPROC + PREPROC = { {"MAKE_MATH('5')", 'I'} } + AADD(PREPROC, {'{USERFILE2->CUST_ID, USERFILE2->PROD_CODE}', 'K'} ) // KEY FOR CUST_ID + AADD(PREPROC, {'BLD_CUSTATTS("USERFILE2", "USERFILE3")', 'M'} ) // MODEL AFTER + ACDARR := LOAD_ACDARR(MALIAS) + + + // CUST ATTRIBUTE OPTIONS + CASE MALIAS = 'CUST_OPTS' + SCRNUM = '3120' + FILELIST = {"ATT_OPTS","CAT_OPTS",'CATEGORY'} // OPEN category level files for model after + PREPROC = { {'CGW11PRE("CUST")', 'K'} ,; // KEY PREPROC + {'COPY_OPTS("PROD_OPTS", "CUST_OPTS")', 'M'} , ; // MODEL AFTER + {'COPY_OPTS("CAT_OPTS", "CUST_OPTS")', 'M'} , ; // MODEL AFTER + {'COPY_OPTS("ATT_OPTS", "CUST_OPTS")', 'M'} } // MODEL AFTER + + XTRA_HEADING := SETUP_XHEAD('CUST_OPTS') + + ACDARR := LOAD_ACDARR(MALIAS) + + // CUSTOMER PRICING EXTRAS + CASE MALIAS = 'CUST_PE' + SCRNUM = '3130' + PREPROC = { {'CUST_PE_KEY() ', 'K'} } // KEY PREPROC + ACDARR := LOAD_ACDARR(MALIAS) + + // PRODUCT STD SASH MEASUREMENTS + CASE MALIAS = 'STD_SASH' + SCRNUM = '3140' + PREPROC = { {'{PRODUCT->PROD_CODE}', 'K'} } // KEY PREPROC + ACDARR := LOAD_ACDARR(MALIAS) + + // CLEAR SS GLASS BOX STORAGE + CASE MALIAS = 'GLASS_BOX' + SCRNUM = '3150' + ACDARR := LOAD_ACDARR(MALIAS) + + // CUTTING SPECS + CASE MALIAS = 'CUT_SPEC' + SCRNUM = '3160' + AADD(FILELIST, 'MATHPACK') + AADD(FILELIST, 'ATTRIB_CUT') + AADD(FILELIST, 'ATTRIBUTES') + AADD(PREPROC, {'{PRODUCT->PROD_CODE}', 'K'} ) // KEY PREPROC + AADD(PREPROC, {"MAKE_MATH('5')", 'I'} ) // MODEL AFTER / KEY PROC + AADD(PREPROC, {'NEW_ITEM("CUTTING SPEC","USERFILET")', 'M'}) // COPY A DIFFERENT ONE + ACDARR := LOAD_ACDARR(MALIAS) + + // INTER COMPANY PURCHASE ORDERS + CASE MALIAS = 'IPO_FILE' + SCRNUM = '2160' + ACDARR := LOAD_ACDARR(MALIAS) + + // MISC ITEMS MASTER FILE + CASE MALIAS = 'MISC_ITEMS' + AADD(FILELIST, 'CATEGORY') + AADD(FILELIST, 'COLOR_LIST') + AADD(FILELIST, 'UOMFILE') + AADD(PREPROC, {'PAINT_KEYS("PARTNUM",,41)','P'} ) // PAINT KEY FIELD + SCRNUM = '2170' + ACDARR := LOAD_ACDARR(MALIAS) + + // MISC ITEMS MASTER FILE PRICING/UNIT OF MEASURE + CASE MALIAS = 'MISC_PUOM' + SCRNUM = '2180' +** PREPROC = { {"MAKE_MATH('5')", 'I'} } + AADD(PREPROC,{'{MISC_ITEMS->PARTNUM}', 'K'} ) // KEY PREPROC + ACDARR := LOAD_ACDARR(MALIAS) + + // MISC ITEMS MASTER FILE COLORS + CASE MALIAS = 'MISC_COLOR' + SCRNUM = '2190' + AADD(PREPROC,{'{MISC_ITEMS->PARTNUM}', 'K'} ) // KEY PREPROC + ACDARR := LOAD_ACDARR(MALIAS) + + // MASTER UOM FILE + CASE MALIAS = 'UOMFILE' +//** SCRNUM = '3210' //** P3N - 1/26/00 + SCRNUM = '4210' //** P3N - 1/26/00 + PREPROC = { {"MAKE_MATH('5')", 'I'} } + AADD(FILELIST, 'MISC_ITEMS') + ACDARR := LOAD_ACDARR(MALIAS) + + // MASTER COLOR FILE + CASE MALIAS = 'COLOR_LIST' +//** SCRNUM = '3220' //** P3N - 5/26/98 + SCRNUM = '4220' //** P3N - 5/26/98 + ACDARR := LOAD_ACDARR(MALIAS) + + // ORDER MISC ITEMS + CASE MALIAS = 'ORD_MISC' +//** SCRNUM = '3230' //** P3N - 5/26/98 + SCRNUM = '4230' //** P3N - 5/26/98 + AADD(PREPROC,{'{ ORD_MAST->ORDER_NUM }', 'K'} ) // KEY PREPROC +//** P3N - 11/25/98 - MOVED TO MISC_ITEM()-CGWPRPO0.PRG +//** POSTPROC = { {'UP_MISCTOT(USERFILE2->ORDER_NUM)', 'B' } } + ACDARR := LOAD_ACDARR(MALIAS) + + // QUOTE MISC ITEMS + CASE MALIAS = 'QUOTE_MISC' + SCRNUM = '2270' + AADD(PREPROC,{'{QUOTE_MAST->ORDER_NUM }', 'K'} ) // KEY PREPROC +//** P3N - 11/25/98 - MOVED TO MISC_ITEM()-CGWPRPO0.PRG +//** POSTPROC = { {'UP_MISCTOT(USERFILE2->ORDER_NUM)', 'B' } } + ACDARR := LOAD_ACDARR(MALIAS) + +ENDCASE + +RETURN ACDARR + + + +CLOSE DATABASES +RETURN ACDARR + +********************************************************************* +* RETURN AN ARRAY USED AS THE HEADING FOR A DBROWSE! * +* //** P3N - 2/19/98 * +********************************************************************* +FUNCTION SETUP_XHEAD(TYPE) +LOCAL RETARR +RETARR := ; + { {||FRST_XHEAD()}, '(BLANK Value to DELETE)', ; + 'PI*-Print Ind / Alt Print-Alternate Print Value', ; + 'HT ADJ-Prod Height Adj / WD ADJ-Prod Width Adj', ; + {||WHEREMSG("SET")}, {||WHEREMSG()}, {|| WHEREMSG("RESET")} } +RETURN RETARR +FUNCTION FRST_XHEAD() +RETURN 'Add Options for "'+ ALLTRIM(ATT_CODE) +'" Attribute' +********************************************************************* +********************************************************************* +********************************************************************* +FUNCTION OPN_MFG() +LOCAL SVSEL := SELECT() +DBOPEN('MFG_LOC') +SELECT(SVSEL) +RETURN +**FUNCTION CLOSE_MFG() +**LOCAL SVSEL := SELECT() +**SELECT('MFG_LOC') +**USE +**SELECT(SVSEL) +**RETURN +********************************************************************* +********************************************************************* +********************************************************************* +FUNCTION COPYCUT() +LOCAL SAVESEL := SELECT(), SAVEFILT +LOCAL COPYFROM := ALLTRIM( ATTRIB_CUT ) + +SELECT ATTRIB_CUT +USE +SELECT USERFILE3 + +// APPEND ALL FROM &ATTRIB_CUT +APPEND ALL FROM ©FROM +DBOPEN('ATTRIB_CUT') +SELECT (SAVESEL) + +RETURN .T. + +********************************************************************* +********************************************************************* +********************************************************************* +FUNCTION COPYSTD() +LOCAL SAVESEL := SELECT(), SAVEFILT +LOCAL COPYFROM := ALLTRIM( ATTRIBUTES ) + +SELECT ATTRIBUTES +USE +SELECT USERFILE2 +// APPEND ALL FROM &ATTRIBUTES FOR ATT_TYPE = 'S' +APPEND ALL FROM ©FROM FOR ATT_TYPE = 'S' +DBOPEN('ATTRIBUTES') +SELECT (SAVESEL) + +RETURN .T. + +********************************************** +FUNCTION FILL_PRODCODE +// FILL THE USERFILE (PROD_OPTS) RECORDS WITH THE PROD_ATTS->PROD_CODE + +LOCAL SAVESEL := SELECT() + +SELECT USERFILE2 +GOTO TOP +DO WHILE !EOF() + REC_LOCK(3) + REPLACE PROD_CODE WITH PROD_ATTS->PROD_CODE + UNLOCK + SKIP 1 +ENDDO +SELECT(SAVESEL) +RETURN .T. + + +***************************************************************** + +FUNCTION SEEKFUNC(SEEK_ALIAS, SEEKKEY) +LOCAL SAVESEL := SELECT() +SELECT (SEEK_ALIAS) +SEEK &SEEKKEY +SELECT (SAVESEL) +**(&SEEK_ALIAS)->(DBSEEK(&SEEKKEY)) +RETURN .T. + \ No newline at end of file diff --git a/CGW0300.PRG b/CGW0300.PRG new file mode 100644 index 0000000..10d5cec --- /dev/null +++ b/CGW0300.PRG @@ -0,0 +1,1862 @@ +* DON LOWENSTEIN -BUILD PRINT FILE ARRAY- CGW0300 5-28-93 +PROCEDURE BUILDPRNT(CALLPARM) + +****CONVKEYX := MAKE_BLOCK('CONV_RANGE(RANGE1, RANGE2)') +****AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF,,, CONVKEYX}) +LOCAL ATRB_SOURCE, NCHOICE, PT_PARM, NDX_EXP +LOCAL DEL_ADD_ARR := {'DA(1)', 'DA(2)', 'DA(3)', 'DA(4)', 'DA(5)'} +LOCAL GET_PARMS1, GET_PARMS2, PARR:={}, CHOICE, TAGNAME +* * * * * * * * * * * * * * * * * * * + +PRIVATE PRNTARR := {}, PARENTFILE, CHILDFILE, MDESC, CUTOFF, PIC, FILEFILTER +PRIVATE PRNTNAME, KEYVAR, RANGETYPE, NDXEXP, RANGEARR := {}, LVLBRK, SORTARR := {} +PRIVATE PARENTFILTER := NIL, REPTHEAD, DEFINEPROC:= NIL +PRIVATE DET_SUMM := .F., DET_LINE_EXTRA := {}, FOOTERLINES := {} +PRIVATE LBRK_FOOTER := {} +PRIVATE REPTONLY := .F., BLD_PROC // 13-15 +PRIVATE DBF_FLD_INFO := {} +PRIVATE MAXLINES := 55 +PRIVATE OUTPORT := NIL +PRIVATE SYSNTX := NIL + + +* * * * * * * * * * * * * * * * * * * + +DO CASE + + + * * * * * * * * * * * * * * * * * * * + + CASE ALLTRIM(CALLPARM) = 'BILLTRAN RECAP' + PRNTNAME = 'Billing Transaction Recap' + PARENTFILE = 'BILLTRAN' + CHILDFILE = NIL + FILEFILTER = 'RCDCD = "RE"' + REPTHEAD = PRNTNAME + DET_SUMM := .T. + + //** P3N - 3/18/99 ADDED DEF_BILLTRAN TO LIMIT THE REPORT FIELDS + DEFINEPROC = {|| DEF_BILLTRAN() } // FOUND IN 0350 + + MDESC = 'Order #' + KEYVAR = 'ORDER_NUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ORDER_NUM + RCDCD ' + SYSNTX = 1 + LVLBRK = {} + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + IF ALLTRIM(CALLPARM) = 'BILLTRAN RECAP-F' + ELSE + + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + + + MDESC = 'Company' + KEYVAR = 'COMNO' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'COMNO + ORDER_NUM + RCDCD' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, { 'COMNO', MDESC } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Customer' + KEYVAR = 'CUSNR' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUSNR + ORDER_NUM + RCDCD' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, { 'CUSNR', MDESC } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Sales Rep' + KEYVAR = 'SLSNR' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'SLSNR + ORDER_NUM + RCDCD' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, { 'SLSNR', MDESC } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Tran Date (YYMMDD)' + KEYVAR = 'TRNDT' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'TRNDT + ORDER_NUM + RCDCD ' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, { 'TRNDT', MDESC } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + + + ENDIF + PRNTARR := LOAD_PRNTARR() + +*********************************************** +* + CASE ALLTRIM(CALLPARM) = 'SALEHIST RECAP' + PRNTNAME := 'Sales History Recap' + PARENTFILE := 'SALEHIST' + CHILDFILE := NIL + FILEFILTER := NIL + REPTHEAD := PRNTNAME + DET_SUMM := .T. + + + + IF ALLTRIM(CALLPARM) = 'SALEHIST RECAP-F' + MDESC = 'GL Acct #' + KEYVAR = 'GL_NUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'GL_NUM + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, { 'GL_NUM', MDESC } ) + AADD(LVLBRK, { 'COMP_CODE', 'Company' } ) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + + ELSE + + MDESC = 'GL Acct #' + KEYVAR = 'GL_NUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'GL_NUM + ORDER_NUM' + SYSNTX = 2 + LVLBRK = {} + AADD(LVLBRK, { 'GL_NUM', MDESC } ) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + + + MDESC = 'Company' + KEYVAR = 'COMP_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'COMP_CODE + ORDER_NUM' + SYSNTX = 5 + LVLBRK = {} + AADD(LVLBRK, { 'COMP_CODE', MDESC } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Customer' + KEYVAR = 'CUST_ID' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ID + GL_NUM + ORDER_NUM' +******SYSNTX = 3 + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, { 'CUST_ID', MDESC } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Order #' + KEYVAR = 'ORDER_NUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ORDER_NUM + GL_NUM' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Sales Rep' + KEYVAR = 'SLSMAN' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'SLSMAN + GL_NUM + ORDER_NUM ' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, { 'SLSMAN', MDESC } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Invoice Date' + KEYVAR = 'IDATE_FST' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DTOS(IDATE_FST) + GL_NUM + ORDER_NUM ' +******SYSNTX = 4 + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, { 'DTOC(IDATE_FST)', MDESC } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Post Date' + KEYVAR = 'POST_DATE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DTOS(POST_DATE) + POST_TIME + ORDER_NUM + GL_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, { 'DTOC(POST_DATE)', MDESC } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + + + ENDIF + PRNTARR := LOAD_PRNTARR() + + **************************************************** + + CASE ALLTRIM(CALLPARM) == 'ORDER FULFILLMENT' + PRNTNAME = 'ORDERS WHICH NEED FULFILLMENT / CLOSURE' + PARENTFILE = 'ORD_MAST' + FILEFILTER = 'EMPTY(SHIP_DATE)' //** P3N - 08/29/01 +//**FILEFILTER = 'EMPTY(IDATE_FST)' //** CHANGED PER ELLEN + CHILDFILE = NIL +*** DEFINEPROC = {|| DEF_FULFILL() } // FOUND IN 0350 + DEFINEPROC = {|| DEF_ORDERS('FULFILLMENT') } // FOUND IN 0350 + + DBOPEN('CUST_MAST') + + MDESC = 'Cust #' + KEYVAR = 'CUST_ID' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ID + ORDER_NUM' + SYSNTX = 2 + LVLBRK = {} + AADD(LVLBRK, {'GET_NAME(CUST_ID)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + +//** MDESC = 'Order #' +//** KEYVAR = 'ORDER_NUM' +//** PIC = '' +//** RANGETYPE = 'R' +//** CUTOFF = .F. +//** NDXEXP = 'ORDER_NUM' +//** SYSNTX = 1 +//** LVLBRK = {} +//** AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) +//** AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + +//** MDESC = 'Customer PO #' +//** KEYVAR = 'CUST_PO' +//** PIC = '' +//** RANGETYPE = 'R' +//** CUTOFF = .F. +//** NDXEXP = 'CUST_PO + ORDER_NUM' +//** SYSNTX = NIL +//** LVLBRK = {} +//** AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) +//** AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Invoice #' + KEYVAR = 'INVOICENUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'INVOICENUM + GL_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Order Date' + KEYVAR = 'ORDER_DATE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DTOS(ORDER_DATE) + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'DTOC(ORDER_DATE)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + +//** MDESC = 'Call Date' +//** KEYVAR = 'CALL_DATE' +//** PIC = '' +//** RANGETYPE = 'R' +//** CUTOFF = .F. +//** NDXEXP = 'DTOS(CALL_DATE) + ORDER_NUM' +//** SYSNTX = NIL +//** LVLBRK = {} +//** AADD(LVLBRK, {'DTOC(CALL_DATE)', ' ' } ) +//** AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) +//** AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + +//** MDESC = 'Production Date' +//** KEYVAR = 'PDATE_LAST' +//** PIC = '' +//** RANGETYPE = 'R' +//** CUTOFF = .F. +//** NDXEXP = 'DTOS(PDATE_LAST) + ORDER_NUM' +//** SYSNTX = NIL +//** LVLBRK = {} +//** AADD(LVLBRK, {'DTOC(PDATE_LAST)', ' ' } ) +//** AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) +//** AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + **************************************************** + + CASE ALLTRIM(CALLPARM) == 'ORDER MASTER' + PRNTNAME = 'ORDER MASTER REPORT' + PARENTFILE = 'ORD_MAST' + CHILDFILE = NIL + DEFINEPROC = {|| DEF_ORDERS() } // FOUND IN 0350 + + MDESC = 'Cust #' + KEYVAR = 'CUST_ID' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ID + ORDER_NUM' + SYSNTX = 2 + LVLBRK = {} + AADD(LVLBRK, {'GET_NAME(CUST_ID)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Order #' + KEYVAR = 'ORDER_NUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ORDER_NUM' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Customer PO #' + KEYVAR = 'CUST_PO' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_PO + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Invoice #' + KEYVAR = 'INVOICENUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. +****NDXEXP = 'INVOICENUM + GL_NUM' + NDXEXP = 'INVOICENUM ' //** P3N - 4/27/98 + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Order Date' + KEYVAR = 'ORDER_DATE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DTOS(ORDER_DATE) + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'DTOC(ORDER_DATE)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Call Date' + KEYVAR = 'CALL_DATE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DTOS(CALL_DATE) + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'DTOC(CALL_DATE)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Production Date' + KEYVAR = 'PDATE_LAST' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DTOS(PDATE_LAST) + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'DTOC(PDATE_LAST)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Delivery Date' + KEYVAR = 'DDATE_LAST' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DTOS(DDATE_LAST) + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'DTOC(DDATE_LAST)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Sales Person' + KEYVAR = 'SLSMAN' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'SLSMAN + CUST_ID + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'SLSMAN', ' ' } ) + AADD(LVLBRK, {'CUST_ID', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Terms' + KEYVAR = 'TERMS' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'TERMS + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'TERMS', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Shipping Method' + KEYVAR = 'SHP_METHOD' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'SHP_METHOD + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'SHP_METHOD', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Price Sheet' + KEYVAR = 'PRICE_SHT' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'PRICE_SHT + CUST_ID + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'PRICE_SHT', ' ' } ) + AADD(LVLBRK, {'CUST_ID', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Tax Schedule' + KEYVAR = 'TAXSCH' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'TAXSCH + ORDER_NUM' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'TAXSCH', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + + **************************************************** + + CASE ALLTRIM(CALLPARM) == 'MISC ITEMS' + PRNTNAME = 'MISCELLEANOUS ITEMS REPORT' + PARENTFILE = 'MISC_PUOM' + CHILDFILE = NIL + DEFINEPROC = {|| DEF_MITEMS() } // FOUND IN 0350 + DBOPEN('MISC_ITEMS') + + MDESC = 'Part #' + KEYVAR = 'PARTNUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'PARTNUM' + SYSNTX = 1 + LVLBRK = {} +****AADD(LVLBRK, {'GET_NAME(CUST_ID)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Description' +****KEYVAR = 'DESC' + KEYVAR = {{'MISC_ITEMS','DESC'} , 'DISPVALUE(PARTNUM,"MISC_ITEMS",{"DESC"}) '} //DATABASE VARIABLE USED FOR RANGE + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. +****NDXEXP = 'DESC' + NDXEXP = 'DISPVALUE(PARTNUM,"MISC_ITEMS",{"DESC"})' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'GL Num' + KEYVAR = {{'MISC_ITEMS','GL_NUM'} , 'DISPVALUE(PARTNUM,"MISC_ITEMS",{"GL_NUM"}) '} //DATABASE VARIABLE USED FOR RANGE + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DISPVALUE(PARTNUM,"MISC_ITEMS",{"GL_NUM"})' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'UOM' + KEYVAR = 'UOM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UOM + PARTNUM' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Dealer Amounts' + KEYVAR = 'DLR_AMT' + PIC = '9999999.9999' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + + MDESC = 'Sp Dealer Amounts' + KEYVAR = 'SD_AMT' + PIC = '9999999.9999' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + + MDESC = 'Builder Amounts' + KEYVAR = 'BU_AMT' + PIC = '9999999.9999' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + + MDESC = 'Distributor Amounts' + KEYVAR = 'DIST_AMT' + PIC = '9999999.9999' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + + MDESC = 'Lumbermen Amounts' + KEYVAR = 'LUMB_AMT' + PIC = '9999999.9999' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + + MDESC = 'Intercompany Amounts' + KEYVAR = 'IC_AMT' + PIC = '9999999.9999' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + + + PRNTARR := LOAD_PRNTARR() + + + CASE ALLTRIM(CALLPARM) == 'CATEGORY OPTIONS' + // PRODUCT CATEGORY OPTIONS + PRNTNAME = 'PRODUCT CATEGORY OPTIONS' + PARENTFILE = 'CAT_OPTS' + CHILDFILE = NIL + FILEFILTER = 'CAT_OPTS->CAT_CODE == CATEGORY->CAT_CODE' + REPTHEAD = {['UNIQUE CATEGORY CHOICES for "' + ALLTRIM(CATEGORY->CAT_CODE) + '" - ' + CATEGORY->DESC],; + 'DTOC(CURDATE) '} + + MDESC = 'Attribute' + KEYVAR = 'ATT_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ATT_CODE + STR(SEQ_NUM,2)' + SYSNTX = 1 + LVLBRK = {} + AADD(LVLBRK, {'SEEKATTDESC(ATT_CODE)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF, , , }) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'TAX SUMMARY SCHEDULES' + // TAX_SCHED + PRNTNAME = CALLPARM + PARENTFILE = 'TAX_SCHED' + REPTHEAD = PRNTNAME + DBOPEN('TAX_DETAIL') + + MDESC = 'Schedule Code' + KEYVAR = 'STAXSCH' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'STAXSCH' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Description' + KEYVAR = 'DESC' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DESC' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + + CASE ALLTRIM(CALLPARM) == 'TAX DETAIL COMPONENTS' + // TAX_SCHED + PRNTNAME = CALLPARM + PARENTFILE = 'TAX_DETAIL' + REPTHEAD = PRNTNAME + + MDESC = 'Sequence Code' + KEYVAR = 'SSTAXSEQ' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'SSTAXSEQ' + SYSNTX = 1 + LVLBRK = {} + CONVKEYX := MAKE_BLOCK('CONV_RANGE(RANGE1, RANGE2)') + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF,,, CONVKEYX}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Description' + KEYVAR = 'SDETDESC' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'SDETDESC' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + + + CASE ALLTRIM(CALLPARM) == 'CATEGORY ATTRIBUTES' + // PRODUCT CATEGORY OPTIONS + PRNTNAME = 'PRODUCT CATEGORY ATTRIBUTES' + PARENTFILE = 'CATEGORY' + CHILDFILE = 'CAT_ATTS' + FILEFILTER = 'CAT_ATTS->CAT_CODE == CATEGORY->CAT_CODE' + REPTHEAD = {"'UNIQUE ATTRIBUTES for CATEGORY ' + ALLTRIM(CATEGORY->DESC)",; + 'DTOC(CURDATE) '} + + MDESC = 'Screen Order' + KEYVAR = 'ORDER' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'STR(ORDER,2)' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Attribute' + KEYVAR = 'ATT_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ATT_CODE + STR(ORDER,2)' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'CATEGORY' + // PRODUCT CATEGORYS + PRNTNAME = 'List of System CATEGORIES' + PARENTFILE = 'CATEGORY' + CHILDFILE = NIL + REPTHEAD = PRNTNAME + + MDESC = 'Category CODE' + KEYVAR = 'CAT_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CAT_CODE' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Description' + KEYVAR = 'DESC' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DESC + CAT_CODE' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'MODEL' + // PRODUCT FILE + DBOPEN('CATEGORY') + PRNTNAME = 'List of MODELS' + PARENTFILE = 'PRODUCT' + CHILDFILE = NIL + REPTHEAD = PRNTNAME + + MDESC = 'Model' + KEYVAR = 'PROD_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'PROD_CODE' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Description' + KEYVAR = 'DESC' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DESC + PROD_CODE' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Category' + KEYVAR = 'CAT_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CAT_CODE + PROD_CODE' + SYSNTX = 3 + LVLBRK = {} + AADD(LVLBRK, {'SEEKCATDESC(CAT_CODE)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Mgf Location' + KEYVAR = 'LOC_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'LOC_CODE + PROD_CODE' + SYSNTX = 4 + LVLBRK = {} + AADD(LVLBRK, {'LOC_CODE', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'MODEL ATTRIBUTES' + // PRODUCT ATTRIBUTES + DBOPEN('CATEGORY') + PRNTNAME = CALLPARM + PARENTFILE = 'PRODUCT' + CHILDFILE = 'PROD_ATTS' + FILEFILTER = 'PROD_ATTS->PROD_CODE == PRODUCT->PROD_CODE' + REPTHEAD = {"'UNIQUE ATTRIBUTES for MODEL/PRODUCT ' + ALLTRIM(PRODUCT->DESC)",; + 'DTOC(CURDATE) '} + + + MDESC = 'Screen Order' + KEYVAR = 'ORDER' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'STR(ORDER,2)' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Attribute' + KEYVAR = 'ATT_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ATT_CODE + STR(ORDER,2)' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'MODEL OPTIONS' + // PRODUCT OPTIONS + PRNTNAME = 'MODELS' + PARENTFILE = 'PROD_OPTS' + CHILDFILE = NIL + FILEFILTER = 'PROD_OPTS->PROD_CODE == PRODUCT->PROD_CODE' + REPTHEAD = {['UNIQUE CHOICES for MODEL/PRODUCT "' + ALLTRIM(PRODUCT->PROD_CODE) + '" - ' + PRODUCT->DESC],; + 'DTOC(CURDATE) '} + + MDESC = 'Attribute' + KEYVAR = 'ATT_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ATT_CODE + STR(SEQ_NUM,2)' + SYSNTX = 1 + LVLBRK = {} + AADD(LVLBRK, {'SEEKATTDESC(ATT_CODE)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'ATTRIBUTES' + // ATTRIBUTES + PRNTNAME = 'List of SYSTEM ATTRIBUTES' + PARENTFILE = 'ATTRIBUTES' + CHILDFILE = NIL + REPTHEAD = PRNTNAME + + MDESC = 'Attribute' + KEYVAR = 'ATT_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ATT_CODE' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Description' + KEYVAR = 'DESC' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DESC + ATT_CODE' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Attribute Type' + KEYVAR = 'ATT_TYPE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ATT_TYPE + ATT_CODE' + SYSNTX = 3 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'ATTRIBUTE OPTIONS' + // ATTRIBUTE OPTIONS + DBOPEN('ATTRIBUTES') + PRNTNAME = CALLPARM + PARENTFILE = 'ATT_OPTS' + CHILDFILE = NIL + REPTHEAD = {"'OPTION CHOICES for System ATTRIBUTES '",; + 'DTOC(CURDATE) '} + + + MDESC = 'Attribute' + KEYVAR = 'ATT_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'ATT_CODE + STR(SEQ_NUM,2)' + SYSNTX = 1 + LVLBRK = {} + AADD(LVLBRK, {'SEEKATTDESC(ATT_CODE)', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'STD_SIZES' + // SIZES TABLES + PRNTNAME = 'STOCKSIZE' + PARENTFILE = 'STD_SIZES' + CHILDFILE = NIL + REPTHEAD = PRNTNAME + + MDESC = 'Product' + KEYVAR = 'PROD_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'PROD_CODE' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'PROD_CODE', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'PRICING REPORT-MODEL' + + // IDENTIFY ALL OPTIONS USED TO PRICE A PRODUCT/MODEL + SAYTITLE('Select Model to Report', '0300') + GET_PARMS1 := DBOPEN('PRODUCT') + @2,0 CLEAR + PRINT_KEY := GET_KEY(GET_PARMS1, .T., , , .T.) + + DBF_FLD_INFO := {} + AADD(DBF_FLD_INFO, {'DATA', 130, 'C', 0} ) + CREATE_U7() + PRNTNAME = 'MODEL PRICE REPORT' + PARENTFILE = 'USERFILE7' + CHILDFILE = NIL + FILEFILTER = '.T.' + DET_SUMM = .F. + REPTHEAD = PRNTNAME + DEFINEPROC = {|| FLD_PRICERPT('PRICE', 'MODEL') } // FOUND IN 0350 + ** + LVLBRK = {} + ** + PRNTARR := LOAD_PRNTARR() + + + CASE ALLTRIM(CALLPARM) == 'PRICING REPORT-CUST' + + // IDENTIFY ALL OPTIONS USED TO PRICE A PRODUCT/MODEL WITH SPECIAL PRICING CONSIDERATIONS + SAYTITLE('Select Customer/Model', '0300') + GET_PARMS1 := DBOPEN('CUST_MAST') + GET_PARMS2 := DBOPEN('PRODUCT') + @2,0 CLEAR + PRINT_KEY := GET_KEY(GET_PARMS1, .T.,,,.T. ) + @4,0 CLEAR + PRINT_KEY := PRINT_KEY + GET_KEY(GET_PARMS2, .T.,,5,.T.) + + DBF_FLD_INFO := {} + AADD(DBF_FLD_INFO, {'DATA', 130, 'C', 0} ) + CREATE_U7() + + PRNTNAME = 'CUSTOMER PRICE REPORT' + PARENTFILE = 'USERFILE7' + CHILDFILE = NIL + FILEFILTER = '.T.' + DET_SUMM = .F. + REPTHEAD = PRNTNAME + DEFINEPROC = {|| FLD_PRICERPT('PRICE', 'CUST') } // FOUND IN 0350 + ** + LVLBRK = {} + ** + PRNTARR := LOAD_PRNTARR() + + + CASE ALLTRIM(CALLPARM) == 'PRODUCT REPORT-MODEL' + + // IDENTIFY ALL OPTIONS USED TO PRICE A PRODUCT/MODEL + SAYTITLE('Select Model for Production', '0300') + GET_PARMS1 := DBOPEN('PRODUCT') + @2,0 CLEAR + PRINT_KEY := GET_KEY(GET_PARMS1, .T.) + + DBF_FLD_INFO := {} + AADD(DBF_FLD_INFO, {'DATA', 130, 'C', 0} ) + CREATE_U7() + + PRNTNAME = 'MODEL PRODUCTION CUTTING SPECIFICATIONS' + PARENTFILE = 'USERFILE7' + CHILDFILE = NIL + FILEFILTER = '.T.' + DET_SUMM = .F. + REPTHEAD = PRNTNAME + DEFINEPROC = {|| FLD_PRICERPT('PROD', 'MODEL') } // FOUND IN 0350 + ** + LVLBRK = {} + ** + PRNTARR := LOAD_PRNTARR() + + + CASE ALLTRIM(CALLPARM) == 'PRODUCT REPORT-CUST' + + // IDENTIFY ALL OPTIONS USED TO PRICE A PRODUCT/MODEL +* SAYTITLE('Select Model for Production', '0300') +* GET_PARMS := DBOPEN('PRODUCT') +* PRINT_KEY := GET_KEY(GET_PARMS, .T.) + SAYTITLE('Select Customer/Model', '0300') + GET_PARMS1 := DBOPEN('CUST_MAST') + GET_PARMS2 := DBOPEN('PRODUCT') + @2,0 CLEAR + PRINT_KEY := GET_KEY(GET_PARMS1, .T.,,,.T. ) + @4,0 CLEAR + PRINT_KEY := PRINT_KEY + GET_KEY(GET_PARMS2, .T.,,5,.T.) + + + DBF_FLD_INFO := {} + AADD(DBF_FLD_INFO, {'DATA', 130, 'C', 0} ) + CREATE_U7() + + PRNTNAME = 'CUSTOMER PRODUCTION CUTTING SPECIFICATIONS' + PARENTFILE = 'USERFILE7' + CHILDFILE = NIL + FILEFILTER = '.T.' + DET_SUMM = .F. + REPTHEAD = PRNTNAME + DEFINEPROC = {|| FLD_PRICERPT('PROD', 'CUST') } // FOUND IN 0350 + ** + LVLBRK = {} + ** + PRNTARR := LOAD_PRNTARR() + + + + CASE ALLTRIM(CALLPARM) == 'MONTHLY PRODUCTION' + + CLS + SAYTITLE('Monthly Production Report', '0300') + DBOPEN('ORD_MAST') + DBOPEN('ORD_LINES') + DBOPEN('ORD_PROD') //** P3N - 01/16/02 + DBOPEN('ORDER_OPTS') //** P3N - 01/16/02 + DBOPEN('ADDL_OPTS') //** P3N - 01/16/02 + DBOPEN('ADDL_LINES') + DBOPEN('PRODUCT') + DET_SUMM := .T. + + DBF_FLD_INFO := {} + AADD(DBF_FLD_INFO, {'PROD_YEAR', 4, 'C', 0} ) + AADD(DBF_FLD_INFO, {'PROD_CODE', 7, 'C', 0} ) + AADD(DBF_FLD_INFO, {'PROD_COLOR',10, 'C', 0} ) //** P3N - 01/16/02 + AADD(DBF_FLD_INFO, {'PROD_HOURS',10, 'N', 2} ) //** P3N - 01/16/02 + AADD(DBF_FLD_INFO, {'CAT_CODE', 7, 'C', 0} ) + AADD(DBF_FLD_INFO, {'LOC_CODE', 6, 'C', 0} ) + AADD(DBF_FLD_INFO, {'ORDER_NUM', 6, 'C', 0} ) + AADD(DBF_FLD_INFO, {'THIS_DATE', 8, 'D', 0} ) + AADD(DBF_FLD_INFO, {'ORDER_DATE', 8, 'D', 0} ) + AADD(DBF_FLD_INFO, {'PDATE_LAST', 8, 'D', 0} ) + AADD(DBF_FLD_INFO, {'IDATE_LAST', 8, 'D', 0} ) + AADD(DBF_FLD_INFO, {'DDATE_LAST', 8, 'D', 0} ) + AADD(DBF_FLD_INFO, {'JAN', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'FEB', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'MAR', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'APR', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'MAY', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'JUN', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'JUL', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'AUG', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'SEP', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'OCT', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'NOV', 5, 'N', 0} ) + AADD(DBF_FLD_INFO, {'DEC', 5, 'N', 0} ) + + CREATE_U7() + **INDEX ON PROD_YEAR + PROD_CODE + LOC_CODE TO &USERFILE7 + NDX_EXP := 'PROD_YEAR + PROD_CODE + LOC_CODE' + IF __DBDRIVER = 'CDX' + TAGNAME := 'T1' + INDEX ON &NDX_EXP TAG &TAGNAME TO &USERFILE7 + ELSE + INDEX ON &NDX_EXP TO &USERFILE7 + ENDIF + + + // GET DRIVER DATE + AADD(PARR, 'ORDER Totals Report') + AADD(PARR, 'PRODUCTION Totals Report') + AADD(PARR, 'INVOICING Totals Report') + AADD(PARR, 'DELIVERY Totals Report') + CHOICE = PICKLIST(PARR) + IF LASTKEY() = 27 + RETURN NIL + ENDIF + M->PRODTIME := CHOICE //** P3N - 01/16/02 + +****PRNTNAME = 'MONTHLY PRODUCTION TOTALS' + PARENTFILE = 'USERFILE7' + CHILDFILE = NIL + FILEFILTER = '.T.' + DET_SUMM = .T. + DEFINEPROC = {|| DEF_MOPROD() } // FOUND IN 0350 + + + DO CASE + CASE CHOICE = 1 + PRNTNAME = 'MONTHLY ORDER TOTALS' + BLD_PROC = "BLD_MOPROD('ORDER')" + + CASE CHOICE = 2 + PRNTNAME = 'MONTHLY PRODUCTION TOTALS' + BLD_PROC = "BLD_MOPROD('PRODUCTION')" + + CASE CHOICE = 3 + PRNTNAME = 'MONTHLY INVOICING TOTALS' + BLD_PROC = "BLD_MOPROD('INVOICING')" + + CASE CHOICE = 4 + PRNTNAME = 'MONTHLY DELIVERY TOTALS' + BLD_PROC = "BLD_MOPROD('DELIVER')" + + END CASE + REPTHEAD = PRNTNAME + ** + LVLBRK = {} + ** + + MDESC = 'Product' + KEYVAR = 'PROD_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CAT_CODE + PROD_CODE + LOC_CODE + PROD_YEAR' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'CAT_CODE', ' ' } ) +****AADD(LVLBRK, {'PROD_CODE', ' ' } ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Order #' + KEYVAR = 'ORDER_NUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + IF CHOICE = 1 + MDESC = 'Order Date' + *** KEYVAR = 'ORDER_DATE' + KEYVAR = {{'ORD_MAST','ORDER_DATE'}, ' ORD_MAST_DATA("ORDER_DATE") ' } + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + ELSE + IF CHOICE = 2 + MDESC = 'Production Date' + KEYVAR = 'PDATE_LAST' + KEYVAR = {{'ORD_MAST','ORDER_DATE'}, ' ORD_MAST_DATA("PDATE_LAST") ' } + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + ELSE + IF CHOICE = 3 + MDESC = 'Invoice Date' +** KEYVAR = 'IDATE_LAST' + KEYVAR = {{'ORD_MAST','ORDER_DATE'}, ' ORD_MAST_DATA("IDATE_LAST") ' } + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + ELSE + IF CHOICE = 4 + MDESC = 'Delivery Date' +**** KEYVAR = 'DDATE_LAST' + KEYVAR = {{'ORD_MAST','ORDER_DATE'}, ' ORD_MAST_DATA("DDATE_LAST") ' } + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + ENDIF + ENDIF + ENDIF + ENDIF + + MDESC = 'Category' +//**KEYVAR = 'CAT_CODE' +//** P3N - 11/22/99 + KEYVAR = {{'USERFILE7','CAT_CODE'},'GET_CATCODE(PROD_CODE)'} + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + MDESC = 'Location' + KEYVAR = 'LOC_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + MDESC := 'Color' //** P3N - 01/16/02 +//**KEYVAR := 'PROD_COLOR' //** P3N - 01/16/02 + KEYVAR := {{'USERFILE7','PROD_COLOR'},'GETCOLOR("PROD_COLOR")'} //** P3N - 01/16/02 + PIC := '' //** P3N - 01/16/02 + RANGETYPE := 'R' //** P3N - 01/16/02 + CUTOFF := .F. //** P3N - 01/16/02 + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + PRNTARR := LOAD_PRNTARR() + + + CASE ALLTRIM(CALLPARM) == 'RULE REPORT' + + // VERIFY ALL RULES USED AND NOT IN USE + SAYTITLE('Verifying Rules Report', '0300') + + DBF_FLD_INFO := {} + AADD(DBF_FLD_INFO, {'DATA', 100, 'C', 0} ) + CREATE_U7() + + PRNTNAME = 'RULE VERIFICATION REPORT' + PARENTFILE = 'USERFILE7' + CHILDFILE = NIL + FILEFILTER = '.T.' + DET_SUMM = .F. + REPTHEAD = PRNTNAME + DEFINEPROC = {|| BLD_RULERPT() } // FOUND IN 0350 + ** + LVLBRK = {} + ** + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'RULES' + + // VERIFY ALL RULES USED AND NOT IN USE + SAYTITLE('Print / Display Rules', '0300') + + PRNTNAME = 'RULES REPORT' + PARENTFILE = 'RULES' + CHILDFILE = 'RULEPACK' + FILEFILTER = 'RULE_CODE == RULES->RULE_CODE' + DET_SUMM = .F. + REPTHEAD = {"{'RULE DEFINITIONS - ' + RULES->RULE_DESC , DTOC(CURDATE) }"} + ** + LVLBRK = {} + ** + + MDESC = 'Line Number' + KEYVAR = 'LINE_NUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'STR(LINE_NUM,3)' + SYSNTX = 1 + LVLBRK = {} +****AADD(LVLBRK, {'SEEKATTDESC(ATT_CODE)', ' ' } ) +****AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'PRICING EXTRAS' + + // VERIFY ALL RULES USED AND NOT IN USE + SAYTITLE('Print / Display Pricing Extras', '0300') + + PRNTNAME = 'PRICING EXTRAS REPORT' + PARENTFILE = 'CATEGORY' + CHILDFILE = 'PRI_EXTRAS' + FILEFILTER = 'CAT_CODE == CATEGORY->CAT_CODE' + DET_SUMM = .F. + REPTHEAD = PRNTNAME + REPTHEAD = {"{'PRICING EXTRAS - ' + CATEGORY->DESC , DTOC(CURDATE) }"} + ** + LVLBRK = {} + ** + + MDESC = 'Sequence Order' + KEYVAR = 'SEQ_NUM' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'STR(SEQ_NUM,3)' + SYSNTX = 1 + LVLBRK = {} +****AADD(LVLBRK, {'SEEKATTDESC(ATT_CODE)', ' ' } ) +****AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'MANUFACTURING LOCATIONS' + // MANUFACTURING LOCATION + PRNTNAME = 'MANUFACTURING LOCATIONS' + PARENTFILE = 'MFG_LOC' + CHILDFILE = NIL + FILEFILTER = '.T.' + REPTHEAD = PRNTNAME + + MDESC = 'Location Code' + KEYVAR = 'LOC_CODE' + PIC = '!!!!!!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'LOC_CODE' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'CUSTOMER MASTER' + // CUSTOMER MASTER + DBOPEN('TERMS') //** P3N - 02/27/02 + PRNTNAME = 'CUSTOMER MASTER' + PARENTFILE = 'CUST_MAST' + CHILDFILE = NIL + FILEFILTER = '.T.' + REPTHEAD = PRNTNAME + DEFINEPROC = {|| DEF_CMRPT() } // FOUND IN 0350 + + MDESC = 'Customer Number' + KEYVAR = 'CUST_ID' + PIC = '!!!!!!!!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ID' + SYSNTX = 1 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Customer Name' + KEYVAR = 'COMP_NAME' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UPPER(COMP_NAME)' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'City' + KEYVAR = 'CUST_CITY' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UPPER(CUST_CITY + CUST_STATE + COMP_NAME)' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'State' + KEYVAR = 'CUST_STATE' + PIC = '!!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UPPER(CUST_STATE + COMP_NAME)' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'CUST_STATE', MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'ZIP Code' + KEYVAR = 'CUST_ZIP' + PIC = '99999' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ZIP + COMP_NAME' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'CUST_ZIP',MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Delivery Route' + KEYVAR = 'DEL_ROUTE' + PIC = '!!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DEL_ROUTE + COMP_NAME' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'DEL_ROUTE',MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Price Sheet' + KEYVAR = 'PRICE_SHT' + PIC = '!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'PRICE_SHT + COMP_NAME' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'PRICE_SHT',MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + + CASE ALLTRIM(CALLPARM) == 'MODEL BASE PRICE' .OR. ; + ALLTRIM(CALLPARM) == 'CATEGORY BASE PRICE' + + // IDENTIFY ALL OPTIONS USED TO PRICE A PRODUCT/MODEL + TITLE := 'Select Price Table to Print' + @2,0 CLEAR TO 9,80 + + DBF_FLD_INFO := {} + AADD(DBF_FLD_INFO, {'DATA', 131, 'C', 0} ) + CREATE_U7() + + NCHOICE := WHCHPRICE(1) + IF LASTKEY() = 27 + PRNTARR := NIL + RETURN PRNTARR + ENDIF + + PT_PARM := CURPTBL(NCHOICE) + + PRNTNAME = 'BASE PRICE TABLES' + PARENTFILE = 'USERFILE7' + CHILDFILE = NIL + FILEFILTER := '.T.' + DET_SUMM = .F. + REPTHEAD = {" { '" + PT_PARM + "', DTOC(CURDATE) }"} + IF CALLPARM = 'CATEGORY' + BLD_PROC = "CGWBASEPRICE('CATEGORY'," + STR(NCHOICE,1) + ")" + ELSE + BLD_PROC = "CGWBASEPRICE('PRODUCT', " + STR(NCHOICE,1) + ")" + ENDIF + DEFINEPROC = {|| BASEPRICE() } // FOUND IN 0350 + ** + LVLBRK = {} + ** + PRNTARR := LOAD_PRNTARR() + +********** + + CASE CALLPARM == 'CUSTDEL' + // + PRNTNAME = 'CUSTOMER LIST - DELIVERY INFORMATION' + PARENTFILE = 'CUST_MAST' + CHILDFILE = NIL + REPTHEAD = PRNTNAME + DET_SUMM := .T. + DEFINEPROC := {|| BLD_CUSTDEL() } + DET_LINE_EXTRA := DEL_ADD_ARR // DELIVERY ADDRESS ARRARY + + MDESC = 'Customer ID' + KEYVAR = 'CUST_ID' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ID' + SYSNTX = 1 + LVLBRK = {} + CONVKEYX := MAKE_BLOCK('CONV_RANGE(RANGE1, RANGE2)') + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF,,, CONVKEYX}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Customer Name' + KEYVAR = 'COMP_NAME' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UPPER(COMP_NAME)' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'City' + KEYVAR = 'CUST_CITY' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UPPER(CUST_CITY + CUST_STATE + COMP_NAME)' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'State' + KEYVAR = 'CUST_STATE' + PIC = '!!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UPPER(CUST_STATE + COMP_NAME)' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'CUST_STATE', MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'ZIP Code' + KEYVAR = 'CUST_ZIP' + PIC = '99999' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ZIP + COMP_NAME' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'CUST_ZIP',MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Delivery Route' + KEYVAR = 'DEL_ROUTE' + PIC = '!!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DEL_ROUTE + COMP_NAME' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'DEL_ROUTE',MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + +********** + + CASE CALLPARM == 'CUSTSETUP' + // + PRNTNAME = 'CUSTOMER LIST - TERMS and SETUP Information' + PARENTFILE = 'CUST_MAST' + CHILDFILE = NIL + REPTHEAD = PRNTNAME + DET_SUMM := .T. + DEFINEPROC := {|| BLD_CUSTSETUP() } + DBOPEN('TAX_SCHED') + DBOPEN('TAX_DETAIL') + + MDESC = 'Customer ID' + KEYVAR = 'CUST_ID' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ID' + SYSNTX = 1 + LVLBRK = {} + CONVKEYX := MAKE_BLOCK('CONV_RANGE(RANGE1, RANGE2)') + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF,,, CONVKEYX}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Customer Name' + KEYVAR = 'COMP_NAME' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UPPER(COMP_NAME)' + SYSNTX = 2 + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Salesman' + KEYVAR = 'SLSMAN' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'SLSMAN + COMP_NAME' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'SLSMAN', MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Price Sheet' + KEYVAR = 'PRICE_SHT' + PIC = '!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'PRICE_SHT + COMP_NAME' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'PRICE_SHT', MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Tax Schedule' + KEYVAR = 'TAXSCH' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'TAXSCH + COMP_NAME' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'TAXSCH',MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + +********** + + CASE CALLPARM == 'DISCOUNTS' + // + PRNTNAME = 'CUSTOMER DISCOUNTS LIST' + PARENTFILE = 'CUST_PRICE' + CHILDFILE = NIL + REPTHEAD = PRNTNAME + DET_SUMM := .T. + DBOPEN('CUST_MAST') + + MDESC = 'Customer ID' + KEYVAR = 'CUST_ID' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ID' + SYSNTX = 1 + LVLBRK = {} + AADD(LVLBRK, {'CUST_ID', MDESC} ) + CONVKEYX := MAKE_BLOCK('CONV_RANGE(RANGE1, RANGE2)') + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF,,, CONVKEYX}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Customer Name' + KEYVAR = {{'CUST_MAST','COMP_NAME'}, 'UPPER(DISPVALUE(CLUBID,"CLUB_MAST",{"NAME"}))'} //DATABASE VARIABLE USED FOR RANGE + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UPPER(DISPVALUE(CUST_ID,"CUST_MAST",{"COMP_NAME"}))' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'DISPVALUE(CUST_ID,"CUST_MAST",{"COMP_NAME"})', ' '} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Category' + KEYVAR = 'CAT_CODE' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CAT_CODE + PROD_CODE + CUST_ID' + SYSNTX = 2 + LVLBRK = {} + AADD(LVLBRK, {'CAT_CODE', MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Product' + KEYVAR = 'PROD_CODE' + PIC = '!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'PROD_CODE + CAT_CODE + CUST_ID' + SYSNTX = 3 + LVLBRK = {} + AADD(LVLBRK, {'PROD_CODE', MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Disc %' + KEYVAR = 'DISCOUNT' + PIC = '999.99' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'STR(DISCOUNT,6,2) + CUST_ID' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Price Sheet' + KEYVAR = 'PRICE_SHT' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'PRICE_SHT + CUST_ID' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + +***************** + CASE CALLPARM == 'SPEC PRICE' + // + PRNTNAME = 'CUSTOMER SPECIAL PRICE SHEET LISTING' + PARENTFILE = 'CUST_BP' + CHILDFILE = NIL + REPTHEAD = PRNTNAME + DET_SUMM := .T. + DBOPEN('CUST_MAST') + + MDESC = 'Customer ID' + KEYVAR = 'CUST_ID' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'CUST_ID' + SYSNTX = 1 + LVLBRK = {} + AADD(LVLBRK, {'CUST_ID', MDESC} ) + CONVKEYX := MAKE_BLOCK('CONV_RANGE(RANGE1, RANGE2)') + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF,,, CONVKEYX}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Customer Name' + KEYVAR = {{'CUST_MAST','COMP_NAME'}, 'UPPER(DISPVALUE(CLUBID,"CLUB_MAST",{"NAME"}))'} //DATABASE VARIABLE USED FOR RANGE + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'UPPER(DISPVALUE(CUST_ID,"CUST_MAST",{"COMP_NAME"}))' + SYSNTX = NIL + LVLBRK = {} + AADD(LVLBRK, {'DISPVALUE(CUST_ID,"CUST_MAST",{"COMP_NAME"})', ' '} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Product' + KEYVAR = 'PROD_CODE' + PIC = '!' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'PROD_CODE + CAT_CODE + CUST_ID' + SYSNTX = 2 + LVLBRK = {} + AADD(LVLBRK, {'PROD_CODE', MDESC} ) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Base %' + KEYVAR = 'BASEFAC' + PIC = '99999.99' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'STR(BASEFAC,8,2) + CUST_ID' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'Begin Date' + KEYVAR = 'DATE1' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DTOS(DATE1) + CUST_ID' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + MDESC = 'End Date' + KEYVAR = 'DATE2' + PIC = '' + RANGETYPE = 'R' + CUTOFF = .F. + NDXEXP = 'DTOS(DATE2) + CUST_ID' + SYSNTX = NIL + LVLBRK = {} + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + PRNTARR := LOAD_PRNTARR() + +***************** + +OTHERWISE + PRNTARR := NIL +ENDCASE + +RETURN PRNTARR +******************************************************************* +FUNCTION CURPTBL(WHCHTBL) +DO CASE + CASE WHCHTBL = 1 + RETURN 'DEALER PRICE SHEET' + CASE WHCHTBL = 2 + RETURN 'SPECIAL DEALER PRICE SHEET' + CASE WHCHTBL = 3 + RETURN 'BUILDER PRICE SHEET' + CASE WHCHTBL = 4 + RETURN 'LUMBERMEN PRICE SHEET' + CASE WHCHTBL = 5 + RETURN 'DISTRIBUTOR PRICE SHEET' + CASE WHCHTBL = 6 + RETURN 'INTERCOMPANY PRICE SHEET' + OTHERWISE + ? ABEND + +ENDCASE + + +******************************************************************* +// PRINT THE DELIVERY ADDRESS AS DETAIL EXTRA LINE +FUNCTION DA(PARM) +LOCAL NUMSP1 := SPACE(09) , NUMSP2 := SPACE(48) +DO CASE + CASE PARM = 1 + RETURN NUMSP1 + PADR(CUST_MAST->CUST_ADDR,30) ; + + NUMSP2 + CUST_MAST->SHIPADD1 + CASE PARM = 2 + RETURN NUMSP1 + PADR(CUST_MAST->CUST_ADDR2,30) ; + + NUMSP2 + ALLTRIM(CUST_MAST->SHIPADD2) + ' ' ; + + CUST_MAST->SHIPST + ' ' + CUST_MAST->SHIPZIP + CASE PARM = 3 + RETURN NUMSP1 + PADR( ALLTRIM(CUST_MAST->CUST_CITY) + ' ' ; + + CUST_MAST->CUST_STATE + ' ' + CUST_MAST->CUST_ZIP, 30) ; + + NUMSP2 + 'Phone: ' + ALLTRIM(CUST_MAST->SHIPPHN) + ' FAX: ' + CUST_MAST->SHIPFAX + CASE PARM = 4 + RETURN NUMSP1 + 'Phone: ' + ALLTRIM(CUST_MAST->PHONE) + ' FAX: ' + CUST_MAST->FAX + CASE PARM = 5 + RETURN REPLICATE('-', LEN(DATA) ) +ENDCASE + + +*********************************************************** +FUNCTION GET_NAME(MCUST_ID) +// RETURN THE CUST_ID NAME + +RETURN ORD_MAST->BILL_NAME +*********************************************************** +* CREATE THE USERFILE7 FOR REPORT PROCESSING +*********************************************************** +FUNCTION CREATE_U7() +IF SELECT('USERFILE7') > 0 + SELECT USERFILE7 + USE +ENDIF +IF FILE(USERFILE7 + '.DBF') + ERASE (USERFILE7+'.DBF') +ENDIF +CREATE_DBF(USERFILE7, DBF_FLD_INFO) +NET_USE(USERFILE7, .T., 3, 'USERFILE7') +RETURN + \ No newline at end of file diff --git a/CGW0350.PRG b/CGW0350.PRG new file mode 100644 index 0000000..57b714c --- /dev/null +++ b/CGW0350.PRG @@ -0,0 +1,1864 @@ +// CGW0350 - don and mike - 08-06-94 +************************************************* + +#INCLUDE 'CGWINCLD.PRG' + + +************************************************* +FUNCTION DEF_MITEMS() +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 + +FIELDNAME := 'PARTNUM' +COLHEAD := {'Part #'} +TOTALFLD := .F. +DISPLEN := 8 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + +FIELDNAME := 'DISPVALUE(PARTNUM,"MISC_ITEMS",{"DESC"})' +COLHEAD := {'Description'} +TOTALFLD := .F. +DISPLEN := 25 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'DISPVALUE(PARTNUM,"MISC_ITEMS",{"GL_NUM"})' +COLHEAD := {'GL Num'} +TOTALFLD := .F. +DISPLEN := 8 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'UOM' +COLHEAD := {'Unit','Of', 'Measure'} +TOTALFLD := .F. +DISPLEN := 8 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(DLR_AMT, 10,4) ' +COLHEAD := {'Dealer'} +TOTALFLD := .F. +DISPLEN := 10 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(SD_AMT, 10,4) ' +COLHEAD := {'Special','Dealer'} +TOTALFLD := .F. +DISPLEN := 10 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(BU_AMT, 10,4) ' +COLHEAD := {'Builder'} +TOTALFLD := .F. +DISPLEN := 10 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(DIST_AMT, 10,4) ' +COLHEAD := {'Distributor'} +TOTALFLD := .F. +DISPLEN := 10 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(LUMB_AMT, 10,4) ' +COLHEAD := {'Lumbermen'} +TOTALFLD := .F. +DISPLEN := 10 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(IC_AMT, 10,4) ' +COLHEAD := {'Intercompany'} +TOTALFLD := .F. +DISPLEN := 10 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + + +RETURN FIELDARR + + + +******************************************************************** +//** P3N - 3/18/99 - LIMIT THE NUMBER OF FIELDS PRINTING ON REPORT +******************************************************************** +FUNCTION DEF_BILLTRAN() +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 + +FIELDNAME := 'ORDER_NUM' +COLHEAD := {'Order #'} +TOTALFLD := .F. +DISPLEN := 6 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'SPACE(1) + INVNR' +COLHEAD := {'Invoice#'} +TOTALFLD := .F. +DISPLEN := 8 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'CRMNR' +COLHEAD := {' Ref #'} +TOTALFLD := .F. +DISPLEN := 6 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +* FIELDNAME := 'GL_NUM' +* COLHEAD := {'GL Acct #'} +* TOTALFLD := .F. +* DISPLEN := 10 +* DISPDEC := 0 +* AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'SPACE(2) + SALCD' +COLHEAD := {'Sale','Code'} +TOTALFLD := .F. +DISPLEN := 4 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'SLSNR' +COLHEAD := {'Sales',' Rep'} +TOTALFLD := .F. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'SPACE(3) + ACREC' +COLHEAD := {'Active',' Code'} +TOTALFLD := .F. +DISPLEN := 6 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'SPACE(1) + COMNO' +COLHEAD := {'Comp#'} +TOTALFLD := .F. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'CUSNR' +COLHEAD := {'Customer#'} +TOTALFLD := .F. +DISPLEN := 9 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'TRNDT' +COLHEAD := {'Trans','Date'} +TOTALFLD := .F. +DISPLEN := 6 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(INVAM,13,2)' +COLHEAD := {' Invoice ',' Amount '} +TOTALFLD := .T. +DISPLEN := 13 +DISPDEC := 2 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(TXBLAMT,13,2)' +COLHEAD := {' Taxable ',' Amount '} +TOTALFLD := .T. +DISPLEN := 13 +DISPDEC := 2 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(TXAM1,13,2)' +COLHEAD := {'Sales Tax Amt'} +TOTALFLD := .T. +DISPLEN := 13 +DISPDEC := 2 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'TXSCHED' +COLHEAD := {' Tax ',' Sched'} +TOTALFLD := .F. +DISPLEN := 6 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +RETURN FIELDARR + +************************************************* +FUNCTION DEF_ORDERS(WHATRPT) +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 +LOCAL PRTCUSTNAME := .F. +IF EMPTY(WHATRPT) +ELSEIF WHATRPT = 'FULFILLMENT' + PRTCUSTNAME := .T. +ENDIF +FIELDNAME := 'CUST_ID' +COLHEAD := {'Cust ID'} +TOTALFLD := .F. +DISPLEN := 8 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +IF PRTCUSTNAME +//**IF EMPTY(CUST_ID) //** P3N - 08/29/01 +//** FIELDNAME := 'No Customer Found' //** P3N - 08/29/01 +//**ELSE //** P3N - 08/29/01 +//** FIELDNAME := 'GET_COMPNAME(CUST_ID)' //** P3N - 08/29/01 +//**ENDIF //** P3N - 08/29/01 + FIELDNAME := 'GET_COMPNAME(CUST_ID)' //** P3N - 08/29/01 + COLHEAD := {'Company Name'} + TOTALFLD := .F. + DISPLEN := 30 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) +ENDIF + +IF EMPTY(WHATRPT) //** P3N - 08/30/01 + FIELDNAME := 'ORDER_NUM' + COLHEAD := {'Order#'} + TOTALFLD := .F. + DISPLEN := 6 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'CUST_PO' + COLHEAD := {'PO #'} + TOTALFLD := .F. + DISPLEN := 10 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +ENDIF //** P3N - 08/30/01 + +FIELDNAME := 'INVOICENUM' +COLHEAD := {'Invoice'} +TOTALFLD := .F. +DISPLEN := 7 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'DTOC(ORDER_DATE)' +COLHEAD := {'Order','Date'} +TOTALFLD := .F. +DISPLEN := 8 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +IF EMPTY(WHATRPT) //** P3N - 08/30/01 + FIELDNAME := 'DTOC(CALL_DATE)' + COLHEAD := {'Call','Date'} + TOTALFLD := .F. + DISPLEN := 8 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'DTOC(PDATE_LAST)' + COLHEAD := {'Prod','Date'} + TOTALFLD := .F. + DISPLEN := 8 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'DTOC(DDATE_LAST)' + COLHEAD := {'Delivery','Date'} + TOTALFLD := .F. + DISPLEN := 8 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'SLSMAN' + COLHEAD := {'Sold','By'} + TOTALFLD := .F. + DISPLEN := 5 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'TERMS' + COLHEAD := {'Terms'} + TOTALFLD := .F. + DISPLEN := 5 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +ENDIF //** P3N - 08/30/01 + +FIELDNAME := 'SHP_METHOD' +COLHEAD := {'Shp','Mthd'} +TOTALFLD := .F. +DISPLEN := 4 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +IF EMPTY(WHATRPT) //** P3N - 08/30/01 + FIELDNAME := 'DEL_ROUTE' + COLHEAD := {'Rte'} + TOTALFLD := .F. + DISPLEN := 3 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'PRICE_SHT' + COLHEAD := {'Price','Sheet'} + TOTALFLD := .F. + DISPLEN := 5 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'TAXSCH' + COLHEAD := {'Tax','Sch'} + TOTALFLD := .F. + DISPLEN := 6 + DISPDEC := 0 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'STR(ORD_L_TTL,10,2)' + COLHEAD := {' Items',' Total'} + TOTALFLD := .T. + DISPLEN := 10 + DISPDEC := 2 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'STR(ORD_D_TTL,8,2)' + COLHEAD := {' Misc.',' Total'} + TOTALFLD := .T. + DISPLEN := 8 + DISPDEC := 2 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'STR(SALES_TAX,9,2)' + COLHEAD := {' Tax'} + TOTALFLD := .T. + DISPLEN := 9 + DISPDEC := 2 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + **FIELDNAME := 'STR(FREIGHT,8,2)' + **COLHEAD := {' Freight'} + **TOTALFLD := .T. + **DISPLEN := 8 + **DISPDEC := 2 + **AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + FIELDNAME := 'STR(DISCOUNT,6,2)' + COLHEAD := {'Discnt'} + TOTALFLD := .T. + DISPLEN := 6 + DISPDEC := 2 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +ENDIF //** P3N - 08/30/01 + +FIELDNAME := 'STR(TOTAL_AMT,9,2)' +COLHEAD := {' Total',' Amount'} +TOTALFLD := .T. +DISPLEN := 10 +DISPDEC := 2 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + + + +RETURN FIELDARR + +************************************************* +FUNCTION GET_COMPNAME(SEEKKEY) +LOCAL RETVAL +IF CUST_MAST->(DBSEEK(SEEKKEY)) + RETVAL := CUST_MAST->COMP_NAME +ELSEIF EMPTY(SEEKKEY) //** P3N - 08/29/01 + RETVAL := 'NO Customer Found' //** P3N - 08/29/01 +ELSE + RETVAL := 'Cust. ID - ' + TRIM(SEEKKEY) + ' NOT Found!' +ENDIF +RETURN TRIM(RETVAL) +************************************************* +FUNCTION BLD_MOPROD(ACTION) + +LOCAL MORDER_NUM, SEEKKEY, MYEAR, MMONTH, MQUANTITY +LOCAL RANGEBLOCK, MPROD_CODE, M_DATE +LOCAL BARM_FACTOR, XXX := 0,I, SELFILE + + +SELECT ORD_LINES +IF LASTREC() = 1 .OR. EMPTY(RANGEARR) .OR. EMPTY(RANGEARR[1]) + RANGEBLOCK := MAKE_BLOCK( '.T.' ) +ELSE + RANGEBLOCK := MAKE_BLOCK( RANGEARR[1] ) +ENDIF + +DO CASE + CASE ACTION = 'ORDER' + M_DATE = 'ORDER_DATE' + + CASE ACTION = 'PRODUCTION' + M_DATE = 'PDATE_LAST' + + CASE ACTION = 'INVOICING' + M_DATE = 'IDATE_LAST' + + CASE ACTION = 'DELIVER' + M_DATE = 'DDATE_LAST' +END CASE + +FOR I := 1 TO 2 + IF I = 1 + SELFILE := 'ORD_LINES' + ELSE + SELFILE := 'ADDL_LINES' + ENDIF + SELECT (SELFILE) + GOTO TOP + BARM_FACTOR = SETBARM(,, 20, RECCOUNT() ) + XXX = 0 + DO WHILE !EOF() + + XXX++ + BARM_UPDATE(,,XXX, BARM_FACTOR) + IF NEXTKEY() = 27 + INKEY() // GET RID OF ESCAPE KEY + CLOSE DATABASES + RETURN NIL + ENDIF + + IF EMPTY(PROD_CODE) + SKIP 1 + LOOP + ENDIF + + IF !EVAL(RANGEBLOCK) + SKIP 1 + LOOP + ENDIF + + PROD_RPTLINE( SELFILE, M_DATE ) + SKIP 1 + ENDDO +NEXT +RETURN .T. + +******************************************************** +FUNCTION ORD_MAST_DATA( FLDNAME ) + +LOCAL SEEKKEY := ORDER_NUM +ORD_MAST->(DBSEEK(SEEKKEY )) +RETURN ORD_MAST->&FLDNAME + +******************************************************** +FUNCTION PROD_RPTLINE( SELFILE, MDATE ) + +LOCAL SAVESEL := SELECT(), M_DATE, MYEAR, MMONTH, MQUANTITY, MPROD_CODE +LOCAL MLOC_CODE +LOCAL MCOLOR := ' ' //** P3N - 01/16/02 +LOCAL PRODTIME := LEFT(MDATE,1) //** P3N - 01/16/02 +LOCAL MPRODHRS := 0 //** P3N - 01/16/02 + +ORD_MAST->(DBSEEK( (SAVESEL)->ORDER_NUM )) +M_DATE := ORD_MAST->&MDATE +MYEAR = STR(YEAR(M_DATE),4) +MMONTH = LEFT(CMONTH(M_DATE),3) +IF EMPTY(MMONTH) .OR. QUANTITY = 0 + RETURN .F. +ENDIF +MCOLOR := GETCOLOR() //** P3N - 01/16/02 +MPROD_CODE = PROD_CODE +IF PRODTIME == 'P' //** P3N - 01/16/02 + MQUANTITY := GETPRODQTY('QTY') //** P3N - 01/16/02 + MPRODHRS := GETPRODQTY('HRS') //** P3N - 01/16/02 +ELSE //** P3N - 01/16/02 + MQUANTITY := QUANTITY //** P3N - 01/16/02 +ENDIF //** P3N - 01/16/02 +MLOC_CODE = LOC_CODE + +SEEKKEY = MYEAR + MPROD_CODE + MLOC_CODE +SELECT USERFILE7 +SEEK SEEKKEY +IF !FOUND() + ADD_REC() + REPLACE PROD_YEAR WITH MYEAR + REPLACE PROD_CODE WITH MPROD_CODE + REPLACE LOC_CODE WITH MLOC_CODE +ELSE + REC_LOCK() +ENDIF + +REPLACE PROD_COLOR WITH MCOLOR //** P3N - 01/16/02 +REPLACE PROD_HOURS WITH PROD_HOURS + MPRODHRS //** P3N - 01/16/02 +REPLACE &MMONTH WITH &MMONTH + MQUANTITY +REPLACE CAT_CODE WITH GET_CATCODE(MPROD_CODE) +REPLACE ORDER_NUM WITH ORD_MAST->ORDER_NUM +REPLACE THIS_DATE WITH M_DATE + +REPLACE PDATE_LAST WITH ORD_MAST->PDATE_LAST +REPLACE IDATE_LAST WITH ORD_MAST->IDATE_LAST +REPLACE DDATE_LAST WITH ORD_MAST->DDATE_LAST + +UNLOCK + +SELECT (SAVESEL) +RETURN .T. + +******************************************************************** +//** P3N - 01/16/02 ** +//** GET THE PRODUCTION QTY FOR A GIVEN LINE ITEM ** +******************************************************************** +FUNCTION GETPRODQTY(CMD) +LOCAL RETVAL := 0 +LOCAL CURFILE := 'ORD_PROD' +LOCAL SVSEL := ALIAS() +LOCAL SEEKKEY := (SVSEL)->ORDER_NUM + STR((SVSEL)->LINE_NUM,3) +IF (CURFILE)->(DBSEEK(SEEKKEY)) + DO WHILE (CURFILE)->(!EOF()) .AND. ; + (CURFILE)->ORDER_NUM == ORD_LINES->ORDER_NUM .AND. ; + (CURFILE)->LINE_NUM == ORD_LINES->LINE_NUM + IF EMPTY((CURFILE)->COMPL_DATE) + ELSEIF EMPTY(M->RANGE5) .AND. EMPTY(M->RANGE6) + IF CMD == 'QTY' + RETVAL := RETVAL + (CURFILE)->COMPL_QTY + ELSEIF CMD == 'HRS' + RETVAL := RETVAL + (CURFILE)->HOURS + ENDIF + ELSEIF (CURFILE)->COMPL_DATE >= M->RANGE5 .AND. ; + (CURFILE)->COMPL_DATE <= M->RANGE6 + IF CMD == 'QTY' + RETVAL := RETVAL + (CURFILE)->COMPL_QTY + ELSEIF CMD == 'HRS' + RETVAL := RETVAL + (CURFILE)->COMPL_HOURS + ENDIF + ENDIF + (CURFILE)->(DBSKIP(+1)) + ENDDO +ENDIF + +RETURN RETVAL +******************************************************************** +//** P3N - 01/16/02 ** +//** GET THE COLOR FOR A GIVEN LINE ITEM ** +******************************************************************** +FUNCTION GETCOLOR(CMD) +LOCAL RETVAL := '' +LOCAL SVSEL := ALIAS(), CURFILE +LOCAL SEEKKEY := '' +IF ALLTRIM( SVSEL ) == 'ORD_LINES' + CURFILE := 'ORDER_OPTS' +ELSEIF ALLTRIM( SVSEL ) == 'ADDL_LINES' + CURFILE := 'ADDL_OPTS' +ENDIF +IF EMPTY(CMD) .OR. ALLTRIM( SVSEL )$'ORD_LINES ADDL_LINES' + SEEKKEY := ORD_LINES->ORDER_NUM + STR(ORD_LINES->LINE_NUM,3) + IF (CURFILE)->(DBSEEK(SEEKKEY)) + DO WHILE (CURFILE)->(!EOF()) .AND. ; + (CURFILE)->ORDER_NUM == ORD_LINES->ORDER_NUM .AND. ; + (CURFILE)->LINE_NUM == ORD_LINES->LINE_NUM + IF AT('COLOR',(CURFILE)->ATT_CODE) > 0 + RETVAL := (CURFILE)->USER_RESP + ENDIF + (CURFILE)->(DBSKIP(+1)) + ENDDO + ENDIF +ELSEIF CMD == 'PROD_COLOR' + RETVAL := (SVSEL)->PROD_COLOR +ENDIF +RETURN RETVAL +******************************************************************** +// SELECT ORD_MAST +// +// IF LASTREC() = 1 .OR. EMPTY(RANGEARR) .OR. EMPTY(RANGEARR[1]) +// RANGEBLOCK := MAKE_BLOCK( '.T.' ) +// ELSE +// RANGEBLOCK := MAKE_BLOCK( RANGEARR[1] ) +// ENDIF +// +// GO TOP +// BARM_FACTOR = SETBARM(,, 20, RECCOUNT() ) +// DO WHILE EVAL(RANGEBLOCK) .AND. !EOF() +// +// XXX++ +// BARM_UPDATE(,,XXX, BARM_FACTOR) +// +// DO CASE +// CASE ACTION = 'ORDER' +// M_DATE = ORDER_DATE +// +// CASE ACTION = 'PRODUCTION' +// M_DATE = PDATE_LAST +// +// CASE ACTION = 'INVOICING' +// M_DATE = IDATE_LAST +// +// CASE ACTION = 'DELIVER' +// M_DATE = DDATE_LAST +// END CASE +// +// MORDER_NUM = ORDER_NUM +// +// SELECT ORD_LINES +// SEEK MORDER_NUM +// DO WHILE MORDER_NUM = ORDER_NUM .AND. !EOF() +// IF EMPTY(PROD_CODE) +// SKIP 1 +// LOOP +// ENDIF +// +// MYEAR = STR(YEAR(M_DATE),4) +// MMONTH = LEFT(CMONTH(M_DATE),3) +// IF EMPTY(MMONTH) +// SKIP 1 +// LOOP +// ENDIF +// +// MPROD_CODE = PROD_CODE +// MQUANTITY = QUANTITY +// +// SEEKKEY = MYEAR + MPROD_CODE +// SELECT USERFILE7 +// SEEK SEEKKEY +// IF !FOUND() +// ADD_REC() +// REPLACE PROD_YEAR WITH MYEAR +// REPLACE PROD_CODE WITH MPROD_CODE +// ELSE +// REC_LOCK() +// ENDIF +// +// REPLACE &MMONTH WITH &MMONTH + MQUANTITY +// REPLACE CAT_CODE WITH GET_CATCODE(MPROD_CODE) +// REPLACE CAT_CODE WITH GET_CATCODE(MPROD_CODE) +// REPLACE ORDER_NUM WITH ORD_MAST->ORDER_NUM +// REPLACE ORDER_DATE WITH ORD_MAST->ORDER_DATE +// REPLACE PDATE_LAST WITH ORD_MAST->PDATE_LAST +// REPLACE IDATE_LAST WITH ORD_MAST->IDATE_LAST +// REPLACE DDATE_LAST WITH ORD_MAST->DDATE_LAST +// +// UNLOCK +// SELECT ORD_LINES +// SKIP 1 +// ENDDO +// SELECT ORD_MAST +// SKIP 1 +// ENDDO +// RETURN NIL +// +************************************************* +FUNCTION DEF_MOPROD() +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 + +FIELDNAME := 'PROD_YEAR' +COLHEAD := {'Year'} +TOTALFLD := .F. +DISPLEN := 6 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'PROD_CODE' +COLHEAD := {'Product'} +TOTALFLD := .F. +DISPLEN := 9 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'PROD_COLOR' //** P3N - 01/16/02 +COLHEAD := {'Product',' Color'} //** P3N - 01/16/02 +TOTALFLD := .F. //** P3N - 01/16/02 +DISPLEN := 10 //** P3N - 01/16/02 +DISPDEC := 0 //** P3N - 01/16/02 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +IF M->PRODTIME = 2 //** P3N - 01/16/02 + FIELDNAME := 'STR(PROD_HOURS,10,2)' //** P3N - 01/16/02 + COLHEAD := {'Total Prod',' Hours'} //** P3N - 01/16/02 + TOTALFLD := .T. //** P3N - 01/16/02 + DISPLEN := 10 //** P3N - 01/16/02 + DISPDEC := 2 //** P3N - 01/16/02 + AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) +ENDIF //** P3N - 01/16/02 + +FIELDNAME := 'LOC_CODE' +COLHEAD := {'Location'} +TOTALFLD := .F. +DISPLEN := 14 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(JAN,5)' +COLHEAD := {' JAN'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(FEB,5)' +COLHEAD := {' FEB'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(MAR,5)' +COLHEAD := {' MAR'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(APR,5)' +COLHEAD := {' APR'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(MAY,5)' +COLHEAD := {' MAY'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(JUN,5)' +COLHEAD := {' JUN'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(JUL,5)' +COLHEAD := {' JUL'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(AUG,5)' +COLHEAD := {' AUG'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(SEP,5)' +COLHEAD := {' SEP'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(OCT,5)' +COLHEAD := {' OCT'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(NOV,5)' +COLHEAD := {' NOV'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(DEC,5)' +COLHEAD := {' DEC'} +TOTALFLD := .T. +DISPLEN := 5 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'STR(YEAR_END(),10)' +COLHEAD := {' TOTAL'} +TOTALFLD := .T. +DISPLEN := 10 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +RETURN FIELDARR + + +************************************************* +//** P3N - 02/27/02 ** +//** PER LINDAS REQUEST FROM DATADICT PRNT_POS** +************************************************* +FUNCTION DEF_CMRPT() +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 + +FIELDNAME := 'CUST_ID' +COLHEAD := {'Customer','Number'} +TOTALFLD := .F. +DISPLEN := 8 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'COMP_NAME' +COLHEAD := {'Customer','Name'} +TOTALFLD := .F. +DISPLEN := 30 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +//**FIELDNAME := 'ALLTRIM(CONT_FNAME) + " " + CONT_LNAME' +//**COLHEAD := {'Contact','Name'} +//**TOTALFLD := .F. +//**DISPLEN := 40 +//**AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'CUST_ADDR' +COLHEAD := {'Address '} +TOTALFLD := .F. +DISPLEN := 30 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'CUST_ADDR2' +COLHEAD := {'Address '} +TOTALFLD := .F. +DISPLEN := 30 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'CUST_CITY' +COLHEAD := {'City'} +TOTALFLD := .F. +DISPLEN := 30 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'CUST_STATE' +COLHEAD := {'ST'} +TOTALFLD := .F. +DISPLEN := 2 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'CUST_ZIP' +COLHEAD := {' Zip'} +TOTALFLD := .F. +DISPLEN := 5 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'PHONE' +COLHEAD := {'Phone'} +TOTALFLD := .F. +DISPLEN := 12 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'FAX' +COLHEAD := {'FAX'} +TOTALFLD := .F. +DISPLEN := 12 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'TERMS +"/"+ GETTERMS()' +COLHEAD := {'Terms'} +TOTALFLD := .F. +DISPLEN := 25 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'STR(CREDIT_LIM,12,2)' +COLHEAD := {'Credit Limit'} +TOTALFLD := .F. +DISPLEN := 12 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'SPACE(3)+PRE_BILL' +COLHEAD := {'PreBill'} +TOTALFLD := .F. +DISPLEN := 7 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'SPACE(1)+PICK_DEL' +COLHEAD := {'PU','Del','Ins'} +TOTALFLD := .F. +DISPLEN := 3 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := '" " + DEL_ROUTE' +COLHEAD := {'Del', 'Rte'} +TOTALFLD := .F. +DISPLEN := 3 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := '" " + GL_CODE' +COLHEAD := {'GL', 'Code'} +TOTALFLD := .F. +DISPLEN := 4 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + + +RETURN FIELDARR +************************************************* +//** P3N - 02/27/02 +************************************************* +FUNCTION GETTERMS() +LOCAL SEEKKEY := CUST_MAST->TERMS +LOCAL RETVAL := 'No TERM ' + ALLTRIM(SEEKKEY) + ' FOUND' +IF TERMS->(DBSEEK(SEEKKEY)) + RETVAL := TERMS->DESC +ENDIF +RETURN RETVAL +************************************************* +FUNCTION BLD_CUSTDEL() +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 + +FIELDNAME := 'CUST_ID' +COLHEAD := {'Customer',' ID'} +TOTALFLD := .F. +DISPLEN := 8 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'COMP_NAME' +COLHEAD := {'Customer','Name'} +TOTALFLD := .F. +DISPLEN := 30 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'ALLTRIM(CONT_FNAME) + " " + CONT_LNAME' +COLHEAD := {'Contact','Name'} +TOTALFLD := .F. +DISPLEN := 15 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := '" " + DEL_ROUTE' +COLHEAD := {'Delivery', ' Route'} +TOTALFLD := .F. +DISPLEN := 30 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'SHIPNAME' +COLHEAD := {'Shipping', 'Information'} +TOTALFLD := .F. +DISPLEN := 40 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + + +RETURN FIELDARR + + +************************************************* +FUNCTION BLD_CUSTSETUP() +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 + +FIELDNAME := 'CUST_ID' +COLHEAD := {'Customer',' ID'} +TOTALFLD := .F. +DISPLEN := 8 +DISPDEC := 0 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC} ) + +FIELDNAME := 'COMP_NAME' +COLHEAD := {'Customer','Name'} +TOTALFLD := .F. +DISPLEN := 30 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := '" " + PICK_DEL' +COLHEAD := {'PU/DEL','Install'} +TOTALFLD := .F. +DISPLEN := 7 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := '" " + SHP_METHOD' +COLHEAD := {'Shipping', ' Code'} +TOTALFLD := .F. +DISPLEN := 8 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := '" " + SLSMAN' +COLHEAD := {'Salesman'} +TOTALFLD := .F. +DISPLEN := 8 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := '" " + TERMS' +COLHEAD := {'Terms'} +TOTALFLD := .F. +DISPLEN := 5 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := '" " + PRICE_SHT' +COLHEAD := {'Price', 'Sheet'} +TOTALFLD := .F. +DISPLEN := 5 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := 'TAXSCH' +COLHEAD := {'Sales', ' Tax','Sched'} +TOTALFLD := .F. +DISPLEN := 6 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +**FIELDNAME := 'STR(SLS_TX_PCT,7,4)' +FIELDNAME := 'STR( CALC_STAX( TAXSCH, .F. ),7,4)' +COLHEAD := {'Sales', ' Tax',' %'} +TOTALFLD := .F. +DISPLEN := 6 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +FIELDNAME := '" " + RND_PRICE' +COLHEAD := {'Round', 'Price'} +TOTALFLD := .F. +DISPLEN := 5 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + + + +RETURN FIELDARR + + +************************************************* + + +********************************************************* +FUNCTION SEEKCATDESC(SEEKKEY) +LOCAL SAVESEL := SELECT() +SELECT CATEGORY +DBSEEK(SEEKKEY) +SELECT (SAVESEL) +RETURN ALLTRIM(CATEGORY->DESC) + +************************************************** + +FUNCTION SEEKATTDESC(SEEKKEY) +LOCAL SAVESEL := SELECT() +SELECT ATTRIBUTES +DBSEEK(SEEKKEY) +SELECT (SAVESEL) +RETURN '"' + ALLTRIM(ATTRIBUTES->ATT_CODE) + '"/' + ALLTRIM(ATTRIBUTES->DESC) + +************************************************** +* BUILD THE PRICING REPORT IN A USER FILE +************************************************** + +FUNCTION BLD_PRICERPT(DATAFILE, PKEY, RPT_TYPE, LEVEL ) + +LOCAL PROD_ARR := {}, P_ARR := {}, G_ARR := {}, I, ELM, II +LOCAL ROW_CNT := 0, COL_CNT := 0, CNT_ARR := {}, AS_FILE, P_SOURCE +LOCAL MP_KEY, MP_SK_BLK, MP_FOUND := .F., PCT_STR +LOCAL PE_KEY, PE_SK_BLK, PE_FOUND := .F., P_ARRAY := {}, SEEKKEY +LOCAL CUT_SPEC_ARR, L, L2, MP_ARR + +//* +//* OPEN ALL DBFS TO BE USED TO BUILD THE REPORT +//* +DBOPEN('RULES') +DBOPEN('RULEPACK') +DBOPEN('CUST_ATTS',,,{2}) +DBOPEN('CUST_OPTS',,,{3}) +DBOPEN('PROD_ATTS',,,{2}) +DBOPEN('PROD_OPTS',,,{3}) +DBOPEN('CAT_ATTS',,,{2}) +DBOPEN('CAT_OPTS',,,{3}) +DBOPEN('ATTRIBUTES',,,{1}) +DBOPEN('ATT_OPTS',,,{3}) +DBOPEN('MATHPACK',,,{1}) +DBOPEN('PRI_EXTRAS',,,{2}) +DBOPEN('CUST_PE',,,{1}) +DBOPEN("PRODUCT",,, {1}) // OPEN PRODUCT FILE FO SINGLE INDEX +DBOPEN("CATEGORY",,, {1}) // OPEN CATEGORY FILE FO SINGLE INDEX +DBOPEN("CUT_SPEC") +DBOPEN("ATTRIB_CUT") + +IF LEVEL = 'MODEL' + PR_CUSTID := SPACE(8) +ELSE + PR_CUSTID := CUST_MAST->CUST_ID +ENDIF +PROD_ARR := BUILD_GETARR(PKEY, 2,,,,,,PR_CUSTID) //* GET ALL INFO FOR THE PRICING RPT +P_ARRAY := PROD_ARR[PRICE_ARR] +G_ARR := PROD_ARR[GET_ARR] +AS_FILE := PROD_ARR[ATRB_SRC] +IF SUBS(PROD_ARR[ATRB_SRC], 1, 3) == 'PRO' //PRODUCT LEVEL + P_SOURCE := 'MODEL Level' +ELSEIF SUBS(PROD_ARR[ATRB_SRC], 1, 3) == 'CAT' //CATEGORY LEVEL + P_SOURCE := 'CATEGORY Level' +ELSEIF SUBS(PROD_ARR[ATRB_SRC], 1, 3) == 'CUS' //CATEGORY LEVEL + P_SOURCE := 'CUSTOMER Level' +ELSE + P_SOURCE := 'SYSTEM Level' // SYSTEM LEVEL +ENDIF + +// ADDED BY DON 2-21-94 TO GET DEALER PICKUP DISCOUNT +SELECT CATEGORY +DBSEEK(PRODUCT->CAT_CODE) + +SELECT USERFILE7 +GO TOP +IF RPT_TYPE == 'PRICE' //PRICING REPORT + FOR II := 1 TO LEN(P_ARRAY) + IF LEVEL = 'CUST' .AND. P_ARRAY[II,1] <> CUST_MAST->PRICE_SHT + LOOP + ENDIF + P_ARR := GET_PRICEARR(P_ARRAY, P_ARRAY[II, 1]) + IF EMPTY(P_ARR) + LOOP + ENDIF + IF LEVEL = 'CUST' + REP_VAR := 'Normal Base Price for CUSTOMER ' + PR_CUSTID + ' - (Pick up Discount = ' ; + + STR(CATEGORY->D_PICKDISC, 5,2) + ')' +* ADD_U7(REP_VAR) +* REP_VAR := ' ' +* ADD_U7(REP_VAR) +* LOOP + ELSE + IF P_ARRAY[II, 1] == 'D' //DEALER PRICING + REP_VAR := 'Base Price - DEALER PRICING - (Pick up Discount = ' ; + + STR(CATEGORY->D_PICKDISC, 5,2) + ')' + ELSE + IF VALTYPE(P_ARR) != 'A' // IS THIS AN ARRAY OF ROWS / COLS + // NO - IT IS THE % OF DEALER PRICE + PCT_STR := STR(P_ARR,6,2) + '% ' + ' of Dealer Price' + IF P_ARRAY[II, 1] == 'J' //DISTIBUTER PRICING + REP_VAR := 'Base Price - DISTRIBUTER PRICING - ' + PCT_STR + ELSEIF P_ARRAY[II, 1] == 'L' //LUMBER MAN PRICING + REP_VAR := 'Base Price - LUMBER MAN PRICING - ' + PCT_STR + ELSEIF P_ARRAY[II, 1] == 'B' //BUILDER PRICING + REP_VAR := 'Base Price - BUILDER PRICING - ' + PCT_STR + ELSEIF P_ARRAY[II, 1] == 'S' //SPECIAL DEALER PRICING + REP_VAR := 'Base Price - SPECIAL DEALER PRICING - ' + PCT_STR + ELSEIF P_ARRAY[II, 1] == 'I' //INTERCOMPANY PRICING + REP_VAR := 'Base Price - INTERCOMPANY PRICING - ' + PCT_STR + ELSE //PRICING OPTION NOT FOUND + REP_VAR := 'OPTION NOT FOUND - ' + P_ARR[II, 1] + ENDIF + + ADD_U7(REP_VAR) + REP_VAR := ' ' + ADD_U7(REP_VAR) + LOOP + ELSE + IF P_ARRAY[II, 1] == 'J' //DISTIBUTER PRICING + REP_VAR := 'Base Price - DISTRIBUTER PRICING ' + ELSEIF P_ARRAY[II, 1] == 'L' //LUMBER MAN PRICING + REP_VAR := 'Base Price - LUMBER MAN PRICING ' + ELSEIF P_ARRAY[II, 1] == 'B' //BUILDER PRICING + REP_VAR := 'Base Price - BUILDER PRICING ' + ELSEIF P_ARRAY[II, 1] == 'S' //SPECIAL DEALER PRICING + REP_VAR := 'Base Price - SPECIAL DEALER PRICING ' + ELSEIF P_ARRAY[II, 1] == 'I' //SPECIAL DEALER PRICING + REP_VAR := 'Base Price - INTERCOMPANY PRICING ' + ELSE //PRICING OPTION NOT FOUND + REP_VAR := 'OPTION NOT FOUND - ' + P_ARR[II, 1] + ENDIF + ENDIF + ENDIF + ENDIF + + ADD_U7(REP_VAR) + REP_VAR := SPACE(15) + ' Attributes' + SPACE(5) + ' Options' + SPACE(15) + 'Default Rule' + ADD_U7(REP_VAR) + REP_VAR := SPACE(15) + ' ----------' + SPACE(5) + ' -------' + SPACE(15) + '------- ----' + ADD_U7(REP_VAR) + + FOR I := 1 TO LEN(P_ARR) + IF P_ARR[I, ROW_COL] == 'R' // PROCESS ROWS + ELM := ASCAN(G_ARR, { |X| X[ATRB] == P_ARR[I, ATRB] } ) + IF ELM > 0 + CNT_ARR := BLD_BASE( G_ARR[ELM], P_ARR[I], ROW_CNT, COL_CNT ) + ROW_CNT := CNT_ARR[1] + COL_CNT := CNT_ARR[2] + ENDIF + ENDIF + NEXT + + ROW_CNT := 0 + COL_CNT := 0 + + FOR I := 1 TO LEN(P_ARR) + IF P_ARR[I, ROW_COL] == 'C' // PROCESS COLUMNS + ELM := ASCAN(G_ARR, { |X| X[ATRB] == P_ARR[I, ATRB] } ) + IF ELM > 0 + CNT_ARR := BLD_BASE( G_ARR[ELM], P_ARR[I], ROW_CNT, COL_CNT ) + ROW_CNT := CNT_ARR[1] + COL_CNT := CNT_ARR[2] + ENDIF + ENDIF + NEXT + + ROW_CNT := 0 + COL_CNT := 0 + + NEXT + + BLD_LEGND('1') + +ELSE //PRODUCTION REPORT + + REP_VAR := 'Production Information:' + ADD_U7(REP_VAR) + ADD_U7(' ') + REP_VAR := 'Adjustments:' + ADD_U7(REP_VAR) + REP_VAR := 'SAW Width' + SPACE(5) + 'SAW Height' + SPACE(5) + ; + ' TT Width' + SPACE(5) + ' TT Height' + SPACE(5) + ; + ' NS Width' + SPACE(5) + ' NS Height' + SPACE(5) + ; + ' OS Width' + SPACE(5) + ' OS Height' + SPACE(5) + ADD_U7(REP_VAR) + REP_VAR := '---------' + SPACE(5) + '----------' + SPACE(5) + ; + '---------' + SPACE(5) + '----------' + SPACE(5) + ; + '---------' + SPACE(5) + '----------' + SPACE(5) + ; + '---------' + SPACE(5) + '----------' + SPACE(5) + ADD_U7(REP_VAR) + REP_VAR := STR(PRODUCT->SAW_WIDTH,9,4) + SPACE(5) + STR(PRODUCT->SAW_HEIGHT,10,4) + SPACE(5) + ; + STR(PRODUCT->TT_WIDTH,9,4) + SPACE(5) + STR(PRODUCT->TT_HEIGHT,10,4) + SPACE(5) + ; + STR(PRODUCT->NS_WIDTH,9,4) + SPACE(5) + STR(PRODUCT->NS_HEIGHT,10,4) + SPACE(5) + ; + STR(PRODUCT->OS_WIDTH,9,4) + SPACE(5) + STR(PRODUCT->OS_HEIGHT,10,4) + ADD_U7(REP_VAR) + ADD_U7(' ') + REP_VAR := 'Sizes:' + ADD_U7(REP_VAR) + REP_VAR := 'Storm Width ' + SPACE(2) + 'Storm Hght ' + SPACE(5) + ; + 'Screen Width' + SPACE(2) + 'Screen Hght' + SPACE(5) + ; + 'Glass Width ' + SPACE(2) + 'Glass Hght ' + SPACE(5) + ; + 'Sash Width ' + SPACE(2) + 'Sash Hght ' + ADD_U7(REP_VAR) + REP_VAR := '----------- ' + SPACE(2) + '---------- ' + SPACE(5) + ; + '------------' + SPACE(2) + '-----------' + SPACE(5) + ; + '----------- ' + SPACE(2) + '---------- ' + SPACE(5) + ; + '---------- ' + SPACE(2) + '--------- ' + ADD_U7(REP_VAR) + REP_VAR := SPACE(3) + ; + STR(PRODUCT->STR_WIDTH,8,4) + SPACE(5) + STR(PRODUCT->STR_HEIGHT,8,4) + SPACE(10) + ; + STR(PRODUCT->MACH_SCRNW,8,4) + SPACE(5) + STR(PRODUCT->MACH_SCRNW,8,4) + SPACE(8) + ; + STR(PRODUCT->MACH_GLASW,8,4) + SPACE(5) + STR(PRODUCT->MACH_GLASW,8,4) + SPACE(8) + ; + STR(PRODUCT->MACH_SASHW,8,4) + SPACE(5) + STR(PRODUCT->MACH_SASHW,8,4) + ADD_U7(REP_VAR) +ENDIF + +************************************************** +* BUILD THE PRODUCT OPTIONS PRICING INFO +************************************************** + +REP_VAR := REPLICATE('-', LEN(USERFILE7->DATA) ) +ADD_U7(REP_VAR) +IF RPT_TYPE == 'PRICE' //PRICING REPORT + REP_VAR := 'Product Option Pricing - Attributes are Defined at the ' +ELSE + REP_VAR := 'Product Option Cutting - Attributes are Defined at the ' +ENDIF +REP_VAR := REP_VAR + ALLTRIM(P_SOURCE) +ADD_U7(REP_VAR) +REP_VAR := ' ' +ADD_U7(REP_VAR) + +IF RPT_TYPE == 'PRICE' //PRICING REPORT + REP_VAR := ' Attributes' + ' B/A' + ' Options' + ; + SPACE(21) + '$/Unit ' + SPACE(6) + ' $/UI' + SPACE(5) + ; + ' $/SqFt' + SPACE(5) + ' Default Rule' + SPACE(5) + 'Print Options' + ADD_U7(REP_VAR) + REP_VAR := ' ----------' + ' ---' + ' -------' + ; + SPACE(21) + '------ ' + SPACE(6) + '------' + SPACE(5) + ; + '--------' + SPACE(5) + '------- ----' + SPACE(5) + '-------------' + +ELSE //PRODUCTION REPORT + + REP_VAR := ' Attributes' + ' B/A' + ' Options' + ; + SPACE(17) + 'Width Adj.' + SPACE(2) + 'Height Adj.' + SPACE(3) + ; + 'Default' + SPACE(3) + 'Rule' + SPACE(5) + 'Print Options' + ADD_U7(REP_VAR) + REP_VAR := ' ----------' + ' ---' + ' -------' + ; + SPACE(17) + '----------' + SPACE(2) + '-----------' + SPACE(3) + ; + '-------' + SPACE(3) + '----' + SPACE(5) + '-------------' +ENDIF +ADD_U7(REP_VAR) + +FOR I := 1 TO LEN(G_ARR) + IF EMPTY(G_ARR[I]) + ELSE + REP_VAR := SPACE(1) + BLD_OPT(G_ARR[I], REP_VAR, 'PO', RPT_TYPE) + ENDIF +NEXT + +BLD_LEGND('2') + +************************************************** +* BUILD THE USER NUMERIC INPUT FIELDS +************************************************** + +REP_VAR := REPLICATE('-', LEN(USERFILE7->DATA) ) +ADD_U7(REP_VAR) +REP_VAR := 'User Numeric Input Fields - Attributes are Defined at the ' +REP_VAR := REP_VAR + ALLTRIM(P_SOURCE) +ADD_U7(REP_VAR) +REP_VAR := SPACE(10) + 'User Input Attributes' +ADD_U7(REP_VAR) +REP_VAR := SPACE(10) + '---------------------' +ADD_U7(REP_VAR) + +FOR I := 1 TO LEN(G_ARR) + IF EMPTY( G_ARR[I] ) + ELSE + IF G_ARR[I, OPT_TYP] == 'U' + REP_VAR := SPACE(15) + G_ARR[I, ATRB] + ADD_U7(REP_VAR) + ENDIF + ENDIF +NEXT + + +************************************************** +* BUILD THE SYSTEM CALC FIELDS - MATHPACK +************************************************** +REP_VAR := REPLICATE('-', LEN(USERFILE7->DATA) ) +ADD_U7(REP_VAR) +REP_VAR := 'System Calc. Fields - These Apply to ALL UI Excess Attributes for entire CATEGORY - ' +REP_VAR := REP_VAR + SEEKCATDESC(PRODUCT->CAT_CODE) +ADD_U7(REP_VAR) +REP_VAR := SPACE(15) + 'Calc Attribute' + SPACE(4) + ' Field 1 ' + SPACE(6) + 'Oper' + SPACE(10) + ' Field 2 ' +ADD_U7(REP_VAR) +REP_VAR := SPACE(15) + '--------------' + SPACE(4) + '---------' + SPACE(6) + '----' + SPACE(10) + '---------' +ADD_U7(REP_VAR) + +FOR I := 1 TO LEN(G_ARR) + IF EMPTY( G_ARR[I] ) + ELSE + IF G_ARR[I, OPT_TYP] == 'C' + REP_VAR := SPACE(19) + G_ARR[I, ATRB] + MP_KEY := PRODUCT->CAT_CODE + G_ARR[I, ATRB] + MP_SK_BLK := {|| MATHPACK->CAT_CODE + MATHPACK->ATT_CODE} + MP_FOUND := MATHPACK->(DBSEEK (MP_KEY) ) + IF MP_FOUND + DO WHILE MP_KEY == EVAL(MP_SK_BLK) + REP_VAR := REP_VAR + SPACE(5) + MATHPACK->FIELD1 + SPACE(6) + MATHPACK->OPERATOR + SPACE(15) + MATHPACK->FIELD2 + ADD_U7(REP_VAR) + MATHPACK->(DBSKIP(1)) + REP_VAR := SPACE(29) + ENDDO + ELSE + REP_VAR := REP_VAR + 'NO Calc. Values FOUND' + ADD_U7(REP_VAR) + ENDIF + ENDIF + ENDIF +NEXT + + +IF RPT_TYPE == 'PRICE' //PRICING REPORT +************************************************** +* BUILD THE PRICING EXTRA FIELDS - PRI_EXTRAS +************************************************** + REP_VAR := REPLICATE('-', LEN(USERFILE7->DATA) ) + ADD_U7(REP_VAR) + REP_VAR := 'Pricing Extra Fields Defined for CATEGORY - ' + REP_VAR := REP_VAR + SEEKCATDESC(PRODUCT->CAT_CODE) + ADD_U7(REP_VAR) + REP_VAR := SPACE(5) + ' Extra Option ' + SPACE(5) + ' Rule ' + REP_VAR := REP_VAR + SPACE(5) + 'Price Sheet' + REP_VAR := REP_VAR + SPACE(5) + 'True Value' + SPACE(5) + 'False Value' + REP_VAR := REP_VAR + SPACE(5) + ' $ / Unit ' + SPACE(5) + ' $ / UI ' + REP_VAR := REP_VAR + SPACE(5) + ' $ / SqFt ' + ADD_U7(REP_VAR) + REP_VAR := SPACE(5) + '---------------- ' + SPACE(5) + ' ---- ' + REP_VAR := REP_VAR + SPACE(5) + '-----------' + REP_VAR := REP_VAR + SPACE(5) + '----------' + SPACE(5) + '-----------' + REP_VAR := REP_VAR + SPACE(5) + ' -------- ' + SPACE(5) + ' ------- ' + REP_VAR := REP_VAR + SPACE(5) + ' -------- ' + ADD_U7(REP_VAR) + + + PE_KEY := PRODUCT->CAT_CODE + PE_SK_BLK := {|| PRI_EXTRAS->CAT_CODE } + PE_FOUND := PRI_EXTRAS->(DBSEEK (PE_KEY) ) + IF PE_FOUND + DO WHILE PE_KEY == EVAL(PE_SK_BLK) + REP_VAR := STR(PRI_EXTRAS->SEQ_NUM,2) + '. '+ PRI_EXTRAS->OPTION + SPACE(5) + REP_VAR := REP_VAR + PRI_EXTRAS->RULE_PACK + SPACE(5) + REP_VAR := REP_VAR + PRI_EXTRAS->PRICE_SHT + SPACE(7) + REP_VAR := REP_VAR + PRI_EXTRAS->TRUE_VAL + SPACE(5) + REP_VAR := REP_VAR + PRI_EXTRAS->FALSE_VAL + SPACE(6) + REP_VAR := REP_VAR + TRANSFORM(PRI_EXTRAS->UNIT_SALE, '99,999.99') + SPACE(6) + //** P3N - 6/9/98 UPDATED TO ALLOW UI/SQFT PRICING @ .01 CENT + REP_VAR := REP_VAR + TRANSFORM(PRI_EXTRAS->UI_SALE, '99,999.9999') + SPACE(4) + REP_VAR := REP_VAR + TRANSFORM(PRI_EXTRAS->SQFT_SALE, '99,999.9999') +******REP_VAR := REP_VAR + TRANSFORM(PRI_EXTRAS->UI_SALE, '99,999.99') + SPACE(6) +******REP_VAR := REP_VAR + TRANSFORM(PRI_EXTRAS->SQFT_SALE, '99,999.99') + ADD_U7(REP_VAR) + + SEEKKEY := PRI_EXTRAS->CAT_CODE + PRI_EXTRAS->OPTION + CUST_PE->(DBSEEK(SEEKKEY) ) + DO WHILE CUST_PE->CAT_CODE + CUST_PE->OPTION == SEEKKEY .AND. !EOF() + IF EMPTY(PR_CUSTID) .OR. CUST_PE->CUST_ID == PR_CUSTID + REP_VAR := SPACE(41) + '* ' + CUST_PE->CUST_ID + ' *' + ADD_U7(REP_VAR) + ENDIF + CUST_PE->(DBSKIP(1)) + ENDDO + PRI_EXTRAS->(DBSKIP(1)) + ENDDO + ELSE + REP_VAR := 'NO Pricing Extras FOUND' + ADD_U7(REP_VAR) + ENDIF + +ENDIF + + +************************************************** +* BUILD THE CUTTING SPEC ARRAY AND PRINT IT +************************************************** +IF LEVEL == 'MODEL' //MODEL CUTTING REPT + REP_VAR := REPLICATE('-', LEN(USERFILE7->DATA) ) + ADD_U7(REP_VAR) + REP_VAR = 'Cutting Specifications' + ADD_U7(REP_VAR) + + REP_VAR = 'ATTRIBUTE DESC' + SPACE(22) + 'CODE PROFILE SEQ# QTY RULE PRINT ON' + REP_VAR = REP_VAR + ' Field 1 ' + SPACE(2) + 'Oper' + SPACE(1) + 'Field 2' + ADD_U7(REP_VAR) + REP_VAR = '---------- ------------------------- ------ ------- ---- --- ------- --------' + REP_VAR = REP_VAR + ' ---------' + SPACE(1) + '----' + SPACE(1) + '---------' + ADD_U7(REP_VAR) + + CUT_SPEC_ARR := GET_CUT_SPEC( PKEY ) + FOR L = 1 TO LEN(CUT_SPEC_ARR) + REP_VAR = CUT_SPEC_ARR[L,1] + ' ' // ATT_CODE + REP_VAR = REP_VAR + CUT_SPEC_ARR[L,10] + ' ' // DESC + REP_VAR = REP_VAR + CUT_SPEC_ARR[L,4] + ' ' // PRNT CODE + REP_VAR = REP_VAR + CUT_SPEC_ARR[L,5] + ' ' // PROFILE + REP_VAR = REP_VAR + STR(CUT_SPEC_ARR[L,2],4) + ' ' // SEQ # + REP_VAR = REP_VAR + STR(CUT_SPEC_ARR[L,3],3) + ' ' // QTY + REP_VAR = REP_VAR + CUT_SPEC_ARR[L,8] + ' ' // RULE + REP_VAR = REP_VAR + CUT_SPEC_ARR[L,9] + ' ' // PRINT ON + + MP_ARR := {} + SEEKKEY = PRODUCT->PROD_CODE + CUT_SPEC_ARR[L,1] // MATH PACK + SELECT MATHPACK + SEEK SEEKKEY + DO WHILE SEEKKEY == CAT_CODE + ATT_CODE + IF TYPE = 'C' // CUTTING SPEC MATH PATH + AADD(MP_ARR, FIELD1 + SPACE(2) + OPERATOR + SPACE(2) + FIELD2) + ENDIF + SKIP 1 + ENDDO + IF !EMPTY(MP_ARR) + FOR L2 = 1 TO LEN(MP_ARR) + IF L2 = 1 // IF IT'S THE FIRST LINE + REP_VAR = REP_VAR + SPACE(1) + MP_ARR[L2] + ELSE + REP_VAR = SPACE(78) + MP_ARR[L2] + ENDIF + ADD_U7(REP_VAR) + NEXT + ELSE + ADD_U7(REP_VAR) + ENDIF + NEXT + +ENDIF + +REP_VAR := REPLICATE('-', LEN(USERFILE7->DATA) ) +ADD_U7(REP_VAR) +RETURN P_SOURCE + +************************************************** +* BUILD THE BASE PRICING REPORT INFO +************************************************** + +PROCEDURE BLD_BASE(G_ARR, P_ARR, ROW_CNT, COL_CNT) +LOCAL REP_VAR := ' ', I + +IF P_ARR[ROW_COL] == 'R' .AND. ROW_CNT < 1 + ROW_CNT ++ + REP_VAR := SPACE(2) + 'ROWS ' +ELSEIF P_ARR[ROW_COL] == 'C' .AND. COL_CNT < 1 + COL_CNT ++ + REP_VAR := SPACE(2) + 'COLUMNS ' +ELSE + REP_VAR := SPACE(10) +ENDIF + +BLD_OPT(G_ARR, REP_VAR, 'BP') + +RETURN {ROW_CNT, COL_CNT} + + +************************************************** +* FIND ALL OPTIONS IN THE OPT_ARR - G_ARR[3] +************************************************** +PROCEDURE BLD_OPT ( G_ARR, REP_VAR, TYP, RPT_TYPE ) +*-LOCAL I, OPT_SOURCE +LOCAL I, OPT_SOURCE, MSEQUENCE +IF EMPTY( G_ARR[OPT_ARR] ) .OR. G_ARR[OPT_TYP]$'CU' +ELSE + + // MSL +*-REP_VAR := REP_VAR + SPACE(9) + G_ARR[ATRB] + + + + //// MIKE LEWIS CHANGE 2/21/94 + // MOVED THE FOLLOWING TO END OF ATTRIBUTE + + IF SUBS(G_ARR[OPT_SRC], 1, 3) == 'PRO' + OPT_SOURCE := '(M) ' + ELSEIF SUBS(G_ARR[OPT_SRC], 1, 3) == 'CAT' + OPT_SOURCE := '(C) ' + ELSEIF SUBS(G_ARR[OPT_SRC], 1, 3) == 'CUS' + OPT_SOURCE := '(U) ' + ELSE + OPT_SOURCE := '(S) ' + ENDIF + + IF TYP == 'BP' + REP_VAR := REP_VAR + SPACE(5) + OPT_SOURCE + G_ARR[ATRB] + ELSEIF TYP == 'PO' + REP_VAR := REP_VAR + OPT_SOURCE + G_ARR[ATRB] + ' (' + G_ARR[BAFLAG] + ')' + ENDIF + + + FOR I := 1 TO LEN(G_ARR[OPT_ARR]) + //// MIKE LEWIS CHANGE 2/21/94 + // PUTTING THE SEQUENCE NUMBER OF OPTION WHERE THE SOURCE WAS! + MSEQUENCE = STR(G_ARR[OPT_ARR,I,5],2) + '. ' // SEQUENCE OF OPTIONS + IF TYP == 'BP' // BASE PRICE + REP_VAR := REP_VAR + SPACE(5) + MSEQUENCE + G_ARR[OPT_ARR, I, OPT_DESC] + REP_VAR := REP_VAR + SPACE(4) + G_ARR[OPT_ARR, I, OPT_DEF] + REP_VAR := REP_VAR + SPACE(5) + G_ARR[OPT_ARR, I, OPT_RULE] + ADD_U7(REP_VAR) + REP_VAR := SPACE(29) + ELSEIF TYP == 'PO' // PRICING OPTIONS + REP_VAR := REP_VAR + SPACE(3) + MSEQUENCE + G_ARR[OPT_ARR, I, OPT_DESC] + + IF RPT_TYPE == 'PRICE' //PRICING REPORT + REP_VAR := REP_VAR + SPACE(3) + TRANSFORM(G_ARR[OPT_ARR, I, OPT_AMTS, OA_PRICE], '9,999.99') + REP_VAR := REP_VAR + SPACE(3) + TRANSFORM(G_ARR[OPT_ARR, I, OPT_AMTS, OA_UI], '9,999.9999') + REP_VAR := REP_VAR + SPACE(3) + TRANSFORM(G_ARR[OPT_ARR, I, OPT_AMTS, OA_SQFT], '9,999.9999') + ELSE //PRODUCT REPORT + REP_VAR := REP_VAR + SPACE(3) + TRANSFORM(G_ARR[OPT_ARR, I, OPT_WADJ], '999.9999') + REP_VAR := REP_VAR + SPACE(3) + TRANSFORM(G_ARR[OPT_ARR, I, OPT_HADJ], '999.9999') + ENDIF + + REP_VAR := REP_VAR + SPACE(8) + G_ARR[OPT_ARR, I, OPT_DEF] + REP_VAR := REP_VAR + SPACE(6) + G_ARR[OPT_ARR, I, OPT_RULE] + IF EMPTY( G_ARR[OPT_ARR, I, OPT_PIND] ) + ELSE + REP_VAR := REP_VAR + SPACE(3) + '(' + G_ARR[OPT_ARR, I, OPT_PIND] + ')' + REP_VAR := REP_VAR + SPACE(1) + G_ARR[OPT_ARR, I, OPT_PVAL] + ENDIF + ADD_U7(REP_VAR) + REP_VAR := SPACE(20) + ENDIF + + NEXT + ADD_U7(REP_VAR) +ENDIF +RETURN +************************************************** +* CREATE THE LEGEND FOR THE REPORTS +************************************************** +PROCEDURE BLD_LEGND(OPT) +LOCAL REP_VAR +IF OPT == '1' + REP_VAR := SPACE(15) + '(S) - SYSTEM Option ' +ELSE + REP_VAR := SPACE(1) + '(S) - SYSTEM Option ' + SPACE(76) + '(A) - ALWAYS Print' +ENDIF +ADD_U7(REP_VAR) + +IF OPT == '1' + REP_VAR := SPACE(15) + '(C) - CATEGORY Option ' +ELSE + REP_VAR := SPACE(1) + '(C) - CATEGORY Option ' + SPACE(76) + '(N) - NEVER Print' +ENDIF +ADD_U7(REP_VAR) + +IF OPT == '1' + REP_VAR := SPACE(15) + '(M) - MODEL Option ' +ELSE + REP_VAR := SPACE(1) + '(M) - MODEL Option ' + SPACE(76) + '(D) - Print If DEFAULT' +ENDIF +ADD_U7(REP_VAR) + +IF OPT == '1' + REP_VAR := SPACE(15) + '(U) - USER DEFINED Special Pricing Option' +ELSE + REP_VAR := SPACE(1) + '(U) - USER DEFINED Special Pricing Option ' + SPACE(56) + '(E) - Print If NOT DEFAULT' +ENDIF +ADD_U7(REP_VAR) + +* IF OPT == '1' +* ELSE +* REP_VAR := SPACE(99) + '(E) - Print If NOT Default' +* ADD_U7(REP_VAR) +* ENDIF +RETURN +************************************************** +* ADD THE INFORMATION INTO THE USER FILE +************************************************** +PROCEDURE ADD_U7(REP_VAR) +LOCAL SAVESEL := SELECT() +SELECT USERFILE7 +ADD_REC(5) +REPLACE DATA WITH REP_VAR +SELECT(SAVESEL) +RETURN +************************************************** +* DEFINE THE PRICING REPORT USERFILE LAYOUT AND HEADINGS FOR RPRIN-REPORT GENERATOR +************************************************** +FUNCTION FLD_PRICERPT(RPT_TYPE, LEVEL) +//* FUNCTION FLD_PRICERPT(ATRB_SOURCE) +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 +LOCAL HEAD1, HEAD2, HEAD3, HEAD4, HEAD5 +LOCAL DBF_FLD_INFO := {} + +WAIT_BOX(' *** Retreiving Model Definitions *** ',; + ' *** PLEASE WAIT ***') + +// THIS IS REALLY A BLD_PROC PARAMETER ?? +ATRB_SOURCE := BLD_PRICERPT('USERFILE7', PRODUCT->PROD_CODE, RPT_TYPE, LEVEL) + +FIELDNAME := 'DATA' +HEAD1 := [ 'Category - ' + ALLTRIM(PRODUCT->CAT_CODE) + ' / ' + SEEKCATDESC(PRODUCT->CAT_CODE) ] +HEAD2 := [ 'Model - ' + ALLTRIM(PRODUCT->PROD_CODE) + ' / ' + ALLTRIM(PRODUCT->DESC) ] +HEAD3 := 'Attributes are Defined at the ' + ATRB_SOURCE +IF LEVEL = 'CUST' + HEAD4 := 'Customer - ' + ALLTRIM(CUST_MAST->COMP_NAME) + ' Phone - ' + CUST_MAST->PHONE + ' Fax - ' + CUST_MAST->FAX +ELSE + HEAD4 := ' ' +ENDIF +IF LEVEL = 'CUST' + HEAD5 := ' ' + ALLTRIM(CUST_MAST->CUST_CITY) + ' ' + ALLTRIM(CUST_MAST->CUST_STATE) + ' ' + CUST_MAST->CUST_ZIP +ELSE + HEAD5 := ' ' +ENDIF +COLHEAD := {&HEAD1, &HEAD2, HEAD3, HEAD4, HEAD5} +TOTALFLD := .F. +DISPLEN := 130 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +RETURN FIELDARR + +************************************************** +* DEFINE THE PRODUCT PRICING REPORT USERFILE LAYOUT +* AND HEADINGS FOR RPRIN-REPORT GENERATOR +************************************************** +FUNCTION BASEPRICE() +//* FUNCTION FLD_PRICERPT(ATRB_SOURCE) +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 +LOCAL HEAD1, HEAD2, HEAD3 +LOCAL DBF_FLD_INFO := {} + +WAIT_BOX(' *** Retreiving Model Definitions *** ',; + ' *** PLEASE WAIT ***') + + +FIELDNAME := 'DATA' +HEAD1 := [ 'Category - "' + ALLTRIM(PRODUCT->CAT_CODE) + '" / ' + SEEKCATDESC(PRODUCT->CAT_CODE) ] +HEAD2 := ' ' +COLHEAD := {&HEAD1, HEAD2} +TOTALFLD := .F. +DISPLEN := 131 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +RETURN FIELDARR + + + +*********************************** +FUNCTION BLD_RULERPT +// BUILD REPORT FOR RULE VERIFICATION AND ASSIGNMENT + +LOCAL FIELDARR := {} +LOCAL FIELDNAME, COLHEAD, TOTALFLD, DISPLEN, DISPDEC := 0 +LOCAL HEAD1, HEAD2, HEAD3 +LOCAL DBF_FLD_INFO := {} +LOCAL FLD_ARR := {}, MSG + +WAIT_BOX(' *** Verifying Rule Definitions *** ',; + ' *** PLEASE WAIT ***') + +FIELDNAME := 'DATA' +HEAD1 := 'RULE VERIFICATION' +HEAD2 := '' +HEAD3 := '' +COLHEAD := {HEAD1, HEAD2, HEAD3} +TOTALFLD := .F. +DISPLEN := 120 +AADD(FIELDARR, {FIELDNAME, COLHEAD, TOTALFLD, DISPLEN} ) + +//* +//* OPEN ALL DBFS TO BE USED TO BUILD THE REPORT +//* +DBOPEN('RULES') +DBOPEN('RULEPACK') +DBOPEN('PROD_ATTS',,,{2}) +DBOPEN('PROD_OPTS',,,{3}) +DBOPEN('CAT_ATTS',,,{2}) +DBOPEN('CAT_OPTS',,,{3}) +DBOPEN('ATT_OPTS',,,{3}) +DBOPEN('PRI_EXTRAS',,,{2}) +DBOPEN("PRODUCT",,, {1}) // OPEN PRODUCT FILE FO SINGLE INDEX +DBOPEN("CATEGORY",,, {1}) // OPEN CATEGORY FILE FO SINGLE INDEX +DBOPEN("STD_SIZES",,, {1}) + + +// RESET THE UPDATED FLAGS IN BOTH RULE FILES +SELECT RULES +FIL_LOCK(1) +REPLACE ALL UPDATED WITH ' ' +UNLOCK + +SELECT RULEPACK +FIL_LOCK(1) +REPLACE ALL UPDATED WITH ' ' +UNLOCK + + +// CHECK THE PRODUCT FILE +AADD(FLD_ARR, {'Stock Product ', 'PROD_CODE'}) +VERIFY_RULE('PRODUCT', FLD_ARR) //** PERRY 2-17-98 +** VERIFY_RULE('PRI_EXTRAS', FLD_ARR) + +// CHECK THE PRICING EXTRA FILE +FLD_ARR := {} //** PERRY 2-17-98 +AADD(FLD_ARR, {'Category ', 'CAT_CODE'}) +AADD(FLD_ARR, {'Option ', 'OPTION'}) +VERIFY_RULE('PRI_EXTRAS', FLD_ARR) + +// CHECK THE PRODUCT ATTRIBUTES +FLD_ARR := {} +AADD(FLD_ARR, {'Model', 'PROD_CODE'}) +AADD(FLD_ARR, {'Attribute', 'ATT_CODE'}) +VERIFY_RULE('PROD_ATTS', FLD_ARR) + + +// CHECK THE CATEGORY ATTRIBUTES +FLD_ARR := {} +AADD(FLD_ARR, {'Category ', 'CAT_CODE'}) +AADD(FLD_ARR, {'Attribute', 'ATT_CODE'}) +VERIFY_RULE('CAT_ATTS', FLD_ARR) + + +// CHECK THE ATTRIBUTE OPTIONS +FLD_ARR := {} +AADD(FLD_ARR, {'Attribute ', 'ATT_CODE'}) +AADD(FLD_ARR, {'Option ', 'OPT_VALUE'}) +VERIFY_RULE('ATT_OPTS', FLD_ARR) + + +// CHECK THE PRODUCT OPTIONS +FLD_ARR := {} +AADD(FLD_ARR, {'Model ', 'PROD_CODE'}) +AADD(FLD_ARR, {'Attribute ', 'ATT_CODE'}) +AADD(FLD_ARR, {'Option ', 'OPT_VALUE'}) +VERIFY_RULE('PROD_OPTS', FLD_ARR) + + +// CHECK THE CATEGORY OPTIONS +FLD_ARR := {} +AADD(FLD_ARR, {'Category ', 'CAT_CODE'}) +AADD(FLD_ARR, {'Attribute ', 'ATT_CODE'}) +AADD(FLD_ARR, {'Option ', 'OPT_VALUE'}) +VERIFY_RULE('CAT_OPTS', FLD_ARR) + +// SEE IF ALL RULES ARE BEING USED +SELECT RULES +GOTO TOP +DO WHILE !EOF() + IF UPDATED <> 'Y' + MSG = 'Rule ' + ALLTRIM(RULE_CODE) + ' in the Rule File is not assigned' + ADD_U7(MSG) + ENDIF + SKIP 1 +ENDDO + +// SEE IF ALL RULES HAVE A RULEPACK +SELECT RULEPACK +GOTO TOP +DO WHILE !EOF() + IF UPDATED <> 'Y' + MSG = 'Rule ' + ALLTRIM(RULE_CODE) + ' in the Rule PACK File is not assigned' + ADD_U7(MSG) + ENDIF + SKIP 1 +ENDDO + + +RETURN FIELDARR + +************************************************ +FUNCTION VERIFY_RULE(MFILE, FLD_ARR, FLD2CHECK) +// CHECK RULES FOR FOR MFILE + +LOCAL MRULE_PACK + +IF FLD2CHECK = NIL + FLD2CHECK := 'RULE_PACK' +ENDIF + +SELECT &MFILE +DO WHILE !EOF() + IF !EMPTY(&FLD2CHECK) + MRULE_PACK = &FLD2CHECK + SELECT RULES + SEEK MRULE_PACK + IF !FOUND() + REPORT_IT(MFILE, 'RULES', FLD_ARR, FLD2CHECK) + ELSE + REC_LOCK(1) + REPLACE UPDATED WITH 'Y' + UNLOCK + + SELECT RULEPACK + SEEK MRULE_PACK + IF !FOUND() + REPORT_IT(MFILE, 'RULEPACK', FLD_ARR, FLD2CHECK) + ELSE + DO WHILE RULE_CODE == MRULE_PACK .AND. !EOF() + REC_LOCK(1) + REPLACE UPDATED WITH 'Y' + UNLOCK + SKIP 1 + ENDDO + ENDIF + ENDIF + ENDIF + SELECT &MFILE + SKIP 1 +ENDDO +RETURN + + +************************************************ +FUNCTION REPORT_IT(MFILE1, MFILE2, FLD_ARR, FLD2CHECK) +// ADD A RECORD TO THE REPORT FILE + +LOCAL SAVESEL := SELECT(), REPTLINE, MSG:= ' ', MFIELD + +SELECT USERFILE7 +ADD_REC(1) + +FOR L = 1 TO LEN(FLD_ARR) + MFIELD = FLD_ARR[L,2] + MSG = MSG + FLD_ARR[L,1] + ALLTRIM(&MFILE1->&MFIELD) + ', ' +NEXT + +**REPTLINE = 'Rule ' + ALLTRIM(&MFILE1->RULE_PACK) + ',' + MSG +REPTLINE = 'Rule ' + ALLTRIM(&MFILE1->&FLD2CHECK) + ',' + MSG +REPTLINE = REPTLINE + ' in the ' + MFILE1 + " wasn't Found in the " + MFILE2 + ' File' + +REPLACE DATA WITH REPTLINE +SELECT(SAVESEL) +RETURN + +********************************************************** +FUNCTION YEAR_END +// RETURN TOTAL OF ALL THE MONTHLY BUCKETS FOR 'MONTHLY PRODUCTION REPORT' + +LOCAL RETVAL + +RETVAL = USERFILE7->JAN + USERFILE7->FEB + USERFILE7->MAR + USERFILE7->APR +RETVAL = RETVAL + USERFILE7->MAY + USERFILE7->JUN + USERFILE7->JUL + USERFILE7->AUG +RETVAL = RETVAL + USERFILE7->SEP + USERFILE7->OCT + USERFILE7->NOV + USERFILE7->DEC + +RETURN RETVAL + \ No newline at end of file diff --git a/CGW0400.PRG b/CGW0400.PRG new file mode 100644 index 0000000..b565e12 --- /dev/null +++ b/CGW0400.PRG @@ -0,0 +1,210 @@ +* DON LOWENSTEIN -BUILD LABEL FILE ARRAY- CGW0400 9-5-95 + +PROCEDURE BUILDLBL(CALLPARM) + +LOCAL CONVKEYX, FILEPARMS, LGET_KEY, FLD_INFO:={}, SAVESEL := SELECT() +LOCAL WORKVAR, SAVESCR, MARR, NEW_OLD, ONE_MANY, PRES_TREAS + + +PRIVATE PRNTARR := {}, PARENTFILE, CHILDFILE, MDESC, CUTOFF, PIC, FILEFILTER +PRIVATE PRNTNAME, KEYVAR, RANGETYPE, NDXEXP, RANGEARR := {}, LVLBRK, SORTARR := {} +PRIVATE PARENTFILTER := NIL, REPTHEAD, DEFINEPROC:= NIL +**PRIVATE DET_SUMM := .F., DET_LINE_EXTRA := {}, FOOTERLINES := {} +PRIVATE _TOFILE := .F., DET_LINE_EXTRA := {}, FOOTERLINES := {} +PRIVATE LBRK_FOOTER := {} +PRIVATE REPTONLY := .F., BLD_PROC // 13-15 +PRIVATE DBF_FLD_INFO := {} +PRIVATE LABELFILE := NIL +PRIVATE OUTPORT := NIL +PRIVATE NUMLBLS := 1 +PRIVATE NUMBATCH := 1 +PRIVATE MGET_KEY +PUBLIC LBL_DATA := CALLPARM + +CALLPARM = UPPER(ALLTRIM(CALLPARM)) + +DO CASE + +******************************************************************* + + CASE CALLPARM = 'CUSTOMER' + // + + PRNTNAME = 'CUSTOMER LABELS' + IF CALLPARM = 'CUSTOMER-MANY' + PARENTFILE = 'CUST_MAST' + ELSE + FILEPARMS := DBOPEN('CUST_MAST') + CLS + SAYTITLE(PRNTNAME, 'LABEL') + LGET_KEY := GET_KEY(FILEPARMS) + IF LASTKEY() = 27 .OR. EMPTY(LGET_KEY) + RETURN NIL + ENDIF + IF SELECT('USERFILEX') > 0 + CLOSE USERFILEX + ENDIF + COPY NEXT 1 TO &USERFILEX + PARENTFILE := 'USERFILEX' + ENDIF + IF CALLPARM == "CUSTOMER-MANY-SHIP" .OR. ; + CALLPARM == "CUSTOMER-ONE-SHIP" + DEFINEPROC := {|| SHP_CUSTLBL() } + ELSE + DEFINEPROC := {|| BLD_CUSTLBL() } + ENDIF + LABELFILE := WHICH_LABEL() + IF LABELFILE = NIL + RETURN NIL + ENDIF + + + IF CALLPARM = 'CUSTOMER-MANY' + + MDESC = 'Cust#' + PIC = '' + KEYVAR = 'CUST_ID' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = 1 + NDXEXP = 'CUST_ID' + LVLBRK = {} + AADD(SORTARR, {'Cust#', KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + MDESC = 'Name' + PIC = '' + KEYVAR = 'COMP_NAME' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = 2 + NDXEXP = 'COMP_NAME' + LVLBRK = {} + AADD(SORTARR, {'Name', KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + + MDESC = 'ZIP Code' + PIC = '' + KEYVAR = 'CUST_ZIP' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = NIL + NDXEXP = 'CUST_ZIP+COMP_NAME' + LVLBRK = {} + AADD(SORTARR, {'ZIP Code', KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + MDESC = 'State' + PIC = '!!' + KEYVAR = 'CUST_STATE' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = NIL + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + MDESC = 'Salesman' + PIC = '' + KEYVAR = 'SLSMAN' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = NIL + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + MDESC = 'Terms Code' + PIC = '' + KEYVAR = 'TERMS' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = NIL + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + MDESC = 'Delivery Route' + PIC = '' + KEYVAR = 'DEL_ROUTE' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = NIL + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + MDESC = 'Price Sheet' + PIC = '' + KEYVAR = 'PRICE_SHT' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = NIL + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + MDESC = 'Tax Schedule' + PIC = '' + KEYVAR = 'TAXSCH' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = NIL + AADD(RANGEARR, {MDESC, KEYVAR, PIC, RANGETYPE, CUTOFF}) + + ELSE + + MDESC = 'One LABEL for Customer - ' + CUST_MAST->CUST_ID + PIC = '' + KEYVAR = 'CUST_ID' + RANGETYPE = 'R' + CUTOFF = .F. + SYSNTX = NIL + NDXEXP = 'CUST_ID' + LVLBRK = {} + AADD(SORTARR, {MDESC, KEYVAR, NDXEXP, SYSNTX, LVLBRK}) + + ENDIF + + PRNTARR := LOAD_LBLARR() + +************************************************************************ + + + OTHERWISE + PRNTARR := NIL +ENDCASE + +RETURN PRNTARR + +********************************************************** + +FUNCTION WHICH_LABEL() + +// GET WHICH LABELS +LOCAL SAVESCR := SAVESCREEN() +LOCAL MARR := {}, WORKVAR, LABELFILE + +@ 02,0 CLEAR +AADD(MARR,'Standard labels, 3 across, 5 Lines ( 15/16")') +AADD(MARR,'Laser labels, 3 across, 5 Lines') +AADD(MARR,'Standard labels, 1 across, 8 Lines (1 7/16")') +AADD(MARR,'Standard labels, 1 across, 5 Lines ( 15/16") ') +// +WORKVAR = PICKLIST(MARR,10,, 'Which Labels?') +IF LASTKEY() = 27 + RETURN NIL +ENDIF + +IF WORKVAR = 1 + LABELFILE = 'LBL3X1' // { 'LBL3X1', LBL_SIZE } // LBL_TYPE 9 IS A MESSAGE '1 ACROSS, 2 X 3 +ELSE + IF WORKVAR = 2 + LABELFILE = 'CGWLBL7' // laser labels + ELSE // 8 lines + IF WORKVAR = 3 + LABELFILE = 'CGWLBL9' // 5 lines - BIG + ELSE + IF WORKVAR = 4 + LABELFILE = 'CGWLBL2' // 5 lines - LITTLE + ELSE + LABELFILE := NIL + ENDIF + ENDIF + ENDIF +ENDIF +RESTSCREEN(,,,,SAVESCR) +RETURN LABELFILE + + \ No newline at end of file diff --git a/CGW0450.PRG b/CGW0450.PRG new file mode 100644 index 0000000..bb54293 --- /dev/null +++ b/CGW0450.PRG @@ -0,0 +1,50 @@ +// ufd0450 - don and mike - 03-02-95 LABEL LINE DEFINITIONS +************************************************* + +********************************************************* +* Customer Mailing lables - Cusomter BILLING address. * +********************************************************* +FUNCTION BLD_CUSTLBL() + +LOCAL LBL_LINEARR := {} +LOCAL EVALLINE + +EVALLINE := 'COMP_NAME' +AADD(LBL_LINEARR, EVALLINE) + +EVALLINE := 'CUST_ADDR' +AADD(LBL_LINEARR, EVALLINE) + +EVALLINE := 'CUST_ADDR2' +AADD(LBL_LINEARR, EVALLINE) + +EVALLINE := 'TRIM(CUST_CITY)+" "+ CUST_STATE +" " + CUST_ZIP' +AADD(LBL_LINEARR, EVALLINE) + +RETURN LBL_LINEARR + + +********************************************************** +* Customer Mailing lables - Cusomter SHIPPING address. * +********************************************************** +FUNCTION SHP_CUSTLBL() + +LOCAL LBL_LINEARR := {} +LOCAL EVALLINE + +EVALLINE := 'COMP_NAME' +AADD(LBL_LINEARR, EVALLINE) + +EVALLINE := 'SHIPADD1' +AADD(LBL_LINEARR, EVALLINE) + +**EVALLINE := 'SHIPADD2' +**AADD(LBL_LINEARR, EVALLINE) + +EVALLINE := 'TRIM(SHIPADD2)+" "+ SHIPST +" " + SHIPZIP' +AADD(LBL_LINEARR, EVALLINE) + +RETURN LBL_LINEARR + + + \ No newline at end of file diff --git a/CGW0AC.NTX b/CGW0AC.NTX new file mode 100644 index 0000000000000000000000000000000000000000..54c7ab13ad40f15583536c5742b3d110ba7613c0 GIT binary patch literal 4096 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 E0rf!$=l}o! literal 0 HcmV?d00001 diff --git a/CGW0AR.NTX b/CGW0AR.NTX new file mode 100644 index 0000000000000000000000000000000000000000..f6c8f6c65529b7c2f16f6a599d2ff50208577ab0 GIT binary patch literal 2048 zcmeH{uP?-L9LAp?*iH}#0^tHdI2+-F3(mM92+V{N1cE>i2m(QHK_CbOfglhBHUb-g zjlgyS8^LV^fpFmj!M^+l>V2N@-m`anJPvLB>)hyOx4Oe=_j|~r np76Biyy%?Qyy+e9`^aa$@|_=Da1>3nR`JLL1pgdm literal 0 HcmV?d00001 diff --git a/CGW0AT.NTX b/CGW0AT.NTX new file mode 100644 index 0000000000000000000000000000000000000000..682ea3d5aeacc26e76a7e76e347367c5dab2c2a0 GIT binary patch literal 5120 zcmeI!$)D6j6bJB18gXG<5pjh=P+4qd22dGst4^xBYq~lKsmgTsxB%{gySNM7^r}a_ z>QS$H)TQ%2^_2&D%N_yHq0Pypf$>%f6`+h1(rRvqI+AJa=ZV-HJ6T3~=c3P}ucPmypQGQSzoIza7VnLZ#aVnRJ{x})e-(ch{}lfg{~7-i&$V{84z+Y^ z+&a@b-}<8UP3wo&FD(r11N2jjeW~QIvUU&XN&0bJnU}IJT~dNjdtBFK#`Ps#pr@Fu z^3oY=9q4wZQYN{jnz+V z<$X@K1-c%T7xWyfv!17jOK6~xNqrxL{<Gy{7jS=;+dtTrt_iN{WO5sdQNmil!4iP)9i}hqP_*bev`? zWzQ<=7AL^YK#2S4NKzyQOqH=|yQsov&w&z|DCemk+|}2aOqp0s-(FB89%Qn{lhC|@ zwu4gY_%OHaM1pReCC`LkXk~gC8d4+_NM~xODSP_(7I6jBxKLTD>y*0^)RlGONQ%T6 zrjmP5&*LqDG^X4630hqM(J-v)v>7k(<-0D$`aeORSM^Gh(kiHj<|L@ERZ6)^1B>s! zucnoWOl;0`{Sgx~5GlYDi-J;dQqn>Qr;@jra*H&rAHNqw={%x)YkD8FtcIO1Llg-l zPc=wrZg^FJPBH0;v{-5qgtVwAz4<&8Xj34??+f%a$f^#d4K9krwShd%evyaOc-I;^ z9dhtqCR+Sq(NZLyWink_+$cjJteI+>;Y<%Paf{TfFns_T(u1iijl&x^GnpnYDH6{y z<&{mbrX*-T6BTECcj*0rDdpX682jg^RFrMQRpQ7DnS^I(Hz>=8CR0{A6dUm|lWSuV zhZ)z)>zJw`ZwcXz3k}h%(dwW`V2TG6GVQ4DWSn2L;A+5P^Fh9>*f+)yuzgG)xz`!6D^c*Q6zRSRdgWes4`?~7j)cD zWT(_>ASn_zfl9?y)*7Dvb0DYa#y&Pjip2SbM(sm2Eiol!CX2F8-n$!`cRnwXSmFgH zI)AK{su!m;U7%Mn(d%(+2yc98jnIrDv6ZRNiR8QlZJW~c;P5gN?fNBXPW;e3WOFx87F*c|LGz-g4%d=ute4k|I$u;c&z?6!cg_^V5EP5~v(> zsVan#I0PC`OEg8|FcZ$bT+u+tg8$X}k1zK6-z3DV_-M}Mu+C_$V3juGFyC=vj^d4L MV+1xv;1Z9(zpf1YV*mgE literal 0 HcmV?d00001 diff --git a/CGW0BP.NTX b/CGW0BP.NTX new file mode 100644 index 0000000000000000000000000000000000000000..385d1a5358192c2c8522635304bd3ed6747d92ac GIT binary patch literal 2048 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 Rg}O4_`fQEB)(F4|JOS8Y0gnIx literal 0 HcmV?d00001 diff --git a/CGW0CB.NTX b/CGW0CB.NTX new file mode 100644 index 0000000000000000000000000000000000000000..4affd74e7ada20a08e2d2e02fde1ced334badbe0 GIT binary patch literal 2048 zcmZQ$U}RumVE_Yh27Vx|#vsfP5ajO?@9gj5s-Ugl92y)F@96?jGD?n^5C}0EFuA_>Pg4NruUo$%`qG zse-AWX&KXArYlUZnV6U*nGKlTnd6vCnR}QQGw)&s1tqXVVQ}_$3UX9XFf_I_H#0Rb Q7{MVt>h;kO7`!0>0O|@HeE68?-K9q@8YVU9UKy*5$qZm?-%N; zW26buGD;5H5C}0Gwq6_c7*YuMFr+fnF-&LJz;Ke`5yNi=5k_4`H^z9z3dV_ys~8V6 z-eLU8$j7A412|OdQOL%vQ|7%sI@h%=4JHGhbjvGIW$V8Umvs IFa$yX0Ht>wpa1{> literal 0 HcmV?d00001 diff --git a/CGW0CM.NTX b/CGW0CM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..210d141318241f4c6945eb3b54d7997d9aac39eb GIT binary patch literal 13312 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 R$bqqy|33dkV5W({{{SD=GZg>; literal 0 HcmV?d00001 diff --git a/CGW0CO.NTX b/CGW0CO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..017c10191b33043fcfccc03915bd34ce5dd6f4df GIT binary patch literal 26624 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 E0$-O@a{vGU literal 0 HcmV?d00001 diff --git a/CGW0CP.NTX b/CGW0CP.NTX new file mode 100644 index 0000000000000000000000000000000000000000..ab4bfa674bf13cfb399fa285d89e0aca2b836449 GIT binary patch literal 81920 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 DRP*Pt literal 0 HcmV?d00001 diff --git a/CGW0CPE.NTX b/CGW0CPE.NTX new file mode 100644 index 0000000000000000000000000000000000000000..341e19c3e2272ffdb9100d743c34a8ec6b333a16 GIT binary patch literal 2048 zcmZQ$U}RumVE_Yd24x^E!obDg>=+X7?C;{LpsnB^5aQ|Y2V^*h28YCZxKmLBN68?-K9q@8Sw%JBEb7n86`I8o{oC z@qVGcI!2m6Isbr=_%KJGP*;diqvVhefe_;%?}bqh5D@|@4ABge7)~-UFq$*wF)n4i j!zj$;#ni~OgXuk!8gnf36lNj}8C5bG0;3@?1VaD-PWBjG literal 0 HcmV?d00001 diff --git a/CGW0CPT.NTX b/CGW0CPT.NTX new file mode 100644 index 0000000000000000000000000000000000000000..5f2ded973380d8b560d81ebaf19f3f137a9d1d1a GIT binary patch literal 2048 zcmeH{F-rq66vtl@tyXXrbP2jBT1cXmJGb)^ZJ=C^B!!AdS9f=DcXt=}?(X95?(P?G z*Q9Z3?*mA=HzY5-UmoxMhkpkUzzWP_4|c-64VzGooS$e(4{2?UoRmhYkUMYpjg`tC ziG%Pgyq{Il=k{DO1-w|Yh1zu*6zD<**KiNd@CIM7fqJM$cjyVdqEGaLcCo^@_z_R> z2mZ!eq2l7JRNo*CI1Gr#$&Kb*CMq`KzU1>LnX+&@X(ziub4yYSy8Ijm(t_x?z zYBi+Z)HEW|pXL#fkaOdGL{=M+lgrTJs#brqbQ+M;fCO7pRT_7#0m)oxRRj{UzK9(6 e)wnLIV2larE+V-YX{yFO&NvO#Hd+P#hXTJ|+)Wh# literal 0 HcmV?d00001 diff --git a/CGW0CS.NTX b/CGW0CS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..88b1ce08ecd41e2d69c3edcda97bd302b90b7404 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/CGW0GB.NTX b/CGW0GB.NTX new file mode 100644 index 0000000000000000000000000000000000000000..81429816cb6ddd1e02e0fcebcf5d899b0b016d37 GIT binary patch literal 2048 zcmZQ$U}RumVE_Ye24*1b!=T3Cux15-ECG^T}2YnZk(9b!7mbc5+J(>tc0 zOf1a&%u>v%%m&QX%x=tq%rVUA%tg$#%pJ^=nddRDWZuHOpZOH?Rptkv!e|tXhQMeD H&@co5Cg&`3 literal 0 HcmV?d00001 diff --git a/CGW0IM.NTX b/CGW0IM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..b9555b258b6af14e0b29833af0cfb89253ad2571 GIT binary patch literal 2048 zcmZQ$U}RumVE_Yu26iBA#URTN92xBA=<5m*9wkR)2!t4pNNYcX3gdoYJHr!ki@w=hp;Uc|hS W`2h2I=6lQ|E|^C>JQ@OnFa!WN4kKp( literal 0 HcmV?d00001 diff --git a/CGW0IPO.NTX b/CGW0IPO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..502f2a3619a0216f1ac1815c4b97e6a7385787a3 GIT binary patch literal 2048 zcmeIzEl)yG7zgm@oP+qTsHpgkii$!IxF~K084%bI*u+`fFc^#mgTZJp7>ovk!DuiT zj0S_jXfXHz3%P$@7cT@(XP|8#@rED%3 z36@LM;^ulS;Q!h{6R0>1)NI4H8j)?;mt#4XYq^(ad6Q4^sgO#kg4$6B>O@_r8}*=G z)VmVx*I~V?%X(KI>QjBGZ}p>o)gRhp0w!wKOvUV(BXef1%$<2McBo$W6Rca-T7NP3 z6q0KkH1eZy=CcPk@osBfGNwFKGF+Z36DydgH^m|;VXSvJgIo(=sjupzH@t&lHfH)=l; zteGr^94&0f(Z+_}+S!n|lPr!ocd?=0ZZ^!>$A%g7u`Rh<_x)DiM;v{Ok|j{{1RLs` rBy&*TG#hG}V?*8uSrYf!hoqd|D&}%_s4>_WSpxTl$sEkjr9ZDPD8PmF literal 0 HcmV?d00001 diff --git a/CGW0KA.NTX b/CGW0KA.NTX new file mode 100644 index 0000000000000000000000000000000000000000..13505e800ab1512545660a20eb9cb890f3491984 GIT binary patch literal 2048 zcmZQ$U}RumVE_XjFvE>OnIX(IDA?2A4r%QF&vTJ9$}tlWSGD(hhYW77KQ^1 zXBciUJYo32@P~neQG`)}QHRlj(S^jlCI)66W(j5$ zW&>s$W)J2N<^<*(<_hK(<_XMmm{%}wVLrfohWQ3FDENUT5`(dxslf<~ic#;5h5+3| F001i>DBJ)5 literal 0 HcmV?d00001 diff --git a/CGW0MC.NTX b/CGW0MC.NTX new file mode 100644 index 0000000000000000000000000000000000000000..03551eb5b61a3d4fa9f329710e555267b465e7b9 GIT binary patch literal 2048 zcmZQ$U}RumVE_Y320>3#F7wW5Htf`=_;Oy_?9|Tb~N{);W2r(KN z{v6r9WM}YUNM)#Fn9i_);UvQ&hTjY#jJk|&jPZ;Wj1w7GF&<{T!}yhvk4c@$fhm%y zh^d=t3DaJtYfSH%IG7cgt(b$EbC_G1=P_?*zQ7C$NnmNhprBwF?%^5YssIBZ2_~?F zkyDVrUld#hBmvT;vyZD|5Q+|Vu!O0vr;m?=um?~YC^ia4Lttcw001$XFlzt+ literal 0 HcmV?d00001 diff --git a/CGW0MI.NTX b/CGW0MI.NTX new file mode 100644 index 0000000000000000000000000000000000000000..7f1e45d7a3e9c65c828d22806cba04d61f798c52 GIT binary patch literal 2048 zcmZQ$U}RumVE_YJ22mg_$H33v>=+X7?C;`gq@b-3;20F*7wQX9GD?n^5C}0DF4MtbSB*uEiIgC3QuQ7gR6kyV2@?uJ7YGGQ)w2$dF z(+?(5W+P^Q<{aiu=4H&FpyL5z1#AE$2`pZql7d%q!H{I7!Ty>7;8e*jgliF1VW5P zf-gt9AB7n_7?K!j7^X37U^vC_gyA291fvn74`Ui*1LG{lEsW*=?xPbvjVdfa|m-Da|iPx<~_`yaO4DHLjwZ~1!Q0dlHtN815RJu*kp`B zdVu8;gQ06g0J32U1|S(GoH7DH87Kdc5Fb}0U0@gRW0L{f!-q}A3@FIJi%rH7Bm*ii z-F+N`gORLJ0NcZgO$O{!P!M700lPpDDC6fEt^g`^;Rb?D1C_@ZGGNn$vB`iQddRNA;@A9EZ`|Mx*T%k88*@LtOg4Mhyv1lVXTNF=HH| zm|2c^=)}zh&}#doWO+8T;sUn}a)SF00*@n-Bh-PB+ZRI})R1&yt)sAzk@U=Sgklyr z;-eE5IkIEOINE*`WLcq1u4jTH)b%7sw$TYw9BCP1qeVd{PW$RCA?b!Ej`>&oK~lQR t5$d4M5t_jYk~rF9vRO#7Bu)N{U^U7%!V&6v28j-{Qb;}>1cOtUz%ND!YEb|H literal 0 HcmV?d00001 diff --git a/CGW0ML.NTX b/CGW0ML.NTX new file mode 100644 index 0000000000000000000000000000000000000000..0ace3ee6eadbaaa87f3e6a4d2386309a2fa3e646 GIT binary patch literal 2048 zcmZQ$U}RumVE_Xi1{EMJ!obDgBPIkwj7E%CN3cg( z7<3pS7+M%MFx+9_U^HP&VC-Ss!T5wxfXRj_gJ}xW0j4)h63i~l1L`rR0|vD*%DFGl&GKWkOc#n_7~XqYzM(pHiA!Qmmk>;F+J3=;`m{2vG}i2;5v$ dwYmX`<$0;80gmB*uA@a3C}2myXb9j50RXu%K0E*b literal 0 HcmV?d00001 diff --git a/CGW0MP.NTX b/CGW0MP.NTX new file mode 100644 index 0000000000000000000000000000000000000000..f83797b8f901e33e50128b8d3116a980ccbd152c GIT binary patch literal 47104 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 literal 0 HcmV?d00001 diff --git a/CGW0MU.NTX b/CGW0MU.NTX new file mode 100644 index 0000000000000000000000000000000000000000..a6558d93aba943fc8fba8bfd839af101ef935624 GIT binary patch literal 2048 zcmZQ$U}RumVE_Xm1}-3N#30EK91^4v>>3#F7wW5Htf`=_5bEy>Q8P-8ln@9p8Yw;< z$^H~z$Y7{q=wX=0uz}$a!xe^S3_lpS7-bms7#$dc7*iO_7&{neF|J|U$9RG95#tv| zHYN!sEhZZ#Kc)nxBBmCmX-q4ab}^k{y2tc^iHTW+S&i9(*^4=bIgh!4c@pyy=55R; zm~Sz^VFraUu%uy7P%w0LboNkCPymVWLqt6MLxX}LA_5Q*KYzav#|Q-=hk+F=V&v=? z>7B-q~< lW)3e%#MmIz6J(VFki)RzC(Gw;rueSi1Io;{r0b6B{~xij<4_sz`Rgc1`Nv!TINVOrb2)25pl+}N+K zab&~LL9yPkAx(|F2G%#!x!XReEwhide6I5uXiBW}Q*4=_>1)QCiDsIaW#*YhW|>)K z)|%p=OVBf@3F?Cp!I)q|Fg2JN%ncR>OM{icnxH7`9QFt^;ec>>I6533P6=m(bHWAT zl5j=1I*g*qsC!f$^^b-{qoQ%q)w5~&3ZO}60W|4CsPRqK6F`%$0%)?n0FvA-3&}WB zxPbura4$TYLOg*!HX<+|8xuI&O$5+KOaOgsLEvn=3!sU;FSIM)`@fe>05Wfrgko(C zNXDCswT%UPn}axkwQpMaaWsS|J$ zHMje<$9s-DTPXR0FmyUgCrtt z6hNdy1Q2PH03sbKfJpZdK&1N$Aktw1h;+CBBDMF0cIA8j?`IR>_FWq`mD=`s(s9QF+X4ErX5TlH-MM|np8P2Ls2Y~Ld=j`sAH z{{O-z!0!J<+~x$u`jWs!^OXS7__Y9AU|Ia)nA-K$8vvXc7>Zpilr!A^|ih62Rn&1+X(q1h6w(3E}!0J~JSpAL!R=*R0)wek=w5vFuzyB{XriV=cfB%;< zrN)e~;Jy&pUkD^?O_?zld2l}=Bu%+74|s5284{+_n9s9-GbCxc+PjvkB?B!P_&*u= E58Y!4F8}}l literal 0 HcmV?d00001 diff --git a/CGW0OMI.NTX b/CGW0OMI.NTX new file mode 100644 index 0000000000000000000000000000000000000000..6293f01a20dea5144511536149763f6131f4dce9 GIT binary patch literal 4096 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 I|6v0E2TPB9UH||9 literal 0 HcmV?d00001 diff --git a/CGW0PA.NTX b/CGW0PA.NTX new file mode 100644 index 0000000000000000000000000000000000000000..a51534a1eca4cd0b4e6b85d9f45a9f9a327654ff GIT binary patch literal 2048 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 literal 0 HcmV?d00001 diff --git a/CGW0PO.NTX b/CGW0PO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..1721cb3891889c6d0625c9ac3bc6751b4afec7e0 GIT binary patch literal 235520 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 literal 0 HcmV?d00001 diff --git a/CGW0PR.NTX b/CGW0PR.NTX new file mode 100644 index 0000000000000000000000000000000000000000..ceb82d28797ea2195b901823a49b30ace4a6b48f GIT binary patch literal 6144 zcmeI#yPMQh6aes(1W^%GlvR8ZK@b;LlX>l~s4#OUyBj7m88R7W@P)`j@%=y0GtJ9 z(K+Pg&N=6z^P}^NbKUvV`P=!=+3xOh54wH#jC;ZT!M*DK=KkUS<^Jn#^LBg7UgDkf z&U@c`KYPD=zk4*NSMbNTFTyj7dA$+y7a7O85yB_%Cr*>5?}v>bFxBs1 ztOYfS#WHLatW#itcQQ7DMv1iR={6e@xyYz0e53jV2Ej6xA(+6mu}}E6U^S%rg!=@S zYs;oOO_jd8N?REY49jr$BrfHIn=I@`I8lVRF?QnKx*4X+n5D;?iH_VgiMfwuT>J9w zx%89%(or-$*vEm&s0^PmhC#Sw`uVwql@ebN#5KbDScWAF>m|MOTOcJ*Ua)k{IMeL=9sE3rjTGLVwXRF~C_87YCx z6GLw*9jVi5fMvLyaV1zOpM$#uFhR?Qcld_}4Vn(nG+Xd^~=6!-VPSd5{1e&|2f~#Epvfz+L>0=q5XFNhX zipHmH#3p?#18qUNpWQgiQjHE{e>5no-*4lR=~ACDOI0VzX)fSiMvRK0UV-m1<}!8f z3bu;%z%qOz7!7iKnGk*|sE0)O9pkvz6MVw?h41GnzW*bf;3V#~2YyX5uqs&LH}IN; zoU6M98yvZAAxG{JT;a$g7INg1jP)8vb}Zz`y@GQ0#6pf7GOCah_?%$1I6q(+?h(YS zHp%vsAm*yU1;({wVTn5|9iEu@YX{d~;A zwn}xXU$T&QpJR-=3zl;vpIq0gQ&q+mBd%w+mEui*god@kF)ZB zmp85a$B)%7@P_)ti0A(btr>o(w-L)jfqnyT1^AXR5AniCIvLKd`3%fwV7fDK3#xGj AX8-^I literal 0 HcmV?d00001 diff --git a/CGW0PT.NTX b/CGW0PT.NTX new file mode 100644 index 0000000000000000000000000000000000000000..b87a5c87c942b676d0b25a948bd7f17a9b963c3e GIT binary patch literal 49152 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 literal 0 HcmV?d00001 diff --git a/CGW0QL.NTX b/CGW0QL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..5814a9fa6d64fbfdf1d908d0fbd75e8541eb61c2 GIT binary patch literal 4096 zcmeI!Yf=+I5C`z?86FBEpu7wys{#q~noY6+ze6ciJgOpAfnWH{;{-fTAbJ9Y6DXX3 z#|cnQ0C)r70L*mePt6ISOznQyY<}t8>FJuDO&u}O6OyBq9^20%WoW)UIaOYs`#c*B zMV}VRxtZy?Dfe}_Fjxsq&sAT6g}Cacm`;$oX`Qy|JMGZ{ozNNmqZ_K_4$krfPxBXE z<1PNiyS&fG{Fg8Jnrl?M8c^fvqgqm{YE$i~pX#?dQh(Hix>8!V>3&_(AM~PL(Hr`! z{-J;ALw%~xwJW#XZ77OjV-kCIpa3NgE=(fEJ=6duJk$c-d#Lje8xQq>yoW~tk2?3 zUIZWyZ3dvGEdZq63P9@50I2D64|$X@;~+7{#6FL10A_2yr^o+Zfy_Pk|4UmiSyr|I zWHrA6V7>POu$m(PR`Y8BR`Z(xHLY3P2*<*m4V| oUkpGZ(*Cy;`aa*;W?n}B1HIfqnzBM`YkT`IYn}M8qP7Aa*KZ+m4kK#x1 zq2w=Tkz}57X$=vuE#NbUJu@^TGd2@5H8Ydgo*mke9ovbW+L=wFUNnqG(Kwn! z(`XhYaW5Xmqj(%oVi9naUv7a>?l*-$sc>H!xtt#`U(a<8|C<#~b90Vz@{G(aos)36 z+D_9W3dlhGeOLGmoo@(_syy|c_yqQ!=Px3hIsYur#s7lN5&xpj5r0MJ(C3oQ3r6O$ z%1izD_OIqoC-nvKzuMreAW8iMeyz&0qA0lY&=>q+g$GYX&Ke0%(Z97SPd#-@eRD#6 zuNQNkA4(aSFHOz|$b6-UFF{WG6Xg73j`@4kz1?`#kD`X~D<_Yd;F&HUG&qu)Q=&m-sN;RE7> q-_bet_pZ({AIrY~_B{K~KW-h?Z^8ac{|o&1FmJ6@pjF`CRNyao5d!l7 literal 0 HcmV?d00001 diff --git a/CGW0QMI.NTX b/CGW0QMI.NTX new file mode 100644 index 0000000000000000000000000000000000000000..ed66c427b77370dc16e6629e282c71bd081e5312 GIT binary patch literal 2048 zcmZQ$U}RumVE_X`22LPt!XU-qALQa16z>=6tDvpmFkWPQ#Q2$! zg-Mi2jmezJgDH|Ji>aEahiNX;I;QO%*0lP*?Eb*K>doJ&HPX3x_{^H?2PnP6LyZ>C&Hs79UuU5Bqlsogat4{qq zIV(`jot*7D)heyP3{x=M%r3Lf95hGFQ8O?VrPic2rFNwDq;5$aO5LA2o*I{4k}jsV zr+26Kr*BQ)oj#Txl$nuPo9WB!%gCikiFRV#w41_YE`HPF*ad)2y1)KM;#E43JdluE^FKB{in zn2+pPGZ++~?ksMKsYR)$TCQ}(m)Wysh^JM-y@o3BUc*4R*Kj4?YlNrO!M#Q*@m`}q zxYuYU-fK)hcNFaY zW{W**<|`G7-RtvFPqDVgS)f$PciX3zi|DRes8sIkj0)ALz4IB47Af@=JLRgyp5iAI zX4euB!Y?Ih_^cAcyHz}Hvb)!YjkO0}Z6>!Wv0ZISY}Ya+wrhDm<=k{-r>p>>T`QF; z?Qx%!ik2nnC1#PV)cVtJpfRBEr?e_Nqk%J)R>aKWCh#6Et368rdt0VRF>A|>|m z8c*RPc`XQi{A4ADe~J>rKUIn0pB7LOzFmpoUo2ENK+gjq{7aNLK+jj=0KGto1N5aJ z4A7S;ae(gdw9L(aB;2XQh4McPVj*T50TP=KO!7jS$a&+x=~v3~vf3nGA1M;$(QbC->IC2VMsV zWpXP=9K&73>6%w!!gT>93D+wzVZl?l4Jm?<(CrW6gzhRP+@QpSZbzJ46;qP1ONj}) zJ%xLXG6)GbDly?%N=#S@C`sscOL2G?g9)pi!gr`%B|bGaf$-GmQ{q!&b3e7l?=@($ z+XcFWG4Wn!gK)2Nlz6YVI9i^~+V|Z0(fd{qVqB!eN&Yq^c8Zn8j%LpPOKgOs!5pBM zDzW=7^Av6xF9)Gadz4tFy-F<86-petR|b@f-K&%s{%TL*UgH`N!oOXKtI#`?xC&jX z#O?ZZN?dB*DO9&kUJpXTeV*c#9B(N5LAdG$CARBbN^IA=mDsNLD6w7d^%SlR?*k#> z`;|CsZdBs1xk-t`=H`HsVe}{c^jc}`Xy*L?u8rX4e=dCe`<@aTd<29B->t+3f8SI1`2PV2 zb^oCfWBdq&7(Z5GjGuT4ALKs;A;!;?7~>ugV*Ff*G42(rdwAUkLX7*BIE5Zi;uLx? zpkxX?q{J!o3s2!|$S*-i_$wtA>enC?>R}}o>NlRkXXtN1i19lm7V7s(EY#6}l0qF* zVxj&ZRM(Y%1RNZDlR~5>Qf$zbdg7e-oj;C-V zHy4D2XDYEH=P9ux=PR)z7X*}y!i7pK?;@eP@-7A;{1PRWcc~J~n^j_Yb4o1lBv0WN z3a5jRaIzB1J4K1*ovOt0P75e0?{p=W_Y9%B@uH)gjdJ2Kj&BS#x^u_ONts&wRd zV?N}`ZM@~GNygmOPqo*O6EUV5^CwSkhay)+#*FsGbr16RUbT@i+g@_&I8}j@v;zMJ DXr~vW literal 0 HcmV?d00001 diff --git a/CGW0QX.NTX b/CGW0QX.NTX new file mode 100644 index 0000000000000000000000000000000000000000..0bdc7a9d0d516a7406050a8bb7567fd82ebcdcb1 GIT binary patch literal 2048 zcmZQ$U}RumVE_X`22LPt!XU-qALQa16z>=6tDvnA91^7A_A<_6T+eub z@gn0R#?Oo_OrlI`Oy*1;Op#1kOw~+1OmmsmG3{r%!1R#m6B9GD2(v1)8M8Zc1al^H z6>~T99Okvm`Hoj?MHMhXf> zKsEzAM8MS01ge4+CIB;o4Ju${09C;O5->GDSPLrYKmvxwP!(J-0hpoOFacAj3Lcn% Q8B_qs9|fZ!Fr-5O0K!={^Z)<= literal 0 HcmV?d00001 diff --git a/CGW0QXO.NTX b/CGW0QXO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..9a7c451cbf6b6294121f93fa9c3d43e3556dedad GIT binary patch literal 2048 zcmZQ$U}RumVE_Xq1}Pvd#lXwpALQa16z>=6tDvnA5ajO?@9gj53S3$ONfif~l~;r2=FS*bGZtDnNx3NQI#hT!j&;E$k2#riLbP6=?2Yg{i>l z4mPL?BLiG!aDY?*{fXPRoKO{p#<_ z$DBbO1IB(7C1|s zvz%+3`<&;U51pT#zIB7^#@0=$E7#4gn_suM?zFlq>h7w0y6)Y&@9X-628Kq3#)k@_ zS)qBMMWK^ImxOK$JrQ~{^mQmyKcIeieX4#+{fzp#^$Y8dtG}TBrus+fU#Ea$Q+LSDmFQ!15< z8B6A>pGrk-T+NXn)l6l&CA({;wT5EB^D{<0*NQMQo*P^e&swXoOpwJmCUF_YiCEHR zt)fg|6=MRcxJxSDSP3SuYGeYdq$S>1O-x{wVgjp!49WIru9(9`Okj1eA#JUm<`5>( zG#gULPqTgw6%q|sx^v#FE@lF&!4)2!LiAEYDI=G4O9wzW}FG!L!_c4Ly z2=yGvcb96`&k`ok+^<%FPI-U{G<~JUqA{Ih>*q-I6JyUuF@cq4!k^yk|6??oMvm`T zCW!Ar%`+LJ8GMKdG!KKsN%II3XdVSgkmfNa&^!*pEBXWzXr2V&6@7{cG|THsBzYx{ z)4YG4WZOvb8JC0+K{ZyXbNjxa%8Mwy^4V@w)#Z5x>+m7E}>$HJ9-&fAYpG=#e1 zBqkXBWF{E>6ebvbs(6ouYq^5w`9Cs0u@RA>eqQrI5=1I$H6lr557k6?-S=dIc=j?R z;d@@d1e$f#b0n7ZH8Yq%69(b>*^~)1Lkz)DWx9PcCeRE8;ToIC1e)~>p_peefo2#8 z*Wu<&pjqD#^0NgKXoiDut!~K#8UcY%Z}$H+GP2#&!iZ)Csnl46JLgobu)ywk8WULU zjaBc7H|rwftk}npM3YDMHKei8Bl{VW^v~`6UE*6MHJ+$jhVb0P1f!=6G35hIGZSbw zG{lq!G#fF2X1pP0*`b-h1e%G4m?ec~VpVpJ>7FoD$wU5f0hXcl6|dg4*9ehzSnUr`6T#IM7H452z)WC+#a!G=&B9^w+e4i7b?$@hG^ zc0u6m9HHx;jL-@9tXc)m&gYmQFG)1;>COIs0nxbiglJv_;mUZ42{bQ*@T$MU1e#Yt zctu}h0?oCOcPwdcKFqFh9TR9?SF03v&Kpdi8K+h$?wlQ%KobGs&e@R(G}_Lw6nD-} zOrX(!#8NyzJ2Qbs4`$I&#qYud8a=9GDW1c5OrX(A2hot9U70|m7Zb4*&+~3fpjnI= z$TzMs!Ad54! z-zw>DZGTfOXEK52EGD=<+E7S5aGljh<|iJwKB_7STpx9Tr08nsZ1of2-abb1iU+Qb zj%9*)-ZX?(@GU0L$WVb#Z}$K0GP2}guFVil3WWP)J`-q~4WSce4<^uT2*Q1`ClhEk zGK6MlFDB582jML8iIa|4|J=Q4q2 zlGJWIaLv-f1e#Vu%tXUanh7)+L(C*XlVt+UWJAmZLDR+rns!4>^3dd%Ky#dC8sk0U zc$fHl#0f6(_lOe>p*`XxLuijU*$~4^e3<%e=fWW6W`#&oq#}j zPX^)6S;PdI!?m6oc}HJSN#G9rG+n$;@hj{Mm-rQSrXf^eXBk2jcD5l@VduES zuds6sp$dCfN#M%jJtoMjO*0K#Sscs+nsyMbutS(YlQV=W>`*4qOab8vTg(KS4nwHI z4r2n1zB-Brt}G5`0!^nO%yZur_sM{|ygu4B5L#W%YaEagTR~kayK1C`u5jc}Om>}l7A#^5p zGJ&RG2%X7ACeV}&p)+|Z6KKkY(3xCe0?iRh0?!df8so zrVe|go*M&u#554zBd!zAje$MldM1eZ1`wXZ8<{}!DG1NuXH1~EP)85!5f?FmMnK@x zoBjULCeR!yE7}<46|I8s)4nby zuuKzNNqOrWU;;q_aJ z2{cQC@Y?iY0?jcpUrmAj-%UxJyK8qQu$m9T5$?eRnms`{!o8S4vjBu6+?xqB`+#s| z?8^k2W0eHj(MG($nB_`0U48qSfR$&6o zev(D1nP+}~CeSPd;g}C#0?mOS9P>d;pjiaMF(1qXnnOT%<_~28&83<}pt~+(0!=?5 z&4IP(&jgxPK{&4gOrTi}g!5XR2{dbfa9#tMKr;x0*CNpT@*lm~|Cehtff;;OA{ZZy zL>gM{{o8X)ki%1!_-~k*K=Ztii2*+^FoEW2OFTc%FoC8dyKGCkJk7sXyh%uFK11I% zT30H=Bd~f!{Ir%EYVF=#=&MYixl8?64W1Qm4^pfZBz1E=d4;JMY3(bi9z39K?8vLAY$vrM3w43eT#sEr9U?MyKG6PkNhE}tpe(fi4a zrNiCXLe-L+CHHiUpKsryq>;(3N}9~gnVFvk_0v+Rq%~^nbYm>>#yUzyPv^s#T({Mn zs-&1Ns>E2G#spcM&IDPU!9-u5IBzK_PeZ91KW{UEpLdwR&$~?E=RGF+(#83L3BIrK zzDu-J%~&5W!B`(M!B`(L!B`(N!B_$UpWf{MPh@1B!J?Pdr%aI5XH1aQ=S+~*S4@!A zA5w+sswrkOUw<-z=f9Z1v!m5xt>C#1#5|}nenL#(ryj&DRaD`X>RIc}%j+s8u*wO^ zjFXp6+U~F#CVo5u&GC{~rnN2KqL2Hb*+F_BlWoaoz52dGHFj?;p{dM(2QR?9NMY;;&Zy05}2FJyA5RO`|&!hkF%R+G!wLb~0OPSsTSBq%V! zSVbk>?u$+MDGAXhpMIt~Yy9cW{?EwzwH0d>P0D=#XR5|m=B&z0kX3~VX0U3BcfNHo zfmJsMpKmoL(DWFB$3SM@r!j$MItZVEn=pZ91`|Yh9Y`+Y_eoZBuhfdj9cwe03H-De zV&(^$RwmFaEtS#UB9FXFwlX%AvDyQbu^AIsttNijt4+~n-2vcvbtcfP!30?hWP-k( zsh$HBHcLn@Enf8l&ufcSuCvsk0UELn6O0wNq{C_wOrY7;k{+wsjtMlI>*%F&E}gZS z>xJYerlJisOKxBSs~edh(;+geVwGsy>!7S<%pj6J5LtFs~FT~R*H1b%K7Kb`6BPV9D=`CFJkbE}dpb`jUJ zxCwlEv;S}BXps3GOi*EWGQr7k7ZaQecQe7saF0ud=%oeb;$9}0i~C#>^G?_MnLzV^ zOXA)Y_=8NKdB`Obyw!S`2{ezm1Xl%!=TRomJjMjG@wiL;6@7vUte#{7tEXIo3tWu# zA11ImR@S^TTW!&_%>1k`)$9>ymQ#)ULkFW-K}nbS>4PCpi|0ZyjAPP}XPCgxvrG`- z-Qq{AXwMoXol_{9EyDO&lL`C`X97QSn4ntL##nr3v6N_vnM`}t%XDcb@Vp)qcpk%QAu0a!e4+9_ojZg6H{L@` zFnT=`j6U1-11pTa5j3@2##_JfOyFk%6Zo0P1bzxi+RC}SUI1YIicH{ViY4CJ)xiXs zJQIx7$pm8waO}^K%vkp@fuDPsz|Vb5;AbnH4P3(5n73Baov7i!M;6;Kf#*3OjilL@ z2{aGMSfvL3ebmEDpb;ad)RMzP1CzztvS)b&nx&N35E0K>lDv?PQj3jwFcVn4rk-n+ z2K@E{RKx2Eb_U z5>jp{$X6Y#=j~)VDuHhnt}MA%0^f${uSAmaPq<9C_B>OCe{f!V2O7!JgQcua3=5FPu`)POWAaTwhpY;Q7cOj&$>(y&kjlg z-*4HG39ROV@b_DGVgk)i8c#LTQ1Px*e`W&BFHA7{uaB7WzcYc=A573Ee_GQLFxKu&FxGraM%%jFg9)tm1mWi_doh7#0SG@s*_#P8`!K=iE6FZj)s@kY z*)g?#$~h?@OZHVOTA?8IeGQY|Y^LiBI5kt(&P>`^!dRLC$9uEQG_oe+|#cxMf1>twRD;q-B zT?0UxP%5V8hQc$~_bNuyq~&BZtAV7*YOo=?54)PxL7GX^&k%Y7FUu!+>HAP?wH`(n z;+@+sxf=XN3A6E}OZ`B zK*oDtyF3%D>6%Q?C+n-{N;d6V4QB$Y5lmq9fbm054IX3ytEzNz_vBpFKP|eLK-0|x zo@-3dCp}EChfZUH9eg?y?BJU)!TCSK67NLWlnLV5j0xhI$prDtVuE-!XM%WERgx=6 z_I6DNFu_=Vul^s(@gdK(q~vS*R?MsK!Ay|DDYEL&6l|VFL#k!(YX3v2p4!BC(tqmv z5fk|Nm^Vafh3ndtdhsHDiJ{Q*o6&v80> z5r3`4UFG|kK(nbabpto?{O|tn*IW1has(YM^X~n9lDH!;ORkoPy}t+$b>xBb z^O998>3us&4qI&m?^lCSXMp1zs3hT@?J-9#sLmJS{jwnH$npER_>pfG+w(T;IDZN8 zzI_;VhB?lf5>K=JWkJjt={R4CAN_^`+CAxvk^d4a@114Tkvq8C#L9c85_4pAUKJwG zifeeT8Fl0&7$kL|Ph#+-BkGKIoEyZme2K{1o5h?-j&rsUxt@%=eVdWL^dn<=J9^w{ P7s0=ue`nzTIs^X&06?Cf literal 0 HcmV?d00001 diff --git a/CGW0RU.NTX b/CGW0RU.NTX new file mode 100644 index 0000000000000000000000000000000000000000..54bc482253030ae2bc77595ffb39bbb0d695be8c GIT binary patch literal 24576 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 E00u`L5dZ)H literal 0 HcmV?d00001 diff --git a/CGW0SM.NTX b/CGW0SM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..3c0beae51aae93eb1b4c0e8931bdf4f4cd51ca2f GIT binary patch literal 2048 zcmZQ$U}RumVE_XI1`QxB#K6hm6C4un=j*DVt>6Y{1^Wd1I{HCWj*`Pa1VW64zaK|^ z$N|jr5eyv+I~ZOtNHBUZRxqw$yurx9WWkidG=u2`(+?&M<_P8vW>820O9}?3)V#dZ zk`e`E;8U8MU5OAd00Lu>dQh?AlA4&4TBP8ZoSa{pS5k~nglq{ zIYJFG3#8rxq@Ep!y&Rpr6@p!TfFv#eRBmVhQqKg$0f|M~=&o?j0eT9d8)UvINIl5Y z0U4P&2q_55H`zTiFE0~j3`o5hNIe@62dCyFXQOHGN<L005c;QR4sr literal 0 HcmV?d00001 diff --git a/CGW0SS.NTX b/CGW0SS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..dc1e8bde4ef196a2d71a96ab94d06630debe8965 GIT binary patch literal 69632 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 WD$|~1Om;T|m5*>zN8N#c*MVQ^AT^}` literal 0 HcmV?d00001 diff --git a/CGW0TR.NTX b/CGW0TR.NTX new file mode 100644 index 0000000000000000000000000000000000000000..bc91346d9458737b4159694516671144c364ba1d GIT binary patch literal 2048 zcmZQ$U}RumVE_X~21y_-!@$Sj;u`D>5gR2(Y6yfFjZ~kHB!9Cp*f7L0)G^FwIKc3b zfr(L>(Sj9g6GOg>DxOnpr2nJzGWWD;UFW)5L4WuC^oo%secD4alq zv!1`6ivkt^QosaKkXW3d;GdUMiLM5u095!m=jRodDEQ%yb?53AO)jfGz3Ow2mk6F>-NK+l?%xk`l)oV@F2Dj*N^Q85uh=GInHS z?8wN-$ek3IQXU&DY4qM%@BM6F?*7sLk_DD9c7cVp%9e0nW6P{BT^`x|dQuheFHUOb zC#mlhHe}muhwZXGw$BdO54M!7C$Ex8@+Ntgd`LbeUy^SLOIOq9X_>xG-=^==kLl<1 zYx+H1%y{-P8)n51Yu7W@h};%s z9}6O$V*IW$Oo%`E3%^8M`n(*~mjsAg&N8=)5*NI2FqWOI*aufIs65wBhSmywSvU7>EB&BGj_e}nif=9pvZ{@5?# l`I-?0l7IdCkB4sswNao8CEG)%1T)NtX7e`Y3e1WEKLKUT@Mr)4 literal 0 HcmV?d00001 diff --git a/CGW0XL.NTX b/CGW0XL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..743eae8c7405f553f5e9b6e3e712a0f54f8f1231 GIT binary patch literal 5120 zcmeI#cTyBV6bA5~9xx{qP%({xprG!|F6?3sAfN;#C}6;>1al^s^&i6t3@0$0z;FV? z2@E$-4`BDV{n+mW6h-Y++3ftPr~AFvJ;6!JQ)-UFk*B7bzX?^OT3TyrTYH*2nu7A6 zt-ZCZv7x!vo>s(Hr@Lm`315Ns_=Ha}o1m&t18PJ)SFhE3^;vyaztumL>lJ#XUdn6m zy1jmH*n8%^^4@u$yl>tw@2{7m3v`K2>U!O!`}B~0s$c52`lJ4;f9gNl_w)T?zsj%k zJN;gN(0}5;@Zb0!{4f3w-oG|n5d_%AlLabWk0}CGW@z&pk3Ni%axl&Hh|9Fo32?~_0?aa#AYp#1Sp=09 zW)oCdu#a9lt(_%lA&($sVXlLO$pr)S^;koIdXy8O9_D=9A7g$0uQe5sGGejT5n!>_ zXCT62*~VQGVXkD*+$0h5(V)5+KrD1c5MYc(0*ui_fNYxykZlVAvfWF7Z1-g#eY>|3Alo(qWZO=FNIM7+ z>3#x4dVm0tb`l^`b3X2mvA+MiO+|3eR0kmz>!5?tchw;Q^L)qJ92Sr_^AQ2rXD1v~ zNsk@@>2cISQob^d3CMfqI02?TNq{YJiU3>Uw17-|MnI;$On^bJ5Ma==1lU%+1lU%6 z1lU&n1h@eP2vE~=8A#s%=Lv8FTp&PT7YPv9B?4r7)j>*1c+Ekz$rfYWB)}Ng36R_k z0wi}U4Pi{a5C#R}?in)VAT-+ngAO~0#=}|6h$`YOq=-yCJ+c+ZR$z=O F@E;&wbr}Ev literal 0 HcmV?d00001 diff --git a/CGW0XO.NTX b/CGW0XO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..17e4633c371d5695569fd680ec6c478d2347f193 GIT binary patch literal 28672 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 +MTABLE = MPATH + 'CUSMAS.DAT' +USE + +SET DEFAULT FILETYPE TO '.DAT' +SET RDD TO 'RQBRDD' +NEW_STRUCT := RQBSTRUCT('CUSMAS') + +N_XSELECT(0) // SELECT NEXT EMPTY BTRIEVE WORK AREA +N_XUSE(MTABLE, MSTRUCT) +MWORK_AREA = N_XSELECT() + +*-N_XORDER(MORDER) // SET TO CORRECT INDEX ORDER + +N_XSRECSIZ() +N_XRECSIZ() +SET DEFAULT FILETYPE TO +SET RDD TO + +// BUILD LIST OF FIELDS TO GET INFO FROM +*-AADD(FLDS_TO_GET, {'CUSNO', 'GP_CUST'}) +AADD(FLDS_TO_GET, {'NAME', 'COMP_NAME'}) +AADD(FLDS_TO_GET, {'SLSMAN', 'SLSMAN'}) +AADD(FLDS_TO_GET, {'DSHP', 'SHP_METHOD'}) +AADD(FLDS_TO_GET, {'DTRM', 'TERMS'}) +AADD(FLDS_TO_GET, {'CUSDSC', 'DISCOUNT'}) +AADD(FLDS_TO_GET, {'DAYSTOPAY', 'DAYSTOPAY'}) +AADD(FLDS_TO_GET, {'ADD1', 'CUST_ADDR'}) +AADD(FLDS_TO_GET, {'ADD2', 'CUST_ADDR2'}) +AADD(FLDS_TO_GET, {'CONTACT', 'CONT_LNAME'}) +AADD(FLDS_TO_GET, {'COMMENT', 'COMMENT'}) +AADD(FLDS_TO_GET, {'TAXNUM', 'TAXNUM'}) +AADD(FLDS_TO_GET, {'CITY', 'CUST_CITY'}) +AADD(FLDS_TO_GET, {'CUSTYP', 'CUSTYP'}) +AADD(FLDS_TO_GET, {'STATE', 'CUST_STATE'}) +AADD(FLDS_TO_GET, {'UPSZONE', 'UPSZONE'}) +AADD(FLDS_TO_GET, {'ZIP', 'CUST_ZIP'}) +AADD(FLDS_TO_GET, {'PHONE', 'PHONE'}) +AADD(FLDS_TO_GET, {'TAXSCH', 'TAXSCH'}) +AADD(FLDS_TO_GET, {'SHIPNAME', 'SHIPNAME'}) +AADD(FLDS_TO_GET, {'SHIPADD1', 'SHIPADD1'}) +AADD(FLDS_TO_GET, {'SHIPADD2', 'SHIPADD2'}) +AADD(FLDS_TO_GET, {'SHIPST', 'SHIPST'}) +AADD(FLDS_TO_GET, {'SHIPZIP', 'SHIPZIP'}) +AADD(FLDS_TO_GET, {'SHIPPHN', 'SHIPPHN'}) +AADD(FLDS_TO_GET, {'SHIPFAX', 'SHIPFAX'}) +AADD(FLDS_TO_GET, {'FAX', 'FAX'}) +AADD(FLDS_TO_GET, {'TAXRGST', 'TAXRGST'}) +AADD(FLDS_TO_GET, {'CURRID', 'CURRID'}) + + + + +*-QBROWSE(2,2,20,79) + + +BARM_FACTOR = SETBARM(,, 20, N_XLASTREC() ) + +XXX = 0 +N_XGOTOTOP() // TOP OF BTRIVE FILE +DO WHILE !N_XEOF() + XXX++ + BARM_UPDATE(,,XXX, BARM_FACTOR) + MCUSNO = N_XFETCH(A_CUSNO) // GET CURRENT CUSTOMER ID + + SELECT CUST_MAST + SEEK MCUSNO + IF !FOUND() + ADD_REC(1) + REPLACE GP_CUST WITH MCUSNO + + /////////////////////////////////////////////////// + // TEMPORARY FOR NOW + REPLACE CUST_ID WITH MCUSNO + + + + ELSE + REC_LOCK(1) + ENDIF + N_XSELECT(MWORK_AREA) // SELECT BTRIEVE FILE + + FOR L = 1 TO LEN(FLDS_TO_GET) + GP_FLD = FLDS_TO_GET[L,1] + CGW_FLD = FLDS_TO_GET[L,2] + + IF GP_FLD == 'DTRM' + MVAL = STR(N_XFETCH(GP_FLD),12) + ELSE + MVAL = N_XFETCH(GP_FLD) + ENDIF + + REPLACE CUST_MAST->&CGW_FLD WITH MVAL + + NEXT + + + N_XSKIP(1) +ENDDO +CLOSE DATABASES +RETURN + \ No newline at end of file diff --git a/CGW1AC.NTX b/CGW1AC.NTX new file mode 100644 index 0000000000000000000000000000000000000000..7d2221bb2204598a6ec5a8342a856952ad7dc5fe GIT binary patch literal 4096 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 HKdr!TGDN-* literal 0 HcmV?d00001 diff --git a/CGW1BT.NTX b/CGW1BT.NTX new file mode 100644 index 0000000000000000000000000000000000000000..62b21619386210f5c701af4bcc3a2be741b57cfb GIT binary patch literal 2048 zcmeIyJx+u`6u|NKq3gHe*ETlvHlxd;b|lN%sbmssIRZ!E2poYUa0HIP5jX-zka@#o zT5B^?Kz{iT33irSrZ1`TYKfA7j1Cce%X~o?!xE0{?0PYp9@x z23qK#hXF>I05HNB6=qmqi51q^V2d60IN*pA0!0*)qKpbEsiK-1YN?~11{!H1;D}>Z zoN>V=S6p+$EqC1Wz-D;!#(|AeNwU#k literal 0 HcmV?d00001 diff --git a/CGW1CA.NTX b/CGW1CA.NTX new file mode 100644 index 0000000000000000000000000000000000000000..54206bb06dd10c251619146baf10830ca6998b9c GIT binary patch literal 9216 zcmeI$X_OpQ6$kLw-4X*tkQkPL(HAos1)G^HZit$iuIlc}RCjf%s?#$dM3%S_7vdH- zTrdJg(5MjH;ug2KMFj&w5M)s{jaw8As8Pfnw}_fA-dk1E_x`KD4ClVy^q6msqJM|XTvKzBHMP+7>`B&1vj1j3GV}M$3e2p)L9_xxCNOKw z1!jxcVQx43%mFj6R4vs@Yf2kRn@ihEH<$L7_Lq(*FD|brPn6e}HGP1-n><}1FBFFapwwuC-a;SF-xBFoLb-N!y zklX#J0ABohf@Rr~c;g+X?Rrr*!LJJ7T73;bUHt0^a`CGK@Zwhs;LNYffo6_(wNn7^ z>KXubSJxuQU42sk@9JL!H7E93?PO7$I7!v@;~I^be+sx>-8TJp!;2Zl1?qm=kDHVv zmSI9cWNTp%=Bs-eK+8$I$Pf68(*Wt?DsN6jRK+XJ21ey67fpiWw_Fa$0%nJls z-6RR=>B#1BmOwjf`E7@u9-e}^M<8}+-pwRGe3wetf?N;{rvxeE}TcU7e-@s z-wU!Q?P3N$vPsyfL!2%Vz;L_^K!sxyfC|UE5hNU!3dD&^!8nbI42_w~1kwzxd2yV= zUWRVlr^Rk{sq%Cpzm^8@6$Dh=dbHMcOS#sxaV?@T^GXGfq30`rnZHc{pS1M=YJ#sq zkO{tCAn+5$nQd;%(m zX=ovW$18vct`eXKsz7l@3NaIsJru+Hl zOv&$-a-lsOCt=j$yXh+6v2;-wRtsP_-b2uEBA4^TuwrZmP!;2S04h%JN02yu zKmaSo1<6{8@mOjQdTT6}Z1D=(cO=HpbGJxlaI# z=${lo5&ffvkhar&85(<7$8UT^uX0~b2 zP5aXd(w}zy)t1K0X9Tbpd{zK^!RG|9n}5Ctlihr~K*yu@pB^-3z94|5{fi2qw0}te zOZ&YUaHk!O!@!AXe`RUREEB*$JyHMzHCq7$>SO^7)S(Cxs3QdWNn&ZtELQ;WSR#P& zI7|TJakv1+V@?q!<8ht<#^X@}7!Mks@-f}de~+$APZ~!SAM+6b%!PL_P+_BEQU1c0 zmCBU@j=R#1b@)eUjJ{a(&lv6cfm`i#GdNNJljP9~AW4qV;Bh^U6Mmyizl7#@#n~fC zGFQ&PH@jm6Xd6IZ7#jKQZWI{vCTzf^+R~WeeNlc5nw+}EV+5#e(oJ>3*wUCeS^@PT zZ=83#3>|^cb!~%Qb%!iNI0)HC6y6Hw7oR*M`-oCSXnKAlJ7cT>iKVd6n0YEf+5{~F zx5E4ytCER)JJ0Y=0W8$MKvHc4PRz@~XUr3z->+tVk%lCF8}oQ>W}O1=E7Y{JzVb4J z;g**;oKof+0+^yU1=_U6bYcAk=kWrVa8FVI3HLYw$}6>9Sqz|(;jIFJGnyA<8Z!$8 zu#_-P^_cGGe-T|c-Sfvba?k$|&F2X8nzY&Nr`4$nC=n&!cwOQot(6O@WF&U- zE7FVH+K4Aj3BK%gEHz_+Y)BOGazjWn%ez=GF zp8#%Sb}?jK0{j0B0@(k*C4l|^Mgd&hn-sv}ep`d?|2GR@|Gz~5`~R&1*#B=6!2bUo z1Wf!d-)qwfVaTA=?;y4?#8t-!DLaW3U@R zHU>Wsz>UEV1+Yu}NB}nmKNi4^!A~^kjlmuTurc^4f)r{RKUj}h)A{^UPdS?wD*yhk z0yx{4#}deg!O4%rbBuYAApc^Zz6H~ceV8DBl}L9K=?D~E<_N_%8i?O`7&8*BBhF^RNYzx!4n9A;0X$X;0X!^!4n9A z;1vYHD+q!&aGp^d!4pXSkOY2AevkKGOdSwl1U|C>GxA-5dB_g-_IvHzTlG5KBJX8I zzFCe`@2Y{Sfq&FM6FP7L7jO-?@CYyP4h>w!77JhGmB=g_HZ5~#PEFqo%$;%7)a3Dg$KmO}F$v}}){mIwM8ElZQ u#d5=}*yyg8mv?(Q@Y%*vmvXz(1&3k69CG+wRlUSfAlNa9kSbLJs(}yc2T3ph literal 0 HcmV?d00001 diff --git a/CGW1CBL.NTX b/CGW1CBL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..4c5e90b6305a044bba12ff38fc9c49eab08292a1 GIT binary patch literal 2048 zcmZQ$U}RumVE_Y32068?-K9q@8YVU9UKy*5$qZm?-%N; zW26buGD?nyz-R~z=@9T?NM)#Fn9i_);UvQ&hTjY#jJk|&jPZ;Wj1w7GF&<{T!}yhv zk4c@$fhm%yh^d=t3DaJtYfSH%IG7cgt(b$EbC_G1=P_?*zQ8=BgJIP1qaiQ?LjVAj C{T&+s literal 0 HcmV?d00001 diff --git a/CGW1CM.NTX b/CGW1CM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..3f7ba8807acb93069d05503fbb608ba2e82065ec GIT binary patch literal 14336 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 literal 0 HcmV?d00001 diff --git a/CGW1CO.NTX b/CGW1CO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..2e4dc66fd9e3cd47383c193eb26efb816b246002 GIT binary patch literal 23552 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

`J*P+IY(<>6+H2BpxZqfFg@||OcI>Cv9wrY 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 literal 0 HcmV?d00001 diff --git a/CGW2PR.NTX b/CGW2PR.NTX new file mode 100644 index 0000000000000000000000000000000000000000..811ac143d4c8185811d8389d94dbcdd8d2091993 GIT binary patch literal 11264 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 b)uN{iPcG0r^1O#XEBP_wWxKS%Ls;Oy(6;O6 literal 0 HcmV?d00001 diff --git a/CGW2PT.NTX b/CGW2PT.NTX new file mode 100644 index 0000000000000000000000000000000000000000..54ef2150f5a2a4a209bb850bbec28159f146115a GIT binary patch literal 54272 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 literal 0 HcmV?d00001 diff --git a/CGW2QM.NTX b/CGW2QM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..5b4a0fba097c324f29b06cf017dee190caa6da3d GIT binary patch literal 4096 zcmeH}J8aZI5Qb;hA-n?NaRd@xCcKV>$FA3Vx#Jl~K%yW>A)!J_Lxrd)sSp(<6{4b~ zLR6Ggh>DVml9Gy&5;60yEzVOSMIhvre38D4fB*Z>tnWt25RDPm1a0TPUFy)n>YbIf zn~V8uetUWG`tsV+>aA4Lezpm;3H(P1bZLbi&=Yz=Z|DPkq3<+eri?Q;%sunSJTtG% zJM+nWH9yRlowj|uWbfO@_PKp+-`mgjoBe4!*-SQ{-OV0mPqUZV+w5Z|@yzg*HmgR)wC44dzePP33RWf&^@7O5gE`)O?yJSn$8J5r73jJ4N=~M z3#b+GdKW@V>_WsF6n^D~28A;bZ%{ZJXo{zu*A&h!Xeu|;MMa|%dP!3+^s=Uf(2acg zYH^36hr%XJp&;$|g>&3Thi<~zh@wehL!v%#xzu`OcA9B$ejx45C12>uziNtnK_$)x zh2L?Zh4a1SA$oY&KTKKIqxS3&MK_VUY_L`Ug~IWgvamQS;CEKhfOK}$w4Z7n{K^M( znL-yGx}s==uGo`WE=6q#-Cc!{|>uh@1Yl5AxSw*_#RD>^@OIF z@B@mb**K&rbPxWfL7wJu$`04GOi6h>?U& zdsNW^Q*f=KQM~dM;cQ<;=a?WfDC|r$hI)?RcM{Z>1Aft9$C!<&M0;iMNZsRUXFvyi znIowUP}nTAS~%07TQtQaZq*d&$j`=x0(!AcQ|wKCSvG2sB*S+7)db9XoPU1VU*%m@ V=ig((BgxlAyV?ZW1pc7}egW&q{FDFy literal 0 HcmV?d00001 diff --git a/CGW2QX.NTX b/CGW2QX.NTX new file mode 100644 index 0000000000000000000000000000000000000000..5adb9a8608d24f71556d85967dfcbf1877aea2d3 GIT binary patch literal 2048 zcmeIyuTKLp6bJCvR~X~>V6aS9kr5DW?|PerY)c@4?NT7Y4LONKP9i5Kk;q9TauSK0 zL?V&2<2u&<1(00DUGr)C-rZNU00dwOW}^xv^FDwwbakt(d!3t0cEr+C-Ai@1Wu{lx zx^{8iY1@_K=&4|6Zo$QR3L>u3}6Ifn7|aiphRlqgxr#Q@<^V@3wa|S1h9%6 z&+rZ(aEQzL=-It!+M$oPYnU?~ZX{Jmw-%3;FM6t|IAq*?H{yo^$2<{@ne(73V>o KhV$`96Zi&j0bGj! literal 0 HcmV?d00001 diff --git a/CGW2RU.NTX b/CGW2RU.NTX new file mode 100644 index 0000000000000000000000000000000000000000..881406156054049dd0b125b8b5595567fa52e7ad GIT binary patch literal 24576 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 UA?lcGB^_kxH|K4D`QIA;2dy^_^#A|> literal 0 HcmV?d00001 diff --git a/CGW2SH.NTX b/CGW2SH.NTX new file mode 100644 index 0000000000000000000000000000000000000000..3f8e5e8b420643108e42a97ae7f9d293d7b2595a GIT binary patch literal 278528 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 =_ScYLR7k-LIz@YRZZccL+FdlHRW;RK-a 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 literal 0 HcmV?d00001 diff --git a/CGW2SM.NTX b/CGW2SM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..c7c253478747c91f645dc2ead40da7c334190baf GIT binary patch literal 2048 zcmZQ$U}RumVE_XI1`QxB#K6hm6C4un=j*DVt>6Y{1^Wd1I{HCWj*_DxFd72GAp|&p zc|L-ngJB253kC^B55@|{6^u6+IhZV%GMHvConZRGq`@4)+`$a;E3l+sa7xX~OD!o; zKn6ag$=Q_%0Rtc~2B`-XD=w*tIjKboj>*aSrFkXA2vrCcNWD2oJu47<~y7l97lU Sz(D1Oh9LE$U^E1%9RdJ@q)}Y} literal 0 HcmV?d00001 diff --git a/CGW2SS.NTX b/CGW2SS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..ad28335ebcd260ad6b82e71b7c02b3a32e3f9155 GIT binary patch literal 74752 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 Li8UQWFCPB~tfH#i literal 0 HcmV?d00001 diff --git a/CGW2SV.NTX b/CGW2SV.NTX new file mode 100644 index 0000000000000000000000000000000000000000..1b081451870cf380ec043f88fefa378be0ddb213 GIT binary patch literal 2048 zcmeIyuTR536bJBkcQD4U!3YL-BqRs|>?dp}mbHW>%et&x2#S=^jAhMA+KwLvheDxn zC=?2ZLZNUd6pDWUg~D+6)@|WmAbm-%&HLouHD7TNAOItPwE%JPUV=GLRK3Vocu`Z- z9))X|K$yTkOdt+ru;3DI;SpZp6MkTxtdbpaK+eexc_1(3gM5=1U8dV~pStv#-qUCL zPQPfBEwU}9Gn-wpJNCrhn2bkWC93K9T(RudspVd9o=HfEh^OS(CO6z}qs?V)AdCqp zw>n4Oq2o5O&o>d|yo%%c$HQ4^1S&x5y2Cc-DTIjtN*&KPZCegYAVdXJ&9jbW4UW$t zh|3SEtwy_h(mPqKNrZ6;ju_Ll`jST&6`=cTyzF#ap8N&Qvj{N(^{P@Z)cyvZNQxfJ zAn1dx_{bwn3)ovPad$E6VD#qC=n_F-iaW+nXT O^IT5!!U_|R3H$;P^5g#Q-Ltr!nhGz)yFt{)zFw`*2VA#TN zf#D4U2crt317i$h1>+RP4UA_PUof&TDKObEMKF~xO<-EXbb{##69cmhvjuYqa{+S? z^9tr8%%G3~mLd$U6{)!eC7Jno3c-mvsl^H*i4_VUIVK?X%r8$=2rW(p3o1YWNDidg zJ29^~u~@+;F)6ZIW8JA|Qou5hIWYsBi*_1Um;Q YD1gnStz80L0{=IG0UW~> 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 a?U#vg617KE2HDB%7P*TKEIP289rzcwYBI85{g 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 u>(7?L4rMus@g4zrg?V`FF75)Z;JzI7 zsz<%*QLlQ`t5>~x)tle{>zO249E2*Y!g^EnfbUl`{d)QO>t?a239(Y}vqCJTzqg3h zLV3T}kNR3}miT9!B|5ya@aMt|EX=_FXa=^3ed1YhOnfH365olR#INEHv9z|fHd{+- zgW7@G;o2v)FKXY^eyIIY`@I%LtD;TOt|*Q6M~9;0(dW_E(f85M(Qnb8(X#rw`nI~R z594?)Sd)gR#H!Sof`}Kh^f#v?x?)YiP){dR~_^F<>gvn5Ropgi+ipIl!$ zI~25^Nspw(wv`|(ctPpS_q0HZ0xAA|f$jlW)zp@eB5__IPczsrr|^miIUTa=Y9=Zq zVYgEx?qf17+U%%uAnci9oX$))Gw~aVnPYkp)T4%}#0|ruEoL&++EOI$XUYnjU;|0e zbxd?I=*512-{&|)em5*t8i)-$QH(xD`YHv^@O ztdA-LdTWZx{r?J+Yhd+zDHrYYnTj5taiRIG714529#SMSP?jXJO~=wkCM4OII^0%o zng$6)qES&tn|63>_n5q-Qir!r{#heV|M`DCb&E&H$C*SYuVu;&rDZeoJm?E2M8#54 zL>Ci$IHz+(84w2j%ru3m!T#g7tU|G;NMOn;nrZSXz69#4+)IlaM&0MQ4(?y_Mp)5ITc*zcfoT3jq$T*6`k%|V5Z6)nw zit}_*m#(a6#`!EqGKdG6=*BatOAn1{yc?G=(XYo9B>cvQCxq815-XVcI+mPEpjBfU z-#8v&qKgA%YMH#Vfv8Jd04Ne2kZ<4sg@K-8$~=s%qHK_*md~n319`p(Yd&&jn5cDL zSxJ$|nQ&j?8Vb6-qM315!6)~u5#dh%@9zJhR-Ekpe;akF7>-W~bnpfy{Fi`hBj^Or zLXw=0Bzcu)x)@}6w?*YQ?4VQL#wS>`1v-;vpnkf~|3yM5B%DrFk51aS(-upFcpQX# bkelbb%Q7MUdAck=lcsT@uM0D9M$W)rRtk^K literal 0 HcmV?d00001 diff --git a/CGW3CM.NTX b/CGW3CM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..e8bbf72d121c993b194abc1bdd16402446b85312 GIT binary patch literal 44032 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

>Rp2Pq8)$MEk+QI79Cl%i~v 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 z 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 literal 0 HcmV?d00001 diff --git a/CGW3CPO.NTX b/CGW3CPO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..5af104fcab2423036bbfec009df63364b5e6b943 GIT binary patch literal 2048 zcmZQ$U}RumVE_Yj27Mqcz`()a92y)F@9CnTtq>68?-K9q@8Sw%JBEb7n86`I8o{oC z@qVGcI!2m6Isbr=_%KJGP*;diqvU7^jE2Av2mv+*6^3YrNem|$7#PhN^B9*h-eDAG z@?vUa+QIamNsT#{c?vVg8*D(VfC_vgK_voM%n-;1mH?>oAZ<)QYybg>1?>bSF>;sNiG(nQ3BSU|?Zj0dl>Yr=MrA2iPBmzMeilU=|Vq N(l!c4LtyZP008(CPv8Im literal 0 HcmV?d00001 diff --git a/CGW3CS.NTX b/CGW3CS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..40c5f2426317cb1e13289168a0127b3222b87131 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/CGW3IPO.NTX b/CGW3IPO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..855d8d50d2a8cdd58c5461cbdd6d4c33fad02292 GIT binary patch literal 6144 zcmeI!OP3u}6bJBARV{*$MvEZ0Bq5|xb*gSvT@uo|TXb^Mw{_lx4uW_GK}bB4NDw4K zgaq*z8Wo&dry$tj+@c+rcpxI(}n0@BB`Of@g zelvfVzfFIzC@6z=ur=5j91Knd-v>Vjr-MHO6Apw+!e!w^xGmfj9tux|KZL)8zlVQ? zebM}AFj^6`DCtDOm>IL`N$QeJk~mSnWP5=QZ^_tvDo8^md{w{^l`fd@^IW~#uTB@I?YF=w~yc4i|^>9^Q?yLC%)>6C3Tb63y z1}sR&yHsFbo>0@ z>Q+SKYJw!2(R z*D~a-MRQyYE3{@7!svY6URx3;I>#`K>UTs;+bxDsP8Y$bRgpyK#e0L8#xW?SaZHHm9I>~QVoSuduZ7W`JDSnc?em|x)l_wqQvUCPQU04S z%75-H%QZKXFsi||-g3%A;jN(GzI8CG<2?wYzT04QZXOcTzW2fCp14;`_vv9V?Yk95 zb#%X&wtECdwY6PL+dbf|Om*HTU=+ubutNJj<&E#Gr(u-89WXktUx{g*KO?4Vc@{=% zc@9Q7*eRy#d$cwiCu+~b=#0Doqy2ahMsw_fQBGg-#`oQ0Vmj~3Fj~vwFq(IdH-4Xe z1xD|hufiyfcVJYL@4~3=UxQI>j%M^M=<@sj8*Vl3{M(Fj{ic}ab+5Oa;@c;t?cVZM zP`d-(O3K$EZ!OxV_h7V7@55-k4`8(B!?mR`^*sVBb$$CQOIl4!@9+nmrE#1lbe2AZ z(cN~`n@x4RkGwTwJxd>pX}e=En&T5OZFd|-zmadlD7KT{a(ci199HOA|I%AQxjH4L z^L|rX#&z(ux2Dzc9QB_6FauFH&wrmW%Uvw){JZymU%#{6S*Xpu6ZrSxImWzRo3*H; Qeh0m$mw{dex|)H102O>)B>(^b literal 0 HcmV?d00001 diff --git a/CGW3MI.NTX b/CGW3MI.NTX new file mode 100644 index 0000000000000000000000000000000000000000..31007ce211ce462652589a32e9ffc6609d8d4a0c GIT binary patch literal 2048 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 literal 0 HcmV?d00001 diff --git a/CGW3OM.NTX b/CGW3OM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..635b4e00b80ba49189d0dd12400003ea5db3abe5 GIT binary patch literal 8192 zcmeI$dAL+_9LMqB%(N0hl0AgzVrK3v_Yy)`)26IZ2-!mj*+U4~LkQVJ2-!mj*+a;_ zg^+#Aa?bnIz4QL_dY=1u9?w00$h`W^{Jx*hIcGZ0v8aVNd8v?Ym+qYIn(mVxk{*#Blb(>ClAe*Clb)Y$mg$hG%5=;0 z&kW6s%#6)U%uLP9%)}){-!7peM?Ra)=1Z}qZMCt*i|f}FSl3KeD#q)Y+sd)Eu+_xY z(#9UGWaUDg#&W<(Op^8+)v3W4_g7dFJbAW8c+n)zQnahK-)rv~kWm*_dxF z8}qF#tLDAy*m!SeS#n*iYh&GdHumTuD`Hi$5*@5>qvs7|W!7zIqpSGj)t`?tUB!zl zjL(Y~R~Y@piz|!{B5Kgl*!O=tXvK_l7#Ch|HC(^(UsM=<#TQ+L(bq;c`s!+Uz#+nYovZnS0xqxsQ#R``VbfpN*M!v@vskS@PXBz{bow+30>}8##8d zkz-d`@;$bjjnCWN#(M|a$h(J)ynD*3>3)!`KnH_mCEmN2jdgp=%Iv$3tcGZREJfMvjOYbTsz;e@Qe=a{tHoSCI}cwb9{aHaZ+9E79TQ zHaZ+{qnoR2baS~_9CzBtG1*3ryKLmR+eVIiY~+|?Bgefqa@;3Np4;xX zkz=Zj91qyY@t}imbU4#ShcDQ;7GAWG<0Tt8Ubd0r z6&pETwUOgB8#!jl@_fgTaJJ8O`a!~SY)*rGcUW)a;3;} z$?p#B7Fi8O2g}*$p#4J2XIaP09Tr&*BU`*tJWD>FC0E8amesIF&&YDoy6R%IF8a{u zWf&@}W#$8H?0cY%J+4@2#eDqSTjKMsv?b>}vj6gE-kA4)vk>BPll!0k%b`^WLncYe_F00wCSKwd`(7jnFM1~kg6N$fh~9e;1kpP| z5Jc}i2%@*I&fU59%$zyneAwT9@$)9XU%iNhwUzJd5gsL3%Y9Rb{RGsQ5 zH@B2~+9$L*qnyriM{`e8M{|q*dqcTL|J(n3@1MOH=*_@?I|GhtR#Vgrb-9|a7OQ2d ze_}*pOk#3kdSZ5BUSd&VX`)ZkNsdlVN={48O3qC#OfE^PRDH@zb*HALW~Sz(7Nm3r zet_Q@*L5=mSUcKUyP6#T(6&sl9|ijG>JMuk zw?EOE^kurmP%M8D>uM^Sk3g~d8?AFz?XifQOy|szye(*n{>#bv~ ze(d)N20gErcGErL>NX z=38ik80Z#ZCpz?ia-Ao*0Ma#q+ogh ztXz9cy*`31Cso3^yf~_Ffih`|TEtkzk`)B|f&*w_S==H5E*lL2+p~3lD zTG|~G5)`Xd1>4+O%zEmg@pZUh&EsoWkr>1iTEjdvp0g|(UpLZdJfA>S9krVOd1$>d z2fQXW=W=M{TieG5lTHV`1scz93C-`%u26q&X|2R_F`5`1TU+@Cq4M^&ww6v8qGNd* zVsK9L5hzw;0%P~G24cFN{}Cuwjn*B* zG~S|-nwv+q10YN2!Pi^k8nzhL_j zqy2uMwM;{!eIC@^1jXuL!43^u(6tT}tAnCuPOa?_!49{U%evX%7UV#&nu?Zla}hf- zFn_HzuIn9vR&WcEdeZ`9^$tVh>&;Ptv3f^aEAVj!RMkypMbDwOiP~`XcQ;0!(p?mzPXt2$VJg=UF#{2UG zG=6<25~J65IvT&eGtl^c>P$2~M$QuKY{AYE>|DWS3U(eEe@}6~U>68BD{PT5c%fhy z33eJ9^iO4t_PZa7)y394-nX-f(Z0RJSTSZEUn?`v|D2qgM0( zQD|LXZ`RdwhsO4pwKU&*J#H;#?mQ{j(}F!gjK=bmV9yBltg&30-;ZB3mUsF1Sx5|G z2|fQmhsM{N1;pqzJRcZ)FZu#8T`zbq`jWLYkMm_>G|pGh_^=dePb=dWBJZlA!bkdJu#Zk zL13_dgYOi1dxOIkna4u}8!Ff^YrWt9nU&9RASG&~$xF$;zcEXaw&7@eozh;-(XSTs zzmHPuL*sh<_}~BGB{`};lv}He$&Mn;KFd1+=ZE$nVFd{%*@Pq zVPDwY~dMySit(3%a^yMyJVfW}n_MSF1Bl{+!pD#Th6T zy4UL}bm!dV+>TPI{Ow?=xb$Fd&Gq_+`j+>Xk$)=;l-8Tn(L0n2KL7v!`2QpD|3_fj z8i9G8rJZ5tK<9erU1z?g&Zcde&Te|L>G!6V=5?A6YrduVqvi#sn=svu)0tk)Gppmc z;WfVKb`^RHMfu4e?#Y*O(chQ97<^vEC-l0do_yCt`R7zyYj!a=-#<9i+fmAOyAygl z1_up3AHuyvshA(=%^7U1eE)>7eS`n08lN%{h~Rbg<~od2_GR!tBiu{$7KU9U`}`31 zJBx+>wQ}xYp;vxMDc@g`Ut?Nd0O7t@%JmK8iqc8#Zh$Wc@yt-a>80S-Wm^9W!jp+Y z=U~@RF&LV`!RR9f|C{2y=FXIYvGEH1IXC!uMC*TrxZjgaX7u5=<%zUAew27emjewUB&XCa>KYD=}1 zTP=Sztv`qG_V)flzghQ&`a1I+?r^@pTb2)lUnE9UBGES3RdlVD(d*006F=fI_{9*X z3+aUrPeqGSRr{v(%M=%Za=HG1@W$smbH(AjEEswj{1S*u>t^i`+pbSK8hyy%mm=It zboF!;y9#o{tWOyH3cT0~6&bSKV zWnpTRz%>w0G8JRwAN{M5`G2i;&{iydm5vDSk?Gj=5cda5-R?-`V({xAp6nVLEEW2y zKVk5jEj-Y0(x&TXQmvV4HhNNSg?Kj8+79vC5bhZU-!IBx za4pyK6Mm|EQ_5e>I6MS#-%li={(l(aNx`$_R?A;a>yJP@C36(E{wT!Lf_f84Wvg|)uc+gPbe0hs!6InMDtP1}D;{M{P zL<-?QLOi*6CLsf~ zrcs@PAWow?MxfEZ8kzrxY6q=Hjs}(vhByr@9fEKkSUMcyUS)P#5}Hvy4B~!71tCm{ zNe7WGgP$)O9$v;X=D7V}u_xsMi2Lk0yioBtVXKR)@p@sa%OEasmuTGzc3i@#VY+$= z!uig~MG&V!vC9$eCn`H5BZRpE;&dbBN{G{qluHrLH&U)v+>Up#jg+e(PB&7_*pL3z z$o&7WcF+p_(BRCq5U0B>*Fl`_wpKWY)agTXM_dwhi(*+81FT|56a+^kf?i&djng9304yMy&JRX2}CQZiUL5R1d$z%Hv z#O1NVH|Jr9w`Yhjk09L4ApF=q3h}hrF082C!MtP+gm&m-0Uk`4IM&7E5U19~lNN57 zt!&Hf35b^!dT1v^f0_s8DaGU1F3(is^=y}?Azl`yX3Onah|?{%=OCV9i4@N(ZtH)x z-}NHI>3)|P%+bFZng6d^9gMN%_CJWzEw|SZ&bQoNLAYp8vgP&~#OapX8xW^kZZ9F6 zZ@Ik;ak}O9q2iX^MRRE0ggD)Ddkf;!s(Tyabj$4>h|?{%cOg!<+}?vY-Ew;$;%#ZN zq4xpA>3-KoirY3L+wU6vxo;$BWd45wJ4m*aPPg2CggD)D`w8N7%k5`` z%lss+&My$B`(3|6obGo`d-MNy*g?AG_6Nl2mYXAo5Ipe?#Mad1)2CZ*O%SJBZp{#< zTW-@KoNu{J4{^HXHUq@zmfMUFr(13_L7Z;6%?xq66Y895T{#ivmu;sxtW72 zHP1|nZn@0?abGsDphG_=#OZ$5To9-GUDMwDp9gl3Zn@11ak}L;AH?aF+x&`45Wnu0 z+n*p#x7_|xjn~_9TL9v8%k9q)r(14+v+x*OZVN)3Zn^yx;&jXH?-4G8ZpSXzR>wjR zr(14|Shy9tVEZmE#OapX!Vss4)Qc-_?IzLvu0AgG(;`Ck~qj;RK)o~E_)8y>Zu@FxtTP4d?&;A5^UFNnQ5AhT`>U3f? zUN44r0>o(y?IeiP7~07Yr!llsAfB%5|LN$sW@JuP+zz?1Q(dP+oQB*^gE&nwKhwfB z-sQ6t^RpqIVkzdPyQ67<|>3I{R|Q2YKY4g6Bgzggr_7~5DPQWN9qoUQ%CBqYP_B! zbvMMRBXuXlsUvl-;*)Z6czd8=&Yya@{%$w;IT{u7#f;275cj*}qcVb3pD_4+5Kl^q zNflad-F#&9uSVwogHZ>K>led9zaQe%LVrZ@INsJn5U1YO!wBcug^xj;W*0sRahhGY zteh_P!*k7@;hy$@%t(_ioNzmfQF(#zVKh(3au5%v9Ke@{c$i%T@D_xRSY52#g^%W{ z$lhI$0ubRpd6K396Z$`fxTsu=e**Djmf)X4Jk?I{4Ui3M*nJL{(o83!9FS9QIr}0UeXQR;_=0fzRKBh)3L80F2{2){x!tS^4ZZp zI9yR#<>m7m#f?KBImIcu)qy9WOa;%N)-=*>?I9y5dgu6W;2sU#EAT)xQOH`Fin zS)%e1<}VHY2gFlB_VD=@X zr>pIsA)e`w5*me4Pp&xPUe2VrR36FohW~6HTkA)2<}#7&EQU193mu5`-qpWJQ>HA)ZWyk5?!~^rvZkY+SMDzie)NI!C2K z&p=19B$4g$1uDy&7_tyh~7bWo3E96jx!=ej5tYtnN4usGDY6=)ne-wV7$2VyD}2zEE?) z!tst&kK;7!{8wSzqzjxEr*~}3{>I{e^Jxde#XGn|X6c89<>NBi;^>(OxHY)+_~a81 zr`v^3S-1uxJeKADB*e>`V&;xlE^}+1R@~k$j5LL8x@%d*!b#qSSsx}kRf#Oa3KJ`m4zbQP!c=DWgjj?qw>kvULtYweQR9Q;%nbMuYC zpVx7>=RezWdlBL^#r!3N^Az*v5YAJ~Uw}B>?=syT{VTTq7g3)<9pqW=&qADLxgV)d zilswomis{vr&;a?L!4&09|Ccj<$fr{X_ot85T{x0heMoZxxb?0ZVe1c>!V?=~G2I4fu{8)(7ZQA1?PE*W}hd50!KLO%2#eDSVzLB7j`F|4X zAkT6?8R9g{{S=7PEca6(PP5!kgE-A{KON#U%l!<9(=7KhAx^X0&w@D3az7j4#50m7 z;2en4EcbIEPP5$4gE;msM40m-PE*V;fH+MtzYyXy#rz_O(-iZIAx=}w&FmZftC9JC zDe7R7X1QMmahm0RImBs}`xOwUS?*UtoMyRS1#z0?el^5tmisjb=UMLmg*eS}zZT*+ z)FBVxbr7dn?$<+{X1U)0aU3oXVQz#tO)VrGhT%_P0qN(8on4=?zcglX1U)Eahm16WQ0pU?brp&a$f@C zG|PRQgp>Kyc_0U&RJdTIHGQ_Eez6!*thrTMrsfWHA#HokAI>f1m z-T`syp?5-@9s=(|ICqc7z~mPZ8kzq&*g@){kB2z*&?i8gdgwh6ryhD9;?zT51LD*} zp9pd4q4y%3d+2=-ryhDg#Hoi~fH?Kg2Ov&8^fe()J@g{PsfRuYaq6L$AWl8>A%yco z;FBOu-Q#I*{!fM-q#pVdh*J-JEr?SOeQk(S4}BeoQxAPzgmVx59}uS=`g#zj9{Tza zrylwS5T_pch7hM7`bH3^9{R=*rylwy5T_pcri#b$&^LoP_0Zo49N54avHV?Hclk|- zQ}=ka%z2jbL+ehcE%hkjr2I6m~d5T`!$ zdkE(~^oJ0qXBR$zI6b@Yk-_610{WTfSu+37UJ|Q_csv7NpUjN-&?pQmeI4^KSG?I<^Boc zIBiXY`3~XyAoULrr->y$L!2I@{zdT-;R1Me`B#Y3aKUd7r~d!%5T^&J|A06>NbSs6 zS-Z5W{2+A`#OXomW{A^+)YIPlpB{D4yqXE0<(>iJ^ep#`5T|FkXF@nX%RMv1=~?bs z5YEqX&x&x8hbs4dHi*-M)U!jJ9;BWF;rt-=oDio6spouXvn;)PGVujx#dt&Hn|eJ6P{5_ks|o{?K0_PPYsHrg(VFX6k3T z{|a$>mU|(H)3e-vk8pVhu)ST#HuM&TI5mo03y)zGF9LCD6fdfH9HV&gYP_CNycoo( zQM?4i>6Y7)5T_RDQi{j1NSB5Y&=t)F^I&I5mowK{z*xmxDMp zidTR*HHupmS4)vs7fL{!8pR&OsZs1hoEpVRh*P6Dg>Y^Zry)*_;ta&8QQU@bUR@{) zacYsaL!4TqD?*%Fq$?quTcp$8{9grikQ>FTBAgq=t3jL^#j8V{8pRz5=SFcS#Hmr- z1#xN=cSD>S#W{p?qj)^TsZl%u;oKgMLzkqum9|!Z%N+xrf6Lr(x?Mh*JxF zEyd&PE=-0v-CdZ1aK5{+4#es1!rBn0y9+DI5z}NMI5V1?EM*zGgSsz4F_NmH3(>eI zA@1iUui#3NhL*r33|5fvHl-n+EaRneX@RKq6vR^%Tn@jNFY^$zA>8wOavj}nr8DMz zsx1YBkBzI5`JaIuOo0yirgJMpJTsV=iXLD*R)KgMz)Pm}l^~u4cpywW!jmQ$u_B6n zFIQ9C+Fhg*dR2(i3Ei!@xZH!KV$Kw<@yc~5%+C`_q3$zX?Sgo^yD-$*D-|n7;;SQE zUW(W1WfpVgn6A_e>}}~B%J+5`P3s*H_p0&kTt{y%z&j!CSK~p!7T2_%tHMh?`JlQ` zs*My<9uM(!fCpNkG}IZ{0H*Z`2=@|J-KDB?*ZFF^UhJX=;xu+K5#lsIrl@HzMORph_?lSnh8azOr@6@wt|Hh^WBkMXf(wH{W1KA!3Q9o4oW|b_<+IJ zR9yXkPu_8lOTQK&E=h68j7qJ-3_@HSdR!^Cgm6i_B*F|qT;4;8g_*=~EX**%lT!Z= zkIZC(}&|_iNf_R2i=v^D)W)lbsvkt;dkrph>x{BLoT4ym|%DElALw))F zp+0@Zw0X=%|7v9ZuLnEWK0enKeFLf<*9TVkWQf`|!a!v&J1`uy^ zvo&=k1AIe-dkOguw!Vqt!>#=tQnygdc-Jf!uy)Bt5cew|G}dJzTysoUH->n!3XiNy zgKrA)R53Scg~~^wUKsqJ7M>Tozzns>KAi9GE)2WIqO5e;;G09-@9F3r?@r3+hOJv= z@Xa8e96uyx8o*bSkI1@aexqeMdBd&VV)kE{e>bhK0&#!1)ra_M5I1g`^~+4#Ve8$B zTV5G0F|+GD71_rR<$6s;v9)5+{0NArJgERQ@-o7#E8&8q1OVjU?9E8#F6=XB1@93{Kj(IJ4CdUFRVA?UOHAwg zLOf%a2`uvlUkl;w;xqQUg@IhLLkf&eh_?QHBgEkWy* zgQd}0URhnNwa9fgcbsm;Rd#u3C5yiNgp|KJTT1*7;YnQTU~9*DJ&=85VmXeCZtpl> z8azz7we%2nEO&OC>7tOE2&l4?J+$2&=g*3pfpiCo`L0}4F3=i8(_Lq8$5}SQCDlP6 z0v9Jz?k_b#*t++K1 zc-=kOab|}a3E!sEM}Ovr62zYWg72;CVRWFkMJm401HC&!92dou)^~!q?~jwHmHBn~ zsJgRx4&~Yz;&Pxj0r6cRo=T3(LVQ<<%Yk0p`fd=Xr$dHlQp$0e01$_v%hB$o)wt+Z3)x9mmlk7Ha2k{ge_w6B`W&^pttX+}q zqD!6Yd2$@tES~md9^kQYH8TGo){Wru@e)#6*s$XEb`X7j=eR5Z~g1AVI@9NeNH^+rxSGR#U zJubX0#3hjm-_`NDT!r<#d+%MEN?i&0b2mbA>t6Kt-;2j!UDIUjW+yvs( zT-X%i)Mnfa;?!o`9OBew{3pbz&1i1b=wFS@|1Dq#soAgdmXBS9nc|5DUJ*@q^>cNxS}5neNVmqR=g;Wfi|1;n!vUh||}iEy)z72M03 zC*>-PN3GZ3S0g;-r^(1%1MyUZ*Nn`6Aui$kK=zuExfbHt2(KBL>k!V()*;0$BM`@3 z<@qW>oZ5_&6pv#w4nv&UjFTZwZN@1Or#9n@CR`Y9jV>-ZR;8Bi{9u=y8L60l`pwvw z`;E^3=V1qHT`lRSX?g|4yL02+z%U-<&x>#Hp!s5X7m;eK5qS$$bdK zsmXmP#Hq=B7{qCq_Hc+(d-n*4Q+wAuH=}w3Dr+IY zZ-TfOQU%eC(>>^?CPx$7emV6wOzdp;$lb{ytb>iLtG3g zgV%QT4v32(W$@ar-ih!`qAeK6DnBY18D~sfjm-bMVFy!T2WvQ?vD1h*PumIfzrU^?8U>v-JgtQ?vC&h*Pum zC5Y27?aK(~HshN$_*8AiS0PRxg4ZBUZN~pWoZ5`9L!8=-)871lOFJ0HY<(Nz)NFkR z;?!(?7vj`xeGlQ>Y<(Z$+-&^-;?!*Y5aQHq{RraJZ2cJG)NK6(;oNNf6yknprqvo! zpFy13jGsfC+KgX7oZ5_ELY&%+Um={^j9){X+KkiQ{QnkpkejXFD;~#e{SM;PZ2dv; zIA-gQ5T|DAPY|bO>(3CUX6s6F@8t-bi3e-isvPJcXJ}T1I6XtNI>hN2nl8oToT1sh zsUmxv(*^rNoSrT?7~=GF!I2QBrwcquq)yh>E@p3a@)frt(w=9|E=i@6q27*Ct~-3= zv5cXUs>bUb7cw6i{i_lGKMgyG6P%@I8HnR-Yr)$fuE&LR#9cFNJD6mo@LtAoMs|WY zt>v~O#Az+JT`XKHqv51@k$pFa(?V*yL!1^;+Zo}!klL;gr-jt^fH*CrmesqeNpZZ8 zT06vPsk0R!PD`Dwgm9C-in9w>hB&QVwhF?@xeN0IkBO_1`M;;$`Z(p2R@3pYas581 z?P8RmYldQV#f`ZTokKA%md=bkqi66Ah|_9Ioz-}~+NFDISK|~T+6&^e7|}iur^Sf6 zBiUtG;uIt4f;cTkGC^_q1-YOUiKJ-;r@DvpMf+r|8TTB->B-3P2@(`!hg?b=P zs|)QW=YNgQCzpNxxAt6Q_(blGaC5}mG*Eq+k=a-7s#FIs|IpFBhC6W}K)ih4Kw)q& zZ%VaPE`yJatC9J?KkQ(#m|Js5o)gLK)ys750L6o9Gc5x{0(imqGW7?f6pVam$PAOg z4}`d!(Cv52A1M@#-Bnt_;0Gygo2|^2JJ`athORfJ^4c!4Kx=a(|8NheOv?;l_cLe8)^CyS$&3 zKaz=zobfcWAFFtwyW8!_sm9kC7EbV`mItp#^9$x+}8=+5>~{L_6>eI#FN&{A8wtL@1G*o zH4T0S#50Pw3=ZVF@-m?U{LBCk&MC*yLuWx;*4>gja%DHdoDFfR1kO=BjuJQ*;#3Ko zr+6GCaK43GN+8!!EcKKM{W*C?3&W-qTR4yxC?02-zEJTv%d{EH(Z3p*|CeY7<7kSD zAx<^LWs1kq6qiDrYKkiqkE1CrM>y9MS1N942dXKqf;iO_S6AcFS{t;E*4=9$PM7Kb zDjsK&OtIXrcpSxY zyAGs<`+@!!jn%)F6ag*tb{Ln$+|mbO>!}D2(U!qdL2Pe>KLGLYvF(()Zl>jy&`vV= zeF!gC7wwSpqPr~}Fqj(&Z`!vL<%DrD@kE3#*)z&edGm)dfzc-WN0oXd#(9glvsfK+bwqqd%dIQ6?;R6LH(cmd&DXS}3% z9G&qp#Hr4Br5dlNGhT%_)fv;+{6F7uHjob17C7=fR9NO>$Jt)-y7@nsOO+dwLnDP= z#CEjue{q)U)lx1{aZN__veALws+@c0I>&iI4l9qu6U`{=3d|j3C?3abogU)UY@JbYYjO6v zijr*6IV7wC>}?}d=GJ|Vt!IQj?VZI;#6mh{@gbbG&28x)()zc<7(?y z#p9^0-ylxa*6-DLJx%ck#HprmW-_KQPM7H!Ax@X+nIKM=>6r~4|AfvgikrnKdb?oxMT%8hjOJmVts1X)LT6Tp}BZ3Tw9;G!yx9b3vRQxtZ6(V;s4eAL8`L z&7UAnkKD|Ia4(T+O}VJ6^Ff>*x%o51>5-eiD6Y#iKXS7G#N`YPJ`}Sc!e#%Tl-&L+ z#OaZnzd@WHxmgI|{K(DU5l&*4GBp=gTo0|den;LuvZ@8avHdq$crc*=K#y- z&wV37BlCaJ>JHXBL$kQzan8^z261|ZW(kPXGc-#@c=Z{Y@J(@+m2BKsGc4mEP6JCz zLYyACSyu5lM{bseI6ZQ+48r-5o8=)+kK8N=aeCzDPsV4=#twD<8RFFM`U}LV-_>Gd z4~2>2cdY<%>US-m!dOof^}EbtHu_g1^M66BgX$^L@af+akK-w}>S$YdwY3%GiG(wB zA=o<2a{D{NJ(`EMu;Ovt)#p5W&9*9$=n6Jj`1ya|5I8_1@ z6_29?dLd4gK)>Q~lt3TEsS+qCj#u^SK8d{M&Hp0oAXO|0QHtqQY}e0&I8`h@ z#HnH#6xkzT;wY99#HnIQsxY=<>C5-ZncV8j-1Zd4*$!RS!Yw_-4kNWeJgH|}RUjiw z2I4e!k%oA>v$sQXE~+on`ihFjQHm=;JT!H{VWf75XIAi}ByjavB-aSDGQxR=&MJz> z(RZstoa#Fx(CA-{*#E0(2Q3XvRqj^uKICZ1P0USkd(D9}ssACVAJ&iI6Jy3N zB{ANq!o*SN9T2Aqy<71(3cU;AT%qR_kE77XL!2x05qKRhw+G_Ex{JKr2@t1V?i$s2 zJ?mm3#Hn@Bt9Tsiq7UNKy4Y5qNMl`0DCSL#8}k51-|BK_9^h>tp6n|07Wz$b2J1rx z9~)OA^S@t*&$70t`Ltd2cto{WQiVyfYhr$|3I>_6*dF4Up?@+m;bCb=J0U%hX}X zNb4vb$GTWo@i+?o9}uSseSO6(^+*dTnTL4vuSVwohT6e6Dt7~jQiYAmiwpTakSjOAWpU1mWo@ex(I^{DQy99ss#S6c${VW zKM<$O^i~k3%kQl7@WnqVvMt1^rWn@Yi=!!~ zSh%Grm{U9%;&ktFEyd#~mbDSi9m{nTkE4gyg*eqi>nR>b5B&q;)T`TG?`j++upPvy z64*e6iK7J8M>tmk8!8@032X#$ssuJ2f!Fc7roH*UG3+39{Whz{>ncTvbET+wETsr> zt`rrIr4%8~m7?Ntl;RFLhb){b#T_9|mEukir%G|>0FUjv>;iGB6nBL<^<8#TJdW?O zJH)9*+C%X;8fi}pw=@#-U8cSHzqfWUj@sG>;#6(zr+6H-wJ*e}+B!h-IBIKuh*Pz7 zkm7OF)`1A;YU^Od>$+?FG~4@HglMxZO}f;%{Ikef;dgNeF5Th+v-)t z*_JlYcnLQv*H}v*VTs)(}l2k`G zLGkXwkg0GV{5-*wg_g@a;rl||ACyAj2wy}_=tm=C-6qk{BVPd#w!SFD>1|p9;_1$! zDFWZoJJi=Yen@s~&2KicF9q>TS5HT=3*bvbye+^B68|^9Knl;9H!7Ic$Hvu&|G%Gh z(0cU~eV5ZA5U1~QItt?ST~4#jQF&5^3x)31@Fc$%e(BDQ?-=S0>g`9*;p`AkhPZiH z^)feR4v44CZ&EP)&fvQm*~1rlStH}Q@{Ycdm%;ajI336XAx;PKaEQ}^Y?HTKv}Y2f zV#k1G<@zi_pHo${?>EnlX?-<_(*u30L!7?v%KV1WzZ#kUov?$U{trvtR~~lLv2KXB1$Af( zor7IN`feG6cR)PLs@!%#ygk5s3&XDURu9wqc!cu^-O3ObO`+9xTch7%TF)We4`mP)nxCZZ0+&)NYD$titM3zU=;1eM3k33muK4S2^;sd!{IRVMO;@nLN^(cU3o#vQU##P~5sr;?RTrKex$QPlQRQ0@diW^xK!QD4^eHX=T{qNUk|4y6A|M!O-OeV*PffJ30-N6GOo=S~NK>R?6r&Hs^Qv|Ia1o2Fow0HOZ`r!}{jS+w!0r8}tNCs-y{)B1$NQkFQSqvLB z-y8fWh^GY)UX*En#NbCmJmV+A@W)8}7>KtC4qHDK;#ohDfwCV5@peBd@;g$P;}Py9 z{8SRQegecj!Qr@{2yx#};c+*EIr>*4^Z#Vn!IYoExBe7}rv-<%{#1x({1m?Rr$JoG zT!;0YN8b9=A)fWK_|~5R@pi%Ctv?gt^5$YGTw@DjzBjl0EQou8!;v`~;=Uh69PQs= zT0aNkNx@<3=R!Os@4|$#p9k@@lnV+@dW{t3e27cMcs%YGKwRGcjmP~$h|4|2<9-pu zrPL7~_lps3B*)MDB@p)nhvRN;)#zW1%>T<^2a`#%+FlOvRFbT=S3o>1IGl1Jl9Z2cC9OGoiicPqs4s}5u)->$e7clB5xb@b=H zk)V5QlZ!v1{l4?&EB-s!XlrGlgKtd7PDZ$w7_m85!B2!ZjsKkh@pQ7)lWVXggGAK)hETv zA$P$~MYu1A5zQ8~eR46J6sI6OnJDjaj*S1UC%>Vq#g{|sRRdWGxm&!E{X)g$q!!AFcR@*XJZYT9(wmYsz<LSp^GD&r+zG1jn~^j;K%A~F;}FhQmsZ8?Dd)9%m5E&b#t5@4#A$Xx z8sp}0dtg$Oo0hMp^_1e)isEU?UB17Z6=(3}AWn1W{;s&SLzi;fYC;#TX+6VmJTePI zyv+@FZmo`nU0np>Uc%HO8F?9D#>Umi{P(njlOP|f%a+#FB}ga;y!yRZW7{2 z^9sI^ml?VQ#A}^U`K-ZL3h>~ad)8v)vBfA0ai3+mtqAcXOZ{kvc#0*(tqk!r+jsrD z*r8osrK|N;#)T2iS4MYgcx9byF;=1(_rF4%E~JZKJhU0Lb(4f?T3-m_Wp^P=q%eEN zB96fqgm}7aEm~$*fd38RZFUk^u(99L9pFnrJjh6^Rst<~Bh1*i8kzq~q7EW0*V1h| zwm~jxNb7&carz#pclB3f4(h$#<-GxYw3ciX? zXj?;%$f2y@t3jL^#j8S`8pRzJ9%KK%3*vPDzZ>Fo|9^Fa^Zox$h|~T59K`AV|9Hhm z?CRENbn}Q!fH>XNH6I!MtC9JihaIF_ziU8T_HyuxB_={#HfQioQ7^(h*=?yc0n8}( zL0q;X@Lo2X-*i zMuu-)h-cf#@cjefnM9Th-+B=Dv*gyV5Ajr%$i4x@Gg%`0h7ixT6WKRHcw3^K$i6Ye z{dOYzCJ;}x6WKRKxH*grUg#|k%w~$mc`453iks-7J5V(5E~k4&|AaW*GuomWFUKx* z6G%?-g#kL(Jna91IE~Q#Tk$wAu-Ovg^aVCXpwYh?ng9LMiDMZ=t<8>7elR@cNw}(3fS`)|2coa#35i!v)c?RkI0Dbq;N) z8n5Sammpr2UENmcfRTL?#A&MYFvMx9^B}}&?(*q6kk%$pn*{%C_qpP`OxD(ISBJ&_ z*Mc~8b*4a^x;p=`aCLPusn!g9P22hq&t_WNA-(~^y+pRv^GEXLu8xhXk@>$K>Yz`( ztqmbAu3vWKaJXhH)<(EE3#~Py7vSqaJngq8Ve4Bc9w(Q3BZ$*n?u{YtCrP^SCJ?8I z)SE(_CQ@$(ahgcIImBrq^*T@AZ6R9tfIcI`E zEs2C3j9`hBmqDB+Qobfd;7sdM@GeexY}%XuZ&)4F7#fYxy$p?A3~f)=stirjnI8+;V~j~pF^BR=)OQWkI;RBaM`A9O~DY;XAr01v1xDq ze}p>7BXl1_oJQz=QanzC?kkAX2;J8ZrxChuAWkE6-$I;5=)QwEjnI7$aT=lf0pc`5 z_anq<3#9wfjEuO{R(j!q5BQuG(z_~#A$@?4~Wxz7e`8+M*80x85$m&_U3;x z>>!QMO^0wEp_?A!G(tB6#A$?XMu^i0-AoXt5xSWnP9t=)K%7SCW`#J7(9H&M8ljsV z;xs}x2f}%TZcd2P2;E!|rxCijAxB`Ns8-w=;0~X+vHq|@Fb3*4Kz8oDQ0=n+g%l`urxAJ=;xt0PD8hM!eldvC2>s#^rxE%kAWkFnOF|s4 zF7nJQ1#uc49~%omBl~|#!w%92{W1`z5&C5zP9yZ^X+Y1?|Fqi5xe&+Zg4~(&6^|34 zzX0MiLchFr)rz6ZIrMVvlIpb87Kqab{c;ee5&DFM$B59c0C5_jZ-qFG&~Fi`-0_oR zrI>CBajekguKrtbD+rvnvO23`##>e6^@6}#Bb*_ReMiOBZ1s|ILI)=F>3nGbS|9k9JCv6b-SjoB0k2l>N{i_lE-)@bEcCdWf z+Mds@>DVfY%aD}MVbJ1CD?ywVXIdHIyg1Wp5U0hNR)shY7f4q- zVGyS;Bbrs-yJSYjROr!1jFy<01>*FHe0lat>z4kf6=_~UIIl?aS~XtJTrjt4^sh$d z|Es8j9^K`B1K}jfB?Iv$#HqRPI>NcR@Rs7Xxxk9zybW=mRk?XbaeJv_Rc_veIIVK? zp5oSomMS+Ox+nwrKE!F+nhy|8VwckT$BGA0Q`6smQ$s88U1|y`egyGkP;F~cJ~wPd zW6fmv5aQ{e+7`e+3Gkr8PMit-DZ=@L{=6EmH=(~k`2QvQ|0~o%KB2#cIGxa6BAid? zZxoL+p}&PVozUMY9%n*-4{wC*PGBxnTCX>un-I&BGAx?{8U9AIYC4tbFVqF7qnx^?*h~pF!L9c~4 zP1C#%;xtY3dWh3B%^M(2(=>%116L#S|0a<)n*Y|Vr4T*)^r-Ypm0EFKGZ0rp zoMwt%196%u`d^6S92ybkT8Pt3(d!_Nvs|S0>mg1vMQ?yOPArkuZ-h8a)4U1cJWcav zh|@I9TOdx;G;f7C&KZ-g-Ue}+rg=NWX`1F85T|LHcS4+|X^Qw`;A&+4-wiuRGez$~ zIL{Ql7veNi^gf8wOws!xPBTRxfH=(*eGuX}ZB1_aLlCE#q7Ory9;AK*;xtX`QHawt zt;Z0~)3hFkI8D=f0^&4H>q&^yG_9u~PSdoWhB!^rdIsV&O=}EHei5OO`Trd3Ak7qe z9^y1p>;;7LOtBXsPBX<`f;i0-dl}+1Q|uLp(@e2fAx<;JUV}J2Nc}&E(=@HuAx_h@ z-henw(|SwsIB8mMLY$^)EoXKY!%&BWY3o)OTpr>yO{=vUuXm6-0dbn9HSNuR&!nwK zqitndu$N-BLY!ubB_K{S#e9gLtg3lfL7WC7&xbe-MqU7M8jQRU;xrg}5yE*e@?wb7VB{qbr@_ceAx?vl)872Q z9Cnb#L$821jfY+dae8d^Du~ly(^$@HipPoNJO^xE11T>< zoCZ=}fjAAMyb5s|Nco@QaRMo?L!1Uu-hem_q`V1n8c2By;xv%*HpFQldA3&VOaz2DOjpcj_$+=6DVszX+JfUxD za-Kza5(iRlYjV73hhA)P%PGcg>s?LG_R&)=xYbn;zPtQBDd?xT)m3a6J=El!thm)x zypTTD|$S#AzUPdW7>p>I@L4fz%lxP6MekL7WCsXNEWp zq|O3y8b}=z)4!qp|Jh&%X)Jekh|^f^91y3m+&L9DYOCIhrRRb;P5qpw8m|{Ao)_XY zQam@rvC5Ulxc7BM{Fzvfhs*?=5Wv0<8SMNcb7W8=s;xsezL&Zg& zx+SLGhd9lQ`~cxRGxB4I)6B?eZ~nK7$X(f>%2jUiKu3Rft|(TZ=Pgzh#tnWjom&~= zzEAK@#p9%Y79dXJ|3elYBmO@L;$`2Zs=q=yQxq4Yc(7zj;>gHEg(ZWZCzQh1r5k)L zh)b6HP-ky0{J4$(%~sA z>_`7<#Qt9Zc90fl_$$O|afXGe@p_wLe}i~=hSqF~{T~V~1XD;vx{In_{lw z_NEy0p{4c3AWk>M7KJ$76#LYut?(&VFPCQ*e-3fFDfR`#>898x2q!MLjLc^cr#n(# zLY(eMEvEx%#V%-e@!}AtJ5r-R_l*RN%>N}}2kEBRQV_?XACY7n#ObEk(h#ScV#`1r zhulP%Wg$*C#g|2=^pRgWnmEgm@~MNJC-1(h05O?nz~2Ec@3G&q_D~w*C#meUTi?{w>6PDboyF zHxI(-UyaQF?_mcsX)=62Ks+l&vEg|9h;Vb`@$mfwaX&+D{m&4WD%bed|AO#TN-A_i z*?&cNTHgMRW&aK0ejAbfcZlN``p6UY2gEaNM0RK9ivHI*l+Lyh*_#laNo0xa%@Fsq zWZb8Ncq&U|pC00wERlT%h-cf0>@y;~EzwS7p9$iAJCS|#=f07kk@=rOi*q}T(9Npj z5$EXlED)zhzh_gt*wNqB;|})byIsGdcerE9VDLi_oiNJR^fRrp#|al^AWp-DbEq(; z^?KpLIU!ENg|kDPh70Fb+dVYx0_}`xp&f|XzK>Ytu{BI4j|KIKz4QNH^XvnQs z@i_62K8X9Q^kYB7lj+v%Vs5^FaHzMVBrkIbUP)pe+XBRC>Gz2cPfMtCMBCx&GJtSi zhqhRa*9&zFL0tU*DE>F%y(@zV=Vfcxgg6bPOhPz+3Cu9Wy~;adbU0men*FbF>5Psg$u<0Pb}t|zsMI%P&l|uSI5THi2h#}b}*SD9sCEx zQ)z;)2k~@foJ?pieCtCzBT?=M)>puok={UYwQ{+Kz9Gb^hrSWSC2bYE3mZdR9D3|7 zYzlFchX$RI%^*(m&^Cv-`2Se;e?nXi^kLbzfOtFe(6>am#Q%uN{cnhS%tQYV#HokA zHN=x?GVa?zTwVf&UCe23{%;36DE>db_1i;mz0@KG_ubfF84kp+z%TIeixxNb-H z8t%k_U>v-B-#}q-FmHAkE0-CWzd~F#^h$0qx8_j3Sa~O&Yw*88JUJ3Izrx@P%Kwot zokRKF?v{Ze`4=zvUfhd;eAh&2f5^ya@MR!wb{F09M+!w_gOye=_(Cd-Ws%Zkgug?a z8nBC6xb7KK-^GP^va?tit|)#pEOHsy$Hvu&{$Ch&Fx}bPQGSJ0*t@8Miz{B6DQXPB z&^j-V#}W`v24JVWwY$*UQEUlcGiQcwF^FeYFe$zrUBxNA`L41w24524USgw?l;S=4{t2=vpYP7OUTKuMy%JD8QC8}xQQ8+T(eX!?`P$Ya1}QA@+wTByW8!_1taKL-y5-m%it{# z4|YbQkCtiI;44()!})HLlo7NZeP4yQLOf_4;orz_h(>13(iFF|nCp-?yZPx#oBE9r zW^7!I%zwYB(m_)l75Akqy2_N<0)=ByPDZSy8OF}%Ot5(b4K&~q<6UsHM zr^&tXd`j>>I=I90iADoh-en}s-4xhq?E43)bQ#Hq?% z5#ltu*bZ^3?^abjj=nR`&FEi^%>Pwj2dT2!2XU(Zo6GvHrDW@WU)6r)J0r~4 zxEh)N9ooS-`o9Qqs{c1oJdXa~2;x-#{~O{||L+8Gs{hXoaIvuCx!mVLoa+DcAx`!G z((+_=6#`-6=>IIlss2Alg|YNMRp@I5b0`od&i>y3#Hm6rK%6S{euz_rE@xQF0~tr5 zp8|2}z)pMf|1{J=uF#7*+Hn;6AjGLcA5uJyLN7s_Ds(xIT)y?TLhmX{2(5ESTxfNS z&3!xr;<8iJ(N~ad_gr76d`_Ya(w4y=mj9y}8b_hOf^e?TCuvvXDD+{7Q-!|P2)vF$ zp8|2J&?iHjD)hCh@p=k<9f(tfKAqmxI0}6Mh_{=oqWGh4%tJ6Xu156#pmxyG|5Tx$ zsdyZPeip>3hL#clzhH1ljB>_L3X(wLggRz}I5lc?b$o&5Y>>#za)`d8=wlYnv=PLqWpuQ5)wYb-cEQOI_t|E|?TW{-jGjO^w~Ss>+*n2viuv9p z%rVVU_i(q{DhDsSE88_fI5qKS= zcuR;=qj(F5Q=|Aj8J%b$HMgmrQT!RigRbfjh6aNf_a79ujbgUTHHVmKkuVlcjpB^r zmWe6Cl#e>+*D9wk7-1$roLZ!7DQ?+}))rIFBs&C4nQ47fh*OJnYlu^e)cl6gzZ#kU zl7=GpGHIR#%k-nR+`JH{w%mV$r#xsqjxDzp#HlSeL4}E9%WbEv$Fb$Mg*XjcZ3A&? zNNo*qYDjIQU5#T%{Tt%cklG32)R5W>;oOiq2;$U`+FnN{jv=)J#Hk^*lj3mJoR7>oG{NO$h91uF@T=cGZE_aWBRA%;jmjtZ zFroj;CT9u7t!!)Tp?}-td}o9SPr0jM=}U4Z$f5nQ$(dR1WewhzYDcM#zcx94iSRgG zb()=ZG+nT+?9(?p+bXWIdue!(a^_}d5hF~P|7WdTcy*b**_lPuR&Ck}*3fe|JFAsj zZz)-;3yyNn-|YOQ+dW1xxIVTn z%@lha;oO&dRq?VjGBscBe-JlTF7)NzfH?K#-hw!OQUu*Ocn$+or!4!_9I0I(9$4te zk=nHupPD1J8^o>F)e8{Oo!zVPdXCf{5D!{Mj?~^G@H&pvUJ$2_)SeKhj?}x=ceS1) z^(n-IuIdn~BV`72^sh$d|Ln5bM)N<8FPB!l?&2&1F&^U7mz$z^9A9n|h*Mu~D~MBH z?jflzJRunrBeqnoH{6pC^K8Sr9{g!;`GXKocS^Qv*}E-&!r%`pt_!IrMKSQfl1Cse z$Au(wa>Qj?e-z^M{Lf&LVxd+%9MKv;zmP9tygH*v@VLmk?i5Fq28Po>cF;~pzkwq1c6B+R!P9r0IipPnJ>@PzTjf}O_(L*u&K^&XhBFMfF$G(f;`#_vVM*gW? zwY&?u#dLtSK2=PQ_5aq37NS&L82kva z2cy9XI;aB|T9~GHCyv1D_;M#eoceOdL!A0@AB#ZI+NC<5AN~3o;z3vSE^1eQRowE7 zd>8DB3F%BP-bEygg{Oj~8epN%2=RS#%K12=iBj`w0`G8zGBp@RbyglZ>iv=pWF;nuR`q3mZvJg6>gWRHYtHG^+tKMUgFQ*Pm%gA)S$Jczdi z16jsJ_*UUf>*qsUvJ2%rcZ8e18fgrE0mR$O_;71)Vb~2H8-t&Na4Do@wJx_Q7)*m- z1o7~$2IDS5MTY9{Hh~q{W6G4RW~_gT)z9$^!&d< zJ80RVzMHA7ieX0kN{A=jEXJ>bc*H?$XthTk5-DiUhp-{*&?aC7DKVz0CDP}-&lp$UDa=b zI9=6mRy@wCehb9us(yPFUcIUZ6Ixc>s1lqR_gf+EN3Us!mj7U_aSeVO#I04moH!aT z7k4NgXSp!HVf3#?^#5JjL2Ledt`xc*S#!s9>~4tD<>DTQ)8*n`h|}fbK8Vxh;z7mZ zEEo4foGup+K%6cY4Q;w1jV|^mJ`mQcFh?O| zcOe5kqddf=A~nX1{G)$0GXE#S4oXrC?%;Tc2UBk3_?dB-0P&0m#?Rp0ipQCuoe-xp zv zDXU8~GM1@BC-f5#r@IS}L!8e4#~@C37dF$bYIxkGy9+{(fvb`EznjP#-5jffH1%^o zg!Ao!!yrz#3!c)O6KA{NX^7M9f@c+vvt95E#OZdyaoW{5+XbgVoNgD~rMP9L(Y&jt z5ze;@UevC}*)Dhi;wF#^w+o(!INdII4&rpX;H6r8YTE@bL);4JYt&oD(0Qd6pW1eT z`N-&Bjm-bosyi6q$aAH?Z)!J8xSI@<+rK%8zDybf`?UGSmYnP{ntvt95d#OZdy z&x%{|e-xm1g>>d_st9A@IEPm7cE#gF=+}TajnJ>Fc$^6RKOs&d^xHw4M(8CmT5gln zipzJ!F{I{zI5njH1aWFeEv$GPLrUl|a5Xaj*ARK5(T-!wy&Fuq;O4}!<=%lfwdLN1 zIJM>8f;hG1Hr1|LrVh2`wuU%O{n!=a)R5X2;oOiq6yns7dQV3tjv@6v#Hk_mq2h52 zsShAd4XI z)He{PhSUer-AHG|F{HkLc+gcHLhb5Lid&WuHKgVWtcyS+SvWPMvWmwsr1B7_hLngt z2Chct|K{33%k-nR+_n&>ww%z;#IO{099wP{h*Mi`9*9$0?r)06vE`P7xCn#G){j>_ zjv+MwaT*lgQ1Ljn%a#zQw#$wXr?$(U2!+W*~~&3KIIlp)mBRJIBF{gajLc^D{d))k!f0$8X6lzoa&7K zK%DA~>7#)xbWDt+Gvo|NFp$+a)fw|coa&6fD;`H@2t5X_M&^HB?DQysbs#HkM52jN_Y9s+TyLx0tgiK9b* zgE-Zpe<&VDhyD(6szZ;_u38$2p1U{&;#7g%p?Dkx_9Vi&0uy=+T#d~CX0f@W`5(vs zZ-O}W{~d@^|9|>gd}{vx3=j`AG&(~+V=X>4|9>WkTdk|}YVP^W)p$MIWfq82+hz6< zcpd+LHi%RIe^!W7|NnjIuJz1B;}Gl_>6oZP|2f2|A@!r;mSsf!|2ZS;LNtN555%bpK5l#7rwUs54N_l&Cau0azod{qt;F)A9E=*780|WxW@j52ncBQd99@{)?7S+%Sh-8ay%FC9J0t5fJ1YdO2b*G6 z*b47mtl#W>8nhnZmJ^7}1#B#(4vi5QX6RTpBMujC-s~J{gb72PbshRGo1K;j7lXd8 z>{~ZG)5*$cIU`dob+CQ2vopJ*e(%nWhAFiGA$H{vt$OgU05)alO+cNK^G;{=waae&jn@?RiM z1Iw=B)>BU3p`Cy@p3s8!DsJh2dO~M8dCH@ai4)ab7UDFjy9~ssxv(_EX;gP}?P{E; z?sgEDx@&UWEpXDR&;RWXajd`u9UE6{{V(DkF8@cjUWd=4f#v1(=EMmsw?Lc*mRl8% z6IfmW;xw>)ymqy&9uo9)h||FG-HKb9f@bJHgK!>LPHI={YG`TMhqy5p#A;|Yb=oAZ zsu4O5;xww8fH;lnrfTu2MRn5)QV!`@bMgL(JPl zoQ9ZJl}Bt~*c{?@bNy1SMq;l$6Wq|$S$P#NkyxyyJJ-=`UPo*OvIF8_WMoyh244l? zej<2XSk!u8zDe_@^|5g^GXGaY9ZXhruuu}8Tn5;5t`p+vU_7GXv+*tqpFAM%dkNkO zZGvJs{ZVIVH^lwnRw+U=;sZvQ9K@5utvsJrJihbZ-@2*%|4{bxfKfj>P(fGMR9tMv!BR2TFN5GkB{zbfCrEvq z^2iK8Jl$Ow>g>&hAGh&7gqJfTx{6cey+OS#!K5piaqow?7rxc4jE5_L!3z-gtMT9w zb`4&t!pl1&v|Nz+$mm~<%>O~uLC=p0oP{;3q{fx87EQ;75$*>&Mf#ql;LZnl5#s3; zWSt%H#=QWagz#jd&^g#OB$au>(wo})WQ3;@>q#FLZ4eI41`jv>}x|j72ur(DNNN@`GjeG z9f)TF+$!c_K4b88A>J0?b~TR(UmxPxitH^dZdoSN`adAvZnZ8S2&FRk28x@|Om9ap z7+z;@zQ0>u=4cO%!8e3>5Y>r3S~W5oD=vFR{jJhsvCs8}rE#f3CS}*Uin(BY3P)xm zh$kal3r0sHvxB@JORS3)X~k-YZZR48NB?SM{_li3=p|SUtxaV3it_$Vss3W=K#$dO z*%ab*A8Iqjhw^S`G1oCs?t|xMYO7+JQQjQlzT4JTc|ywH82q0QPr9`=FU;k$?2BM&|!^+CeMiMq_9@ zDsIQn*sEW6fVdyt?}>SNkMBUQlpHm))C}7#@_+Q$#)+Xlif|r7+ew8n(S>@koSh*a zL>Dvy6|OHv_T5I{bpk27LYxLtc7Zqzr0iae*9)ZV0dX2g`Bul>ij1Jpg=*$(sIK<$CLC8Fg zQG6)GsZo3w#HmrdxCj&p6KCy8LY%H$CKwg9ZmnI^)j3LKkF(`|B*baB@Cb<0aN*$) zr{Th56pv%j9}DqtxhU_px0qwqgC!Y5=V*vi`~NtEbNl~z#pBrjCqVrFko|w6b})|p zf0jPwmieO0%YJ2FXLELIxcVFcWIj2|S_57|gARe@i{I0V{;C1}2 zvmj3Wt}`J{{Vvnp(Z3qe|L0bBFuHTWXzN{6FZXxpT{MSmqqsIc=elMb=F_L#!l_Zb zisEsM;(mxzqxd}SY8<2Ze27z{_yUMiqxeFIQ=|Bz08g455yz0a7~<5Bx&-3XkXkHw z2m)c^7*amOsUfwd;&BYAD^&J4hScQ{r-syJ5T}Neh&~3cM&|!j+QB%s+|>}Lw%nBv zr?%WR2Q$kblbehkEoih+jIu@I+*)Nv4}hSUvu zo653J&5*hg;+CnSCW(yU7`Ymm|2NlmQ0|J=LA3%*?{2Ba>)CR*LOf_)2TrYvJ4WDj zY`NPZPHnl{AWm($JFD?%9OxTd0797F0Jh*LxAUWije>OP25L+btjH}7eP^_qqUAWjXbv9SO&GXIwhp2J`~ z;@EO&h*Mk61au^dYeqYcE%&I7b{t#o5r|V;?qP^iTkau<)1cVnipMdeo`5(tq#lDf zHKd+II5(u8Qap|!^)$q(A@!`{aSW+vAWjXbbMz65V@O>9acW3Cpm-cZO6W0gH8THS z)X^^6LsPTmUVymKa?qB09^%xNdk*5%mV2odpPDWAGQ=%YM@TQSzUDYAft~!D3 z5~vuRsnryZV@R1hJNj26^Zy+k?KrmFyAY?g+Ommk_6h)aMYVhSXOG=Z4hi&wV37BlG_o?Vx4)QCsdi#pBp=-$I<)a%YS1 z(Hx3n%bgE#YRlcPcpO{q1%&gU*iYKkIEK`Z5I0&58d5(%oElQ!L!25?KiA?@Go*fj zxMk|7Ng`wD{921o&5-&H;#TWw1(?=cQhz`^XkDdN>!MlGlIq{eufO+aS%^sTeGnB zGZnW=za`{!vH3AykP4dR%LsEk#65ppVzKfEZ2Sa>`~J8L#7~5HGD%uL3F4{bIGIC{ z^tLc3Lp+@#t)Bw%Oln*Twtgza+tQ@<(;%Krlh#j%czcGleg?w5M23vaMKyT7E9cUO z;4FyCLxAt<*%0^HT{Vx{=wGqt|NhO+{vvK|{hvg59=b!$Pxnf##_)0uZg$$me6lKZ zL?#n9pAK(!Ru{acID=nRZ6R=$P5FeQo1G!W)%Eidy>gJVMh_j|?CdC7uJ&*yPR>5L z+1XxNk4_iW^<7SHcJ@}>Qs`Lap55#mD0ofUIyp#rezS9u!Nbhxy24!C?3|;xu|ub7 zcU|7>TpHj>bKfk5j$Q7no1L2!FZ(XkLcgxrc`(37?xEqx$W6`8i}Hv?n?UM!5l8B_ zW@jL1y7;YuYh>Q zPo!b%S3sh`0MGJnq*Z+)MaUqYriUzYzBXhvR-N#C<=7$Nf5p zCk2NiWA5zeU$OPShe9~u3tk@^3>>JCQb zlcdUhxqMPkPAM2c)3H|}PRl3lCf-&_ihapqX+?@tEKqyhzCe)H`~I z`ttoleR@oLe~9BiipYL|;{UI`vks5ry4v_y>#&_TiIX@yi5<2gEeXQ1w6+wlw2r`v z!_3TS!_3Ug%*>oLZPO-g(>Bb^%sW{< zJKM68{pnqq!Qk^@zc3xlF%VA&Ed>CsAF2ISjr^YwOi=srITFf6?xa$@lE|Hma4vEu zLY#`+sR-vHcN)a0$en_4E^?UQii)vISbDE5U0V}r6Ep(v&%ZTIcI5bb^^q)FIQG^If&E9=rRcBkP2WM9+!)F?tO+cImXOj@8!PykVXvk+mRBBO_}=oJL00fjEtfv_YIkMuwmKx5Ek2;7kX?d2l8J zaT=VN3~?HqnF4VdoauykNpjC4bsMn-xN&Lbl^ zh||c(G>Fs4$a)Z`k&#}A)5u64#A#%tAL2AJGW_I!I-DR4&J04F24~hsI1kRufH)1# zYyfc@oY@fK$s~zGZv=4~8QB=(G%~UY#A#$?Q;5^Z$Yv0yk&(?IP9q~*Ae=`=wuCs1 zjBEvQ8X4Id;xsa{4a8|=WLt>S$jI=M|Lx%fX>eu-h|}QAju5B8nVk$5FIUCj%+3&} z!I@o4@k%E}>;`cf8QBHmG%|8w;D<_-`dxh*8Mz4I+)aB)DPGAaPhU~<9~U-s~j95{?Edt!h8+HQ=ywy0vJQ^;V1uB!3nm6 z6BH-yDmF!(+_i>B@f2SNaq20)9^u?me1qXpJjJ&Jcxs5q#aS@Μcm%z9Ymax=t} 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 literal 0 HcmV?d00001 diff --git a/CGW3PR.NTX b/CGW3PR.NTX new file mode 100644 index 0000000000000000000000000000000000000000..2707e5e21d0b58fce1703808a252822943eba9d4 GIT binary patch literal 6144 zcmeI#Ns!w_6adhc6v7tvAwVEOgl$ML$h(I%vMhTPTb7a9GZP4eC2S#VVGm0}*uq+z zC{7$XQJgq(qBwEn#E~N>jvOieSGW3qQJyMls^$``Dv#~wKke@Sdy%&aONa%LU)#ln z@Vp3b1798rl3wWUbth@k%U`RQ`QLd4<{3D1GO#G5I3iApuf%uaC-Iy3Q*5zzSf16l z4qC^o)7CfE57sZ%@77<|HhZ_-vB&md`?&q3{jL3@{j2?l{kOf~>~Z!vE6!2pl=HRo zz4Nn!**O6Zw{)StPdW})@nh5#cvL;l>n%?tJ}X`23aoTZYkvZRAmq}zRh zG*Ap6KAEXcay8%f45_3Rj&e1zPicjo1$EQ2XGtaL)1cifmeA4eG#Kjs9wC*A0mSK< z`We$OlWpGx5CJ~?ER4sp4*k{bzFN|n*4Ii}*ZMlshH2qLQr$3sIEWghu1ug7&01Ae z=)tnKlpbQ*@QT=n%c^7FL7k2xNKY_@eyJAj1BDravnHTfvKJIGj#_P1ixGRI0hFS@ z<^qTg(y_ zh@uLQNe?sR)|zI{Es;j?But|b#@<1?Kg9LpqTWdw)2?ugRH|T%eT#GrXT55{1YNS|At+#VE zE$m}TE%;@HVgQI1Db`rGyG)8@)A}wc)D6%D*zmP$lg|G=&?Bf;zFX(pr;A-|mQ|1b zBBr$dFJ%g|OONxWvg#IYW(spo#~vV+RkMFS#1s&M0mLI*&6$3fDfR3Xrf~M^Z+ow- zaLfXT9;(bYw}uDjo6?YLr_egnnu+amHL<&ywoL4RtBJjyX~)Fw=W1eaAZ<2G?2xO8 zy^$&P0k>&A;%3XlI;26;P4#(zzc+Pkt`$7o#1^hG?((RYllE84>Ak=;-_9|12kCN{ z2GbEHTwF;y43_;#n4c(Da2@$s6kzOGOr!BY*KK=Q6CV>Jt|EoI+8|xUjZxU7X>!0H zsZo49Q$L@n*ZxbT3m~o`%`%e*{A457PBH7g{=fbvSpWWi7j#BfHp?*Cd9HVI?FEU- z$rq#&?_~!rfcU7ay(G`-i%iutz}Oc`THMP%&vcj<5o5RJnxt{&);%+0&SRQy;VytU zhqU1}igmh;DaD>k+M<vihYh$s$c+doGIi?pL&Kfqw{4={M%X9qaXTyciL41>EfFn52md++nSXFsaNh|~$T550DLe8`KFU}5A-|=;^qO(=$gG(c z=9Sqsd*+k*W_}v6B|BiJ>=V0gH|=Zt#=f_o?RWdjR=GA;cGGUzZMZGB?cTZ%?u*kQ z4f($)*wp+J=fILUPSq^in3{gU{;B@BakVP4Bvw1ehVQEmEz8fXAul(8gAF|*HuUIXLyvAY^yncQ zMdn^MWbR`_=9_HD*UyH018m4Q$cB8wWGSxuG8^)FI@T7+-|y+;JQeBW&obg@WVISqlY*HPL||+8E}b0}l*y(2FE6tdlN6U|1&&6d0~84HOvGP6Gvo z9vUbx^q6Erk9%zBF-4Z4$9*>Rc*us#(`?8*!-mYWY{>k;TdE6@>Uw0Di>He1tlST` ne6xIwBE9~O>{~H_{{+lQzW@Epy5d=@FWh1)CQwY^R7~Ix=pE$y literal 0 HcmV?d00001 diff --git a/CGW3QX.NTX b/CGW3QX.NTX new file mode 100644 index 0000000000000000000000000000000000000000..125b741b7b3cc2690fc3c713c2bd6e43173716fc GIT binary patch literal 2048 zcmeIyM@|DV6adg)lF&;anFT9vXo7{OB{={QM1mjWi^>vY&7e3 zI~z{_hGuitfvf}npaUN4!4aIm1>C>`yub&1LmoYx#2Pkm6L;|t+jx%Gc#qHcj$fFg zGEGpG7HETZ=zv;uMptx4PxMBg#9ZQWuJAms^EU7EF`x1!-|{2BvTc`nZ9pks>zbJ@ zST)Poj~tMIMA+9!#aipCi^x0hLk9%`$}0l+yQA)Pe4jH`)p(# H_@e_qSQbWZ literal 0 HcmV?d00001 diff --git a/CGW3SH.NTX b/CGW3SH.NTX new file mode 100644 index 0000000000000000000000000000000000000000..94d3a708c820b950e6aaac33a5d4d71555c3f76f GIT binary patch literal 370688 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℞$V>uj394!t^uc|KvLy0Pmw0d=4Yg^ElOrQ+ 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

1l!p7OK3hc^x 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༮T1JLCt1kJ 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 O)D!X&D<<&g68Ht+yf`-i literal 0 HcmV?d00001 diff --git a/CGW3XL.NTX b/CGW3XL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..720ef5459843d28f474e6db6a5dd3179a7e6c389 GIT binary patch literal 6144 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 DG;?y3 literal 0 HcmV?d00001 diff --git a/CGW4IC.NTX b/CGW4IC.NTX new file mode 100644 index 0000000000000000000000000000000000000000..d21e94355fc0282cd9f8793a59efa9cbfaa986f2 GIT binary patch literal 36864 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 bxbNW}pCki)KiN81aDVr8vh(48;pe{qt~g<2 literal 0 HcmV?d00001 diff --git a/CGW4IPO.NTX b/CGW4IPO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..cb62568e326ebd2760a7f5b3588c57db62cf9e2d GIT binary patch literal 6144 zcmeI#yL%K>9LDi8GZ6$uql7!kf+)8DJA2D6pc0aRF>5y5L@*FQ)BuVBqFh8&MC5+) z8Zc@QN(%}KN(%}KN(u}901FHM01MCgjxh5+Pnr~=z@6tw^5nBK=l47BnKQdP!g$8i z8IC&hxcysi#+!1bsjI2d+>)A?>Zo+JuYD~#q58X;KsAAfDuH^_X?o02(`SA&zneSe zPxFtd^=5iSuk3C1dcEUbzjw{M>HXpT`y9jI2$#H*{6_ct&|)8JGJP}s}T!BXOF05oVlk~ zd~H~A_LNvA=j>^HIPfA8sjyo(Q}Jh!TxKOt5M?>HF9}XtVrEeYMi%Pti(OER*nAN zR3n#7Nek1|*sMk_mWFf;_x|5zyScx1VVVrz6${B>ryBXcr^dCr)X4P%u?*w&sFBwm zHS*f4#=Y>N8ohj^Mlbu+Sf~AJ^mjlkdUkxQ#=0L;qrbyy?4?iD=VBn0F2~jA<%Al&oK&NiQ)={bMl4S+XVqA@b82LDUX7lA8N{xr(aZO0tkHaH zZB6&ysPfe4N?Mr4E{f$C?~)pG`%#S={bJF4e^O(-*D+$zUVlQ344+gZ!&)`&nXzhQI9`pln<|#2=V@y6 zH(e~+U(c!0%PckO&J&C7k9sxc=6=PQ=DF4dn=pEIO~zJWf4LVD#(FGLV{VJpsPUp2 z^L<&Yff~!y$hldK8Y|QouT`wbcx`IrS5~8j`<5Edt;pQk)u_8tjk>Rkl^Acm8X0U% zT9~H4t!mWREta9@PsFnH_oY~l^S%|!vlsfr3fu>QwT{Mh?JX^Cb4Bl?mWFgp9p=yf zvu!tVkJ0ne1sPj3mzUJIe=A}|^6yY1n>Au3vRS7_)^Dh>P8-x1uTza)wj?b~Gv3>3 z+(+-Iac#F)^gU*~8sqIyqrdmnsL?By;k<)lSu!}HMlVOjqVEo;)j02hSf2g{2C=Wz z=;a$V*6lkr=JA7A^n9{ZJsw~J!Eo;X8e`tFb4h&uFBtpg?^}zX)2WjC0{@J)_?eI` RnA!&zLbX&if&Xa&{{lH*HxK{- literal 0 HcmV?d00001 diff --git a/CGW4MI.NTX b/CGW4MI.NTX new file mode 100644 index 0000000000000000000000000000000000000000..5d23f9534f2be61f9944fe7ee42ddb5977083749 GIT binary patch literal 2048 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 JP~d;8z&{+4$%y~} literal 0 HcmV?d00001 diff --git a/CGW4PR.NTX b/CGW4PR.NTX new file mode 100644 index 0000000000000000000000000000000000000000..8a07e539540c5fce63117e39e2c200725d0db130 GIT binary patch literal 6144 zcmeI#%aFTalU7eYDMG(aM83YL-@rcL5 z!q&pV!q&pV!q&pV!arbP;UBQD@O^b}ec!E6y8|zEySacfb3X4PXIm zh5VX>&G>sB<{(bO17XsM++FS{O*;ACs?O}^ECRC#{C^@a53BGToPe+3JNOBHgFgYR zIcwh9V`bK1>zMVW^{w@z^{e%V^|!Uf-f8c)NA@B6sQrcgjs1iDi~YO(m%Z89;WVAt zIp`d5PCH*a-#b4$6rtnzam|bH1IA&rLSGWTi=SQ+2d-Q7JWu0B#+p|vYHkv&Q$-ic za6V(hYZORpnR;eJYM#f~@>)gBdB(89Z?Bio^O{%&uY^mhF5#1cRiExB+$q?sHTCTj z71g9LX{Xp*EW<@*T*wH|F>nxNs^+Cxwc(Ku^%T`U9r=!X!$8aggwSEWk@7=# z^Yk>VF{)G=V;L@FY{`r0i?v--zDteC+-b9W49*TMr0uG5LLknZ!k*+a?Krr4X)WW zkZax`*y5Ud4dj|PGS+Kcvu_~RL|fyveI57z7~7)aTW@d^Cyb%b^Xe(VYQ6tH{-zP#=j{ziQ{&V?`&5w;@KxmS7<$e?Tq6w_h_4e+@os^q=x40yvD#zn5c>I zj)6SY_c3O&bgmf4hnKfZ^z{r}HITcx-#{MC`wh&ONi4$yCQ?5MA2hL|U-VE3G2yX{ zXVfB>GRcsK1@YzjnFmZPp7}@#^)n9|$bEm*K?Cj)6ZOHq%)hw z7Go$wzR1`cjH0xc&sDTDuUQh)4xC96Uym`8w9!F6Gj22aFCyTq*ZzM*lu+UicH&Dk}Jz$^mm8-afStF>Oz literal 0 HcmV?d00001 diff --git a/CGW4QM.NTX b/CGW4QM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..4f56ece7cb3df1e13153b8a312750d0692e8684e GIT binary patch literal 5120 zcmeH}*>2N76o$t(l)aR&6)-UDOIc<-b`}VfrCe|UMTOp3ssM3akl-$ll1Is-2q7eoltub7XZg=R6R#*wsWpYA)jEBKYE`}7{rG9`!?xbg`1W>-zHRSp zz1i7&zxyuxar53N&?xZVD-f!_O4UFO)kuxiM1@}8OTB?N^hVy;n|Pt$_fvo15B-rp z_9uQA^n)}Q1jAqyaP#-+rG>?OMc_6uUFLNA6!x2JS*@)xj=3-MnEB~?o=_n0^D;;N z+aiw=Lh6pp+syCEyuU$z{^!HTe9GcuGd2S@x{RZa!4ei8KD5V^zr*Q&gm?KjYu-%9z3BR~AhP0Vw` z;4$L2$~+Xds*hLO+)7R3C`!4Iv#O<2K=ndq2D=~<#E=(MSV9#9>E_k$~<;_23a4(*Hxa+&!WF;GKYVz%N+B)A@T_RSg-I7)rR?C z|EV%h+|*y_??Q>&xJOqz^n-scmU%mN7W22rPk5=-Qq}+Z)T=%dNdN!GDSN^HE?c-? z;g1tC$NX1ij`_VJZe85%APLPrPS{&Kf9&5R{`t$-yaeL5ouAJH=l=-tAHVj0e$(Ig zwa&|Ps1N!dl{xkwlR5lHc;R|Tw4hJa>+=1;^L35CNt?gz?}fu@AU$7K&wBc&&;RuB g!-t^Y@BI0N&u1JddbnD6zw_nMtVV%Gfq$mJZ-y9wkpKVy literal 0 HcmV?d00001 diff --git a/CGW4SH.NTX b/CGW4SH.NTX new file mode 100644 index 0000000000000000000000000000000000000000..fbcf3705a18fab25b70cbeaae13d0917dab552e3 GIT binary patch literal 370688 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 literal 0 HcmV?d00001 diff --git a/CGW4TD.NTX b/CGW4TD.NTX new file mode 100644 index 0000000000000000000000000000000000000000..d9395220bc94c7d7715219e6ec611d82093506ad GIT binary patch literal 2048 zcmZQ$U}RumVE_X`22LPt!XU-q?i249>Z_ow5F8Su5gZ)i7!m9msAH@NQ8!AChQMeD z437|CW5{8sW$0s=&#-~vAj2hw#|&Q>SQ*6_)fp`qJsG1Ivl(j`dl~03u4g>Jc#-iD z<7Y+|CQ&9eCUYharbwnNrfQ}hrnyY(nD#SWV0y^(iHVt6gjto@jM<$zf;p49in*J4 z4)a>(eaz>XA25SLj17ntAi&T7B*26aFais(A_R=V0-(|fs>K8>05ZtX$QUGM3Kjqs VVK4zRumF%h3PwX=+X7?C;`gte~wB;20F*7wQX9GD?nyz-R~zqY&U? zh+%YKbYW0oOkk*Cn8C1x;R3@O1`fsw#wm;&7|$@iU}RxZV6tI~U@Bpnz_f2tbu%g3Fm&m?5MTfWqLS4x%qOASeLg7?2!3 vzyXwm80F_0?(gRcGZv%=Sb{?3ocu#Vd{E@L;Bqh>5E`U!6pV(zK!*STcAGcX literal 0 HcmV?d00001 diff --git a/CGW5OM.NTX b/CGW5OM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..2d07ab29fdac5986059b4b6c2e2aabfafc0d87c9 GIT binary patch literal 25600 zcmeI42Xs_L7=wO*+_n z@7R0qU9tXi=fEL_JZ0{A2hYizlMP9hZ>QY*|1t)7t)!+s9Zyxd2`2WM-O!L!2iAndZ<2XjGCb4t9048vUz2F%g2^a zEmsx8D#lmn#+A#LV^O?NDC8wIsS|+|i)vD51}UydT^OWe^sf3h5a4zzZ*g?uf`z3 zYrPpHcx`n8$%Pu%WRNiOeHbM4_&NlV=L$qQ43eiw>oQ32T3-eU`J^9%gy^;&gM_gY zP$0$6|NW&Fw*HU8wF3yG7}QuvAjLt_!*AQVI9jKN-Z8B#hnZ3=(EHXEI0_yR#W2jGcf2DSr9?e5r*^{?}19it)OLK|&6>gg}ZRuU*O@ z!68>NNKoU|3=-6MErSF#UQZyI9hVyzBxLOy86?D{n;0Z${ALCTDiBa0#n1n@N-b>t zABP%mW02tg+ZiP2`VIogTp_!YK|&SD95RtXf1_=(C!63mQGZ`c}WEO)2hs;E*{C5*#v@ zL4rf>Wsr~s?z1OF%s$Ee3=%Xhpg@YB{~wfESo%L=_O%~okf7^F7$oTWF$M{0e4Igo z8lNDL%nsR;3=-7%6oZ6_`!s`ui2DqKgoyhrg9K$h&mbXA3Mi1`=l>U_7PkI(q3f3j zBoC|hml-7J`V|HVx_*^Gg05dA>pKMuQnXl}(*o2DHG8j7n1yb70|8it!6{*Ey ztNSnhfcyWWN)EMbL?A_C`cO-XK$1ITdMdTOJ<0Rp`q;<8mLz?h)C;TLN}Wp}MLjvz zrEVdR-DGO{f7%y-y&8BTAyuw*->hbOdHHJJ=Kc{af!Merft18dVhwweYwrBgDao>RZUQrjH!Vrx|A>bS`8$CWML+#P zAes9l{$!BQPk%8;$l8B1NM^0=oB!L_xE{M0JX^*fVHPNj3#9n@zk<;s_`ef_1c!8H zkl>K#q>saH!pT)SZmd+}6ie+#gO-2QBky9qHb#@eo+cHtjhRAYHZ!96yQ@>RwN9!g zlS(^7@&zYVU!TwBN_CkWK2zpNo;fFx7E&}6b8`8@kbLcMC)Jo~4sxpUO-?-4;+G45 z)HALm)cBAlc_F8+8lPRr%SZp0qFWaN=}`s=D(Ehx>a3H^HRiL`8K;e@uzuo%Q_4F7 zo$7pTLtRxiCGSo*6ibC{rl`-8hT?EYFME<3LQGnpKr*p=0|F_$^vwUIHJcGy6i2+) zFP0K|*FaoIyfn5>Oz;FaIAawXo5(9(l9>e*%MqUOtIHGJEZ(Fi41QXD~?6^;rxO z`e_`2WOiK7VUUn(&ts4Y0{C}C$!q)#WIOK8$2_t_6 zgMPYpZ9F&`(=4NN`AjK|-87%94Z}2aV4YlB@u0vO{Y|q((Z4aH~EYQR(!}_mzca zA(Lsn*wia756To!AjQxBA4x52TNK84RR~G%qhR?OPPXb9zhCH;pX~ojS(ZRDPwiOC zp5)3NvXr$MB+UFaCXgcN@l6;cv~E)Z$?TA22&5#k_DFk@XP$1QKS{UxyN}%CBNXTp35=bVmZO0%X3+zlFCD7x$ z5lBV_yE8~=oqz%<-IRIe=b}#mUG({%drB=Vz2=##c4O^H;Sl;}9|j3A=}1cwW`0=L z{%B8%$W?nOy#4>BQP+D|_7gHBW;eZrWV15W`J`k2ziWH>e~>)?mvOBvrUomuAz{2^ zB_Z}W+L8p?^kdE`e(v{ZbA7u4j%m4rY literal 0 HcmV?d00001 diff --git a/CGW5QM.NTX b/CGW5QM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..9349933f147dfdf1e16370918c88082e537a8206 GIT binary patch literal 8192 zcmeI1+iuf95QaAiO*w?~shpRVb0B!*IBCn#i4Ap|*pXvb-1Uwto`owOge#tfXW@#O zKdOu(L<&2yf|Qk-xYg>@%uFt8l)9;~c2%Fg8>+4*JJI+c_D5k8Pks=XW|9VB zdJyNM>E`9f|7T={ZT`E6a?6rrsFJwI5Dt)yO&~$n zY?v*ngY)9!wCgJQ>h~)1@vF_*5Fo@#!dJx80m=;?* zPFwe2ZW@NaG1)if6^tK)(!+g|_eA*r4 zlPrzG32mZVJ2Z6Bmc%y+kgiIQkpB+^NNwo)p#%xKek4Ic|9>n&LY$skl2CDB69>yi zPfY3{LpWI0B{n4_*6}1PPV@ zwFC)W`y7#igql&NhatD3ahe4AAk#^nO`>47H651W;+yLvY~l|a60#N%eH-o&dZ?65=dw*;(6UB->gp_x?aQ#5jwafX5k{R@~8e!gZ8szagogb@?<=-sc5ME t)Rsh*#5FwjrT74Gg<%u literal 0 HcmV?d00001 diff --git a/CGW5SH.NTX b/CGW5SH.NTX new file mode 100644 index 0000000000000000000000000000000000000000..a3085846af95ea75841197f1df7a6c745bbc0229 GIT binary patch literal 207872 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 literal 0 HcmV?d00001 diff --git a/CGWASCNV.PRG b/CGWASCNV.PRG new file mode 100644 index 0000000..6c3f56b --- /dev/null +++ b/CGWASCNV.PRG @@ -0,0 +1,29 @@ +PROCEDURE CGWASCNV() +SELECT 0 +USE CGW0OM +SET FILTER TO !EMPTY(ALTSHPNAME) .OR. ; + !EMPTY(ALTSHPADDR) .OR. ; + !EMPTY(ALTSHPADD2) .OR. ; + !EMPTY(ALTSHPADD3) .OR. ; + !EMPTY(ALTSHPCITY) .OR. ; + !EMPTY(ALTSHPSTATE) .OR. ; + !EMPTY(ALTSHPZIP) .OR. ; + !EMPTY(ASNAMESCRN) .OR. ; + !EMPTY(ASADDRSCRN) .OR. ; + !EMPTY(ASADD2SCRN) .OR. ; + !EMPTY(ASADD3SCRN) .OR. ; + !EMPTY(ASCITYSCRN) .OR. ; + !EMPTY(ASSTATSCRN) .OR. ; + !EMPTY(ASZIPSCRN) .OR. ; + !EMPTY(ASNAMESTRM) .OR. ; + !EMPTY(ASADDRSTRM) .OR. ; + !EMPTY(ASADD2STRM) .OR. ; + !EMPTY(ASADD3STRM) .OR. ; + !EMPTY(ASCITYSTRM) .OR. ; + !EMPTY(ASSTATSTRM) .OR. ; + !EMPTY(ASZIPSTRM) + +GO TOP +COPY TO ALTSHIP +RETURN + \ No newline at end of file diff --git a/CGWB0000.PRG b/CGWB0000.PRG new file mode 100644 index 0000000..d04f86a --- /dev/null +++ b/CGWB0000.PRG @@ -0,0 +1,41 @@ +PROCEDURE CGWB0000(INITRUN) + +LOCAL NCHOICE, MARR := {}, SAVESCR + +SETCOLOR(LNOR) + +CLS +@ 0,30 SAY ' Customer File Maintenance ' +@ 1,0 SAY DOUBLE + + +AADD(MARR, 'UPDATE/BROWSE From Great Plains Customer File') +AADD(MARR, 'IMPORT From Great Plains Customer File') +AADD(MARR, 'UPDATE Great Plains Tables') + +DO WHILE .T. + SAVESCR = SAVESCREEN() + NCHOICE = PICKLIST(MARR, 10) + IF LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + IF NCHOICE = 1 + CGWBBROW() + ELSE + IF NCHOICE = 2 + CGWB1170() + ELSE + IF NCHOICE = 3 + CGWB1300() + ELSE + IF NCHOICE = 3 + CGWB1100() + ENDIF + ENDIF + ENDIF + ENDIF + RESTSCREEN(,,,,SAVESCR) +ENDDO + + \ No newline at end of file diff --git a/CGWB0100.PRG b/CGWB0100.PRG new file mode 100644 index 0000000..e0ce790 --- /dev/null +++ b/CGWB0100.PRG @@ -0,0 +1,727 @@ +PROCEDURE CGWB0100() +****************************************************** +** MIKE LEWIS - MAIN MENU 09-10-93 - CGWB0100 +****************************************************** + +LOCAL NCHOICE, MARR := {}, SAVESCR + + + +SETCOLOR(LNOR) + +CLS +@ 0,30 SAY ' Great Plains File Maintenance ' +@ 1,0 SAY DOUBLE +// IF WE WANT TO ADD A RECORD TO GREAT PLAINS FILES +IF ACTION = 'ADDREC' + CGWB1100() // GO ADD RECORD + RETURN +ENDIF + + +AADD(MARR, 'BROWSE Great Plains Files') +AADD(MARR, 'UPDATE From Great Plains Files') + +DO WHILE .T. + SAVESCR = SAVESCREEN() + NCHOICE = PICKLIST(MARR, 10) + IF LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + IF NCHOICE = 1 + CGWB1210() + ELSE + IF NCHOICE = 2 + CGWB1220() + ENDIF + ENDIF + RESTSCREEN(,,,,SAVESCR) +ENDDO + + + +* ******************************************************** +* FUNCTION PICKLIST(PASS_ARR, ROW, COL, PICKMSG, INITVAL, CLR_SCREEN) +* * +* *===== PICK BOX FOR LIST SELECTION =====* +* * +* * PASS_ARR = ARRAY HOLDING LINES OF LIST TO SELECT FROM +* * ROW = STARTING ROW OF LIST BOX +* * COL = STARTING COLUMN OF LIST BOX +* * pickmsg = MESSAGE FOR TOP OF LIST BOX +* * INITVAL = INITIAL VALUE OF CHOICE +* * +* +* LOCAL NUM_LINES, MAX_LENGTH, XX, FUNCBOX, MKEY_DESC, DOFUNC +* LOCAL bTOP, bBOTM, bLEFT, bRIGHT, BCENTER, OFFSET, I, MKEYDESC, MARR:={} +* LOCAL SAVECOLOR := SETCOLOR(), SAME_ONE := .F., NUM_TRUE := 0 +* LOCAL MCHOICE +* +* STATIC FIRST_ELEM, LAST_ELEM, PICKED_ELEM, LAST_CHOICE +* +* +* IF FIRST_ELEM == PASS_ARR[1] +* NUM_TRUE++ +* ENDIF +* +* IF LAST_ELEM == PASS_ARR[LEN(PASS_ARR)] +* NUM_TRUE++ +* ENDIF +* +* IF LAST_CHOICE == NIL .OR. LAST_CHOICE > LEN(PASS_ARR) .OR. LAST_CHOICE < 1 +* ELSE +* IF PICKED_ELEM == PASS_ARR[LAST_CHOICE] +* NUM_TRUE++ +* ENDIF +* ENDIF +* IF NUM_TRUE = 3 +* SAME_ONE = .T. +* ENDIF +* +* +* +* +* IF !SAME_ONE +* IF INITVAL = NIL +* MCHOICE = 1 +* ELSE +* MCHOICE = INITVAL +* ENDIF +* ELSE +* MCHOICE = LAST_CHOICE +* ENDIF +* +* IF PICKMSG = NIL +* PICKMSG = '' +* ELSE +* PICKMSG = ' ' + PICKMSG + ' ' +* ENDIF +* +* IF CLR_SCREEN = NIL +* CLR_SCREEN := .T. +* ENDIF +* +* NUM_LINES = LEN(PASS_ARR) // GET NUMBER OF ARRAY ELEMENTS +* IF NUM_LINES = 0 +* RETURN +* ENDIF +* * +* MAX_LENGTH = LEN(PICKMSG) +* FOR XX = 1 TO NUM_LINES +* IF VALTYPE(PASS_ARR[XX]) = 'A' // PASSED A FUNCTION(S) INSTEAD +* MKEYDESC = '' // OF A CHARACTER DESCRIPTION +* FOR I = 1 TO LEN(PASS_ARR[XX]) +* DOFUNC = PASS_ARR[XX,I] +* MKEYDESC = MKEYDESC + &DOFUNC +* NEXT +* AADD(MARR, MKEYDESC) +* ELSE +* AADD(MARR, PASS_ARR[XX]) +* ENDIF +* +* IF LEN(MARR[XX]) > MAX_LENGTH // FIND LONGEST LINE LENGTH +* MAX_LENGTH = LEN(MARR[XX]) +* ENDIF +* NEXT +* * +* +* MAX_LENGTH++ +* +* bTOP = ROW +* bBOTM = bTOP + NUM_LINES + 1 +* IF bBOTM > 23 +* bBOTM = 23 +* ENDIF +* +* IF COL = NIL .OR. COL = 0 +* // CENTER THE BOX +* bLEFT = ((80 - MAX_LENGTH)/2) - 2 +* bRIGHT = 80 - bLEFT +* ELSE +* bLEFT = COL - 1 +* bRIGHT = bLEFT + MAX_LENGTH +* ENDIF +* +* FUNCBOX = SAVESCREEN(BTOP,BLEFT,BBOTM+1,BRIGHT+1) +* * +* SETCOLOR(BLACK) +* @ bTOP+1,bLEFT+1 CLEAR TO bBOTM+1,bRIGHT+1 // DRAW SHADOW BOX +* SETCOLOR(HNOR) +* @ bTOP,bLEFT CLEAR TO bBOTM,bRIGHT // DRAW BACKROUND COLOR +* @ bTOP,bLEFT TO bBOTM,bRIGHT // DRAW DOUBLE LINE +* +* +* +* IF LEN(PICKMSG) > 0 +* // FIND THE CENTER OF THE BOX +* BCENTER = INT( (BRIGHT - BLEFT) / 2) +* OFFSET = INT(LEN(PICKMSG) / 2) +* SETCOLOR(HREV) +* @ BTOP,BLEFT+(BCENTER-OFFSET) SAY PICKMSG +* ENDIF +* +* SETCOLOR(LNOR) +* DO WHILE .T. +* MCHOICE := ACHOICE(bTOP+1,bLEFT+1,bBOTM-1,bRIGHT-1,MARR,,,MCHOICE) +* // DON'T LEAVE UNLESS VALID INPUT OR ESCAPE KEY IS PRESSED!!! +* IF MCHOICE <> 0 .OR. LASTKEY() = 27 +* EXIT +* ENDIF +* ENDDO +* IF CLR_SCREEN +* RESTSCREEN(bTOP,bLEFT,bBOTM+1,BRIGHT+1,FUNCBOX) +* ENDIF +* SETCOLOR(SAVECOLOR) // RESET COLOR IN CASE OF AN ESCAPE +* +* // IF ONE WAS PICKED, DO THIS +* IF MCHOICE > 0 +* FIRST_ELEM = PASS_ARR[1] +* LAST_ELEM = PASS_ARR[LEN(PASS_ARR)] +* PICKED_ELEM = PASS_ARR[MCHOICE] +* LAST_CHOICE = MCHOICE +* RETURN MCHOICE +* ELSE +* RETURN 0 +* ENDIF +* +* ****************************************************************** +* +* FUNCTION NET_USE +* PARAMETERS file, ex_use, wait, Falias, SETNDX +* PRIVATE forever, NUMTIMES, LOCKVAR +* +* IF WAIT = NIL .OR. WAIT > 1 +* WAIT = 1 +* ENDIF +* +* IF EX_USE = NIL +* EX_USE = .F. +* ENDIF +* +* IF WAIT > 1 +* WAIT := 1 +* ENDIF +* NUMTIMES = 0 +* DO WHILE .T. +* IF PCOUNT() > 3 +* IF SELECT(FALIAS) != 0 // IS FILE ALREADY OPENED? +* ///////////////////////////////// +* // CHECK TO SEE IF FILE NEEDS TO CHANGE EXCLUSIVE STATUS!!!!! +* ///////////////////////////////// +* SELECT &FALIAS +* RETURN .T. +* ENDIF +* ENDIF +* +* forever = (wait = 0) +* DO WHILE (forever .OR. wait > 0) +* +* SELECT 0 +* IF ex_use && exclusive +* IF PCOUNT() = 3 +* USE &file EXCLUSIVE +* ELSE +* USE &file EXCLUSIVE ALIAS &FALIAS +* ENDIF +* ELSE +* IF PCOUNT() = 3 +* USE &file +* ELSE +* USE &file ALIAS &FALIAS && shared +* ENDIF +* ENDIF +* +* IF !NETERR() +* IF PCOUNT() > 4 +* NDXFILE := {} +* DO WHILE .T. +* STOP := AT(',', SETNDX) +* IF STOP = 0 +* AADD(NDXFILE, SETNDX) +* EXIT +* ELSE +* NDX1 := SUBSTR(SETNDX,1,STOP-1) +* AADD(NDXFILE, NDX1) +* SETNDX := SUBSTR(SETNDX,STOP+1, LEN(SETNDX)-STOP) +* ENDIF +* ENDDO +* +* IF LEN(NDXFILE) = 1 +* SET INDEX TO (NDXFILE[1]) +* ELSE +* IF LEN(NDXFILE) = 2 +* SET INDEX TO (NDXFILE[1]), (NDXFILE[2]) +* ELSE +* IF LEN(NDXFILE) = 3 +* SET INDEX TO (NDXFILE[1]), (NDXFILE[2]), (NDXFILE[3]) +* ELSE +* IF LEN(NDXFILE) = 4 +* SET INDEX TO (NDXFILE[1]), (NDXFILE[2]), (NDXFILE[3]), (NDXFILE[4]) +* ELSE +* IF LEN(NDXFILE) = 5 +* SET INDEX TO (NDXFILE[1]), (NDXFILE[2]), (NDXFILE[3]), (NDXFILE[4]), (NDXFILE[5]) +* ENDIF +* ENDIF +* ENDIF +* ENDIF +* ENDIF +* ENDIF +* ENDIF +* +* IF .NOT. NETERR() && USE succeeds +* RETURN (.T.) +* ENDIF +* +* INKEY(1) && wait 1 second +* wait = wait - 1 +* ENDDO +* LOCKVAR = 'FILE ' + TRIM(FILE) + ' COULD NOT BE OPENED' +* LOCK_ERR() && USE fails +* NUMTIMES = NUMTIMES + 1 +* WAIT = 3 +* IF NUMTIMES > 5 +* WHATSGOINGON() +* NUMTIMES = 0 +* ENDIF +* ENDDO +* * End - NET_USE +* +* ****************************************************************** +* +* FUNCTION FIL_LOCK +* PARAMETERS wait, OKABORT +* PRIVATE forever, NUMTIMES, LOCKVAR +* +* IF WAIT > 1 +* WAIT := 1 +* ENDIF +* NUMTIMES = 0 +* DO WHILE .T. +* IF FLOCK() +* RETURN (.T.) && locked +* ENDIF +* +* forever = (wait = 0) +* DO WHILE (forever .OR. wait > 0) +* +* INKEY(.5) && wait 1/2 second +* wait = wait - .5 +* +* IF FLOCK() +* RETURN (.T.) && locked +* ENDIF +* +* ENDDO +* LOCKVAR = 'FILE ' + TRIM(FILE) + ' COULD NOT BE OPENED' +* LOCK_ERR() && not locked +* NUMTIMES = NUMTIMES + 1 +* WAIT = 3 +* IF NUMTIMES > 5 +* WHATSGOINGON() +* NUMTIMES = 0 +* ENDIF +* ENDDO +* * End - FIL_LOCK +* +* +* FUNCTION REC_LOCK +* PARAMETERS wait, OKABORT +* PRIVATE forever, NUMTIMES, LOCKVAR +* +* IF WAIT = NIL .OR. WAIT > 1 +* WAIT := 1 +* ENDIF +* NUMTIMES = 0 +* DO WHILE .T. +* IF RLOCK() +* RETURN (.T.) && locked +* ENDIF +* +* forever = (wait = 0) +* DO WHILE (forever .OR. wait > 0) +* +* IF RLOCK() +* RETURN (.T.) && locked +* ENDIF +* +* INKEY(.5) && wait 1/2 second +* wait = wait - .5 +* +* ENDDO +* LOCKVAR = 'THE RECORD YOU REQUESTED IS IN USE BY SOMEONE ELSE' +* LOCK_ERR() && not locked +* NUMTIMES = NUMTIMES + 1 +* WAIT = 3 +* IF NUMTIMES > 5 +* WHATSGOINGON() +* NUMTIMES = 0 +* ENDIF +* ENDDO +* * End - REC_LOCK +* +* +* FUNCTION ADD_REC +* PARAMETERS wait, OKABORT +* PRIVATE forever, NUMTIMES, LOCKVAR +* +* IF WAIT > 3 +* WAIT := 3 +* ENDIF +* APPEND BLANK +* IF .NOT. NETERR() +* RETURN (.T.) +* ENDIF +* +* NUMTIMES = 0 +* DO WHILE .T. +* forever = (wait = 0) +* DO WHILE (forever .OR. wait > 0) +* +* APPEND BLANK +* IF .NOT. NETERR() +* RETURN .T. +* ENDIF +* +* INKEY(.5) && wait 1/2 second +* wait = wait - .5 +* +* ENDDO +* LOCKVAR = 'THE RECORD COULD NOT BE ADDED - FILE IN USE BY SOMEONE ELSE' +* LOCK_ERR() && not locked +* NUMTIMES = NUMTIMES + 1 +* WAIT = 3 +* IF NUMTIMES > 5 +* WHATSGOINGON() +* NUMTIMES = 0 +* ENDIF +* ENDDO +* +* ************************************************************* +* +* PROCEDURE LOCK_ERR +* PARAMETERS OKABORT +* LOCAL XXX, SAVESCR := SAVESCREEN() +* +* SETCOLOR(HREV) +* @ 22,0 +* @ 23,0 +* @ 22,0 SAY LOCKVAR +* XXX = ' ' +* @ 23,17 SAY " Enter 'Y' To Try Again " +* DO WHILE .NOT. XXX$'Y' +* @ 23,42 GET XXX PICTURE '!' +* READ +* ENDDO +* SETCOLOR(LNOR) +* RESTSCREEN(,,,,SAVESCR) +* RETURN +* +* +* +* STATIC PROCEDURE WHATSGOINGON +* PRIVATE WHATGIVES +* ?? CHR(7) +* SAVE SCREEN TO WHATGIVES +* @ 07,10 CLEAR TO 19,70 +* @ 07,10 TO 19,70 +* @ 09,15 SAY 'YOU HAVE TRIED TO GRAB THAT FILE OR RECORD ' +* @ 10,15 SAY 'OVER 5 TIMES NOW. SOMEBODY HAS LOCKED THAT ' +* @ 11,15 SAY 'FILE/RECORD UP TIGHTER THAN A DRUM!!!!! ' +* @ 13,15 SAY 'First, find out who has the file/record locked.' +* @ 14,15 SAY 'Let them finish their process if possible. ' +* @ 16,15 SAY 'You May Keep RETRYING or PRESS ALT-C as a ' +* @ 17,15 SAY 'LAST RESORT Option to ABORT YOUR APPLICATION.' +* @ 21,14 SAY ' ' +* WAIT +* RESTORE SCREEN FROM WHATGIVES +* RETURN +* +* * * * * * * * * * * * * * * * * * * * * * * * * * +* FUNCTION WAIT_BOX(LINE1, LINE2, LINE3, LINE4, V ) +* LOCAL SCRN1, I, LONGEST, H, SAVECOL +* PRIVATE LINEVAR, MSG1, MSG2, MSG3, MSG4 +* IF V = NIL +* V := 11 +* ENDIF +* DO CASE +* CASE MSG2 = NIL +* NUMMSG := 1 +* CASE MSG3 = NIL +* NUMMSG := 2 +* CASE MSG4 = NIL +* NUMMSG := 3 +* OTHERWISE +* NUMMSG := 4 +* ENDCASE +* SET CURSOR OFF +* MSG1 := LINE1 +* MSG2 := LINE2 +* MSG3 := LINE3 +* MSG4 := LINE4 +* SAVECOL := SETCOLOR() +* SETCOLOR(HREV) +* LONGEST := 0 +* FOR I = 1 TO NUMMSG +* LINEVAR := 'MSG' + STR(I,1) +* IF &LINEVAR = NIL +* ELSE +* IF LEN(&LINEVAR) > LONGEST +* LONGEST := LEN(&LINEVAR) +* ENDIF +* ENDIF +* NEXT +* +* H = ((80 - LONGEST) / 2) +* @ V,H-5 CLEAR TO V+7,H+5+LONGEST +* @ V,H-5 TO V+7,H+5+LONGEST DOUBLE +* @ V+2,H SAY LINE1 +* IF PCOUNT() > 1 +* @ V+3,H SAY LINE2 +* ENDIF +* IF PCOUNT() > 2 +* @ V+4,H SAY LINE3 +* ENDIF +* IF PCOUNT() > 3 +* @ V+5,H SAY LINE4 +* ENDIF +* SETCOLOR(SAVECOL) +* SET CURSOR ON +* RETURN (.T.) +* +* *************************************************************** +* +* FUNCTION SETBARM(ROW, COL, LEN, TOTRECS) +* LOCAL SAVECOL := SETCOLOR(LNOR) +* IF ROW = NIL +* ROW := 16 +* LEN = 20 +* COL := 40 - (LEN / 2) +* ENDIF +* @ ROW,COL SAY REPLICATE('Û', LEN ) +* SETCOLOR(HREV) +* @ ROW+1,COL SAY '0' +* @ ROW+1,COL+LEN-1 SAY ALLTRIM(STR(TOTRECS)) +* SETCOLOR(SAVECOL) +* RETURN LEN/TOTRECS +* +* *************************************************************** +* +* PROCEDURE BARM_UPDATE(ROW, COL, CURREC, BARMFACT) +* LOCAL SAVECOL := SETCOLOR(HREV), MID +* IF ROW = NIL +* ROW := 16 +* COL := 30 +* MID := 38 +* ELSE +* MID := COL + (RECCOUNT() * BARMFACTOR / 2) - 2 +* ENDIF +* @ ROW,COL SAY REPLICATE('Û', INT(CURREC*BARMFACT) ) +* @ ROW+1,MID SAY '(' + ALLTRIM(STR(CURREC)) + ')' +* SETCOLOR(SAVECOL) +* RETURN .T. +* +* ********************************************************************** +* +FUNCTION GPFLDLIST(MSYSNAME) + +LOCAL FLDS_TO_GET := {} + + // FLDS_TO_GET LAYOUT + // 1 = GREAT PLAINS FIELD NAME + // 2 = CGW0CM FIELD NAME + +IF MSYSNAME = NIL + MSYSNAME = 'CUSMAS' +ENDIF + + +// BUILD LIST OF FIELDS TO GET INFO FROM +DO CASE + CASE MSYSNAME = 'CUSMAS' + AADD(FLDS_TO_GET, {'CUSNO', 'GP_CUST'}) + AADD(FLDS_TO_GET, {'NAME', 'COMP_NAME'}) + AADD(FLDS_TO_GET, {'SLSMAN', 'SLSMAN'}) + AADD(FLDS_TO_GET, {'SHP_METHOD', 'SHP_METHOD'}) + AADD(FLDS_TO_GET, {'TERMS', 'TERMS'}) + AADD(FLDS_TO_GET, {'CUSDSC', 'DISCOUNT'}) + AADD(FLDS_TO_GET, {'DAYSTOPAY', 'DAYSTOPAY'}) + AADD(FLDS_TO_GET, {'ADD1', 'CUST_ADDR'}) + AADD(FLDS_TO_GET, {'ADD2', 'CUST_ADDR2'}) + AADD(FLDS_TO_GET, {'CONTACT', 'CONT_LNAME'}) + AADD(FLDS_TO_GET, {'COMMENT', 'COMMENT'}) + AADD(FLDS_TO_GET, {'TAXNUM', 'TAXNUM'}) + AADD(FLDS_TO_GET, {'CITY', 'CUST_CITY'}) + AADD(FLDS_TO_GET, {'CUSTYP', 'CUSTYP'}) + AADD(FLDS_TO_GET, {'STATE', 'CUST_STATE'}) + AADD(FLDS_TO_GET, {'UPSZONE', 'UPSZONE'}) + AADD(FLDS_TO_GET, {'ZIP', 'CUST_ZIP'}) + AADD(FLDS_TO_GET, {'PHONE', 'PHONE'}) + AADD(FLDS_TO_GET, {'TAXSCH', 'TAXSCH'}) + AADD(FLDS_TO_GET, {'SHIPNAME', 'SHIPNAME'}) + AADD(FLDS_TO_GET, {'SHIPADD1', 'SHIPADD1'}) + AADD(FLDS_TO_GET, {'SHIPCITY', 'SHIPADD2'}) + AADD(FLDS_TO_GET, {'SHIPST', 'SHIPST'}) + AADD(FLDS_TO_GET, {'SHIPZIP', 'SHIPZIP'}) + AADD(FLDS_TO_GET, {'SHIPPHN', 'SHIPPHN'}) + AADD(FLDS_TO_GET, {'SHIPFAX', 'SHIPFAX'}) + AADD(FLDS_TO_GET, {'FAX', 'FAX'}) + AADD(FLDS_TO_GET, {'TAXRGST', 'TAXRGST'}) + AADD(FLDS_TO_GET, {'CURRID', 'CURRID'}) + AADD(FLDS_TO_GET, {'BANK', 'CUST_ID'}) + + + CASE MSYSNAME = 'SLSMAS' + AADD(FLDS_TO_GET, {'SLSMAN', 'SLSMAN'}) + AADD(FLDS_TO_GET, {'LST_NME', 'LST_NME'}) + AADD(FLDS_TO_GET, {'FST_NME', 'FST_NME'}) + AADD(FLDS_TO_GET, {'MID_NME', 'MID_NME'}) + + + CASE MSYSNAME = 'STXDET' + AADD(FLDS_TO_GET, {'SSTAXDET', 'SSTAXDET'}) + AADD(FLDS_TO_GET, {'SSTAXSEQ', 'SSTAXSEQ'}) + AADD(FLDS_TO_GET, {'SDETDESC', 'SDETDESC'}) + AADD(FLDS_TO_GET, {'STAXON', 'STAXON'}) + AADD(FLDS_TO_GET, {'STAXINCL', 'STAXINCL'}) + AADD(FLDS_TO_GET, {'STAXAMT', 'STAXAMT'}) + AADD(FLDS_TO_GET, {'STAXRND', 'STAXRND'}) + AADD(FLDS_TO_GET, {'SAPMNMX', 'SAPMNMX'}) + AADD(FLDS_TO_GET, {'SMINAMT', 'SMINAMT'}) + AADD(FLDS_TO_GET, {'SMAXAMT', 'SMAXAMT'}) + + + CASE MSYSNAME = 'STXSCH' + AADD(FLDS_TO_GET, {'STAXSCH', 'STAXSCH'}) + AADD(FLDS_TO_GET, {'SEQ1', 'SEQ1'}) + AADD(FLDS_TO_GET, {'SEQ2', 'SEQ2'}) + AADD(FLDS_TO_GET, {'SEQ3', 'SEQ3'}) + AADD(FLDS_TO_GET, {'SEQ4', 'SEQ4'}) + AADD(FLDS_TO_GET, {'SEQ5', 'SEQ5'}) + AADD(FLDS_TO_GET, {'SEQ6', 'SEQ6'}) + AADD(FLDS_TO_GET, {'SEQ7', 'SEQ7'}) + AADD(FLDS_TO_GET, {'SEQ8', 'SEQ8'}) + AADD(FLDS_TO_GET, {'SEQ9', 'SEQ9'}) + AADD(FLDS_TO_GET, {'SEQ10', 'SEQ10'}) + + + CASE MSYSNAME = 'ARARAM' + AADD(FLDS_TO_GET, {'SHIP0', 'SHIP0'}) + AADD(FLDS_TO_GET, {'SHIP1', 'SHIP1'}) + AADD(FLDS_TO_GET, {'SHIP2', 'SHIP2'}) + AADD(FLDS_TO_GET, {'SHIP3', 'SHIP3'}) + AADD(FLDS_TO_GET, {'SHIP4', 'SHIP4'}) + AADD(FLDS_TO_GET, {'SHIP5', 'SHIP5'}) + AADD(FLDS_TO_GET, {'SHIP6', 'SHIP6'}) + AADD(FLDS_TO_GET, {'SHIP7', 'SHIP7'}) + AADD(FLDS_TO_GET, {'SHIP8', 'SHIP8'}) + AADD(FLDS_TO_GET, {'SHIP9', 'SHIP9'}) + + AADD(FLDS_TO_GET, {'TRMDSC1', 'TRMDSC1'}) + AADD(FLDS_TO_GET, {'PERCNT1', 'PERCNT1'}) + AADD(FLDS_TO_GET, {'DSCDAY1', 'DSCDAY1'}) + AADD(FLDS_TO_GET, {'NETDAY1', 'NETDAY1'}) + AADD(FLDS_TO_GET, {'DAYMON1', 'DAYMON1'}) + AADD(FLDS_TO_GET, {'DTEDUE1', 'DTEDUE1'}) + + AADD(FLDS_TO_GET, {'TRMDSC2', 'TRMDSC2'}) + AADD(FLDS_TO_GET, {'PERCNT2', 'PERCNT2'}) + AADD(FLDS_TO_GET, {'DSCDAY2', 'DSCDAY2'}) + AADD(FLDS_TO_GET, {'NETDAY2', 'NETDAY2'}) + AADD(FLDS_TO_GET, {'DAYMON2', 'DAYMON2'}) + AADD(FLDS_TO_GET, {'DTEDUE2', 'DTEDUE2'}) + + AADD(FLDS_TO_GET, {'TRMDSC3', 'TRMDSC3'}) + AADD(FLDS_TO_GET, {'PERCNT3', 'PERCNT3'}) + AADD(FLDS_TO_GET, {'DSCDAY3', 'DSCDAY3'}) + AADD(FLDS_TO_GET, {'NETDAY3', 'NETDAY3'}) + AADD(FLDS_TO_GET, {'DAYMON3', 'DAYMON3'}) + AADD(FLDS_TO_GET, {'DTEDUE3', 'DTEDUE3'}) + + AADD(FLDS_TO_GET, {'TRMDSC4', 'TRMDSC4'}) + AADD(FLDS_TO_GET, {'PERCNT4', 'PERCNT4'}) + AADD(FLDS_TO_GET, {'DSCDAY4', 'DSCDAY4'}) + AADD(FLDS_TO_GET, {'NETDAY4', 'NETDAY4'}) + AADD(FLDS_TO_GET, {'DAYMON4', 'DAYMON4'}) + AADD(FLDS_TO_GET, {'DTEDUE4', 'DTEDUE4'}) + + AADD(FLDS_TO_GET, {'TRMDSC5', 'TRMDSC5'}) + AADD(FLDS_TO_GET, {'PERCNT5', 'PERCNT5'}) + AADD(FLDS_TO_GET, {'DSCDAY5', 'DSCDAY5'}) + AADD(FLDS_TO_GET, {'NETDAY5', 'NETDAY5'}) + AADD(FLDS_TO_GET, {'DAYMON5', 'DAYMON5'}) + AADD(FLDS_TO_GET, {'DTEDUE5', 'DTEDUE5'}) + + AADD(FLDS_TO_GET, {'TRMDSC6', 'TRMDSC6'}) + AADD(FLDS_TO_GET, {'PERCNT6', 'PERCNT6'}) + AADD(FLDS_TO_GET, {'DSCDAY6', 'DSCDAY6'}) + AADD(FLDS_TO_GET, {'NETDAY6', 'NETDAY6'}) + AADD(FLDS_TO_GET, {'DAYMON6', 'DAYMON6'}) + AADD(FLDS_TO_GET, {'DTEDUE6', 'DTEDUE6'}) + + AADD(FLDS_TO_GET, {'TRMDSC7', 'TRMDSC7'}) + AADD(FLDS_TO_GET, {'PERCNT7', 'PERCNT7'}) + AADD(FLDS_TO_GET, {'DSCDAY7', 'DSCDAY7'}) + AADD(FLDS_TO_GET, {'NETDAY7', 'NETDAY7'}) + AADD(FLDS_TO_GET, {'DAYMON7', 'DAYMON7'}) + AADD(FLDS_TO_GET, {'DTEDUE7', 'DTEDUE7'}) + + AADD(FLDS_TO_GET, {'TRMDSC8', 'TRMDSC8'}) + AADD(FLDS_TO_GET, {'PERCNT8', 'PERCNT8'}) + AADD(FLDS_TO_GET, {'DSCDAY8', 'DSCDAY8'}) + AADD(FLDS_TO_GET, {'NETDAY8', 'NETDAY8'}) + AADD(FLDS_TO_GET, {'DAYMON8', 'DAYMON8'}) + AADD(FLDS_TO_GET, {'DTEDUE8', 'DTEDUE8'}) + + AADD(FLDS_TO_GET, {'TRMDSC9', 'TRMDSC9'}) + AADD(FLDS_TO_GET, {'PERCNT9', 'PERCNT9'}) + AADD(FLDS_TO_GET, {'DSCDAY9', 'DSCDAY9'}) + AADD(FLDS_TO_GET, {'NETDAY9', 'NETDAY9'}) + AADD(FLDS_TO_GET, {'DAYMON9', 'DAYMON9'}) + AADD(FLDS_TO_GET, {'DTEDUE9', 'DTEDUE9'}) + + AADD(FLDS_TO_GET, {'TRMDSC10', 'TRMDSC10'}) + AADD(FLDS_TO_GET, {'PERCNT10', 'PERCNT10'}) + AADD(FLDS_TO_GET, {'DSCDAY10', 'DSCDAY10'}) + AADD(FLDS_TO_GET, {'NETDAY10', 'NETDAY10'}) + AADD(FLDS_TO_GET, {'DAYMON10', 'DAYMON10'}) + AADD(FLDS_TO_GET, {'DTEDUE10', 'DTEDUE10'}) + + +END CASE + +RETURN FLDS_TO_GET +* +* +******************************************************* + +FUNCTION ORD_HOTKEYS(WHICHONE) + +LOCAL RETVAL := {}, NOTEVAR, NEEDVAR, SEEKKEY +LOCAL MTITLE := ' + "Reg: " + CURCONVREG->REGID + [-] + TRIM(CURCONVREG->FNAME) + [ ] + CURCONVREG->LNAME ' + +AADD(RETVAL, { 'F6-Customer Update', -5, 'UPDT_CUST()' } ) + +RETURN RETVAL + + +******************************************************* +FUNCTION UPDT_CUST() +LOCAL SAVESEL := SELECT() +STATIC MELEM + +IF MELEM = NIL + MELEM := ASCAN(GETVARS, {|X| X[3] = 'CUST_ID'}) +ENDIF + +**KEYBOARD (SAVESEL)->CUST_ID +KEYBOARD GETVARS[MELEM, 4] + +ADD_SING_REC(1,'Update CUSTOMER' ,{'CUST_MAST', .F.,,,,,'ADD',,.F.,.F. }) + +SELECT (SAVESEL) +RETURN .T. + + + + \ No newline at end of file diff --git a/CGWB0200.PRG b/CGWB0200.PRG new file mode 100644 index 0000000..5866c11 --- /dev/null +++ b/CGWB0200.PRG @@ -0,0 +1,137 @@ +* MIKE LEWIS -BUILD ADD, CHANGE, DELETE ARRAY- CGW0200 4-08-93 +PROCEDURE BUILDACD(MALIAS, SCR_NUM) + +LOCAL ACDARR := {} +LOCAL SCRNUM +LOCAL FILELIST := {} +LOCAL PREPROC := {} +LOCAL POSTPROC := '' +LOCAL OFFSET := 0 +LOCAL EDITPROC := '' +LOCAL COMPLETEKEY := NIL +LOCAL CONVERT_KEY := '' +LOCAL RELATED_DBF := '' +LOCAL DOPROC +LOCAL XTRA_HEADING +LOCAL XTRA_CARGO + +IF SELECT('IMPCUST') = 0 + IC_PARMS = DBOPEN('IMPCUST') +ENDIF + //**** ACDARR LAYOUT ****\\ + // 1 = FILE ALIAS + // 2 = SCREEN NUMBER + // 3 = ARRAY OF FILES THAT NEED TO BE OPEN + // 4 = PROC TO EXECUTE BEFORE THE SAYS AND GETS + // ie TO PAINT ADDITIONAL INFO ON SCREEN, etc..... + // 5 = PROC TO EXECUTE AFTER THE GETS + // ie TO UPDATE ANY NON RELATED VARIABLES ...... + // 6 = HORIZONTAL OFFSET FOR SCREEN GETS + // 7 = PROC TO EDIT THE GET FIELDS + // 8 = ARRAY OF PARTIAL KEYS WHICH MAKE RECORD UNIQUE. + // IF ARRAY IS EMPTY, THEN ONLY ONE COMPONENT OF THE KEY + // 9 = KEY CONVERSION PROC - IE PAD WITH LEADING ZEROS, ETC. + // 10 = LIST OF DBF'S THAT SHOULD BE CONSIDERED WHEN DELETING INFO + // 1 ARRAY FOR EACH DBF. ELEMENT 1 = DBF ALIAS NAME, ELEM 2 = INDEX SEEK ORDER + // 11 = OPTIONAL TOP HEADING FOR ACD_BROWSE + // 12 = OPTIONAL ACD CARGO FOR HOT KEYS USED IN ACD_BROWSE + +DO CASE + + // DATA DICTIONARY + CASE MALIAS = 'DATADICT' + SCRNUM = '0950' + AADD(ACDARR, {MALIAS, SCRNUM, FILELIST, PREPROC, ; // 1-4 + POSTPROC, OFFSET, EDITPROC, COMPLETEKEY, ; // 5-8 + CONVERT_KEY, RELATED_DBF}) // 9-10 + + + + // CUSTOMER MASTER + CASE MALIAS = 'CUST_MAST' + SCRNUM := '1170' + RELATED_DBF := { {'CUST_PRICE',1} } + PREPROC := { {'ORD_PAINT(9,14,9,47, "LNOR")','P'} } // paint bill to/ship to + AADD(ACDARR, {MALIAS, SCRNUM, FILELIST, PREPROC, ; // 1-4 + POSTPROC, OFFSET, EDITPROC, COMPLETEKEY, ; // 5-8 + CONVERT_KEY, RELATED_DBF}) // 9-10 + + + + // PASSWORDS + CASE MALIAS = 'PASSWORD' + SCRNUM = '6100' + PREPROC = { {'XXXPASSP()','P'} } // PAINTS INSTRUCTION BOX ON SCREEN + POSTPROC = 'XXXPASSS()' // UPDATE PASSWORD AND AUTHORIZATION VARIABLES + // IF THE CURRENT USER CHANGES HIS OPTIONS + OFFSET = -5 + + AADD(ACDARR, {MALIAS, SCRNUM, FILELIST, PREPROC, ; // 1-4 + POSTPROC, OFFSET, EDITPROC, COMPLETEKEY, ; // 5-8 + CONVERT_KEY, RELATED_DBF}) // 9-10 + + + +ENDCASE + +RETURN ACDARR + + + +CLOSE DATABASES +RETURN ACDARR + +********************************************************************* +********************************************************************* +********************************************************************* + +********************************************************************* +********************************************************************* +********************************************************************* +FUNCTION COPYSTD() +LOCAL SAVESEL := SELECT(), SAVEFILT +LOCAL COPYFROM := ALLTRIM( ATTRIBUTES ) + +SELECT ATTRIBUTES +USE +SELECT USERFILE2 +// APPEND ALL FROM &ATTRIBUTES FOR ATT_TYPE = 'S' +APPEND ALL FROM ©FROM FOR ATT_TYPE = 'S' +DBOPEN('ATTRIBUTES') +SELECT (SAVESEL) +RETURN .T. + +********************************************** +FUNCTION KEY_CONV(ENTERED_KEY, PTYPE) // PUT LEADING SPACES IN ORDER_NUM +LOCAL MSPACES, RETVAL := .T., REPVAR, REPVARNAME +LOCAL MLEN + + +IF EMPTY(ENTERED_KEY) + RETURN '' +ENDIF + + +IF AT('?', ENTERED_KEY) > 0 + DO CASE + CASE PTYPE = NIL + RETURN ENTERED_KEY + CASE PTYPE = 'RM' // R = REPLACE DATABASE / M = SET MEMORY VARIABLE + RETURN .T. + ENDCASE +ENDIF + +MLEN = LEN(ENTERED_KEY) +MSPACES = SPACE(MLEN) +IF EMPTY(ENTERED_KEY) // AND RETURN THE RESULT + RETURN '' +ELSE + ENTERED_KEY = ALLTRIM(ENTERED_KEY) + RETVAL = RIGHT(MSPACES+ENTERED_KEY, MLEN) +ENDIF + + +RETURN RETVAL + + + \ No newline at end of file diff --git a/CGWB1100.PRG b/CGWB1100.PRG new file mode 100644 index 0000000..429f359 --- /dev/null +++ b/CGWB1100.PRG @@ -0,0 +1,89 @@ +*MIKE LEWIS - ADD NEW REC TO BTRIEVE FILE - 05-17-94 + +FUNCTION CGWB1100 + +LOCAL MSTRUCT, MFLD_NAMES +LOCAL FLDS_TO_GET := {}, GP_FLD, CGW_FLD, MVAL +LOCAL BARM_FACTOR, XXX, OPT, MWORK_AREA +LOCAL MBANK, NEWREC := .F. + +// GO OPEN AND SETUP BTRIEVE FILE +RESULT = SET_BTREV('CUSMAS', 'CUST_MAST') +MTABLE = RESULT[1] +MSTRUCT = RESULT[2] +MWORK_AREA = N_XSELECT() + +NET_USE('&USERFILEX', .F., 5, 'CUST_MAST') && CUSTOMER CHANGE FLAG +*-NET_USE('CGW0CM', .F., 5, 'CUST_MAST') && CUSTOMER CHANGE FLAG +*-SET INDEX TO CGW1CM,CGW2CM,CGW3CM,CGW4CM + + +FLDS_TO_GET = GPFLDLIST() + + +SELECT CUST_MAST +DO WHILE !EOF() + MCUST_ID = GP_CUST // GET GREAT PLAINS CUST ID TO ADD + IF !N_XSEEK(MCUST_ID) // SEEK THE RECORD KEY + NEWREC = .T. + + // CLEAR THE RECORD BUFFER WORK AREA + N_XSELECT(MWORK_AREA) // SELECT BTRIEVE FILE + N_XCLRBUF() + ENDIF + + FOR L = 1 TO LEN(FLDS_TO_GET) + GP_FLD = FLDS_TO_GET[L,1] + CGW_FLD = FLDS_TO_GET[L,2] + + DO CASE + + CASE GP_FLD == 'PHONE' + MVAL = STRIPDASH(CGW_FLD) + + CASE GP_FLD == 'FAX' + MVAL = STRIPDASH(CGW_FLD) + + CASE GP_FLD == 'SHIPPHN' + MVAL = STRIPDASH(CGW_FLD) + + CASE GP_FLD == 'SHIPFAX' + MVAL = STRIPDASH(CGW_FLD) + + CASE GP_FLD == 'TERMS' + MVAL = VAL(CUST_MAST->&CGW_FLD) + + CASE GP_FLD == 'SHP_METHOD' + MVAL = VAL(CUST_MAST->&CGW_FLD) + + + OTHERWISE + MVAL = CUST_MAST->&CGW_FLD + + ENDCASE + + + N_XREPLACE( GP_FLD, MVAL) // UPDATE RECORD BUFFER + + NEXT + IF NEWREC + N_XINSERT() // ADD NEW RECORD WITH BUFFER INFO + ELSE + N_XUPDATE() // UPDATE OLD RECORD + ENDIF + SKIP 1 +ENDDO + +CLOSE DATABASES +RETURN + +* * * * * * * * * * * * * * * * * * +FUNCTION STRIPDASH(MFIELD) +// TAKE OUT THE DASHES IN &MFILD + +LOCAL MVAL + +MVAL = &MFIELD +MVAL = STRTRAN(MVAL, '-', '') +RETURN MVAL + \ No newline at end of file diff --git a/CGWB1170.PRG b/CGWB1170.PRG new file mode 100644 index 0000000..ccaf06c --- /dev/null +++ b/CGWB1170.PRG @@ -0,0 +1,193 @@ +* MIKE LEWIS - UPDATE CUSTMAST FROM GREAT PLAINS DBF - CGW1170 04-26-94 + +#INCLUDE 'RQB.CH' +#include "RASQLB.CH" +* #INCLUDE 'F:\CLIP52\RASQLB\52\RQB.CH' +* #include "F:\CLIP52\RASQLB\52\RASQLB.CH" +#INCLUDE 'INKEY.CH' + +// CONSTANTS +#define T_CM_CUSNO 1 // 1ST Index order for CUSMAS.DAT (customer #) +#define T_CM_NAME 2 // 2nd Index order for CUSMAS.DAT (customer name) +#define A_CUSNO 2 // 2nd Element in CUSMAS Field Array (customer #) +#define A_NAME 4 // 4TH Element in CUSMAS Field Array (customer name) + + +EXTERNAL N_XVIA +***************************************************** +FUNCTION CGWB1170 +// UPDATE CUSTOMER DBF WITH GREAT PLAINS INFO + +LOCAL MSTRUCT, MFLD_NAMES +LOCAL FLDS_TO_GET := {}, GP_FLD, CGW_FLD, MVAL +LOCAL BARM_FACTOR, XXX, OPT, MWORK_AREA +LOCAL MBANK + + +CLS +@ 10,15 SAY 'About to UPDATE the CUSTOMER File from the' +@ 11,15 SAY 'Great Plains File. This process may take ' +@ 12,15 SAY 'several minutes to complete.' +OPT = ' ' +@ 14,20 SAY 'Do you wish to continue? (Y/N)' GET OPT PICTURE '!' VALID OPT$'YN' +READ +IF LASTKEY() = 27 .OR. OPT$'N' + RETURN +ENDIF + +// GO OPEN AND SETUP BTRIEVR FILE +RESULT = SET_BTREV() +MTABLE = RESULT[1] +MSTRUCT = RESULT[2] + + +MWORK_AREA = N_XSELECT() + +// OPEN UP CGW MASTER FILE +DBOPEN('CUST_MAST') +*-NET_USE('CGW0CM', .F., 5, 'CUST_MAST') && CUSTOMER CHANGE FLAG +*-SET INDEX TO CGW1CM,CGW2CM,CGW3CM,CGW4CM + + + +FLDS_TO_GET = GPFLDLIST() + +*-QBROWSE(2,2,20,79) + + +BARM_FACTOR = SETBARM(,, 20, N_XLASTREC() ) + +XXX = 0 +N_XGOTOTOP() // TOP OF BTRIVE FILE +DO WHILE !N_XEOF() + XXX++ + BARM_UPDATE(,,XXX, BARM_FACTOR) + MCUSNO = N_XFETCH(A_CUSNO) // GET CURRENT GREAT PLAINS CUSTOMER ID + MBANK = N_XFETCH('BANK') // GET CURRENT CUSTOMER ID + + SELECT CUST_MAST +*-SEEK MCUSNO + SEEK MBANK // CGW CUST ID + IF !FOUND() + ADD_REC(1) + REPLACE GP_CUST WITH MCUSNO + + /////////////////////////////////////////////////// + // TEMPORARY FOR NOW +*- REPLACE CUST_ID WITH MCUSNO + REPLACE CUST_ID WITH MBANK + + + + ELSE + REC_LOCK(1) + ENDIF + N_XSELECT(MWORK_AREA) // SELECT BTRIEVE FILE + + FOR L = 1 TO LEN(FLDS_TO_GET) + GP_FLD = FLDS_TO_GET[L,1] + CGW_FLD = FLDS_TO_GET[L,2] + + DO CASE + + CASE GP_FLD == 'PHONE' + MVAL = SETDASH(GP_FLD) + + CASE GP_FLD == 'FAX' + MVAL = SETDASH(GP_FLD) + + CASE GP_FLD == 'SHIPPHN' + MVAL = SETDASH(GP_FLD) + + CASE GP_FLD == 'SHIPFAX' + MVAL = SETDASH(GP_FLD) + + CASE GP_FLD == 'TERMS' + MVAL = STR(N_XFETCH(GP_FLD),12) + + CASE GP_FLD == 'SHP_METHOD' + MVAL = STR(N_XFETCH(GP_FLD),5) + + CASE GP_FLD = 'SHIP' + // ONLY GET SHIPPING INFO FOR CUSTOMERS WITH '01' OR '02' + // IN THE LAST 2 DIGITS IN THE CUST ID + IF RIGHT(MBANK,2) = '01' .OR. RIGHT(MBANK,2) = '02' + MVAL = N_XFETCH(GP_FLD) + ELSE + MVAL = '' + ENDIF + + + + OTHERWISE + MVAL = N_XFETCH(GP_FLD) + + ENDCASE + + +*- IF EMPTY(CUST_MAST->&CGW_FLD) + REPLACE CUST_MAST->&CGW_FLD WITH MVAL +*- ENDIF + + NEXT + + + N_XSKIP(1) +ENDDO +CLOSE DATABASES +RETURN + +* * * * * * * * * * * * * * * * * * * * * * * * +*- FUNCTION SET_BTREV +*- // OPEN UP THE BTRIEVE FILE +*- +*- CLS +*- WAIT_BOX(' *** UPDATING CUSTOMER FILE *** ',; +*- ' *** PLEASE WAIT *** ') +*- +*- N_XLOGIN() +*- N_XERRLVL(3) +*- +*- MSTRUCT := {} +*- MFLD_NAMES := {} +*- SELECT 0 +*- +*- NET_USE('CGWBTREV', .F., 5, 'DEFINITIONS') && CUSTOMER CHANGE FLAG +*- DO WHILE !EOF() +*- AADD(MSTRUCT, FNAME + TYPE + LENGTH + DECIMAL_PT + NUM_DECS + FILLER + SEMI_COLON) +*- AADD(MFLD_NAMES, FNAME) +*- SKIP 1 +*- ENDDO +*- USE +*- +*- +*- NET_USE('&CONTROL', .F., 5, 'CONTROL') && CUSTOMER CHANGE FLAG +*- MPATH = ALLTRIM(CONTROL->BTR_PATH) +*- MTABLE = MPATH + 'CUSMAS.DAT' +*- USE +*- +*- SET DEFAULT FILETYPE TO '.DAT' +*- SET RDD TO 'RQBRDD' +*- +*- N_XSELECT(0) // SELECT NEXT EMPTY BTRIEVE WORK AREA +*- N_XUSE(MTABLE, MSTRUCT) +*- +*- +*- SET DEFAULT FILETYPE TO +*- SET RDD TO +*- +*- RETURN {MTABLE, MSTRUCT} +*- +* * * * * * * * * * * * * * * * * * +FUNCTION SETDASH(MFIELD) +// PUT IN DASHES FOR THE PHONE NUMBER IN &MFILD + +LOCAL MVAL + +MVAL = TRIM(N_XFETCH(MFIELD)) // GET PHONE NUMBER +MVAL = LEFT(MVAL,3) + '-' + SUBSTR(MVAL,4,3) + '-' + RIGHT(MVAL,4) +RETURN MVAL + + + + \ No newline at end of file diff --git a/CGWB1210.PRG b/CGWB1210.PRG new file mode 100644 index 0000000..82b4c6c --- /dev/null +++ b/CGWB1210.PRG @@ -0,0 +1,51 @@ +PROCEDURE CGWB1210() +****************************************************** +** MIKE LEWIS - BROWSE MENU 09-28-94 - CGWB1200 +****************************************************** + +LOCAL NCHOICE, MARR := {}, SAVESCR, XARR := {} + + + +SETCOLOR(LNOR) + +CLS +@ 0,30 SAY ' Great Plains File Maintenance ' +@ 1,0 SAY DOUBLE + +AADD(XARR, 'BROWSE Customer File') +AADD(XARR, 'BROWSE Salesmen File') +AADD(XARR, 'BROWSE Shipping Terms File') +AADD(XARR, 'BROWSE Tax Schedule File') +AADD(XARR, 'BROWSE Tax Detail File') + +DO WHILE .T. + SAVESCR = SAVESCREEN() + NCHOICE = PICKLIST(XARR, 10) + IF LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + IF NCHOICE = 1 + CGWBBROW('CUSMAS') + ELSE + IF NCHOICE = 2 + CGWBBROW('SLSMAS') + ELSE + IF NCHOICE = 3 + CGWBBROW('ARARAM') + ELSE + IF NCHOICE = 4 + CGWBBROW('STXSCH') + ELSE + IF NCHOICE = 5 + CGWBBROW('STXDET') + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF + RESTSCREEN(,,,,SAVESCR) +ENDDO + + \ No newline at end of file diff --git a/CGWB1220.PRG b/CGWB1220.PRG new file mode 100644 index 0000000..21638d7 --- /dev/null +++ b/CGWB1220.PRG @@ -0,0 +1,103 @@ +PROCEDURE CGWB1220() +****************************************************** +** MIKE LEWIS - UPDATE MENU 09-28-94 - CGWB1200 +****************************************************** + +LOCAL NCHOICE, MARR := {}, SAVESCR, XARR := {} + + + +SETCOLOR(LNOR) + +CLS +@ 0,30 SAY ' Great Plains File Maintenance ' +@ 1,0 SAY DOUBLE + +AADD(XARR, 'UPDATE Customer File') +AADD(XARR, 'UPDATE Salesmen File') +AADD(XARR, 'UPDATE Shipping Terms File') +AADD(XARR, 'UPDATE Tax Schedule File') +AADD(XARR, 'UPDATE Tax Detail File') + +DO WHILE .T. + SAVESCR = SAVESCREEN() + NCHOICE = PICKLIST(XARR, 10) + IF LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + IF NCHOICE = 1 + CGWB1300('CUST_MAST', 'CUSMAS', {'CUSNO'}) + ELSE + IF NCHOICE = 2 + CGWB1300('SALESMEN', 'SLSMAS', {'SLSMAN'}, .T.) + ELSE + IF NCHOICE = 3 + CGWB1300('AR_INFO', 'ARARAM', {'CAGE1'}, .T.) + ELSE + IF NCHOICE = 4 + CGWB1300('TAX_SCHED', 'STXSCH', {'STAXSCH'}, .T.) + + + // SETUP THE SHIP VIA FILE + MARR := {} + AADD(MARR, {'10', 'SHIP0'}) + AADD(MARR, {'20', 'SHIP1'}) + AADD(MARR, {'30', 'SHIP2'}) + AADD(MARR, {'40', 'SHIP3'}) + AADD(MARR, {'50', 'SHIP4'}) + AADD(MARR, {'60', 'SHIP5'}) + AADD(MARR, {'70', 'SHIP6'}) + AADD(MARR, {'80', 'SHIP7'}) + AADD(MARR, {'90', 'SHIP8'}) + AADD(MARR, {' 0', 'SHIP9'}) + + DO_UPDATE('SHIPMETH', MARR) + ELSE + IF NCHOICE = 5 + CGWB1300('TAX_DETAIL', 'STXDET', {'SSTAXDET', 'SSTAXSEQ'}, .T.) + + // SETUP THE TERMS FILE + MARR := {} + AADD(MARR, {'10', 'TRMDSC1'}) + AADD(MARR, {'20', 'TRMDSC2'}) + AADD(MARR, {'30', 'TRMDSC3'}) + AADD(MARR, {'40', 'TRMDSC4'}) + AADD(MARR, {'50', 'TRMDSC5'}) + AADD(MARR, {'60', 'TRMDSC6'}) + DO_UPDATE('TERMS', MARR) + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF + RESTSCREEN(,,,,SAVESCR) +ENDDO + +******************************************************* +FUNCTION DO_UPDATE(MFILE, MARR) +// +DBOPEN('AR_INFO') +DBOPEN(MFILE) + +FOR L2 = 1 TO LEN(MARR) + SEEK MARR[L2,1] + IF !FOUND() + ADD_REC(1) + ELSE + REC_LOCK(1) + ENDIF + + REPLACE CODE WITH MARR[L2,1] + MFLD = MARR[L2,2] + REPLACE DESC WITH AR_INFO->&MFLD + UNLOCK + + SKIP 1 +NEXT + +CLOSE DATABASES +RETURN + + + \ No newline at end of file diff --git a/CGWB1300.PRG b/CGWB1300.PRG new file mode 100644 index 0000000..419fe8d --- /dev/null +++ b/CGWB1300.PRG @@ -0,0 +1,233 @@ +* MIKE LEWIS - UPDATE TABLES FROM GREAT PLAINS DBF - CGW1300 09-22-94 + +#INCLUDE 'RQB.CH' +#include "RASQLB.CH" +** #INCLUDE 'F:\CLIP52\RASQLB\52\RQB.CH' +** #include "F:\CLIP52\RASQLB\52\RASQLB.CH" +#INCLUDE 'INKEY.CH' + +// CONSTANTS +#define A_CUSNO 2 // 2nd Element in CUSMAS Field Array (customer #) + +EXTERNAL N_XVIA + +***************************************************** +FUNCTION CGWB1300(MFILE, BFILE, BKEY_FLD, DO_MSG) +// UPDATE TABLE DBFs WITH GREAT PLAINS INFO + + // MFILE = CGW FILE NAME + // BFILE = BTRIEVE FILE NAME + // BKEY_FLD = AN ARRAY OF BTRIEVE KEY FIELDS NEEDE TO LOOKUP CGW RECORDS + // DO_MSG = LOGICAL FLAG TO DISPLAY MESSAGE BELOW + +LOCAL MSTRUCT, MFLD_NAMES +LOCAL FLDS_TO_GET := {}, GP_FLD, CGW_FLD, MVAL +LOCAL BARM_FACTOR, XXX, OPT, MWORK_AREA, ALL := .T. +LOCAL DO_IT := .F. + +IF DO_MSG = NIL + DO_MSG = .T. +ENDIF + +IF DO_MSG + CLS + @ 10,15 SAY 'About to UPDATE the TABLE Files from the' + @ 11,15 SAY 'Great Plains File. This process may take ' + @ 12,15 SAY 'several minutes to complete.' + OPT = ' ' + @ 14,20 SAY 'Do you wish to continue? (Y/N)' GET OPT PICTURE '!' VALID OPT$'YN' + READ + IF LASTKEY() = 27 .OR. OPT$'N' + RETURN + ENDIF +ENDIF + +// GO OPEN AND SETUP BTRIEVR FILE +RESULT = SET_BTREV(BFILE, MFILE) +MTABLE = RESULT[1] +MSTRUCT = RESULT[2] + + +MWORK_AREA = N_XSELECT() + +// OPEN UP CGW MASTER FILE +DBOPEN(MFILE) + + + +FLDS_TO_GET = GPFLDLIST(BFILE) + +IF DO_IT + QBROWSE(2,2,20,79) +ENDIF + + +BARM_FACTOR = SETBARM(,, 20, N_XLASTREC() ) + +XXX = 0 +N_XGOTOTOP() // TOP OF BTRIVE FILE +DO WHILE !N_XEOF() + XXX++ + BARM_UPDATE(,,XXX, BARM_FACTOR) + + IF MFILE = 'CUST_MAST' + MCUSNO = N_XFETCH(A_CUSNO) // GET CURRENT GREAT PLAINS CUSTOMER ID + MKEY = N_XFETCH('BANK') // GET CURRENT CUSTOMER ID + ELSE + MKEY = '' + FOR L = 1 TO LEN(BKEY_FLD) + XKEY = N_XFETCH(BKEY_FLD[L]) // GET CURRENT GREAT PLAINS KEY VALUE + IF VALTYPE(XKEY) = 'N' + MKEY = MKEY + LTRIM(STR(XKEY)) + ELSE + IF VALTYPE(XKEY) = 'D' + MKEY = MKEY + DTOS(XKEY) + ELSE + MKEY = MKEY + XKEY + ENDIF + ENDIF + NEXT + ENDIF + + // WATCH OUT FOR NULL CHARACTERS!!! + FOR L2 = 1 TO LEN(MKEY) + X = SUBSTR(MKEY,1,L2) + IF ASC(X) = 0 + X = ' ' + MKEY = LEFT(MKEY,L2-1) + X + RIGHT(MKEY, LEN(MKEY)-L2) + ENDIF + NEXT + + SELECT &MFILE + SEEK MKEY // CGW CUST ID OR FILE KEY + IF !FOUND() + ADD_REC(1) + ELSE + REC_LOCK(1) + ENDIF + + N_XSELECT(MWORK_AREA) // SELECT BTRIEVE FILE + + FOR L = 1 TO LEN(FLDS_TO_GET) + GP_FLD = FLDS_TO_GET[L,1] + CGW_FLD = FLDS_TO_GET[L,2] + + + + IF MFILE = 'CUST_MAST' + + DO CASE + + CASE GP_FLD == 'PHONE' + MVAL = SETDASH(GP_FLD) + + CASE GP_FLD == 'FAX' + MVAL = SETDASH(GP_FLD) + + CASE GP_FLD == 'SHIPPHN' + MVAL = SETDASH(GP_FLD) + + CASE GP_FLD == 'SHIPFAX' + MVAL = SETDASH(GP_FLD) + + CASE GP_FLD == 'TERMS' + MVAL = STR(N_XFETCH(GP_FLD),2) + + CASE GP_FLD == 'SHP_METHOD' + MVAL = STR(N_XFETCH(GP_FLD),2) + + CASE GP_FLD == 'SLSMAN' + MVAL = STR(VAL(N_XFETCH(GP_FLD)),5) + + CASE GP_FLD = 'SHIP' + // ONLY GET SHIPPING INFO FOR CUSTOMERS WITH '01' OR '02' + // IN THE LAST 2 DIGITS IN THE CUST ID + IF RIGHT(MKEY,2) = '01' .OR. RIGHT(MKEY,2) = '02' + MVAL = N_XFETCH(GP_FLD) + ELSE + MVAL = '' + ENDIF + + OTHERWISE + MVAL = N_XFETCH(GP_FLD) + + ENDCASE + ELSE + MVAL = N_XFETCH(GP_FLD) + ENDIF + + REPLACE &MFILE->&CGW_FLD WITH MVAL + NEXT + + + N_XSKIP(1) +ENDDO + +N_XCLOSE(ALL) + +CLOSE DATABASES +RETURN + + + + + + + +* * * * * * * * * * * * * * * * * * * * * * * * +FUNCTION SET_BTREV(MFILE, MDESC) +// OPEN UP THE BTRIEVE FILE + +CLS +WAIT_BOX(' *** UPDATING ' + MDESC + ' FILE *** ',; + ' *** PLEASE WAIT *** ') + +N_XLOGIN() +N_XERRLVL(3) + +MSTRUCT := {} +MFLD_NAMES := {} +SELECT 0 + +NET_USE('CGWBTREV', .F., 1, 'DEFINITIONS') && CUSTOMER CHANGE FLAG +GO TOP +DO WHILE !EOF() + IF TRIM(SYSNAME) == MFILE + AADD(MSTRUCT, FNAME + TYPE + LENGTH + DECIMAL_PT + NUM_DECS + FILLER + SEMI_COLON) + AADD(MFLD_NAMES, FNAME) + ENDIF + SKIP 1 +ENDDO +USE + + +NET_USE('&CONTROL', .F., 5, 'CONTROL') && CUSTOMER CHANGE FLAG +MPATH = ALLTRIM(CONTROL->BTR_PATH) +MTABLE = MPATH + MFILE + '.DAT' +USE + +SET DEFAULT FILETYPE TO '.DAT' +SET RDD TO 'RQBRDD' + +N_XSELECT(0) // SELECT NEXT EMPTY BTRIEVE WORK AREA +N_XUSE(MTABLE, MSTRUCT) + + +SET DEFAULT FILETYPE TO +SET RDD TO + +RETURN {MTABLE, MSTRUCT} + +* * * * * * * * * * * * * * * * * * +FUNCTION SETDASH(MFIELD) +// PUT IN DASHES FOR THE PHONE NUMBER IN &MFILD + +LOCAL MVAL + +MVAL = TRIM(N_XFETCH(MFIELD)) // GET PHONE NUMBER +MVAL = LEFT(MVAL,3) + '-' + SUBSTR(MVAL,4,3) + '-' + RIGHT(MVAL,4) +RETURN MVAL + + + + \ No newline at end of file diff --git a/CGWB1310.PRG b/CGWB1310.PRG new file mode 100644 index 0000000..f613246 --- /dev/null +++ b/CGWB1310.PRG @@ -0,0 +1,62 @@ +*MIKE LEWIS +PROCEDURE CGWB1310 + +LOCAL MARR := {}, ARR1 := {}, ARR2 := {}, L, L2, MFLD + +// UPDATE ALL OF THE FOLLING TABLES +CGWB1300('AR_INFO', 'ARARAM', {'CAGE1'}, .T.) +CGWB1300('SALESMEN', 'SLSMAS', {'SLSMAN'}, .F.) +CGWB1300('TAX_DETAIL', 'STXDET', {'SSTAXDET', 'SSTAXSEQ'}, .F.) +CGWB1300('TAX_SCHED', 'STXSCH', {'STAXSCH'}, .F.) + +// SETUP THE SHIP VIA AND TERMS FILES +AADD(ARR1, {'10', 'SHIP0'}) +AADD(ARR1, {'20', 'SHIP1'}) +AADD(ARR1, {'30', 'SHIP2'}) +AADD(ARR1, {'40', 'SHIP3'}) +AADD(ARR1, {'50', 'SHIP4'}) +AADD(ARR1, {'60', 'SHIP5'}) +AADD(ARR1, {'70', 'SHIP6'}) +AADD(ARR1, {'80', 'SHIP7'}) +AADD(ARR1, {'90', 'SHIP8'}) +AADD(ARR1, {' 0', 'SHIP9'}) + +AADD(ARR2, {'10', 'TRMDSC1'}) +AADD(ARR2, {'20', 'TRMDSC2'}) +AADD(ARR2, {'30', 'TRMDSC3'}) +AADD(ARR2, {'40', 'TRMDSC4'}) +AADD(ARR2, {'50', 'TRMDSC5'}) +AADD(ARR2, {'60', 'TRMDSC6'}) + +DBOPEN('AR_INFO') + +FOR L = 1 TO 2 + IF L = 1 + MARR = ACLONE(ARR1) + DBOPEN('SHIPMETH') + ELSE + MARR = ACLONE(ARR2) + DBOPEN('TERMS') + ENDIF + FOR L2 = 1 TO LEN(MARR) + SEEK MARR[L2,1] + IF !FOUND() + ADD_REC(1) + ELSE + REC_LOCK(1) + ENDIF + + REPLACE CODE WITH MARR[L2,1] + MFLD = MARR[L2,2] + REPLACE DESC WITH AR_INFO->&MFLD + UNLOCK + + SKIP 1 + NEXT +NEXT + +CLOSE DATABASES +RETURN + + + \ No newline at end of file diff --git a/CGWBTREV.PRG b/CGWBTREV.PRG new file mode 100644 index 0000000..882a7ba --- /dev/null +++ b/CGWBTREV.PRG @@ -0,0 +1,156 @@ +#INCLUDE 'RQB.CH' +#include "RASQLB.CH" +#INCLUDE 'INKEY.CH' + +// CONSTANTS +#define T_CM_CUSNO 1 // 1ST Index order for CUSMAS.DAT (customer #) +#define T_CM_NAME 2 // 2nd Index order for CUSMAS.DAT (customer name) +#define A_CUSNO 2 // 2nd Element in CUSMAS Field Array (customer #) +#define A_NAME 4 // 4TH Element in CUSMAS Field Array (customer name) + + +EXTERNAL N_XVIA + +// BTRIEVE + +/////////////////////////// +FUNCTION BROWSE_TABLE(MFILE, MFIELD_ARR, MHEADER) +// BROWSE THE MFILE + +LOCAL NTOP, NLEFT, NBOTT, NRIGHT +LOCAL MPROC, MPIC, SAVESEL := N_XSELECT() + +N_XSELECT(MFILE) // SELECT THE BROWSE FILE WORK AREA + +NTOP = 3 +NBOTT = 20 +NLEFT = 1 +NRIGHT = 79 + +//PARAMETER p_row1,p_col1,p_row2,p_col2,MFIELD_ARR,p_proc,p_pic,MHEADER +QBROWSE(NTOP, NLEFT, NBOTT, NRIGHT, MFIELD_ARR, MPROC, MPIC, MHEADER) + +N_XSELECT(SAVESEL) // RESTORE SAVED WORK AREA +RETURN + + + + +* * * * * * * * * * * * * * * * * * +FUNCTION CGWBBROW(MFILE) +// BROWSE THE GREAT PLAINS FILE THRU BTRIEVE + +LOCAL MPATH, MTABLE, MHEADER, MFIELD_ARR:= {}, MHEAD_ARR := {} +LOCAL MLEN + +N_XLOGIN() +N_XERRLVL(3) + +NET_USE('&CONTROL', .F., 5, 'CONTROL') && CUSTOMER CHANGE FLAG +MPATH = ALLTRIM(CONTROL->BTR_PATH) +MTABLE = MPATH + MFILE + '.DAT' +USE + + +MSTRUCT := {} +MFLD_NAMES := {} +SELECT 0 +NET_USE('CGWBTREV', .F., 5, 'DEFINITIONS') && CUSTOMER CHANGE FLAG +DO WHILE !EOF() + IF TRIM(SYSNAME) == MFILE + AADD(MSTRUCT, FNAME + TYPE + LENGTH + DECIMAL_PT + NUM_DECS + FILLER + SEMI_COLON) + IF FNAME <> 'FILL' .AND. AT('ARCM', FNAME) = 0 + AADD(MFLD_NAMES, FNAME) + MLEN = MAX( VAL(LENGTH), LEN(ALLTRIM(FNAME)) ) + AADD(MHEAD_ARR, SUBS(FNAME,1,MLEN) ) + ENDIF + ENDIF + SKIP 1 +ENDDO +USE + + +SET DEFAULT FILETYPE TO '.DAT' +SET RDD TO 'RQBRDD' +NEW_STRUCT := RQBSTRUCT(MFILE) + +N_XSELECT(0) // SELECT NEXT EMPTY BTRIEVE WORK AREA +N_XUSE(MTABLE, MSTRUCT) +N_XORDER(1) // SET TO CORRECT INDEX ORDER + + + +N_XSRECSIZ() +N_XRECSIZ() +SET DEFAULT FILETYPE TO +SET RDD TO + + +CLS +MHEADER := {} +MFIELD_ARR := {} + +AADD(MFIELD_ARR, 'CUSNO') +AADD(MHEADER, 'GP CUST#') + +AADD(MFIELD_ARR, 'BANK') +AADD(MHEADER, 'CGW CUST#') + +AADD(MFIELD_ARR, 'NAME') +AADD(MHEADER, 'CUST NAME') + +AADD(MFIELD_ARR, 'ADD1') +AADD(MHEADER, 'ADDRESS') + +AADD(MFIELD_ARR, 'CITY') +AADD(MHEADER, 'CITY') + +AADD(MFIELD_ARR, 'STATE') +AADD(MHEADER, 'STATE') + +AADD(MFIELD_ARR, 'ZIP') +AADD(MHEADER, 'ZIP') + +AADD(MFIELD_ARR, 'PHONE') +AADD(MHEADER, 'PHONE') + +AADD(MFIELD_ARR, 'FAX') +AADD(MHEADER, 'FAX') + +AADD(MFIELD_ARR, 'TAXSCH') +AADD(MHEADER, 'TAX SCH.') + +AADD(MFIELD_ARR, 'SHIPNAME') +AADD(MHEADER, 'SHIPPING NAME') + +AADD(MFIELD_ARR, 'SHIPADD1') +AADD(MHEADER, 'SHIPPING ADDR1') + +AADD(MFIELD_ARR, 'SHIPADD2') +AADD(MHEADER, 'SHIPPING ADDR2') + +AADD(MFIELD_ARR, 'SHIPCITY') +AADD(MHEADER, 'SHIPPING CITY') + +AADD(MFIELD_ARR, 'SHIPST') +AADD(MHEADER, 'SHIPPING STATE') + +AADD(MFIELD_ARR, 'SHIPZIP') +AADD(MHEADER, 'SHIPPING ZIP') + +AADD(MFIELD_ARR, 'SHP_METHOD') +AADD(MHEADER, 'SHP_METHOD') + +AADD(MFIELD_ARR, 'TERMS') +AADD(MHEADER, 'TERMS') + +AADD(MFIELD_ARR, 'SLSMAN') +AADD(MHEADER, 'SALESMAN') + +AADD(MFIELD_ARR, 'CLIMIT') +AADD(MHEADER, 'CREDIT LIMIT') + +BROWSE_TABLE(MTABLE, MFLD_NAMES, MHEAD_ARR) +N_XCLOSE(.T.) // CLOSE ALL BTRIVE FILES! +RETURN + \ No newline at end of file diff --git a/CGWFIELD.PRG b/CGWFIELD.PRG new file mode 100644 index 0000000..2b42d0c --- /dev/null +++ b/CGWFIELD.PRG @@ -0,0 +1,44 @@ +FUNCTION CK_IF_NUMERIC(CKFLD) +LOCAL GOODVAR := '', I, CKCHAR +LOCAL REPVAR := ALLTRIM(CKFLD) // -- FIELD TO VALIDATE +LOCAL NUMDEC := 0 + +** CHECK FOR ALPHA FIELD (!NUMERIC) +FOR I = 1 TO LEN(REPVAR) + CKCHAR := SUBSTR(REPVAR,I,1) + IF !(CKCHAR$'0123456789-.') + I := 999 + ELSE + IF (CKCHAR >= CHR(48) .AND. CKCHAR <= CHR(57)) + GOODVAR := GOODVAR + CKCHAR + ELSE + IF CKCHAR = '-' + IF I = 1 + GOODVAR := GOODVAR + CKCHAR + ELSE + I := 999 + ENDIF + ELSE + IF CKCHAR = '.' + NUMDEC ++ + IF NUMDEC = 1 + GOODVAR := GOODVAR + CKCHAR + ELSE + I := 999 + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF +NEXT + +***IF >= 999, THEN IT WAS AN ALPHA LITERAL STRING +***IF < 999, THEN IT WAS A NUMERIC VALUE + +IF I < 999 + RETURN .T. +ELSE + RETURN .F. +ENDIF + + \ No newline at end of file diff --git a/CGWFUNC.PRG b/CGWFUNC.PRG new file mode 100644 index 0000000..604af2e --- /dev/null +++ b/CGWFUNC.PRG @@ -0,0 +1,117 @@ +FUNCTION SAVEGETS +// PRESERVE ALL THE GETS GENERATED + +LOCAL SAVELIST + +SAVELIST := ACLONE(GETLIST) +RETURN SAVELIST + +*************************** +FUNCTION RESTGETS(SAVELIST, ACTIVE_ELEM) +// RESTORE ALL THE SAVED GETS +// AND SET THE FOCUS ON ACTIVE ELEM + + +LOCAL L + +GETLIST := ACLONE(SAVELIST) +IF ACTIVE_ELEM = NIL +ELSE + IF ACTIVE_ELEM > 0 .AND. ACTIVE_ELEM <= LEN(GETLIST) + FOR L = 1 TO LEN(GETLIST) + IF L = ACTIVE_ELEM + GETLIST[L]:SETFOCUS() + ELSE + GETLIST[L]:KILLFOCUS() // TERMINATE THE GET IF ACTIVE + ENDIF + NEXT + ENDIF +ENDIF + +RETURN GETLIST + +*************************** +FUNCTION FIND_GETELEM(VAR_NAME) +// GET THE ELEMENT FOR VAR_NAME IN THE GETLIST + +LOCAL ELEM +ELEM = ASCAN(GETLIST, {|XX| XX[7] == VAR_NAME}) +RETURN ELEM + + + +*************************** +FUNCTION ACTIVE_GET +// GET THE ELEMENT FOR THE ACTIVE GET IN THE GETLIST + +LOCAL ELEM, X, SEARCH_VAL, MSUBSCRIPT + +X := GETACTIVE() // GET CURRENT ACTIVE GET +IF EMPTY(X) // NOT IN A READ! + RETURN 0 +ENDIF + +MSUBSCRIPT = X:SUBSCRIPT +SEARCH_VAL = X[7] // VARIABLE NAME TO SEARCH FOR IN GETLIST + + +IF EMPTY(MSUBSCRIPT) + ELEM = ASCAN(GETLIST, {|XX| XX[7] == SEARCH_VAL}) +ELSE + SS1 = MSUBSCRIPT[1] + SS2 = MSUBSCRIPT[2] + ELEM = ASCAN(GETLIST, {|XX| (XX[7] == SEARCH_VAL .AND. SS1==XX[2,1] .AND. SS2==XX[2,2]) }) +ENDIF + +RETURN ELEM + + + + +******************************************************** +FUNCTION UPDATE_GETS(MARR) +// UPDATE THE GET INFO ON THE SCREEN + +LOCAL SAVESEL := SELECT(), EVALVAL +LOCAL NCOLOR, NPOS, VAR, VALU +LOCAL ELEM, SEARCH_VAR + +ELEM = ACTIVE_GET() // GET ELEMENT OF ACTIVE GET IN THE GETLIST +IF ELEM > 0 + + GETLIST[ELEM]:KILLFOCUS() // TERMINATE THE CURRENT GET + FOR L = 1 TO LEN(MARR) + VAR = TRIM(MARR[L,1]) + SEARCH_VAR = VAR + IF LEN(MARR[L]) = 2 + SEARCH_VAR = TRIM(MARR[L,2]) + ENDIF + VALU = &VAR + + // READMODAL WILL ONLY DISPLAY() CHARACTER VALUES! + DO CASE + CASE VALTYPE(VALU) = 'N' + VALU = STR(VALU) + + CASE VALTYPE(VALU) = 'D' + VALU = DTOC(VALU) + + ENDCASE + + + + ELEM = ASCAN(GETVARS, {|X| TRIM(X[3]) == SEARCH_VAR}) + IF ELEM > 0 .AND. !EMPTY(GETLIST[ELEM]:BUFFER) + GETLIST[ELEM]:SETFOCUS() // MUST SET FOCUS TO DO THE FOLLOWING + NCOLOR = GETLIST[ELEM]:COLORSPEC() // GET THE CURRENT COLORS + GETLIST[ELEM]:BUFFER = VALU // STUFF THE BUFFER + GETLIST[ELEM]:ASSIGN() // UPDATE THE GET VAR + GETLIST[ELEM]:DISPLAY() // PUT VALUE ON THE SCREEN (DUMPS BUFFER) + GETLIST[ELEM]:KILLFOCUS() // TERMINATE THE GET + ENDIF + NEXT +ENDIF + +SELECT(SAVESEL) +RETURN .T. + \ No newline at end of file diff --git a/CGWINCLD.PRG b/CGWINCLD.PRG new file mode 100644 index 0000000..7d43f79 --- /dev/null +++ b/CGWINCLD.PRG @@ -0,0 +1,30 @@ +#DEFINE GET_ARR 1 // PROD_ARR +#DEFINE PRICE_ARR 2 // PROD_ARR +#DEFINE ATRB_SRC 3 // PROD_ARR + +#DEFINE ATRB 1 // G_ARR & P_ARR +#DEFINE OPT_TYP 2 // G_ARR +#DEFINE ROW_COL 2 // P_ARR +#DEFINE OPT_ARR 3 // G_ARR +#DEFINE USR_RSP 4 // G_ARR +#DEFINE ATRB_DESC 5 // G_ARR +#DEFINE RULE 6 // G_ARR +#DEFINE OPT_SRC 8 // G_ARR +#DEFINE DEFAULT 9 // G_ARR +#DEFINE BAFLAG 10 // G_ARR + +#DEFINE OPT_DESC 1 // OPT_ARR - G_ARR[3] +#DEFINE OPT_DEF 2 // OPT_ARR - G_ARR[3] +#DEFINE OPT_RULE 3 // OPT_ARR - G_ARR[3] +#DEFINE OPT_AMTS 4 // OPT_ARR - G_ARR[3] + +#DEFINE OA_PRICE 1 // OPT_AMTS -OPT_ARR - G_ARR[3] +#DEFINE OA_UI 2 // OPT_AMTS -OPT_ARR - G_ARR[3] +#DEFINE OA_SQFT 3 // OPT_AMTS -OPT_ARR - G_ARR[3] + +#DEFINE OPT_PIND 6 // OPT_ARR - G_ARR[3] - PRINT INDICATOR +#DEFINE OPT_PVAL 7 // OPT_ARR - G_ARR[3] - OPTIONAL PRINT VALUE +#DEFINE OPT_WADJ 8 // OPT_ARR - G_ARR[3] - OPTION WIDTH ADJUSTMENT +#DEFINE OPT_HADJ 9 // OPT_ARR - G_ARR[3] - OPTION HEIGHT ADJUSTMENT + + \ No newline at end of file diff --git a/CGWMATH.PRG b/CGWMATH.PRG new file mode 100644 index 0000000..6b8df24 --- /dev/null +++ b/CGWMATH.PRG @@ -0,0 +1,1256 @@ +** PCM1122 - MATHPACK CALCULATION MIKE LEWIS 4-07-92 +******************************************************* + +FUNCTION DEL_MP( MATT_CODE, MPROD_CODE ) + +LOCAL SAVESEL := SELECT(), DELARR := {}, I +LOCAL XXX := GETACTIVE(), SEEKKEY + +IF EMPTY(XXX) //** P3N - 8/25/98 + RETURN .T. //** P3N - 8/25/98 +ELSEIF !EMPTY(MATT_CODE) .OR. EMPTY(XXX:ORIGINAL()) + RETURN .T. +ENDIF + +SELECT MATHPACK +SEEKKEY := MPROD_CODE + XXX:ORIGINAL() +SEEK SEEKKEY +DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF() + AADD(DELARR, RECNO() ) + SKIP 1 +ENDDO +FOR I := 1 TO LEN(DELARR) + GOTO DELARR[I] + REC_LOCK(1) + REPLACE CAT_CODE WITH ' ' + DELETE +NEXT +SELECT (SAVESEL) +RETURN .T. + + + + + + +******************************************************* +FUNCTION CK_MATH(F_TYPE, CAT_NAME, ATT_NAME, WHEREFROM , SELFILE) + +LOCAL SCR1122 := SAVESCREEN(), SAVESEL := SELECT() +LOCAL MATHSCR, FREEZE_COL, TOPHEADING +PRIVATE CUR_CATEGORY := CAT_NAME + +IF WHEREFROM = NIL + *** BUILD THE TEMP MATHPACK FILE + IF !F_TYPE$'C' + RETURN .T. + ENDIF +ENDIF + +IF WHEREFROM = '_SP_CUT' + FROM = WHEREFROM + CAT_NAME = PRODUCT->PROD_CODE +ELSE + IF WHEREFROM = '_MISCITEM' + FROM = WHEREFROM +****CAT_NAME = (SAVESEL)->UOM + ELSE + FROM := ' ' + ENDIF +ENDIF + +BLDNEWMATH(CAT_NAME, ATT_NAME) +DEFINE_MATH(CAT_NAME, ATT_NAME, SELFILE, WHEREFROM ) + +RESTSCREEN(,,,,SCR1122) +RETURN .T. + +*********************************************************************** + +PROCEDURE DEFINE_MATH(CAT_NAME, ATT_NAME, SELFILE, WHEREFROM) +LOCAL SAVESEL := SELECT(), SAVEORD +LOCAL P1,P2,P3,P4,P5,P6,P7,P8,P9,P10 +LOCAL ALLOW_APPEND := .T. +LOCAL FREEZE_COL := 1 +LOCAL LOOKUP := .F. +LOCAL SORTPROC := NIL +LOCAL SCRNUM := 'CALC' +LOCAL CORRECT := .F. +LOCAL FINALEDIT +LOCAL ALLOK, CORR + + + +SELECT MATHPACK +DONSETORD(1) + +SELECT USERFILE5 +DONSETORD(0) + +PRIVATE TBARR := {} +* +* SET UP 3d ARRAY TO SEND TO DBROWSE +* +* * + + +IF ATT_NAME = '_MISCITEM' + TOPHEADING := {' Define the MATH CALCULATION FOR UOM ' + TRIM(CAT_NAME), ; + ' FIELD or Operator FIELD or Command ', ; + ' VALUE or (+)/(-) VALUE or (Insert) '} +ELSE + TOPHEADING := {' Define the MATH CALCULATION FOR FIELD ' + TRIM(ATT_NAME), ; + ' FIELD or Operator FIELD or Command ', ; + ' VALUE or (+,-,%) VALUE or (Insert) '} +ENDIF +P1 = 'Line # ' +P2 = 'MATH_DISPLINE()' +AADD(TBARR, {P1, P2, NIL}) + +P1 = 'Prior Line ' +P2 = 'FIELD1' +P3 = 'USERFILE5' +P4 = NIL +IF EMPTY(SELFILE) + P5 = 'CK_M_FIELD(FIELD1, 1,,.T.)' // .T. = CK DECIMAL +ELSE + P5 = 'CK_M_FIELD(FIELD1, 1,' + '"' + SELFILE +'"' + ',.T.)' +ENDIF +P6 = '@!' +AADD(TBARR, {P1, P2, P3, P4, P5, P6}) + +P1 = '(*,/) ' +P2 = 'OPERATOR' +P3 = 'USERFILE5' +P4 = NIL +P5 = 'CK_M_OPER()' +P6 = '!' +AADD(TBARR, {P1, P2, P3, P4, P5, P6}) + +P1 = 'Prior Line ' +P2 = 'FIELD2' +P3 = 'USERFILE5' +P4 = NIL +*-P5 = 'CK_M_FIELD(FIELD2, 2)' +IF EMPTY(SELFILE) + P5 = 'CK_M_FIELD(FIELD2, 2,,.T.)' +ELSE + P5 = 'CK_M_FIELD(FIELD2, 2,' + '"' + SELFILE +'"' + ',.T.)' +ENDIF +P6 = '@!' +AADD(TBARR, {P1, P2, P3, P4, P5, P6}) + + +P1 = '(Delete) ' +P2 = 'M_COMMAND' +P3 = 'USERFILE5' +P4 = NIL +IF EMPTY(SELFILE) + P5 = 'CK_M_COMMAND()' +ELSE + P5 = 'CK_M_COMMAND(' + '"' + SELFILE + '")' +ENDIF +P6 = '@!' +AADD(TBARR, {P1, P2, P3, P4, P5, P6}) + +* +* +* +SELECT USERFILE5 +GOTO TOP +* +DO WHILE .NOT. CORRECT + SELECT USERFILE5 + DONSETORD(0) + SETCOLOR(LNOR) + FINALEDIT := .F. + CLEAR TYPEAHEAD + DBROWSE(10, 15, MAXROW()-5, 70, ALLOW_APPEND, TBARR, FREEZE_COL, LOOKUP, TOPHEADING, SORTPROC) + + // CHECK FOR ESCAPE KEY + IF LASTKEY() = 27 + M1 = ' You have ELECTED TO ESCAPE ' + M2 = ' Do you which to DISCARD ' + M3 = ' ALL CHANGES??? ' + IF !PROMPT_BOX(M1,M2,M3) .AND. LASTKEY() <> 27 // NOT OK TO DISCARD CHANGES + LOOP + ENDIF + + CORRECT = .T. + ABORTKEY = .T. + RESETMP(CAT_NAME, ATT_NAME) + LOOP + ENDIF + * + * + SETCOLOR(LNOR) + FINALEDIT := .T. + IF RECCOUNT() = 1 + GOTO 1 + IF EMPTY(FIELD1) .AND. EMPTY(FIELD2) + SELECT USERFILE5 + ZAP + RESETMP(CAT_NAME, ATT_NAME) + CORRECT := .T. + LOOP + ENDIF + ENDIF + + ALLOK := EDITMATH(CAT_NAME, ATT_NAME, SELFILE, .T.) // .T. = CK VALID DECIMAL + IF !ALLOK + IF RECNO() <> 1 + SKIP -1 + ENDIF + LOOP + ENDIF + @ 23,0 + CORR := CORRCHEK() + IF CORR = 'N' + SELECT USERFILE5 + IF !ALLOK + IF RECNO() <> 1 + SKIP -1 + ENDIF + ENDIF + LOOP + ELSE + CORRECT := .T. + IF CORR = 'X' + SELECT USERFILE5 + ZAP + RESETMP(CAT_NAME, ATT_NAME) + CORRECT := .T. + LOOP + ELSE + SELECT MATHPACK + DONSETORD(1) + SELECT USERFILE5 + GOTO TOP + DO WHILE !EOF() + SELECT USERFILE5 + MLINE := RECNO() + SEEKKEY := CAT_NAME + ATT_NAME + STR(MLINE,4) + SELECT MATHPACK + SEEK SEEKKEY + IF !FOUND() + ADD_REC(3) + REPLACE CAT_CODE WITH CAT_NAME + REPLACE ATT_CODE WITH ATT_NAME + REPLACE LINE_NUM WITH MLINE + ELSE + REC_LOCK(3) + REPLACE UPDATED WITH ' ' + ENDIF + REPLACE FIELD1 WITH UPPER(USERFILE5->FIELD1) + REPLACE FIELD1TYPE WITH UPPER(USERFILE5->FIELD1TYPE) + REPLACE OPERATOR WITH USERFILE5->OPERATOR + REPLACE FIELD2 WITH UPPER(USERFILE5->FIELD2) + REPLACE FIELD2TYPE WITH UPPER(USERFILE5->FIELD2TYPE) + IF WHEREFROM = '_SP_CUT' + REPLACE TYPE WITH 'C' // CUTTING SPEC MATH PACK! + ELSE + IF WHEREFROM = '_MISCITEM' + REPLACE TYPE WITH 'M' // MISC ITEM MATH PACK! + ELSE + REPLACE TYPE WITH ' ' // CATEGORY CALC FIELD MATH PACK + ENDIF + ENDIF + UNLOCK + SELECT USERFILE5 + SKIP 1 + ENDDO + ENDIF + ENDIF +ENDDO +SELECT USERFILE5 +ZAP +SELECT MATHPACK +DELMATHPACK(CAT_NAME, ATT_NAME) +DONSETORD(1) +IF EMPTY(SELFILE) + SELECT USERFILE2 // ATTRIBUTE FILE WHERE YOU WERE! +ELSE + SELECT &SELFILE +ENDIF +RETURN + + +************************************************************ + +STATIC PROCEDURE DELMATHPACK(CAT_NAME, ATT_NAME) + +LOCAL DELMATHPK := .F., DELARR := {} +LOCAL I, MAC + +PRIVATE SEEKKEY + +SEEKKEY := CAT_NAME + ATT_NAME +SELECT MATHPACK +SEEK SEEKKEY +DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF() + IF UPDATED <> ' ' + REC_LOCK(3) + AADD(DELARR, RECNO() ) + DELETE + DELMATHPK := .T. + UNLOCK + ENDIF + SKIP 1 +ENDDO +IF DELMATHPK + FOR I = 1 TO LEN(DELARR) + GOTO DELARR[I] + REC_LOCK(1) + REPLACE CAT_CODE WITH '' + REPLACE ATT_CODE WITH '' + UNLOCK + NEXT +* PACK +ENDIF +RETURN + + +******************************************************************* + +PROCEDURE BLDNEWMATH(CAT_NAME , ATT_NAME) +LOCAL SAVESEL := SELECT(), SAVEORD, MAC + +PRIVATE SEEKKEY + +SELECT USERFILE5 +ZAP +SELECT MATHPACK +SEEKKEY = CAT_NAME + ATT_NAME + +SEEK SEEKKEY +DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF() + REC_LOCK(3) + REPLACE UPDATED WITH 'P' + UNLOCK + SELECT USERFILE5 + ADD_ONEREC('MATHPACK','USERFILE5') +* APPEND BLANK +* REPLACE CAT_CODE WITH MATHPACK->CAT_CODE +* REPLACE ATT_CODE WITH MATHPACK->ATT_CODE +* REPLACE LINE_NUM WITH MATHPACK->LINE_NUM +* REPLACE FIELD1 WITH MATHPACK->FIELD1 +* REPLACE FIELD1TYPE WITH MATHPACK->FIELD1TYPE +* REPLACE FIELD2 WITH MATHPACK->FIELD2 +* REPLACE FIELD2TYPE WITH MATHPACK->FIELD2TYPE +* REPLACE OPERATOR WITH MATHPACK->OPERATOR + SELECT MATHPACK + SKIP 1 +ENDDO +SELECT USERFILE5 +IF RECCOUNT() = 0 + APPEND BLANK + REPLACE CAT_CODE WITH CAT_NAME + REPLACE ATT_CODE WITH ATT_NAME + REPLACE LINE_NUM WITH 1 +ENDIF + +SELECT MATHPACK +DONSETORD(SAVEORD) +SELECT(SAVESEL) + +RETURN .T. + +****************************************************************** +STATIC PROCEDURE RESETMP(CAT_NAME, ATT_NAME) +LOCAL MAC + +PRIVATE SEEKKEY + +SEEKKEY := CAT_NAME + ATT_NAME +SELECT MATHPACK +SEEK SEEKKEY +DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF() + IF UPDATED <> ' ' + REC_LOCK(3) + REPLACE UPDATED WITH ' ' + UNLOCK + ENDIF + SKIP 1 +ENDDO +RETURN + +****************************************************************** +****** +****** + +FUNCTION CK_MCOMMAND(SELFILE) +SELECT USERFILE5 +IF !M_COMMAND$'ID ' + ERR_BOX( 'VALID COMMANDS ARE: I = Insert',; + ' D = Delete') + RETURN .F. +ENDIF + +IF M_COMMAND=' ' + RETURN .T. +ENDIF + +IF M_COMMAND = 'D' + IF RECNO() = 1 + GOTOREC := RECNO() - 1 + ELSE + GOTOREC := 1 + ENDIF + DELETE + PACK + GOTO GOTOREC +* KEYBOARD CHR(19) + RETURN .T. +ENDIF + +IF M_COMMAND = 'I' + GOTOREC := RECNO() + APPEND BLANK + GOTO BOTTOM + DO WHILE RECNO() <> GOTOREC + SKIP -1 + P_SYSNAME := SYSNAME + P_FTYPE := FILETYPE + P_FNAME := FNAME + P_FIELD1 := FIELD1 + P_FIELD1TYPE := FIELD1TYPE + P_OPERATOR := OPERATOR + P_FIELD2 := FIELD2 + P_FIELD2TYPE := FIELD2TYPE + SKIP 1 + REPLACE SYSNAME WITH P_SYSNAME + REPLACE FILETYPE WITH P_FTYPE + REPLACE FNAME WITH P_FNAME + REPLACE FIELD1 WITH P_FIELD1 + REPLACE FIELD1TYPE WITH P_FIELD1TYPE + REPLACE FIELD2 WITH P_FIELD2 + REPLACE FIELD2TYPE WITH P_FIELD2TYPE + REPLACE OPERATOR WITH P_OPERATOR + REPLACE LINE_NUM WITH RECNO() + SKIP -1 + ENDDO + REPLACE SYSNAME WITH USERFILE->SYSNAME + REPLACE FILETYPE WITH MFILETYPE + REPLACE FNAME WITH USERFNAME + REPLACE FIELD1 WITH SPACE(10) + REPLACE FIELD1TYPE WITH SPACE(1) + REPLACE FIELD2 WITH SPACE(10) + REPLACE FIELD2TYPE WITH SPACE(1) + REPLACE OPERATOR WITH ' ' + REPLACE LINE_NUM WITH RECNO() + REPLACE M_COMMAND WITH ' ' + RETURN .T. +ENDIF + + +********************************************************** + + +* +FUNCTION CK_M_OPER +SELECT USERFILE5 +IF OPERATOR$'+-*/%' + RETURN .T. +ELSE + ERR_BOX( '*** INVALID FIELD OPERATOR ***' ,; + ' + = Addition, - = Subtraction ' ,; + ' * = Multiplication % = Modulus Calc ' ,; + ' / = Division') + + RETURN .F. +ENDIF + +*************************************************************** +*- +STATIC FUNCTION EDITMATH(CAT_NAME, ATT_NAME, SELFILE, CK_VALDEC) + +IF CK_VALDEC = NIL + CK_VALDEC = .F. +ENDIF + +SELECT USERFILE5 +DONSETORD(0) +GOTO TOP +DO WHILE .NOT. EOF() + IF !CK_M_FIELD(USERFILE5->FIELD1, 1, SELFILE, CK_VALDEC) + RETURN .F. + ENDIF + IF !CK_M_OPER() + RETURN .F. + ENDIF + IF !CK_M_FIELD(USERFILE5->FIELD2, 2, SELFILE, CK_VALDEC) + RETURN .F. + ENDIF + SKIP 1 +ENDDO +DONSETORD(0) +RETURN .T. +*- +*************************************************************** +*- +FUNCTION MATH_DISPLINE +LOCAL RETVAL, CURREC +SELECT USERFILE5 +CURREC := STR(RECNO(),4 ) +RETVAL := 'L' + ALLTRIM(CURREC) + SPACE(10) +RETVAL := SUBSTR(RETVAL,1,6) +RETURN RETVAL + +************************************************************ + +FUNCTION CK_M_FIELD(CKFLD,FIELDNUM, SELFILE , CK_VALDEC) +IF PCOUNT() > 1 +ELSE + FIELDNUM = 1 +ENDIF +IF CK_VALDEC = NIL + CK_VALDEC = .F. +ENDIF + +IF !CKTHEFIELD(CKFLD,FIELDNUM, SELFILE, CK_VALDEC) + RETURN .F. +ENDIF + +RETURN .T. + + +* * * * * * * * * * * * * * * * * * * * * +STATIC FUNCTION CKTHEFIELD(CKFLD,FIELDNUM, P_SELFILE, CK_VALDEC) // IE. "WIDTH" ATTRIBUTE + "LENGTH" ATTRIBUTE +LOCAL CURREC, SCRNVAR, GOTOREC:=RECNO(), BROW_PICK, SAVESEL := SELECT() +LOCAL RESULT, MVALID_FUNC, VFUNC2DO, SAVEFILT +LOCAL M_ARR := {}, LOOKUP, ACTION, GOODREC := .F. + +PRIVATE SELFILE := P_SELFILE + +IF CK_VALDEC = NIL + CK_VALDEC = .F. +ENDIF + +LOOKUP = .F. + +IF EMPTY(P_SELFILE) + SELFILE = 'USERFILE2' + ACTION = 'MATH' +ELSE +**IF SELECT('MISC_ITEMS') > 0 // MISC ITEM DEFINITIONS + IF SELFILE = 'USERFILE4' // MISC ITEM DEFINITIONS + ACTION = 'MISC' + ELSE + IF SELFILE = 'USERFILE3' + ACTION = 'CUT' + ENDIF + ENDIF +ENDIF +M_ARR = SPECIAL_FIELDS(LOOKUP, ACTION) + +*-M_ARR = SPECIAL_FIELDS(LOOKUP, 'MATH') + + +BROW_PICK = .F. +STUFFALIAS = ' ' +IF SUBSTR(CKFLD,1,1) = '?' + SCRNVAR := SAVESCREEN() + LOOKUP = .T. + CKFLD = SPECIAL_FIELDS(LOOKUP, ACTION) + + IF CKFLD <> 'OTHER FIELD LIST' + IF FIELDNUM = 1 + REPLACE USERFILE5->FIELD1 WITH CKFLD + ELSE + REPLACE USERFILE5->FIELD2 WITH CKFLD + ENDIF + ELSE + //* don comment out 9-4-97 +****IF ACTION = 'MATH' .OR. ACTION = 'CUT' + IF ACTION = 'MATH' + SELECT &SELFILE // CURRENT LIST OF ATTRIBUTES TO EDIT + SAVEFILT = DBFILTER() + SET FILTER TO FIELD_TYPE$'UC' + GOTOREC := RECNO() + CURFNAME := ATT_CODE + IF FIELDNUM = 1 + MVALID_FUNC = "VAL_LOOKUP(USERFILE5->FIELD1, SELFILE, @_@, {'ATT_CODE','ATT_DESC(ATT_CODE)'}," + MVALID_FUNC=MVALID_FUNC + " 'Y' ,.F., 'USERFILE5->FIELD1'," + ELSE + MVALID_FUNC = "VAL_LOOKUP(USERFILE5->FIELD2, SELFILE, @_@, {'ATT_CODE','ATT_DESC(ATT_CODE)'}," + MVALID_FUNC=MVALID_FUNC + " 'Y' ,.F., 'USERFILE5->FIELD2'," + ENDIF + MVALID_FUNC=MVALID_FUNC + " {10,20})" + VFUNC2DO = SET_VALID(MVALID_FUNC,1) + RESULT= &VFUNC2DO + IF LASTKEY() = 13 + CKFLD = TFILE->ATT_CODE // FORCE CKFLD TO WHAT WAS SELECTED! + ENDIF + ELSE // ACTION = CUT + IF ACTION = 'CUT' + ENDIF + ENDIF + ENDIF + RESTSCREEN(,,,,SCRNVAR) + + KEYBOARD CHR(21) // CONTROL 'U' TO CLEAR THE CURRENT GET FIELD + IF ACTION = 'MATH' + SELECT &SELFILE // LIST OF ATTRIBUTES UNDER EDIT + SET FILTER TO &SAVEFILT + GOTO GOTOREC + ENDIF + SELECT (SAVESEL) // CURRENT MATHPACK UNDER EDIT + BROW_PICK = .T. + IF LASTKEY() = 27 + RETURN .F. + ENDIF +ENDIF + + +SELECT (SAVESEL) // CURRENT MATHPACK +GOODVAR := '' +REPVAR := ALLTRIM(CKFLD) +NUMDEC := 0 +IF LEN(REPVAR) = 0 + MATH_FLDERROR() + SELECT (SAVESEL) // CURRENT MATHPACK + RETURN .F. +ENDIF + +// CHECK FOR ALPHA FIELD (!NUMERIC) +FOR I = 1 TO LEN(REPVAR) + CKCHAR := SUBSTR(REPVAR,I,1) + IF !(CKCHAR$'0123456789-.') + I := 999 // NOT A NUMERIC VALUE!!! + ELSE + IF (CKCHAR >= CHR(48) .AND. CKCHAR <= CHR(57)) + GOODVAR := GOODVAR + CKCHAR + ELSE + IF CKCHAR = '-' + IF I = 1 + GOODVAR := GOODVAR + CKCHAR + ELSE + I := 999 // NOT A NUMERIC VALUE!! + ENDIF + ELSE + IF CKCHAR = '.' + NUMDEC ++ + IF NUMDEC = 1 + GOODVAR := GOODVAR + CKCHAR + ELSE + I := 999 // NOT A NUMERIC VALUE + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF +NEXT +// IF < 999, THEN PASSED THE NUMERIC TEST +IF I < 999 + + SELECT (SAVESEL) + IF FIELDNUM = 1 + REPLACE FIELD1TYPE WITH 'N' + ELSE + IF FIELDNUM = 2 + REPLACE FIELD2TYPE WITH 'N' + ENDIF + ENDIF + IF CK_VALDEC + IF VALID_DECIMAL(VAL(CKFLD)) + RETURN .T. + ELSE + RETURN .F. + ENDIF + ELSE + RETURN .T. + ENDIF +ENDIF + +//IF REPVAR = 'WIDTH, HEIGHT, UI SIZE, SQFT' // CHECK RESERVED WORD FUNCTION + +// CHECK FOR PRIOR LINE +GOODVAR := '' +REPVAR := ALLTRIM(CKFLD) +FOR I = 1 TO LEN(REPVAR) + CKCHAR := SUBSTR(REPVAR,I,1) + IF I = 1 .AND. CKCHAR <> 'L' + I := 999 + ELSE + GOODVAR := GOODVAR + CKCHAR + II := I + NUMPART := '' + DO WHILE II < LEN(REPVAR) + II++ + CKCHAR := SUBSTR(REPVAR,II,1) + IF (CKCHAR >= CHR(48) .AND. CKCHAR <= CHR(57)) + GOODVAR := GOODVAR + CKCHAR + NUMPART := NUMPART + CKCHAR + ELSE + II := 999 + I := 999 + ENDIF + ENDDO + IF LEN(NUMPART) > 0 + IF VAL(NUMPART) >= RECNO() + I := 999 + ENDIF + ENDIF + ENDIF +NEXT + +** IF 1ST CHAR <> L OR OTHER ALPHA, FAILED ABOVE +** ELSE IT WAS A PRIOR LINE AND RETURN .T. +IF I < 999 +**SELECT USERFILE5 // CURRENT MATHPACK + SELECT (SAVESEL) // CURRENT MATHPACK + IF FIELDNUM = 1 + REPLACE FIELD1TYPE WITH 'P' + ELSE + IF FIELDNUM = 2 + REPLACE FIELD2TYPE WITH 'P' + ENDIF + ENDIF + RETURN .T. +ENDIF + +// CHECK FOR VALID ATTRIBUTE NAME +CURREC2 = 1 +IF ACTION = 'MATH' + SELECT &SELFILE // CURRENT ATTRIBUTE FILE UNDER EDIT + CURREC2 := RECNO() + LOCATE FOR ALLTRIM(ATT_CODE) == ALLTRIM(CKFLD) .AND. FIELD_TYPE$'UC' + IF FOUND() + GOODREC = .T. + ELSE + // SEE IF IT'S A SPECIAL FIELD! + IF ASCAN(M_ARR, {|X| X==ALLTRIM(CKFLD) }) > 0 + GOODREC = .T. + ENDIF + ENDIF +ELSE + IF ACTION = 'CUT' + // SEE IF IT'S A SPECIAL FIELD! + SELECT ATTRIBUTES + SEEK CKFLD + IF FOUND() + GOODREC := .T. + ELSE + IF ASCAN(M_ARR, {|X| X==ALLTRIM(CKFLD) }) > 0 + GOODREC = .T. + ENDIF + ENDIF + ELSE + IF ASCAN(M_ARR, {|X| X==ALLTRIM(CKFLD) }) > 0 + GOODREC = .T. + ENDIF + ENDIF +ENDIF + +IF !GOODREC + SELECT &SELFILE // CURRENT ATTRIBUTES UNDER EDIT + GOTO CURREC2 + SELECT (SAVESEL) // CURRENT MATHPACK + MATH_FLDERROR() + RETURN .F. +ELSE // VALID ATTRIBUTE NAME ENTERED + SELECT (SAVESEL) // CURRENT MATHPACK + IF FIELDNUM = 1 + REPLACE FIELD1TYPE WITH 'F' // DATATYPE OF FIELD + ELSE + IF FIELDNUM = 2 + REPLACE FIELD2TYPE WITH 'F' + ENDIF + ENDIF + IF ACTION = 'MATH' + SELECT &SELFILE // CURRENT ATTRIBUTE FILE + GOTO CURREC2 + ENDIF + SELECT (SAVESEL) // CURRENT MATHPACK + RETURN .T. +ENDIF + +****************************************************** + +PROCEDURE MATH_FLDERROR +ERR_BOX( ' Enter an ATTRIBUTE CODE which is ', ; + ' "USER ENTERED" or "CALCULATED", ',; + ' or L1, L2, etc. for PRIOR LINES.',; + ' (Press "?" to Browse Field Names)') +KEYBOARD CHR(19) +RETURN + + +******************************************* +FUNCTION CK_M_COMMAND(SELFILE) +SELECT USERFILE5 +IF !M_COMMAND$'IDR ' + ERR_BOX( 'VALID COMMANDS ARE: I = Insert',; + ' R = Repeat', ; + ' D = Delete') + RETURN .F. +ENDIF + +IF M_COMMAND=' ' + RETURN .T. +ENDIF + +IF SELFILE = NIL + SELFILE := 'USERFILE2' +ENDIF + +IF M_COMMAND = 'D' + IF RECNO() = 1 + GOTOREC := RECNO() - 1 + ELSE + GOTOREC := 1 + ENDIF + DELETE + PACK + GOTO GOTOREC + RETURN .T. +ENDIF + +IF M_COMMAND = 'I' + GOTOREC := RECNO() + APPEND BLANK + GOTO BOTTOM + DO WHILE RECNO() <> GOTOREC + SKIP -1 + P_CAT_CODE := CAT_CODE + P_ATT_CODE := ATT_CODE + P_FIELD1 := FIELD1 + P_FIELD1TYPE := FIELD1TYPE + P_OPERATOR := OPERATOR + P_FIELD2 := FIELD2 + P_FIELD2TYPE := FIELD2TYPE + SKIP 1 + REPLACE CAT_CODE WITH P_CAT_CODE + REPLACE ATT_CODE WITH P_ATT_CODE + REPLACE FIELD1 WITH P_FIELD1 + REPLACE FIELD1TYPE WITH P_FIELD1TYPE + REPLACE FIELD2 WITH P_FIELD2 + REPLACE FIELD2TYPE WITH P_FIELD2TYPE + REPLACE OPERATOR WITH P_OPERATOR + REPLACE LINE_NUM WITH RECNO() + SKIP -1 + ENDDO + REPLACE CAT_CODE WITH CUR_CATEGORY +**REPLACE ATT_CODE WITH USERFILE2->ATT_CODE + REPLACE ATT_CODE WITH (SELFILE)->ATT_CODE + REPLACE FIELD1 WITH SPACE(10) + REPLACE FIELD1TYPE WITH SPACE(1) + REPLACE FIELD2 WITH SPACE(10) + REPLACE FIELD2TYPE WITH SPACE(1) + REPLACE OPERATOR WITH ' ' + REPLACE LINE_NUM WITH RECNO() + REPLACE M_COMMAND WITH ' ' + RETURN .T. +ENDIF + +IF M_COMMAND = 'R' // REPLICATE + GOTOREC := RECNO() + APPEND BLANK + GOTO BOTTOM + DO WHILE RECNO() <> GOTOREC + SKIP -1 + P_CAT_CODE := CAT_CODE + P_ATT_CODE := ATT_CODE + P_FIELD1 := FIELD1 + P_FIELD1TYPE := FIELD1TYPE + P_OPERATOR := OPERATOR + P_FIELD2 := FIELD2 + P_FIELD2TYPE := FIELD2TYPE + SKIP 1 + REPLACE CAT_CODE WITH P_CAT_CODE + REPLACE ATT_CODE WITH P_ATT_CODE + REPLACE FIELD1 WITH P_FIELD1 + REPLACE FIELD1TYPE WITH P_FIELD1TYPE + REPLACE FIELD2 WITH P_FIELD2 + REPLACE FIELD2TYPE WITH P_FIELD2TYPE + REPLACE OPERATOR WITH P_OPERATOR + REPLACE LINE_NUM WITH RECNO() + SKIP -1 + ENDDO + REPLACE M_COMMAND WITH ' ' + RETURN .T. +ENDIF +RETURN .T. /// ?????? + + + +******************************************* +FUNCTION ATT_DESC(MATT_CODE) +// RETURN THE DESCRIPTION FOR MATT_CODE + +LOCAL SAVESEL := SELECT(), RETVAL + +SELECT ATTRIBUTES +SEEK MATT_CODE +RETVAL = DESC +SELECT(SAVESEL) +RETURN RETVAL + + + + + +* * * * * * * * * * * * * * * * * +FUNCTION EVAL_MATH(PACKMATH, GET_ARR, MCAT_CODE, MATT_CODE, SELFILE, WHEREFROM) +LOCAL X, LASTVAL, I, ELEM +PACK2MATH := PACKMATH +MATHVALUE := {} + +FOR I = 1 TO LEN(PACK2MATH) + + REPVAR1 := ALLTRIM(PACK2MATH[I,1]) + OPER := PACK2MATH[I,2] + REPVAR2 := ALLTRIM(PACK2MATH[I,3]) + + LVAR1 := EVAL_FLD(REPVAR1, I, GET_ARR, MCAT_CODE, MATT_CODE, SELFILE, WHEREFROM) + LVAR2 := EVAL_FLD(REPVAR2, I, GET_ARR, MCAT_CODE, MATT_CODE, SELFILE, WHEREFROM) + + CALCSTR := 'LVAR1 ' + OPER + ' LVAR2' + AADD(MATHVALUE, &CALCSTR) + LASTVAL := MATHVALUE[I] +NEXT +RETURN LASTVAL + + +* * * * * * * * * * * * * * * * * +STATIC FUNCTION EVAL_FLD(REPVAR, ELEM, GET_ARR, MCAT_CODE, MATT_CODE, SELFILE, WHEREFROM) + +LOCAL MELEM + +REPVAR = ALLTRIM(REPVAR) + +NUMPART := '' + + +DO CASE + + CASE SPEC_FLD(REPVAR, WHEREFROM) // IS IT A SPECIAL FIELD + RETURN SPECFLD_VALUE(REPVAR,SELFILE,WHEREFROM) + + CASE CKNUM(REPVAR) + RETURN VAL(REPVAR) + + CASE CKPRIOR(REPVAR) + RETURN MATHVALUE[VAL(NUMPART)] + +ENDCASE + +// CHECK FOR ATTRIBUTE VALUE +MELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == REPVAR}) +IF MELEM > 0 + RETURN DECVAL(GET_ARR[MELEM,4]) +ENDIF + +ERR_BOX( 'INVALID REFERENCE IN MATH PACK!!!',; + 'CATEGORY -' + ALLTRIM(MCAT_CODE) + ' ATTRIBUTE ' + MATT_CODE,; + 'VARIABLE IN ERROR - ' + REPVAR) + +RETURN 0 + +************************************************* +FUNCTION SPECFLD_VALUE(MSPEC_FLD, SELFILE) +LOCAL LINEFILE := 'ORD_LINES', OR_ARR +LOCAL SEEKKEY, RAN_SLID, ADDL_MODE, ITEM_CAT_CODE, IS_ALWAYS_SLID + +********************************************************* +***** YOU MUST ALSO UPDATE THE STUFF IN ****** +***** THE "EVAL SPECIAL FIELDS FUNCTION " ****** +***** SPECIAL_FIELDS(LOOK_UP,FROM) LOCATED BELOW. **** +***** ****** +********************************************************* + +// RETURN THE VALUE OF THE MSPEC_FLD +IF SELFILE <> NIL + LINEFILE := SELFILE +ELSE + ? ABEND + IF SELECT('USERFILE2') > 0 + LINEFILE := 'USERFILE2' + ENDIF +ENDIF + + +DO CASE + + CASE MSPEC_FLD = 'WIDTH' + RETURN DECVAL(&LINEFILE->WIDTH) + + CASE MSPEC_FLD = 'HEIGHT' + RETURN DECVAL(&LINEFILE->HEIGHT) + + CASE MSPEC_FLD = "TT WIDTH'" + RETURN (LINEFILE)->ACT_WIDTH / 12 + + CASE MSPEC_FLD = 'TT WIDTH' + RETURN (LINEFILE)->ACT_WIDTH + + CASE MSPEC_FLD = "TT HEIGHT'" + RETURN (LINEFILE)->ACT_HEIGHT / 12 + + CASE MSPEC_FLD = 'TT HEIGHT' + RETURN (LINEFILE)->ACT_HEIGHT + + CASE MSPEC_FLD = 'NOM WIDTH' + RETURN (LINEFILE)->NOM_WIDTH + + CASE MSPEC_FLD = 'NOM HEIGHT' + RETURN (LINEFILE)->NOM_HEIGHT + + CASE MSPEC_FLD = 'UI SIZE' + RETURN (LINEFILE)->UI_SIZE + + CASE MSPEC_FLD = 'SIZE' + RETURN (LINEFILE)->ENTRY_SIZE + + CASE MSPEC_FLD = 'SQFT' + RETURN (LINEFILE)->SQFT + + CASE MSPEC_FLD = 'IN STOCK' + RETURN (LINEFILE)->IN_STOCK + + CASE MSPEC_FLD = 'STD SIZE' + RETURN (LINEFILE)->STD_SIZE + + CASE MSPEC_FLD = 'ORIEL SIZE' + RETURN (LINEFILE)->ORIEL_SIZE + + CASE MSPEC_FLD = 'CMR' + IF (LINEFILE)->ORIEL_SIZE$'N' + RETURN (LINEFILE)->ACT_HEIGHT / 2 + ELSE + IF CUR_OO = 'ADDL_OPTS' + ADDL_MODE := .T. + ELSE + ADDL_MODE := .T. + ENDIF + RAN_SLID := CK_SLIDER(SELFILE, CUR_OO, ADDL_MODE) + ITEM_CAT_CODE = GET_CATCODE( (SELFILE)->PROD_CODE) + OR_ARR := CK_ORIEL(ITEM_CAT_CODE, SELFILE, CUR_OO, ADDL_MODE, RAN_SLID ) + RETURN (LINEFILE)->ACT_HEIGHT - OR_ARR[2] // TOTAL - BOTTOM + ENDIF + + CASE MSPEC_FLD = 'BAL SIZE' .OR. ; //**P3N - 3/24/99 + MSPEC_FLD = 'HTLESSBAL' //**P3N - 6/29/01 + IF CUR_OO = 'ADDL_OPTS' //**P3N - 3/24/99 + ADDL_MODE := .T. //**P3N - 3/24/99 + ELSE //**P3N - 3/24/99 + ADDL_MODE := .F. //**P3N - 3/24/99 + ENDIF //**P3N - 3/24/99 + ITEM_CAT_CODE := GET_CATCODE((SELFILE)->PROD_CODE) //**P3N - 3/24/99 + RAN_SLID := CK_SLIDER(SELFILE, CUR_OO, ADDL_MODE) //**P3N - 3/24/99 + IS_ALWAYS_SLID := ALWAYS_SLIDER(SELFILE, CUR_OO, ADDL_MODE) + OR_ARR := CK_ORIEL(ITEM_CAT_CODE, SELFILE, CUR_OO, ADDL_MODE, RAN_SLID, IS_ALWAYS_SLID ) + IF MSPEC_FLD = 'BAL SIZE' //**P3N - 6/29/01 + IF EMPTY(OR_ARR[3]) //**P3N - 3/24/99 + RETURN 0 //**P3N - 3/24/99 + ELSE //**P3N - 3/24/99 + RETURN VAL(OR_ARR[3]) // BALANCE SIZE //**P3N - 3/24/99 + ENDIF + ELSE //**P3N - 6/29/01 + IF EMPTY(OR_ARR[9]) //**P3N - 6/29/01 + RETURN 0 //**P3N - 6/29/01 + ELSE //**P3N - 6/29/01 + RETURN OR_ARR[9] // DIFF BETWEEN HT AND BAL //**P3N - 6/29/01 + ENDIF //**P3N - 6/29/01 + ENDIF //**P3N - 6/29/01 + + CASE MSPEC_FLD = 'SALE PRICE' + RETURN (LINEFILE)->SALE_PRICE + + CASE MSPEC_FLD = 'MODEL' + RETURN (LINEFILE)->PROD_CODE + + CASE MSPEC_FLD = 'ATTACH TO' + RETURN (LINEFILE)->PAR_PROD + + CASE MSPEC_FLD = 'DELIVERY' + RETURN (CUR_MAST)->PICK_DEL + + CASE MSPEC_FLD = 'HOW MEAS' + RETURN (LINEFILE)->HOW_MEAS + + CASE MSPEC_FLD = 'PRICING' + RETURN (LINEFILE)->PRICE_SHT + + CASE MSPEC_FLD = 'QUANTITY' + RETURN (LINEFILE)->QUANTITY + + CASE MSPEC_FLD = 'CATEGORY' + RETURN = GET_CATCODE( (LINEFILE)->PROD_CODE ) + + CASE MSPEC_FLD = 'CUSTOMER' + RETURN (CUR_MAST)->CUST_ID + + CASE MSPEC_FLD = 'ITEM PRICE' + RETURN (LINEFILE)->BASE_PRI + ; + (LINEFILE)->OPT_PRI + ; + (LINEFILE)->EXT_PRICE // ADD ALL PRICE COMPONENTS SO FAR + + CASE MSPEC_FLD = 'BASE PRICE' + RETURN (LINEFILE)->BASE_PRI + + OTHERWISE + ERR_BOX('*** INVALID CALL TO SPEC FIELDS ' , ; + '*** Lookup Value was ' + MSPEC_FLD ) + RETURN NIL +END CASE + + + + + +********************************************************* +***** YOU MUST ALSO UPDATE THE STUFF IN ****** +***** THE "EVAL SPECIAL FIELDS FUNCTION " ****** +***** SPECFLD_VALUE(MSPEC_FLD) LOCATED ABOVE. ****** +***** ****** +********************************************************* + +FUNCTION SPECIAL_FIELDS(LOOKUP, FROM) +// IF NOT A LOOKUP, RETURN THE SPECIAL FIELD ARRAY +// ELSE, CHECK THE FIELD NAME FOR SPECIAL NAME IN RULE OR MATHPACK +// M_ARR HOLDS A LIST OF SPECIAL FIELDS PLUS 'OTHER FIELD LIST' +// FROM = RULE OR MATH + +LOCAL M_ARR := {}, NCHOICE := 0, SCRNVAR + +STATIC MARRMATH +STATIC MARROTHER +STATIC MARR_CUT +STATIC MARR_MISC + +IF MARR_CUT = NIL + MARR_CUT = {} + AADD(MARR_CUT, 'BAL SIZE') //** P3N - 3/24/99 + AADD(MARR_CUT, 'CMR') + AADD(MARR_CUT, 'HTLESSBAL') //** P3N - 6/29/01 + AADD(MARR_CUT, 'NOM HEIGHT') + AADD(MARR_CUT, 'NOM WIDTH') + AADD(MARR_CUT, 'TT HEIGHT') + AADD(MARR_CUT, 'TT WIDTH') + //* don comment out 9-4-97 +**AADD(MARR_CUT, 'OTHER FIELD LIST') +ENDIF + +IF MARR_MISC= NIL + MARR_MISC= {} + AADD(MARR_MISC, 'HEIGHT') + AADD(MARR_MISC, 'WIDTH') +ENDIF + +IF MARRMATH = NIL .OR. MARROTHER = NIL + AADD(M_ARR, 'ATTACH TO') + AADD(M_ARR, 'BASE PRICE') + AADD(M_ARR, 'BAL SIZE') //** P3N - 3/24/99 + AADD(M_ARR, 'CATEGORY') + AADD(M_ARR, 'CUSTOMER') + AADD(M_ARR, 'DELIVERY') + AADD(M_ARR, 'HEIGHT') + AADD(M_ARR, 'HTLESSBAL') //** P3N - 6/29/01 + AADD(M_ARR, 'HOW MEAS') + AADD(M_ARR, 'IN STOCK') + AADD(M_ARR, 'ITEM PRICE') + AADD(M_ARR, 'MODEL') + AADD(M_ARR, 'NOM HEIGHT') + AADD(M_ARR, 'NOM WIDTH') + AADD(M_ARR, 'ORIEL SIZE') + AADD(M_ARR, 'PRICING') + AADD(M_ARR, 'QUANTITY') + AADD(M_ARR, 'SALE PRICE') + AADD(M_ARR, 'SIZE') + AADD(M_ARR, 'SQFT') + AADD(M_ARR, 'STD SIZE') + AADD(M_ARR, 'TT HEIGHT') + AADD(M_ARR, "TT HEIGHT'") + AADD(M_ARR, 'TT WIDTH') + AADD(M_ARR, "TT WIDTH'") + AADD(M_ARR, 'UI SIZE') + AADD(M_ARR, 'WIDTH') + MARROTHER := ACLONE(M_ARR) + + AADD(M_ARR, 'OTHER FIELD LIST') + MARRMATH := ACLONE(M_ARR) +ENDIF +IF FROM = 'MATH' + M_ARR := MARRMATH +ELSE + IF FROM = 'CUT' + M_ARR = MARR_CUT + ELSE + IF FROM = 'MISC' + M_ARR := MARR_MISC + ELSE + M_ARR := MARROTHER + ENDIF + ENDIF +ENDIF + +IF !LOOKUP + RETURN M_ARR +ENDIF + +SCRNVAR := SAVESCREEN() +// MSG, SELECT "SQFT", "UI SIZE", "HEIGHT" "WIDTH" OR ITEM FROM THE FOLLOWING LIST + +DO WHILE .T. + NCHOICE = LISTBOX(M_ARR,1,'Select One') + IF LASTKEY() = 27 + RESTSCREEN(,,,,SCRNVAR) + RETURN '' + ENDIF + IF LASTKEY() = 13 + RESTSCREEN(,,,,SCRNVAR) + RETURN M_ARR[NCHOICE] + ENDIF +ENDDO + + + + +**************************************************** +FUNCTION DECVAL(C_NUM) +// CONVERT THE CHARACTER STRING M_NUM INTO A DECIMAL VALUE +// +// FRACTIONS ARE REPRESENTED AS 3/4, 1/8 ........ + +LOCAL SLASH_POS, SPACE_POS, WHOLE_NUM, FRACTION +LOCAL TOP_FRACTION, BOTT_FRACTION, DECIMAL_NUM := 0.0000, SAVE_DEC +LOCAL FTPOS, NUMFT, NUMIN + +FTPOS := AT("'", C_NUM) +IF FTPOS = 0 + NUMFT := 0 +ELSE + NUMFT := VAL( SUBS( C_NUM,1,FTPOS ) ) + C_NUM := ALLTRIM( SUBS( C_NUM, FTPOS + 1 ) ) +ENDIF + +SLASH_POS = AT('/', C_NUM) +IF SLASH_POS = 0 + RETURN (NUMFT * 12) + VAL(C_NUM) +ENDIF + +SPACE_POS = AT(' ', C_NUM) +IF SPACE_POS > SLASH_POS // NO WHOLE NUMBER! + WHOLE_NUM = 0 + SPACE_POS = 1 +ELSE + WHOLE_NUM = VAL(LEFT(C_NUM, SPACE_POS-1)) + SPACE_POS++ // POINT TO FIRST FRACTION DIGIT! +ENDIF + +IF SLASH_POS = 0 // NO FRACTION! + TOP_FRACTION = 0 +ELSE + TOP_FRACTION = VAL(SUBSTR(C_NUM, SPACE_POS, SLASH_POS-SPACE_POS)) + BOTT_FRACTION = VAL(SUBSTR(C_NUM, SLASH_POS+1)) + SET DECIMALS TO 4 + DECIMAL_NUM = (TOP_FRACTION * 100) / (BOTT_FRACTION * 100) + SET DECIMALS TO 2 +ENDIF +RETVAL = ( NUMFT * 12 ) + WHOLE_NUM + DECIMAL_NUM +RETURN RETVAL + + +**************************************************** + \ No newline at end of file diff --git a/CGWPDEF.PRG b/CGWPDEF.PRG new file mode 100644 index 0000000..00f6dc1 --- /dev/null +++ b/CGWPDEF.PRG @@ -0,0 +1,1230 @@ + +#Include "MyStd.ch" +#INCLUDE "INKEY.CH" +#INCLUDE "FIVEWIN.CH" +#INCLUDE "DBINFO.CH" +#INCLUDE "COMMON.CH" + + +********** +// THIS PRG IS A print port manager for lib programs +// needing multiple output routings. +// will be called IF FILE('PRINTERS.DBF') + +FUNCTION CUSTOMPRINT_WINDOWS( ) + +LOCAL CLOSE_ARR := {}, PRN_LIST := {} +LOCAL RETVAL := .T., oDIALOG + +LOCAL OSAY101A, OSAY101B +LOCAL OSAY102A, OSAY102B +LOCAL OSAY103A, OSAY103B +LOCAL OSAY104A, OSAY104B +LOCAL OSAY105A, OSAY105B +LOCAL OSAY106A, OSAY106B +LOCAL OSAY107A, OSAY107B +LOCAL OSAY108A, OSAY108B +LOCAL OSAY109A, OSAY109B +LOCAL OSAY110A, OSAY110B +LOCAL OSAY111A, OSAY111B +LOCAL OSAY112A, OSAY112B + +LOCAL MRPTPRTR := GETPRINTER('ReportPrinter') +LOCAL MRPTPORT := GETPRINTER('ReportPort') +LOCAL MRPTDEV := GETPRINTER('ReportDevice') + +LOCAL MPRODPRTR := GETPRINTER('ProdPrinter') +LOCAL MPRODPORT := GETPRINTER('ProdPort') +LOCAL MPRODDEV := GETPRINTER('ProdDevice') + +LOCAL MORDPRTR := GETPRINTER('OrdDeskPrinter') +LOCAL MORDPORT := GETPRINTER('OrdDeskPort') +LOCAL MORDDEV := GETPRINTER('OrdDeskDevice') + +LOCAL MINVPRTR := GETPRINTER('InvPrinter') +LOCAL MINVPORT := GETPRINTER('InvPort') +LOCAL MINVDEV := GETPRINTER('InvDevice') + +LOCAL MDELPRTR := GETPRINTER('DelPrinter') +LOCAL MDELPORT := GETPRINTER('DelPort') +LOCAL MDELDEV := GETPRINTER('DelDevice') + +LOCAL MGOLDPRTR := GETPRINTER('GoldenPrinter') +LOCAL MGOLDPORT := GETPRINTER('GoldenPort') +LOCAL MGOLDDEV := GETPRINTER('GoldenDevice' ) + +LOCAL MMAILPRTR := GETPRINTER('MailLblPrinter') +LOCAL MMAILPORT := GETPRINTER('MailLblPort') +LOCAL MMAILDEV := GETPRINTER('MailLblDevice') + +LOCAL MICOMPPRTR := GETPRINTER('InterCompPrinter') +LOCAL MICOMPPORT := GETPRINTER('InterCompPort') +LOCAL MICOMPDEV := GETPRINTER('InterCompDevice') + +LOCAL MBACKOPRTR := GETPRINTER('BackOrdPrinter') +LOCAL MBACKOPORT := GETPRINTER('BackOrdPort') +LOCAL MBACKODEV := GETPRINTER('BackOrdDevice') + +LOCAL MQUOTEPRTR := GETPRINTER('QuotePrinter') +LOCAL MQUOTEPORT := GETPRINTER('QuotePort') +LOCAL MQUOTEDEV := GETPRINTER('QuoteDevice') + +LOCAL MPREBPRTR := GETPRINTER('PreBillPrinter') +LOCAL MPREBPORT := GETPRINTER('PreBillPort') +LOCAL MPREBDEV := GETPRINTER('PreBillDevice') + +LOCAL MPRECPRTR := GETPRINTER('PreCostPrinter') +LOCAL MPRECPORT := GETPRINTER('PreCostPort') +LOCAL MPRECDEV := GETPRINTER('PreCostDevice') + +SET RESOURCES TO //** GET RESOURCES FROM THE ".EXE" +DEFINE DIALOG oDIALOG RESOURCE "DLG_PRNTR9" //** P3N - 09/13/04 NEW PRINTER DIALOG - HARBOUR/FWH UPGRADE + + REDEFINE SAY oSAY101A VAR MRPTPRTR ID 101 OF oDIALOG + REDEFINE SAY oSAY101B VAR MRPTPORT ID 102 OF oDIALOG + + REDEFINE SAY oSAY102A VAR MPRODPRTR ID 103 OF oDIALOG + REDEFINE SAY oSAY102B VAR MPRODPORT ID 104 OF oDIALOG + + REDEFINE SAY oSAY103A VAR MORDPRTR ID 105 OF oDIALOG + REDEFINE SAY oSAY103B VAR MORDPORT ID 106 OF oDIALOG + + REDEFINE SAY oSAY104A VAR MINVPRTR ID 107 OF oDIALOG + REDEFINE SAY oSAY104B VAR MINVPORT ID 108 OF oDIALOG + + REDEFINE SAY oSAY105A VAR MDELPRTR ID 109 OF oDIALOG + REDEFINE SAY oSAY105B VAR MDELPORT ID 110 OF oDIALOG + + REDEFINE SAY oSAY106A VAR MGOLDPRTR ID 111 OF oDIALOG + REDEFINE SAY oSAY106B VAR MGOLDPORT ID 112 OF oDIALOG + + REDEFINE SAY oSAY107A VAR MMAILPRTR ID 113 OF oDIALOG + REDEFINE SAY oSAY107B VAR MMAILPORT ID 114 OF oDIALOG + + REDEFINE SAY oSAY108A VAR MICOMPPRTR ID 115 OF oDIALOG + REDEFINE SAY oSAY108B VAR MICOMPPORT ID 116 OF oDIALOG + + REDEFINE SAY oSAY109A VAR MBACKOPRTR ID 117 OF oDIALOG + REDEFINE SAY oSAY109B VAR MBACKOPORT ID 118 OF oDIALOG + + REDEFINE SAY oSAY110A VAR MQUOTEPRTR ID 119 OF oDIALOG + REDEFINE SAY oSAY110B VAR MQUOTEPORT ID 120 OF oDIALOG + + REDEFINE SAY oSAY111A VAR MPREBPRTR ID 121 OF oDIALOG + REDEFINE SAY oSAY111B VAR MPREBPORT ID 122 OF oDIALOG + + REDEFINE SAY oSAY112A VAR MPRECPRTR ID 123 OF oDIALOG + REDEFINE SAY oSAY112B VAR MPRECPORT ID 124 OF oDIALOG + + + REDEFINE BUTTON ID 9901 OF oDIALOG ; + ACTION ( SETPRNTR('Report'), ; + MRPTPRTR := GETPRINTER('ReportPrinter'), ; + MRPTPORT := GETPRINTER('ReportPort'), ; + oSAY101a:REFRESH(), ; + oSAY101b:REFRESH() ) + + + REDEFINE BUTTON ID 9902 OF oDIALOG ; + ACTION ( SETPRNTR('Prod'), ; + MPRODPRTR := GETPRINTER('ProdPrinter'),; + MPRODPORT := GETPRINTER('ProdPort'), ; + oSAY102a:REFRESH(), ; + oSAY102b:REFRESH() ) + + + REDEFINE BUTTON ID 9903 OF oDIALOG ; + ACTION ( SETPRNTR('OrdDesk'), ; + MORDPRTR := GETPRINTER('OrdDeskPrinter'),; + MORDPORT := GETPRINTER('OrdDeskPort'), ; + oSAY103A:REFRESH(), ; + oSAY103B:REFRESH() ) + + REDEFINE BUTTON ID 9904 OF oDIALOG ; + ACTION ( SETPRNTR('Inv'), ; + MINVPRTR := GETPRINTER('InvPrinter'), ; + MINVPORT := GETPRINTER('InvPort'), ; + oSAY104A:REFRESH(), ; + oSAY104B:REFRESH() ) + + + REDEFINE BUTTON ID 9905 OF oDIALOG ; + ACTION ( SETPRNTR('Del'), ; + MDELPRTR := GETPRINTER('DelPrinter'),; + MDELPORT := GETPRINTER('DelPort'), ; + oSAY105A:REFRESH(), ; + oSAY105B:REFRESH() ) + + + REDEFINE BUTTON ID 9906 OF oDIALOG ; + ACTION ( SETPRNTR('Golden'), ; + MPRODPRTR := GETPRINTER('GoldenPrinter'),; + MPRODPORT := GETPRINTER('GoldenPort'), ; + oSAY106A:REFRESH(), ; + oSAY106B:REFRESH() ) + + REDEFINE BUTTON ID 9907 OF oDIALOG ; + ACTION ( SETPRNTR('MailLbl'), ; + MMAILPRTR := GETPRINTER('MailLblPrinter'),; + MMAILPORT := GETPRINTER('MailLblPort'), ; + oSAY107A:REFRESH(), ; + oSAY107B:REFRESH() ) + + REDEFINE BUTTON ID 9908 OF oDIALOG ; + ACTION ( SETPRNTR('InterComp'), ; + MICOMPPRTR := GETPRINTER('InterCompPrinter'), ; + MICOMPPORT := GETPRINTER('InterCompPort'), ; + oSAY108A:REFRESH(), ; + oSAY108B:REFRESH() ) + + + REDEFINE BUTTON ID 9909 OF oDIALOG ; + ACTION ( SETPRNTR('BackOrd'), ; + MBACKOPRTR := GETPRINTER('BackOrdPrinter'),; + MBACKOPORT := GETPRINTER('BackOrdPort'), ; + oSAY109A:REFRESH(), ; + oSAY109B:REFRESH() ) + + + REDEFINE BUTTON ID 9910 OF oDIALOG ; + ACTION ( SETPRNTR('Quote'), ; + MQUOTEPRTR := GETPRINTER('QuotePrinter'),; + MQUOTEPORT := GETPRINTER('QuotePort'), ; + oSAY110A:REFRESH(), ; + oSAY110B:REFRESH() ) + + REDEFINE BUTTON ID 9911 OF oDIALOG ; + ACTION ( SETPRNTR('PreBill'), ; + MPREBPRTR := GETPRINTER('PreBillPrinter'), ; + MPREBPORT := GETPRINTER('PreBillPort'), ; + oSAY111A:REFRESH(), ; + oSAY111B:REFRESH() ) + + REDEFINE BUTTON ID 9912 OF oDIALOG ; + ACTION ( SETPRNTR('PreCost'), ; + MPRECPRTR := GETPRINTER('PreCostPrinter'), ; + MPRECPORT := GETPRINTER('PreCostPort'), ; + oSAY112A:REFRESH(), ; + oSAY112B:REFRESH() ) + + + REDEFINE BUTTON ID 9999 OF oDIALOG ; + CANCEL ; + ACTION odialog:end() + + ACTIVATE DIALOG oDIALOG CENTERED ; + VALID(MRPTPRTR := GETPRINTER('ReportPrinter'), ; + MPRODPRTR := GETPRINTER('ProdPrinter'), ; + MORDPRTR := GETPRINTER('OrdDeskPrinter'),; + MINVPRTR := GETPRINTER('InvPrinter'), ; + MDELPRTR := GETPRINTER('DelPrinter'), ; + MGOLDPRTR := GETPRINTER('GoldenPrinter'), ; + MMAILPRTR := GETPRINTER('MailLblPrinter'), ; + MICOMPPRTR := GETPRINTER('InterCompPrinter'), ; + MBACKOPRTR := GETPRINTER('BackOrdPrinter'), ; + MQUOTEPRTR := GETPRINTER('QuotePrinter'), ; + MPREBPRTR := GETPRINTER('PreBillPrinter'), ; + MPRECPRTR := GETPRINTER('PreCostPrinter'), ; + RETVAL := VALIDPRTRS( MRPTPRTR, MPRODPRTR, MORDPRTR, MINVPRTR, ; + MDELPRTR, MGOLDPRTR, MMAILPRTR, MICOMPPRTR, ; + MBACKOPRTR, MQUOTEPRTR, MPREBPRTR, MPRECPRTR ) ) + + + + +RETURN RETVAL + + + + + + +********************************************************* + + + + +/* + + + + + +//* - SELECT A PRINTER FROM THE TABLE BELOW +//* +//* draw input screen +//* +/* +AADD(PRN_LIST , 'OKI') +AADD(PRN_LIST , 'EPS') +AADD(PRN_LIST , 'PRW') +AADD(PRN_LIST , 'PRN') +AADD(PRN_LIST , 'P90') +AADD(PRN_LIST , 'HPJ') +AADD(PRN_LIST , 'HPD') +AADD(PRN_LIST , 'HP4') + + + +_REPTPRNT := STR(ASCAN(PRN_LIST, {|X| X = REPT_PRN}),1) +_BOPRNT := STR(ASCAN(PRN_LIST, {|X| X = BO_PRN}),1) //** P3N - 4/30/98 +_PRODPRNT := STR(ASCAN(PRN_LIST, {|X| X = PROD_PRN}),1) +_ODPRNT := STR(ASCAN(PRN_LIST, {|X| X = OD_PRN}),1) +_INVPRNT := STR(ASCAN(PRN_LIST, {|X| X = INV_PRN}),1) +_DELPRNT := STR(ASCAN(PRN_LIST, {|X| X = DEL_PRN}),1) +_GRPRNT := STR(ASCAN(PRN_LIST, {|X| X = GR_PRN}),1) +_ICPRNT := STR(ASCAN(PRN_LIST, {|X| X = IC_PRN}),1) +_LBLPRNT := STR(ASCAN(PRN_LIST, {|X| X = LBL_PRN}),1) +_QTEPRNT := STR(ASCAN(PRN_LIST, {|X| X = INV_PRN}),1) +_PREPRNT := STR(ASCAN(PRN_LIST, {|X| X = INV_PRN}),1) +IF FIELDPOS('QTE_PRN') > 0 //** P3N - 4/13/98 + _QTEPRNT := STR(ASCAN(PRN_LIST, {|X| X = QTE_PRN}),1) +ENDIF +IF FIELDPOS('PRE_PRN') > 0 //** P3N - 4/13/98 + _PREPRNT := STR(ASCAN(PRN_LIST, {|X| X = PRE_PRN}),1) +ENDIF +M_LPTR := REPT_PORT +M_LPTP := PROD_PORT +M_LPTO := OD_PORT +M_LPTI := INV_PORT +M_LPTD := DEL_PORT +M_LPTG := GR_PORT +M_LPTL := LBL_PORT +M_LPTIC := IC_PORT +M_LPTBO := BO_PORT //** P3N - 4/30/98 +M_LPTQ := INV_PORT //** P3N - 4/13/98 +M_LPTPRE := INV_PORT //** P3N - 4/13/98 +IF FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 + M_LPTQ := QTE_PORT //** P3N - 4/13/98 +ENDIF +IF FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 + M_LPTPRE := PRE_PORT //** P3N - 4/13/98 +ENDIF + +SELECT WORKSTAT + +DO WHILE .T. + CLEAR + TITLE = 'SELECT PRINTER' + H = ((80 - LEN(TITLE)) / 2) + @ 0,H SAY TITLE + @ 0,74 SAY 'PDEF' + @ 1,0 SAY DOUBLE + @ 3,72 SAY DTOC(DATE()) + @ 5,28 SAY " AVAILABLE PRINTERS " + @ 6,28 SAY " ================== " + @ 7,26 SAY "1. Okidata Microline 84" + @ 8,26 SAY "2. Epson (All Models)" + @ 9,26 SAY "3. HP LaserJet " +**@ 9,26 SAY "3. IBM Proprinter - Wide Carriage" +**@ 10,26 SAY "4. IBM Proprinter - Narrow Carriage" +**@ 11,26 SAY "5. IBM Proprinter - Model 2390 Narrow" +**@ 13,26 SAY "7. HP LaserJet IIID (Duplex printer)" +**@ 14,26 SAY "8. HP LaserJet 4SI (Duplex printer)" +**@ 10,26 SAY "X. RETURN " + LOOP4100 := .T. + DO WHILE LOOP4100 + SET CONFIRM OFF + @ 4,72 SAY TIME() + + @ 12,10 SAY " Select REPORTS Printer : : LPT Port : :" + @ 13,10 SAY " Select PRODUCTION Printer : : LPT Port : :" + @ 14,10 SAY " Select ORDER DESK Printer : : LPT Port : :" + @ 15,10 SAY " Select INVOICE Printer : : LPT Port : :" + @ 16,10 SAY " Select DELIVERY Printer : : LPT Port : :" + @ 17,10 SAY " Select GOLDEN ROD Printer : : LPT Port : :" + @ 18,10 SAY "Select MAILING LABEL Printer : : LPT Port : :" + @ 19,10 SAY " Select INTERCOMPANY Printer : : LPT Port : :" + @ 20,10 SAY " Select BACKORDER Printer : : LPT Port : :" //** P3N 4/30/98 + IF FIELDPOS('QTE_PRN') > 0 .AND. FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 + @ 21,10 SAY " Select QUOTE Printer : : LPT Port : :" + ENDIF + IF FIELDPOS('PRE_PRN') > 0 .AND. FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 + @ 22,10 SAY " Select PREBILL Printer : : LPT Port : :" + ENDIF + + DO WHILE .T. +//** P3N 4/16/99 ADDED LPT4 OPTION + @ 12,39 GET _REPTPRNT PICTURE '9' VALID CHK_PRN(_REPTPRNT) +//** @ 12,54 GET M_LPTR PICTURE '9' VALID M_LPTR$'123' + @ 12,54 GET M_LPTR PICTURE '9' VALID M_LPTR$'1234' + @ 13,39 GET _PRODPRNT PICTURE '9' VALID CHK_PRN(_PRODPRNT) +//** @ 13,54 GET M_LPTP PICTURE '9' VALID M_LPTP$'123' + @ 13,54 GET M_LPTP PICTURE '9' VALID M_LPTP$'1234' + @ 14,39 GET _ODPRNT PICTURE '9' VALID CHK_PRN(_ODPRNT) +//** @ 14,54 GET M_LPTO PICTURE '9' VALID M_LPTO$'123' + @ 14,54 GET M_LPTO PICTURE '9' VALID M_LPTO$'1234' + @ 15,39 GET _INVPRNT PICTURE '9' VALID CHK_PRN(_INVPRNT) +//** @ 15,54 GET M_LPTI PICTURE '9' VALID M_LPTI$'123' + @ 15,54 GET M_LPTI PICTURE '9' VALID M_LPTI$'1234' + @ 16,39 GET _DELPRNT PICTURE '9' VALID CHK_PRN(_DELPRNT) +//** @ 16,54 GET M_LPTD PICTURE '9' VALID M_LPTD$'123' + @ 16,54 GET M_LPTD PICTURE '9' VALID M_LPTD$'1234' + @ 17,39 GET _GRPRNT PICTURE '9' VALID CHK_PRN(_GRPRNT) +//** @ 17,54 GET M_LPTG PICTURE '9' VALID M_LPTG$'123' + @ 17,54 GET M_LPTG PICTURE '9' VALID M_LPTG$'1234' + @ 18,39 GET _LBLPRNT PICTURE '9' VALID CHK_PRN(_LBLPRNT) +//** @ 18,54 GET M_LPTL PICTURE '9' VALID M_LPTL$'123' + @ 18,54 GET M_LPTL PICTURE '9' VALID M_LPTL$'1234' + @ 19,39 GET _ICPRNT PICTURE '9' VALID CHK_PRN(_ICPRNT) +//** @ 19,54 GET M_LPTIC PICTURE '9' VALID M_LPTIC$'123' + @ 19,54 GET M_LPTIC PICTURE '9' VALID M_LPTIC$'1234' + @ 20,39 GET _BOPRNT PICTURE '9' VALID CHK_PRN(_BOPRNT) //** P3N - 4/30/98 +//** @ 20,54 GET M_LPTBO PICTURE '9' VALID M_LPTBO$'123' + @ 20,54 GET M_LPTBO PICTURE '9' VALID M_LPTBO$'1234' + IF FIELDPOS('QTE_PRN') > 0 .AND. FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 + @ 21,39 GET _QTEPRNT PICTURE '9' VALID CHK_PRN(_QTEPRNT) +//** @ 21,54 GET M_LPTQ PICTURE '9' VALID M_LPTQ$'123' + @ 21,54 GET M_LPTQ PICTURE '9' VALID M_LPTQ$'1234' + ENDIF + IF FIELDPOS('PRE_PRN') > 0 .AND. FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 + @ 22,39 GET _PREPRNT PICTURE '9' VALID CHK_PRN(_PREPRNT) +//** @ 22,54 GET M_LPTPRE PICTURE '9' VALID M_LPTPRE$'123' + @ 22,54 GET M_LPTPRE PICTURE '9' VALID M_LPTPRE$'1234' + ENDIF + + READ + IF LASTKEY() == 27 .AND. PROCNAME(1) <> 'SET_PRNT_P' + CLS + FOR L = 1 TO LEN(CLOSE_ARR) + MFILE = CLOSE_ARR[L] + SELECT(MFILE) + USE + NEXT + RETURN + ENDIF + + IF EMPTY(M_LPTR) .OR. EMPTY(M_LPTP) .OR. EMPTY(M_LPTO); + .OR. EMPTY(M_LPTI) .OR. EMPTY(M_LPTD) .OR. EMPTY(M_LPTG) + LOOP + ENDIF + CORR = CORRCHEK() + IF CORR = 'Y' + LOOP4100 := .F. + EXIT + ENDIF + IF LASTKEY() == 27 .AND. PROCNAME(1) <> 'SET_PRNT_P' + CLEAR + FOR L = 1 TO LEN(CLOSE_ARR) + MFILE = CLOSE_ARR[L] + SELECT(MFILE) + USE + NEXT + RETURN + ENDIF + ENDDO + ENDDO + SETCOLOR(LNOR) + SELECT WORKSTAT + REC_LOCK(1) + REPLACE REPT_PRN WITH PRN_LIST[VAL(_REPTPRNT)] + REPLACE PROD_PRN WITH PRN_LIST[VAL(_PRODPRNT)] + REPLACE OD_PRN WITH PRN_LIST[VAL(_ODPRNT)] + REPLACE INV_PRN WITH PRN_LIST[VAL(_INVPRNT)] + REPLACE DEL_PRN WITH PRN_LIST[VAL(_DELPRNT)] + REPLACE GR_PRN WITH PRN_LIST[VAL(_GRPRNT)] + REPLACE LBL_PRN WITH PRN_LIST[VAL(_LBLPRNT)] + REPLACE IC_PRN WITH PRN_LIST[VAL(_ICPRNT)] + REPLACE BO_PRN WITH PRN_LIST[VAL(_BOPRNT)] //** P3N - 4/30/98 + IF FIELDPOS('QTE_PRN') > 0 //** P3N - 4/13/98 + REPLACE QTE_PRN WITH PRN_LIST[VAL(_QTEPRNT)] //** P3N - 4/13/98 + ENDIF + IF FIELDPOS('PRE_PRN') > 0 //** P3N - 4/13/98 + REPLACE PRE_PRN WITH PRN_LIST[VAL(_PREPRNT)] //** P3N - 4/13/98 + ENDIF + REPLACE REPT_PORT WITH M_LPTR + REPLACE PROD_PORT WITH M_LPTP + REPLACE OD_PORT WITH M_LPTO + REPLACE INV_PORT WITH M_LPTI + REPLACE DEL_PORT WITH M_LPTD + REPLACE GR_PORT WITH M_LPTG + REPLACE LBL_PORT WITH M_LPTL + REPLACE IC_PORT WITH M_LPTIC + REPLACE BO_PORT WITH M_LPTBO //** P3N - 4/30/98 + IF FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 + REPLACE QTE_PORT WITH M_LPTQ //** P3N - 4/13/98 + ENDIF + IF FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 + REPLACE PRE_PORT WITH M_LPTPRE //** P3N - 4/13/98 + ENDIF + // RESET THE SYSTEM VARIABLES TOO!!! + **SET_PRNT_PARMS(.F.) //p3n - 2-6-98 + + FOR L = 1 TO LEN(CLOSE_ARR) + MFILE = CLOSE_ARR[L] + SELECT(MFILE) + USE + NEXT + + CLEAR SCREEN + RETURN +ENDDO WHILE .T. + +*/ + + +* * * * * * * * * * * * * * * * * +PROCEDURE SET_PRNT_PARMS(NO_SET_PORT) +// THIS WILL SET UP THE PRINTER VARIABLES +// FOR FORMS, REPORTS, AND ANY LOCAL PRINTING + +LOCAL SEEKKEY, CLOSE_IT, SAVESEL := SELECT(), SVREC + +IF NO_SET_PORT = NIL + NO_SET_PORT := .T. +ENDIF + +TOFILE := SYSCODE + '1WS' + +IF SELECT('WORKSTAT') = 0 + NET_USE('&WORKSTAT', .F., 5, 'WORKSTAT') + CLOSE_IT = .T. +ELSE + SELECT WORKSTAT + CLOSE_IT = .F. +ENDIF + + + +*****SEEKKEY = NETNAME() +SEEKKEY := WSID +IF LEN(TRIM(SEEKKEY)) = 0 + SEEKKEY = 'SINGLE' +ENDIF + +LOCATE FOR ALLTRIM( WS_ID ) == ALLTRIM ( SEEKKEY ) +IF !FOUND() +**ADD_REC(3) +**REPLACE WS_ID WITH NETNAME() + SVREC := RECNO() + INITWS() // NEW WORKSTATION REC - SET DEFAULTS - + INDEX_WS() +**SELECT WORKSTAT + GOTO SVREC + REC_LOCK(1) + REPLACE LNOR_VAR WITH LNOR + REPLACE HNOR_VAR WITH HNOR + REPLACE UNDR_VAR WITH UNDR + REPLACE HREV_VAR WITH HREV + REPLACE BLOW_VAR WITH BLOW + REPLACE BREV_VAR WITH BREV + SELPRINT() // GO GET PRINTER SELECTION INFO +ELSE + _REPORT := WORKSTAT->REPT_PRN + _PRODUCTION := WORKSTAT->PROD_PRN + _ORDERDESK := WORKSTAT->OD_PRN + _INVOICE := WORKSTAT->INV_PRN + _BOPRN := WORKSTAT->BO_PRN //** P3N - 4/30/98 + _QUOTE := WORKSTAT->INV_PRN //** P3N - 4/13/98 + IF FIELDPOS('QTE_PRN') > 0 //** P3N - 4/13/98 + _QUOTE := WORKSTAT->QTE_PRN //** P3N - 4/13/98 + ENDIF + _PREBILL := WORKSTAT->INV_PRN //** P3N - 4/13/98 + IF FIELDPOS('PRE_PRN') > 0 //** P3N - 4/13/98 + _PREBILL := WORKSTAT->PRE_PRN //** P3N - 4/13/98 + ENDIF + _DELIVERY := WORKSTAT->DEL_PRN + _GOLDEN := WORKSTAT->GR_PRN + _LBLPRN := WORKSTAT->LBL_PRN + _ICPRN := WORKSTAT->IC_PRN + _PRECOST := WORKSTAT->INV_PRN //** P3N - 4/13/98 + + IF !EMPTY(REPT_PORT) + _RPTPORT = 'LPT' + REPT_PORT + ELSE + _RPTPORT = 'LPT1' + ENDIF + + IF !EMPTY(PROD_PORT) + _PORT_PROD = 'LPT' + PROD_PORT + ELSE + _PORT_PROD = 'LPT1' + ENDIF + + IF !EMPTY(OD_PORT) + _PORT_ORDER = 'LPT' + OD_PORT + ELSE + _PORT_ORDER = 'LPT1' + ENDIF + + IF !EMPTY(INV_PORT) + _PORT_INVOICE = 'LPT' + INV_PORT + ELSE + _PORT_INVOICE = 'LPT1' + ENDIF + + IF !EMPTY(BO_PORT) //** P3N - 4/30/98 + _PORT_BO := 'LPT' + BO_PORT //** P3N - 4/30/98 + ELSE //** P3N - 4/30/98 + _PORT_BO := 'LPT1' //** P3N - 4/30/98 + ENDIF //** P3N - 4/30/98 + + _PORT_QUOTE := 'LPT1' //** P3N - 4/13/98 + IF FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 + IF !EMPTY(QTE_PORT) //** P3N - 4/13/98 + _PORT_QUOTE := 'LPT' + QTE_PORT //** P3N - 4/13/98 + ENDIF + ENDIF + + _PORT_PREBILL := 'LPT1' //** P3N - 4/13/98 + IF FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 + IF !EMPTY(PRE_PORT) //** P3N - 4/13/98 + _PORT_PREBILL := 'LPT' + PRE_PORT //** P3N - 4/13/98 + ENDIF + ENDIF + + IF !EMPTY(DEL_PORT) + _PORT_DELIVERY = 'LPT' + DEL_PORT + ELSE + _PORT_DELIVERY = 'LPT1' + ENDIF + + IF !EMPTY(GR_PORT) + _PORT_GOLDEN = 'LPT' + GR_PORT + ELSE + _PORT_GOLDEN = 'LPT1' + ENDIF + + IF !EMPTY(IC_PORT) + _PORT_IC = 'LPT' + IC_PORT + ELSE + _PORT_IC = 'LPT1' + ENDIF + + IF !EMPTY(LBL_PORT) + _PORT_LABEL = 'LPT' + LBL_PORT + ELSE + _PORT_LABEL = 'LPT1' + ENDIF + +ENDIF + +IF NO_SET_PORT + // CALLED FROM SET_PORT() AVOID RECURSIVE CALL - ENDLESS LOOP! +ELSE + SET_PORT('_RPTPORT', .F.) +ENDIF + +IF CLOSE_IT + USE +ENDIF + +SELECT(SAVESEL) +RETURN +************************************* +* INDEX WORKSTAT FILE +************************************* +FUNCTION INDEX_WS() +USE +DBOPEN('WORKSTAT', .T.) // DOESN'T EXIST MEANS 1ST TIME IN APP +IF __DBDRIVER = 'NTX' // SHOULDN'T BE ANYBODY USING WS FILE! + INDEX ON WS_ID TO &TOFILE +ELSE + INDEX ON WS_ID TAG '1' TO &TOFILE +ENDIF +USE +NET_USE('&WORKSTAT', .F., 5, 'WORKSTAT') +RETURN + +************************************************************ + +FUNCTION SET_PORT(MPORT_NAME, SET_THE_PRINT, OUTFILE) +// SET THE PRINTER PORT AND LOOKS UP THE PRINTER NAME TO GET +// THE COMPRESS & WIDTH VALUES + +LOCAL SAVESEL := SELECT(), CLOSE_ARR := {}, MPRINTER, L, MPORT, SEEKKEY +LOCAL SAVESCR + + +IF EMPTY(OUTFILE) + OUTFILE := ' ' +ENDIF + +IF SET_THE_PRINT = NIL + SET_THE_PRINT := .T. +ENDIF + +// LOOKUP THE PRINTER +IF SELECT('PRINTERS') = 0 + NET_USE('&PRINTERS', .F., 5, 'PRINTERS') + AADD(CLOSE_ARR, 'PRINTERS') +ENDIF + +IF SELECT('WORKSTAT') = 0 + NET_USE('&WORKSTAT', .F., 5, 'WORKSTAT') + AADD(CLOSE_ARR, 'WORKSTAT') +ELSE + SELECT WORKSTAT +ENDIF + +SEEKKEY := WSID +IF LEN(TRIM(SEEKKEY)) = 0 + SEEKKEY = 'SINGLE' +ENDIF + +DO WHILE .T. + LOCATE FOR ALLTRIM (WS_ID ) == ALLTRIM ( SEEKKEY ) // FIND WORK STATION RECORD + IF !FOUND() .OR. EMPTY(REPT_PRN) .OR. EMPTY(PROD_PRN) .OR. EMPTY(OD_PRN) ; + .OR. EMPTY(INV_PRN) .OR. EMPTY(DEL_PRN) + SET_P_OFF() + ?? CHR(7) + ?? CHR(7) + SAVESCR = SAVESCREEN() + SET_PRNT_PARMS(.T.) // GO SET UP PRINTER INFO + RESTSCREEN(,,,,SAVESCR) + SET_P_ON() + IF SET_THE_PRINT + // OUTPUT TO THE PRINTER + ELSE + // OUTPUT TO A TEXT FILE + IF FILE(OUTFILE) + //PROG := 'DEL ' + OUTFILE + //CALL_OLAY(,,PROG, 0, '', '') + FERASE( OUTFILE ) + ENDIF + SET PRINTER TO (OUTFILE) + ENDIF + ELSE + EXIT + ENDIF +ENDDO + +/* + + MRPTPRTR := GETPRINTER('ReportPrinter') + MRPTPORT := GETPRINTER('ReportPort') + MRPTDEV := GETPRINTER('ReportDevice') + + MPRODPRTR := GETPRINTER('ProdPrinter') + MPRODPORT := GETPRINTER('ProdPort') + MPRODDEV := GETPRINTER('ProdDevice') + + MORDPRTR := GETPRINTER('OrdDeskPrinter') + MORDPORT := GETPRINTER('OrdDeskPort') + MORDDEV := GETPRINTER('OrdDeskDevice') + + MINVPRTR := GETPRINTER('InvPrinter') + MINVPORT := GETPRINTER('InvPort') + MINVDEV := GETPRINTER('InvDevice') + + MDELPRTR := GETPRINTER('DelPrinter') + MDELPORT := GETPRINTER('DelPort') + MDELDEV := GETPRINTER('DelDevice') + + MGOLDPRTR := GETPRINTER('GoldenPrinter') + MGOLDPORT := GETPRINTER('GoldenPort') + MGOLDDEV := GETPRINTER('GoldenDevice' ) + + MMAILPRTR := GETPRINTER('MailLblPrinter') + MMAILPORT := GETPRINTER('MailLblPort') + MMAILDEV := GETPRINTER('MailLblDevice') + + MICOMPPRTR := GETPRINTER('InterCompPrinter') + MICOMPPORT := GETPRINTER('InterCompPort') + MICOMPDEV := GETPRINTER('InterCompDevice') + + MBACKOPRTR := GETPRINTER('BackOrdPrinter') + MBACKOPORT := GETPRINTER('BackOrdPort') + MBACKODEV := GETPRINTER('BackOrdDevice') + + MQUOTEPRTR := GETPRINTER('QuotePrinter') + MQUOTEPORT := GETPRINTER('QuotePort') + MQUOTEDEV := GETPRINTER('QuoteDevice') + + MPREBPRTR := GETPRINTER('PreBillPrinter') + MPREBPORT := GETPRINTER('PreBillPort') + MPREBDEV := GETPRINTER('PreBillDevice') + + MPRECPRTR := GETPRINTER('PreCostPrinter') + MPRECPORT := GETPRINTER('PreCostPort') + MPRECDEV := GETPRINTER('PreCostDevice') + +*/ + +DO CASE + CASE MPORT_NAME = '_RPTPORT' + MPRINTER = REPT_PRN + MPORT := 'LPT' + REPT_PORT + MPORT := GETPRINTER('ReportPrinter') + + CASE MPORT_NAME = '_PORT_PROD' + MPRINTER = PROD_PRN + MPORT := 'LPT' + PROD_PORT + MPORT := GETPRINTER('ProdPrinter') + + //** P3N - 04/08/03 CHANGED TO ALLOW THE ORDER DESK & LABEL PRINTERS TO BE DIFFERENT + //** CASE MPORT_NAME = '_PORT_ORDER' .OR. MPORT_NAME = '_PORT_LABEL' + CASE MPORT_NAME = '_PORT_ORDER' + MPRINTER = OD_PRN + MPORT := 'LPT' + OD_PORT + MPORT := GETPRINTER('OrdDeskPrinter') + + CASE MPORT_NAME = '_PORT_LABEL' //** P3N - 04/08/03 + MPRINTER = LBL_PRN //** P3N - 04/08/03 + MPORT := 'LPT' + LBL_PORT //** P3N - 04/08/03 + + CASE MPORT_NAME = '_PORT_INVOICE' + MPRINTER = INV_PRN + MPORT := 'LPT' + INV_PORT + + CASE MPORT_NAME = '_PORT_QUOTE' //** P3N - 4/13/98 + MPRINTER := INV_PRN //** P3N - 4/13/98 + MPORT := 'LPT' + INV_PORT //** P3N - 4/13/98 + IF FIELDPOS('QTE_PRN') > 0 //** P3N - 4/13/98 + MPRINTER = QTE_PRN //** P3N - 4/13/98 + ENDIF //** P3N - 4/13/98 + IF FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 + MPORT := 'LPT' + QTE_PORT //** P3N - 4/13/98 + ENDIF + + CASE MPORT_NAME = '_PORT_PREBILL' //** P3N - 4/13/98 + MPRINTER := INV_PRN //** P3N - 4/13/98 + MPORT := 'LPT' + INV_PORT //** P3N - 4/13/98 + IF FIELDPOS('PRE_PRN') > 0 //** P3N - 4/13/98 + MPRINTER = PRE_PRN //** P3N - 4/13/98 + ENDIF //** P3N - 4/13/98 + IF FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 + MPORT := 'LPT' + PRE_PORT //** P3N - 4/13/98 + ENDIF + + CASE MPORT_NAME = '_PORT_DELIVERY' + MPRINTER = DEL_PRN + MPORT := 'LPT' + DEL_PORT + + CASE MPORT_NAME = '_PORT_GOLDEN' + MPRINTER = GR_PRN + MPORT := 'LPT' + GR_PORT + + CASE MPORT_NAME = '_PORT_LABEL' + MPRINTER = LBL_PRN + MPORT := 'LPT' + LBL_PORT + + CASE MPORT_NAME = '_PORT_IC' + MPRINTER = IC_PRN + MPORT := 'LPT' + IC_PORT + + CASE MPORT_NAME = '_PORT_BO' //** P3N - 4/30/98 + MPRINTER = BO_PRN //** P3N - 4/30/98 + MPORT := 'LPT' + BO_PORT //** P3N - 4/30/98 + +END CASE + +SELECT PRINTERS +LOCATE FOR PRINTER == MPRINTER + + +/* +NARROW = "''" +COMPRESS := "''" +WIDE = "''" +NORMAL := "''" +COMPRESSL = "''" +LMAR15 = "''" +LMAR18 = "''" +TMAR = "''" +WIDEON = "''" +WIDEOFF = "''" +SP4 := "''" +SP6 := "''" +SP10 := "''" +SP12 := "''" +SP16 := "''" +LF := "''" +FL7 := "''" +FL11 := "''" +FL14 := "''" +FEED := "''" +FEED2 := "''" +PICA := "''" +ELITE := "''" +SEN_ON = "''" +SEN_OFF = "''" +*/ + + + +NARROW = PCOMPRESS +COMPRESS := NARROW +WIDE = PNORMAL +NORMAL := WIDE +COMPRESSL = PCOMPRESSL +LMAR15 = LEFT_MAR15 +LMAR18 = LEFT_MAR18 +TMAR = TOP_MAR +WIDEON = PWIDEON +WIDEOFF = PWIDEOFF +SP4 := SP_4 +SP6 := SP_6 +SP10 := SP_10 +SP12 := SP_12 +SP16 := SP_16 +LF := ILF +FL7 := FL_7 +FL11 := FL_11 +FL14 := FL_14 +FEED := SMALL_FEED +FEED2 := TINY_FEED +PICA := P_PICA +ELITE := P_ELITE +SEN_ON = SENSOR_ON +SEN_OFF = SENSOR_OFF + +// SET THE PORT +//*MPORT = &MPORT_NAME +//*SET PRINT TO (MPORT) +IF SET_THE_PRINT + IF USER = '_FMAINT' + BLD_GDG('ORDER.TXT', 8) //CREATE GDG(limit of 8) OF ORDERS PRINTED! + SET PRINTER TO ORDER.TXT + ELSE + // SET PRINTER TO (MPORT) + //Set( 24, M->_THISUSER_TEMP, .F. ) + SET PRINTER TO ( M->_THISUSER_TEMP ) // APPDATA FOLDER + ENDIF +ENDIF + +// CLOSE FILES +FOR L = 1 TO LEN(CLOSE_ARR) + MALIAS = CLOSE_ARR[L] + SELECT(MALIAS) + USE +NEXT + +SELECT(SAVESEL) + +RETURN MPORT + +******************************************** +FUNCTION CHK_PRN(MVAR) +// CHECK FOR CORRECT PRINTER SELECTION + +*** *IF MVAR$'12345678' +IF MVAR$'123' + RETURN .T. +ELSE + RETURN .F. +ENDIF + +***************************** +//***************************************************************** +//***************************************************************** +//** P3N 11/20/02 SET THE PRINTERS SECTION IN THE INI FILE *** +//***************************************************************** +//***************************************************************** +FUNCTION SETPRNTR(PCMD) +LOCAL SYSCODE := M->SYSCODE, lEXIT := .F. + +LOCAL MHDC +LOCAL SYSINI +LOCAL CMD +LOCAL PRPORT +LOCAL PRNAME +LOCAL PRDEV +LOCAL INIPORT +LOCAL ININAME +LOCAL INIDEV +local cPrinter + +SYSINI := GETSYSINI(SYSCODE) +CMD := UPPER(PCMD) +PRPORT := PCMD+'Port' +PRNAME := PCMD+'Printer' +PRDEV := PCMD+'Device' +INIPORT := ALLTRIM(GETPVPROFSTR('PRINTERS', PRPORT, '', SYSINI)) // ** P3N - 3/14/00 +ININAME := ALLTRIM(GETPVPROFSTR('PRINTERS', PRNAME, '', SYSINI)) // ** P3N - 3/14/00 +INIDEV := ALLTRIM(GETPVPROFSTR('PRINTERS', PRDEV, '', SYSINI)) // ** P3N - 10/16/03 +cPrinter := GetProfString( "windows", "device" , "" ) //** WINDOWS DEFAULT PRINTER + + + + +//**DO WHILE .T. + //IF GET_PERDATA()[3] = '_FMAINT' .OR. GET_PERDATA()[3] = 'MASTER' + // MSGINFO('Windows DEFAULT printer device is "' +cPrinter+'"', 'Default printer') + //ENDIF + + CKSYSPRTR(ININAME, PCMD, 'NOCALL') + PRINTERSETUP() + //** IS THE WINDOWS DEFAULT PRINTER AVAILABLE? + //** WriteProfString( "windows", "device", cPrinter ) + //** SysRefresh() + //** PrinterInit() + MhDC := GetPrintDefault( GetActiveWindow() ) + SysRefresh() + //** WriteProfString( "windows", "device", cPrinter ) + +//** CHECK FOR THE WINDOWS DEFAULT PRINTER + IF MhDC = 0 .OR. EMPTY(cPrinter) + MSGSTOP('Windows Default Printer "' + cPrinter +'"' + CR_LF(2) + ; + 'NOT Found or is NOT Available', 'Printer NOT Available' ) + + ELSE + + ININAME := PRNGETNAME() + //** P3N - 10/06/09 ADDRESS THE "NO PRINTERS INSTALLED!" message(from fwhx v2.6 Sept-2005) in vista + SETINIVALS(@ININAME, @INIPORT, @INIDEV) //** P3N - 10/06/09 - Address Vista issue + INIPORT := STRTRAN(PRNGETPORT(),':','') + INIDEV := PRNGETDRIVE() + + IF EMPTY(ININAME) .OR. EMPTY(INIPORT) + MSGSTOP( 'Invalid or Incomplete Printer Information:' + CR_LF(2) + ; + 'Printer Name - ' + ININAME + CR_LF() + ; + 'Printer Port - ' + INIPORT,'Incomplete Printer Stetup' ) + + ELSE + + WRITEPPROS('PRINTERS', PRNAME, ININAME, SYSINI ) + WRITEPPROS('PRINTERS', PRPORT, INIPORT, SYSINI ) + WRITEPPROS('PRINTERS', PRDEV, INIDEV, SYSINI ) + + ENDIF + ENDIF +//**ENDDO + +RETURN .T. + +********************************************* + + +FUNCTION GETPRINTER(CMD) //** P3N - 12/31/02 + ** THIS WILL AVOID A CONFLICT WITH THE FIVEWIN GETPRINTER() FUNCTION + **FUNCTION INIPRINTER(CMD) //** P3N - 12/31/02 + +LOCAL WININI := GETWINDIR() + '\WIN.INI' + +LOCAL PRINTDEV := GETPVPROFSTRING( 'WINDOWS', 'DEVICE', 'NODEFAULT ', WININI ) + +LOCAL SYSINI := GETSYSINI( M->SYSCODE ) + +IF EMPTY(CMD) //** P3N - 11/12/02 + //** RETURN THE DEFAULT WINDOWS SYSTEM PRINTER //** P3N - 11/12/02 +ELSE +//** RETURN THE XXX.INI SECTION [PRINTERS] INFO BASED ON CMD PASSED +//** cmd = 'ReportPrinter' //** P3N - 12/30/02 +//** cmd = 'ReportPort' //** P3N - 12/30/02 +//** cmd = 'CheckPrinter' //** P3N - 12/30/02 +//** cmd = 'CheckPort' //** P3N - 12/30/02 +//** cmd = 'FormPrinter' //** P3N - 12/30/02 +//** cmd = 'FormPort' //** P3N - 12/30/02 + PRINTDEV := GETPVPROFSTRING( 'PRINTERS', CMD, ' ', SYSINI ) +ENDIF //** P3N - 11/12/02 + +RETURN PRINTDEV + + +********************************** + + + + + + + +//***************************************************************** +//***************************************************************** +//** P3N 11/20/02 SET THE PRINTERS SECTION IN THE INI FILE *** +//***************************************************************** +//***************************************************************** +//**FUNCTION VALIDPRTRS( MRPTPRTR, MPRODPRTR, MORDPRTR, MINVPRTR, MDELPRTR, MGOLDPRTR, MMAILPRTR, MICOMPPRTR, MBACKOPRTR, MQUOTEPRTR, MPREBPRTR ) + +FUNCTION VALIDPRTRS(MRPTPRTR, MCHECKPRTR) + +LOCAL RETVAL := .F. + +RETVAL := CKSYSPRTR( MRPTPRTR, 'Report' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'Prod' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'OrdDesk' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'Inv' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'Del' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'Golden' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'MailLbl' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'InterComp' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'BackOrd' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'Quote' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'PreBill' ) +RETVAL := CKSYSPRTR( MRPTPRTR, 'PreCost' ) + +//IF RETVAL +// IF RETVAL +// RETVAL := CKSYSPRTR(MRPTPRTR, 'REPORT', 'NOCALL') +// ENDIF +//ENDIF +//**IF RETVAL +//**ELSE +//** IF ISWINNT() +//** IF MSGYESNO('Printer Information is Incomplete'+CR_LF()+; +//** 'Do you want to continue with incomplete printer information?') +//** RETVAL := .T. +//** ENDIF +//** ENDIF +//**ENDIF + +RETURN RETVAL + +//********************************************************* +//** P3N - 03/07/03 +//** IS THE PRINTER NAME A VALID PRINTER NAME? +//********************************************************* +FUNCTION CKSYSPRTR( PRTRNAME, WHATPRTR ) + +LOCAL SYSINI := GETSYSINI(M->SYSCODE) +LOCAL PRPORT := WHATPRTR + 'Port', PRDEV := WHATPRTR + 'Device', PRNAME := WHATPRTR + 'Printer' +LOCAL INIPORT := ALLTRIM(GETPVPROFSTR('PRINTERS', PRPORT, '', SYSINI)) +LOCAL ININAME := ALLTRIM(GETPVPROFSTR('PRINTERS', PRNAME, '', SYSINI)) +LOCAL INIDEV := ALLTRIM(GETPVPROFSTR('PRINTERS', PRDEV, '', SYSINI)) +local MhDC := 0, RETVAL := .T. +local cPrinter := GetProfString( "windows", "device" , "" ) +LOCAL cWinName := WINDFLT(cPrinter,'NAME'), cWinPort := WINDFLT(cPrinter, 'PORT') +local cWindev := WINDFLT(cPrinter, 'DEVICE') + +WriteProfString( "windows", "device", PRTRNAME ) +SysRefresh() +PrinterInit() +MhDC := GetPrintDefault( GetActiveWindow() ) +SysRefresh() +WriteProfString( "windows", "device", cPrinter ) + +/* +commented out on 10/02/09 +address vista issues +IF MhDC = 0 .OR. EMPTY(PRTRNAME) + MSGINFO('Invalid "' +WHATPRTR+ '" Printer Name - ' + PRTRNAME + CR_LF(2) + ; + 'Windows default printer used - ' + cWinName ) + WRITEPPROS('PRINTERS', PRNAME, cWinName, SYSINI ) + WRITEPPROS('PRINTERS', PRPORT, cWinPort, SYSINI ) + IF EMPTY(CMD) + SYSPRNTRS(, 'INIT') + ENDIF + RETVAL := .T. +ENDIF +*/ + +RETURN RETVAL + +//******************************************************************************** +//** P3N - 10/06/09 +//** ADDRESS THE "NO PRINTERS INSTALLED!" message(from fwhx v2.6 Sept-2005) in vista +//******************************************************************************** +FUNCTION SETINIVALS(ININAME,INIPORT,INIDEV) +//** EXAMPLE OF ALLPRNTRS ARRAY VALUES: +//** ALLPRNTRS[1] "Xerox DocuPrint N2125 PS (by server 138),winspool,Ne00:" +//** ALLPRNTRS[2] "Xerox DocuPrint N2125 PS,winspool,Ne01:" +//** ALLPRNTRS[3] "pdfFactory Pro,winspool,FPP3:" +//** ALLPRNTRS[4] "Microsoft XPS Document Writer,winspool,Ne02:" +//** ALLPRNTRS[5] "\\LAAPCSV1\HP LaserJet 2420 PCL 6,winspool,Ne03:" +//** ALLPRNTRS[6] "WebEx Document Loader,winspool,Ne04:" +LOCAL ALLPRNTRS := GETALLPRNTRS(), I := 0 +LOCAL CKNAME := '' + +FOR I := 1 TO LEN(ALLPRNTRS) + CKNAME := SUBST(ALLPRNTRS[I], 1, AT(',',ALLPRNTRS[I]) -1 ) + IF CKNAME == ININAME + //**IF ALLPRNTRS[I] = ININAME + ININAME := ALLPRNTRS[I] + EXIT + ENDIF +NEXT +RETURN .T. + + +//********************************************************* +//** P3N - 10/06/09 +//** GET ALL PRINTERS FOR THIS WINDOWS SESSION +//********************************************************* +FUNCTION GETALLPRNTRS() +LOCAl cEntry := '', I := 0, cName := '', cPrn := '', cPort := '', J := 0 +LOCAL aDevices := {} +//** EXAMPLE OF aDevices ARRAY VALUES returned: +//** ALLPRNTRS[1] "Xerox DocuPrint N2125 PS (by server 138),winspool,Ne00:" +//** ALLPRNTRS[2] "Xerox DocuPrint N2125 PS,winspool,Ne01:" +//** ALLPRNTRS[3] "pdfFactory Pro,winspool,FPP3:" +//** ALLPRNTRS[4] "Microsoft XPS Document Writer,winspool,Ne02:" +//** ALLPRNTRS[5] "\\LAAPCSV1\HP LaserJet 2420 PCL 6,winspool,Ne03:" +//** ALLPRNTRS[6] "WebEx Document Loader,winspool,Ne04:" +LOCAL cAllEntries := STRTRAN( GetProfString( "Devices" ), Chr( 0 ), CRLF ) +FOR I:= 1 TO MlCount( cAllEntries ) + cName := MemoLine( cAllEntries,,I) + cEntry := GetProfString( "Devices",cName,"") + J := 2 + DO WHILE ! EMPTY(cPort := StrToken(cEntry,J++,",")) + AADD(aDevices,TRIM(cName) + "," + CENTRY) + ENDDO +NEXT +RETURN aDevices + +**************************************************** +FUNCTION WINDFLT(cPrinter, CMD) +LOCAL SPLITNAME := AT(',', cPrinter), RETVAL := '' +LOCAL SPLITPORT := RAT(',', cPrinter) +LOCAL RETNAME := SUBST(cPrinter,1, SPLITNAME-1) +LOCAL RETPORT := SUBST(cPrinter, SPLITPORT+1,LEN(cPrinter) ) +IF ISWINNT() + //**MSGINFO('THIS IS THE WINNT DEFAULT PRINTER - '+CPRINTER) + RETPORT := RETNAME +ENDIF +IF CMD = 'NAME' + RETVAL := RETNAME +ELSEIF CMD = 'PORT' + RETVAL := STRTRAN(RETPORT, ':', '') +ENDIF +RETURN RETVAL + + +*************************************************** + + FUNCTION WRITEPPROS( P1, P2, P3, P4 ) + RETURN WRITEPPROSTRING( P1, P2, P3, P4 ) + +********************************************** + + // FUNCTION GETPVPROFSTR( P1, P2, P3, P4 ) + // RETURN GETPVPROFSTRING( P1, P2, P3, P4 ) + + + ******************************************************** + + FUNCTION GETPVPROFI( P1, P2, P3, P4 ) + RETURN GETPVPROFINT( P1, P2, P3, P4 ) + + **************************************************************** + +************************************************ + + +FUNCTION DON_REPDATE(VAR2) +LOCAL WORKDATE + +// DATE - SQL LIMITATION - DON 4-27-9 +//IF M->SQLDRIVER = 'MEDNTX' // DONE ONLY IF MS/SQL DataBase +// MYEAR := YEAR( VAR2 ) +// IF MYEAR > 0 .AND. MYEAR < 1800 // 01/23/1754 +// +// WORKDATE := DTOC( VAR2 ) +// WORKDATE := SUBS( WORKDATE, 1 , 6 ) ; // 01/23/1854 - MAKE 1800 CENTURY +// + '18' + SUBS( WORKDATE, 9 ) +// VAR2 := CTOD( WORKDATE ) +// ENDIF +//ENDIF + +RETURN VAR2 + + +***************************** + + FUNCTION GETPVPROFSTR( P1, P2, P3, P4 ) + RETURN GETPVPROFSTRING( P1, P2, P3, P4 ) + + +******************************** + +function ReadVar() + +LOCAL NWND + +// MODIFIED IN CASE NO CONTROLS ALIVE. 6-3-2020 +nWnd := AScan( GetAllWin(),; + { | oWnd | IF ( VALTYPE(OWND)$'N', .F., oWnd:lFocused .and. oWnd:ClassName() == "TGET" )} ) + +return If( nWnd != 0, GetAllWin()[ nWnd ], nil ) + + diff --git a/CGWPRINT.PRG b/CGWPRINT.PRG new file mode 100644 index 0000000..5cdbe98 --- /dev/null +++ b/CGWPRINT.PRG @@ -0,0 +1,5578 @@ +#INCLUDE 'CGWINCLD.PRG' +//#INCLUDE 'FIVEWIN.CH' +//#INCLUDE 'REPORT.CH' + + +//#INCLUDE 'FIVEWIN.CH' +// #include "report.ch" + +#DEFINE SW_SHOW 5 + + +* MIKE LEWIS - PRINT ORDERS - CGWPRINT 02/01/94 +******************************************************************* +PROCEDURE ALL_ORDPR(OPTION, TITLE, ACTION) +DBOPEN("CONTROL") +PRIVATE MD_ALLPRNT := D_ALLPRNT +PRIVATE MP_ALLPRNT := P_ALLPRNT +PRIVATE MI_ALLPRNT := I_ALLPRNT +PRIVATE MO_ALLPRNT := O_ALLPRNT +PRIVATE MPO_ALLPRNT := PO_ALLPRNT +PRIVATE MPB_ALLPRNT := PB_ALLPRNT +PRIVATE MPC_ALLPRNT := PC_ALLPRNT +PRIVATE MGR_ALLPRNT := GR_ALLPRNT +PRIVATE MBO_ALLPRNT := BO_ALLPRNT //** P3N - 4/30/98 +PRIVATE _WHEREORD := '1' +PRIVATE MPRTBYINIT := ' ' //** P3N - 01/07/02 +IF CONTROL->(FIELDPOS( 'ALLPRTINIT' ) ) > 0 //** P3N - 01/07/02 + MPRTBYINIT := CONTROL->ALLPRTINIT //** P3N - 01/07/02 +ENDIF //** P3N - 01/07/02 +USE +ORD_PRINT(OPTION, TITLE, ACTION) +RETURN +******************************************************************* +PROCEDURE ORD_PRINT(OPTION, TITLE, ACTION, WHEREORD) +LOCAL SAVESEL := SELECT() //** P3N - 7/12/00 +LOCAL SAVESCR, MTITLE, SVORD := 1, M1, M2, M3, OPT, MARR := {} +PRIVATE ORD_PARMS, GL_ARR, GL_OVR, GLALLOC_OVR := .F. +PRIVATE PRNTSOURCE := ACTION, MCUST_ID, MUSER_ID, OUT_ARR +//** ADDRESS LINDS DELIVERY TICKET PRINT ANOMALY //** P3N - 7/12/00 +IF SELECT(CONTROL) = 0 //** P3N - 7/12/00 + DBOPEN('CONTROL') //** P3N - 7/12/00 +ENDIF //** P3N - 7/12/00 +MLMAR := SPACE(LMAR) //** P3N - 7/12/00 +MTMAR := TMAR //** P3N - 7/12/00 +MBODY_LEN := BODY_LEN //** P3N - 7/12/00 +MHEAD_LEN := HEAD_LEN //** P3N - 7/12/00 +MSING_SHEET := UPPER(SING_SHEET) //** P3N - 7/12/00 +CLOSE CONTROL //** P3N - 7/12/00 +SELECT(SAVESEL) //** P3N - 7/12/00 + +IF !EMPTY(WHEREORD) //SELECTIVE PRINT FROM THE MENU SYSTEM(FUNC-OPEN2100) + _WHEREORD := WHEREORD +ENDIF +IF _WHEREORD = '2' // SECOND TIME THRU - END RECURSIVE CALLS + _WHEREORD := '1' // RESET TO be first time thru + RETURN .T. +ENDIF +IF LASTKEY() == 27 // ABORT ORDER ENTRY - PRINT MENU + RETURN +ENDIF + + *************************************************************** + * THIS IS THE MENU AT THE END OF ORDER ENTRY PROCESS + * DETERMINE WHAT COPY OF THE ORDER TO PRINT + *************************************************************** +IF TITLE = NIL + IF CUR_MAST = 'QUOTE' + TITLE = 'PRINT Quotes' + ELSE + TITLE = 'PRINT Orders' + ENDIF +ENDIF +CLS +IF ACTION == 'OE' // ACTION OE = FROM ORDER ENTRY + TITLE := TITLE + ' ' + ALLTRIM( (CUR_MAST)->ORDER_NUM) + SAYTITLE(TITLE, 'PR020') + MORDER_NUM := (CUR_MAST)->ORDER_NUM + ORD_PROCESS(MORDER_NUM) +ELSE // MAIN MENU + DBOPEN(CUR_OL) + DBOPEN(CUR_MISC) + DBOPEN('MISC_ITEMS',,,{1}) + ORD_PARMS := DBOPEN(CUR_MAST) + SAYTITLE(TITLE, 'PR020') + @ 2,0 CLEAR + SAVESCR := SAVESCREEN() + // INDIVIDUALLY SELECTED FROM GET_KEY + IF ACTION = 'MM' + DO WHILE .T. + RESTSCREEN(,,,,SAVESCR) + MORDER_NUM := GET_KEY(ORD_PARMS) + IF EMPTY(MORDER_NUM) + SELECT(CUR_OL) + USE + RETURN + ENDIF + MTITLE := TITLE + ' ' + ALLTRIM( (CUR_MAST)->ORDER_NUM) + SAYTITLE(MTITLE, 'PR020') + IF !NEED_CALC$'N' + ERR_BOX(' *** THIS ORDER MUST BE RECALCULATED ***', ; + ' Because SOMETHING HAS CHANGED.',; + ' Go to the ORDER ENTRY SCREEN and ',; + ' SAVE THE ORDER AGAIN (F10 key)') + LOOP + ENDIF + MCUST_ID = CUST_ID + MUSER_ID = USER_ID + ORD_PROCESS(MORDER_NUM) + ENDDO + ELSE + // PRINT ALL ORDERS UNPRINTED + MTITLE := TITLE + ' - ALL UNPRINTED' + SAYTITLE(MTITLE, 'PR020') + ??CHR(7) + IF MPRTBYINIT == 'Y' //** P3N - 01/07/02 + OPT := PICKLIST({'ALL Unprinted', 'All Unprinted by User('+TRIM(M->USER)+')'}, 13, 25, ' Print Unprinted Orders' ) + IF LASTKEY() = 27 //** P3N - 01/07/02 + ELSE //** P3N - 01/07/02 + IF OPT = 1 //** P3N - 01/07/02 + MPRTBYINIT := '' //** P3N - 01/07/02 + M1 := 'About to Print ALL Unprinted Orders' //** P3N - 01/07/02 + M2 := 'Do You Want to Continue?' //** P3N - 01/07/02 + M3 := '' //** P3N - 01/07/02 + ELSEIF OPT = 2 //** P3N - 01/07/02 + M1 := 'About to Print ALL Unprinted Orders' //** P3N - 01/07/02 + M2 := 'For User - '+ M->USER //** P3N - 01/07/02 + M3 := 'Do You Want to Continue?' //** P3N - 01/07/02 + MTITLE := MTITLE + ' for - '+M->USER //** P3N - 01/07/02 + SAYTITLE(MTITLE, 'PR020') //** P3N - 01/07/02 + ENDIF //** P3N - 01/07/02 + IF PROMPT_BOX(M1, M2, M3) //** P3N - 01/07/02 + MORDER_NUM := NIL //** P3N - 01/07/02 + MCUST_ID = NIL //** P3N - 01/07/02 + MUSER_ID = M->USER //** P3N - 01/07/02 + ORD_PROCESS(MORDER_NUM) //** P3N - 01/07/02 + ENDIF //** P3N - 01/07/02 + ENDIF //** P3N - 01/07/02 + ELSE //** P3N - 01/07/02 + IF PROMPT_BOX('About to Print ALL Unprinted Orders' , ; + 'Do You Want to Continue?', ' ' ) + MORDER_NUM := NIL + MCUST_ID = NIL + MUSER_ID = NIL + ORD_PROCESS(MORDER_NUM) + ENDIF + ENDIF //** P3N - 01/07/02 + ENDIF +ENDIF +RETURN //** P3N - 3/7/00 +*************************************************************** +** PRINT menu +*************************************************************** +FUNCTION ORD_PROCESS(MORDER_NUM) +LOCAL SAVESCR := SAVESCREEN(),CALL_MENU, SVCOLOR, WHATHOTKEY := {' ', ' '} + //** P3N - 3/8/00 +IF SELECT( CUR_MAST ) > 0 //** AT PRINT ORDER TIME + SVORD := (CUR_MAST)->(DONSETORD(1)) //** ENSURE YOU ARE ON THE +ENDIF //** ORDER_NUM ( INDEX ORDER1 ) + + + //** P3N - 3/8/00 +DBOPEN('ALTSHIPADR') //** P3N - 11/13/98 +IF CUR_MAST = 'QUOTE' + CALL_MENU := 'ORDERS022' + WHATHOTKEY:= {'F7 - Quote Entry', 'F12- Invoice Msg'} +ELSE +//** IF EMPTY( (CUR_MAST)->ORDER_ORG ) //** P3N - 10/21/99 + IF EMPTY( (CUR_MAST)->ORDER_ORG ) .OR. EMPTY(MORDER_NUM) //** P3N - 10/21/99 + CALL_MENU := 'ORDERS020' + ELSE + CALL_MENU := 'ORDERS024' + ENDIF + WHATHOTKEY:= {'F7 - Order Entry', 'F12- Invoice Msg'} +ENDIF +@ 2,0 CLEAR +IF MORDER_NUM <> NIL + OUT_ARR := BLD_ORDER(MORDER_NUM) +ENDIF +IF EMPTY(OUT_ARR) .AND. MORDER_NUM <> NIL + @ 2,0 CLEAR + ERR_BOX('NO Line Items for Order - ' + ALLTRIM(MORDER_NUM)) +ELSE + + SVCOLOR := SETCOLOR(HREV) + @ 0,0 SAY WHATHOTKEY[1] // Order or Quote entry????? + @ 1,0 SAY WHATHOTKEY[2] // Invoice Solicitation msg. entry????? + SETCOLOR(SVCOLOR) + SETKEY( -6, {||CHG_REV_HOTKEY( )} ) //ORDER CHG/REV + SETKEY( -41,{||EDIT_INVNOTES( )} ) //EDIT INVOICE/SOLICITATION MSG + DO WHILE .T. + @ 2,0 CLEAR + CLEAR TYPEAHEAD + CALLMENU(CALL_MENU) //DISPLAY ORDER/QUOTE PRINT MENU-MENU SYSTEM + IF LASTKEY() = 27 + EXIT + ENDIF + ENDDO + SETKEY( -6 , NIL) + SETKEY( -41, NIL) +ENDIF +CLOSE ALTSHIPADR //** P3N - 11/13/98 +RETURN +******************************************************************** +******************************************************************** +******************************************************************** + +FUNCTION PRNT_ORDER(OPTION, TITLE, WHCHORDER) + +LOCAL XLAST, LASTDATEX, LASTDATE, SEEKKEY, LASTONEPRNT, PARR,CHOICE +LOCAL OUTMODE := 'BROWSE', CHG_WHAT, CMD, WORKTXT, GL_INBAL +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') +LOCAL SV_SCREEN, ITEMIZE, OPT, SCRNUM, P1, P2, P3, SVSCRN +LOCAL COD_CNTR := 0, PRINT_ORDER := .T., PRTORDER := .T. +LOCAL PRTCNTR := 0 //** P3N - 01/07/02 +LOCAL PRT_COD_ONLY := .F., DEL_COD := 0, ESCKEY := .F. //** P3N - 7/20/98 +LOCAL MPORT + + +DBOPEN('ORD_SHIP') //** P3N - 5/13/98 +PRIVATE BKOSCRNS := 0 //** P3N - 8/12/98 (HAPPY B-DAY JEFF) +IF MORDER_NUM = NIL // PRINT ALL UNPRINTED ORDERS + SELECT (CUR_MAST) + DO CASE + CASE WHCHORDER = 'PROD' + SEEKKEY := MP_ALLPRNT + XLAST := 'PDATE_LAST' + CASE WHCHORDER = 'DEL' + DEL_COD := PICKLIST({'ALL Tickets', 'COD Tickets'}, 13, 55, ' Print Delivery' ) + IF DEL_COD == 1 //** P3N - 7/20/98 + PRT_COD_ONLY := .F. //** P3N - 7/20/98 + ELSEIF DEL_COD == 2 //** P3N - 7/20/98 + PRT_COD_ONLY := .T. //** P3N - 7/20/98 + ELSE + ESCKEY := .T. + ENDIF //** P3N - 7/20/98 + SEEKKEY := MD_ALLPRNT + XLAST := 'DDATE_LAST' + IF ESCKEY + ELSE + P1 := '*** Are you sure you want to Print Delivery tickets? *** ' + P2 := ' ' + P3 := ' ' + IF PROMPT_BOX(P1,P2,P3,1) //Default to YES - print + ELSE + ESCKEY := .T. + ENDIF + ENDIF + CASE WHCHORDER = 'INV' + SEEKKEY := MI_ALLPRNT + XLAST := 'IDATE_LAST' + CASE WHCHORDER = 'OD' + SEEKKEY := MO_ALLPRNT + XLAST := 'ODATE_LAST' + CASE WHCHORDER = 'PO' + SEEKKEY := MPO_ALLPRNT + XLAST := 'XDATE_LAST' + CASE WHCHORDER = 'PREBILL' + SEEKKEY := MPB_ALLPRNT + XLAST := 'BDATE_LAST' + CASE WHCHORDER = 'PRECOST' + SEEKKEY := MPC_ALLPRNT + XLAST := 'CDATE_LAST' + CASE WHCHORDER = 'GOLDEN' + SEEKKEY := MGR_ALLPRNT + XLAST := 'GDATE_LAST' + CASE WHCHORDER = 'BACKORD' //** P3N - 4/30/98 + SEEKKEY := MBO_ALLPRNT + XLAST := 'BODATE_LST' + ENDCASE + + SET SOFTSEEK ON + SEEK SEEKKEY + SET SOFTSEEK OFF + + IF (CUR_MAST)->ORDER_NUM = SEEKKEY // THE "LAST" ORDER PRINTED + SKIP 1 // SO GO TO THE NEXT ONE + ENDIF + + IF EOF() + IF ESCKEY + ELSE + ERR_BOX('** NO DOCUMENTS TO PRINT ** ') + ENDIF + ELSEIF ESCKEY //** P3N - 7/20/98 ESCAPE ON DELIVERY PRINT + + ELSE + LASTDATEX := MAKE_BLOCK( XLAST ) + PRTCNTR := 0 //** P3N - 01/07/02 + DO WHILE !EOF() + PRTORDER := .T. //** P3N - 01/07/02 + IF MPRTBYINIT == 'Y' //** P3N - 01/07/02 + IF ALLTRIM((CUR_MAST)->USER_ID) == ALLTRIM(M->USER) //** P3N - 01/07/02 + ELSE //** P3N - 01/07/02 + PRTORDER := .F. //** P3N - 01/07/02 + ENDIF //** P3N - 01/07/02 + ENDIF //** P3N - 01/07/02 + LASTDATE := EVAL(LASTDATEX) + //** IF EMPTY(LASTDATE) + IF EMPTY(LASTDATE) .AND. PRTORDER //** P3N - 01/07/02 + PRTCNTR := PRTCNTR + 1 //** P3N - 01/07/02 + MCUST_ID := CUST_ID + MUSER_ID := USER_ID + MORDER_NUM := ORDER_NUM + PRINT_ORDER := .T. //** P3N - 4/14/98 + IF (CUR_MAST)->TERMS = '98' // CREDIT MEMO //** P3N - 4/14/98 + //** P3N 4/14/98 DO NOT PRINT CREDIT MEMOS FOR PROD OR IC! + PRINT_ORDER := PRT_ORDER(WHCHORDER) //** P3N - 4/14/98 + ENDIF + IF PRINT_ORDER //** P3N - 4/14/98 + IF WHCHORDER = 'PREBILL' + CUST_MAST->(DBSEEK(MCUST_ID)) + IF CUST_MAST->PRE_BILL$'Y' + OUT_ARR := BLD_ORDER(MORDER_NUM) + MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, 1) + ENDIF + ELSEIF PRT_COD_ONLY //** P3N - 7/20/98 + IF (CUR_MAST)->TERMS = '30' // C.O.D. //** P3N - 7/20/98 + OUT_ARR := BLD_ORDER(MORDER_NUM) //** P3N - 7/20/98 + MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, 1) + COD_CNTR := COD_CNTR + 1 + ENDIF + ELSEIF WHCHORDER == 'DEL' //** P3N - 7/20/98 + IF EMPTY((CUR_MAST)->DDATE_LAST) + OUT_ARR := BLD_ORDER(MORDER_NUM) + MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, 1) + ENDIF + ELSE + OUT_ARR := BLD_ORDER(MORDER_NUM) + MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, 1) + ENDIF + ENDIF + ENDIF + SELECT (CUR_MAST) + SKIP 1 + ENDDO + GOTO BOTTOM + IF MPRTBYINIT == 'Y' //** P3N - 01/07/02 + IF EMPTY(PRTCNTR) //** P3N - 01/07/02 + ERR_BOX('** NO DOCUMENTS TO PRINT ** ') //** P3N - 01/07/02 + ENDIF //** P3N - 01/07/02 + //** DO NOT UPDATE THE LAST ORDER PRINTED WHEN PRINTING BY INITIALS + ELSE //** P3N - 01/07/02 + DBOPEN('CONTROL') + REC_LOCK(1) + DO CASE + CASE WHCHORDER = 'PROD' + REPLACE P_ALLPRNT WITH (CUR_MAST)->ORDER_NUM + MP_ALLPRNT := P_ALLPRNT + CASE WHCHORDER = 'DEL' + IF PRT_COD_ONLY //** P3N - 7/20/98 + IF EMPTY(COD_CNTR) //** P3N - 7/20/98 + ERR_BOX('** NO DOCUMENTS TO PRINT ** ') //** P3N - 7/20/98 + ENDIF //** P3N - 7/20/98 + ELSE //** P3N - 7/20/98 + REPLACE D_ALLPRNT WITH (CUR_MAST)->ORDER_NUM + MD_ALLPRNT := D_ALLPRNT + ENDIF + CASE WHCHORDER = 'INV' + REPLACE I_ALLPRNT WITH (CUR_MAST)->ORDER_NUM + MI_ALLPRNT := I_ALLPRNT + CASE WHCHORDER = 'OD' + REPLACE O_ALLPRNT WITH (CUR_MAST)->ORDER_NUM + MO_ALLPRNT := O_ALLPRNT + CASE WHCHORDER = 'PO' + REPLACE PO_ALLPRNT WITH (CUR_MAST)->ORDER_NUM + MPO_ALLPRNT := PO_ALLPRNT + CASE WHCHORDER = 'PREBILL' + REPLACE PB_ALLPRNT WITH (CUR_MAST)->ORDER_NUM + MPB_ALLPRNT := PB_ALLPRNT + CASE WHCHORDER = 'PRECOST' + REPLACE PC_ALLPRNT WITH (CUR_MAST)->ORDER_NUM + MPC_ALLPRNT := PC_ALLPRNT + CASE WHCHORDER = 'GOLDEN' + REPLACE GR_ALLPRNT WITH (CUR_MAST)->ORDER_NUM + MGR_ALLPRNT := GR_ALLPRNT + CASE WHCHORDER = 'BACKORD' //** P3N - 4/30/98 + REPLACE BO_ALLPRNT WITH (CUR_MAST)->ORDER_NUM + MBO_ALLPRNT := BO_ALLPRNT + ENDCASE + ENDIF //** P3N - 01/07/02 + ENDIF + MCUST_ID = NIL + MUSER_ID = NIL + MORDER_NUM := NIL +ELSE // PRINT SELECTED ORDERS + GLALLOC_OVR := .F. //USE THE GL ARRAY ALLOCATIONS - NOT THE OVERRIDES! + // INVOICE PRINTING???? + IF WHCHORDER == 'INV' .OR. WHCHORDER = 'PREBILL' .OR. WHCHORDER = 'PRECOST' + ITEMIZE := PICKLIST({'Itemize Amounts', 'NO Amount Itemization'}, 16, 55, '' ) + IF LASTKEY() = 27 + RETURN + ENDIF + IF EMPTY(GL_OVR) + //** NO GL OVERRIDES EXIST FOR THIS ORDER - USE GL_ARR FOR ALLOC. + ELSE + P1 := '*** GL Allocation Overrides exist for this order! *** ' + P2 := ' YES - Use GL Allocation Overrides! ' + P3 := ' NO - RE-ALLOCATE GL and DELETE GL Overrides!' + IF PROMPT_BOX(P1,P2,P3, 1) //Default to YES - Use GL OVERRIDES! + GLALLOC_OVR := .T. //USE THE GL OVERRIDES FOR THIS ORDER + ELSE + IF LASTKEY() = 27 + // ABORT THE USE OF THE EITHER ALLOCATION + RETURN + ELSE + SVSCRN := SAVESCREEN() + OUT_ARR := BLD_ORDER(MORDER_NUM) // EXEC. TO REALLOC GL ARR + RESTSCREEN(,,,,SVSCRN) + GLALLOC_OVR := .F. //USE THE GL ARRAY ALLOCATIONS + DEL_GLALLOC(MORDER_NUM) + ENDIF + ENDIF + ENDIF + ELSE + ITEMIZE := 1 + ENDIF + SV_SCREEN := SAVESCREEN() + DO WHILE .T. + // ONLY THIS GUY GETS THE PREVIEW / CHANGE OPTION + IF CUR_MAST == 'ORD_MAST' + IF _OC_CAPABLE + WORKTXT := 'CHANGE Order' + ELSE + WORKTXT := 'REVIEW Order Screens' + ENDIF + PARR = {'BROWSE Order Form', WORKTXT , 'PRINT Order'} + CHG_WHAT := 'ORDER' + SCRNUM := '2120' // ORDER PROCESSING SCREEN + ELSE + IF _OC_CAPABLE + WORKTXT := 'CHANGE Quote' + ELSE + WORKTXT := 'REVIEW Quote Screens' + ENDIF + PARR = {'BROWSE Quote Form', WORKTXT , 'PRINT Quote'} + CHG_WHAT := 'QUOTE' + SCRNUM := '2220' // QUOTE PROCESSING SCREEN + ENDIF + IF WHCHORDER == 'INV' .OR. WHCHORDER = 'PREBILL' .OR. WHCHORDER = 'PRECOST' + AADD(PARR, 'OVERRIDE GL Alloc.') + ENDIF + CHOICE := PICKLIST(PARR,18,55) //Select what ACTION to take????? + IF LASTKEY() == 27 .OR. CHOICE == 0 + EXIT + ELSEIF CHOICE == 1 //BROWSE THE ORDER + OUTMODE := 'BROWSE' + ELSEIF CHOICE == 2 //CHANGE THE ORDER + IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' +//** OPT := 2 //** P3N - 02/02/07 +//** OPT := 1 //** P3N - 02/02/07 + //** Changed back - per Darlene + OPT := 1 //** P3N - 02/20/07 + CMD := 'ADD' + ELSE + OPT := 3 + CMD := 'REV' + ENDIF + IF CUR_MAST = 'QUOTE_MAST' + ACD_ORDERS (OPT,'CHANGE Quote',{ CUR_MAST, CUR_OL, .T., 2, CMD ,,,,,, .F.,,SCRNUM,.F.,, }, '2') + ELSE + ACD_ORDERS (OPT,'CHANGE Sales Order',{ CUR_MAST, CUR_OL, .T., 2, CMD ,,,,,, .F.,,SCRNUM,.F.,, }, '2') + ENDIF + SVSCRN := SAVESCREEN() + OUT_ARR := BLD_ORDER(MORDER_NUM) // EXEC. TO REBUILD OUT_ARR + //AFTER UPDATES!! + RESTSCREEN(,,,,SVSCRN) + LOOP + ELSEIF CHOICE == 3 //PRINT THE ORDER + IF WHCHORDER = 'INV' .OR. WHCHORDER = 'PRE' + // ONLY CHECK FOR GL OVERRIDES FOR INVOICE OR PREBILL/PRECOST + IF AT('_ARCH', WHCHORDER) > 0 // ARCHIVE COPIES - DO NOT UPDATE + // BYPASS GL OVERRIDE EDIT FOR ARCHIVED INVOICE OR PREBILL/PRECOST + ELSE + IF GLALLOC_OVR //USE THE GL OVERRIDES FOR THIS ORDER + GL_INBAL := BAL_GLALLOC(MORDER_NUM, GL_OVR) + ELSE + GL_INBAL := BAL_GLALLOC(MORDER_NUM, GL_ARR) + DEL_GLALLOC(MORDER_NUM) + ENDIF + IF GL_INBAL + //THE ORDER AND GL ARE IN BALANCE ALLOW INVOICE PRINT TO OCCUR!!! + ELSE + RETURN // RETURN DO NOT ALLOW PRINT WHEN OUT OF BALANCE!!! + ENDIF + ENDIF + ENDIF + IF WHCHORDER == 'INV' //** CHECK SHIPPING AT INVOICE PRINT TIME! + //** P3N - 11/24/98 + IF CUR_MAST = 'ORD_MAST' //** ONLY CHECK SHIPPING FOR ORDERS + IF EMPTY((CUR_MAST)->SHIP_DATE) + CLEAR TYPEAHEAD //** P3N - 12/22/98 + ERR_BOX('**** This Order has NOT been Shipped! ****', ; + 'CONTACT SUPERVISOR TO PRINT THIS INVOICE!!') + IF LASTKEY() <> 126 //SHIFT + "~" //** P3N - 12/22/98 + LOOP //** P3N - 12/22/98 + ENDIF //** P3N - 12/22/98 + ENDIF + IF ORD_SHIP->(DBSEEK(MORDER_NUM)) + // ORDER ALREADY SHIPPED DO NOT SHIP @ INV TIME **P3N 5/14/98 + ELSE + SHIP_TOTQTY(,,CUR_MAST ,.F.) + SVSCRN := SAVESCREEN() + OUT_ARR := BLD_ORDER(MORDER_NUM) // EXEC. TO APPLY UPDATES FROM ORDER CONTROL + RESTSCREEN(,,,,SVSCRN) + ENDIF + ENDIF + ENDIF + OUTMODE := 'PRINT' + ELSEIF CHOICE == 4 //UPDATE \ OVERRIDE GL ALLOCATIONS + GL_OVR := UPD_GLALLOC(MORDER_NUM, GL_ARR) + IF LASTKEY() = 27 + IF EMPTY(GL_OVR) + GLALLOC_OVR := .F. //USE THE GL_ARR VALUES AT PRINT TIME!!! + ELSE + GLALLOC_OVR := .T. //USE THE OVERRIDE VALUES AT PRINT TIME!!! + ENDIF + ELSE + GLALLOC_OVR := .T. //USE THE OVERRIDE VALUES AT PRINT TIME!!! + ENDIF + LOOP + ENDIF + MPORT := PRNT_THIS_ORDER( OPTION, TITLE, WHCHORDER, ITEMIZE , OUTMODE) + +****IF WHCHORDER == 'INV' //** P3N - 6/9/98 IF BO NOT PRINTED +**** //** FORCE BACKORDER AFTER INVOICE +**** IF OUTMODE == 'PRINT' //** WHEN PRINTING +**** IF (CUR_MAST)->(FIELDPOS('BODATE_FST')) > 0 +**** IF EMPTY((CUR_MAST)->BODATE_FST) .AND. ; +**** EMPTY((CUR_MAST)->BODATE_LST) +**** //** TURNED OFF UNTIL PRINTER AVAILABLE - PER ELLEN 6/11/98 P3N +**********PRNT_THIS_ORDER( OPTION, TITLE, 'BACKORD', ITEMIZE , OUTMODE) +**** ENDIF +**** ENDIF +**** ENDIF +****ENDIF + + RESTSCREEN(,,,,SV_SCREEN) + ENDDO +ENDIF + +RETURN MPORT + +************************************************************** +* P3N - 4/14/98 +* IF THE ORDER IS A PRODUCTION OR INTERCOMPANY ORDER +* DO NOT PRINT +************************************************************** +FUNCTION PRT_ORDER(WHCHORDER) +LOCAL RETVAL := .T. +IF WHCHORDER = 'PROD' .OR. WHCHORDER = 'PO' .OR. ; + WHCHORDER = 'GOLDEN' + RETVAL := .F. +ENDIF +RETURN RETVAL +************************************************************** +************************************************************** +************************************************************** + +FUNCTION PRNT_THIS_ORDER(OPTION, TITLE, WHCHORDER, ITEMPARM, OUTMODE) + +LOCAL MPORT +LOCAL OL_ARR := {}, I, SAVESEL := SELECT() +LOCAL SS2, CORR, CUSTNAME:='', OUTFILE +LOCAL MORDER_NUM := (CUR_MAST)->ORDER_NUM +LOCAL M1, M2, M3, MSG, PARR, CHOICE, PROG, QUOTE_PROCESS := .F. +LOCAL PIM1 := 'Order '+ (CUR_MAST)->ORDER_NUM +' is NOT entirely SHIPPED! Do you want to: ' +LOCAL PIM2 := ' NO - Invoice Entire Order? - (ALL Items will be Billed.)' +LOCAL PIM3 := ' YES - PARTIAL Invoice? - (ONLY Shipped items will be Billed.)' +LOCAL MINVOICENUM, MPO_ARR := {} +LOCAL MSHIP_DATE, MIDATE_FST, PROD_CODE, ELM, PRTBOCOPY := '1' +LOCAL BKOARR, ABKOSCR //** P3N - 6/30/98 +LOCAL IPOARR //** P3N - 7/8/98 +LOCAL TOLKEY := '', SCRNINFO := {}, SVDESC //** P3N - 9/16/98 +LOCAL WKORDQTY := 0, WKSHPDQTY := 0 //** P3N -11/4/98 +LOCAL ENTIRE_ORDSHIPPED := .F. //** P3N - 11/13/98 +LOCAL PARTIAL_INVOICE := .F. //** P3N - 11/13/98 +LOCAL REPRINT_INVOICE := .F. //** P3N - 12/3/98 +LOCAL INV_ARR := {} //** P3N - 12/7/98 + +STATIC BKOASCR := {} //** P3N - 8/25/98 + +PRIVATE ITEMIZE := ITEMPARM, SAVE_DESC, SAVE_TYPE, SAVE_DESC1, SAVE_BKOPROD + + +OUTFILE := M->_THISUSER_TEMP + + +IF OUTMODE = NIL + OUTMODE = 'PRINT' // VS. 'REVU' +ENDIF +IF CUR_MAST == 'ORD_MAST' + MSG := 'Order # ' + ALLTRIM(MORDER_NUM) +ELSEIF CUR_MAST == 'QUOTE_MAST' + MSG := 'Quote # ' + ALLTRIM(MORDER_NUM) + QUOTE_PROCESS := .T. //** P3N - 4/13/98 +ENDIF +IF WHCHORDER == 'INV' // INVOICE COPIES + M1 := ' INVOICE FOR ' + MSG + ' Was Printed on ' + DTOC((CUR_MAST)->IDATE_LAST) + ' ' + (CUR_MAST)->ITIME_LAST + M2 := ' It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->IDATE_FST) + ' ' + (CUR_MAST)->ITIME_FST + M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' +ELSEIF WHCHORDER == 'PREBILL' // PRODUCTION COPIES + M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->BDATE_FST) + ' ' + (CUR_MAST)->BTIME_LAST + M2 := ' ' + M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' +ELSEIF WHCHORDER == 'PRECOST' // PRODUCTION COPIES + M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->CDATE_FST) + ' ' + (CUR_MAST)->CTIME_LAST + M2 := ' ' + M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' +ELSEIF WHCHORDER == 'GOLDEN' // PRODUCTION COPIES + M1 := 'Golden Rod for ' + MORDER_NUM + ' Was Printed on ' + DTOC((CUR_MAST)->GDATE_FST) + ' ' + (CUR_MAST)->GTIME_LAST + M2 := ' ' + M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' +ELSEIF WHCHORDER == 'PROD' // PRODUCTION COPIES + M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->PDATE_LAST) + ' ' + (CUR_MAST)->PTIME_LAST + M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->PDATE_FST) + ' ' + (CUR_MAST)->PTIME_FST + M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' +ELSEIF WHCHORDER == 'DEL' // PRODUCTION COPIES + M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->DDATE_LAST) + ' ' + (CUR_MAST)->DTIME_LAST + M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->DDATE_FST) + ' ' + (CUR_MAST)->DTIME_FST + M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' +ELSEIF WHCHORDER == 'OD' // ORDER DESK COPIES + M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->ODATE_LAST) + ' ' + (CUR_MAST)->OTIME_LAST + M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->ODATE_FST) + ' ' + (CUR_MAST)->OTIME_FST + M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' +ELSEIF WHCHORDER == 'PO' // PURCHASE ORDERS + M1 := MSG + ' Was Printed on ' + DTOC((CUR_MAST)->XDATE_LAST) + ' ' + (CUR_MAST)->XTIME_LAST + M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->XDATE_FST) + ' ' + (CUR_MAST)->XTIME_FST + M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' +ELSEIF WHCHORDER == 'BACKORD' // BACK ORDERS - **P3N - 4/30/98 + M1 := 'BACK' + MSG + ' Was Printed on ' + DTOC((CUR_MAST)->BODATE_LST) + ' ' + (CUR_MAST)->BOTIME_LST + M2 := 'It was ORIGINALLY PRINTED on ' + DTOC((CUR_MAST)->BODATE_FST) + ' ' + (CUR_MAST)->BOTIME_FST + M3 := ' CONTACT SUPERVISOR TO REPRINT THIS ITEM ' +ENDIF + +CLS +SAYTITLE(TITLE, 'PR010') +IF OUTMODE = 'PRINT' + IF WHCHORDER == 'PROD' + IF !EMPTY((CUR_MAST)->PDATE_LAST) // PRODUCTION + CLEAR TYPEAHEAD + ERR_BOX(M1,M2,M3) + IF LASTKEY() <> 126 // "~" + RETURN + ENDIF + ENDIF + ELSEIF WHCHORDER == 'INV' .OR. WHCHORDER = 'PREBILL' .OR. WHCHORDER = 'PRECOST' + IF !EMPTY((CUR_MAST)->IDATE_LAST) .AND. WHCHORDER = 'INV' // INVOICE + CLEAR TYPEAHEAD + ERR_BOX(M1,M2,M3) + IF LASTKEY() <> 126 // "~" + RETURN + ENDIF + ENDIF + IF !EMPTY((CUR_MAST)->BDATE_FST) .AND. WHCHORDER = 'PREBILL' // INVOICE + CLEAR TYPEAHEAD + ERR_BOX(M1,M2,M3) + IF LASTKEY() <> 126 // "~" + RETURN + ENDIF + ENDIF + IF !EMPTY((CUR_MAST)->CDATE_FST) .AND. WHCHORDER = 'PRECOST' + CLEAR TYPEAHEAD + ERR_BOX(M1,M2,M3) + IF LASTKEY() <> 126 // "~" + RETURN + ENDIF + ENDIF + ELSEIF WHCHORDER == 'OD' + IF !EMPTY((CUR_MAST)->ODATE_LAST) // ORDER DESK + CLEAR TYPEAHEAD + ERR_BOX(M1,M2,M3) + IF LASTKEY() <> 126 // "~" + RETURN + ENDIF + ENDIF + ELSEIF WHCHORDER == 'GOLDEN' + IF !EMPTY((CUR_MAST)->GDATE_LAST) // GOLDEN ROD + CLEAR TYPEAHEAD + ERR_BOX(M1,M2,M3) + IF LASTKEY() <> 126 // "~" + RETURN + ENDIF + ENDIF + ELSEIF WHCHORDER == 'DEL' + IF !EMPTY((CUR_MAST)->DDATE_LAST) // DELIVERY COPY + CLEAR TYPEAHEAD + M3 := 'Delivery Tickets can NOT be REPRINTED - ' + ERR_BOX(M1,M2, ' ',M3,'they MUST be TYPED to be recreated!') + IF MHOME_LOC_CODE = 'KC' //** P3N - 6/17/99 + RETURN //** P3N - 6/2/99 DO NOT ALLOW THE DELIVERY + //** TICKET TO BE RE-PRINTED - PER ARNIE + ELSE //** P3N - 6/17/99 + IF LASTKEY() <> 126 // "~" //** PER LAURA MAE @ PAWNEE + RETURN //** ALLOW DELIVERY TO BE + ENDIF //** REPRINTED + ENDIF //** P3N - 6/17/99 + ENDIF + ELSEIF WHCHORDER == 'GOLDEN' + IF !EMPTY((CUR_MAST)->GDATE_LAST) + CLEAR TYPEAHEAD + ERR_BOX(M1,M2,M3) + IF LASTKEY() <> 126 // "~" + RETURN + ENDIF + ENDIF + ELSEIF WHCHORDER == 'PO' + IF !EMPTY((CUR_MAST)->XDATE_LAST) // ORDER DESK + CLEAR TYPEAHEAD + ERR_BOX(M1,M2,M3) + IF LASTKEY() <> 126 // "~" + RETURN + ENDIF + ENDIF + ELSEIF WHCHORDER == 'BACKORD' //** P3N - 4/30/98 + IF !EMPTY((CUR_MAST)->BODATE_LST) // BACKORDER + CLEAR TYPEAHEAD + ERR_BOX(M1,M2,M3) + IF LASTKEY() <> 126 // "~" + RETURN + ENDIF + ENDIF + ENDIF +ENDIF +WAIT_BOX('*** Processing ' + MSG , ; + '*** Please Wait ****' ) + +IF PRNTSOURCE = 'OE' // END OF ORDER ENTRY ALREADY HAVE KEY +ELSE + SELECT(CUR_MAST) + MCUST_ID = CUST_ID + MUSER_ID = USER_ID +ENDIF + +//** P3N - 11/13/98 CHECK FOR A PARTIAL INVOICE HERE +IF WHCHORDER = 'INV' .AND. CUR_MAST == 'ORD_MAST' //** P3N - 11/13/98 + IF POSTED_ORDER(MORDER_NUM) + //** ORDER HAS BEEN POSTED - REPRINT INVOICE + REPRINT_INVOICE := .T. + + ELSEIF ( EMPTY( (CUR_MAST)->IDATE_FST) .AND. EMPTY( (CUR_MAST)->ITIME_FST) ) ; + .OR. (CUR_MAST)->IDATE_FST >= CURDATE + IF (CUR_MAST)->IDATE_FST == CURDATE //** P3N - 12/9/98 + REPRINT_INVOICE := .T. //** P3N - 12/9/98 + ELSEIF ORDER_SHIPPED(OUT_ARR[2,1], MORDER_NUM, WHCHORDER) //** P3N - 12/7/98 + ENTIRE_ORDSHIPPED := .T. + ELSE + PARTIAL_INVOICE := PROMPT_BOX(PIM1, PIM2, PIM3) + IF LASTKEY() == 27 + //** USER REQUESTED TO ABORT THE INVOICE PROCESS + RETURN + ENDIF + ENDIF + + ELSE + //** ORDER HAS BEEN PRINTED - REPRINT INVOICE + REPRINT_INVOICE := .T. + ENDIF +ENDIF + +//** THIS LOGIC WILL ENSURE THAT ALL INVOICES CREATED PRIOR TO +//** THE PARTIAL INVOICE INSTALL WILL BE RECALLED AS IS - WITHOUT +//** ANY PARTIAL INVOICE LOGIC. +IF EMPTY((CUR_MAST)->IDATE_FST) //** P3N - 12/10/98 +ELSEIF DTOC((CUR_MAST)->IDATE_FST) < '12/21/98' .AND. MHOME_LOC_CODE = 'KC' //** P3N - 12/10/98 + PARTIAL_INVOICE := .F. //** P3N - 12/10/98 + REPRINT_INVOICE := .F. //** P3N - 12/10/98 +ELSEIF DTOC((CUR_MAST)->IDATE_FST) < '01/20/99' .AND. MHOME_LOC_CODE = 'IOLA' //** P3N - 1/20/99 + PARTIAL_INVOICE := .F. //** P3N - 12/10/98 + REPRINT_INVOICE := .F. //** P3N - 12/10/98 +ELSEIF DTOC((CUR_MAST)->IDATE_FST) < '06/14/99' .AND. MHOME_LOC_CODE = 'LINDS' //** P3N - 1/20/99 + PARTIAL_INVOICE := .F. //** P3N - 12/10/98 + REPRINT_INVOICE := .F. //** P3N - 12/10/98 +ELSEIF DTOC((CUR_MAST)->IDATE_FST) < '02/04/99' .AND. MHOME_LOC_CODE = 'PAWNEE' //** P3N - 1/20/99 + PARTIAL_INVOICE := .F. //** P3N - 12/10/98 + REPRINT_INVOICE := .F. //** P3N - 12/10/98 +ENDIF +IF QUOTE_PROCESS //** P3N -12/7/98 +//** P3N - 11/18/02 - USE THE ACTUAL SIZE ON THE QUOTES - PER LINDA LINDS + INV_ARR := ACLONE(OUT_ARR[1,8]) //** P3N - 11/18/02 +ELSEIF WHCHORDER = 'INV' .OR. WHCHORDER = 'PREBILL' .OR. ; + WHCHORDER = 'PRECOST' .OR. DO_WE_PRT_AMT(WHCHORDER, ' ' ) + //** FOR INVOICE / PREBILL / PRECOST + //** CALC ORDER TOTALS, AND ITEM DISCOUNTS - AND REBUILD OUT_ARR / GL_ARR + MISCP_PAINT(.T., PARTIAL_INVOICE, REPRINT_INVOICE, CUR_OL) + OUT_ARR := BLD_ORDER(MORDER_NUM, ,PARTIAL_INVOICE, REPRINT_INVOICE) //** P3N -12/7/98 + INV_ARR := ACLONE(OUT_ARR[2,1]) //** P3N - 12/7/98 +ENDIF +PRTBOCOPY := '1' //** P3N - 12/21/98 +IF WHCHORDER = 'BACKORD' //** P3N - 12/21/98 + OUT_ARR := BLD_ORDER(MORDER_NUM, ,PARTIAL_INVOICE, REPRINT_INVOICE) //** P3N -12/7/98 + IF (CUR_MAST)->(FIELDPOS('BODATE_FST')) > 0 //** P3N - 12/21/98 + IF EMPTY((CUR_MAST)->BODATE_FST) //** P3N - 12/21/98 + //** FIRST TIME BO PRINTED - PRINT ALL BO COPIES + PRTBOCOPY := '1' + ELSE //** P3N - 12/21/98 + PRTBOCOPY := PICKLIST({'1. ALL Backorders ', '2. Primary','3. Screen', '4. Storm'}, 4, 30, 'Select Backorder' ) + IF LASTKEY() = 27 //** P3N - 12/21/98 + PRTBOCOPY := '0' //** P3N - 12/21/98 + ELSEIF PRTBOCOPY = 1 //** P3N - 12/21/98 + PRTBOCOPY := '1' //** P3N - 12/21/98 + ELSEIF PRTBOCOPY = 2 //** P3N - 12/21/98 + PRTBOCOPY := '2' //** P3N - 12/21/98 + ELSEIF PRTBOCOPY = 3 //** P3N - 12/21/98 + PRTBOCOPY := '3' //** P3N - 12/21/98 + ELSEIF PRTBOCOPY = 4 //** P3N - 12/21/98 + PRTBOCOPY := '4' //** P3N - 12/21/98 + ENDIF //** P3N - 12/21/98 + ENDIF //** P3N - 12/21/98 + ENDIF //** P3N - 12/21/98 +ENDIF //** P3N - 12/21/98 +//** P3N - 6/4/99 MOVED HERE FROM BELOW +IF OUTMODE == 'PRINT' //** IF PRINT TIME-CHECK FOR PARTIAL INVOICE? + IF WHCHORDER = 'INV' .AND. CUR_MAST == 'ORD_MAST' //** P3N - 6/4/99 + IF PARTIAL_INVOICE //** P3N - 6/4/99 + IF EMPTY(ORD_MAST->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! + PARTIALINVOICE() //** CREATE A NEW INVOICE ONE TIME! + SHIP_REST(ORD_MAST->ORDER_NUM, 'SCREENS' ) //** SHIP ALL REMAINING ITEMS ON ORDER + ENDIF + ENDIF + ENDIF +ENDIF + +// SETUP THE PRINTER INFO + + +SET_P_ON() +IF OUTMODE = 'PRINT' // Print the ORDER + PORTFLAG := .T. +ELSE // Browse the ORDER in a userfile + IF FILE(OUTFILE) + //PROG := 'DEL ' + OUTFILE + //CALL_OLAY(,,PROG, 0, '', '') + FERASE( OUTFILE ) + ENDIF + SET PRINTER TO (OUTFILE) + PORTFLAG := .F. +ENDIF +IF WHCHORDER = 'INV' .OR. WHCHORDER = 'PREBILL' .OR. WHCHORDER = 'PRECOST' + IF QUOTE_PROCESS //** P3N - 4/13/98 + MPORT := SET_PORT('_PORT_QUOTE', PORTFLAG, OUTFILE ) + ELSEIF WHCHORDER = 'PREBILL' //** P3N - 4/13/98 + MPORT := SET_PORT('_PORT_PREBILL', PORTFLAG, OUTFILE ) + ELSE + MPORT := SET_PORT('_PORT_INVOICE', PORTFLAG, OUTFILE ) + ENDIF + IF WHCHORDER = 'INV' .AND. CUR_MAST == 'ORD_MAST' //** P3N - 11/24/98 + IF PARTIAL_INVOICE //** P3N - 11/24/98 + PRNT_THE_ORDER('INV', INV_ARR, 'INV', 'ALL' , , .T., ; + PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) //** P3N -12/3/98 + ELSE + PRNT_THE_ORDER('INV', INV_ARR, 'INV', 'ALL' , , .T., ; + PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) //** P3N -12/3/98 + ENDIF + //** FOR LINDS PRINT THE PREBILL INVOICE WITH EXACT SIZE INFORMATION - PER LINDA - P3N 7/19/00 + ELSEIF WHCHORDER == 'PREBILL' //** P3N - 7/19/00 + IF MHOME_LOC_CODE = 'LINDS' //** P3N - 7/19/00 + PRNT_THE_ORDER('INV', OUT_ARR[1,8], 'INV', 'ALL' , WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ELSE //** P3N - 7/19/00 + PRNT_THE_ORDER('INV', OUT_ARR[2,1], 'INV', 'ALL' , WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ENDIF //** P3N - 7/19/00 + ELSEIF QUOTE_PROCESS ; //** P3N -11/18/02 + .AND. MHOME_LOC_CODE = 'LINDS' //** P3N -11/18/02 + //** P3N - 11/18/02 - USE INV_ARR FOR QUOTES - SHOULD BE SET TO PROPER VALUE + //** P3N - 11/18/02 THIS WILL PRINT THE ACTUAL SIZE ON THE QUOTES - PER LINDA @ LINDS + PRNT_THE_ORDER('INV', INV_ARR, 'INV', 'ALL' , WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ELSE + PRNT_THE_ORDER('INV', OUT_ARR[2,1], 'INV', 'ALL' , WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ENDIF +ELSEIF WHCHORDER = 'PROD' .AND. !EMPTY(OUT_ARR) + // IT IS A PRODUCTION REQUEST + MPORT := SET_PORT('_PORT_PROD', PORTFLAG, OUTFILE) + FOR I = 1 TO LEN(OUT_ARR[1]) + DO CASE + CASE I = 2 // PRODUCTION FRAME MADE AT HOME LOCATION + IF LEN(OUT_ARR[1,I]) > 0 + PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'FRAME', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) // TRUE FOR PRINT THE CUTTING SPECS + ENDIF + IF LEN(OUT_ARR[1,I]) > 0 + PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'STDFRAME', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) // TRUE FOR PRINT THE CUTTING SPECS + ENDIF + CASE I = 3 // PRODUCTION SASH MADE AT HOME LOCATION + IF LEN(OUT_ARR[1,I]) > 0 + PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'SASH', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ENDIF + CASE I = 4 // PRODUCTION GLASS MADE AT HOME LOCATION + IF LEN(OUT_ARR[1,I]) > 0 + PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'GLASS', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ENDIF + CASE I = 5 // PRODUCTION SCREEN MADE AT HOME LOCATION + IF LEN(OUT_ARR[1,I]) > 0 + PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'SCREEN', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ENDIF + CASE I = 6 // PRODUCTION STORM MADE AT HOME LOCATION + IF LEN(OUT_ARR[1,I]) > 0 + PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'STORM', MHOME_LOC_CODE, ,.T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) + ENDIF + CASE I = 7 // EXPANDERS MADE AT HOME LOCATION (SEVENTH ELEMENT IN PROD ARRARY) + IF LEN(OUT_ARR[1,I]) > 0 + PRNT_THE_ORDER('PROD', OUT_ARR[1,I], 'EXPANDER', MHOME_LOC_CODE, , .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ENDIF + ENDCASE + NEXT +ELSEIF WHCHORDER = 'OD' + // ORDER DESK CONTROL COPY + MPORT := SET_PORT('_PORT_ORDER', PORTFLAG, OUTFILE) + // USE 2,1(INVOICE) FORMAT-NO ADDL PRODUCTS ON ORDER DESK COPY + // 8-21-95 - PRINT THE CONTROL COPY AND CALL IT A SPINDLE COPY FOR ALL + PRNT_THE_ORDER('OD', OUT_ARR[2,1], 'CTRL', MHOME_LOC_CODE, 'ORDERDESK', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) +ELSEIF WHCHORDER = 'PO' + // PRINT INTERCOMPANY PO'S IF APPLICABLE + MPORT := SET_PORT('_PORT_IC', PORTFLAG, OUTFILE) + SAVESEL := SELECT() + IPOARR := {} //** P3N - 7/8/98 + FOR I := 1 TO LEN(OUT_ARR[2,1]) //** P3N - 7/8/98 + AADD(IPOARR, OUT_ARR[2,1,I]) //** P3N - 7/8/98 + NEXT //** P3N - 7/8/98 + FOR I := 1 TO LEN(OUT_ARR[1,10]) //** P3N - 7/8/98 + IPO_PROD := OUT_ARR[1,10,I,10] //** P3N - 9/14/98 + IPO_LINE := OUT_ARR[1,10,I,9] //** P3N - 9/14/98 + IF ASCAN(IPOARR, {|X| X[10] + X[9] == IPO_PROD + IPO_LINE }) > 0 + ELSE + AADD(IPOARR, OUT_ARR[1,10,I]) //** P3N - 7/8/98 + ENDIF + NEXT //** P3N - 7/8/98 + SELECT MFG_LOC + GOTO TOP + DO WHILE !EOF() + IF LOC_CODE == MHOME_LOC_CODE + SKIP 1 + LOOP + ENDIF // CONTENTS OF THE "CTRL" COPY + PRNT_THE_ORDER('OD', IPOARR, 'PO', MFG_LOC->LOC_CODE, 'PO', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + SELECT MFG_LOC + SKIP 1 + ENDDO +ELSEIF WHCHORDER = 'DEL' + SELECT(SAVESEL) + SAVE_DESC := NIL + MPORT := SET_PORT('_PORT_DELIVERY', PORTFLAG, OUTFILE) + IF MHOME_LOC_CODE = 'LINDS' + PRNT_THE_ORDER('OD', OUT_ARR[1,8], 'CTRL', MHOME_LOC_CODE, 'DELIVERY', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ELSE // INVOICE INFO + PRNT_THE_ORDER('OD', OUT_ARR[2,1], 'CTRL', MHOME_LOC_CODE, 'DELIVERY', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ENDIF +ELSEIF WHCHORDER = 'GOLDEN' + SELECT(SAVESEL) + SAVE_DESC := NIL + MPORT := SET_PORT('_PORT_GOLDEN', PORTFLAG, OUTFILE) + PRNT_THE_ORDER('PROD', OUT_ARR[1,8], 'CTRL', MHOME_LOC_CODE, WHCHORDER, .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) +ELSEIF WHCHORDER = 'BACKORD' //** P3N - 4/30/98 + SELECT(SAVESEL) + SAVE_DESC := NIL + MPORT := SET_PORT('_PORT_BO', PORTFLAG, OUTFILE) + //** PRINT PRIMARY PRODUCT BACKORDERS - (IE: C500 SINGLE HUNG...) + BKOARR := {} + IF PRTBOCOPY $ '12' //** PRINT PRIMARY BACKORDER COPY + FOR I := 1 TO LEN(OUT_ARR[2,1]) + IF GET_CATCODE(OUT_ARR[2,1,I,10]) == 'SCREENS' + //** BYPASS SCREENS ON THIS PASS OF THE BACKORDER PRINTING + ELSEIF GET_CATCODE(OUT_ARR[2,1,I,10]) == 'STORMS ' + //** BYPASS STORMS ON THIS PASS OF THE BACKORDER PRINTING + ELSE + WKORDQTY := OUT_ARR[2,1,I,7] //** P3N -11/4/98 + WKSHPDQTY := OUT_ARR[2,1,I,11] //** P3N -11/4/98 + IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 + ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! + AADD(BKOARR, OUT_ARR[2,1,I]) + ENDIF + ENDIF + NEXT + ENDIF + IF PRTBOCOPY $ '13' //** PRINT SCREEN BACKORDER COPY + //** PRINT SCREEN BACKORDERS - COMBINE SCREENS AT ALL LOC'S. + ABKOSCR := {} //* SCREENS NOT AT MFG. LOC. + FOR I := 1 TO LEN(OUT_ARR[1,9]) //* SCREENS NOT AT MFG. LOC. + WKORDQTY := OUT_ARR[1,9,I,7] //** P3N -11/4/98 + WKSHPDQTY := OUT_ARR[1,9,I,11] //** P3N -11/4/98 + IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 + ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! + AADD(ABKOSCR, OUT_ARR[1,9,I]) + ENDIF + NEXT + FOR I := 1 TO LEN(OUT_ARR[1,5]) //*SCREENS AT MFG. LOC. + WKORDQTY := OUT_ARR[1,5,I,7] //** P3N -11/4/98 + WKSHPDQTY := OUT_ARR[1,5,I,11] //** P3N -11/4/98 + IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 + ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! + AADD(ABKOSCR, OUT_ARR[1,5,I]) + ENDIF + IF OUT_ARR[1,5,I,8] == 'OL' + //** LINE_NUM PROD_CODE + TOLKEY := MORDER_NUM + OUT_ARR[1,5,I,9] + OUT_ARR[1,5,I,10] + 'SCREENS' + SCRNINFO := TOL_SCREENS(, TOLKEY) + IF EMPTY(SCRNINFO[2]) + ELSEIF EMPTY(ABKOSCR) + ELSE + ABKOSCR[LEN(ABKOSCR),2] := SCRNINFO[2] //**TOL LINE DESC FOR SCREEN + ENDIF + ENDIF + NEXT + SAVE_DESC := NIL + ENDIF + IF PRTBOCOPY $ '14' //** PRINT STORM BACKORDER COPY + //** PRINT STORM BACKORDERS - COMBINE STORMS AT ALL LOC'S. + SAVE_DESC := NIL + //**BKOARR := {} + FOR I := 1 TO LEN(OUT_ARR[1,6]) //** STORMS @ MFG. LOC. + IF OUT_ARR[1,6,I,10] = 'PWS' //** DO NOT PRINT A BACKORDER FOR + ELSE //** PWS STORMS + WKORDQTY := OUT_ARR[1,6,I,7] //** P3N -11/4/98 + WKSHPDQTY := OUT_ARR[1,6,I,11] //** P3N -11/4/98 + IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 + ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! + AADD(BKOARR, OUT_ARR[1,6,I]) + ENDIF + ENDIF + NEXT + FOR I := 1 TO LEN(OUT_ARR[1,10]) //** STORMS NOT @ MFG. LOC. + IF OUT_ARR[1,10,I,10] = 'PWS' //** DO NOT PRINT A BACKORDER FOR + ELSE //** PWS STORMS + WKORDQTY := OUT_ARR[1,10,I,7] //** P3N -11/4/98 + WKSHPDQTY := OUT_ARR[1,10,I,11] //** P3N -11/4/98 + IF WKORDQTY - WKSHPDQTY <= 0 //** P3N -11/4/98 + ELSEIF EMPTY((CUR_MAST)->ORDER_NEW) //** NO PARTIAL INVOICE EXISTS ! + AADD(BKOARR, OUT_ARR[1,10,I]) + ENDIF + ENDIF + NEXT + ENDIF + IF EMPTY(BKOARR) + //** P3N - 12/3/98 - PRINT BACKORDER IF ONLY MISC/NONTX ITEMS + SAVE_BKOPROD := ' ' //** P3N - 2/2/99 + PRNT_THE_ORDER('BACKORD', {} , 'BACKORD', 'ALL','BACKORD', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ELSE + BKOARR := ASORT(BKOARR,,, {|X,Y| X[2] + X[9] < Y[2] + Y[9] }) + SAVE_BKOPROD := ' ' //** P3N - 2/2/99 + PRNT_THE_ORDER('BACKORD', BKOARR, 'BACKORD', 'ALL','BACKORD', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + ENDIF + IF EMPTY(ABKOSCR) + BKOASCR := {} //** P3N - 5/25/99 + BKOSCRNS := 0 //** P3N - 5/25/99 + ELSEIF EMPTY(BKOSCRNS) //** ONLY SUMMARIZE SCREENS THE FIRST TIME + BKOASCR := SUM_BKO_SCREENS(ABKOSCR) + BKOASCR := ASORT(BKOASCR,,, {|X,Y| STR(X[7],5)+X[2]+X[9] < STR(Y[7],5)+Y[2]+Y[9] }) + //** //** P3N - 9/22/98 + //** SORT BACKORDER SCREENS BY THE PRODUCT & DESCR & QTY + BKOASCR := ASORT(BKOASCR,,, {|X,Y| X[10]+X[2]+STR(X[7],5) < Y[10]+Y[2]+STR(Y[7],5) }) + ENDIF + SAVE_BKOPROD := ' ' //** P3N - 2/2/99 + PRNT_THE_ORDER('BACKORD', BKOASCR, 'BACKORD', 'ALL','SCREENS', .T., PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE ) +ENDIF + +SET_P_OFF() +IF EMPTY(WIDEON) //PRINTER SELECTION INVALID - GET OUT!!! + RETURN +ENDIF + +IF OUTMODE = 'PRINT' //IF the user requests to PRINT + // .OR. OUTMODE = 'BROWSE' + + IF OUTMODE = 'PRINT' + LPREVIEW := .F. + ELSE + LPREVIEW := .T. + ENDIF + + IF QUOTE_PROCESS + CGW_PRNT_FROM_FILE( 'QUOTE', OUTFILE, LPREVIEW ) // 9-10-20 + ELSE + CGW_PRNT_FROM_FILE( WHCHORDER, OUTFILE, LPREVIEW ) + ENDIF + + + (CUR_MAST)->(DBSEEK(MORDER_NUM)) // 6/9/20 + + IF OUTMODE = 'PRINT' + //* SELECT ORD_MAST //UPDATE dates to indicate a PRINT has occured + IF AT('_ARCH', WHCHORDER) > 0 // ARCHIVE COPIES - DO NOT UPDATE + // CONTINUE FOR PRINTING ARCHIVED ORDERS + ELSE + SELECT(CUR_MAST) + REC_LOCK(1) + IF WHCHORDER == 'INV' // INVOICE COPIES + //** P3N - 11/24/98 - PARTIAL INVOICING + CUTINVOICE(MORDER_NUM, GL_ARR, PARTIAL_INVOICE) + //** P3N - 6/4/99 MOVED ABOVE - TIMING ISSUES REGARDING INVOICE PRINT + //** P3N - THE 'BACKORDER TO' WAS NOT PRINTING ON INVOICE-FIRST PRINT + ELSEIF WHCHORDER == 'PREBILL' // PREBILL + IF EMPTY(BDATE_FST) + REPLACE BDATE_FST WITH CURDATE + REPLACE BTIME_FST WITH TIME() + ENDIF + REPLACE BDATE_LAST WITH CURDATE + REPLACE BTIME_LAST WITH TIME() + ELSEIF WHCHORDER == 'PRECOST' // PRECOST + IF EMPTY(CDATE_FST) + REPLACE CDATE_FST WITH CURDATE + REPLACE CTIME_FST WITH TIME() + ENDIF + REPLACE CDATE_LAST WITH CURDATE + REPLACE CTIME_LAST WITH TIME() + ELSEIF WHCHORDER == 'GOLDEN' // GOLDEN ROD + IF EMPTY(GDATE_FST) + REPLACE GDATE_FST WITH CURDATE + REPLACE GTIME_FST WITH TIME() + ENDIF + REPLACE GDATE_LAST WITH CURDATE + REPLACE GTIME_LAST WITH TIME() + ELSEIF WHCHORDER == 'PROD' // PRODUCTION COPIES + IF EMPTY(PDATE_FST) + REPLACE PDATE_FST WITH CURDATE + REPLACE PTIME_FST WITH TIME() + ENDIF + REPLACE PDATE_LAST WITH CURDATE + REPLACE PTIME_LAST WITH TIME() + ELSEIF WHCHORDER == 'DEL' // DELIVERY COPIES + IF EMPTY(DDATE_FST) + REPLACE DDATE_FST WITH CURDATE + REPLACE DTIME_FST WITH TIME() + ENDIF + REPLACE DDATE_LAST WITH CURDATE + REPLACE DTIME_LAST WITH TIME() + ELSEIF WHCHORDER == 'OD' // ORDER DESK COPIES + IF EMPTY(ODATE_FST) + REPLACE ODATE_FST WITH CURDATE + REPLACE OTIME_FST WITH TIME() + ENDIF + REPLACE ODATE_LAST WITH CURDATE + REPLACE OTIME_LAST WITH TIME() + ELSEIF WHCHORDER == 'PO' // ORDER DESK COPIES + IF EMPTY(XDATE_FST) + REPLACE XDATE_FST WITH CURDATE + REPLACE XTIME_FST WITH TIME() + ENDIF + REPLACE XDATE_LAST WITH CURDATE + REPLACE XTIME_LAST WITH TIME() + ELSEIF WHCHORDER == 'BACKORD' //BACKORDER //** P3N - 4/30/98 + IF EMPTY(BODATE_FST) + REPLACE BODATE_FST WITH CURDATE + REPLACE BOTIME_FST WITH TIME() + ENDIF + REPLACE BODATE_LST WITH CURDATE + REPLACE BOTIME_LST WITH TIME() + ELSE + ? ABENDPRNT_THIS + ENDIF + ENDIF + ENDIF +ELSE // BROWSE ORDER and do not UPDATE dates + + SHELLEXECUTE(,'OPEN', OUTFILE,'',, SW_SHOW) + // WAITRUN( 'NOTEPAD ' + OUTFILE ) // 1/20/20 + //PROG := 'BROWSE ' + OUTFILE + //CALL_OLAY(,,PROG, 0, '', '') +ENDIF + + +UNLOCK + +RETURN MPORT + +************************************************************* +* P3N - 11/12/98 CUT AN INVOICE AND APPROPRIATE BILLING * +* TRANSACTIONS AS NECESSARY. * +************************************************************* +FUNCTION CUTINVOICE(MORDER_NUM, GL_ARR, PARTIAL_INVOICE) +DBOPEN('SALEHIST') //** P3N - 8/13/98 - ADDRESS POSTING LOCKOUT +SELECT(CUR_MAST) +REC_LOCK(3) +REPLACE IDATE_LAST WITH CURDATE //** P3N - 11/11/98 +REPLACE ITIME_LAST WITH TIME() //** P3N - 11/11/98 +IF EMPTY(IDATE_FST) + REPLACE IDATE_FST WITH CURDATE + REPLACE ITIME_FST WITH TIME() + CUT_BILLTRAN( (CUR_MAST)->ORDER_NUM , GL_ARR, PARTIAL_INVOICE ) +ELSE + IF POSTED_ORDER(MORDER_NUM) + //** ORDER HAS BEEN POSTED TO THE AS/400 - CAN NOT SEND AGAIN!!! + ERR_BOX('** Order - ' + ALLTRIM(MORDER_NUM) + ; + ' has already been POSTED to the AS/400! **', ; + ' To ENSURE both Systems are in BALANCE ALL CHANGES ' , ; + ' MUST be made to BOTH Systems!!!') + ELSE + //** P3N - 11/11/98 PER ELLEN - REPRINT ORDER WITH EARLIER DATE + //** P3N - ALLOW THE INVOICE TO SHOW ON THE SALES REPORT IN THE + //** P3N - PROPER PERIOD. + IF IDATE_FST > CURDATE //** P3N - 11/11/98 + REPLACE IDATE_FST WITH CURDATE //** P3N - 11/11/98 + REPLACE ITIME_FST WITH TIME() //** P3N - 11/11/98 + ENDIF //** P3N - 11/11/98 + CUT_BILLTRAN( (CUR_MAST)->ORDER_NUM , GL_ARR, PARTIAL_INVOICE ) + ENDIF +ENDIF +(CUR_MAST)->(DBUNLOCK()) +CLOSE SALEHIST //** P3N - 8/13/98 - ADDRESS POSTING LOCKOUT +RETURN .T. +******************************************************************** +* //** P3N - 8/5/98 +* SUMMARIZE THE BACKORDER SCREENS FOR PRINTING PURPOSES +* TO THE ( PRODUCT / ENTRY SIZE ) LEVEL +* (IE: ALL C500 / 3050'S) +******************************************************************** +FUNCTION SUM_BKO_SCREENS(PASSARR) +LOCAL RETARR := {}, I, MSIZE, MPROD, MHOWMEAS, DUPLSCRNS := {}, RARR := {} +LOCAL WKARR := {}, SUMQTY := 0, SVARR := {}, SVPRD, SVSIZ, REMOVSCRN := .F. +LOCAL BKOARR := ACLONE(PASSARR), SVLINE := '', SVQTY := 0, ELM := 0, SCRTYP := '' +FOR I := 1 TO LEN(BKOARR) //** P3N - 1/28/99 + SVLINE := BKOARR[I,9] //** P3N - 1/28/99 + SVQTY := BKOARR[I,7] //** P3N - 1/28/99 + IF AT('UNIT', BKOARR[I,10] ) > 0 .OR. ; //** P3N - 1/28/99 + AT('UNT' , BKOARR[I,10] ) > 0 //** P3N - 1/28/99 + IF BKOARR[I,8] == 'OL' //** P3N - 1/28/99 + SVLINE := BKOARR[I,9] //** P3N - 1/28/99 + SVQTY := BKOARR[I,7] //** P3N - 1/28/99 + AADD(DUPLSCRNS,{ SVLINE, SVQTY } ) //** P3N - 1/28/99 + ENDIF //** P3N - 1/28/99 + ENDIF //** P3N - 1/28/99 +NEXT //** P3N - 1/28/99 +FOR I := 1 TO LEN(BKOARR) + //** ORDER QTY SHIPPED QTY + IF EMPTY( BKOARR[I,7] - BKOARR[I,11] ) + //** NO BACKORDER STUFF TO SUMMARIZE + ELSE + //** P3N - 1/28/99 - REMOVE DUPLICATE SCREENS FROM BACKORDERS + //** P3N - FOR 'UNIT' MODELS WITH FLANKERS + REMOVSCRN := .F. //** P3N - 1/28/99 + IF BKOARR[I,8] == 'XL' //** P3N - 1/28/99 + SVLINE := BKOARR[I,9] //** P3N - 1/28/99 + SVQTY := BKOARR[I,7] //** P3N - 1/28/99 + ELM := ASCAN(DUPLSCRNS, {|X| X[1] == SVLINE .AND. ; + X[2] = SVQTY }) + IF EMPTY(ELM) //** P3N - 1/28/99 + ELSE //** P3N - 1/28/99 + REMOVSCRN := .T. //** P3N - 1/28/99 + ENDIF //** P3N - 1/28/99 + ENDIF //** P3N - 1/28/99 + IF REMOVSCRN //** P3N - 1/28/99 + ELSE //** P3N - 1/28/99 + MPROD := MPROD_SUMMARY(BKOARR[I,10]) //** PRODUCT CODE + MSIZE := BKOARR[I,5,3] //** ENTRY SIZE + MHOWMEAS := BKOARR[I,5,4] //** HOW MEASURE + IF MHOWMEAS == 'NS' //** P3N - 2/02/99 + MSIZE := SUBSTR(MSIZE, 1, 5) //** P3N - 2/02/99 + ENDIF //** P3N - 2/02/99 + AADD(WKARR, {MPROD,MHOWMEAS+MSIZE, BKOARR[I] } ) + ENDIF //** P3N - 1/28/99 + ENDIF +NEXT +IF EMPTY(WKARR) +ELSE + WKARR := ASORT(WKARR,,, {|X,Y| X[1] + X[2] < Y[1] + Y[2] }) + MPROD := WKARR[1,1] + MSIZE := WKARR[1,2] + SVPRD := MPROD + SVSIZ := MSIZE + SVARR := {MPROD+MSIZE, WKARR[1,3]} + FOR I := 1 TO LEN(WKARR) + SCRTYP := WKARR[I,3,8] //** OL/XL - TYPE OF SCREEN + MPROD := WKARR[I,1] + MSIZE := WKARR[I,2] + //**P3N - SUMMARIZE SCREENS TO MODEL LEVEL + //** (IE: 500 AND 500SCR (XL) ARE SUMMARIZED TOGETHER) +//**IF (SVPRD = MPROD) .AND. (SVSIZ = MSIZE) //** P3N - 1/28/99 + IF ((SVPRD = MPROD) .OR. (SCRTYP == 'XL' .AND. AT(SVPRD, MPROD)>0 )) ; //** P3N - 1/28/99 + .AND. (SVSIZ = MSIZE) //** P3N - 1/28/99 + SUMQTY := SUMQTY + WKARR[I,3,7] + LOOP + ELSE + BKOSCRNS := BKOSCRNS + SUMQTY //** P3N - 8/12/98 (HAPPY BDAY JEFF) + ELM := ASCAN(RETARR,{|X| X[1] = MPROD+MSIZE } ) + IF EMPTY(ELM) + SVARR[2,7] := SUMQTY + AADD( RETARR, SVARR) + ELSE + RETARR[ELM, 2,7] := RETARR[ELM, 2,7] + SUMQTY + ENDIF + SUMQTY := WKARR[I,3,7] + SVPRD := MPROD + SVSIZ := MSIZE + SVARR := {MPROD+MSIZE, WKARR[I,3]} + ENDIF + NEXT + BKOSCRNS := BKOSCRNS + SUMQTY //** P3N - 8/12/98 (HAPPY BDAY JEFF) + ELM := ASCAN(RETARR,{|X| X[1] = MPROD+MSIZE } ) + IF EMPTY(ELM) + SVARR[2,7] := SUMQTY + AADD( RETARR, SVARR) + ELSE + RETARR[ELM, 2,7] := RETARR[ELM, 2,7] + SUMQTY + ENDIF +ENDIF +FOR I := 1 TO LEN(RETARR) + AADD( RARR, RETARR[I, 2]) +NEXT +RETURN RARR +******************************************************************** +//** P3N - 1/29/99 - GET THE SUMMARY CODE FOR SCREEN BACKORDERS +//** SUMMARIZE SCREENS TO MODEL LEVEL +//** (IE: 500, 500UNIT AND 500SCR ARE ALL SUMMARIZED TOGETHER) +******************************************************************** +FUNCTION MPROD_SUMMARY(PPROD) +LOCAL MPROD := PPROD, ENDPROD, I +LOCAL SUMARR := { 'UNIT', 'UNT', 'SCR', 'SCP','SCF', 'SCA' } +FOR I := 1 TO LEN(SUMARR) + ENDPROD := AT(SUMARR[I], MPROD) + IF EMPTY(ENDPROD) + ELSE + MPROD := SUBSTR(MPROD,1, ENDPROD-1) + EXIT + ENDIF +NEXT +RETURN MPROD +******************************************************************** +* HAS THE ORDER BEEN POSTED TO THE AS/400?? +* (IE: IS ORDER HISTORY REC POST DATE EMPTY??) +******************************************************************** +FUNCTION POSTED_ORDER(MORDER_NUM) +LOCAL RETVAL, CLOSEHST := .T., SVSEL := SELECT() +IF SELECT('SALEHIST') > 0 //** P3N - 12/3/98 + CLOSEHST := .F. //** P3N - 12/3/98 +ELSE + DBOPEN('SALEHIST') //** P3N - 8/13/98 - ADDRESS POSTING LOCKOUT + CLOSEHST := .T. //** P3N - 12/3/98 +ENDIF +IF SALEHIST->(DBSEEK(MORDER_NUM)) + IF EMPTY(SALEHIST->POST_DATE) .AND. EMPTY(SALEHIST->POST_TIME) + RETVAL := .F. + ELSE + RETVAL := .T. + ENDIF +ELSE + RETVAL := .F. +ENDIF +IF CLOSEHST //** P3N - 12/3/98 + CLOSE SALEHIST //** P3N - 12/3/98 +ENDIF //** P3N - 12/3/98 +SELECT(SVSEL) //** P3N - 12/3/98 +RETURN RETVAL +******************************************************************** +* GET THE INVOICE SHIP DATE +******************************************************************** +FUNCTION GET_INV_SHPDT() +LOCAL SV_SCREEN := SAVESCREEN(), SAVESEL := SELECT() +SELECT (CUR_MAST) +IF EMPTY(INVOICENUM) + REC_LOCK(1) + REPLACE INVOICENUM WITH ORDER_NUM + UNLOCK +ENDIF +MINVOICENUM := (CUR_MAST)->INVOICENUM +MSHIP_DATE := (CUR_MAST)->SHIP_DATE +MIDATE_FST := (CUR_MAST)->IDATE_FST +IF EMPTY(MIDATE_FST) + MIDATE_FST := CURDATE +ENDIF +@ 5,01 CLEAR TO 22,80 +// print all unprinted - ignore ship date pauses +// if invoice only +DO WHILE .T. + @ 11,17 SAY ' Customer :' + SETCOLOR(HNOR) + @ 11,32 SAY (CUR_MAST)->CUST_ID ; + + '-' + (CUR_MAST)->BILL_NAME + SETCOLOR(LNOR) + @ 13,17 SAY 'Invoice Date :' + SETCOLOR(HNOR) + @ 13,32 SAY DTOC(MIDATE_FST) + SETCOLOR(LNOR) + IF MHOME_LOC_CODE = 'IOLA' + @ 15,20 SAY 'Invoice # :' + MINVOICENUM + ':' + ELSE + @ 15,20 SAY 'Invoice # :' + MINVOICENUM + ':' + ENDIF + @ 17,20 SAY 'Ship Date ' GET MSHIP_DATE + READ() + IF LASTKEY() = 27 + SELECT (SAVESEL) + RESTSCREEN(,,,,SV_SCREEN) + RETURN .F. + ENDIF + IF EMPTY(MSHIP_DATE) + ERR_BOX('You can NOT ship an Order without a Ship Date !') + LOOP + ENDIF + CORR := CORRCHEK() + IF CORR$'N' + LOOP + ENDIF + IF CORR$'X' .OR. LASTKEY() = 27 + SELECT (SAVESEL) + RESTSCREEN(,,,,SV_SCREEN) + RETURN .F. + ENDIF + SELECT (CUR_MAST) + REC_LOCK(3) + REPLACE (CUR_MAST)->SHIP_DATE WITH MSHIP_DATE + UNLOCK + EXIT +ENDDO +SELECT(SAVESEL) +RESTSCREEN(,,,,SV_SCREEN) +RETURN .T. + +******************************************************************** +* GET ALL DATA FOR THE SELECTED ORDER INTO AN ARRAY AND FORMAT THE +* ARRAY INTO A FORMAT USABLE FOR PRINTING +******************************************************************** + +FUNCTION BLD_ORDER( MORDER_NUM, POSTGL, PARTIAL_INVOICE, REPRINT_INVOICE ) +LOCAL I, II, OL_ARR := {}, XL_ARR, P1, P2, P3 +LOCAL OUT_ARR := { {}, {} }, NUM_ELEM := 8 // FOR NOW! +LOCAL M1, M2, M3, NOTAX1, NOTAX2, NOTAX3, SVSEL := SELECT() +LOCAL TAX_ARR := STAX_RATE( (CUR_MAST)->TAXSCH ) // GET THE TAX ARRAY +LOCAL TAX_DESC := TAX_ARR[3] // DESCRIPTION +LOCAL TAX_DET := TAX_ARR[4] // ALL COMPONENTS {RATE, DESC, GL_NUM} +LOCAL TOTTAX := 0, CURTAX := 0, PLUG := 0, SAVESEL := SELECT() +LOCAL GL312AMT, SHIP_STATE, BILL_STATE, WK_STATE, POST_ORDER := .F. +LOCAL SM1 := 0, SM2 := 0, SM3 := 0, IM1 := 0, IM2 := 0, IM3 := 0 +LOCAL ST1 := 0, ST2 := 0, ST3 := 0, IT1 := 0, IT2 := 0, IT3 := 0 +LOCAL MISC_ARR := {}, MSALE := 0, MISCKEY := '' //** P3N - 12/9/98 +LOCAL QTYARR := {}, SHPQTY := 0, INVQTY := 0 //** P3N - 12/9/98 + +//DEFAULT PARTIAL_INVOICE := .F. +//DEFAULT REPRINT_INVOICE := .F. + +If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) +If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) + +IF PARTIAL_INVOICE = NIL + PARTIAL_INOICE := .F. //** P3N -12/7/98 +ENDIF //** P3N -12/7/98 + +IF REPRINT_INVOICE = NIL + REPRINT_INVOICE := .F. //** P3N -12/7/98 +ENDIF //** P3N -12/7/98 + +DBOPEN('ORD_SHIP') //** P3N - 5/1/98 +IF _WHEREORD == '2' //ORDER ENTRY FROM THE HOTKEY - F7 + CLS //CLEAR THE MISC. ITEMS SCREEN BEFORE PRINT MSG'S + TITLE := 'Print Order ' + ALLTRIM( (CUR_MAST)->ORDER_NUM) + SAYTITLE(TITLE, 'PR020') +ENDIF +IF EMPTY(POSTGL) //** P3N - 6/5/98 + POST_ORDER := .F. //** P3N - 6/5/98 +ELSE //** P3N - 6/5/98 + POST_ORDER := POSTGL //** P3N - 6/5/98 +ENDIF //** P3N - 6/5/98 +WAIT_BOX( '*** Processing Order # ' + ALLTRIM(MORDER_NUM), ; + '*** Please Wait ****' ) + +// EXPECTING A 8 ELEMENT ARRAY BACK +// 1. entire set of data for a particular line +// 1. LOCATION CODE +// 2. DESCRIPTION FOR THAT LINE +// 3. 60 BYTE ITEM PRINT LINE +// 4. SALE PRICE +// 5. DISCOUNT AMOUNT +// 6. MEMO +// 7. QUANTITY +// 8. WHERE_FROM (IE: 'OL' / 'XL') +// 9. LINE_NUM +// 10. PROD_CODE +// 11. SHP_QTY //** ORDER SHIPPING TRANSACTION QTY + +//INITIALIZE THE GL ARRAY +GL_ARR := {} +//LOAD THE GL ALLOCATION OVERRIDE ARRAY FROM THE GL_ALLOC DBF +GL_OVR := GET_GLALLOC(MORDER_NUM) +SELECT (CUR_MISC) +SEEK MORDER_NUM +MTOT := 0 +// PRODUCT SALES FROM (CUR_MISC) +DO WHILE ORDER_NUM == MORDER_NUM .AND. !EOF() + IF EMPTY( (CUR_MISC)->ALT_SPRICE) //** P3N - 2/20/98 + MSALE := (CUR_MISC)->SALE_PRICE + ELSE + M1 := MSALE := (CUR_MISC)->ALT_SPRICE //** P3N-2/20/98 + ENDIF + MISCKEY := (CUR_MISC)->ORDER_NUM + MISCKEY := MISCKEY + (CUR_MISC)->LINE_NUM + MISCKEY := MISCKEY + 'MISCITM' + QTYARR := GET_OSTQTY(CUR_OL, MISCKEY, PARTIAL_INVOICE, REPRINT_INVOICE) + IF EMPTY(QTYARR) //** P3N - 12/9/98 + SHPQTY := 0 //** P3N - 12/9/98 + INVQTY := 0 //** P3N - 12/9/98 + ELSE //** P3N - 12/9/98 + SHPQTY := QTYARR[1] //** P3N - 12/9/98 + INVQTY := QTYARR[2] //** P3N - 12/9/98 + ENDIF //** P3N - 12/9/98 + IF PARTIAL_INVOICE //** P3N - 12/9/98 + M1 := SHPQTY * MSALE //** P3N - 12/9/98 + ELSEIF REPRINT_INVOICE //** P3N - 12/9/98 + M1 := INVQTY * MSALE //** P3N - 12/9/98 + ELSE //** P3N - 12/9/98 + M1 := (CUR_MISC)->QUANTITY * MSALE + ENDIF + MISC_ITEMS->(DBSEEK ( (CUR_MISC)->PARTNUM )) + ELEM := ASCAN(GL_ARR, {|X| X[1] = MISC_ITEMS->GL_NUM } ) + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( M1 ) + ELSE + AADD(GL_ARR, { MISC_ITEMS->GL_NUM , M1 } ) + ENDIF + MTOT := MTOT + M1 + SKIP 1 +ENDDO + +SELECT (CUR_MAST) + +************************************************************* +* Capture the Installation amount paid per order +************************************************************* +GL312AMT := (CUR_MAST)->INST_PAID +IF GL312AMT <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = '312 '} ) + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+ GL312AMT + ELSE // EXCLUDE FROM TAX ALLOC + AADD(GL_ARR, {'312 ', GL312AMT, ,'X' } ) + ENDIF +ENDIF +************************************************************* +* Capture the MISC ITEMS FROM SCREEN 2115 +************************************************************* +MISC_ARR := GETQTYMISC(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) +FOR I := 1 TO LEN(MISC_ARR[1]) + IF MISC_ARR[1,I,5] == 'ORDMISC1' + SM1 := MISC_ARR[1,I,3] //** SHIP QTY + IM1 := MISC_ARR[1,I,6] //** INV QTY + ELSEIF MISC_ARR[1,I,5] == 'ORDMISC2' + SM2 := MISC_ARR[1,I,3] //** SHIP QTY + IM2 := MISC_ARR[1,I,6] //** INV QTY + ELSEIF MISC_ARR[1,I,5] == 'ORDMISC3' + SM3 := MISC_ARR[1,I,3] //** SHIP QTY + IM3 := MISC_ARR[1,I,6] //** INV QTY + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX1' + ST1 := MISC_ARR[1,I,3] //** SHIP QTY + IT1 := MISC_ARR[1,I,6] //** INV QTY + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX2' + ST2 := MISC_ARR[1,I,3] //** SHIP OR INV QTY + IT2 := MISC_ARR[1,I,6] //** INV QTY + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX3' + ST3 := MISC_ARR[1,I,3] //** SHIP OR INV QTY + IT3 := MISC_ARR[1,I,6] //** INV QTY + ENDIF +NEXT + + +IF PARTIAL_INVOICE //** SHIPPED QTYS + M1 := SM1 * (CUR_MAST)->MISC_AMT1 + M2 := SM2 * (CUR_MAST)->MISC_AMT2 + M3 := SM3 * (CUR_MAST)->MISC_AMT3 +ELSEIF REPRINT_INVOICE //** INVOICED QTYS + M1 := IM1 * (CUR_MAST)->MISC_AMT1 + M2 := IM2 * (CUR_MAST)->MISC_AMT2 + M3 := IM3 * (CUR_MAST)->MISC_AMT3 +ELSE + M1 := (CUR_MAST)->MISC_QTY1 * (CUR_MAST)->MISC_AMT1 + M2 := (CUR_MAST)->MISC_QTY2 * (CUR_MAST)->MISC_AMT2 + M3 := (CUR_MAST)->MISC_QTY3 * (CUR_MAST)->MISC_AMT3 +ENDIF + +MTOT := MTOT + M1 + M2 + M3 + +IF M1 <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = MISC_GL1} ) + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( M1 ) + ELSE + AADD(GL_ARR, { MISC_GL1, M1 } ) + ENDIF +ENDIF +IF M2 <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = MISC_GL2} ) + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( M2 ) + ELSE + AADD(GL_ARR, { MISC_GL2, M2 } ) + ENDIF +ENDIF +IF M3 <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = MISC_GL3} ) + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( M3 ) + ELSE + AADD(GL_ARR, { MISC_GL3, M3 } ) + ENDIF +ENDIF +************************************************************* +* Capture the NON-TAX ITEMS FROM SCREEN 2115 +* Perry Nichols 7/31/97 +************************************************************* +IF PARTIAL_INVOICE //** SHIPPED QTYS + NOTAX1 := ST1 * (CUR_MAST)->NOTX_AMT1 + NOTAX2 := ST2 * (CUR_MAST)->NOTX_AMT2 + NOTAX3 := ST3 * (CUR_MAST)->NOTX_AMT3 +ELSEIF REPRINT_INVOICE //** INVOICED QTYS + NOTAX1 := IT1 * (CUR_MAST)->NOTX_AMT1 + NOTAX2 := IT2 * (CUR_MAST)->NOTX_AMT2 + NOTAX3 := IT3 * (CUR_MAST)->NOTX_AMT3 +ELSE + NOTAX1 := (CUR_MAST)->NOTX_QTY1 * (CUR_MAST)->NOTX_AMT1 + NOTAX2 := (CUR_MAST)->NOTX_QTY2 * (CUR_MAST)->NOTX_AMT2 + NOTAX3 := (CUR_MAST)->NOTX_QTY3 * (CUR_MAST)->NOTX_AMT3 +ENDIF + +IF NOTAX1 <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = NOTX_GL1} ) + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( NOTAX1 ) + ELSE // EXCLUDE FROM TAX ALLOC + AADD(GL_ARR, { NOTX_GL1, NOTAX1,,'X' } ) + ENDIF +ENDIF +IF NOTAX2 <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = NOTX_GL2} ) + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( NOTAX2 ) + ELSE // EXCLUDE FROM TAX ALLOC + AADD(GL_ARR, { NOTX_GL2, NOTAX2,,'X' } ) + ENDIF +ENDIF +IF NOTAX3 <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = NOTX_GL3} ) + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+( NOTAX3 ) + ELSE // EXCLUDE FROM TAX ALLOC + AADD(GL_ARR, { NOTX_GL3, NOTAX3,,'X' } ) + ENDIF +ENDIF +SELECT (SAVESEL) + +IF TAX_ARR[2] <> 0 // TOTAL RATE + FOR I := 1 TO LEN(TAX_DET) + CURTAX := VAL(STR(TAX_DET[I,1] * ; + ( (CUR_MAST)->ORD_L_TTL - ; + (CUR_MAST)->ORD_BO_TTL - ; //** P3N - 11/19/98 + (CUR_MAST)->ORD_D_TTL + MTOT), 9, 2)) + CURTAX := MIN( (CUR_MAST)->SALES_TAX - TOTTAX, CURTAX) + IF CURTAX <> 0 + // GL ACCT# TAXAMT TAX DESC EXCLUDE FROM ALLOC. + AADD(GL_ARR, { TAX_DET[I,3] + ' ', CURTAX, TAX_DET[I,2], 'X' } ) + TOTTAX := TOTTAX + CURTAX + ENDIF + NEXT + // IS THE PLUG AMOUNT BASED ON THE total or the quote? + IF TOTTAX <> (CUR_MAST)->SALES_TAX + PLUG := (CUR_MAST)->SALES_TAX - TOTTAX + IF LEN(GL_ARR) > 0 //** P3N - 01/14/09 + GL_ARR[LEN(GL_ARR),2] := GL_ARR[LEN(GL_ARR),2] + PLUG + ENDIF + ENDIF +ENDIF +IF (CUR_MAST)->( FIELDPOS('FREIGHT') ) > 0 + IF (CUR_MAST)->FREIGHT <> 0 //EXCLUDE FROM TAX - ALLOC. + AADD(GL_ARR, { 'FREIGHT', (CUR_MAST)->FREIGHT, , 'X' } ) + ENDIF +ENDIF +IF POST_ORDER + //** BUILD THE GL_ARR FOR POSTING - NO NEED TO GET_ORD_DATA()! +ELSE + OL_ARR := GET_ORD_DATA(MORDER_NUM, CUR_OL, PARTIAL_INVOICE, REPRINT_INVOICE) + SELECT (CUR_XL) + DONSETORD(3) // ORDER + LINE# + XL_ARR := GET_ORD_DATA(MORDER_NUM, CUR_XL, PARTIAL_INVOICE, REPRINT_INVOICE) + SELECT (CUR_XL) + DONSETORD(1) + * DISECT THE OL_ARR AND PUT THE CTRL, FRAME, GLASS, SASH, INV + * STUFF INTO THE OUT_ARR IN THE PROPER HIERARCHY + * NOTICE, EACH ELEMENT OF THE OL_ARR IS SIMPLY AN 80 BYTE TEXT PRINT LINE + + FOR I = 1 TO LEN(OL_ARR) + IF I = 7 // customer invoice copy + AADD(OUT_ARR[2], OL_ARR[I]) // 8 ELEMENT ARRAY WITH LOC_CODE, HEADING, ITEM, + ELSE // GROSS SALE PRICE, DISCOUNT AMT + AADD(OUT_ARR[1], OL_ARR[I]) + ENDIF + NEXT + FOR I = 1 TO LEN(XL_ARR) + IF I = 7 // customer invoice copy + // NO XL ITEMS ON CUSTOMER COPIES // 8 ELEMENT ARRAY WITH LOC_CODE, HEADING, ITEM, + ELSE // GROSS SALE PRICE, DISCOUNT AMT + FOR II := 1 TO LEN(XL_ARR[I]) + IF I < 7 + AADD(OUT_ARR[1,I], XL_ARR[I, II]) + ELSE + AADD(OUT_ARR[1,I-1], XL_ARR[I, II]) + ENDIF + NEXT + ENDIF + NEXT + //* SORT SUB ARRAY'S IN LINE_NUM + OL/XL + PROD_CODE FOR PRINTING + //* (IE: SUB ARRAY'S ARE - CTRL, FRAME, SASH, GLASS, SCREEN, STORM) + // IF A SEQUENCE NUMBER, PUT THAT ONE AT THE BOTTOM OR SOMETHING + ///***///***///***\\\***\\\***\\\ + FOR I := 1 TO LEN(OUT_ARR[1]) + * OUT_ARR[1,I] := ASORT(OUT_ARR[1,I],,, {|X,Y| X[9] + X[8] + X[10] < Y[9] + Y[8] + Y[10] }) + IF EMPTY(OUT_ARR[1,I]) //** P3N - 5/17/99 + ELSE //** P3N - 5/17/99 + OUT_ARR[1,I] := ASORT(OUT_ARR[1,I],,, {|X,Y| X[2] + X[9] < Y[2] + Y[9] }) + ENDIF //** P3N - 5/17/99 + NEXT + // INVOICE PARTS + OUT_ARR[2,1] := ASORT(OUT_ARR[2,1],,, {|X,Y| X[2] + X[9] < Y[2] + Y[9] }) +ENDIF +//**IF (CUR_MAST)->TERMS = '90' .OR. ; //** NO CHARGE //**P3N - 6/16/98 +//** (CUR_MAST)->TERMS = '96' //** CANCELLATION //**P3N - 6/16/98 +IF ZERO_ORDER() //** NO CHARGE //**P3N - 3/05/99 + GL_ARR := {} //** P3N - 6/16/98 FORCE GL ALLOC. TO ZERO + GL_OVR := {} //** P3N - 6/16/98 FORCE GL ALLOC. TO ZERO +ENDIF +IF EMPTY(OUT_ARR[1]) .AND. EMPTY(OUT_ARR[2]) + RETURN {} +ELSE + RETURN OUT_ARR +ENDIF + + +***************************************************************** +* CALC TOTAL MISC ITEMS / NOTX ITEMS +***************************************************************** +FUNCTION CALC_TOTMISC( CUR_MAST , MORDER_NUM, INCLD_NOTX) +LOCAL RETVAL := ( (CUR_MAST)->MISC_QTY1 * (CUR_MAST)->MISC_AMT1 ) ; + + ( (CUR_MAST)->MISC_QTY2 * (CUR_MAST)->MISC_AMT2 ) ; + + ( (CUR_MAST)->MISC_QTY3 * (CUR_MAST)->MISC_AMT3 ) ; + + (CUR_MAST)->ORD_M_TTL +IF EMPTY(INCLD_NOTX) //** P3N - 1/11/99 +ELSEIF INCLD_NOTX //** P3N - 1/11/99 + RETVAL := RETVAL + ( (CUR_MAST)->NOTX_QTY1 * (CUR_MAST)->NOTX_AMT1 ) ; + + ( (CUR_MAST)->NOTX_QTY2 * (CUR_MAST)->NOTX_AMT2 ) ; + + ( (CUR_MAST)->NOTX_QTY3 * (CUR_MAST)->NOTX_AMT3 ) +ENDIF //** P3N - 1/11/99 +RETURN RETVAL //** P3N - 1/11/99 +***************************************************************** +* GET THE GL ALLOCATIONS FOR A GIVEN ORDER! IF NONE EXIST RET EMPTY ARRAY +***************************************************************** +FUNCTION GET_GLALLOC(MORDER_NUM) +//** GL_ARR-1 = GL_NUM +//** GL_ARR-2 = GL_AMT +//** GL_ARR-3 = GL_TAX_DESC +//** GL_ARR-4 = GL_TAX_IND - "X" EXCLUDE FROM TAX ALLOC +//** "I" INCLUDE IN TAX ALLOC +//** "P" PRODUCT ALLOCATION +LOCAL RET_ARR := {}, GL_AMT +LOCAL SV_SEL := SELECT() +DBOPEN('GL_ALLOC') + +IF DBSEEK(MORDER_NUM) + DO WHILE .T. + IF GL_ALLOC->(EOF()) + EXIT + ENDIF + IF GL_ALLOC->ORDER_NUM == MORDER_NUM + GL_AMT := AMOUNT + ADJ_AMT + AADD(RET_ARR, {GL_NUM, GL_AMT, TAX_DESC, TAX_ALLOC}) + ELSE + EXIT + ENDIF + DBSKIP(+1) + ENDDO +ENDIF +USE +SELECT(SV_SEL) +RETURN RET_ARR + +***************************************************************** +* PRINT COMPLETE ORDER-(IE: PROD CTRL, OR PROD FRAME, OR PROD SASH...) +***************************************************************** +FUNCTION PRNT_THE_ORDER(WHCHORDER, PRN_ARR, WHICH_TYPE, WHCH_LOCATION, ; + SUBTYPE, DO_CUT_SPECS, PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + +LOCAL MORDER_NUM := (CUR_MAST)->ORDER_NUM, I, LI_TOTALS := 0, ELM +LOCAL DO_LINES := .T., PAMTS := {}, III, WORKARR := {} +LOCAL LI_AMTDON, LASTDESC, TOTPRNT := 0, SUBPRNT := 0, NUMPRNT := 0 +LOCAL NUMBRK := 0, THESE_ITEMS := 0, LAST_PAMT, THIS_NUM, DIDFST := .F. +LOCAL PHEAD_ARR := {}, PRT_AMT := .F., BKOMODEL, LASTBKOM +LOCAL PBODY_ARR := {}, LASTMODEL, DISC_ARR, PAMTS_ARR := {}, PTAIL_ARR := {} +LOCAL RETARR := {}, NUMX := 0, PRT_GL_INFO +LOCAL L1:=0, L2:=0, L3:=0, M1:=0, M2:=0, M3:=0, MTOT:=0, PRINTFRAME := .F. +LOCAL B1:=0, B2:=0, B3:=0, S1:=0, S2:=0, S3:=0, A1:=0, A2:=0, A3:=0, STOT := 0 +LOCAL I1:=0, I2:=0, I3:=0, ITOT := 0, INCL_ALL_LINES, RET_ARR, PRT_DISC_ARR +LOCAL CNT_LI_DISC := 0, LI_DISC_PRNT := .F., WORKPRICE := 0 +LOCAL MISCITM_OSTQTY := 0, MISC_ARR := {}, PRT_BO := .F., SUPPRESS_TOT := .F. +LOCAL MPORT + +PRIVATE FORMTYPE := GET_FORMTYPE(WHCHORDER, WHICH_TYPE, SUBTYPE) + +//DEFAULT PARTIAL_INVOICE := .F. +//DEFAULT REPRINT_INVOICE := .F. + +If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) +If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) + + +IF EMPTY(REPRINT_INVOICE) //** P3N - 12/3/98 + REPRINT_INVOICE := .F. //** P3N - 12/3/98 +ENDIF //** P3N - 12/3/98 +IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/13/98 + PARTIAL_INVOICE := .F. //** P3N - 11/13/98 +ENDIF //** P3N - 11/13/98 +IF DO_CUT_SPECS = NIL + DO_CUT_SPECS := .F. +ENDIF + +/* +************************************************************ + 1. WHCHORDER - TELLS WHETHER INVOICE/PRODUCTION/ORDER DESK (DEFINES WHAT COPIES TO PRINT) + 2. PRN_ARR - TELLS WHAT IS AVAIL TO PRINT IN THE LINE ITEM BODY + 3. WHICH_TYPE- TELLS WHAT HEADING TO PRINT ON THE ORDER HEADING + 4. WHCH_LOCAT- TELLS WHICH LOCATION WE ARE CONCERNED WITH + 1. "ALL" MEANS PRINT EVERYTHING IN THE PRN_ARR + THIS IS SENT FOR "ORDER CONTROL COPY" AND "CUSTOMER INVOICES" + 2. IF NOT "ALL", IT WILL REPRESENT A SPECIFIC LOCATION CODE + -IF THE CODE IS THE MHOME_LOC_CODE, THE ORDER WILL FILTER OUT + ONLY ITEMS TO BE PRODUCED ON THE FRAME, SASH, GLASS,STORMS COPY + -IF THE CODE IS !MHOME_LOC_CODE, THE ORDER WILL PRINT AS + A "INTERCOMPANY PURCHASE ORDER" CTRL DATA. DON'T WORRY ABOUT + IT, JUST FYI. WHICH_TYPE WILL BE "PO" OR "MANIFEST", ETC. + THE PRN_ARR WILL ALREADY CONTAIN THE "CTRL" INFO SINCE THAT + DATA CAN ALSO BE USED AS PURCHASE ORDER LINE DATA. + 5. SUBTYPE - TELLS IF IT IS AN ORDER DESK DELIVERY COPY + 6. DO_CUT_SPECS - TELLS IF WE SHOULD PRINT ITEMS FROM THE CUT_SPEC_ARR + ( CURRENTLY ONLY DONE ON FRAME COPY ) + ************************************************************ +*/ + + +(CUR_MAST)->(DBSEEK(MORDER_NUM)) +//**IF EMPTY(PRN_ARR) .AND. EMPTY( (CUR_MAST)->NOTES ) +IF EMPTY(PRN_ARR) + //** P3N - 12/2/98 CHECK FOR MISC ITEMS BACKORDERED + IF ( WHCHORDER == 'BACKORD' .AND. SUBTYPE == 'BACKORD' ) + IF EMPTY((CUR_MAST)->ORDER_NEW) //** P3N - 12/9/98 + ELSE + RETURN //** PARTIAL INVOICE - NO BACKORDER + ENDIF + IF EMPTY( CALC_TOTMISC( CUR_MAST, MORDER_NUM,.T.) ) //** P3N - 1/11/99 + RETURN //** P3N - 1/11/99 + ENDIF //** P3N - 1/11/99 + ELSEIF WHCHORDER == 'INV' + IF MISCSHIPPED(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) + RETURN + ENDIF + ELSEIF EMPTY( (CUR_MAST)->NOTES ) + RETURN + ENDIF +ENDIF +IF EMPTY(WIDEON) + SET_P_OFF() + ERR_BOX('Printer is NOT properly set!',' ', ; + 'Please SETUP Printer through Utility MENU - PRINTER Selection!' ) + RETURN +ENDIF +IF WHCH_LOCATION = NIL + ? ABEND +ENDIF +// SCAN THE BODY OF THE ORDER TO ENSURE THAT A LOCATION ITEM EXISTS HERE +// IF NOT 'ALL' ITEMS +IF WHCHORDER = 'PROD' .OR. WHCHORDER = 'OD' + DO CASE + CASE WHICH_TYPE = 'CTRL' + DO_LINES := .T. + OTHERWISE + DO_LINES := SCAN_PRNARR(PRN_ARR, WHCH_LOCATION) + ENDCASE + IF WHICH_TYPE == 'SCREEN' + DO_LINES := .T. // DO SCREEN regardless of the MFG. location. + ENDIF +ELSE + DO_LINES := .T. +ENDIF +// SO FAR, HAVE DATA FOR THIS LOCATION +// SCAN THE BODY OF THE ORDER TO ENSURE THAT QTY > 0 (NOT CREDIT MEMO) +// IF NOT 'ALL' ITEMS +//**TOTMISC := CALC_TOTMISC( CUR_MAST, MORDER_NUM ) +TOTMISC := CALC_TOTMISC( CUR_MAST, MORDER_NUM , .T.) //** P3N - 1/11/99 +IF !EMPTY( (CUR_MAST)->NOTES ) + DO_LINES := .T. +ENDIF +IF WHCHORDER <> 'INV' .AND. DO_LINES + IF TOTMISC <> 0 .AND. ; + (SUBTYPE = 'DELIVERY' .OR. SUBTYPE = 'ORDERDESK' ) //** P3N - 1/15/99 +//** (SUBTYPE = 'DELIVERY' .OR. SUBTYPE = 'ORDERDESK' .OR. SUBTYPE = 'BACKORD') + ELSEIF !EMPTY(TOTMISC) .AND. SUBTYPE = 'BACKORD' //** P3N - 1/15/99 + IF MISCSHIPPED(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) + //** P3N - 1/15/99 CHECK FOR MISC ORDER LINES ITEMS ON BACKORDER + MISC_ARR := BLD_MISCORD('TORD_LINES', {}, {}, 0, ; + .F., .F., .F., WHCHORDER, , , .T., SUBTYPE ) + IF EMPTY(MISC_ARR[4]) //** P3N - 1/15/99 + DO_LINES := .F. //** P3N - 12/04/01 + FOR I := 1 TO LEN(PRN_ARR) //** P3N - 12/04/01 + // DO BKO COPY IF NO MISC BUT BKO QTY > 0 + IF PRN_ARR[I,7] > 0 .OR. !EMPTY(PRN_ARR[I,13]) //** ONLY PRINT BKO IF QTY > 0 + DO_LINES := .T. //** OR CUT SPECS + EXIT //** P3N - 12/04/01 + ENDIF //** P3N - 12/04/01 + NEXT //** P3N - 12/04/01 + IF DO_LINES //** P3N - 12/04/01 + //** NO MISC BKO ITMS BUT WE HAVE OTHER BKO ITEMS TO PROCESS + ELSE //** P3N - 12/04/01 + RETURN //** P3N - 12/04/01 + ENDIF //** P3N - 12/04/01 + ENDIF //** P3N - 1/15/99 + ENDIF //** P3N - 1/15/99 + ELSE //** P3N - 1/15/99 + DO_LINES := .F. + FOR I := 1 TO LEN(PRN_ARR) + // ONLY PRINT PRODUCTION,ETC IF QTY > 0 + IF PRN_ARR[I,7] > 0 .OR. !EMPTY(PRN_ARR[I,13]) // ONLY PRINT PRODUCTION,ETC IF QTY > 0 + DO_LINES := .T. // NOT A CREDIT MEMO OR CUT SPECS + EXIT + ENDIF + NEXT + ENDIF +ENDIF +IF !DO_LINES + RETURN +ENDIF +// INVOICE SHOULD NOT PRINT ANY ITEMS +// WHICH CAME FROM THE 'ADDL_LINES' FILE. + // ARE THERE ANY PRODUCTION ITEMS TO PRINT AT THIS LOCATION ??? +IF WHCHORDER == 'PROD' .AND. WHICH_TYPE <> 'CTRL' + IF EMPTY(ASCAN(PRN_ARR,{|X| X[1] == WHCH_LOCATION })) + RETURN + ENDIF +ENDIF + // ARE THERE ANY IC ORDER ITEMS TO PRINT AT THIS LOCATION ??? +IF WHCHORDER == 'OD' .AND. WHICH_TYPE == 'PO' + IF EMPTY(ASCAN(PRN_ARR,{|X| X[1] == WHCH_LOCATION })) + RETURN + ENDIF +ENDIF +// ARE THERE ANY PRODUCTION FRAME ITEMS TO PRINT ??? +IF AT('FRAME', WHICH_TYPE) > 0 + FOR I := 1 TO LEN(PRN_ARR) + IF PRT_FRAME(WHICH_TYPE, PRN_ARR[I,10]) + PRINTFRAME := .T. + ENDIF + NEXT + IF PRINTFRAME + // FRAME COPY FOUND TO PRINT - CONTINUE PROCESSING! + ELSE + RETURN + ENDIF +ENDIF +PHEAD_ARR := BLD_HEAD(MORDER_NUM, WHICH_TYPE, WHCH_LOCATION, ; + WHCHORDER, SUBTYPE ) +IF (WHICH_TYPE == 'INV' .AND. CUR_MAST == 'ORD_MAST') .OR. ; //**P3N - 11/24/98 + WHICH_TYPE == 'BACKORD' //**P3N - 2/23/99 + //** P3N -11/19/98 - INVOICE PROCESSING? + IF EMPTY((CUR_MAST)->ORDER_ORG) + //** P3N -11/19/98 THIS ORDER WAS NOT CREATED FROM A PARTIAL INVOICE? + ELSE + DIDFST := .T. + //** THIS ORDER WAS CREATED FROM A PARTIAL INVOICE? + AADD(PBODY_ARR, '^' + SPACE(14) + 'BACKORDER FROM ORDER# ' + (CUR_MAST)->ORDER_ORG ) + AADD(PAMTS_ARR, NIL) + ENDIF + IF EMPTY((CUR_MAST)->ORDER_NEW) + //** P3N -11/19/98 THIS ORDER IS NOT A PARTIAL INVOICE? + ELSE + DIDFST := .T. + //** THIS ORDER IS A PARTIAL INVOICE? + AADD(PBODY_ARR, '^' + SPACE(14) + 'BACKORDERED ITEMS ON ORDER# ' + (CUR_MAST)->ORDER_NEW ) + AADD(PAMTS_ARR, NIL) + ENDIF +ENDIF +// ONCE FOR EACH LINE ITEM RECORD +LAST_PAMT := 0 +FOR I := 1 TO LEN(PRN_ARR) + IF EMPTY(PRN_ARR[I,2]) + LOOP + ENDIF +//** IF THIS IS A FRAME COPY ARE THERE ANY STORM DOORS(STD) OR PIN-ONS(PWS)? + IF AT('FRAME', WHICH_TYPE) > 0 + IF PRT_FRAME(WHICH_TYPE, PRN_ARR[I,10]) + ELSE + LOOP + ENDIF + ENDIF + INCL_ALL_LINES := .T. + IF (WHICH_TYPE == 'INV' .OR. WHICH_TYPE == 'CTRL') .AND. WHCHORDER <> 'PROD' + //** LET INVOICE AND CTRL COPIES PRINT REGARDLESS OF MFG. LOC + ELSEIF WHCHORDER == 'BACKORD' + //** P3N - 5/1/98 - LET BACKORDERS PRINT REGARDLESS OF MFG. LOC + ELSEIF PRN_ARR[I,1] == WHCH_LOCATION + // FOR ALL COPIES EXCEPT "INV" & "CTRL" + // ONLY PRINT ITEMS FOR GIVEN LOCATION + ELSEIF PRN_ARR[I,15] //DO_SCRNS_ONLY regardless of the MFG location + IF MHOME_LOC_CODE = 'KC' //FOR KANSAS CITY(KC) ONLY !!!!!!! 6-18-97 + LOOP + ENDIF + ELSEIF WHICH_TYPE == 'CTRL' .AND. WHCHORDER == 'PROD' + INCL_ALL_LINES := .T. + ELSE + LOOP + ENDIF + IF LASTDESC = NIL + LASTDESC := PRN_ARR[I,2] + ENDIF + IF EMPTY(LASTMODEL) + LASTMODEL := PRN_ARR[I,10] //SAVE THE PRODUCT MODEL + LASTBKOM := MPROD_SUMMARY(LASTMODEL) //** P3N - 2/02/99 + ENDIF + BKOMODEL := MPROD_SUMMARY(PRN_ARR[I,10]) //** P3N - 2/02/99 +//** DISCOUNT MODIFICATIONS - 10-7-97 + IF (WHICH_TYPE == 'INV' .OR. WHICH_TYPE == 'CTRL') + IF LASTMODEL == PRN_ARR[I,10] + ELSEIF PRINT_DISC(PRN_ARR, LASTMODEL) //PRINT A DISCOUNT% + DISC_ARR := GETDISCTOT(PRN_ARR, I-1) + PRT_DISC_ARR := PRNT_DISCOUNTS( DISC_ARR, WHCHORDER, SUBTYPE) + FOR ELM := 1 TO LEN(PRT_DISC_ARR) + AADD(PBODY_ARR, PRT_DISC_ARR[ELM] ) + AADD(PAMTS_ARR, {}) + CNT_LI_DISC := CNT_LI_DISC + 1 + NEXT + ENDIF + ENDIF + //** P3N - 2/02/99 + IF ( INCL_ALL_LINES .AND. !(LASTBKOM == BKOMODEL) .AND. ; //** P3N - 2/02/99 + WHCHORDER == 'BACKORD' .AND. SUBTYPE == 'SCREENS' ) //** P3N - 2/02/99 + NUMBRK ++ + IF NUMPRNT > 1 .AND. MHOME_LOC_CODE <> 'IOLA' ; // DARLENE 8-21-96 + .AND. MHOME_LOC_CODE <> 'LINDS' // LINDA 8-23-96 + IF WHCHORDER == 'BACKORD' //** P3N - 9/22/98 HAPPY BDAY CINDY + IF MHOME_LOC_CODE = 'PAWNEE' //** P3N 2-23-99 + AADD(PBODY_ARR,SPACE(5)+'-----') //** P3N - 2/23/99 + AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 + AADD(PBODY_ARR,SPACE(5)+STR(SUBPRNT,4)) + AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 + ELSE //** P3N - 2/23/99 + AADD(PBODY_ARR,SPACE(9)+'-----') //** P3N - 9/22/98 HAPPY BDAY CINDY + AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY + AADD(PBODY_ARR,SPACE(9)+STR(SUBPRNT,4)) + AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY + ENDIF //** P3N - 2/23/99 + ELSE //** P3N - 9/22/98 HAPPY BDAY CINDY + AADD(PBODY_ARR, '-----' ) + AADD(PAMTS_ARR, {}) + AADD(PBODY_ARR, STR(SUBPRNT,4) ) + AADD(PAMTS_ARR, {}) + AADD(PBODY_ARR, '-----' ) + AADD(PAMTS_ARR, {}) + ENDIF //** P3N - 9/22/98 HAPPY BDAY CINDY + ENDIF + SUBPRNT := 0 + NUMPRNT := 0 +//**IF !(LASTDESC == PRN_ARR[I,2]) .AND. INCL_ALL_LINES + ELSEIF ( INCL_ALL_LINES .AND. !(LASTDESC == PRN_ARR[I,2]) .AND. ; + (WHCHORDER == 'BACKORD' .AND. SUBTYPE <> 'SCREENS' .OR. ; //** P3N - 2/02/99 + WHCHORDER <> 'BACKORD' ) ) //** P3N - 2/02/99 + NUMBRK ++ + IF NUMPRNT > 1 .AND. MHOME_LOC_CODE <> 'IOLA' ; // DARLENE 8-21-96 + .AND. MHOME_LOC_CODE <> 'LINDS' // LINDA 8-23-96 + IF WHCHORDER == 'BACKORD' //** P3N - 9/22/98 HAPPY BDAY CINDY + IF MHOME_LOC_CODE = 'PAWNEE' //** P3N 2-23-99 + AADD(PBODY_ARR,SPACE(5)+'-----') //** P3N - 2/23/99 + AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 + AADD(PBODY_ARR,SPACE(5)+STR(SUBPRNT,4)) + AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 + ELSE //** P3N - 2/23/99 + AADD(PBODY_ARR,SPACE(9)+'-----') //** P3N - 9/22/98 HAPPY BDAY CINDY + AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY + AADD(PBODY_ARR,SPACE(9)+STR(SUBPRNT,4)) + AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY + ENDIF //** P3N - 2/23/99 + ELSE //** P3N - 9/22/98 HAPPY BDAY CINDY + AADD(PBODY_ARR, '-----' ) + AADD(PAMTS_ARR, {}) + AADD(PBODY_ARR, STR(SUBPRNT,4) ) + AADD(PAMTS_ARR, {}) + AADD(PBODY_ARR, '-----' ) + AADD(PAMTS_ARR, {}) + ENDIF //** P3N - 9/22/98 HAPPY BDAY CINDY + ENDIF + SUBPRNT := 0 + NUMPRNT := 0 + ENDIF + RETARR := BLD_BODY(PRN_ARR[I], WHICH_TYPE, WHCH_LOCATION, ; + PBODY_ARR, PAMTS_ARR, WHCHORDER, SUBTYPE, ; + INCL_ALL_LINES, DO_CUT_SPECS, PARTIAL_INVOICE, REPRINT_INVOICE ) + LI_AMTDON := RETARR[1] + PBODY_ARR := RETARR[2] + PAMTS_ARR := RETARR[3] + IF INCL_ALL_LINES + LI_TOTALS := LI_TOTALS + LI_AMTDON + NUMX := PRN_ARR[I,12] + 1 // TOTAL WINDOWS PER UNIT (XTRA WIND + 1) + // LINE ITEM QUANTITY + LAST_PAMT ++ + THIS_NUM := 0 + FOR III := LAST_PAMT TO LEN(PAMTS_ARR) + IF WHCHORDER == 'BACKORD' //** P3N - 9/22/98 HAPPY BDAY CINDY + IF EMPTY(PAMTS_ARR[III]) //** P3N - 9/22/98 HAPPY BDAY CINDY + ELSEIF EMPTY(PAMTS_ARR[III,3]) + ELSE + THIS_NUM := THIS_NUM + (PAMTS_ARR[III,3]) + ENDIF + ELSE + IF EMPTY(PAMTS_ARR[III]) + ELSEIF EMPTY(PAMTS_ARR[III,1]) + ELSE + THIS_NUM := THIS_NUM + (PAMTS_ARR[III,1]) + ENDIF + ENDIF + NEXT + LAST_PAMT := LEN(PAMTS_ARR) + NUMPRNT := NUMPRNT + THIS_NUM + // ACTUAL WINDOWS QUANTITY ( 1 TWIN = 2 WINDOWS TOTAL ) + SUBPRNT := SUBPRNT + (THIS_NUM * NUMX) + TOTPRNT := TOTPRNT + (THIS_NUM * NUMX) + ENDIF + LASTDESC := PRN_ARR[I,2] + LASTMODEL := PRN_ARR[I,10] //SAVE THE PRODUCT MODEL - 10-7-97 + LASTBKOM := BKOMODEL //** P3N - 2/02/99 +NEXT +//** DISCOUNT MODIFICATIONS - 10-7-97 +IF (WHICH_TYPE == 'INV' .OR. WHICH_TYPE == 'CTRL') + IF PRINT_DISC(PRN_ARR, LASTMODEL) //PRINT A DISCOUNT% + DISC_ARR := GETDISCTOT(PRN_ARR, I-1) + PRT_DISC_ARR := PRNT_DISCOUNTS( DISC_ARR, WHCHORDER, SUBTYPE) + FOR ELM := 1 TO LEN(PRT_DISC_ARR) + AADD(PBODY_ARR, PRT_DISC_ARR[ELM] ) + AADD(PAMTS_ARR, {}) + CNT_LI_DISC := CNT_LI_DISC + 1 + NEXT + ENDIF +ENDIF +IF NUMPRNT > 1 .AND. SUBPRNT <> 0 .AND. MHOME_LOC_CODE <> 'IOLA' ; // DARLENE 8-21-96 + .AND. MHOME_LOC_CODE <> 'LINDS' // LINDA 8-23-96 + IF WHCHORDER == 'BACKORD' //** P3N - 9/22/98 HAPPY BDAY CINDY + IF MHOME_LOC_CODE = 'PAWNEE' //** P3N 2-23-99 + AADD(PBODY_ARR,SPACE(5)+'-----') //** P3N - 2/23/99 + AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 + AADD(PBODY_ARR,SPACE(5)+STR(SUBPRNT,4)) + AADD(PAMTS_ARR, {}) //** P3N - 2/23/99 + ELSE //** P3N - 2/23/99 + AADD(PBODY_ARR,SPACE(9)+'-----') //** P3N - 9/22/98 HAPPY BDAY CINDY + AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY + AADD(PBODY_ARR,SPACE(9)+STR(SUBPRNT,4)) + AADD(PAMTS_ARR, {}) //** P3N - 9/22/98 HAPPY BDAY CINDY + ENDIF //** P3N - 2/23/99 + ELSE //** P3N - 9/22/98 HAPPY BDAY CINDY + AADD(PBODY_ARR, '-----' ) + AADD(PAMTS_ARR, {}) + AADD(PBODY_ARR, STR(SUBPRNT,4) ) + AADD(PAMTS_ARR, {}) + ENDIF //** P3N - 9/22/98 HAPPY BDAY CINDY + NUMBRK ++ +ENDIF +// MISC PRINTING +IF WHCHORDER = 'BACKORD' .AND. SUBTYPE == 'BACKORD' //** P3N - 7/7/98 + PRT_BO := .T. //** P3N - 9/24/98 + //** ORDER MISC(CGW0OMI) MISC ORDER LINE ITEMS BO PRINT + MISC_ARR := BLD_MISCORD('TORD_LINES', PBODY_ARR, PAMTS_ARR, LI_TOTALS, ; + PRT_AMT, DIDFST, PRT_BO, WHCHORDER, ; + PARTIAL_INVOICE, REPRINT_INVOICE, ,SUBTYPE ) + PBODY_ARR := MISC_ARR[1] + PAMTS_ARR := MISC_ARR[2] + LI_TOTALS := MISC_ARR[3] + //** ORDER MASTER(CGW0OM) MISC ITEMS (SCREEN 2115) BO PRINT + MISC_ARR := BLD_ORDMISC( PBODY_ARR, PAMTS_ARR, LI_TOTALS, PRT_AMT, PRT_BO, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE ) + PBODY_ARR := MISC_ARR[1] + PAMTS_ARR := MISC_ARR[2] + LI_TOTALS := MISC_ARR[3] + MISC_ARR := {{}} //** P3N - 12/2/98 +ELSEIF WHCHORDER = 'INV' ; //INVOICE + .OR. (WHCHORDER = 'OD' .AND. WHICH_TYPE = 'CTRL'); //OD CTRL & DELIVERY + .OR. (WHCHORDER = 'PROD' .AND. WHICH_TYPE = 'CTRL') //GOLDEN ROD + PRT_BO := .F. //** P3N - 9/24/98 + IF WHCHORDER = 'INV' .AND. CUR_MAST = 'ORD_MAST' //** P3N - 9/24/98 + PRT_BO := .T. //** P3N - 9/24/98 + ENDIF //** P3N - 9/24/98 + PRT_AMT := DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) + MISC_ARR := BLD_MISCORD(CUR_MISC, PBODY_ARR, PAMTS_ARR, LI_TOTALS, ; + PRT_AMT, DIDFST, PRT_BO, WHCHORDER, ; + PARTIAL_INVOICE, REPRINT_INVOICE, ,SUBTYPE ) + PBODY_ARR := MISC_ARR[1] + PAMTS_ARR := MISC_ARR[2] + LI_TOTALS := MISC_ARR[3] + //** P3N -11/25/98 - INVOICE PROCESSING + M1 := (CUR_MAST)->MISC_QTY1 + M2 := (CUR_MAST)->MISC_QTY2 + M3 := (CUR_MAST)->MISC_QTY3 + L1 := (CUR_MAST)->MISC_AMT1 + L2 := (CUR_MAST)->MISC_AMT2 + L3 := (CUR_MAST)->MISC_AMT3 + MTOT := (M1*L1) + (M2*L2) + (M3*L3) +//** PARTIAL / REPRINT INVOICE +//** IF PARTIAL INVOICE S1, S2, S3 ARE SHIP QTYS +//** IF REPRINT INVOICE I1, I2, I3 ARE INV QTYS + MISC_ARR := GETQTYMISC(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) + FOR I := 1 TO LEN(MISC_ARR[1]) + IF MISC_ARR[1,I,5] == 'ORDMISC1' + S1 := MISC_ARR[1,I,3] //** SHIP QTY + I1 := MISC_ARR[1,I,6] //** INV QTY + A1 := MISC_ARR[1,I,4] //** ITEM PRICE + ELSEIF MISC_ARR[1,I,5] == 'ORDMISC2' + S2 := MISC_ARR[1,I,3] //** SHIP QTY + I2 := MISC_ARR[1,I,6] //** INV QTY + A2 := MISC_ARR[1,I,4] //** ITEM PRICE + ELSEIF MISC_ARR[1,I,5] == 'ORDMISC3' + S3 := MISC_ARR[1,I,3] //** SHIP QTY + I3 := MISC_ARR[1,I,6] //** INV QTY + A3 := MISC_ARR[1,I,4] //** ITEM PRICE + ENDIF + NEXT +//** STOT CONTAINS THE TOTAL AMOUNT OF SHIPPED ITEMS + STOT := (S1*A1) + (S2*A2) + (S3*A3) +//** ITOT CONTAINS THE TOTAL AMOUNT OF INVOICED ITEMS + ITOT := (I1*A1) + (I2*A2) + (I3*A3) + //** CALC BO AMTS + B1 := M1 - S1 //** P3N - 11/25/98 + B2 := M2 - S2 //** P3N - 11/25/98 + B3 := M3 - S3 //** P3N - 11/25/98 + IF (CUR_MAST)->MISC_QTY1 <> 0 .OR. ; + (CUR_MAST)->MISC_QTY2 <> 0 .OR. ; + (CUR_MAST)->MISC_QTY3 <> 0 + IF PARTIAL_INVOICE + LI_TOTALS := LI_TOTALS + STOT + ELSEIF REPRINT_INVOICE + LI_TOTALS := LI_TOTALS + ITOT + ELSE + LI_TOTALS := LI_TOTALS + MTOT + ENDIF + IF NUMPRNT > 1 .AND. SUBPRNT <> 0 .AND. MHOME_LOC_CODE <> 'IOLA' ; // PER DARLENE 8-22-96 + .AND. MHOME_LOC_CODE <> 'LINDS' // PER LINDA 8-23-96 + AADD(PBODY_ARR, '-----' ) + AADD(PAMTS_ARR, {}) + ENDIF +//**P3N - 11/24/98 ALREADY EXECUTED ABOVE - 40 or 45 LINES +//**PRT_AMT := DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) +//** P3N - 11/25/98 + IF (CUR_MAST)->MISC_QTY1 <> 0 + PAMTS := { M1,B1,S1, L1, PRT_AMT, PRT_BO, 0, , I1 } + AADD(PBODY_ARR, '^' + (CUR_MAST)->MISC_ITEM1) + AADD(PAMTS_ARR, PAMTS ) + ENDIF + IF (CUR_MAST)->MISC_QTY2 <> 0 + AADD(PBODY_ARR, ' ' ) //*DBL SPACE MISC ITEMS ON ORDER - PER ELLEN 7-31-97 + AADD(PAMTS_ARR, {}) + PAMTS := { M2,B2,S2, L2, PRT_AMT, PRT_BO, 0, , I2 } + AADD(PBODY_ARR, '^' + (CUR_MAST)->MISC_ITEM2 ) + AADD(PAMTS_ARR, PAMTS ) + ENDIF + IF (CUR_MAST)->MISC_QTY3 <> 0 + AADD(PBODY_ARR, ' ' ) //*DBL SPACE MISC ITEMS ON ORDER - PER ELLEN 7-31-97 + AADD(PAMTS_ARR, {}) + PAMTS := { M3,B3,S3, L3, PRT_AMT, PRT_BO, 0, , I3 } + AADD(PBODY_ARR, '^' + (CUR_MAST)->MISC_ITEM3 ) + AADD(PAMTS_ARR, PAMTS ) + ENDIF + ENDIF +ENDIF +IF TOTPRNT <> 0 .AND. MHOME_LOC_CODE <> 'XXXX' ; // darlene 8-22-96 + .AND. MHOME_LOC_CODE <> 'KC' // EDNA on 3-28-96 + IF PRODUCT->(FIELDPOS('ORD_TOTALS')) > 0 //** P3N - 4/7/99 + IF AT('S', PRODUCT->ORD_TOTALS) > 0 .AND. ; //** P3N - 4/7/99 + WHICH_TYPE == 'STORM' //** P3N - 4/7/99 + SUPPRESS_TOT := .T. //** P3N - 4/7/99 + ENDIF //** P3N - 4/7/99 + ENDIF //** P3N - 4/7/99 + IF SUPPRESS_TOT //** P3N - 4/7/99 + ELSEIF INT(TOTPRNT) = TOTPRNT + AADD(PBODY_ARR, '=====' ) + AADD(PAMTS_ARR, {}) + AADD(PBODY_ARR, STR(TOTPRNT,4) + ' Total' ) + AADD(PAMTS_ARR, {}) + AADD(PBODY_ARR, '=====' ) + ELSE + AADD(PBODY_ARR, '========' ) + AADD(PAMTS_ARR, {}) + AADD(PBODY_ARR, STR(TOTPRNT,7,2) + ' Total' ) + AADD(PAMTS_ARR, {}) + AADD(PBODY_ARR, '========' ) + ENDIF + AADD(PAMTS_ARR, {}) +ENDIF +IF EMPTY(CNT_LI_DISC) + LI_DISC_PRNT := .F. +ELSE + LI_DISC_PRNT := .T. +ENDIF +PTAIL_ARR := BLD_TAIL(MORDER_NUM, WHCHORDER, LI_TOTALS, WHICH_TYPE, ; + SUBTYPE, LI_DISC_PRNT, PARTIAL_INVOICE, MISC_ARR, ; + PRT_BO, REPRINT_INVOICE ) +//** PAMTS_ARR := RETVARARR[2] +IF WHCHORDER = 'BACKORD' //** P3N - 9/2/98 +//** PRINT THE TAIL(ORD_MAST->BO_NOTES) INFO FOR BACKORDERS +ELSEIF PRT_AMT +ELSE //DO NOT PRINT AMOUNTS NO PTAIL_ARR - EXEC BLD_TAIL TO UPD GL_ARR + IF (CUR_MAST)->QUOTE_PRIC = 0 //NOT A QUOTED ORDER!! + IF WHCHORDER = 'INV' .OR. WHCHORDER = 'OD' .OR. ; + (WHCHORDER = 'PROD' .AND. WHICH_TYPE = 'CTRL') //** P3N - 12/3/98 + **//** ADDED THE "OD" CHECK 9-30-97 + // ON AN INVOICE / OD / DEL / GOLDEN ROD PRINT + // TOTALS OR NONTX ITEMS - IF PRESENT. + ELSE + PTAIL_ARR := {} + ENDIF + ENDIF +ENDIF +IF EMPTY(PBODY_ARR) + AADD(PBODY_ARR, '^' ) + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL) + AADD(PAMTS_ARR, NIL) +ENDIF +PRT_GL_INFO := PRNT_ACCT_INFO( WHCHORDER, WHICH_TYPE, SUBTYPE ) +PROCESS_OO(PHEAD_ARR, PBODY_ARR, PTAIL_ARR, PAMTS_ARR, SUBTYPE, ; + PRT_GL_INFO, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) + + +RETURN + + + + +**************************************************************** +* Format the line item discount pct and amount +**************************************************************** +//** DISCOUNT MODIFICATIONS - 10-7-97 +FUNCTION PRNT_DISCOUNTS(DISC_ARR , WHCHORDER, SUBTYPE) +LOCAL DISC_PCT, I, DISC_TOTAL, RETARR := {}, RETVAL +LOCAL SP4 := SPACE(07)+'(', SP5 := SPACE(06)+'(' +LOCAL SP6 := SPACE(05)+'(', SP7 := SPACE(04)+'(' +LOCAL SP9 := SPACE(02)+'(', SP8 := SPACE(03)+'(' +FOR I := 1 TO LEN(DISC_ARR) + DISC_PCT := DISC_ARR[I,2] + //** RETVAL := SPACE(10) + STR(DISC_PCT, 3,0) + '% ' //** P3N - 09/27/11 + RETVAL := SPACE(08) + STR(DISC_PCT, 5,2) + '% ' //** P3N - 09/27/11 + IF LEN(DISC_ARR) = 1 + RETVAL := RETVAL + 'Total Discount' + SPACE(19) + ELSE + RETVAL := RETVAL + 'Discount for ' + DISC_ARR[I,4] //ENTRY SIZE + ENDIF + RETVAL := PADL(TRIM(RETVAL), 48, ' ') + DISC_TOTAL := DISC_ARR[I,3] + IF DISC_TOTAL < 0 //** P3N - 4/3/98 DISCOUNT CHARGE BACK + RETVAL := RETVAL + STR(DISC_TOTAL * -1, 12, 2) + ELSEIF DISC_TOTAL > 99999.99 + RETVAL := RETVAL + SP9 + STR(DISC_TOTAL, 9,2) + ')' + ELSEIF DISC_TOTAL > 9999.99 + RETVAL := RETVAL + SP8 + STR(DISC_TOTAL, 8,2) + ')' + ELSEIF DISC_TOTAL > 999.99 + RETVAL := RETVAL + SP7 + STR(DISC_TOTAL, 7,2) + ')' + ELSEIF DISC_TOTAL > 99.99 + RETVAL := RETVAL + SP6 + STR(DISC_TOTAL, 6,2) + ')' + ELSEIF DISC_TOTAL > 9.99 + RETVAL := RETVAL + SP5 + STR(DISC_TOTAL, 5,2) + ')' + ELSE + RETVAL := RETVAL + SP4 + STR(DISC_TOTAL, 4,2) + ')' + ENDIF + IF MHOME_LOC_CODE = 'KC' + RETVAL := SPACE(22) + RETVAL + ELSEIF MHOME_LOC_CODE = 'IOLA' + RETVAL := SPACE(19) + RETVAL + ELSEIF MHOME_LOC_CODE = 'LINDS' + RETVAL := SPACE(21) + RETVAL + ELSEIF MHOME_LOC_CODE = 'PAWNEE' + RETVAL := SPACE(19) + RETVAL + ENDIF + AADD(RETARR, RETVAL) +NEXT +IF DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) + // IF AMOUNTS TO PRINT; RETURN THE DISCOUNT ARRAY! +ELSE + RETARR := {} +ENDIF +RETURN RETARR +**************************************************************** +**************************************************************** +**************************************************************** +FUNCTION IS_COD( TERMCODE ) +IF ASCAN( MCOD_ARR, { |X| ALLTRIM( X ) == ALLTRIM( TERMCODE ) } ) > 0 + RETURN .T. +ELSE + RETURN .F. +ENDIF + +**************************************************************** +* FIND IF ANY ELEMENTS FOR LOCATION TO PRINT +**************************************************************** +FUNCTION SCAN_PRNARR(PRN_ARR, WHCH_LOCATION) +LOCAL ELEM := ASCAN (PRN_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(WHCH_LOCATION) } ) +IF ELEM > 0 + RETURN .T. +ELSE + RETURN .F. +ENDIF + +**************************************************************** +* READ THE LINE FILE( ORD_LINES/ADDL_LINES) AND PUT ALL APPLICABLE +* DATA INTO AN ARRAY FOR LATER USE AND PRINTING +**************************************************************** + +FUNCTION GET_ORD_DATA( MORDER_NUM, SELFILE, PARTIAL_INVOICE, REPRINT_INVOICE ) +LOCAL DATA_ARR := {}, DISC_ARR, ITEM_LINE, MLOC_CODE, PRNT_ARR, DISC_PCT +LOCAL PRNT_DESARR, PRNT_DESC, PROD_MEMO, RAN_SLID := .F., MGL_LINE_DESC := '' +LOCAL ITEM_CAT_CODE, CALC_VAR, AMTVAR, GLASS_COPY, ADDL_MODE +LOCAL PAR_CAT_CODE, SCRNSIZE,I, WHERE_FROM, PROD_CAT_CODE, EQL_PRNT +LOCAL SV_SEL := SELECT(), MLINE, MLOC_FILE, SEEKKEY, OPTFILE +LOCAL FULL_HT, FULL_WD, HALF_HT, HALF_WD, FULL_ITEM, HALF_ITEM +LOCAL PROD_LINE, GLASS_LINE, EXP_LINE, PO_LINE, SASH_LINE, SCREEN_LINE +LOCAL FACT, HS_PRNT, PRNT_EXP, GLASS_PRNT, STORM_PRNT, FSARR := {} +LOCAL OR_TOP := 0, OR_BOT := 0, OR_ARR := {}, OR_VAL, OR_DEC := 0 +LOCAL OR_SCR := 0, EX_DESC:= '', DEFAULT_ORIEL := .F., BALANCE_SIZE +LOCAL OR_DESC:= '', ODD_ORIEL, ELEM, OR_GLASS := 0, O_GLASS_DESC := '' +LOCAL MGL_NUM, MGL_AMT, EXP_REQ, ADDIT, SEEKPROD, SIZE_ARR, MNUM_GLASS +LOCAL MULL_REQ := .F., MULL_TYPE, MULL_ARR, S_REC, NUMMULLS, WKL_AMT := 0 +LOCAL EXP_WK_WIDTH := 0, ADJ_WK_WIDTH := 0, ADJ_WK_HEIGHT := 0 +LOCAL DEL_CHG := 0, WORKVAR, IS_ALWAYS_SLID := .F., STDADJ := 0 +LOCAL XFACTOR := 0, _DISC_INFO, THIS_DISC, FLANKSCR := {.F., ''} +LOCAL GB_CHUNK := '', GLT_WD, GLT_HT, DO_GLASS_PRNT, GLB_WD, GLB_HT +LOCAL GLT_QTY, GLB_QTY, WK_QTY, OR_REASON, PR_CUSTID, MLINE_DESC +LOCAL BAL_INFO, TOTWIND, CUT_SPEC_ARR, WORKSPECS, RETVAL := {} +LOCAL G_ARR := {}, MCODE, MLINE_NUM, MNUM_SCREEN, PAR_LOC_CODE +LOCAL MWORK_DESC := '', GL311AMT, FRENCHDOOR, ADJ_HT, GETFLANK +LOCAL DO_SCRNS_ONLY := .F., BYPASS_SCREEN_PAR := .F., WKSPRICE := 0 +LOCAL MPWHERE := 'U' //DEFAULT Line Notes to print UNDER the line item! +LOCAL SHP_QTY := 0, INV_QTY := 0, QTYARR := {}, BO_ITEM := '' +LOCAL CK_BKO_SCRNS := .F., SCRNINFO := {} //** P3N - 6/30/98 +LOCAL FLNKSPECS := {}, PARORD, PARLINE //** P3N - 7/21/99 HAPPY BDAY DANIEL +STATIC PARGARR := {}, PARPROD, PARELM //** P3N - 7/21/99 HAPPY BDAY DANIEL +IF SELFILE == CUR_OL + WHERE_FROM := 'OL' + ADDL_MODE := .F. + OPTFILE := CUR_OO +ELSEIF SELFILE == CUR_XL + WHERE_FROM := 'XL' + ADDL_MODE := .T. + OPTFILE := CUR_XO +ENDIF +FOR I := 1 TO 11 // 11 TYPES OF OUTPUT FORMS + AADD(DATA_ARR, {}) // 1-Production +NEXT // 2-frame + // 3-sash + // 4-glass + // 5-screen + // 6-storms + // 7-invoice (customer) + // 8-expander + // 9-control desk + //10-SCREENS(when NOT at mfg. loc) + //11-storms (when NOT at mfg. loc) +// FILL ARRAY WITH 14-ELEMENTS CONTAINING +// 1. LOC CODE MLOC_CODE +// 2. DESCRIPTION PRNT_DESC +// 3. ITEM LINE PRINT VALUE - NO $ AMOUNTS ITEM_LINE +// 4. SALE PRICE +// 5. DISCOUNT PCT/AMOUNT ARRAY +// 6. MEMO NOTES PROD_MEMO +// 7. QUANTITY +// 8. WHERE DID ALL THE INFO COME FROM (IE: "OL" OR "XL") +// 9. LINE_NUM +//10. PROD_CODE +//11. SHP_QTY // ORDER SHIP QTY +//12. EXTRA WINDOWS +//13. cut spec array +//14. line_desc FOR USE ON GLASS / SCREEN COPIES at kansas city +//15. flag indicating print SCREEN ONLY regardless of the MFG Location +//16. flag indicating print notes above size prod_line(item_line) +// Print-'U ' = UNDER LINE, 'A' = ABOVE LINE, 'B' = Beside the LINE +//17. INV_QTY // ORDER INVOICE QTY +// +SELECT (SELFILE) +SEEK MORDER_NUM +DO WHILE ORDER_NUM = MORDER_NUM .AND. !EOF() + IF ADDL_MODE + // POINT TO PARENT ORDER LINE RECORD + (CUR_OL)->(DBSEEK( (SELFILE)->ORDER_NUM + STR((SELFILE)->LINE_NUM,3) ) ) + PAR_LOC_CODE := (CUR_OL)->LOC_CODE + ELSE + PAR_LOC_CODE := NIL + IF EMPTY(PRT_NOTES) + MPWHERE := 'U' // DEFAULT - print the notes under the line item + ELSE + MPWHERE := PRT_NOTES // Print the Line Item notes where ????? + // "A" print ABOVE line item + // "B" print BESIDE line item + // "U" print UNDER line item + ENDIF + ENDIF + MLINE := STR(LINE_NUM,3) + MLINE := TRIM(MLINE) + // NUMBER OF XTRA WINDOWS MULLED + IF ADDL_MODE + XFACTOR := 0 + ELSE + XFACTOR := CK_XTRAWIND( SELFILE, OPTFILE, ADDL_MODE ) + QTYARR := GET_OSTQTY(SELFILE, , PARTIAL_INVOICE, REPRINT_INVOICE) //** P3N - 5/1/98 + IF EMPTY(QTYARR) //** P3N - 12/3/98 + SHP_QTY := 0 //** P3N - 12/3/98 + INV_QTY := 0 //** P3N - 12/3/98 + ELSE //** P3N - 12/3/98 + SHP_QTY := QTYARR[1] //** P3N - 12/3/98 + INV_QTY := QTYARR[2] //** P3N - 12/3/98 + ENDIF //** P3N - 12/3/98 + ENDIF + IF !EMPTY(ALT_SPRICE) // WAS ALTERNATE PRICE USED? + AMTVAR := ALT_SPRICE + WKSPRICE := (SELFILE)->ALT_SPRICE //** P3N -08/17/11 + ELSE + WKSPRICE := (SELFILE)->SALE_PRICE //** P3N -08/17/11 + AMTVAR := SALE_PRICE + IF !ADDL_MODE // GET ANY AMTS DUE FOR NON STD ADDL ITEMS + SELECT (CUR_XL) + DONSETORD(3) + SEEK (SELFILE)->ORDER_NUM + STR((SELFILE)->LINE_NUM,3) + IF FOUND() +//** P3N - 11/24/98 ADDRESS ADDL LINE PRICING FOR MULTI QTY PRODS +//** AMTVAR := AMTVAR + SALE_PRICE + AMTVAR := AMTVAR + ( SALE_PRICE * XFACTOR ) + ENDIF + DONSETORD(1) + SELECT (CUR_OL) + ENDIF + ENDIF + + //** USE THE QUOTED PRICE FOR DEL CHARG CALCS BELOW + IF EMPTY((CUR_MAST)->QUOTE_PRIC) //** P3N - 08/17/11 + //** NO QUOTED PRICE - CONTINUE W/LINE ITEM AMT IN WKSPRICE + ELSE //** P3N - 08/17/11 + WKSPRICE := (CUR_MAST)->QUOTE_PRIC //** P3N - 08/17/11 + ENDIF + + _DISC_INFO := ITEMDISC(PARTIAL_INVOICE, REPRINT_INVOICE, SELFILE) + // P3N - PER ELLEN - 6/3/98 +**IF EMPTY( (SELFILE)->ALT_SPRICE ) // DO NOT APPLY A DISCOUNT ON ALT PRICE! + DISC_PCT := (SELFILE)->DISCOUNT //LINE ITEM DISCOUNT PCT - USER ENTERED + IF EMPTY(DISC_PCT) + DISC_PCT := (SELFILE)->SYS_DISC //LINE ITEM DISCOUNT PCT - SYSTEM GENERATED + ENDIF +**ELSE +** DISC_PCT := 0 +** _DISC_INFO[2] := 0 +**ENDIF + DISC_ARR := {DISC_PCT, ; //LINE ITEM DISCOUNT PCT + _DISC_INFO[2], ; //LINE ITEM DISCOUNT AMT + (SELFILE)->ENTRY_SIZE, ; //ENTRY SIZE OF DISCOUNT ITEM + (SELFILE)->HOW_MEAS } //HOW MEASURE + SELECT PRODUCT + SEEK (SELFILE)->PROD_CODE + MGL_NUM := GL_NUM + MLOC_CODE := (SELFILE)->LOC_CODE + CUST_MAST->(DBSEEK((CUR_MAST)->CUST_ID )) + IF !EMPTY(CUST_MAST->GL_CODE) + MGL_NUM := ALLTRIM(MGL_NUM)+CUST_MAST->GL_CODE //** P3N - 02/01/07 ABW GL FOR INTER COMPANY + //**MGL_NUM := SUBS(MGL_NUM,1,2) + TRIM(SUBS(MGL_NUM,4)) + ' '+ CUST_MAST->GL_CODE + ENDIF + ITEM_CAT_CODE = GET_CATCODE( (SELFILE)->PROD_CODE) + PAR_CAT_CODE = GET_CATCODE( (SELFILE)->PAR_PROD) + SELECT (SELFILE) + PRNT_DESC := ALLTRIM((SELFILE)->ITEM_DESC) + IF AT('EXPANDER' , PRNT_DESC) > 0 ; + .AND. AT('NO~EXPANDER' , PRNT_DESC) = 0 ; + .AND. ( ITEM_CAT_CODE = 'STORMS' .OR. ITEM_CAT_CODE = 'STPW' .OR. ITEM_CAT_CODE = 'EXPANDR' ) //** P3N - 9/29/99 +//**.AND. ( ITEM_CAT_CODE = 'STORMS' .OR. ITEM_CAT_CODE = 'STPW' ) //** P3N - 9/29/99 + EXP_REQ := .T. + ELSE + EXP_REQ := .F. + ENDIF + // HEADER LINE FROM OPTIONS SELECTED + IF SELFILE = CUR_XL + (CUR_OL)->(DBSEEK( (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) ) ) + ELSE // IF ORDER LINES, CHECK IF ANY NON-STD OPTION ADDL_LINES +//** P3N - 5/17/99 REDUNDANT OPTION INFORMATION PRINTING WHEN NOT NEEDED +//** COMMENTED OUT PER SCOTT IN KC +//**SELECT (CUR_XL) +//**SEEKKEY = (SELFILE)->ORDER_NUM +//**SEEK SEEKKEY +//**DO WHILE ORDER_NUM == (SELFILE)->ORDER_NUM .AND. !EOF() +//** IF LINE_NUM == (SELFILE)->LINE_NUM .AND. STD_OPTS$'N' +//** PRNT_DESC := PRNT_DESC + CHR(13) + CHR(10) +//** PRNT_DESC := PRNT_DESC + '**~(' + ; +//** ALLTRIM(ITEM_DESC) + ')~**' +//** ENDIF +//** SKIP 1 +//**ENDDO +//**SELECT (SELFILE) + ENDIF + GLASS_COPY := IF( (SELFILE)->GLASSORDER='Y', .T., .F.) + SELECT (SELFILE) + ITEM_LINE := '' + IF ( (SELFILE)->HOW_MEAS = 'NS' .AND. EMPTY((SELFILE)->PAR_PROD)); + .OR. (SELFILE)->HOW_MEAS = 'BW' .OR. ; + (SELFILE)->HOW_MEAS = 'WO' .OR. (SELFILE)->IN_STOCK$'Y' + ITEM_LINE := ITEM_LINE + ' ' + STRTRAN( ALLTRIM( (SELFILE)->ENTRY_SIZE ), ' ','~') + ELSE + ITEM_LINE := ITEM_LINE + SPACE(11) + ENDIF + IF (SELFILE)->(FIELDPOS('GLINE_DESC')) > 0 //** P3N - 6/7/99 + MGL_LINE_DESC := TRIM((SELFILE)->GLINE_DESC) //** P3N - 6/7/99 + ENDIF //** P3N - 6/7/99 + SASH_LINE := ' ' //** P3N - 5/25/00 + IF !EMPTY( (SELFILE)->LINE_DESC ) + MLINE_DESC := ALLTRIM( (SELFILE)->LINE_DESC ) //** P3N - 5/2/00 CHANGED BACK FOR LINE ATTRIB OPTS + IF AT('I', (SELFILE)->LDESC_COPY ) > 0 //** P3N - 5/2/00 SASH COPY DESC + SASH_LINE := MLINE_DESC //** P3N - 5/2/00 + ENDIF //** P3N - 5/2/00 +//**MLINE_DESC := ALLTRIM( (SELFILE)->LINE_DESC )+' '+MGL_LINE_DESC //** P3N - 6/7/99 + ITEM_LINE := ITEM_LINE + ' ' + // 12-4-96 - SAVE LINE_DESC UNTIL LATER PER LINDA AT LINDS ?? + ITEM_LINE := ITEM_LINE + '~' + MLINE_DESC + ' ' + MLINE_DESC := '' + ELSE //** P3N - 6/7/99 + IF EMPTY(ITEM_LINE) //** P3N - 6/9/99 + ITEM_LINE := MGL_LINE_DESC //** P3N - 6/7/99 + ELSE //** P3N - 6/9/99 +//** ITEM_LINE := ITEM_LINE + MGL_LINE_DESC //** P3N - 6/9/99 + ITEM_LINE := ITEM_LINE +'~~'+ MGL_LINE_DESC //** P3N -10/19/99 + ENDIF //** P3N - 6/9/99 + ENDIF + IF EMPTY( (SELFILE)->LINE_NOTES) + PROD_MEMO := NIL + ELSE + PROD_MEMO := (SELFILE)->LINE_NOTES + ENDIF + IF AMTVAR = 0 .AND. (CUR_MAST)->QUOTE_PRIC <> 0 + //** P3N - 7/28/98 - PRINT THE CODING ON QUOTED ORDERS + //**MGL_AMT := (SELFILE)->QUANTITY * (SELFILE)->CALC_PRICE + MGL_AMT := (CUR_MAST)->QUOTE_PRIC +//** P3N - 12/7/98 PARTIAL INVOICE PROCESSING + ELSEIF PARTIAL_INVOICE //** P3N - 12/7/98 + MGL_AMT := SHP_QTY * AMTVAR //** P3N - 12/7/98 + ELSEIF REPRINT_INVOICE //** P3N - 12/7/98 + MGL_AMT := INV_QTY * AMTVAR //** P3N - 12/7/98 + ELSE + MGL_AMT := (SELFILE)->QUANTITY * AMTVAR + ENDIF + // CALC THE SYSTEM DEALER PICKUP DISCOUNT + // FILL THE GL_ARR WITH ALLOCATION INFORMATION + // 09-5-95 - EXCLUDE INTERCOMPANY LINES FROM DELIVERY CHARGE + // 09-5-95 - SHOULD ANY OTHERS BE EXCLUDED? + // 03-31-97 - EXCLUDE KC BUILD TO STOCK ITEMS. + IF MHOME_LOC_CODE = 'IOLA' + IF (CUR_MAST)->PICK_DEL$'D' ; + .AND. !(SELFILE)->PRICE_SHT$'I' ; + .AND. (CUR_MAST)->CUST_ID <> '20187000' //** KC LOCATION + CATEGORY->(DBSEEK( ITEM_CAT_CODE )) + IF EMPTY(CATEGORY->FRT_AMT) //** P3N - 08/08/11 + //** USE THE CATEGORY PCT TO CALC DELIVERY CHARGE ON ORDER SUBTOTAL + //**DEL_CHG := (CATEGORY->FRT_PCT / 100 ) * (SELFILE)->SALE_PRICE + //**WKL_AMT := (SELFILE)->SALE_PRICE / (1+(CATEGORY->FRT_PCT / 100 )) + //**WKL_AMT := (SELFILE)->SALE_PRICE - WKL_AMT //** SINGLE ITEM DEL CHG + WKL_AMT := WKSPRICE / (1+(CATEGORY->FRT_PCT / 100 )) //** P3N - 08/17/11 + WKL_AMT := WKSPRICE - WKL_AMT //** SINGLE ITEM DEL CHG //** P3N - 08/17/11 + DEL_CHG := WKL_AMT * (SELFILE)->QUANTITY + ELSE + DEL_CHG := CATEGORY->FRT_AMT * (XFACTOR+1) * (SELFILE)->QUANTITY + ENDIF + ELSE + DEL_CHG := 0 + ENDIF + ELSEIF MHOME_LOC_CODE = 'KC' + IF (CUR_MAST)->PICK_DEL$'D' ; + .AND. !(SELFILE)->PRICE_SHT$'I' ; + .AND. IS_DELIVERED() //IS THIS ORDER ASSESSED A DELIVERY CHARGE??? + CATEGORY->(DBSEEK( ITEM_CAT_CODE )) + IF EMPTY(CATEGORY->FRT_AMT) //** P3N - 08/08/11 + //** USE THE CATEGORY PCT TO CALC DELIVERY CHARGE ON ORDER SUBTOTAL + //** DEL_CHG := (CATEGORY->FRT_PCT / 100 ) * (SELFILE)->SALE_PRICE + //**WKL_AMT := (SELFILE)->SALE_PRICE / (1+(CATEGORY->FRT_PCT / 100 )) + //**WKL_AMT := (SELFILE)->SALE_PRICE - WKL_AMT //** SINGLE ITEM DEL CHG + WKL_AMT := WKSPRICE / (1+(CATEGORY->FRT_PCT / 100 )) //** P3N - 08/17/11 + WKL_AMT := WKSPRICE - WKL_AMT //** SINGLE ITEM DEL CHG //** P3N - 08/17/11 + DEL_CHG := WKL_AMT * (SELFILE)->QUANTITY + ELSE + DEL_CHG := CATEGORY->FRT_AMT * (XFACTOR+1) * (SELFILE)->QUANTITY + ENDIF + ELSE + DEL_CHG := 0 + ENDIF + ELSEIF (CUR_MAST)->PICK_DEL$'D' ; + .AND. !(SELFILE)->PRICE_SHT$'I' + CATEGORY->(DBSEEK( ITEM_CAT_CODE )) + IF EMPTY(CATEGORY->FRT_AMT) //** P3N - 08/08/11 + //** USE THE CATEGORY PCT TO CALC DELIVERY CHARGE ON ORDER SUBTOTAL + //**DEL_CHG := (CATEGORY->FRT_PCT / 100 ) * (SELFILE)->SALE_PRICE + //**WKL_AMT := (SELFILE)->SALE_PRICE / (1+(CATEGORY->FRT_PCT / 100 )) + //**WKL_AMT := (SELFILE)->SALE_PRICE - WKL_AMT //** SINGLE ITEM DEL CHG + WKL_AMT := WKSPRICE / (1+(CATEGORY->FRT_PCT / 100 )) //** P3N - 08/17/11 + WKL_AMT := WKSPRICE - WKL_AMT //** SINGLE ITEM DEL CHG //** P3N - 08/17/11 + DEL_CHG := WKL_AMT * (SELFILE)->QUANTITY + ELSE + DEL_CHG := CATEGORY->FRT_AMT * (XFACTOR+1) * (SELFILE)->QUANTITY + ENDIF + ELSE + DEL_CHG := 0 + ENDIF + ********************************************************** + * GL 521 IS THE DELIVERY CHARGE - LineItem category calc [$ frt_amt or % frt_pct] + ********************************************************** + + IF ADDL_MODE + // NO DELIVERY CHARGE ON ADDL LINE ITEM (XL) + ELSEIF EMPTY( (CUR_MAST)->FUEL_CHRG ) //** P3N - 08/08/11 + IF DEL_CHG <> 0 .AND. MGL_AMT <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = '521 '} ) + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+ DEL_CHG + ELSE //INCLUDE FOR ALLOC. + AADD(GL_ARR, { '521 ', DEL_CHG, , 'I' } ) + ENDIF + ENDIF + ELSE + DEL_CHG := 0 //** P3N - 08/08/11 + ENDIF + + ********************************************************** + * GL 311 IS THE INSTALLATION ADJ. + * GL 361 IS THE INSTALLATION ADJ (as of 02/01/07) + ********************************************************** + GL311AMT := (SELFILE)->GL311_AMT + (SELFILE)->GL311_ADJ + IF GL311AMT <> 0 .AND. MGL_AMT <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = '361 '} ) //** P3N - 01/30/07 +//**ELEM := ASCAN(GL_ARR, {|X| X[1] = '311 '} ) //** P3N - 01/30/07 + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2]+ GL311AMT + ELSE //INCLUDE FOR ALLOC. + AADD(GL_ARR, { '361 ', GL311AMT, , 'I' } ) //** P3N - 01/30/07 +//** AADD(GL_ARR, { '311 ', GL311AMT, , 'I' } ) //** P3N - 01/30/07 + ENDIF + ENDIF + //* AMOUNT ALREADY ALLOCATED TO THE GL ACCT. FOR THE PRIMARY LINE ITEM! + IF ADDL_MODE + MGL_AMT := 0 + ENDIF + //* AMOUNT ALLOCATED TO THE GL ACCT. FOR THE LINE ITEM + IF MGL_AMT <> 0 + ELEM := ASCAN(GL_ARR, {|X| X[1] = MGL_NUM} ) + // CHECK FOR USER LINE DISCOUNTS OR SYSTEM CALC DISCOUNTS + //** P3N - 11/24/98 - COMMENTED OUT BECAUSE IT IS ALREADY + //** EXECUTED ABOVE +//**_DISC_INFO := ITEMDISC() + THIS_DISC := _DISC_INFO[2] + IF ELEM > 0 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2] + MGL_AMT - THIS_DISC - DEL_CHG - GL311AMT + ELSE // PRODUCT ALLOC. + AADD(GL_ARR, { MGL_NUM + ' ' , MGL_AMT - THIS_DISC - DEL_CHG - GL311AMT , , 'P'} ) + ENDIF + ENDIF + + **** CHECK IF RANCH SLIDER, BECAUSE THE WIDTH/HEIGHT WILL BE REVERSED + **** FOR PRODUCTION PROCESSING + **** IF ALWAYS SLIDER (C900) THEN DON'T REVERSE, BUT HALF SIZE WIDTH + **** MAYBE don't check screens for sliders per darlene 6-23-95?? + RAN_SLID := CK_SLIDER(SELFILE, OPTFILE, ADDL_MODE) + IS_ALWAYS_SLID := ALWAYS_SLIDER(SELFILE, OPTFILE, ADDL_MODE) + + ***** SPECIAL ORIEL PROCESSING HERE + + ODD_ORIEL := .T. + OR_DESC := '' + O_GLASS_DESC := '' + OR_SCR := 0 + OR_ARR := CK_ORIEL(ITEM_CAT_CODE, SELFILE, OPTFILE, ADDL_MODE, RAN_SLID, IS_ALWAYS_SLID ) + OR_TOP := OR_ARR[1] + OR_BOT := OR_ARR[2] + BALANCE_SIZE := OR_ARR[3] + OR_REASON := OR_ARR[4] + OR_SCR := OR_ARR[5] + OR_GLASS := OR_ARR[6] + ODD_ORIEL := OR_ARR[7] + DEFAULT_ORIEL := OR_ARR[8] + STDADJ := 0 //** P3N - 07/05/01 + IF (SELFILE)->HOW_MEAS == 'NS' //** P3N - 07/05/01 + //** STD SIZE ADJ FOR NOM SIZE - PAWNEE RE: DARYL //** P3N - 07/05/01 + STDADJ := OR_ARR[9] //** STD SIZE ADJ - NOM SIZE ONLY + ENDIF //** P3N - 07/05/01 + // OR_REASON RESULTS + // 'BAL ADJ' + // 'NO ORIEL' + // 'ATT CODE' + // 'BAL ADJ' + // 'DEFAULT' +// EMPTY CUTTING SPECS FOR THIS LINE ITEM + IF !ADDL_MODE + CUT_SPEC_ARR := ACLONE(GET_CUT_SPEC( (SELFILE)->PROD_CODE ) ) + CATEGORY->(DBSEEK( ITEM_CAT_CODE ) ) + MCODE := (SELFILE)->PROD_CODE + ELSE + IF ITEM_CAT_CODE = 'EXPANDR' //** P3N - 9/29/99 + CUT_SPEC_ARR := ACLONE(GET_CUT_SPEC( (SELFILE)->PROD_CODE, SELFILE, (SELFILE)->QUANTITY, XFACTOR, G_ARR)) //** P3N - 9/29/99 + ELSE //** P3N - 9/29/99 + CUT_SPEC_ARR := ACLONE(GET_CUT_SPEC( (SELFILE)->PAR_PROD ) ) + ENDIF //** P3N - 9/29/99 + CATEGORY->(DBSEEK( PAR_CAT_CODE ) ) + MCODE := (SELFILE)->PAR_PROD + ENDIF + IF !EMPTY(CUT_SPEC_ARR) .OR. !EMPTY(CATEGORY->HS_RULE) // NEED GET_ARRAY FOR CUTTING SPEC RULE AND HALF SIZE RULE EVALUATION + MLINE_NUM := STR((SELFILE)->LINE_NUM,3) + RETVAL = BUILD_GETARR( MCODE, 1, MORDER_NUM, MLINE_NUM, , .F., ADDL_MODE, PR_CUSTID, .F., SELFILE ) + G_ARR = RETVAL[1] + // EVALUATED CUTTING SPECS FOR THIS LINE ITEM + IF ITEM_CAT_CODE = 'EXPANDR' //** P3N - 9/30/99 + ELSE //** P3N - 9/30/99 + CUT_SPEC_ARR := ACLONE(GET_CUT_SPEC( MCODE, SELFILE, (SELFILE)->QUANTITY, XFACTOR, G_ARR )) + ENDIF //** P3N - 9/30/99 + IF ADDL_MODE //** P3N - 7/21/99 HAPPY BDAY DANIEL + ELSE //** P3N - 7/21/99 HAPPY BDAY DANIEL + PARORD := (SELFILE)->ORDER_NUM //** P3N - 7/22/99 + PARPROD := (SELFILE)->PROD_CODE //** P3N - 7/22/99 + PARLINE := STR((SELFILE)->LINE_NUM) //** P3N - 7/22/99 + IF EMPTY(PARGARR) //** P3N - 7/21/99 HAPPY BDAY DANIEL + AADD(PARGARR, {PARORD, PARPROD, PARLINE, ACLONE(G_ARR)}) //** P3N - 7/21/99 HAPPY BDAY DANIEL + ELSEIF PARORD == PARGARR[1,1] //** P3N - 7/21/99 HAPPY BDAY DANIEL + IF ASCAN(PARGARR,{|X| X[1] == PARORD .AND. ; + X[2] == PARPROD .AND. ; + X[3] == PARLINE } ) > 0 + ELSE //** P3N - 7/21/99 HAPPY BDAY DANIEL + AADD(PARGARR, {PARORD, PARPROD, PARLINE, ACLONE(G_ARR)}) //** P3N - 7/21/99 HAPPY BDAY DANIEL + ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL + ELSE //** P3N - 7/21/99 HAPPY BDAY DANIEL + PARGARR := {} //** P3N - 7/21/99 HAPPY BDAY DANIEL + AADD(PARGARR, {PARORD, PARPROD, PARLINE, ACLONE(G_ARR)}) //** P3N - 7/21/99 HAPPY BDAY DANIEL + ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL + ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL + ELSE + PARORD := (SELFILE)->ORDER_NUM //** P3N - 7/22/99 + G_ARR := {} + IF EMPTY(PARGARR) //** P3N - 7/21/99 HAPPY BDAY DANIEL + ELSEIF PARORD == PARGARR[1,1] //** P3N - 7/21/99 HAPPY BDAY DANIEL + ELSE //** P3N - 7/21/99 HAPPY BDAY DANIEL + PARGARR := {} //** P3N - 7/21/99 HAPPY BDAY DANIEL + ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL + ENDIF +// CHECK THE PRINTING OF HALF SIZE INFORMATION +// (IN STOCK ITEMS - NO PRINT, EQUAL LITE MSG IF NORMALLY AN ORIEL.) + WK_WIDTH := (SELFILE)->PRD_WIDTH + WK_HEIGHT := (SELFILE)->PRD_HEIGHT + EQL_PRNT := '' //** P3N - 6/7/99 + HS_PRNT := '' + PROD_LINE := '' + IF (SELFILE)->ORIEL_SIZE$'Y' .AND. ; + OR_TOP = 1 .AND. OR_BOT = 1 + HS_PRNT := CK_HALF_SIZE(ITEM_CAT_CODE, SELFILE, OPTFILE, {0,0}, RAN_SLID, WK_WIDTH, WK_HEIGHT, EXP_REQ, IS_ALWAYS_SLID, G_ARR ) + EQL_PRNT := TRIM(PROD_LINE) + ' ** Equal Lites ** ' + ELSE + HS_PRNT := CK_HALF_SIZE(ITEM_CAT_CODE, SELFILE, OPTFILE, OR_ARR, RAN_SLID, WK_WIDTH, WK_HEIGHT, EXP_REQ, IS_ALWAYS_SLID, G_ARR) + IF OR_TOP <> OR_BOT + HS_PRNT := CK_HALF_SIZE(ITEM_CAT_CODE, SELFILE, OPTFILE, OR_ARR, RAN_SLID, WK_WIDTH, WK_HEIGHT, EXP_REQ, IS_ALWAYS_SLID, G_ARR) + ENDIF + ENDIF + IF (SELFILE)->HOW_MEAS = 'BW' .OR. ; + (SELFILE)->HOW_MEAS = 'WO' .OR. ; + ((SELFILE)->HOW_MEAS = 'NS' .AND. EMPTY((SELFILE)->PAR_PROD)).OR. ; + (SELFILE)->IN_STOCK$'Y' + PROD_LINE := TRIM(ITEM_LINE) + //** P3N 11/27/01 - IOLA PRINT ENTRY SIZE FOR PRODUCTION FRAME FOR CATEGORY TRAP (TRAPEZOID) + IF ALLTRIM( ITEM_CAT_CODE ) == 'TRAP' //** P3N - 11/27/01 + PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM((SELFILE)->ENTRY_SIZE) //** P3N - 11/27/01 + PROD_LINE := PROD_LINE + ' ' + ALLTRIM((SELFILE)->LINE_DESC) //** P3N - 11/27/01 + ELSE + //** 6/7/99 - P3N - IOLA HALF SIZE PRINT ON NOMINAL SIZE PRODUCTION FRAME + IF MHOME_LOC_CODE = 'IOLA' + PROD_LINE := TRIM(PROD_LINE) + ' ' + PRNT_SIZE(WK_WIDTH, WK_HEIGHT) + PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(HS_PRNT) + PROD_LINE := TRIM(PROD_LINE) + ' ' + MGL_LINE_DESC //** P3N - 12/13/01 + ENDIF + ENDIF //** P3N - 11/27/01 + ELSE +//** P3N - 11/23/98 ADDRESS EXPANDER WIDTH FOR SLIDERS - IOLA + EXP_WK_WIDTH := (SELFILE)->ACT_WIDTH + IF RAN_SLID +//** P3N - 12/11/98 ADDRESS PAWNEE REQUEST TO PRINT SIZE BEFORE ITEM +//** PROD_LINE := TRIM(ITEM_LINE) + ' ' + PRNT_SIZE(WK_HEIGHT, WK_WIDTH) + PROD_LINE := PRNT_SIZE(WK_HEIGHT, WK_WIDTH) +//** P3N - 5/26/99 ADDRESS 1/2 SIZE PRINT FOR LINE DESC - IOLA + IF !EMPTY(HS_PRNT) .AND. (SELFILE)->IN_STOCK = 'N' + PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(HS_PRNT) + ENDIF + PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(ITEM_LINE) + //** P3N 11/27/01 - IOLA PRINT ENTRY SIZE FOR PRODUCTION FRAME FOR CATEGORY TRAP (TRAPEZOID) + ELSEIF ALLTRIM( ITEM_CAT_CODE ) == 'TRAP' //** P3N - 11/27/01 + PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM((SELFILE)->ENTRY_SIZE) //** P3N - 11/27/01 + PROD_LINE := PROD_LINE + ' ' + ALLTRIM((SELFILE)->LINE_DESC) //** P3N - 11/27/01 + ELSE +//** P3N - 12/11/98 ADDRESS PAWNEE REQUEST TO PRINT SIZE BEFORE ITEM +//** PROD_LINE := TRIM(ITEM_LINE) + ' ' + PRNT_SIZE(WK_WIDTH, WK_HEIGHT) + PROD_LINE := PRNT_SIZE(WK_WIDTH, WK_HEIGHT) +//** P3N - 5/26/99 ADDRESS 1/2 SIZE PRINT FOR LINE DESC - IOLA + IF !EMPTY(HS_PRNT) .AND. (SELFILE)->IN_STOCK = 'N' + PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(HS_PRNT) + ENDIF + //** P3N - 12/13/01 ADDRESS DARLENE'S PRODUCTION + IF MHOME_LOC_CODE = 'IOLA' + IF AT(ALLTRIM(MGL_LINE_DESC),ALLTRIM(ITEM_LINE)) > 0 //** P3N - 01/25/02 - ADDRESS DARLENE'S FRAME PRINTING + PROD_LINE := TRIM(PROD_LINE)+'~'+ALLTRIM(ITEM_LINE) //** P3N - 01/25/02 + ELSE //** P3N - 01/25/02 + PROD_LINE := TRIM(PROD_LINE)+'~'+MGL_LINE_DESC+ '~' + ALLTRIM(ITEM_LINE) + ENDIF //** P3N - 01/25/02 + ELSE + PROD_LINE := TRIM(PROD_LINE) + ' ' + ALLTRIM(ITEM_LINE) + ENDIF + ENDIF + ENDIF + //* PERRY - 2-11-98 + FRENCHDOOR := CK_FRENCH(SELFILE, OPTFILE, ADDL_MODE) + IF (SELFILE)->IN_STOCK$'N' + IF FRENCHDOOR + //* PERRY - 2-11-98 + // DO NOT PRINT THE (OS) SIZE FOR FRENCH DOORS - + // IT WILL BE ENTERED BY THE USER IN THE OPTIONS, OR LINE MEMO + ELSEIF ALLTRIM(ITEM_CAT_CODE) == 'STD'; // STORM DOORS + .AND. (SELFILE)->HOW_MEAS = 'OS' + PROD_LINE := TRIM(PROD_LINE) + ; + STRTRAN(' (OS=' + ALLTRIM( (SELFILE)->ENTRY_SIZE) + ') ', ' ','~') + ENDIF + ELSE + // ONLY IN_STOCK WINDOWS FIT HERE! + PROD_LINE := TRIM(PROD_LINE) + ' (S)' + ITEM_LINE := TRIM(ITEM_LINE) + ' (S)' + ENDIF + **** CHECK IF ANY MULLS - CENTER VERTICAL WILL CALC BREAKDOWN, AND + **** WILL 2 PIECES GLASS / SASH + **** ANY OTHER 'MULL LOC' WILL HAVE NO SASH/GLASS + IF ITEM_CAT_CODE = 'STPW' .OR. PAR_CAT_CODE = 'STPW' + MULL_ARR := CK_MULLS(SELFILE, OPTFILE) + MULL_REQ := MULL_ARR[1] + MULL_TYPE := MULL_ARR[2] + ENDIF + // PRINT THE ORIEL BANNER + PROD_LINE := PROD_LINE + EQL_PRNT //** P3N - 6/7/99 + IF (SELFILE)->ORIEL_SIZE$'Y' ; + .AND. !(OR_TOP = 1 .AND. OR_BOT = 1) + PROD_LINE := TRIM(PROD_LINE) + ' **~Oriel~** ' + ENDIF + IF BALANCE_SIZE <> NIL +//**BAL_INFO := ' USE~' + ALLTRIM(BALANCE_SIZE) + '"~BALANCE ' +//** P3N - 11/19/99 ADDRESSED BALANCE INFO AT PAWNEE + IF MHOME_LOC_CODE = 'PAWNEE' + BAL_INFO := '~' + ALLTRIM(BALANCE_SIZE) + '"~BAL ' + ELSE + BAL_INFO := ' USE~' + ALLTRIM(BALANCE_SIZE) + '"~BALANCE ' + ENDIF + ELSE + BAL_INFO := '' + ENDIF + PROD_LINE := TRIM(PROD_LINE) + BAL_INFO + IF CK_SPEC_PRICE( (CUR_MAST)->CUST_ID, (SELFILE)->PROD_CODE, (CUR_MAST)->ORDER_DATE, 'CUST_BP' ) + PR_CUSTID := (CUR_MAST)->CUST_ID + ELSE + PR_CUSTID := NIL + ENDIF + // 1. SET UP THE PRODUCTION CONTROL CHUNK + // IF MANUFACTURED IN HOUSE, OTHER "CHUNKS" WILL UTILIZE THIS INFO. + // IF MADE IN LINDSBORG BUT STOCKED IN KC AND ORDERED IN KC, TREAT AS STOCK + IF MLOC_CODE = MHOME_LOC_CODE + ELSEIF IN_STOCK$'N' + PROD_LINE := TRIM(PROD_LINE) + ' (' + (SELFILE)->HOW_MEAS + ')~' ; + + STRTRAN( TRIM( (SELFILE)->ENTRY_SIZE), ' ','~' ) + ENDIF + // IF NOT ADDL MODE PUT INTO DATA_ARR[1] + // IF ADDL_MODE AND MADE HERE, BUT PARENT IS MADE ELSEWHERE + // PUT IT IN DATA_ARR[1] + ADDIT := .F. + IF !ADDL_MODE + IF MLOC_CODE = MHOME_LOC_CODE + ADDIT := .T. + ENDIF + ELSE // ADDL_MODE + IF MLOC_CODE = MHOME_LOC_CODE ; + .AND. PAR_LOC_CODE <> MHOME_LOC_CODE + ADDIT := .T. + ENDIF + // IF IN STOCK ITEM BUT NEED SCREEN, ADD_IT SHOULD BE TRUE FOR SCEEN COPY + IF ITEM_CAT_CODE = 'SCREENS' + //Create a screen copy regardless of MFG. Loc & stock item + IF (MLOC_CODE = MHOME_LOC_CODE .AND. (SELFILE)->IN_STOCK <> 'Y') + ELSE + DO_SCRNS_ONLY:=.T. + ADDIT := .T. + ENDIF + ENDIF + ENDIF + // 1. DATA_ARR[1] IS THE PRODUCTION PART + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'C', SELFILE ) + IF ADDIT + AADD(DATA_ARR[1], {MLOC_CODE, PRNT_DESC, PROD_LINE, ; + AMTVAR, DISC_ARR, PROD_MEMO, QUANTITY ,WHERE_FROM, MLINE, ; + PROD_CODE, SHP_QTY, XFACTOR, WORKSPECS, NIL , ; + DO_SCRNS_ONLY, MPWHERE, INV_QTY }) + ENDIF + // 9. DATA_ARR[9] IS THE PRODUCTION REPRESENTATION OF ALL DELIVERY/INVOICE ITEMS/CONTROL DESK + IF !ADDL_MODE + AADD(DATA_ARR[9], {MLOC_CODE, PRNT_DESC, PROD_LINE, ; + AMTVAR, DISC_ARR, PROD_MEMO, QUANTITY ,WHERE_FROM, MLINE, ; + PROD_CODE, SHP_QTY, XFACTOR, WORKSPECS, NIL, ; + DO_SCRNS_ONLY, MPWHERE, INV_QTY }) + ENDIF + // 7. INV (CUSOMER INVOICE) PRINT LINES + IF WHERE_FROM = 'OL' + SELECT (SELFILE) + ITEMPRNT1 := PRNT_SIZE(DECVAL(WIDTH), DECVAL(HEIGHT)) + ITEMPRNTX := ALLTRIM( (SELFILE)->ENTRY_SIZE) + ITEM_LINE := '' + ITEM_LINE := ITEM_LINE + ' (' + (SELFILE)->HOW_MEAS + ') ' + //** P3N - 3/5/99 REQUESTED BY LAURA @ PAWNEE + IF ITEM_CAT_CODE = 'HYLIT' //** P3N - 3/5/99 + IF (SELFILE)->HOW_MEAS == 'NS' //** P3N - 3/5/99 + ITEM_LINE := ' Model# ' //** P3N - 3/5/99 + ENDIF //** P3N - 3/5/99 + ENDIF //** P3N - 3/5/99 + ITEM_LINE := ITEM_LINE + ITEMPRNTX + IF FRENCHDOOR + // DO NOT PRINT THE OPENING SIZE ON FRENCH DOORS - PERRY 2-11-98 + ITEM_LINE := '' + ENDIF + //** P3N - 6/17/99 ADD LINE ITEM GLASS DESC TO INV/DEL... FOR IOLA + IF AT(MGL_LINE_DESC, ITEM_LINE) = 0 //** P3N - 6/17/99 + ITEM_LINE := ITEM_LINE + ' ' + TRIM(MGL_LINE_DESC) //** P3N - 6/17/99 + ENDIF + IF !EMPTY( (SELFILE)->LINE_DESC ) + ITEM_LINE := ITEM_LINE + '~' + TRIM( (SELFILE)->LINE_DESC) + ' ' + //** P3N - 4/2/98 + //** MOVED TO DENOTE '(S)' REGARDLESS OF THE ACTUAL SIZE! + IF (SELFILE)->IN_STOCK$'Y' // ONLY IN_STOCK WINDOWS FIT HERE! + ITEM_LINE := TRIM(ITEM_LINE) + '~(S)' + ENDIF + ENDIF + ITEMPRNT2 := ALLTRIM(PRNT_SIZE(ACT_WIDTH, ACT_HEIGHT)) + IF ALLTRIM(ITEMPRNT1) == ALLTRIM(ITEMPRNT2) + ELSEIF (SELFILE)->IN_STOCK$'Y' // ONLY IN_STOCK WINDOWS FIT HERE! + //** P3N - 4/9/98 IS '(S)' ALREADY DENOTED FOR STOCK WINDOWS! + IF AT( '(S)', ITEM_LINE) = 0 + //** P3N - 4/9/98 NO - INCLUDE THE '(S)' TO DENOTE STOCK! + ITEM_LINE := TRIM(ITEM_LINE) + '~(S)' + ENDIF + ELSEIF ITEM_CAT_CODE = 'STD' + IF MHOME_LOC_CODE = 'KC' + // DO NOT PRINT DOOR SIZE ON THE ORDER FOR KC - 10-01-97 + ELSE + ITEM_LINE := TRIM(ITEM_LINE) + ' (DOOR~SIZE=~' + ITEMPRNT2 + ')' + ENDIF + ENDIF + ITEM_LINE := ITEM_LINE + BAL_INFO + // PRINT THE ORIEL BANNER + IF (SELFILE)->ORIEL_SIZE$'Y' ; + .AND. !(OR_TOP = 1 .AND. OR_BOT = 1) + WORKVAR := HS_PRNT + IF WORKVAR = NIL + WORKVAR := '' + ENDIF + //** - P3N 2/26/98 REMOVED THE HALF-SIZE PRINTING PER SCOTT - KC + //** - P3N 7/7/98 REINSTATED THE HALF-SIZE PRINTING LINDS/IOLA IC POS + //** - P3N 7/24/98 REMOVED THE HALF-SIZE PRINTING PER SCOTT/ellen - KC + IF MHOME_LOC_CODE = 'KC' + //** - P3N 11/11/98 REINSTATED THE HALF-SIZE PRINTING AT KC FOR + //** - EVERYTHING NOT PRODUCED AT KC + IF AT('**Oriel**', ITEM_LINE) > 0 + ELSE + ITEM_LINE := TRIM(ITEM_LINE) + ' ' + ' **~Oriel~** ' + ENDIF + IF MHOME_LOC_CODE == MLOC_CODE + ELSE + ITEM_LINE := TRIM(ITEM_LINE) + ' ' + WORKVAR + ENDIF + ELSEIF AT('**Oriel**', ITEM_LINE) > 0 + ITEM_LINE := TRIM(ITEM_LINE) + ' ' + WORKVAR + ELSE + ITEM_LINE := TRIM(ITEM_LINE) + ' ' + ' **~Oriel~** ' + WORKVAR + ENDIF + ENDIF + ITEM_LINE := ITEM_LINE + SPACE( 60 - LEN(ITEM_LINE) ) + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'V' , SELFILE ) + AADD(DATA_ARR[7], {MLOC_CODE, PRNT_DESC, ; + ITEM_LINE, AMTVAR, DISC_ARR, PROD_MEMO, ; + QUANTITY, WHERE_FROM, MLINE, PROD_CODE, ; + SHP_QTY, XFACTOR, WORKSPECS, NIL, ; + DO_SCRNS_ONLY, MPWHERE, INV_QTY}) + ENDIF + // THE FOLLOWING "CHUNKS" ONLY APPLY TO IN-HOUSE PRODUCTION ITEMS + // WHICH ARE NOT IN STOCK - EXCEPT for the screens. ALL screens + // will get a SCREEN copy regardless of the MFG. location or whether + // it is a STOCK item. + // THE SIZE AND SPECS ON HERE ARE THE PRODUCTION FRAME SAW SETTINGS + // 2. SET UP THE FRAME COPY CHUNK + IF ADDL_MODE + ELSE + // Get the cutting specs for the screen. + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'N', SELFILE ) + IF EMPTY(WORKSPECS) + //Create ONLY a screen copy when NOT same MFG. Loc & stock item! 7-30-97 + IF (MLOC_CODE = MHOME_LOC_CODE .AND. (SELFILE)->IN_STOCK <> 'Y') + ELSE + DO_SCRNS_ONLY:=.T. + ENDIF + ENDIF + ENDIF + IF (MLOC_CODE = MHOME_LOC_CODE .AND. (SELFILE)->IN_STOCK <> 'Y') .OR. ; + DO_SCRNS_ONLY + DO CASE + CASE ITEM_CAT_CODE = 'SCREENS' + CASE ITEM_CAT_CODE = 'STORMS' + CASE ITEM_CAT_CODE = 'EXPAND' + CASE ITEM_CAT_CODE = 'STPW' + OTHERWISE + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'F', SELFILE ) + IF DO_SCRNS_ONLY + ELSE // BYPASS THE FRAME COPY + AADD(DATA_ARR[2], {MLOC_CODE, PRNT_DESC, PROD_LINE, AMTVAR, ; + DISC_ARR , PROD_MEMO, QUANTITY ,WHERE_FROM, MLINE, ; + PROD_CODE, SHP_QTY, XFACTOR, WORKSPECS, NIL, ; + DO_SCRNS_ONLY, MPWHERE, INV_QTY }) + ENDIF + ENDCASE + // 3. SET UP THE SASH COPY CHUNK + // DON'T WORRY ABOUT RANCH SLIDERS - STORMS ONLY (NO SASH ON STROMS) + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'I', SELFILE ) + IF (PRODUCT->MACH_SASHW = 0 .AND. PRODUCT->MACH_SASHH == 0) ; + .AND. WORKSPECS = NIL + // NO SASH ADJUSTMENT -- NO SASH COPY PRINTED + ELSEIF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') + WK_QTY := (SELFILE)->QUANTITY + IF RAN_SLID + WK_HEIGHT := PRODUCT->MACH_SASHW + (SELFILE)->ACT_WIDTH + WK_WIDTH := PRODUCT->MACH_SASHH + (SELFILE)->ACT_HEIGHT + ELSE + WK_WIDTH := PRODUCT->MACH_SASHW + (SELFILE)->ACT_WIDTH + WK_HEIGHT := PRODUCT->MACH_SASHH + (SELFILE)->ACT_HEIGHT + ENDIF + IF MULL_REQ // ONLY CENTER VERTICAL TYPE MULLS GOT THIS FAR + WK_QTY := WK_QTY * 2 + WK_WIDTH := WK_WIDTH - MMULL_SASH + ITEM_LINE := PRNT_SIZE(WK_WIDTH/2, WK_HEIGHT) + ELSE + ITEM_LINE := PRNT_SIZE(WK_WIDTH, WK_HEIGHT) + ENDIF + //** SET SASH LINE DESCR. PRINTING FOR ATTRIBUTES - LINDS + IF EMPTY(SASH_LINE) //** P3N - 5/2/00 + SASH_LINE := ITEM_LINE //** P3N - 5/2/00 + ENDIF //** P3N - 5/2/00 + + IF DO_SCRNS_ONLY + ELSE // BYPASS THE SASH COPY +//**P3N5200 AADD(DATA_ARR[3], {MLOC_CODE, PRNT_DESC, ITEM_LINE, AMTVAR,; + AADD(DATA_ARR[3], {MLOC_CODE, PRNT_DESC, SASH_LINE, AMTVAR, ; + DISC_ARR, PROD_MEMO, (SELFILE)->QUANTITY, WHERE_FROM, ; + MLINE, PROD_CODE, SHP_QTY, XFACTOR, WORKSPECS, ; + NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY}) + ENDIF + ENDIF + // 4. SET UP THE GLASS COPY CHUNK + // NO RANCH SLIDER CONCERNS BECAUSE ONLY APPLICABLE TO STORMS + // HOWEVER, IF ALWAYS A SLIDER, SPECIAL PROCESSING IS REQUIRED + // NOTE THAT THE QUANTITY IS CHANGED TO REFLECT XTRA WINDOWS HERE + // SO WE PRINT THE TOTAL REQUIRED. NO REFERENCE TO TWIN, ETC IN GLASS DESC! + IF MHOME_LOC_CODE = 'KC' + MWORK_DESC := MLINE_DESC + ELSE + MWORK_DESC := ' ' + ENDIF + TOTWIND := XFACTOR + 1 + SELECT CATEGORY + S_REC := RECNO() + IF !EMPTY(PAR_CAT_CODE) + SEEK PAR_CAT_CODE + ELSE + SEEK ITEM_CAT_CODE + ENDIF + MNUM_GLASS := CATEGORY->NUM_GLASS + GOTO S_REC + SELECT (SELFILE) + GLT_WD = NIL + GLT_HT = NIL + GLT_QTY = 0 + GLB_WD = NIL + GLB_HT = NIL + GLB_QTY = 0 + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'G', SELFILE ) + IF (PRODUCT->MACH_GLASW = 0 .AND. PRODUCT->MACH_GLASH == 0 ; + .AND. WORKSPECS = NIL) ; + .OR. ( ALLTRIM(ITEM_CAT_CODE) = 'STORMS' .AND. ; + MHOME_LOC_CODE <> 'IOLA' ) + // NO GLASS ADJUSTMENT -- NO GLASS COPY PRINTED + // STORM WINDOWS DON'T GET A GLASS ADJUSTMENT - BOXES USED IN + // THE STORM COPY. FORCE TO LOGIC BELOW + ELSE + IF ITEM_CAT_CODE = 'STORMS' .AND. MHOME_LOC_CODE = 'IOLA' + DO_GLASS_PRNT := .F. + ELSE + DO_GLASS_PRNT := .T. + ENDIF + WK_QTY := (SELFILE)->QUANTITY * TOTWIND + IF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') + MNUM_GLASS := CATEGORY->NUM_GLASS + IF MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL' + MNUM_GLASS := MNUM_GLASS * 2 // SINCE A MULL, EXTRA GLASS REQUIRED + ENDIF + IF (GLASS_COPY .AND. CATEGORY->(DBSEEK(ITEM_CAT_CODE)) ; + .AND. MNUM_GLASS > 0) .OR. ; + (ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; + .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW' ) + WK_ADJ_WIDTH := PRODUCT->MACH_GLASW + WK_ADJ_HEIGHT := PRODUCT->MACH_GLASH + // WK_WIDTH/WK_HEIGHT REPRESENT ENTIRE "GLASS AREA REQUIRED" + // ALL AREAS ARE 'NON SLIDER SPECIFIC NOW' +//** IF RAN_SLID + IF RAN_SLID .OR. IS_ALWAYS_SLID //** P3N - 2/8/99 + WK_HEIGHT := WK_ADJ_WIDTH + (SELFILE)->ACT_WIDTH + WK_WIDTH := WK_ADJ_HEIGHT + (SELFILE)->ACT_HEIGHT + ELSE + WK_WIDTH := WK_ADJ_WIDTH + (SELFILE)->ACT_WIDTH + WK_HEIGHT := WK_ADJ_HEIGHT + (SELFILE)->ACT_HEIGHT + ENDIF + IF MULL_REQ + WK_WIDTH := WK_WIDTH - MMULL_GLASS + ENDIF + IF (OR_TOP = 0 .AND. OR_BOT = 0) .OR. ; // EQUAL LITE WINDOW + (OR_TOP = 1 .AND. OR_BOT = 1) + // 2 PIECES OF GLASS AT 1/2 SIZE EACH + IF MULL_REQ .OR. IS_ALWAYS_SLID + WK_WIDTH := WK_WIDTH / MNUM_GLASS + ELSE + WK_HEIGHT := WK_HEIGHT / MNUM_GLASS + ENDIF + WK_QTY := WK_QTY * MNUM_GLASS + GLT_QTY := WK_QTY + GLB_QTY := 0 + GLT_WD = WK_WIDTH + GLT_HT = WK_HEIGHT + GLB_WD = WK_WIDTH + GLB_HT = WK_HEIGHT + IF (PRODUCT->MACH_GLASW = 0 .AND. PRODUCT->MACH_GLASH == 0) + GLASS_PRNT = '' + IF EMPTY(BAL_INFO) + // NO BALANCE SIZE INFO - NOT A STD_SASH + // DETERMINE THE GLASS SIZES FOR STD_SASH + ELSE + GLASS_PRNT := PRNT_SIZE(GLT_WD, GLT_HT, ' x ') + ENDIF + ELSE + GLASS_PRNT := PRNT_SIZE(WK_WIDTH, WK_HEIGHT) + ENDIF + IF (SELFILE)->(FIELDPOS('LDESC_COPY')) > 0 //** P3N - 5/4/99 + IF AT('G', (SELFILE)->LDESC_COPY) > 0 //** P3N - 5/4/99 + IF EMPTY(GLASS_PRNT) //** P3N - 5/10/99 + WK_QTY := 0 //** P3N - 5/10/99 + ENDIF //** P3N - 5/10/99 + GLASS_PRNT := GLASS_PRNT +' '+ MGL_LINE_DESC //** P3N - 6/7/99 + ENDIF //** P3N - 5/4/99 + ENDIF //** P3N - 5/4/99 + IF DO_SCRNS_ONLY + ELSE // BYPASS THE GLASS COPY + IF DO_GLASS_PRNT + AADD(DATA_ARR[4], {MLOC_CODE, PRNT_DESC, GLASS_PRNT, ; + AMTVAR, DISC_ARR , PROD_MEMO, ; + WK_QTY ,WHERE_FROM, ; + STR(VAL(MLINE)+.00,7,2), PROD_CODE, ; + SHP_QTY, 0, WORKSPECS, MWORK_DESC, ; + DO_SCRNS_ONLY, MPWHERE, INV_QTY }) + ENDIF + ENDIF + ELSE // ORIEL WINDOW + GLASS_LINE := '' + GLT_QTY := QUANTITY + GLB_QTY := QUANTITY + GLT_WD = WK_WIDTH + GLT_HT = WK_HEIGHT + GLB_WD = WK_WIDTH + GLB_HT = WK_HEIGHT + IF OR_TOP > 0 + // DO TOP GLASS FIRST (OR LEFT GLASS ON SLIDER) + IF OR_GLASS <> 0 // PREDETERMINED SIZE FOR TOP + IF IS_ALWAYS_SLID + GLT_WD = OR_GLASS + GLT_HT = WK_HEIGHT // ADJUSTED ABOVE FOR CUT + ELSE + GLT_WD = WK_WIDTH // ADJUSTED ABOVE FOR CUT + GLT_HT = OR_GLASS + ENDIF + ELSE + IF IS_ALWAYS_SLID + GLT_WD = (SELFILE)->ACT_WIDTH - OR_BOT + ( WK_ADJ_WIDTH / 2 ) + GLT_HT = WK_HEIGHT // ADJUSTED ABOVE FOR CUT + ELSE + GLT_WD = WK_WIDTH // ADJUSTED ABOVE FOR CUT + GLT_HT = (SELFILE)->ACT_HEIGHT - OR_BOT + ( WK_ADJ_HEIGHT / 2 ) + ENDIF + IF EMPTY(BAL_INFO) //** P3N - 03/30/98 + // NO BALANCE SIZE INFO - NOT A STD_SASH + ELSEIF EMPTY(WORKSPECS) + // NO CUTTING SPEC INFO + ELSE // DETERMINE THE GLASS TOP SIZE FOR STD_SASH + IF LEN(WORKSPECS) < 2 .OR. EMPTY(WORKSPECS[1,6]) .OR. EMPTY(WORKSPECS[2,6]) + ERR_BOX(' Order line - ' + STR( (SELFILE)->LINE_NUM, 3) + ; + ' / Model - ' + (SELFILE)->PROD_CODE + ' Contains', ; + ' Invalid or missing GLASS Cutting Specs! ', ' ', ; + ' PRODUCTION GLASS COPY may NOT be accurate!') + ELSE + GLT_WD := EVAL_MATH( WORKSPECS[1,6], G_ARR, '_CUT_SP', ; + WORKSPECS[1,1], SELFILE,'CUT') + ADJ_HT := EVAL_MATH( WORKSPECS[2,6], G_ARR, '_CUT_SP', ; + WORKSPECS[2,1], SELFILE,'CUT') +//** GLT_HT := ADJ_HT - OR_BOT //** P3N - 07/05/01 + GLT_HT := ADJ_HT - OR_BOT - STDADJ //** P3N - 07/05/01 + WORKSPECS[2,7] := GLT_HT + ENDIF + ENDIF + ENDIF + IF (PRODUCT->MACH_GLASW = 0 .AND. PRODUCT->MACH_GLASH == 0) + GLASS_PRNT := '' + IF EMPTY(BAL_INFO) //** P3N - 03/30/98 + // NO BALANCE SIZE INFO - NOT A STD_SASH + // DETERMINE THE GLASS SIZES FOR STD_SASH + IF RAN_SLID //** P3N - 02/01/99 + GLASS_PRNT := PRNT_SIZE(GLT_WD, GLT_HT, ' x ') + ELSEIF IS_ALWAYS_SLID //** P3N - 02/02/99 + GLASS_PRNT := PRNT_SIZE(GLT_WD, GLT_HT, ' x ') + ENDIF + ELSE + GLASS_PRNT := PRNT_SIZE(GLT_WD, GLT_HT, ' x ') + ENDIF + ELSE + GLASS_PRNT := GLASS_LINE + PRNT_SIZE(GLT_WD, GLT_HT) + EX_DESC + ENDIF + IF (SELFILE)->(FIELDPOS('LDESC_COPY')) > 0 //** P3N - 5/4/99 + IF AT('G', (SELFILE)->LDESC_COPY) > 0 //** P3N - 5/4/99 + IF EMPTY(GLASS_PRNT) //** P3N - 5/10/99 + WK_QTY := 0 //** P3N - 5/10/99 + ENDIF //** P3N - 5/10/99 + //** GLASS_PRNT := GLASS_PRNT + MLINE_DESC //** P3N - 5/4/99 + GLASS_PRNT := GLASS_PRNT+' '+ MGL_LINE_DESC //** P3N - 6/7/99 + ENDIF //** P3N - 5/4/99 + ENDIF //** P3N - 5/4/99 + IF DO_SCRNS_ONLY + ELSE // BYPASS THE GLASS COPY + IF DO_GLASS_PRNT + AADD(DATA_ARR[4], {MLOC_CODE, PRNT_DESC, GLASS_PRNT, ; + AMTVAR, DISC_ARR , PROD_MEMO, ; + WK_QTY ,WHERE_FROM, ; + STR(VAL(MLINE)+.00,7,2), PROD_CODE, ; + SHP_QTY, 0, WORKSPECS, MWORK_DESC, ; + DO_SCRNS_ONLY, MPWHERE, INV_QTY}) + ENDIF + ENDIF + // DO BOTTOM PART NEXT. + IF OR_GLASS <> 0 + IF IS_ALWAYS_SLID + GLB_WD = WK_WIDTH - OR_GLASS + GLB_HT = WK_HEIGHT + ELSE + GLB_WD = WK_WIDTH + GLB_HT = WK_HEIGHT - OR_GLASS + ENDIF + ELSE + IF IS_ALWAYS_SLID + GLB_WD = (SELFILE)->ACT_WIDTH - OR_TOP + ( WK_ADJ_WIDTH / 2 ) + GLB_HT = WK_HEIGHT // ADJUSTED ABOVE FOR CUT + ELSE + GLB_WD = WK_WIDTH // ADJUSTED ABOVE FOR CUT + GLB_HT = (SELFILE)->ACT_HEIGHT - OR_TOP + ( WK_ADJ_HEIGHT / 2 ) + ENDIF + ENDIF + IF EMPTY(BAL_INFO) //** P3N - 03/30/98 + // NO BALANCE SIZE INFO - NOT A STD_SASH + ELSEIF EMPTY(WORKSPECS) + // NO CUTTING SPEC INFO + ELSE // DETERMINE THE GLASS BOTT SIZE FOR STD_SASH + IF LEN(WORKSPECS) < 2 .OR. EMPTY(WORKSPECS[1,6]) .OR. EMPTY(WORKSPECS[2,6]) + ELSE + GLB_WD := EVAL_MATH( WORKSPECS[1,6], G_ARR, '_CUT_SP', ; + WORKSPECS[1,1], SELFILE,'CUT') + ADJ_HT := EVAL_MATH( WORKSPECS[2,6], G_ARR, '_CUT_SP', ; + WORKSPECS[2,1], SELFILE,'CUT') + GLB_HT := ADJ_HT - OR_TOP + WORKSPECS[2,7] := GLB_HT + ENDIF + ENDIF + IF (PRODUCT->MACH_GLASW = 0 .AND. PRODUCT->MACH_GLASH == 0) + GLASS_PRNT := '' + IF EMPTY(BAL_INFO) //** P3N - 03/30/98 + // NO BALANCE SIZE INFO - NOT A STD_SASH + ELSE // DETERMINE THE GLASS SIZES FOR STD_SASH + GLASS_PRNT := PRNT_SIZE(GLB_WD, GLB_HT, ' x ') + ENDIF + ELSE + GLASS_PRNT := GLASS_LINE + PRNT_SIZE(GLB_WD, GLB_HT) + EX_DESC + ENDIF + IF (SELFILE)->(FIELDPOS('LDESC_COPY')) > 0 //** P3N - 5/4/99 + IF AT('G', (SELFILE)->LDESC_COPY) > 0 //** P3N - 5/4/99 + IF EMPTY(GLASS_PRNT) //** P3N - 5/10/99 + WK_QTY := 0 //** P3N - 5/10/99 + ENDIF //** P3N - 5/10/99 + //** GLASS_PRNT := GLASS_PRNT + MLINE_DESC //** P3N - 5/4/99 + GLASS_PRNT := GLASS_PRNT+' '+ MGL_LINE_DESC //** P3N - 6/7/99 + ENDIF //** P3N - 5/4/99 + ENDIF //** P3N - 5/4/99 + IF DO_SCRNS_ONLY + ELSE // BYPASS THE GLASS COPY + // DON'T DO SECOND LINE IF ALL SPECS COME FROM CUT_SPEC_ARR + IF DO_GLASS_PRNT .AND. ; + WK_ADJ_WIDTH <> 0 .AND. ; + WK_ADJ_HEIGHT <> 0 + AADD(DATA_ARR[4], {MLOC_CODE, PRNT_DESC, GLASS_PRNT, ; + AMTVAR, DISC_ARR , PROD_MEMO, ; + WK_QTY ,WHERE_FROM, ; + STR(VAL(MLINE)+.00,7,2), PROD_CODE,; + SHP_QTY, 0, WORKSPECS, MWORK_DESC,; + DO_SCRNS_ONLY, MPWHERE, INV_QTY }) + ENDIF + ENDIF + + ELSE // ORIEL BOTTOM IS > 0 AND ORIEL TOP = 0 + // SHOULDN'T EVER GET TO HERE-ADJUSTED IN CK_ORIEL() + //** P3N - 9/29/98 + ERR_BOX(' Order line - ' + STR( (SELFILE)->LINE_NUM, 3) + ; + ' / Model - ' + (SELFILE)->PROD_CODE + ' Contains', ; + ' Invalid ORIEL Measurements - Oriel Top can NOT be 0 !', ' ', ; + ' PRODUCTION BREAKDOWNS may NOT be accurate!') + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF + // 5. PROD SCREEN PRINT LINES + IF ADDL_MODE + ELSE + IF XL_EXISTS('SCREENS') + BYPASS_SCREEN_PAR := .T. + ELSE + BYPASS_SCREEN_PAR := .F. + ENDIF + ENDIF + BO_ITEM := '(' + (SELFILE)->HOW_MEAS + ') ' + BO_ITEM := BO_ITEM + (SELFILE)->ENTRY_SIZE + IF BYPASS_SCREEN_PAR + ELSE + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'N', SELFILE ) + MNUM_SCREEN := CATEGORY->NUM_SCREEN + IF MNUM_SCREEN = 0 + MNUM_SCREEN := 1 + ENDIF + IF ALLTRIM(ITEM_CAT_CODE) == 'SCREENS' ; + .OR. WORKSPECS <> NIL + AADD(DATA_ARR[5], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; + MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; + OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; + AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; + .F., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR) ) + //** P3N - 7/21/99 ARE THERE FLANKERS TO PROCESS FOR BACKORDER + IF ADDL_MODE + PARORD := (SELFILE)->ORDER_NUM //** P3N - 7/22/99 + PARPROD := (SELFILE)->PAR_PROD //** P3N - 7/22/99 + PARLINE := STR((SELFILE)->LINE_NUM) //** P3N - 7/22/99 + PARELM := ASCAN(PARGARR,{|X| X[1] == PARORD .AND. ; + X[2] == PARPROD .AND. ; + X[3] == PARLINE } ) + IF PARELM > 0 + FLNKSPECS := GET_THESE_SPECS( PARGARR[PARELM,4], CUT_SPEC_ARR, 'N', 'ORD_LINES') + GETFLANK := PARGARR[PARELM,4] + ELSE + FLNKSPECS := {} + GETFLANK := {} + ENDIF + FLANKSCR := BKO_FLANKSCR(GETFLANK) + IF FLANKSCR[1] //**FLANKER SCREENS TO CONSIDER ON BACKORDER + FSARR := ACLONE(DISC_ARR) + FSARR[3] := FLANKSCR[2] + //** AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, .F., WORKSPECS, ; + AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, .F., FLNKSPECS, ; + MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; + OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; + AMTVAR, FSARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; + .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR, FLANKSCR) ) + ENDIF //** P3N - 1/27/99 + ENDIF //** P3N - 7/22/99 + ELSE + SCRNINFO := TOL_SCREENS(SELFILE) //** P3N - 9/16/98 + IF EMPTY(SCRNINFO) //** P3N - 9/16/98 + ELSE //** P3N - 9/16/98 + IF EMPTY(SCRNINFO[1]) //TOL SCREEN QTY //** P3N - 9/16/98 + ELSE //** P3N - 9/16/98 + //** P3N BACKORDER SCREEN COPIES WHEN NO CUTTING SPECS + AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; + MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; + OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; + AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; + .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR) ) + //** P3N - 1/27/99 ARE THERE FLANKERS TO PROCESS FOR BACKORDER + FLANKSCR := BKO_FLANKSCR(G_ARR) + IF FLANKSCR[1] //**FLANKER SCREENS TO CONSIDER ON BACKORDER + FSARR := ACLONE(DISC_ARR) + FSARR[3] := FLANKSCR[2] + AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; + MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; + OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; + AMTVAR, FSARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; + .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR, FLANKSCR) ) + ENDIF //** P3N - 1/27/99 + ENDIF //** P3N - 9/16/98 + ENDIF //** P3N - 9/16/98 + ENDIF + ENDIF + // 6. PROD STORMS PRINT LINES + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'S', SELFILE ) + IF (ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; + .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW') ; + .OR. WORKSPECS <> NIL + IF ADDL_MODE .AND. ALLTRIM(ITEM_CAT_CODE) == 'SCREENS' + //** P3N - 3/24/99 + //** DO NOT PRODUCE STORM COPY WHEN ADDL SCREEN PRODUCT + ELSE + WK_QTY := (SELFILE)->QUANTITY + IF (SELFILE)->CLEAR_SS$'Y' .AND. MHOME_LOC_CODE = 'IOLA' + GLASS_PRNT := BEST_BOX(GLT_QTY, GLT_WD, GLT_HT, GLB_QTY, GLB_WD, GLB_HT) + ELSE + GLASS_PRNT := '' + ENDIF + IF ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; + .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW' + STORM_PRNT := PROD_LINE + ' ' + GLASS_PRNT + ELSE + STORM_PRNT := '' + ENDIF + IF DO_SCRNS_ONLY + //** P3N - 9/11/98 + //** THIS IS FOR BACKORDER STORMS NOT AT THE MFG. LOC +//** AADD(DATA_ARR[11], {MLOC_CODE, PRNT_DESC, STORM_PRNT, AMTVAR, ; + AADD(DATA_ARR[11], {MLOC_CODE, PRNT_DESC, ITEM_LINE, AMTVAR, ; + DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; + MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; + WORKSPECS, NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY} ) + ELSE + IF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') + AADD(DATA_ARR[6], {MLOC_CODE, PRNT_DESC, STORM_PRNT, AMTVAR, ; + DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; + MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; + WORKSPECS, NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY} ) + ELSE + AADD(DATA_ARR[6], {MLOC_CODE, PRNT_DESC, ; + PROD_LINE + ' ** MANUAL BREAKDOWN REQUIRED Due to MULLS **', ; + AMTVAR, DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; + MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; + WORKSPECS, NIL, DO_SCRNS_ONLY , MPWHERE, INV_QTY}) + ENDIF + ENDIF + ENDIF + ENDIF + // 8. EXPANDERS REQUIRED SECTION + // ONLY INCLUDE THE ORDER LINE ITEMS (EXTRAS APPEAR IN THE DESCRIPTION) + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'E', SELFILE ) + IF MHOME_LOC_CODE <> 'LINDS' ; + .AND. ( EXP_REQ .OR. WORKSPECS <> NIL ) + // EXPANDER SIZES ARE STORED AS ACTUAL CALLED IN SIZES + WK_QTY := (SELFILE)->QUANTITY + IF ITEM_CAT_CODE = 'EXPANDR' //** P3N - 9/30/99 + //** IF CATEGORY EXPANDER THE SIZE WILL //** P3N - 9/30/99 + //** BE DEFINED IN THE CUTTING SPECS. //** P3N - 9/30/99 + PRNT_EXP := '' //** P3N - 9/30/99 + ELSE //** P3N - 9/30/99 + PRNT_EXP := PRNT_SIZE( EXP_WK_WIDTH, NIL) + ENDIF //** P3N - 9/30/99 + IF DO_SCRNS_ONLY + ELSE // BYPASS THE EXPANDER COPY + AADD(DATA_ARR[8], {MLOC_CODE, PRNT_DESC, PRNT_EXP, AMTVAR, ; + DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; + MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; + WORKSPECS, NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY}) + ENDIF + ENDIF + ELSE //** P3N BACKORDER SCREEN COPIES WHEN MFG. LOC IS NOT THE SAME + BO_ITEM := '(' + (SELFILE)->HOW_MEAS + ') ' + BO_ITEM := BO_ITEM + (SELFILE)->ENTRY_SIZE + CK_BKO_SCRNS := .F. + IF ALLTRIM(ITEM_CAT_CODE) == 'SCREENS' //** P3N 9/15/98 - HAPY BDAY MOM! + IF EMPTY(DATA_ARR[5]) + CK_BKO_SCRNS := .T. + ELSEIF EMPTY( ASCAN(DATA_ARR[5], {|X| X[9] + X[10] == ; + STR((SELFILE)->LINE_NUM, 3) + (SELFILE)->PROD_CODE}) ) + CK_BKO_SCRNS := .T. + ELSE + CK_BKO_SCRNS := .F. + ENDIF + ELSE + SCRNINFO := TOL_SCREENS(SELFILE) //** P3N - 9/16/98 + IF EMPTY(SCRNINFO) //** P3N - 9/16/98 + ELSE //** P3N - 9/16/98 + IF EMPTY(SCRNINFO[1]) //TOL SCREEN QTY //** P3N - 9/16/98 + ELSE //** P3N - 9/16/98 + //** P3N BACKORDER SCREEN COPIES WHEN NO CUTTING SPECS + AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; + MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; + OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; + AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; + .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR) ) + //** P3N - 1/27/99 ARE THERE FLANKERS TO PROCESS FOR BACKORDER + FLANKSCR := BKO_FLANKSCR(G_ARR) + IF FLANKSCR[1] //**FLANKER SCREENS TO CONSIDER ON BACKORDER + FSARR := ACLONE(DISC_ARR) + FSARR[3] := FLANKSCR[2] + AADD(DATA_ARR[10], SCREEN_CHUNK( SELFILE, ADDL_MODE, WORKSPECS, ; + MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; + OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; + AMTVAR, FSARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; + .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR, FLANKSCR) ) + ENDIF //** P3N - 1/27/99 + ENDIF //** P3N - 9/16/98 + ENDIF //** P3N - 9/16/98 + ENDIF //** 9/15/98 - HAPPY BDAY MOM + IF XL_EXISTS('SCREENS') + //** USE THE ADDL_LINES FOR SCREEN BACKORDER STUFF! + ELSEIF CK_BKO_SCRNS +//** WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'N', SELFILE ) + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'B', SELFILE ) + IF ALLTRIM(ITEM_CAT_CODE) == 'SCREENS' .OR. !EMPTY(WORKSPECS) + AADD( DATA_ARR[10], SCREEN_CHUNK(SELFILE, ADDL_MODE, WORKSPECS, ; + MULL_REQ, MULL_TYPE, IS_ALWAYS_SLID, OR_TOP, OR_BOT, ; + OR_SCR, BO_ITEM, BAL_INFO, RAN_SLID, MLOC_CODE, PRNT_DESC, ; + AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; + .T., XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, MNUM_GLASS, G_ARR) ) + ENDIF + ENDIF + //** P3N BACKORDER STORM COPIES WHEN MFG. LOC IS NOT THE SAME + // 11. PROD STORMS PRINT LINES FOR BACKORDERS + WORKSPECS := GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, 'S', SELFILE ) + IF ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; + .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW' ; + .OR. WORKSPECS <> NIL + WK_QTY := (SELFILE)->QUANTITY + IF (SELFILE)->CLEAR_SS$'Y' .AND. MHOME_LOC_CODE = 'IOLA' + GLASS_PRNT := BEST_BOX(GLT_QTY, GLT_WD, GLT_HT, GLB_QTY, GLB_WD, GLB_HT) + ELSE + GLASS_PRNT := '' + ENDIF + IF ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; + .OR. ALLTRIM(ITEM_CAT_CODE) == 'STPW' + STORM_PRNT := PROD_LINE + ' ' + GLASS_PRNT + ELSE + STORM_PRNT := '' + ENDIF + IF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') + AADD(DATA_ARR[11], {MLOC_CODE, PRNT_DESC, STORM_PRNT, AMTVAR, ; + DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; + MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; + WORKSPECS, NIL, DO_SCRNS_ONLY, MPWHERE, INV_QTY} ) + ELSE + AADD(DATA_ARR[11], {MLOC_CODE, PRNT_DESC, ; + PROD_LINE + ' ** MANUAL BREAKDOWN REQUIRED Due to MULLS **', ; + AMTVAR, DISC_ARR, PROD_MEMO, WK_QTY ,WHERE_FROM, ; + MLINE, PROD_CODE, SHP_QTY, XFACTOR, ; + WORKSPECS, NIL, DO_SCRNS_ONLY , MPWHERE, INV_QTY}) + ENDIF + ENDIF // END STORMS + ENDIF // ENDIF (MLOC_CODE = MHOME_LOC_CODE) + DO_SCRNS_ONLY := .F. //7-30-97 + SELECT (SELFILE) + SKIP 1 +ENDDO +//** (CUR_MAST)->ORD_L_TTL and (CUR_MAST)->QUOTE_PRIC ( QUOTED PRICE ) +//** P3N - 09/26/06 ADD THE FULE SURCHARGE INTO THE GL_ARR AS NECESSARY + +IF ADDL_MODE + // NO FUEL SURCHARGE ON ADDL LINE ITEM (XL) - ONLY ON OL PASS +ELSEIF EMPTY( (CUR_MAST)->FUEL_CHRG ) //** P3N - 09/26/06 + //** No Fuel Surcharge - Continue + //** may be a del_chg (gl-521 amt) from category [$frt_amt or %frt_pct]? +ELSE //** P3N - 09/26/06 + ELEM := ASCAN(GL_ARR, {|X| X[1] = '521 '} ) //** P3N - 09/26/06 + IF ELEM > 0 //** P3N - 09/26/06 + GL_ARR[ELEM, 2] := GL_ARR[ELEM, 2] + (CUR_MAST)->FUEL_CHRG + ELSE //** P3N - 09/26/06 + AADD(GL_ARR, { '521 ', (CUR_MAST)->FUEL_CHRG, , 'I' } ) + ENDIF //** P3N - 09/26/06 +ENDIF //** P3N - 09/26/06 + +SELECT(SV_SEL) +RETURN DATA_ARR +//********************************************************** +// P3N - 1/27/99 ARE THERE FLANKER SCREENS FOR BACKORDER PRINTING??? +//********************************************************** +FUNCTION BKO_FLANKSCR(GETARR) +LOCAL ELM := 0, RETVAL := .F., FLANKERS := '' +ELM := ASCAN(GETARR, {|X| X[1] = 'FLANKERS'} ) +IF EMPTY(ELM) + //** NO FLANKERS +ELSE + FLANKERS := ALLTRIM(GETARR[ELM,4]) + ELM := ASCAN(GETARR, {|X| X[1] = 'FLANK SCRN'}) + IF EMPTY(ELM) + RETVAL := .F. + FLANKERS := '' + ELSEIF ALLTRIM(GETARR[ELM,4]) == 'YES' + RETVAL := .T. + ELSE + RETVAL := .F. + FLANKERS := '' + ENDIF +ENDIF +RETURN {RETVAL, FLANKERS} +//********************************************************** +// P3N - BUILD THE SCREEN CHUNK FOR ORDER / BACKORDER PRINTING +//********************************************************** +FUNCTION SCREEN_CHUNK(SELFILE, ADDL_MODE, WORKSPECS, MULL_REQ, MULL_TYPE, ; + IS_ALWAYS_SLID, OR_TOP, OR_BOT, OR_SCR, BO_ITEM, BAL_INFO, ; + RAN_SLID, MLOC_CODE, PRNT_DESC, ; + AMTVAR, DISC_ARR, PROD_MEMO, WHERE_FROM, MLINE, PROD_CODE, ; + BACKORD, XFACTOR, DO_SCRNS_ONLY, MPWHERE, MWORK_DESC, MNUM_SCREEN, ; + MNUM_GLASS, G_ARR, FLANKSCR) + // NEW LOGIC TO ADD ADJUSTMENT HERE AND NOT IN CGWPRPO. +LOCAL PASSARR := {} , OR_DESC := '' ,SHP_QTY := 0 , SCRINFO := {} +LOCAL WK_WIDTH := (SELFILE)->PRD_WIDTH +LOCAL WK_HEIGHT := (SELFILE)->PRD_HEIGHT +LOCAL WK_ADJ_WIDTH := 0, WK_QTY := 0, INV_QTY := 0 +LOCAL WK_ADJ_HEIGHT := 0, WORKVAR, SCREEN_LINE, ELM3 +LOCAL ITEM_CAT_CODE := GET_CATCODE( (SELFILE)->PROD_CODE) +LOCAL OLQTY := 0 , NUM_IN_SPEC := 0 //**P3N - 9/22/98 HAPPY BDAY CINDY +LOCAL ELM := 0, FLANKERS := '', TOLKEY //** P3N -11/3/98 +LOCAL OSTKEY := (SELFILE)->ORDER_NUM + STR((SELFILE)->LINE_NUM, 3) + 'SCREENS' +LOCAL OSTFSK := (SELFILE)->ORDER_NUM + STR((SELFILE)->LINE_NUM, 3) + 'SCRFLNK' +LOCAL QTYARR := GET_OSTQTY(SELFILE), BKOFLNKSCR := .F. +IF EMPTY(FLANKSCR) //** P3N - 1/27/99 + IF EMPTY(QTYARR) //** P3N - 12/3/98 + SHP_QTY := 0 //** P3N - 12/3/98 + INV_QTY := 0 //** P3N - 12/3/98 + ELSE //** P3N - 12/3/98 + SHP_QTY := QTYARR[1] //** P3N - 12/3/98 + INV_QTY := QTYARR[2] //** P3N - 12/3/98 + ENDIF //** P3N - 12/3/98 + IF EMPTY(SHP_QTY) .OR. ITEM_CAT_CODE <> 'SCREENS' + QTYARR := GET_OSTQTY(SELFILE, OSTKEY ) + IF EMPTY(QTYARR) //** P3N - 12/3/98 + SHP_QTY := 0 //** P3N - 12/3/98 + INV_QTY := 0 //** P3N - 12/3/98 + ELSE //** P3N - 12/3/98 + SHP_QTY := QTYARR[1] //** P3N - 12/3/98 + INV_QTY := QTYARR[2] //** P3N - 12/3/98 + ENDIF //** P3N - 12/3/98 + ENDIF +ELSEIF FLANKSCR[1] //** P3N - 1/27/99 + BKOFLNKSCR := .T. //** P3N - 1/27/99 + QTYARR := GET_OSTQTY(SELFILE, OSTFSK ) + IF EMPTY(QTYARR) //** P3N - 1/27/99 + SHP_QTY := 0 //** P3N - 1/27/99 + INV_QTY := 0 //** P3N - 1/27/99 + ELSE //** P3N - 1/27/99 + SHP_QTY := QTYARR[1] //** P3N - 1/27/99 + INV_QTY := QTYARR[2] //** P3N - 1/27/99 + ENDIF //** P3N - 1/27/99 +ENDIF //** P3N - 1/27/99 +IF EMPTY(MNUM_SCREEN) + MNUM_SCREEN := CATEGORY->NUM_SCREEN + IF MNUM_SCREEN = 0 + MNUM_SCREEN := 1 + ENDIF +ENDIF +IF EMPTY(MNUM_GLASS) + MNUM_GLASS := CATEGORY->NUM_GLASS +ENDIF +IF ADDL_MODE + PRODUCT->(DBSEEK( (SELFILE)->PAR_PROD)) + IF PRODUCT->MACH_SCRNW <> 0 .AND. PRODUCT->MACH_SCRNH <> 0 + WK_ADJ_WIDTH := PRODUCT->MACH_SCRNW + WK_ADJ_HEIGHT := PRODUCT->MACH_SCRNH + WK_WIDTH := (CUR_OL)->ACT_WIDTH + WK_HEIGHT := (CUR_OL)->ACT_HEIGHT + WORKSPECS := NIL + ENDIF + PRODUCT->(DBSEEK( (SELFILE)->PROD_CODE )) +ELSE + WK_WIDTH := (SELFILE)->ACT_WIDTH + WK_HEIGHT := (SELFILE)->ACT_HEIGHT +ENDIF +IF ADDL_MODE // GET FROM PARENT STUFF + IF EMPTY(WORKSPECS) + WK_QTY := (SELFILE)->QUANTITY * MNUM_SCREEN + ELSE + WK_QTY := (SELFILE)->QUANTITY // (*)FACTOR FROM WORKSPECS + ENDIF +ELSEIF BACKORD + IF BKOFLNKSCR //** P3N - 1/28/99 + TOLKEY := ORDER_NUM + STR(LINE_NUM) + PROD_CODE + 'SCRFLNK' + IF SELFILE == 'ADDL_LINES' //** P3N - 7/21/99 HAPPY BDAY DANIEL + TOLKEY := ORDER_NUM + STR(LINE_NUM) + PAR_PROD + 'SCRFLNK' + ENDIF //** P3N - 7/21/99 HAPPY BDAY DANIEL + ELSEIF GET_CATCODE(PROD_CODE) == 'SCREENS' //** P3N - 5/20/99 + TOLKEY := ORDER_NUM + STR(LINE_NUM) + SPACE(7) + PROD_CODE + ELSE //** P3N - 1/28/99 + TOLKEY := ORDER_NUM + STR(LINE_NUM) + PROD_CODE + 'SCREENS' + ENDIF //** P3N - 1/28/99 + IF GET_CATCODE(PROD_CODE) == 'SCREENS' //** P3N - 5/20/99 + SCRINFO := TOL_SCREENS( ,TOLKEY, BKOFLNKSCR) //** P3N -11/3/98 + ELSE + SCRINFO := TOL_SCREENS(SELFILE,TOLKEY, BKOFLNKSCR) //** P3N -11/3/98 + ENDIF + IF LEN(SCRINFO) > 2 //** P3N -11/3/98 + BO_ITEM := SCRINFO[3] //** P3N -11/3/98 + ENDIF //** P3N -11/3/98 + WK_QTY := SCRINFO[1] //** P3N - 9/9/98 + PRNT_DESC := SCRINFO[2] //** P3N - 9/9/98 +ELSEIF !ADDL_MODE + IF EMPTY(WORKSPECS) + WK_QTY := (SELFILE)->QUANTITY * MNUM_SCREEN + ELSE + OLQTY := WORKSPECS[1, 3] + NUM_IN_SPEC := WORKSPECS[1, 13] + WK_QTY := OLQTY * NUM_IN_SPEC * ( 1 + XFACTOR ) +//**WK_QTY := (SELFILE)->QUANTITY // (*)FACTOR FROM WORKSPECS + ENDIF +ENDIF +// NORMAL WIDTH WINDOWS / NOT ODD WIDTHS MULLED TOGETHER. +IF !MULL_REQ .OR. (MULL_REQ .AND. MULL_TYPE = 'CENTER VERTICAL') + // STPW ONLY?? + IF MULL_REQ + MNUM_GLASS ++ // SINCE A MULL, EXTRA GLASS REQUIRED (ONLY CENTER VERTICAL ONES GOT TO HERE! + SELECT PRODUCT + IF RAN_SLID // REVERSE HT/WIDTH + WORKVAR := WK_HEIGHT // ADDL_MODE PART ADDED + WK_HEIGHT := WK_WIDTH // 6-05-95 BY DON + WK_WIDTH := WORKVAR + WORKVAR := WK_ADJ_HEIGHT // ADDL_MODE PART ADDED + WK_ADJ_HEIGHT := WK_ADJ_WIDTH // 6-05-95 BY DON + WK_ADJ_WIDTH := WORKVAR + ENDIF + WK_WIDTH := WK_WIDTH + WK_ADJ_WIDTH + WK_HEIGHT := WK_HEIGHT + WK_ADJ_HEIGHT + + WK_QTY := WK_QTY * 2 + WK_WIDTH := WK_WIDTH - MMULL_SASH + SCREEN_LINE := '' + IF ITEM_CAT_CODE = 'SCREENS' .AND. EMPTY(WORKSPECS) + SCREEN_LINE := SET_SCREEN_LINE(MULL_REQ, WK_WIDTH, WK_HEIGHT, ' ', PROD_CODE, PRNT_DESC) + ENDIF + ELM3 := {SCREEN_LINE, BO_ITEM} //** P3N = 6/26/98 + PASSARR := {MLOC_CODE, PRNT_DESC, ELM3 , AMTVAR,; + DISC_ARR, PROD_MEMO, WK_QTY, WHERE_FROM, MLINE, ; + PROD_CODE, SHP_QTY, 0 , WORKSPECS, MWORK_DESC, ; + DO_SCRNS_ONLY , MPWHERE, INV_QTY } + ELSE + // NO WINDOWS MULLED TOGETHER. + // SCREEN HEIGHT WILL BE WK_HEIGHT / NUM_GLASS UNLESS ORIEL + // OR WE ARE USING A STANDARD SIZE SASH ON THE BOTTOM + IF (OR_TOP = 0 .AND. OR_BOT = 0) .OR. ; + (OR_TOP = 1 .AND. OR_BOT = 1) .OR. MNUM_GLASS = 1 + // 2 PIECES OF GLASS AT 1/2 SIZE EACH + IF IS_ALWAYS_SLID + WK_WIDTH := WK_WIDTH / MNUM_GLASS + ELSE + WK_HEIGHT := WK_HEIGHT / MNUM_GLASS + ENDIF + ELSE + // oriel processing here. + IF OR_SCR > 0 // FROM STD SIZE TABLE + IF IS_ALWAYS_SLID + WK_WIDTH := OR_SCR + WK_ADJ_HEIGHT := 0 // is this true?? + ELSE + WK_HEIGHT := OR_SCR + WK_ADJ_HEIGHT := 0 // is this true?? + ENDIF + ELSE + IF OR_TOP > 0 + IF IS_ALWAYS_SLID + WK_WIDTH := WK_WIDTH - OR_TOP // SCREEN GOES ON BOTTOM + ELSE + WK_HEIGHT := WK_HEIGHT - OR_TOP // SCREEN GOES ON BOTTOM + ENDIF + ELSE + IF IS_ALWAYS_SLID + WK_WIDTH := OR_BOT // SCREEN GOES ON BOTTOM + ELSE + WK_HEIGHT := OR_BOT // SCREEN GOES ON BOTTOM + ENDIF + ENDIF + ENDIF + ENDIF + WK_HEIGHT := WK_HEIGHT + WK_ADJ_HEIGHT + WK_WIDTH := WK_WIDTH + WK_ADJ_WIDTH + IF RAN_SLID .AND. !ADDL_MODE // REVERSE HT/WIDTH (IF !ADDL_MODE 6-5-95) + WORKVAR := WK_HEIGHT + WK_HEIGHT := WK_WIDTH + WK_WIDTH := WORKVAR + ENDIF + IF EMPTY(BAL_INFO) //** P3N - 03/30/98 + // NO BALANCE SIZE INFO - NOT A STD_SASH + ELSEIF EMPTY(WORKSPECS) + // NO CUTTING SPEC INFO + ELSE // DETERMINE THE SCREEN SIZE FOR STD_SASH + IF LEN(WORKSPECS) < 2 .OR. EMPTY(WORKSPECS[1,6]) .OR. EMPTY(WORKSPECS[2,6]) + ERR_BOX(' Order line - ' + STR( (SELFILE)->LINE_NUM, 3) + ; + ' / Model - ' + (SELFILE)->PROD_CODE + ' Contains', ; + ' Invalid or missing SCREEN Cutting Specs! ', ' ', ; + ' PRODUCTION SCREEN COPY may NOT be accurate!') + ELSE + ADJ_HT := EVAL_MATH( WORKSPECS[2,6], G_ARR, '_CUT_SP', ; + WORKSPECS[2,1], SELFILE,'CUT') + WK_HEIGHT := ADJ_HT - OR_TOP + WORKSPECS[2,7] := WK_HEIGHT + ENDIF + ENDIF + IF ITEM_CAT_CODE = 'SCREENS' .AND. EMPTY(WORKSPECS) + SCREEN_LINE := SET_SCREEN_LINE(MULL_REQ, WK_WIDTH, WK_HEIGHT, OR_DESC, PROD_CODE, PRNT_DESC) + ELSE + SCREEN_LINE := '' + ENDIF + SELECT (SELFILE) + ELM3 := {SCREEN_LINE, BO_ITEM} //** P3N = 6/26/98 + PASSARR := {MLOC_CODE, PRNT_DESC, ELM3 , AMTVAR,; + DISC_ARR, PROD_MEMO, WK_QTY, WHERE_FROM, MLINE, ; + PROD_CODE, SHP_QTY, 0 , WORKSPECS, MWORK_DESC, ; + DO_SCRNS_ONLY , MPWHERE, INV_QTY } + ENDIF +ENDIF +RETURN PASSARR +****************************************************************** +* GET THE BACKORDER QTY FOR SCREENS - FROM THE TORD_LINES DATABASE +* //** P3N - 9/9/98 +****************************************************************** +FUNCTION TOL_SCREENS(SELFILE, PASSKEY, FLANKERS) +LOCAL SVREC := 1, TOLKEY, FLANKCNT := 0, RETVAL := { 0 , '' }, BO_ITEM +IF EMPTY(FLANKERS) //** P3N - 1/27/99 + FLANKERS := .F. //** P3N - 1/27/99 +ENDIF //** P3N - 1/27/99 +IF SELECT('TORD_LINES') > 0 + SVREC := TORD_LINES->(RECNO()) + TORD_LINES->(DBGOTOP()) + IF (CUR_MAST)->ORDER_NUM == TORD_LINES->ORDER_NUM + ELSE + CLOSE TORD_LINES + BLD_TORD_LINES((CUR_MAST)->ORDER_NUM) + ENDIF +ELSE + BLD_TORD_LINES((CUR_MAST)->ORDER_NUM) +ENDIF +TORD_LINES->(DBGOTOP()) +DO WHILE TORD_LINES->(!EOF()) + IF EMPTY(SELFILE) + TOLKEY := TORD_LINES->ORDER_NUM + STR(TORD_LINES->LINE_NUM, 3) + TOLKEY := TOLKEY + TORD_LINES->PAR_PROD + TORD_LINES->PROD_CODE + IF TOLKEY == PASSKEY + RETVAL := { TORD_LINES->QUANTITY, TORD_LINES->ITEM_DESC } + IF FLANKERS //** P3N - 7/21/99 + IF TORD_LINES->PROD_CODE == 'SCRFLNK' //** P3N - 7/21/99 + BO_ITEM := '(' + TORD_LINES->HOW_MEAS + ') ' + BO_ITEM := BO_ITEM + TORD_LINES->ENTRY_SIZE + RETVAL := { TORD_LINES->QUANTITY, TORD_LINES->ITEM_DESC, BO_ITEM} + ENDIF + ENDIF + EXIT + ENDIF + ELSEIF TORD_LINES->ORDER_NUM == (SELFILE)->ORDER_NUM + IF TORD_LINES->LINE_NUM == (SELFILE)->LINE_NUM + IF TORD_LINES->PAR_PROD == (SELFILE)->PROD_CODE + IF FLANKERS //** P3N - 1/27/99 + IF TORD_LINES->PROD_CODE == 'SCRFLNK' //** P3N - 1/27/99 + BO_ITEM := '(' + TORD_LINES->HOW_MEAS + ') ' + BO_ITEM := BO_ITEM + TORD_LINES->ENTRY_SIZE + RETVAL := { TORD_LINES->QUANTITY, TORD_LINES->ITEM_DESC, BO_ITEM} + EXIT + ENDIF + ELSEIF TORD_LINES->PROD_CODE == 'SCREENS' + RETVAL := { TORD_LINES->QUANTITY, TORD_LINES->ITEM_DESC } + EXIT + ENDIF + ENDIF + ENDIF + ENDIF + TORD_LINES->(DBSKIP(+1) ) +ENDDO +TORD_LINES->(DBGOTO(SVREC) ) +RETURN RETVAL +****************************************************************** +* GET THE ORDER SHIPPING TRANS IN ORDER TO CALC BACKORDERS! +* //** P3N - 5/1/98 +****************************************************************** +FUNCTION GET_OSTQTY(CUR_OL, MISCKEY , PARTIAL_INVOICE, REPRINT_INVOICE) +LOCAL RETVAL := {}, RETSHP := 0, RETINV := 0, SVSEL := SELECT() + +PRIVATE SEEKKEY := (CUR_OL)->ORDER_NUM + STR((CUR_OL)->LINE_NUM, 3) + ; + (CUR_OL)->PROD_CODE + (CUR_OL)->PAR_PROD +PRIVATE SAMELIN := 'ORDER_NUM + STR(LINE_NUM, 3)+PROD_CODE+PAR_PROD == SEEKKEY' + +//DEFAULT PARTIAL_INVOICE := .F. +//DEFAULT REPRINT_INVOICE := .F. + +If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) +If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) + + +IF EMPTY(PARTIAL_INVOICE) //** P3N - 12/9/98 + PARTIAL_INVOICE := .F. //** P3N - 12/9/98 +ENDIF //** P3N - 12/9/98 +IF EMPTY(REPRINT_INVOICE) //** P3N - 12/9/98 + REPRINT_INVOICE := .F. //** P3N - 12/9/98 +ENDIF //** P3N - 12/9/98 +IF EMPTY(MISCKEY) +ELSE + SEEKKEY := MISCKEY + SAMELIN := 'ORDER_NUM + STR(LINE_NUM, 3)+PROD_CODE == SEEKKEY' +ENDIF +SELECT ORD_SHIP +IF ORD_SHIP->(DBSEEK(SEEKKEY)) + DO WHILE !EOF() .AND. &SAMELIN + IF REPRINT_INVOICE .AND. EMPTY(INV_QTY) //** P3N - 12/9/98 + //** PARTIAL INVOICE SHIPPED TO NEW ORDER + ELSE + RETSHP := RETSHP + ORD_SHIP->SHIP_QTY + ENDIF + RETINV := RETINV + ORD_SHIP->INV_QTY + ORD_SHIP->(DBSKIP(+1)) + ENDDO +ENDIF +SELECT(SVSEL) +RETURN {RETSHP, RETINV} +****************************************************************** +* IS THERE A STOCK SCREEN AND HOW WERE THE MEASUREMENTS ENTERED +****************************************************************** +FUNCTION SET_SCREEN_LINE(MULL_REQ, WK_WIDTH, WK_HEIGHT, OR_DESC, PROD_CODE, PRNT_DESC) +LOCAL SCREEN_LINE := '' +IF (IN_STOCK == 'Y' .AND. HOW_MEAS == 'NS') .AND. ; + (PROD_CODE = '500' .AND. AT('WHITE', PRNT_DESC) > 0) + SCREEN_LINE := ENTRY_SIZE +ELSEIF MULL_REQ + SCREEN_LINE := PRNT_SIZE(WK_WIDTH/2, WK_HEIGHT) +ELSE + SCREEN_LINE := PRNT_SIZE(WK_WIDTH, WK_HEIGHT) + OR_DESC +ENDIF +IF IN_STOCK == 'Y' + SCREEN_LINE := TRIM(SCREEN_LINE) + ' (S)' +ENDIF +RETURN SCREEN_LINE +************************************************************ +* IS THERE AN ADDITIONAL LINE ITEM +* FOR THE TYPE PASSED ??? (IE: 'SCREEN') +************************************************************ +FUNCTION XL_EXISTS(WHAT_TYPE) +LOCAL SV_SEL := SELECT() +LOCAL SV_REC := (SV_SEL)->(RECNO()) //** P3N - 7/20/98 +LOCAL SV_ORD := INDEXORD(), RETVAL := .F. +LOCAL SEEKKEY := (CUR_OL)->ORDER_NUM+(CUR_OL)->PROD_CODE +SELECT (CUR_XL) +DONSETORD(2) // ORDER + PAR_PROD +SEEK SEEKKEY +IF FOUND() + IF GET_CATCODE(PROD_CODE) == WHAT_TYPE + RETVAL := .T. + ELSE + RETVAL := .F. + ENDIF +ENDIF +SET ORDER TO SV_ORD +SELECT(SV_SEL) +(SV_SEL)->(DBGOTO(SV_REC)) //** P3N - 7/20/98 +RETURN RETVAL +************************************************************ +* IS THIS ORDER ASSESSED A DELIVERY CHARGE ??? +************************************************************ +FUNCTION IS_DELIVERED() +LOCAL SEEKKEY := (CUR_MAST)->SHP_METHOD, SV_SEL := SELECT(), RET_VAL := .F. +IF SHIPMETH->(DBSEEK(SEEKKEY)) + IF SHIPMETH->DEL_CHG$'Y' //DELIVERY CHARGE ???? + RET_VAL := .T. + ENDIF +ENDIF +SELECT(SV_SEL) +RETURN RET_VAL +************************************************************ +************************************************************ +************************************************************ +FUNCTION BEST_BOX(GLT_QTY, GLT_WD, GLT_HT, GLB_QTY, GLB_WD, GLB_HT) +LOCAL RETARR := {}, SAVESEL := SELECT(), I +LOCAL PRNTLINE, BESTWASTE:=9999, THISWASTE, THISSIZE +LOCAL BEST_BOX1, BEST_BOX2, ORIEL, WASTE1, RETVAL:='' +STATIC GLASS_ARR +IF GLT_WD = NIL + RETURN RETVAL +ENDIF +// IF ORIEL, 1 BOX FOR EACH PIECE OF GLASS +// OTHERWISE, GIVE BEST 1 AND BEST 2 SITUATION +IF GLB_QTY = 0 + ORIEL := .F. +ELSE + ORIEL := .T. +ENDIF +// LOOK ON 'GLASS_BOX' FILE TO FIND BEST SIZE WITH LEAST WASTE +IF GLASS_ARR = NIL + GLASS_ARR := {} + DBOPEN('GLASS_BOX') + GOTO TOP + DO WHILE !EOF() + AADD(GLASS_ARR, { BOX_NUM, WIDTH, HEIGHT } ) + SKIP 1 + ENDDO + CLOSE GLASS_BOX + SELECT (SAVESEL) +ENDIF +THISSIZE := GLT_WD * GLT_HT +BESTWASTE := 9999 +FOR I := 1 TO LEN(GLASS_ARR) + IF (GLT_WD <= GLASS_ARR[I,2] .AND. GLT_HT <= GLASS_ARR[I,3]) .OR. ; + (GLT_WD <= GLASS_ARR[I,3] .AND. GLT_HT <= GLASS_ARR[I,2]) + THISWASTE := (GLASS_ARR[I,2] * GLASS_ARR[I,3]) - THISSIZE + IF THISWASTE < BESTWASTE + BESTWASTE := THISWASTE + BEST_BOX1 := GLASS_ARR[I,1] + ENDIF + ENDIF +NEXT +WASTE1 := BESTWASTE +IF ORIEL + THISSIZE := GLB_WD * GLB_HT + BESTWASTE := 9999 + FOR I := 1 TO LEN(GLASS_ARR) + IF (GLB_WD <= GLASS_ARR[I,2] .AND. GLB_HT <= GLASS_ARR[I,3]) .OR. ; + (GLB_WD <= GLASS_ARR[I,3] .AND. GLB_HT <= GLASS_ARR[I,2]) + THISWASTE := (GLASS_ARR[I,2] * GLASS_ARR[I,3]) - THISSIZE + IF THISWASTE < BESTWASTE + BESTWASTE := THISWASTE + BEST_BOX2 := GLASS_ARR[I,1] + ENDIF + ENDIF + NEXT +ELSE + THISSIZE := GLB_WD * GLB_HT * 2 + FOR I := 1 TO LEN(GLASS_ARR) + IF ((GLB_WD * 2) <= GLASS_ARR[I,2] .AND. GLB_HT <= GLASS_ARR[I,3]) .OR. ; + ((GLB_WD * 2) <= GLASS_ARR[I,3] .AND. GLB_HT <= GLASS_ARR[I,2]) .OR. ; + (GLB_WD <= GLASS_ARR[I,2] .AND. (GLB_HT * 2) <= GLASS_ARR[I,3]) .OR. ; + (GLB_WD <= GLASS_ARR[I,3] .AND. (GLB_HT * 2) <= GLASS_ARR[I,2]) + THISWASTE := (GLASS_ARR[I,2] * GLASS_ARR[I,3]) - THISSIZE + IF THISWASTE < BESTWASTE + BESTWASTE := THISWASTE + BEST_BOX2 := GLASS_ARR[I,1] + ENDIF + ENDIF + NEXT +ENDIF +IF BEST_BOX1 = NIL + BEST_BOX1 := '??' +ENDIF +IF BEST_BOX2 = NIL + BEST_BOX2 := '??' +ENDIF +IF ORIEL + RETURN 'Top~-~BOX~' + ALLTRIM(BEST_BOX1) + ' Bottom~-~BOX~' + ALLTRIM(BEST_BOX2) +ELSE + SQFT_SAVED := (WASTE1 - BESTWASTE) / 144 + IF BEST_BOX1 <> '??' + RETVAL := ' BOX~' + ALLTRIM(BEST_BOX1) + ENDIF + IF BEST_BOX2 <> '??' + RETVAL := RETVAL + ' -or- 2/1~use~BOX~'; + + ALLTRIM(BEST_BOX2) + ' (~' + ALLTRIM(STR(SQFT_SAVED,7,2)) ; + + '~Saved~)' + ENDIF +ENDIF +RETVAL := ALLTRIM(RETVAL) +RETURN ' ' + RETVAL +************************************************************ +************************************************************ +************************************************************ +FUNCTION CK_HALF_SIZE(ITEM_CAT_CODE, SELFILE, OPTFILE, OR_ARR, RAN_SLID, P_WIDTH, P_HEIGHT, EXP_REQ, IS_ALWAYS_SLID, G_ARR) +LOCAL SEEKKEY, FACT, CALC_VAR, PRNT_VAR := '', ORI_SIZE +LOCAL OR_TOP := OR_ARR[1], OR_BOT := OR_ARR[2], IS_SLIDER := .F. +LOCAL WK_HEIGHT, WK_WIDTH, SAVESEL := SELECT() +// NORMALLY, HALF SIZE IS HEIGHT / 2 UNLESS RANCH SLIDER +// WINDOW ROTATED 90 DEGREES (HT BECOMES WIDTH, WD BECOMES HT) +IF RAN_SLID .OR. IS_ALWAYS_SLID + WK_WIDTH := P_HEIGHT + WK_HEIGHT := P_WIDTH +ELSE + WK_WIDTH := P_WIDTH + WK_HEIGHT := P_HEIGHT +ENDIF +IF CATEGORY->(DBSEEK(ITEM_CAT_CODE)) + IF CATEGORY->PRNT_HS = 'Y' .AND. ; + ( EMPTY(CATEGORY->HS_RULE) .OR. CHK_RULE(CATEGORY->HS_RULE, G_ARR , , SELFILE) ) + // PRINT CALC_VAR DIVIDED BY 2 INCLUDING FRACTIONS + FACT := 2 + ELSE + SELECT (SAVESEL) + RETURN '' //** P3N - 6/17/99 +//**RETURN NIL //** P3N - 6/17/99 + ENDIF + IF OR_TOP <> 0 + IF (SELFILE)->IN_STOCK$'Y' + PRNT_VAR := ' ' + ELSE + // ADDED IOLA CONDITION 6-6-95 - DON + IF EXP_REQ .AND. MHOME_LOC_CODE = 'KC' + TOPNUM := OR_TOP + .5 + ELSE + TOPNUM := OR_TOP + ENDIF + TOPPART := TOPNUM + BOTPART := WK_HEIGHT - TOPPART + PRNT_VAR := ' ( ' + PRNT_SIZE(TOPPART, BOTPART, '/') + ' )' + ENDIF + ELSEIF OR_BOT <> 0 + IF (SELFILE)->IN_STOCK$'Y' + PRNT_VAR := ' ' + ELSE + IF EXP_REQ .AND. MHOME_LOC_CODE = 'KC' + BOTNUM := OR_BOT - .5 + ELSE + BOTNUM := OR_BOT + ENDIF + TOPPART := WK_HEIGHT - BOTNUM + BOTPART := BOTNUM + PRNT_VAR := ' ( ' + PRNT_SIZE(TOPPART, BOTPART, '/') + ' )' + ENDIF + ELSE + CALC_VAR := WK_HEIGHT / FACT + // PRINT THIS AS THE HALF SIZE + PRNT_VAR := ' ( ' + PRNT_SIZE(CALC_VAR, NIL) + ' )' + ENDIF +ENDIF +SELECT (SAVESEL) +RETURN STRTRAN(PRNT_VAR, ' ', '~') +********************************************** +********************************************** +********************************************** +FUNCTION CK_XTRAWIND(SELFILE, OPTFILE, ADDL_MODE) +// IS IT AN EXTRA WINDOW SITUATION? +LOCAL SAVESEL := SELECT(), RETVAL := 0, I +LOCAL SEEKKEY := '' //** P3N - 05/24/02 +SELECT (SELFILE) +FOR I := 1 TO 2 + IF I = 1 + SEEKKEY := BLD_OPT_SEEK(SELFILE, 'XTRA WIND') + ELSE + SEEKKEY := BLD_OPT_SEEK(SELFILE, 'FRENCH STY') + ENDIF + // DIRECT SEEK ON THIS ATTRIBUTE + SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS + SEEK SEEKKEY + IF FOUND() + IF I = 1 + RETVAL := VAL(USER_RESP) + ELSE + RETVAL := 1 + ENDIF + ENDIF + // IF ADDL_MODE AND CHECK IF XTRA PARENT WINDOWS. IF SO, + // THE ADD-ON PRODUCT MUST GET EXTRAS ALSO + IF ADDL_MODE + SEEKKEY := (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'XTRA WIND' + // DIRECT SEEK ON THIS ATTRIBUTE + SELECT (CUR_OO) // PARENT OPTIONS + SEEK SEEKKEY + IF FOUND() + IF I = 1 + RETVAL := VAL(USER_RESP) + ELSE + RETVAL := 1 + ENDIF + ENDIF + ENDIF + IF RETVAL <> 0 + EXIT + ENDIF +NEXT +SELECT (SELFILE) +RETURN RETVAL +********************************************** +********************************************** +********************************************** +FUNCTION ALWAYS_SLIDER(SELFILE, OPTFILE, ADDL_MODE) +// IS IT ALWAYS A RANCH SLIDER? +LOCAL SAVESEL := SELECT(), RAN_SLID := .F. +SELECT (SELFILE) +SEEKKEY := BLD_OPT_SEEK(SELFILE, 'RANCH SLID') +// DIRECT SEEK ON THIS ATTRIBUTE +SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS +SEEK SEEKKEY +IF FOUND() + IF ALLTRIM(USER_RESP) == 'ALWAYS SLIDER' + RAN_SLID = .T. + ENDIF +ENDIF +// IF ADDL_MODE AND PARENT IS A SLIDER +// THE ADD-ON PRODUCT MUST BE A SLIDER ALSO +IF !RAN_SLID .AND. ADDL_MODE + SEEKKEY := (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'RANCH SLID' + // DIRECT SEEK ON THIS ATTRIBUTE + SELECT (CUR_OO) // PARENT OPTIONS + SEEK SEEKKEY + IF FOUND() + IF ALLTRIM(USER_RESP) == 'ALWAYS SLIDER' + RAN_SLID = .T. + ENDIF + ENDIF +ENDIF +SELECT (SELFILE) +RETURN RAN_SLID +********************************************** +********************************************** +********************************************** +FUNCTION CK_SLIDER(SELFILE, OPTFILE, ADDL_MODE) +// IS IT A RANCH SLIDER? +LOCAL SAVESEL := SELECT(), RAN_SLID := .F. +SELECT (SELFILE) +SEEKKEY := BLD_OPT_SEEK(SELFILE, 'RANCH SLID') +// DIRECT SEEK ON THIS ATTRIBUTE +SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS +SEEK SEEKKEY +IF FOUND() + IF ALLTRIM(USER_RESP) == 'RANCH SLIDER' + RAN_SLID = .T. + ENDIF +ENDIF +// IF ADDL_MODE AND PARENT IS A SLIDER +// THE ADD-ON PRODUCT MUST BE A SLIDER ALSO +IF !RAN_SLID .AND. ADDL_MODE + SEEKKEY := (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'RANCH SLID' + // DIRECT SEEK ON THIS ATTRIBUTE + SELECT (CUR_OO) // PARENT OPTIONS + SEEK SEEKKEY + IF FOUND() + IF ALLTRIM(USER_RESP) == 'RANCH SLIDER' + RAN_SLID = .T. + ENDIF + ENDIF +ENDIF +SELECT (SELFILE) +RETURN RAN_SLID +********************************************** +* CHECK FOR A FRENCH DOOR ATTRIBUTE ! +* PERRY - 2-11-98 +********************************************** +FUNCTION CK_FRENCH(SELFILE, OPTFILE, ADDL_MODE) +// IS IT A FRENCH STYLE DOOR KIT? +LOCAL SAVESEL := SELECT(), FRENCHDOOR := .F. +SELECT (SELFILE) +SEEKKEY := BLD_OPT_SEEK(SELFILE, 'FRENCH STY') +// DIRECT SEEK ON THIS ATTRIBUTE +SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS +SEEK SEEKKEY +IF FOUND() + IF ALLTRIM(USER_RESP) == 'FRENCH STYLE KIT' + FRENCHDOOR := .T. + ENDIF +ENDIF +SELECT (SELFILE) +RETURN FRENCHDOOR +********************************************** +********************************************** +********************************************** +FUNCTION CK_MULLS(SELFILE, OPTFILE) +// IS MULL REQUIRED? +LOCAL SAVESEL := SELECT(), MULL_REQ := .F., MULL_TYPE := NIL +SELECT (SELFILE) +SEEKKEY := BLD_OPT_SEEK(SELFILE, 'MULL LOC ') +// DIRECT SEEK ON THIS ATTRIBUTE +SELECT (OPTFILE) // EITHER ORDER_OPTS OR ADDL_OPTS +SEEK SEEKKEY +IF FOUND() + IF !EMPTY(USER_RESP) .AND. ALLTRIM(USER_RESP) <> 'N/A' + MULL_REQ = .T. + ENDIF + IF ALLTRIM(USER_RESP) == 'CENTER VERTICAL' + MULL_TYPE = ALLTRIM(USER_RESP) + ENDIF +ENDIF +SELECT (SELFILE) +RETURN {MULL_REQ, MULL_TYPE} +****************************************************************** +****************************************************************** +****************************************************************** +FUNCTION BLD_OPT_SEEK(SELFILE, MATT_CODE) +//BUILD THE SEEKKEY FOR OPTIONS FILE +//**LOCAL SEEKKEY //** P3N - 07/19/13 - ABEND LINDA @ LINDS - +LOCAL SEEKKEY := '' //** P3N - 07/19/13 - ABEND LINDA @ LINDS - JUST IN CASE NOT FOUND ASSIGN TO EMPTY +IF SELFILE == CUR_OL + SEEKKEY = (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + MATT_CODE +ELSEIF SELFILE == CUR_XL + SEEKKEY = (SELFILE)->ORDER_NUM + (SELFILE)->PROD_CODE + STR( (SELFILE)->LINE_NUM,3) + MATT_CODE +ENDIF +RETURN SEEKKEY +****************************************************************** +****************************************************************** +****************************************************************** +FUNCTION CK_ORIEL(ITEM_CAT_CODE, SELFILE, OPTFILE, ADDL_MODE, RAN_SLID, IS_ALWAYS_SLID ) +LOCAL SAVESEL := SELECT() +LOCAL SEEKKEY, BALANCE_SIZE, WORKVAL1, WORKVAL2, WORKVAL3 +LOCAL OR_TOP := 0, OR_BOT := 0, OR_ARR := {}, STDBOTTSASH := .F. +LOCAL SCRNSIZE, WORKDIFF, OR_REASON := 'NO ORIEL' +LOCAL OR_SCR := 0 ,OR_GLASS := 0, ODD_ORIEL := .F., DEFAULT_ORIEL := .F. +LOCAL SIZEARR := {}, MWIDTH, MHEIGHT +IF EMPTY(IS_ALWAYS_SLID) //** P3N - 3/24/99 + IS_ALWAYS_SLID := .F. //** P3N - 3/24/99 +ENDIF //** P3N - 3/24/99 +// ORIEL SPECIFICATIONS APPEAR IN PARENT SPECS ONLY +SEEKKEY = (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'ORIEL TOP' +SELECT(CUR_OO) +SEEK SEEKKEY +IF FOUND() + OR_TOP := DECVAL(USER_RESP) + OR_REASON := 'ATT CODE' +ENDIF +SEEKKEY = (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'ORIEL BOTT' +SELECT(CUR_OO) +SEEK SEEKKEY +IF FOUND() + OR_BOT := DECVAL(USER_RESP) + OR_REASON := 'ATT CODE' +ENDIF +SEEKKEY = (SELFILE)->ORDER_NUM + STR( (SELFILE)->LINE_NUM,3) + 'ORIEL BOTT' +SELECT(CUR_OO) +SEEK SEEKKEY +IF FOUND() + OR_BOT := DECVAL(USER_RESP) + OR_REASON := 'ATT CODE' +ENDIF +IF !ADDL_MODE .AND. PRODUCT->SS_BOTSASH$'Y' + STDBOTTSASH := .T. +ENDIF +SELECT PRODUCT +SAVEREC := RECNO() +IF ADDL_MODE + SEEK (CUR_XL)->PAR_PROD + IF FOUND() .AND. PRODUCT->SS_BOTSASH$'Y' + STDBOTTSASH := .T. + ENDIF +ENDIF +// CHECK THE STDSASH FILE AND FORCE TO OR_BOT +IF OR_TOP = 0 .AND. OR_BOT = 0 + IF STDBOTTSASH + SEEKKEY := PRODUCT->PROD_CODE + SELECT STD_SASH + SEEK SEEKKEY + WORKVAL1 := (SELFILE)->ACT_HEIGHT + DO WHILE PROD_CODE == SEEKKEY .AND. !EOF() + WORKVAL2 := DECVAL( UP_TO_SIZE ) + IF WORKVAL1 <= WORKVAL2 + BALANCE_SIZE := BOTT_SASH + IF BOTT_SIZE = 0 + WORKVAL3 := DECVAL( BOTT_SASH ) + ELSE + WORKVAL3 := BOTT_SIZE * 2 // WILL DIVIDE BY 2 BELOW! + ENDIF + WORKDIFF = ABS( WORKVAL1 - WORKVAL3 ) + IF ADDL_MODE .AND. ALLTRIM(ITEM_CAT_CODE) = 'STORMS' ; + .AND. WORKDIFF <= 1.5 // DON'T ADDJUST ADD ON STORMS WITHIN 1.5 INCHES OF BALANCE SIZE + ELSE + IF (SELFILE)->HOW_MEAS == 'NS' //** P3N - 07/05/01 + //** STD SASH/NOM SIZE ADJUSTMENT //** P3N - 07/05/01 + //** RE: PAWNEE - DARYL //** P3N - 07/05/01 +//** OR_BOT := (WORKVAL3 / 2) + WORKDIFF // UNEQUAL ORIEL LITES + ELSE + WORKDIFF := WORKVAL1 - VAL(BALANCE_SIZE) //** P3N - 06/29/01 +//** OR_BOT := WORKVAL3 / 2 // UNEQUAL ORIEL LITES + ENDIF + OR_BOT := WORKVAL3 / 2 // UNEQUAL ORIEL LITES //P3N-07/05/01 + OR_REASON := 'BAL ADJ' + ENDIF + EXIT + ENDIF + SKIP 1 + ENDDO + ENDIF +ENDIF +IF (!ADDL_MODE .AND. (SELFILE)->ORIEL_SIZE = 'Y') .OR. ; + (ADDL_MODE .AND. (CUR_OL)->ORIEL_SIZE = 'Y') + // CONVERT EVERY THING TO ACTUAL SIZE AND SEEK FOR STD_SIZE TABLE + SELECT STD_SIZES // CHECK IF NORMAL ORIEL SIZE + DONSETORD(2) + IF EMPTY( (SELFILE)->PAR_PROD ) + MWIDTH := DECVAL( (SELFILE)->WIDTH ) + MHEIGHT:= DECVAL( (SELFILE)->HEIGHT) + SIZE_ARR := CONV_SIZE( (SELFILE)->PROD_CODE, MWIDTH,; + MHEIGHT, (SELFILE )->HOW_MEAS, .T.) + SEEK (SELFILE)->PROD_CODE + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6) + ELSE + MWIDTH := DECVAL( (CUR_OL)->WIDTH ) + MHEIGHT:= DECVAL( (CUR_OL)->HEIGHT ) + SIZE_ARR := CONV_SIZE( (SELFILE)->PAR_PROD, MWIDTH,; + MHEIGHT, (SELFILE)->HOW_MEAS, .T.) + SEEK (SELFILE)->PAR_PROD + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6) + ENDIF + IF FOUND() .AND. ORIEL_SIZE$'X' // NORMALLY AN ORIEL + IF (OR_TOP = 0 .AND. OR_BOT = 0) ; + .OR. OR_REASON = 'BAL ADJ' // NO OVERRIDES - USE STD TABLE DEFAULT + IF ALLTRIM(ITEM_CAT_CODE) == 'STORMS' ; + .AND. (ADDL_MODE .OR. !EMPTY( (SELFILE)->PAR_PROD) ) + OR_TOP := TOP_STORM + ELSE + OR_TOP := ORIEL_TOP + ENDIF + OR_BOT := 0 + OR_REASON := 'DEFAULT' + OR_SCR := ORIEL_SCRN + OR_GLASS := TOP_GLASS + ODD_ORIEL := .F. + DEFAULT_ORIEL := .T. + ELSE + ODD_ORIEL := .T. + ENDIF + ENDIF +ENDIF +SELECT PRODUCT +GOTO SAVEREC +IF OR_TOP <> 0 .AND. OR_BOT = 0 +//** IF !RAN_SLID +//** OR_BOT := (SELFILE)->ACT_HEIGHT - OR_TOP +//** ELSE +//** OR_BOT := (SELFILE)->ACT_WIDTH - OR_TOP +//** ENDIF + IF RAN_SLID //** P3N - 02/01/99 + OR_BOT := (SELFILE)->ACT_WIDTH - OR_TOP //** P3N - 02/01/99 + ELSEIF IS_ALWAYS_SLID //** P3N - 02/01/99 + OR_BOT := (SELFILE)->ACT_WIDTH - OR_TOP //** P3N - 02/01/99 + ELSE //** P3N - 02/01/99 + OR_BOT := (SELFILE)->ACT_HEIGHT - OR_TOP //** P3N - 02/01/99 + ENDIF +ENDIF +IF OR_BOT <> 0 .AND. OR_TOP = 0 +//** IF !RAN_SLID +//** OR_TOP := (SELFILE)->ACT_HEIGHT - OR_BOT +//** ELSE +//** OR_TOP := (SELFILE)->ACT_WIDTH - OR_BOT +//** ENDIF + IF RAN_SLID //** P3N - 02/01/99 + OR_TOP := (SELFILE)->ACT_WIDTH - OR_BOT //** P3N - 02/01/99 + ELSEIF IS_ALWAYS_SLID //** P3N - 02/01/99 + OR_TOP := (SELFILE)->ACT_WIDTH - OR_BOT //** P3N - 02/01/99 + ELSE //** P3N - 02/01/99 + OR_TOP := (SELFILE)->ACT_HEIGHT - OR_BOT //** P3N - 02/01/99 + ENDIF //** P3N - 02/01/99 +ENDIF +SELECT (SAVESEL) +RETURN {OR_TOP, OR_BOT, BALANCE_SIZE, OR_REASON, OR_SCR, OR_GLASS, ODD_ORIEL, DEFAULT_ORIEL, WORKDIFF } +//**RETURN {OR_TOP, OR_BOT, BALANCE_SIZE, OR_REASON, OR_SCR, OR_GLASS, ODD_ORIEL, DEFAULT_ORIEL } + +********************************************************************* +* BUILD THE BODY OF THE ORDER +********************************************************************* + +FUNCTION BLD_BODY(OL_ARR, WHICH_TYPE, WHCH_LOCATION, PBODY_ARR, ; + PAMTS_ARR, WHCHORDER, SUBTYPE, INCL_ALL_LINES,; + DO_CUT_SPECS, PARTIAL_INVOICE, REPRINT_INVOICE) + +LOCAL PRNT_DESC, PRNT_LEN := 42, PRNTOUTVAR, PRNT_VAL +LOCAL PRNT_PRICE, PRNT_QTY, XX, I, II, WAMTS_ARR +LOCAL PAMTS := NIL, MLINE_DESC, X1, X2 +LOCAL LI_TTL := 0, LI_QTY := 0, CUT_SPEC_ARR, VENTPOS := '' +LOCAL BK_ORD := 0, WORKOUT, WORKQTY := 0, OPT := 0, PRTOPT := '' +LOCAL PRT_AMT := .T., WORKVAR, SPEC_CHAR, WORKDESC +LOCAL PRT_BO := .T., RETVARVARR := {}, XFACTOR, WORKARR, OPTARR := {} +LOCAL WORKDESC1, WORKDESC2, RETVARARR := {}, MGL_LINE_DESC := '' +LOCAL MWHEREFROM := OL_ARR[8] //** P3N - 5/26/99 +LOCAL SHIP_QTY := 0, QTYARR := {} //** P3N - 5/1/98 +LOCAL GETARR := {}, WKARR := {} //** P3N - 8/17/98 +LOCAL MPROD_CODE := OL_ARR[10] //** P3N - 8/17/98 +LOCAL MLINE_NUM := OL_ARR[9] //** P3N - 8/17/98 +LOCAL USE_TEMP := .F. //** P3N - 8/17/98 +LOCAL ADDL_MODE := .F. //** P3N - 8/17/98 +LOCAL PPR_CUSTID := NIL //** P3N - 8/17/98 +LOCAL DISP_WAIT := .F. //** P3N - 8/17/98 +LOCAL PRNT_DESARR := {} //** P3N - 8/17/98 +LOCAL INV_QTY := OL_ARR[17] //** P3N - 12/3/98 +LOCAL BKOPROD := MPROD_SUMMARY(MPROD_CODE) //** P3N - 2/2/99 + +STATIC VPARR := {} //** P3N - 11/26/01 +//**STATIC PRIORPROD := '' //** P3N - 11/26/01 +//**STATIC PRIORLINE := '' //** P3N - 11/26/01 + +//DEFAULT PARTIAL_INVOICE := .F. +//DEFAULT REPRINT_INVOICE := .F. + +If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) +If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) + + +IF EMPTY(REPRINT_INVOICE) //** P3N - 12/3/98 + REPRINT_INVOICE := .F. //** P3N - 12/3/98 +ENDIF //** P3N - 12/3/98 +IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/16/98 + PARTIAL_INVOICE := .F. //** P3N - 11/16/98 +ENDIF //** P3N - 11/16/98 +IF FORMTYPE <> 'PREPRINT' .AND. !DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) + PRNT_LEN := 60 +ENDIF +PRNT_DESC := ALLTRIM(OL_ARR[2]) +IF MHOME_LOC_CODE = 'IOLA' //** P3N - 08/26/02 - FIX DARLENES SPECIAL CUSTOMER IC/PO DESC PRINTING +//**IF WHICH_TYPE == 'PO' //** P3N - 2/22/02 +ELSEIF WHICH_TYPE == 'PO' //** P3N - 08/26/02 + (CUR_OL)->(DBSEEK(MORDER_NUM+MLINE_NUM)) //** P3N - 2/22/02 + (CUR_XL)->(DBSEEK(MORDER_NUM+MPROD_CODE+MLINE_NUM)) //** P3N - 2/22/02 + IF MWHEREFROM = 'XL' //** P3N - 2/22/02 + ADDL_MODE := .T. //** P3N - 2/22/02 + ENDIF //** P3N - 2/22/02 + WKARR := BUILD_GETARR( MPROD_CODE, 1, MORDER_NUM, MLINE_NUM, '', ; + USE_TEMP, ADDL_MODE, PPR_CUSTID, DISP_WAIT, CUR_OL) + GETARR := WKARR[1] //** P3N - 2/22/02 + PRNT_DESARR := BLD_DESC(GETARR, CUR_OL, WHICH_TYPE, MPROD_CODE, SUBTYPE) //** P3N - 02/22/02 + PRNT_DESC := PRNT_DESARR[1] //** P3N - 2/22/02 +ENDIF +IF WHCHORDER == 'BACKORD' //** P3N - 8/17/98 +//** COMMENTED OUT P3N - 5/26/99 +//** IF SUBTYPE == 'BACKORD' //** P3N - 5/26/99 +//** IF EMPTY(PRIORPROD) //** P3N - 11/26/01 +//** PRIORPROD := MPROD_CODE //** P3N - 11/26/01 +//** ENDIF //** P3N - 11/26/01 +//** IF EMPTY(PRIORLINE) //** P3N - 11/26/01 +//** PRIORLINE := MLINE_NUM //** P3N - 11/26/01 +//** ENDIF //** P3N - 11/26/01 + IF MWHEREFROM = 'XL' //** P3N - 11/26/01 + ADDL_MODE := .T. //** P3N - 11/26/01 +//** ELSEIF PRIORPROD == MPROD_CODE .AND. ; //** P3N - 11/26/01 +//** PRIORLINE == MLINE_NUM //** P3N - 11/26/01 + ELSEIF EMPTY(PBODY_ARR) //** P3N - 11/26/01 +//** PRIORPROD := MPROD_CODE //** P3N - 11/26/01 +//** PRIORLINE := MLINE_NUM //** P3N - 11/26/01 + + VPARR := {} //** P3N - 11/26/01 + VENTPOS := '' //** P3N - 11/26/01 + ENDIF //** P3N - 11/26/01 + IF SUBTYPE == 'SCREENS' .AND. MWHEREFROM = 'OL' //** P3N - 5/26/99 + ELSE + (CUR_OL)->(DBSEEK(MORDER_NUM+MLINE_NUM)) //** P3N - 8/17/98 + (CUR_XL)->(DBSEEK(MORDER_NUM+MPROD_CODE+MLINE_NUM)) //**P3N-11/26/01 + WKARR := BUILD_GETARR( MPROD_CODE, 1, MORDER_NUM, MLINE_NUM, '', ; + USE_TEMP, ADDL_MODE, PPR_CUSTID, DISP_WAIT, CUR_OL) + GETARR := WKARR[1] + IF ADDL_MODE //** P3N -11/26/01 + ELSE //** P3N -11/26/01 + ELM := ASCAN(GETARR, {|X| X[1] = 'VENT POS'} ) //** P3N -11/26/01 + IF EMPTY(ELM) //** P3N -11/26/01 +//** VENTPOS := '' //** P3N -11/26/01 + PRTOPT := 'N' //** P3N -11/26/01 + ELSE //** P3N -11/26/01 + OPTARR := GETARR[ELM,OPT_ARR] //** P3N -11/26/01 + OPT := ASCAN(OPTARR, {|X| X[1] = GETARR[ELM,4]} ) //** P3N -11/26/01 + IF EMPTY(OPT) //** P3N -11/26/01 + PRTOPT := 'N' //** P3N -11/26/01 + ELSE //** P3N -11/26/01 + PRTOPT := OPTARR[OPT,OPT_PIND] //** P3N -11/26/01 + ENDIF //** P3N -11/26/01 + IF PRTOPT == 'N' // NEVER PRINT DESCRIPTION + VENTPOS := '' //** P3N -11/26/01 + ELSE //** P3N -11/26/01 + VENTPOS := ALLTRIM(GETARR[ELM,4]) //** P3N -11/26/01 + AADD(VPARR,{TRIM(MPROD_CODE), MLINE_NUM, VENTPOS}) + ENDIF //** P3N -11/26/01 + ENDIF //** P3N -11/26/01 + ENDIF //** P3N -11/26/01 + + PRNT_DESARR := BLD_DESC(GETARR, CUR_OL, WHCHORDER, MPROD_CODE, SUBTYPE) + PRNT_DESC := PRNT_DESARR[1] //** P3N - 8/17/98 + IF EMPTY(VPARR) //** P3N -11/26/01 + ELSEIF ADDL_MODE //** P3N -11/26/01 + VELM := ASCAN(VPARR, {|X| X[1] == BKOPROD .AND. X[2] == MLINE_NUM }) + IF EMPTY(VELM) //** P3N -11/26/01 + VENTPOS := '' //** P3N -11/26/01 + ELSE //** P3N -11/26/01 + VENTPOS := VPARR[VELM,3] //** P3N -11/26/01 + ENDIF //** P3N -11/26/01 + PRNT_DESC := PRNT_DESC + ' - '+STRTRAN(VENTPOS,' ','~') //** P3N -11/26/01 + ENDIF //** P3N -11/26/01 + ENDIF +ENDIF //** P3N - 8/17/98 +IF WHICH_TYPE == 'CTRL' .AND. !(OL_ARR[1] == MHOME_LOC_CODE) ; + .AND. MHOME_LOC_CODE <> 'KC' + PRNT_DESC := ALLTRIM(PRNT_DESC) + ' (' ; + + ALLTRIM(OL_ARR[1]) + '~PO#' + ')' +ENDIF +//** P3N - 5/13/98 +//** PRINT BACKORDERED ITEMS +QTYARR := ORD_QTYS(WHCHORDER, OL_ARR) +PRNT_QTY := QTYARR[1] // LINE ITEM QTY +SHIP_QTY := QTYARR[2] // ITEMS SHIPPED +BK_ORD := QTYARR[3] // ITEMS BACKORDERD +IF EMPTY(BK_ORD) .AND. WHCHORDER == 'BACKORD' + //** ONLY PRINT THE BACKORDERED ITEMS + INCL_ALL_LINES := .F. //** P3N - 9/9/98 +//** P3N - 2/2/99 - SUMMARIZE SCREENS ON BACKORDERS TO MODEL LEVEL +ELSEIF WHICH_TYPE == 'BACKORD' .AND. SUBTYPE == 'SCREENS' //** P3N - 2/02/99 + IF !(BKOPROD == SAVE_BKOPROD) //** P3N - 2/02/99 PRINT BACKORDER + SPEC_CHAR := '^' //** P3N - 2/02/99 SCREENS SUMMARIZED + + IF LEN(PRNT_DESC) <= PRNT_LEN //** P3N - 2/02/99 TO THE MODEL LVL + IF !EMPTY(PBODY_ARR) .AND. !EMPTY(PBODY_ARR[LEN(PBODY_ARR)]) + IF PBODY_ARR[LEN(PBODY_ARR)] == '-----' + // ONLY double space when one line item for a given product + ELSE + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL) + ENDIF + ENDIF + AADD(PBODY_ARR, SPEC_CHAR + STRTRAN(PRNT_DESC, '~', ' ' ) ) + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL) + AADD(PAMTS_ARR, NIL) + SAVE_DESC1 := ALLTRIM(PRNT_DESC) + ELSE + MEMOCNT := MLCOUNT(PRNT_DESC, PRNT_LEN, 0, .T.) + PRNTOUTVAR = STRTRAN(PRNT_DESC, CHR(248), CHR(179)) + FOR II = 1 TO MEMOCNT + PRNT_VAL := MEMOTRAN(MEMOLINE(PRNTOUTVAR, PRNT_LEN, II, 0, .T.), '') + IF II = 1 + IF !EMPTY(PBODY_ARR) .AND. !EMPTY(PBODY_ARR[LEN(PBODY_ARR)]) + IF PBODY_ARR[LEN(PBODY_ARR)] == '-----' + // ONLY double space when one line item for a given product + ELSE + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL) + ENDIF + ENDIF + AADD(PBODY_ARR, SPEC_CHAR + STRTRAN(PRNT_VAL, '~', ' ') ) + AADD(PAMTS_ARR, NIL) + SAVE_DESC1 := ALLTRIM(PRNT_VAL) + ELSE + AADD(PBODY_ARR, STRTRAN(PRNT_VAL, '~', ' ') ) + AADD(PAMTS_ARR, NIL) + ENDIF + NEXT + AADD(PBODY_ARR, ' ' ) // OK - LEAVE HERE! + AADD(PAMTS_ARR, NIL) + ENDIF //** P3N - 2/02/99 + //** P3N - 2/02/99 + SAVE_BKOPROD := BKOPROD //** P3N - 2/02/99 + ENDIF +ELSEIF !(PRNT_DESC == SAVE_DESC) .OR. !(WHICH_TYPE == SAVE_TYPE) + SPEC_CHAR := '^' + IF WHICH_TYPE = 'STORM' .AND. !(PRNT_DESC = SAVE_DESC1) + SPEC_CHAR := '^' + CHR(1) + ENDIF + // IF SPEC_CHAR = '^' + CHR(1) THEN A NEW PAGE WILL BE FORCED + IF WHICH_TYPE = 'EXPANDER' .AND. !(PRNT_DESC = SAVE_DESC1) ; + .AND. MHOME_LOC_CODE = 'KC' + SPEC_CHAR := '^' + CHR(1) + ENDIF + IF LEN(PRNT_DESC) <= PRNT_LEN + IF !EMPTY(PBODY_ARR) .AND. !EMPTY(PBODY_ARR[LEN(PBODY_ARR)]) + IF PBODY_ARR[LEN(PBODY_ARR)] == '-----' + // ONLY double space when one line item for a given product + ELSE + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL) + ENDIF + ENDIF + AADD(PBODY_ARR, SPEC_CHAR + STRTRAN(PRNT_DESC, '~', ' ' ) ) + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL) + AADD(PAMTS_ARR, NIL) + SAVE_DESC1 := ALLTRIM(PRNT_DESC) + ELSE + MEMOCNT := MLCOUNT(PRNT_DESC, PRNT_LEN, 0, .T.) + PRNTOUTVAR = STRTRAN(PRNT_DESC, CHR(248), CHR(179)) + FOR II = 1 TO MEMOCNT + PRNT_VAL := MEMOTRAN(MEMOLINE(PRNTOUTVAR, PRNT_LEN, II, 0, .T.), '') + IF II = 1 + IF !EMPTY(PBODY_ARR) .AND. !EMPTY(PBODY_ARR[LEN(PBODY_ARR)]) + IF PBODY_ARR[LEN(PBODY_ARR)] == '-----' + // ONLY double space when one line item for a given product + ELSE + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL) + ENDIF + ENDIF + AADD(PBODY_ARR, SPEC_CHAR + STRTRAN(PRNT_VAL, '~', ' ') ) + AADD(PAMTS_ARR, NIL) + SAVE_DESC1 := ALLTRIM(PRNT_VAL) + ELSE + AADD(PBODY_ARR, STRTRAN(PRNT_VAL, '~', ' ') ) + AADD(PAMTS_ARR, NIL) + ENDIF + NEXT + AADD(PBODY_ARR, ' ' ) // OK - LEAVE HERE! + AADD(PAMTS_ARR, NIL) + ENDIF + SAVE_DESC := PRNT_DESC + SAVE_BKOPROD := BKOPROD //** P3N - 2/02/99 +ENDIF +IF INCL_ALL_LINES + IF VALTYPE(OL_ARR[3]) = 'A' //** ARRAY -SCREEN COPY + IF WHCHORDER == 'BACKORD' + DO_CUT_SPECS := .F. + PRNT_VAL := ALLTRIM(OL_ARR[3,2]) //* 2 - BO SCREEN DESC + ELSE + PRNT_VAL := ALLTRIM(OL_ARR[3,1]) //* 1 - SCREEN DESC + ENDIF + ELSE + PRNT_VAL := ALLTRIM(OL_ARR[3]) // ITEM LINE DESC + ENDIF + IF !EMPTY( OL_ARR[14]) + MLINE_DESC := ALLTRIM(OL_ARR[14]) + ELSE + MLINE_DESC := NIL + ENDIF + PRNT_PRICE := OL_ARR[4] // ITEM PRICE + XFACTOR := OL_ARR[12] // XTRA WINDOWS + PRT_AMT := DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) + IF WHCHORDER $ 'INV BACKORD' .AND. CUR_MAST = 'ORD_MAST' //** P3N - 5/12/98 + PRT_BO := .T. + ELSE + PRT_BO := .F. + ENDIF + IF EMPTY(OL_ARR[6]) // LINE ITEM NOTES - LINE_NOTES IN LINE DBF + ELSEIF OL_ARR[16] == 'A' // PRINT THE NOTES ABOVE THE LINE ITEM + RETVARARR := PRT_MEMO(PBODY_ARR, PAMTS_ARR, OL_ARR[6], PRNT_LEN) // PRINT THE LINE ITEM NOTES + PBODY_ARR := RETVARARR[1] + PAMTS_ARR := RETVARARR[2] + ENDIF + // ALL LINE ITEM DETAIL AMOUNTS + IF EMPTY(PRNT_VAL) // NO LINE ITEM DESC. - NO AMOUNTS + PAMTS := NIL + ELSEIF WHCHORDER == 'BACKORD' //** P3N - 5/14/98 + PAMTS := { 0 , 0 , BK_ORD , PRNT_PRICE, PRT_AMT, PRT_BO, XFACTOR, , INV_QTY } + ELSE + PAMTS := { PRNT_QTY, BK_ORD, SHIP_QTY, PRNT_PRICE, PRT_AMT, PRT_BO, XFACTOR, , INV_QTY } + ENDIF + IF WHICH_TYPE == 'INV' .OR. WHICH_TYPE == 'CTRL' // CUSTOMER INVOICE OR PROD CONTROL COPY + IF OL_ARR[4] == NIL // LINE ITEM TOTAL + ELSEIF PARTIAL_INVOICE + //** P3N - 11/23/98 - PARTIAL INVOICE MODIFICATIONS + LI_TTL := LI_TTL + (PRNT_PRICE * SHIP_QTY) // TALLY THE LINE TOTALS + ELSEIF REPRINT_INVOICE + //** P3N - 12/3/98 - REPRINT INVOICE MODIFICATIONS + LI_TTL := LI_TTL + (PRNT_PRICE * INV_QTY) // TALLY THE LINE TOTALS + ELSE + LI_TTL := LI_TTL + (PRNT_PRICE * PRNT_QTY) // TALLY THE LINE TOTALS + ENDIF + ENDIF + IF EMPTY(OL_ARR[6]) //LINE ITEM NOTES - LINE_NOTES IN LINE DBF + ELSEIF OL_ARR[16] == 'B' //PRINT THE NOTES BESIDE THE LINE ITEM + WORKVAR := STRTRAN( ALLTRIM( OL_ARR[6] ), CHR(13), '' ) + WORKVAR := STRTRAN( WORKVAR, CHR(10), ' ' ) + PRNT_VAL := PRNT_VAL + ' ' + WORKVAR + ENDIF +//** P3N - 5/13/98 +//** ONLY PRINT BACKORDERED ITEMS + IF EMPTY(BK_ORD) .AND. WHCHORDER == 'BACKORD' + PRNT_VAL := ' ' + DO_CUT_SPECS := .F. + ENDIF + IF !EMPTY(PRNT_VAL) +//**IF DO_CUT_SPECS .AND. !EMPTY(OL_ARR[13]) // LINE ITEM CUTTING SPECS +//** PAMTS := NIL //** P3N - 5/4/99 +//**ENDIF //** P3N - 5/4/99 + IF LEN(PRNT_VAL) <= PRNT_LEN + IF WHCHORDER == 'PROD' .AND. WHICH_TYPE == 'GLASS' .AND. ; //** P3N - 10/19/99 + EMPTY(PRNT_QTY) .AND. EMPTY(SHIP_QTY) .AND. EMPTY(BK_ORD) //** P3N - 10/19/99 + MGL_LINE_DESC := PRNT_VAL //** P3N - 10/19/99 + ELSE //** P3N - 10/19/99 + AADD(PBODY_ARR, STRTRAN(PRNT_VAL,'~',' ') ) // ITEM LINE FOR ALL PRODUCTION ORDERS + AADD(PAMTS_ARR, PAMTS) // ITEM LINE FOR ALL PRODUCTION ORDERS + ENDIF + ELSE + MEMOCNT := MLCOUNT(PRNT_VAL, PRNT_LEN, 0, .T.) + PRNTOUTVAR = STRTRAN(PRNT_VAL, CHR(248), CHR(179)) + FOR II = 1 TO MEMOCNT + PRNT_VAL := MEMOTRAN(MEMOLINE(PRNTOUTVAR, PRNT_LEN, II, 0, .T.), '') + AADD(PBODY_ARR, STRTRAN(PRNT_VAL,'~', ' ') ) + IF II < MEMOCNT + AADD(PAMTS_ARR, NIL) + ELSE + AADD(PAMTS_ARR, PAMTS) + ENDIF + NEXT +//** REMOVED DUE TO MULIT SPACING AT PAWNEE - P3N - 11/19/99 +//** AADD(PBODY_ARR, ' ' ) // GET RID OF THIS BLANK BETWEEN ?? +//** AADD(PAMTS_ARR, NIL) + ENDIF + ENDIF +//** P3N*4/1/98 - EXCLUDE PRINT OF CUTTING SPECS +//** P3N*4/1/98 - DOUBLE SPACE ! + IF ASCAN(OL_ARR[13], {|X| AT('X', X[9]) > 0 }) > 0 + DO_CUT_SPECS := .F. + AADD(PBODY_ARR, ' ' ) + AADD( PAMTS_ARR, NIL ) + ENDIF + IF DO_CUT_SPECS .AND. !EMPTY(OL_ARR[13]) // LINE ITEM CUTTING SPECS + CUT_SPEC_ARR := OL_ARR[13] + PRNTOUTVAR := {} + FOR I := 1 TO LEN(CUT_SPEC_ARR) + WORKVAR := '' + IF CUT_SPEC_ARR[I,7] <> NIL // CALCULATED RESULT + WORKVAR := WORKVAR + CUT_SPEC_ARR[I,4] + ' ' // PRINT DESC + WORKVAR := WORKVAR + CUT_SPEC_ARR[I,5] + ' ' // PROFILE + WORKVAR := WORKVAR + ': ' + AADD(PRNTOUTVAR, {WORKVAR, CUT_SPEC_ARR[I,7], ; + CUT_SPEC_ARR[I,11], CUT_SPEC_ARR[I,12], CUT_SPEC_ARR[I,3], ; + CUT_SPEC_ARR[I,13] , CUT_SPEC_ARR[I,14] , ; // 6-7 + CUT_SPEC_ARR[I,15] , CUT_SPEC_ARR[I,16] , ; // 8-9 + CUT_SPEC_ARR[I,17] } ) // 10 + ENDIF + NEXT + II := 0 + WAMTS_ARR := NIL + FOR I := 1 TO LEN(PRNTOUTVAR) + II ++ + // DUMP DATA IN "BUFFER" TO START FRESH LINE ON WIDTH/HEIGHT VARS. + IF PRNTOUTVAR[I,3]$'W' .AND. II = 2 // WIDTH/HEIGHT/NOTHING + AADD(PBODY_ARR, STRTRAN(WORKVAR,'~',' ') ) // WAITING TO FILL LINE - DUMP LINE FOR CLEAN WID HT + AADD(PAMTS_ARR, WAMTS_ARR) + WAMTS_ARR := NIL + II := 1 + ENDIF + IF II = 1 // 1ST ITEM IN A LINE + WORKVAR := '' + ELSE + WORKVAR := WORKVAR + ' ' + ENDIF + IF !PRNTOUTVAR[I,3]$'H' // SINCE A PAIR, TAKE QTY FROM THE WIDTH + // NUM IN SPEC ORD QTY XFACTOR + WORKQTY := PRNTOUTVAR[I,5] * (PRNTOUTVAR[I,6] * (1 + PRNTOUTVAR[I,7]) ) + ELSE + WORKQTY := 0 + ENDIF + IF !PRNTOUTVAR[I,3]$'WH' // WIDTH/HEIGHT/NOTHING + IF PRNTOUTVAR[I,5] <> 0 + WORKVAR := WORKVAR + PADR( ALLTRIM(STR( WORKQTY, 2 )),3) + ELSE + WORKVAR := WORKVAR + CHR(255) + ' ' + ENDIF + WORKVAR := WORKVAR + PRNTOUTVAR[I,1] + IF PRNTOUTVAR[I,4]$'D' // FRACTION / DECIMAL + WORKOUT := STR(PRNTOUTVAR[I,2],8,4) + ELSE + WORKOUT := PADR(PRNT_SIZE( PRNTOUTVAR[I,2] ),8) + ENDIF + WORKVAR := WORKVAR + WORKOUT +//** ELSEIF II = 1 + ELSEIF II = 1 .OR. II = 3 //** P3N - 4/6/99 + // IT IS A WIDTH OR HEIGHT CUT SPEC + IF !EMPTY(PRNTOUTVAR[I,8]) // WIDTH/HEIGHT DESCRIPTION + AADD(PBODY_ARR, PRNTOUTVAR[I,8] ) + AADD(PAMTS_ARR, NIL ) + ENDIF + WORKVAR := WORKVAR + ' ' + ALLTRIM(PRNT_SIZE( PRNTOUTVAR[I,2] )) + '~~x' + IF WORKQTY = 0 + WAMTS_ARR := NIL + ELSEIF WHCHORDER == 'BACKORD' + WAMTS_ARR := { 0 , 0 , BK_ORD , 0, .F., .T., 0 } +************WAMTS_ARR := { SHIP_QTY, BK_ORD, PRNT_QTY , 0, .F., .T., 0 } + ELSE + WAMTS_ARR := { WORKQTY, 0, 0, 0, .F., .F., 0 } + ENDIF + // WIDTH/HEIGHT/NOTHING + ELSE // ASSUME PREVIOUS ONE WAS A WIDTH + WORKVAR := ALLTRIM(WORKVAR) + ' ' + WORKVAR := WORKVAR + ALLTRIM(PRNT_SIZE( PRNTOUTVAR[I,2] )) + ENDIF + // LAST ONE ON LINE OR IN ARRAY +//** IF I = LEN(PRNTOUTVAR) .OR. II = 2 + //** PRINT STORM COPY COLUMN FORMAT (IE: C200007 @ IOLA) + IF I = LEN(PRNTOUTVAR) .OR. II >= 2 //** P3N - 4/6/99 + IF PRNTOUTVAR[I,10] == 'S' //** P3N - 4/6/99 + IF II = 2 //** P3N - 4/6/99 + WORKVAR := PADR(WORKVAR , 20, ' ') //** P3N - 4/6/99 + ELSEIF II = 4 //** P3N - 4/6/99 + AADD(PBODY_ARR, STRTRAN(WORKVAR,'~',' ') ) + AADD( PAMTS_ARR, WAMTS_ARR ) //** P3N - 4/6/99 + WAMTS_ARR := NIL //** P3N - 4/6/99 + ENDIF //** P3N - 4/6/99 + ELSE + WORKVAR := WORKVAR+' '+MGL_LINE_DESC //** P3N - 10/19/99 + AADD(PBODY_ARR, STRTRAN(WORKVAR,'~',' ')) + AADD( PAMTS_ARR, WAMTS_ARR ) + IF PRNTOUTVAR[I,3]$'WH' + // EXTRA LINE DESCRIPTION + IF !EMPTY(OL_ARR[14]) .AND. PRNTOUTVAR[I,10]$'Y ' // PRINT ITEM DESC + AADD(PBODY_ARR, STRTRAN(OL_ARR[14],'~',' ') ) + AADD( PAMTS_ARR, NIL ) + ENDIF + ENDIF + WAMTS_ARR := NIL + ENDIF + ENDIF +//** IF II = 2 +//** II := 0 +//** ENDIF + IF II >= 2 //** P3N - 4/6/99 + //** PRINT STORM COPY COLUMN FORMAT (IE: C200007 @ IOLA) + IF PRNTOUTVAR[I,10] == 'S' //** P3N - 4/6/99 + IF II > 3 //** P3N - 4/6/99 + II := 0 //** P3N - 4/6/99 + ENDIF //** P3N - 4/6/99 + ELSE //** P3N - 4/6/99 + II := 0 //** P3N - 4/6/99 + ENDIF //** P3N - 4/6/99 + ENDIF //** P3N - 4/6/99 + NEXT + IF EMPTY(OL_ARR[6]) // LINE ITEM NOTES - LINE_NOTES IN LINE DBF + ELSEIF OL_ARR[16] == 'U' // PRINT THE NOTES UNDER THE LINE ITEM + RETVARARR := PRT_MEMO(PBODY_ARR, PAMTS_ARR, OL_ARR[6], PRNT_LEN) // PRINT THE LINE ITEM NOTES + PBODY_ARR := RETVARARR[1] + PAMTS_ARR := RETVARARR[2] + ENDIF + IF LEN(PRNTOUTVAR) > 0 + AADD(PBODY_ARR, ' ' ) // DOUBLE SPACE + AADD(PAMTS_ARR, WAMTS_ARR) + WAMTS_ARR := NIL + ENDIF + ELSE + IF EMPTY(OL_ARR[6]) // LINE ITEM NOTES - LINE_NOTES IN LINE DBF + ELSEIF OL_ARR[16] == 'U' // PRINT THE NOTES UNDER THE LINE ITEM + RETVARARR := PRT_MEMO(PBODY_ARR, PAMTS_ARR, OL_ARR[6], PRNT_LEN) // PRINT THE LINE ITEM NOTES + PBODY_ARR := RETVARARR[1] + PAMTS_ARR := RETVARARR[2] + ENDIF + ENDIF +ENDIF +SAVE_TYPE := WHICH_TYPE +IF DBLSPACE(WHICH_TYPE, WHCHORDER, SUBTYPE, MPROD_CODE) //** P3N - 02/12/04 + AADD(PBODY_ARR, ' ' ) //** P3N - 02/12/04 + AADD( PAMTS_ARR, NIL ) //** P3N - 02/12/04 +ENDIF //** P3N - 02/12/04 +RETURN {LI_TTL, PBODY_ARR, PAMTS_ARR} +*************************************************************** +* P3N - 2/12/04 SHOULD WE DOUBLE SPACE THIS ORDER? +*************************************************************** +FUNCTION DBLSPACE(WHICH_TYPE, WHCHORDER, SUBTYPE, P_PROD) //** P3N - 02/12/04 +LOCAL RETVAL := .F. +LOCAL ITEM_CAT_CODE := GET_CATCODE( P_PROD ) +IF EMPTY(SUBTYPE) + SUBTYPE := '' +ENDIF +IF CATEGORY->(DBSEEK( ITEM_CAT_CODE )) + IF WHCHORDER = 'PROD' + IF WHICH_TYPE = 'FRAME'.AND.AT('F', UPPER(CATEGORY->DBLSP_PROD)) >0 + RETVAL := .T. + ENDIF + IF WHICH_TYPE = 'STORM'.AND.AT('F', UPPER(CATEGORY->DBLSP_PROD)) >0 + RETVAL := .T. + ENDIF + IF WHICH_TYPE = 'GLASS'.AND.AT('G', UPPER(CATEGORY->DBLSP_PROD)) >0 + RETVAL := .T. + ENDIF + IF WHICH_TYPE = 'SCREEN'.AND.AT('S', UPPER(CATEGORY->DBLSP_PROD)) >0 + RETVAL := .T. + ENDIF + IF WHICH_TYPE = 'CTRL'.AND.AT('R', UPPER(CATEGORY->DBLSP_PROD)) >0 + //** SUBTYPE = 'GOLDEN' + RETVAL := .T. + ENDIF + ELSEIF WHCHORDER = 'OD' + IF SUBTYPE = 'DELIVERY'.AND.AT('D', UPPER(CATEGORY->DBLSP_OD)) >0 + //** DELIVERY COPY + RETVAL := .T. + ENDIF + IF SUBTYPE = 'ORDERDESK'.AND.AT('O', UPPER(CATEGORY->DBLSP_OD)) >0 + //** ORDERDESK COPY + RETVAL := .T. + ENDIF + IF SUBTYPE = 'PO'.AND.AT('I', UPPER(CATEGORY->DBLSP_OD)) >0 + //** INTERCOMPANY PURCHASE ORDER + RETVAL := .T. + ENDIF + ELSEIF WHCHORDER = 'INV' + IF EMPTY(SUBTYPE).AND.AT('I', UPPER(CATEGORY->DBLSP_INV)) >0 + //** CUSTOMER INVOICE COPY + RETVAL := .T. + ENDIF + IF SUBTYPE = 'PREBILL'.AND.AT('B', UPPER(CATEGORY->DBLSP_INV)) >0 + //** PREBILL INVOICE COPY + RETVAL := .T. + ENDIF + IF SUBTYPE = 'PRECOST'.AND.AT('C', UPPER(CATEGORY->DBLSP_INV)) >0 + //** PRECOST INVOICE COPY + RETVAL := .T. + ENDIF + ELSEIF WHCHORDER = 'BACKORD' + IF CATEGORY->DBLSP_BO = 'Y' + RETVAL := .T. + ENDIF + ENDIF +**ERR_BOX('FOUND ITEM_CAT_CODE = ' + ITEM_CAT_CODE, ; +** 'PROD CODE = ' + P_PROD, 'SUBTYPE = '+ SUBTYPE, ; +** 'WHCHORDER = ' + WHCHORDER, 'WHICH_TYPE = '+ WHICH_TYPE) +ENDIF +RETURN RETVAL +*************************************************************** +* P3N - 2/12/04 VALIDATE THE CATEGROY DOUBLE SPACE CODES +*************************************************************** +FUNCTION VAL_DBLSP(CMD) +//** CMD - "PROD" PRODUCTION ORDER COPIES +//** CMD - "OD" ORDERDESK ORDER COPIES +//** CMD - "INV" INVOICE ORDER COPIES +//** CMD - "BO" BACKORDER ORDER COPIES +LOCAL RETVAL := .T. +IF CMD = 'PROD' +* ERR_BOX('Prodction double spaceing opts: "F", "G", "S" are valid') +* RETVAL := .F. +ELSEIF CMD = 'OD' +* IF CATEGORY->DBLSP_OD +ELSEIF CMD = 'INV' +* IF CATEGORY->DBLSP_INV +ELSEIF CMD = 'BO' +* IF CATEGORY->DBLSP_BO +ELSE +* ERR_BOX('Invalid CMD in VAL_DBLSP() function') +ENDIF +RETURN RETVAL +*************************************************************** +* P3N - 5/22/98 ARE THERE ANY BACKORDER ITEMS TO PRINT? +*************************************************************** +FUNCTION ORD_QTYS(WHCHORDER, OL_ARR) +LOCAL ELM, OLQTY, NUM_IN_SPEC, XFACTOR, CALCQTY, SCRNKEY, ADDLKEY +LOCAL PRNT_QTY := OL_ARR[7] // ITEM QUANTITY +LOCAL SHIP_QTY := OL_ARR[11] // ITEM SHIPPED QTY +LOCAL CUT_SPEC_ARR := OL_ARR[13] // CUTTING SPECS ARR +LOCAL LINE_NUM := OL_ARR[9] // ORDER LINE_NUM +LOCAL PAR_PROD := OL_ARR[10] //ORDER PROD_CODE-PAR_PROD FOR SCREENS +LOCAL BK_ORD := 0 //** P3N - 11/12/98 +IF EMPTY(PRNT_QTY) //** P3N - 11/12/98 + PRNT_QTY := 0 //** P3N - 11/12/98 +ENDIF //** P3N - 11/12/98 +IF EMPTY(SHIP_QTY) //** P3N - 11/12/98 + SHIP_QTY := 0 //** P3N - 11/12/98 +ENDIF //** P3N - 11/12/98 +BK_ORD := PRNT_QTY - SHIP_QTY // BACK ORDER QTY +IF WHCHORDER == 'BACKORD' + IF EMPTY(PRNT_QTY) + ADDLKEY := MORDER_NUM + PAR_PROD + LINE_NUM + IF ADDL_LINES->(DBSEEK(ADDLKEY)) + OLQTY := ADDL_LINES->QUANTITY + ADDLKEY := MORDER_NUM + LINE_NUM + PAR_PROD + SHIP_QTY := SCRN_SHPQTY(ADDLKEY) + BK_ORD := OLQTY - SHIP_QTY + ELSE + ELM := ASCAN(CUT_SPEC_ARR, {|X| AT('N', X[9]) > 0 }) // IS THIS A SCREEN SPEC? + IF EMPTY(ELM) + ELSE + OLQTY := CUT_SPEC_ARR[ELM, 3] + NUM_IN_SPEC := CUT_SPEC_ARR[ELM, 13] + XFACTOR := CK_XTRAWIND( 'ORD_LINES', 'ORDER_OPTS', .F. ) + CALCQTY := OLQTY * NUM_IN_SPEC * ( 1 + XFACTOR ) + PRNT_QTY := CALCQTY //** LINE ITEM QTY + SCRNKEY := MORDER_NUM + LINE_NUM + 'SCREENS' + PAR_PROD + SHIP_QTY := SCRN_SHPQTY(SCRNKEY) + BK_ORD := CALCQTY - SHIP_QTY + ENDIF + ENDIF + ENDIF +ENDIF +RETURN { PRNT_QTY, SHIP_QTY, BK_ORD } +*************************************************************** +* P3N - 5/22/98 GET THE SHIPPED SCREENS TO PRINT ON BACK ORDER! +*************************************************************** +FUNCTION SCRN_SHPQTY(SCRNKEY) +RETVAL := 0 +IF ORD_SHIP->(DBSEEK(SCRNKEY)) + DO WHILE ORD_SHIP->(!EOF()) .AND. ; + ( ORD_SHIP->ORDER_NUM + STR(ORD_SHIP->LINE_NUM, 3) + ; + ORD_SHIP->PROD_CODE + ORD_SHIP->PAR_PROD == SCRNKEY ) + RETVAL := RETVAL + ORD_SHIP->SHIP_QTY + ORD_SHIP->(DBSKIP(+1)) + ENDDO +ENDIF +RETURN RETVAL +*************************************************************** +*************************************************************** +*************************************************************** +FUNCTION DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) +LOCAL PRT_AMT := .F. +//**IF (CUR_MAST)->TERMS = '90' .OR. ; //** NO CHARGE //**P3N - 4/27/98 +//** (CUR_MAST)->TERMS = '96' //** CANCELLATION //**P3N - 4/27/98 +IF ZERO_ORDER() //** NO CHARGE //**P3N - 3/05/99 + //** FOR A NO CHARGE OR CANCELLATION FORCE TO NOT PRINT AMTS +ELSEIF WHCHORDER == 'INV' + IF ITEMIZE = 1 + PRT_AMT := .T. + ENDIF +ELSEIF WHCHORDER == 'OD' // ORDER DESK + PRT_AMT := .T. + IF MHOME_LOC_CODE = 'LINDS' .AND. SUBTYPE == 'ORDERDESK' + //PER LINDA @ LINDSBOURG 11-10-97 + //PRINT GL ALLOCATIONS / ORDER AMOUNTS ON ORDERDESK - GOLDEN ROD +****ELSEIF MHOME_LOC_CODE = 'KC' .AND. SUBTYPE == 'ORDERDESK' +**** //PER ELLEN @ KC 10-26-98 +**** //DO NOT PRINT GL ALLOCATIONS / ORDER AMOUNTS ON ORDERDESK - GOLDEN ROD +**** PRT_AMT := .F. + ELSEIF SUBTYPE == 'DELIVERY' .AND. !IS_COD( (CUR_MAST)->TERMS ) + PRT_AMT := .F. + ELSEIF SUBTYPE == 'PO' // DO NOT PRINT AMTS ON THE INTERCOMPANY COPY + PRT_AMT := .F. + ELSEIF (CUR_MAST)->PRICE_SHT$'I' //** P3N - 01/30/06 + //** P3N - 01/30/06 PER PAT PRINT PRICING ON ODERDESK COPY FOR SPECIAL DEALERS + //**ELSEIF (CUR_MAST)->PRICE_SHT$'IS' //** P3N - 01/30/06 + //DO NOT PRINT AMTS ON OD COPY WHEN INTERCOMPANY OR SPECIAL DEALER PRICING! + PRT_AMT := .F. + ENDIF +ELSEIF WHCHORDER == 'BACKORD' //** P3N - 5/1/98 + PRT_AMT := .F. //** P3N - 5/1/98 +ENDIF +RETURN PRT_AMT +******************************************************************** +// PRINT THE PRODUCTION LINE MEMOS +******************************************************************** +FUNCTION PRT_MEMO(PBODY_ARR, PAMTS_ARR, PROD_MEMO, PRNT_LEN) +LOCAL MEMOCNT, PRNTOUTVAR, PRNT_VAL, I +MEMOCNT := MLCOUNT(PROD_MEMO, PRNT_LEN, 0, .T.) +PRNTOUTVAR = STRTRAN(PROD_MEMO, CHR(248), CHR(179)) +FOR I = 1 TO MEMOCNT + PRNT_VAL := MEMOTRAN(MEMOLINE(PRNTOUTVAR, PRNT_LEN, I, 0, .T.), '') + AADD(PBODY_ARR, PRNT_VAL ) + AADD(PAMTS_ARR, NIL) +NEXT +RETURN { PBODY_ARR, PAMTS_ARR } + +********** +// THIS PRG IS A print port manager for lib programs +// needing multiple output routings. +// will be called IF FILE('PRINTERS.DBF') + +PROCEDURE CUSTOMPRINT() + +LOCAL CLOSE_ARR := {}, PRN_LIST := {} + +* - SELECT A PRINTER FROM THE TABLE BELOW +* +* draw input screen +* + + +AADD(PRN_LIST , 'OKI') +AADD(PRN_LIST , 'EPS') +AADD(PRN_LIST , 'HPJ') // MOVED HERE 6-10-20 +AADD(PRN_LIST , 'PRW') +AADD(PRN_LIST , 'PRN') +AADD(PRN_LIST , 'P90') +AADD(PRN_LIST , 'HPD') +AADD(PRN_LIST , 'HP4') + + +_REPTPRNT := STR(ASCAN(PRN_LIST, {|X| X = REPT_PRN}),1) +_BOPRNT := STR(ASCAN(PRN_LIST, {|X| X = BO_PRN}),1) //** P3N - 4/30/98 +_PRODPRNT := STR(ASCAN(PRN_LIST, {|X| X = PROD_PRN}),1) +_ODPRNT := STR(ASCAN(PRN_LIST, {|X| X = OD_PRN}),1) +_INVPRNT := STR(ASCAN(PRN_LIST, {|X| X = INV_PRN}),1) +_DELPRNT := STR(ASCAN(PRN_LIST, {|X| X = DEL_PRN}),1) +_GRPRNT := STR(ASCAN(PRN_LIST, {|X| X = GR_PRN}),1) +_ICPRNT := STR(ASCAN(PRN_LIST, {|X| X = IC_PRN}),1) +_LBLPRNT := STR(ASCAN(PRN_LIST, {|X| X = LBL_PRN}),1) +_QTEPRNT := STR(ASCAN(PRN_LIST, {|X| X = INV_PRN}),1) +_PREPRNT := STR(ASCAN(PRN_LIST, {|X| X = INV_PRN}),1) + +// 3/31/2021 - ADJUSTMENT FACTOR FOR WIDTH/HEIGHT OF PRINT +_REPTFACW := REPT_FACW +_REPTFACH := REPT_FACH +IF _REPTFACW = 0 + _REPTFACW := 100 +ENDIF +IF _REPTFACH = 0 + _REPTFACH := 100 +ENDIF + +_PRODFACW := PROD_FACW +_PRODFACH := PROD_FACH +IF _PRODFACW = 0 + _PRODFACW := 100 +ENDIF +IF _PRODFACH = 0 + _PRODFACH := 100 +ENDIF + +_ODFACW := OD_FACW +_ODFACH := OD_FACH +IF _ODFACW = 0 + _ODFACW := 100 +ENDIF +IF _ODFACH = 0 + _ODFACH := 100 +ENDIF + +_INVFACW := INV_FACW +_INVFACH := INV_FACH +IF _INVFACW = 0 + _INVFACW := 100 +ENDIF +IF _INVFACH = 0 + _INVFACH := 100 +ENDIF + +_DELFACW := DEL_FACW +_DELFACH := DEL_FACH +IF _DELFACW = 0 + _DELFACW := 100 +ENDIF +IF _DELFACH = 0 + _DELFACH := 100 +ENDIF + +_GRFACW := GR_FACW +_GRFACH := GR_FACH +IF _GRFACW = 0 + _GRFACW := 100 +ENDIF +IF _GRFACH = 0 + _GRFACH := 100 +ENDIF + +_LBLFACW := LBL_FACW +_LBLFACH := LBL_FACH +IF _LBLFACW = 0 + _LBLFACW := 100 +ENDIF +IF _LBLFACH = 0 + _LBLFACH := 100 +ENDIF + +_ICFACW := IC_FACW +_ICFACH := IC_FACH +IF _ICFACW = 0 + _ICFACW := 100 +ENDIF +IF _ICFACH = 0 + _ICFACH := 100 +ENDIF + +_BOFACW := BO_FACW +_BOFACH := BO_FACH +IF _BOFACW = 0 + _BOFACW := 100 +ENDIF +IF _BOFACH = 0 + _BOFACH := 100 +ENDIF + +_QTEFACW := QTE_FACW +_QTEFACH := QTE_FACH +IF _QTEFACW = 0 + _QTEFACW := 100 +ENDIF +IF _QTEFACH = 0 + _QTEFACH := 100 +ENDIF + +_PREFACW := PRE_FACW +_PREFACH := PRE_FACH +IF _PREFACW = 0 + _PREFACW := 100 +ENDIF +IF _PREFACH = 0 + _PREFACH := 100 +ENDIF + +M_LPTR := REPT_PORT +M_LPTP := PROD_PORT +M_LPTO := OD_PORT +M_LPTI := INV_PORT +M_LPTD := DEL_PORT +M_LPTG := GR_PORT +M_LPTL := LBL_PORT +M_LPTIC := IC_PORT +M_LPTBO := BO_PORT //** P3N - 4/30/98 +M_LPTQ := INV_PORT //** P3N - 4/13/98 +M_LPTPRE := INV_PORT //** P3N - 4/13/98 +IF FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 + M_LPTQ := QTE_PORT //** P3N - 4/13/98 +ENDIF +IF FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 + M_LPTPRE := PRE_PORT //** P3N - 4/13/98 +ENDIF + +SELECT WORKSTAT + +DO WHILE .T. + CLEAR + TITLE = 'SELECT PRINTER' + H = ((80 - LEN(TITLE)) / 2) + @ 0,H SAY TITLE + @ 0,74 SAY 'PDEF' + @ 1,0 SAY DOUBLE + @ 3,72 SAY DTOC(DATE()) + @ 5,28 SAY " AVAILABLE PRINTERS " + @ 6,28 SAY " ================== " + @ 7,26 SAY "1. Okidata Microline 84" + @ 8,26 SAY "2. Epson (All Models)" + @ 9,26 SAY "3. HP LaserJet " + LOOP4100 := .T. + DO WHILE LOOP4100 + SET CONFIRM OFF + @ 4,72 SAY TIME() + + // 3/31/2021 - Set ZOOM Factor for each one. + @ 11,09 SAY " Set ZOOM Resize Factor from 100% ------>Width Height" + @ 12,09 SAY " Select REPORTS Printer : : LPT Port : : : : : :" + @ 13,09 SAY " Select PRODUCTION Printer : : LPT Port : : : : : :" + @ 14,09 SAY " Select ORDER DESK Printer : : LPT Port : : : : : :" + @ 15,09 SAY " Select INVOICE Printer : : LPT Port : : : : : :" + @ 16,09 SAY " Select DELIVERY Printer : : LPT Port : : : : : :" + @ 17,09 SAY " Select GOLDEN ROD Printer : : LPT Port : : : : : :" + @ 18,09 SAY "Select MAILING LABEL Printer : : LPT Port : : : : : :" + @ 19,09 SAY " Select INTERCOMPANY Printer : : LPT Port : : : : : :" + @ 20,09 SAY " Select BACKORDER Printer : : LPT Port : : : : : :" + IF FIELDPOS('QTE_PRN') > 0 .AND. FIELDPOS('QTE_PORT') > 0 + @ 21,09 SAY " Select QUOTE Printer : : LPT Port : : : : : :" + ENDIF + IF FIELDPOS('PRE_PRN') > 0 .AND. FIELDPOS('PRE_PORT') > 0 + @ 22,09 SAY " Select PREBILL Printer : : LPT Port : : : : : :" + ENDIF + + DO WHILE .T. + @ 12,39 GET _REPTPRNT PICTURE '9' VALID CHK_PRN(_REPTPRNT) + @ 12,54 GET M_LPTR PICTURE '9' VALID M_LPTR$'1234' + @ 12,60 GET _REPTFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 12,66 GET _REPTFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + + @ 13,39 GET _PRODPRNT PICTURE '9' VALID CHK_PRN(_PRODPRNT) + @ 13,54 GET M_LPTP PICTURE '9' VALID M_LPTP$'1234' + @ 13,60 GET _PRODFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 13,66 GET _PRODFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + + @ 14,39 GET _ODPRNT PICTURE '9' VALID CHK_PRN(_ODPRNT) + @ 14,54 GET M_LPTO PICTURE '9' VALID M_LPTO$'1234' + @ 14,60 GET _ODFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 14,66 GET _ODFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + + @ 15,39 GET _INVPRNT PICTURE '9' VALID CHK_PRN(_INVPRNT) + @ 15,54 GET M_LPTI PICTURE '9' VALID M_LPTI$'1234' + @ 15,60 GET _INVFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 15,66 GET _INVFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + + @ 16,39 GET _DELPRNT PICTURE '9' VALID CHK_PRN(_DELPRNT) + @ 16,54 GET M_LPTD PICTURE '9' VALID M_LPTD$'1234' + @ 16,60 GET _DELFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 16,66 GET _DELFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + + @ 17,39 GET _GRPRNT PICTURE '9' VALID CHK_PRN(_GRPRNT) + @ 17,54 GET M_LPTG PICTURE '9' VALID M_LPTG$'1234' + @ 17,60 GET _GRFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 17,66 GET _GRFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + + @ 18,39 GET _LBLPRNT PICTURE '9' VALID CHK_PRN(_LBLPRNT) + @ 18,54 GET M_LPTL PICTURE '9' VALID M_LPTL$'1234' + @ 18,60 GET _LBLFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 18,66 GET _LBLFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + + @ 19,39 GET _ICPRNT PICTURE '9' VALID CHK_PRN(_ICPRNT) + @ 19,54 GET M_LPTIC PICTURE '9' VALID M_LPTIC$'1234' + @ 19,60 GET _ICFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 19,66 GET _ICFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + + @ 20,39 GET _BOPRNT PICTURE '9' VALID CHK_PRN(_BOPRNT) //** P3N - 4/30/98 + @ 20,54 GET M_LPTBO PICTURE '9' VALID M_LPTBO$'1234' + @ 20,60 GET _BOFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 20,66 GET _BOFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + + IF FIELDPOS('QTE_PRN') > 0 .AND. FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 + @ 21,39 GET _QTEPRNT PICTURE '9' VALID CHK_PRN(_QTEPRNT) + @ 21,54 GET M_LPTQ PICTURE '9' VALID M_LPTQ$'1234' + @ 21,60 GET _QTEFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 21,66 GET _QTEFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + ENDIF + + IF FIELDPOS('PRE_PRN') > 0 .AND. FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 + @ 22,39 GET _PREPRNT PICTURE '9' VALID CHK_PRN(_PREPRNT) + @ 22,54 GET M_LPTPRE PICTURE '9' VALID M_LPTPRE$'1234' + @ 22,60 GET _PREFACW PICTURE '999' // 3/31/2021 - WIDTH FACTOR + @ 22,66 GET _PREFACH PICTURE '999' // 3/31/2021 - HEIGHT FACTOR + ENDIF + + READ + IF LASTKEY() == 27 .AND. PROCNAME(1) <> 'SET_PRNT_P' + CLS + FOR L = 1 TO LEN(CLOSE_ARR) + MFILE = CLOSE_ARR[L] + SELECT(MFILE) + USE + NEXT + RETURN + ENDIF + + IF EMPTY(M_LPTR) .OR. EMPTY(M_LPTP) .OR. EMPTY(M_LPTO); + .OR. EMPTY(M_LPTI) .OR. EMPTY(M_LPTD) .OR. EMPTY(M_LPTG) + LOOP + ENDIF + CORR = CORRCHEK() + IF CORR = 'Y' + LOOP4100 := .F. + EXIT + ENDIF + IF LASTKEY() == 27 .AND. PROCNAME(1) <> 'SET_PRNT_P' + CLEAR + FOR L = 1 TO LEN(CLOSE_ARR) + MFILE = CLOSE_ARR[L] + SELECT(MFILE) + USE + NEXT + RETURN + ENDIF + ENDDO + ENDDO + SETCOLOR(LNOR) + SELECT WORKSTAT + REC_LOCK(1) + REPLACE REPT_PRN WITH PRN_LIST[VAL(_REPTPRNT)] + REPLACE PROD_PRN WITH PRN_LIST[VAL(_PRODPRNT)] + REPLACE OD_PRN WITH PRN_LIST[VAL(_ODPRNT)] + REPLACE INV_PRN WITH PRN_LIST[VAL(_INVPRNT)] + REPLACE DEL_PRN WITH PRN_LIST[VAL(_DELPRNT)] + REPLACE GR_PRN WITH PRN_LIST[VAL(_GRPRNT)] + REPLACE LBL_PRN WITH PRN_LIST[VAL(_LBLPRNT)] + REPLACE IC_PRN WITH PRN_LIST[VAL(_ICPRNT)] + REPLACE BO_PRN WITH PRN_LIST[VAL(_BOPRNT)] //** P3N - 4/30/98 + IF FIELDPOS('QTE_PRN') > 0 //** P3N - 4/13/98 + REPLACE QTE_PRN WITH PRN_LIST[VAL(_QTEPRNT)] //** P3N - 4/13/98 + ENDIF + IF FIELDPOS('PRE_PRN') > 0 //** P3N - 4/13/98 + REPLACE PRE_PRN WITH PRN_LIST[VAL(_PREPRNT)] //** P3N - 4/13/98 + ENDIF + REPLACE REPT_PORT WITH M_LPTR + REPLACE PROD_PORT WITH M_LPTP + REPLACE OD_PORT WITH M_LPTO + REPLACE INV_PORT WITH M_LPTI + REPLACE DEL_PORT WITH M_LPTD + REPLACE GR_PORT WITH M_LPTG + REPLACE LBL_PORT WITH M_LPTL + REPLACE IC_PORT WITH M_LPTIC + REPLACE BO_PORT WITH M_LPTBO //** P3N - 4/30/98 + IF FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 + REPLACE QTE_PORT WITH M_LPTQ //** P3N - 4/13/98 + ENDIF + IF FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 + REPLACE PRE_PORT WITH M_LPTPRE //** P3N - 4/13/98 + ENDIF + + // 3/31/2021 - ADJUSTMENT FACTOR FOR WIDTH/HEIGHT OF PRINT + REPLACE REPT_FACW WITH _REPTFACW + REPLACE REPT_FACH WITH _REPTFACH + + REPLACE PROD_FACW WITH _PRODFACW + REPLACE PROD_FACH WITH _PRODFACH + + REPLACE OD_FACW WITH _ODFACW + REPLACE OD_FACH WITH _ODFACH + + REPLACE INV_FACW WITH _INVFACW + REPLACE INV_FACH WITH _INVFACH + + REPLACE DEL_FACW WITH _DELFACW + REPLACE DEL_FACH WITH _DELFACH + + REPLACE GR_FACW WITH _GRFACW + REPLACE GR_FACH WITH _GRFACH + + REPLACE LBL_FACW WITH _LBLFACW + REPLACE LBL_FACH WITH _LBLFACH + + REPLACE IC_FACW WITH _ICFACW + REPLACE IC_FACH WITH _ICFACH + + REPLACE BO_FACW WITH _BOFACW + REPLACE BO_FACH WITH _BOFACH + + REPLACE QTE_FACW WITH _QTEFACW + REPLACE QTE_FACH WITH _QTEFACH + + REPLACE PRE_FACW WITH _PREFACW + REPLACE PRE_FACH WITH _PREFACH + + // RESET THE SYSTEM VARIABLES TOO!!! + FOR L = 1 TO LEN(CLOSE_ARR) + MFILE = CLOSE_ARR[L] + SELECT(MFILE) + USE + NEXT + + CLEAR SCREEN + RETURN +ENDDO WHILE .T. + +RETURN + +* * * * * * * * * * * * * * * * * + +// @ 12,10 SAY " Select REPORTS Printer : : LPT Port : :" +// @ 13,10 SAY " Select PRODUCTION Printer : : LPT Port : :" +// @ 14,10 SAY " Select ORDER DESK Printer : : LPT Port : :" +// @ 15,10 SAY " Select INVOICE Printer : : LPT Port : :" +// @ 16,10 SAY " Select DELIVERY Printer : : LPT Port : :" +// @ 17,10 SAY " Select GOLDEN ROD Printer : : LPT Port : :" +// @ 18,10 SAY "Select MAILING LABEL Printer : : LPT Port : :" +// @ 19,10 SAY " Select INTERCOMPANY Printer : : LPT Port : :" +// @ 20,10 SAY " Select BACKORDER Printer : : LPT Port : :" //** P3N 4/30/98 +// IF FIELDPOS('QTE_PRN') > 0 .AND. FIELDPOS('QTE_PORT') > 0 //** P3N - 4/13/98 +// @ 21,10 SAY " Select QUOTE Printer : : LPT Port : :" +// ENDIF +// IF FIELDPOS('PRE_PRN') > 0 .AND. FIELDPOS('PRE_PORT') > 0 //** P3N - 4/13/98 +// @ 22,10 SAY " Select PREBILL Printer : : LPT Port : :" +// ENDIF + + +********************************************************************** \ No newline at end of file diff --git a/CGWPRNT2.PRG b/CGWPRNT2.PRG new file mode 100644 index 0000000..f30b62c --- /dev/null +++ b/CGWPRNT2.PRG @@ -0,0 +1,2365 @@ +***************************************************************** +//** P3N - 8/20/99 - MOVED FROM CGWPRINT.PRG +//** P3N - 8/20/99 - CGWPRINT.PRG WAS TOOO BIG FOR THE DBUGER +***************************************************************** +FUNCTION FORMAT_PRT(BODY_DESC, PAMTS_ARR, PADSZ, SUBTYPE, WHCHORDER, ; + PARTIAL_INVOICE, REPRINT_INVOICE ) +LOCAL PRT_VAL, NEGAMT, NEGTOT, PRT_AMTS := PAMTS_ARR[5], PRT_BO := PAMTS_ARR[6] +LOCAL BOQTY := PAMTS_ARR[2], SHPQTY := PAMTS_ARR[3], INVQTY := 0 +LOCAL OQTY := PAMTS_ARR[1], XQTY := PAMTS_ARR[7], XUOM := ' ', MIENTRYSZ := 0 +LOCAL PRT_QTY := 0, TOTWINDOWS := XQTY + 1, WORKVAR +IF WHCHORDER == 'BACKORD' //** P3N -12/2/98 + BOQTY := PAMTS_ARR[3] //** P3N -12/2/98 + SHPQTY := 0 //** P3N -12/2/98 +ENDIF +IF LEN(PAMTS_ARR) >= 8 + IF EMPTY(PAMTS_ARR[8]) //** P3N - 12/3/98 + XUOM := ' ' + ELSE + XUOM := ALLTRIM(PAMTS_ARR[8]) + ' ' //** P3N - 12/01/98 + ENDIF +ENDIF +IF LEN(PAMTS_ARR) >= 9 //** P3N - 12/3/98 + IF EMPTY(PAMTS_ARR[9]) //** P3N - 12/3/98 + INVQTY := 0 //** P3N - 12/3/98 + ELSE //** P3N - 12/3/98 + INVQTY := PAMTS_ARR[9] //** P3N - 12/3/98 + ENDIF +ENDIF +/////////////*****************\\\\\\\\\\\\\\\\\\\\\\\ +//** IF THE OQTY IS AN ARRAY - IT CONTAINS THE QTY AND THE +//** MISC_ITEMS ENTRY SIZE WHICH WILL PRINT IN THE PLACE OF THE QTY. +/////////////*****************\\\\\\\\\\\\\\\\\\\\\\\ +IF VALTYPE(OQTY) = 'A' + PAMTS_ARR[1] := OQTY[1] + MIENTRYSZ := FORMAT_MISCSIZE( OQTY[2] ) + OQTY := PAMTS_ARR[1] //** NUMERIC MISC ITEM ORDER QTY +ELSEIF EMPTY(OQTY) // NUMERIC QUANTITY //** P3N - 6/5/98 + OQTY := 0 //** P3N - 12/2/98 +ENDIF +IF VALTYPE(MIENTRYSZ) = 'N' //** P3N -12/3/98 + IF EMPTY(MIENTRYSZ) //** P3N -12/3/98 + ELSE //** P3N -12/3/98 + XUOM := STR(MIENTRYSZ) + ' ' + XUOM //** P3N -12/3/98 + OQTY := 0 //** P3N - 5/26/98 + BOQTY := 0 //** P3N - 5/26/98 + SHPQTY := 0 //** P3N - 5/26/98 + ENDIF //** P3N -12/3/98 + IF WHCHORDER == 'BACKORD' //** P3N -12/3/98 + IF EMPTY(BOQTY) //** P3N - 5/26/99 + PRT_VAL := SPACE(13) //** P3N - 5/26/99 + //** IOLA AND PAWNEE USE DELIVERY COPIES FOR BACKORDERS + ELSEIF MHOME_LOC_CODE = 'PAWNEE' //** P3N - 2/23/99 + IF BOQTY <= 999 //** P3N - 2/23/99 + PRT_VAL := SPACE(5) + STR(BOQTY, 4,0)+SPACE(4) + ELSE //** P3N - 2/23/99 + PRT_VAL := SPACE(3) + STR(BOQTY, 6,0)+SPACE(4) + ENDIF //** P3N - 2/23/99 + ELSEIF MHOME_LOC_CODE = 'IOLA' //** P3N - 3/09/99 + IF BOQTY <= 999 //** P3N - 3/09/99 + PRT_VAL := SPACE(4) + STR(BOQTY, 4,0)+SPACE(5) + ELSE //** P3N - 3/09/99 + PRT_VAL := SPACE(3) + STR(BOQTY, 6,0)+SPACE(4) + ENDIF //** P3N - 3/09/99 + ELSE //** P3N - 3/09/99 + IF BOQTY <= 999 //** P3N -12/3/98 + PRT_VAL := SPACE(9) + STR(BOQTY, 4,0) //** P3N -12/3/98 + ELSE //** P3N -12/3/98 + PRT_VAL := SPACE(7) + STR(BOQTY, 6,0) //** P3N -12/3/98 + ENDIF //** P3N -12/3/98 + ENDIF //** P3N - 2/23/99 + ELSE + //** MISC ITEMS CAN HAVE A QTY OF 999999 + IF OQTY <= 999 //** P3N -12/3/98 + IF EMPTY(OQTY) //** P3N - 5/10/99 + PRT_VAL := SPACE(4) // ORDER QTY //** P3N - 5/10/99 + ELSE //** P3N - 5/10/99 + PRT_VAL := STR(OQTY,4,0) // ORDER QTY //** P3N -12/3/98 + ENDIF //** P3N - 5/10/99 + IF PRT_BO .AND. !EMPTY(BOQTY) // DO NOT PRINT 0 BACK ORDER QTY + PRT_VAL := PRT_VAL + SPACE(1) + STR(BOQTY,3,0) //BACK ORDER QTY + ELSE + PRT_VAL := PRT_VAL + SPACE(4) + ENDIF + IF PRT_BO .AND. !EMPTY( SHPQTY ) .AND. ; // DO NOT PRINT 0 SHIP QTY + PAMTS_ARR[1] <> SHPQTY // IS THE ORDER QTY = SHIP QTY + PRT_VAL := PRT_VAL + SPACE(2) + STR(SHPQTY,3,0) //SHIP QTY + ELSE + PRT_VAL := PRT_VAL + SPACE(5) + ENDIF + ELSEIF EMPTY(OQTY) //** P3N - 5/10/99 + PRT_VAL := SPACE(6) //MISC ITEM ORDER QTY //** P3N - 5/10/99 + ELSE //** P3N - 5/10/99 + PRT_VAL := STR(OQTY,6,0) //MISC ITEM ORDER QTY //** P3N -12/3/98 + ENDIF //** P3N - 5/10/99 + PRT_VAL := PADR(PRT_VAL, 13,' ') //** P3N -12/3/98 + ENDIF + PRT_VAL := PRT_VAL + SPACE(2) + IF PRT_AMTS .AND. !EMPTY(PAMTS_ARR[4]) + IF EMPTY(XUOM) + PRT_VAL := PRT_VAL + PADR(ALLTRIM(BODY_DESC), PADSZ, ' ') //ITEM DESC + ELSE + PRT_VAL := PRT_VAL + PADR(XUOM + ALLTRIM(BODY_DESC), PADSZ, ' ') //ITEM DESC + ENDIF + IF CUR_MAST == 'ORD_MAST' .AND. WHCHORDER == 'INV' .AND. PARTIAL_INVOICE + PRTQTY := SHPQTY + ELSEIF CUR_MAST == 'ORD_MAST' .AND. WHCHORDER == 'INV' .AND. REPRINT_INVOICE + PRTQTY := INVQTY + ELSE + PRTQTY := PAMTS_ARR[1] + ENDIF + IF PAMTS_ARR[4] < 0 .OR. PAMTS_ARR[1] < 0 + //** P3N - 11/23/98 PARTIAL INVOICE MODIFICATIONS + //**NEGTOT := TRANSFORM(PAMTS_ARR[1] * PAMTS_ARR[4],'(9999999999.99)') + NEGTOT := TRANSFORM(PRTQTY * PAMTS_ARR[4],'(9999999999.99)') + NEGAMT := TRANSFORM(PAMTS_ARR[4],'(99999.99)') + NEGAMT := STRTRAN(NEGAMT, ' ', '') + NEGAMT := STRTRAN(NEGAMT, '-', '') + NEGTOT := STRTRAN(NEGTOT, ' ', '') + NEGTOT := STRTRAN(NEGTOT, '-', '') + NEGAMT := PADL(NEGAMT, 9, ' ') + NEGTOT := PADL(NEGTOT,13, ' ') + ELSE + NEGAMT := 0 + NEGTOT := 0 + ENDIF + WORKVAR := STR(PAMTS_ARR[4],12,4) +//**IF MHOME_LOC_CODE = 'KC' .OR. MHOME_LOC_CODE = 'LINDS' //PER LINDA - 6/16/97 +//** PRT_VAL := PRT_VAL + ' ' +//**ENDIF +//**IF MHOME_LOC_CODE = 'KC' //** P3N - 7/18/00 remove spaces for kc +//** PRT_VAL := PRT_VAL + ' ' +//**ENDIF + IF MHOME_LOC_CODE = 'LINDS' //** P3N - 7/17/00 ADDRESS THE DELIVERY TICKET PRINT ISSUES + IF SUBTYPE = 'DELIVERY' //** P3N - 7/17/00 + PRT_VAL := PRT_VAL + ' ' //** P3N - 7/17/00 + ELSE //** P3N - 7/17/00 + PRT_VAL := PRT_VAL + ' ' //** P3N - 7/17/00 LEAVE THE SAME FOR ALL OTHER COPIES AT LINDS + ENDIF //** P3N - 7/17/00 + ELSEIF MHOME_LOC_CODE = 'KC' //** P3N - 7/18/00 LEAVE THE SAME FOR KC COPIES + PRT_VAL := PRT_VAL + ' ' //** P3N - 7/18/00 + ENDIF + IF RIGHT(WORKVAR,2) = '00' + IF EMPTY(NEGAMT) + PRT_VAL := PRT_VAL + STR(PAMTS_ARR[4], 8, 2) //POSITIVE ITEM AMT + ELSE + PRT_VAL := PRT_VAL + NEGAMT //(NEGATIVE) ITEM AMT + ENDIF + IF MHOME_LOC_CODE = 'KC' + PRT_VAL := PRT_VAL + ' ' + ENDIF + IF EMPTY(NEGTOT) //POSITIVE TOTAL AMT + IF CUR_MAST == 'ORD_MAST' .AND. WHCHORDER == 'INV' .AND. PARTIAL_INVOICE + PRT_VAL := PRT_VAL + STR( SHPQTY * PAMTS_ARR[4], 13, 2 ) + ELSEIF CUR_MAST == 'ORD_MAST' .AND. WHCHORDER == 'INV' .AND. REPRINT_INVOICE + PRT_VAL := PRT_VAL + STR( INVQTY * PAMTS_ARR[4], 13, 2 ) + ELSE + PRT_VAL := PRT_VAL + STR( PAMTS_ARR[1] * PAMTS_ARR[4], 13, 2 ) + ENDIF + ELSE + PRT_VAL := PRT_VAL + NEGTOT //(NEGATIVE) TOTAL AMT + ENDIF + ELSE + IF EMPTY(NEGAMT) //POSITIVE AMT + PRT_VAL := PRT_VAL + STR(PAMTS_ARR[4], 9, 4) //MISC 9.9999 ITEM AMT + ELSE + PRT_VAL := PRT_VAL + NEGAMT //MISC 9.9999 ITEM AMT + ENDIF + IF MHOME_LOC_CODE = 'KC' + PRT_VAL := PRT_VAL + ' ' + ENDIF + IF EMPTY(NEGTOT) //POSITIVE TOTAL AMT + IF CUR_MAST == 'ORD_MAST' .AND. WHCHORDER == 'INV' .AND. PARTIAL_INVOICE + PRT_VAL := PRT_VAL + STR( SHPQTY * PAMTS_ARR[4], 12, 2 ) + ELSEIF CUR_MAST == 'ORD_MAST' .AND. WHCHORDER == 'INV' .AND. REPRINT_INVOICE + PRT_VAL := PRT_VAL + STR( INVQTY * PAMTS_ARR[4], 12, 2 ) + ELSE + PRT_VAL := PRT_VAL + STR( PAMTS_ARR[1] * PAMTS_ARR[4], 12, 2 ) + ENDIF + ELSE + PRT_VAL := PRT_VAL + NEGTOT //(NEGATIVE) TOTAL + ENDIF + ENDIF + ELSEIF EMPTY(XUOM) + PRT_VAL := PRT_VAL + PADR(ALLTRIM(BODY_DESC), PADSZ, ' ') //ITEM DESC + ELSE + PRT_VAL := PRT_VAL + PADR(XUOM + ALLTRIM(BODY_DESC), PADSZ, ' ') //ITEM DESC + ENDIF +ELSE +//** INVALID MISC ITEM ENTRY SIZE + PRT_VAL := MIENTRYSZ+' '+ PADR(XUOM + ALLTRIM(BODY_DESC), PADSZ, ' ') //ITEM DESC +ENDIF +RETURN PRT_VAL +************************************************** +************************************************** +************************************************** +*************************************************************** +//* PRINT THE ORDER AS DEFINED IN THE PASSED ARRAYS +*************************************************************** +FUNCTION PROCESS_OO(PHEAD_ARR, PBODY_ARR, PTAIL_ARR, PAMTS_ARR, SUBTYPE, ; + PRT_GL_INFO, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE, OUTMODE) +LOCAL I:= 0, PG_NUM := 0, LINE_CNT := 0, LINES_DONE := 0, PASSHEAD := {} +LOCAL SV_LI_DESC := {}, TAILERR, WKNOTEARR, N := 0 +LOCAL PG_DEF_ARR := CALC_PAGES(PBODY_ARR, PTAIL_ARR) +LOCAL TOTL_PAGES := LEN(PG_DEF_ARR) +LOCAL WKNOTES := '', PRNTLEN := 55 //** P3N - 12/22/00 +LOCAL RETVARARR := {}, II := 0 //** P3N - 12/22/00 +//** ADDRESS LINDS DELIVERY COPY PRINT ANOMALLY //** P3N - 7/12/00 +LOCAL SVLMAR := MLMAR //** P3N - 7/12/00 + + +IF EMPTY(PRINTERS->SP10) //** P3N - 05/16/01 + TSTPRT := '' //** P3N - 05/16/01 +ELSE //** FOR TESTING WITH EPSON LQ-500 //** P3N - 05/16/01 + TSTPRT := ALLTRIM(PRINTERS->SP10) //** P3N - 05/16/01 + TSTPRT := &TSTPRT //** P3N - 05/16/01 + ?? TSTPRT //** P3N - 05/16/01 +ENDIF //** P3N - 05/16/01 +IF MHOME_LOC_CODE == 'LINDS ' //** P3N - 7/12/00 + IF SUBTYPE == 'DELIVERY' //** P3N - 7/12/00 + MLMAR := SPACE( LEN(MLMAR) - 5 ) //** P3N - 7/12/00 + ENDIF //** P3N - 7/12/00 +ENDIF //** P3N - 7/12/00 +IF TOTL_PAGES = 0 + RETURN +ENDIF +IF PG_DEF_ARR[TOTL_PAGES, 2] + LEN(PTAIL_ARR) > MBODY_LEN + TOTL_PAGES := TOTL_PAGES + 1 +ENDIF +FOR I := 1 TO LEN(PG_DEF_ARR) + IF OUTMODE == 'PRINT' //** P3N - 12/14/98 + IF !EJECT_MSG() + RETURN + ENDIF + ENDIF + FOR II := 1 TO MTMAR + ? // PRINT THE TOP MARGIN LINES AS DEFINED IN + NEXT // THE CONTROL FILE FIELD TMAR + PG_NUM := PG_NUM + 1 + + //* THE CUSTOMER INVOICE MUST FIT ON THE EXISTING ORDER FORM + PRT_HEAD(PHEAD_ARR, PG_NUM, TOTL_PAGES, SUBTYPE ) + IF I <= LEN(PG_DEF_ARR) + LINE_CNT := PG_DEF_ARR[I,2] + IF EMPTY(SV_LI_DESC) .OR. EMPTY(LINES_DONE) + SV_LI_DESC := ; + PRT_BODY(PBODY_ARR, PG_DEF_ARR[I, 2], LINES_DONE, PAMTS_ARR, , ; + SUBTYPE, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE) + ELSE + SV_LI_DESC := ; + PRT_BODY(PBODY_ARR, PG_DEF_ARR[I, 2], LINES_DONE, PAMTS_ARR, ; + SV_LI_DESC, SUBTYPE, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE ) + IF PG_NUM == TOTL_PAGES + SV_LI_DESC := {} // CLEAR LINE ITEM DESC FOR NEXT PRODUCT + ENDIF + ENDIF + LINES_DONE := LINES_DONE + PG_DEF_ARR[I,2] + ENDIF + //** FIXED NOTE FIELD ON ORDER SCREEN + IF !EMPTY( (CUR_MAST)->NOTE_FIELD ) .AND. (CUR_MAST)->PRNT_NOTES$'Y' + //PRT ORDER MASTER ONE LINE NOTE - UP TO 5 LINES OF 55 BYTES / 254 CHARS. TOTAL +//**? SPACE(15) + ALLTRIM((CUR_MAST)->NOTE_FIELD) //** P3N - 12/22/00 + WKNOTES := (CUR_MAST)->NOTE_FIELD //** P3N - 12/22/00 + RETVARARR := PRT_MEMO({}, {}, WKNOTES, PRNTLEN) // PRINT THE ORDER MASTER NOTES + IF EMPTY(RETVARARR) //** P3N - 12/22/00 + ELSE //** P3N - 12/22/00 + WKNOTES := RETVARARR[1] //** P3N - 12/22/00 + FOR II := 1 TO LEN(WKNOTES) //** P3N - 12/22/00 + IF EMPTY(WKNOTES[II]) //** P3N - 05/15/01 + ELSE //** P3N - 05/15/01 + ? SPACE(15) + WKNOTES[II] //** P3N - 12/22/00 + ENDIF //** P3N - 05/15/01 + NEXT //** P3N - 12/22/00 + ENDIF //** P3N - 12/22/00 + ENDIF + IF LEN(PG_DEF_ARR) < TOTL_PAGES .OR. I < LEN(PG_DEF_ARR) + ?? CHR(13) + CHR(10) + EJECT + ENDIF +NEXT +IF LEN(PG_DEF_ARR) < TOTL_PAGES + IF OUTMODE == 'PRINT' //** P3N - 12/14/98 + IF !EJECT_MSG() + RETURN + ENDIF + ENDIF + PG_NUM := PG_NUM + 1 + PRT_HEAD(PHEAD_ARR, PG_NUM, TOTL_PAGES, SUBTYPE ) + LINES_DONE := 0 +ELSE + LINES_DONE := PG_DEF_ARR[TOTL_PAGES,2] +ENDIF +TAILERR := PRT_TAIL(PTAIL_ARR, LINES_DONE, PRT_GL_INFO, WHCHORDER, SUBTYPE, PG_DEF_ARR ) +?? CHR(13) + CHR(10) +EJECT +IF EMPTY(TSTPRT) //** P3N - 05/16/01 +ELSE //** SET BACK TO 10 PITCH (CPI) //** P3N - 05/16/01 + TSTPRT := SP10 //** P3N - 05/16/01 +ENDIF //** P3N - 05/16/01 +IF EMPTY(TAILERR) +ELSE + SET_P_OFF() + IF PRT_GL_INFO .AND. TAILERR < 3 + ERR_BOX('** Can NOT print GL entries on bottom of this Order! **') + ELSE + ERR_BOX('** Can NOT print ENTIRE Invoice Msg on the bottom of this Order! **') + ENDIF +ENDIF +MLMAR := SVLMAR //** P3N - 7/12/00 +RETURN +************************************************************* +************************************************************* +************************************************************* +FUNCTION EJECT_MSG() +// NOTE THAT FORMTYPE MAY = 'PREPRINT-TRACTOR' - THUS BYPASS THIS LOGIC +IF FORMTYPE == 'PREPRINT' // PRE-PRINTED FORMS + IF MSING_SHEET == 'Y' // SINGLE SHEET FEED + //SEND MSG FOR PAUSE + SET_P_OFF(.F.) // DON'T CHANGE PRINTER PORT ASSIGNMENT + ?? CHR(7) + @ 23,0 SAY 'Place PRE-PRINTED ORDER FORM in PRINTER - Then Any Key to CONTINUE.' + @ 24,0 SAY ' OR Press to CANCEL.' + CLEAR TYPEAHEAD + INKEY(0) //PAUSE + @23, 0 + @24, 0 + IF LASTKEY() = 27 + RETURN .F. + ENDIF + SET_P_ON() + ENDIF +ENDIF +RETURN .T. +*************************************************************** +//* PRINT THE ORDER HEADING +*************************************************************** +FUNCTION PRT_HEAD(PHEAD_ARR, PG_NUM, TOT_PAGES, SUBTYPE ) +LOCAL PG_HD := 'Page' + STR(PG_NUM,2) + ' OF ' + STR(TOT_PAGES,2), I_NUMPRT, I_LINE, I + +// I_NUMPRT := INVOICE NUMBER TO PRINT IN BOLD LETTERS +IF SUBTYPE <> 'PREBILL' ; + .AND. SUBTYPE <> 'PO' // SUPRESS ORDER NUMBER ON INTER-COMPANY PO'S PER DARLENE 6-26-20 + I_NUMPRT := &WIDEON + (CUR_MAST)->ORDER_NUM + &WIDEOFF +ELSE + I_NUMPRT := '' +ENDIF +IF MHOME_LOC_CODE = 'IOLA' + ? + ? +ENDIF +IF MHOME_LOC_CODE = 'LINDS' + I_LINE := 3 //NEW FORMS - ADJUST BASED ON THE LP_HEADING() FUNCTION! +ELSEIF MHOME_LOC_CODE = 'PAWNEE' //** P3N - 2/04/99 + IF FORMTYPE = 'PREPRINT' // PRE-PRINTED FORMS //** P3N - 2/04/99 + ? //** P3N - 2/04/99 + I_LINE := 5 //PAWNEE FORMS - ADJUST BASED ON THE LP_HEADING() FUNCTION! + ELSE + I_LINE := 1 + ENDIF +ELSE + I_LINE := 1 +ENDIF +FOR I := 1 TO LEN(PHEAD_ARR) + IF I = I_LINE + IF MHOME_LOC_CODE = 'IOLA' + ? PADR(MLMAR + PHEAD_ARR[I], 60) + I_NUMPRT + ELSEIF MHOME_LOC_CODE = 'KC' + IF AT('DUPLICATE', PHEAD_ARR[I]) > 0 //DUPLICATE INVOICE MSG + ? PADR(MLMAR + PHEAD_ARR[I], 63) + I_NUMPRT + ELSE + ? PADR(MLMAR + PHEAD_ARR[I], 70) + I_NUMPRT + ENDIF + ELSE + ? PADR(MLMAR + PHEAD_ARR[I], 66) + I_NUMPRT + ENDIF + ELSEIF I = I_LINE + 1 + IF MHOME_LOC_CODE = 'KC' + ? PADR(MLMAR + PHEAD_ARR[I], 70) + PG_HD + ELSEIF MHOME_LOC_CODE = 'PAWNEE' + IF SUBTYPE = 'DELIVERY' + ? PADR(MLMAR + PHEAD_ARR[I], 63) + PG_HD + ELSE + ? PADR(MLMAR + PHEAD_ARR[I], 66) + PG_HD + ENDIF + ELSEIF MHOME_LOC_CODE = 'LINDS' //** P3N - 7/12/00 + IF SUBTYPE = 'DELIVERY' .AND. ; //** P3N - 7/12/00 + AT('DUPLICATE', PHEAD_ARR[I]) > 0 //DUPLICATE INVOICE MSG + ? PADR(MLMAR + PHEAD_ARR[I], 59) + PG_HD //** P3N - 7/12/00 + ELSE //** P3N - 7/12/00 + ? PADR(MLMAR + PHEAD_ARR[I], 66) + PG_HD //** P3N - 7/12/00 + ENDIF //** P3N - 7/12/00 + ELSE + ? PADR(MLMAR + PHEAD_ARR[I], 66) + PG_HD + ENDIF + ELSE + ? MLMAR + PHEAD_ARR[I] + ENDIF +NEXT +RETURN +*************************************************************** +//* PRINT THE ORDER BODY +*************************************************************** +FUNCTION PRT_BODY(PBODY_ARR, LINE_CNT, LINES_DONE, PAMTS_ARR , SV_LI_DESC, ; + SUBTYPE, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE) +LOCAL I, CUR_LINE := LINES_DONE + 1, PRT_VAL +LOCAL PADSZ := 43, IOLAMAR := '', STRTPOS, II := 0, RET_VAL := SV_LI_DESC +IF FORMTYPE <> 'PREPRINT' .AND. !DO_WE_PRT_AMT( WHCHORDER, SUBTYPE ) //** P3N - 10/13/98 + PADSZ := 60 //** P3N - 10/13/98 +ENDIF //** P3N - 10/13/98 +FOR I := 1 TO LINE_CNT + IF LEFT(PBODY_ARR[CUR_LINE], 1) == '^' + SV_LI_DESC := {} //CLEAR LINE ITEM HEADING + IF EMPTY(SUBS(PBODY_ARR[CUR_LINE],2)) + ELSE + RET_VAL := SV_DESC_LINE_ITEM(PBODY_ARR, CUR_LINE) //FIND LINE ITEM HEADING + ENDIF + IF SUBS(PBODY_ARR[CUR_LINE], 2,1)$CHR(1) + STRTPOS := 3 + ELSE + STRTPOS := 2 + ENDIF + IF PAMTS_ARR[CUR_LINE] = NIL + // use entire line - no amounts will print + PRT_VAL := SPACE(15) + ALLTRIM(SUBS(PBODY_ARR[CUR_LINE], STRTPOS )) + ELSEIF EMPTY( PAMTS_ARR[CUR_LINE] ) + PRT_VAL := PBODY_ARR[CUR_LINE] // ITEM TOTAL LINE + ELSE + PRT_VAL := ALLTRIM(SUBS(PBODY_ARR[CUR_LINE], STRTPOS )) + PRT_VAL := FORMAT_PRT(PRT_VAL, PAMTS_ARR[CUR_LINE], PADSZ, SUBTYPE, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE ) + ENDIF + ELSE + IF !EMPTY(SV_LI_DESC) //PRINT LINE ITEM HEADING FOR MULTIPLE PAGES + IF EMPTY(II) // ONLY PRINT ONCE + FOR II := 1 TO LEN(SV_LI_DESC) + IF SUBS(SV_LI_DESC[II], 2,1)$CHR(1) + STRTPOS := 3 + ELSEIF SUBS(SV_LI_DESC[II], 1,1)$'^' + STRTPOS := 2 + ELSE + STRTPOS := 1 + ENDIF + PRT_VAL := SPACE(15) + ALLTRIM(SUBS(SV_LI_DESC[II], STRTPOS) ) + PRINT_BODY_LINE(IOLAMAR, MLMAR, PRT_VAL, 0) + NEXT + ENDIF + ENDIF + IF PAMTS_ARR[CUR_LINE] = NIL + PRT_VAL := SPACE(15) + ALLTRIM(PBODY_ARR[CUR_LINE]) + ELSEIF EMPTY( PAMTS_ARR[CUR_LINE] ) + PRT_VAL := PBODY_ARR[CUR_LINE] // ITEM TOTAL LINE + ELSE + PRT_VAL := FORMAT_PRT(PBODY_ARR[CUR_LINE], PAMTS_ARR[CUR_LINE], PADSZ, SUBTYPE, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE ) + ENDIF + ENDIF + CUR_LINE := PRINT_BODY_LINE(IOLAMAR, MLMAR, PRT_VAL, CUR_LINE) +NEXT +RETURN RET_VAL //LINE ITEM HEADING +*************************************************************** +* PRINT THE LINE ITEM LINE +*************************************************************** +FUNCTION PRINT_BODY_LINE(IOLAMAR, MLMAR, PRT_VAL, CUR_LINE) +? IOLAMAR + MLMAR + PRT_VAL +CUR_LINE++ +RETURN CUR_LINE +*************************************************************** +* SAVE THE LINE ITEM DESCRIPTION FOR PRINTING ON MULTIPLE PAGES +*************************************************************** +FUNCTION SV_DESC_LINE_ITEM(PBODY_ARR, CUR_LINE) +LOCAL RET_VAL := {}, I := CUR_LINE +DO WHILE I <= LEN(PBODY_ARR) .AND. !EMPTY(PBODY_ARR[I]) + IF SUBS(PBODY_ARR[I], 1,1)$'^' +//**AADD(RET_VAL, PBODY_ARR[I]) + FOR I := I TO LEN(PBODY_ARR) + IF EMPTY(PBODY_ARR[I]) + I := LEN(PBODY_ARR) + EXIT + ELSE + AADD(RET_VAL, PBODY_ARR[I]) + ENDIF + NEXT + ENDIF + I++ +ENDDO +IF EMPTY(RET_VAL) +ELSE + AADD(RET_VAL, ' ') // BLANK LINE BETWEEN LINE ITEM DESC AND THE +ENDIF +RETURN RET_VAL // LINE ITEM DETAIL +*************************************************************** +* FORMAT THE ORDER ITEM LINES +*************************************************************** +*************************************************************** +//* PRINT THE ORDER TAIL +*************************************************************** +FUNCTION PRT_TAIL (PTAIL_ARR, LINES_DONE, PRNT_GL_INFO, WHCHORDER, SUBTYPE, PG_DEF_ARR ) +LOCAL I, STOPVAR, X, WKI, WKGLAMT, NEGTOT, WKTAIL, WORKARR, TAILERR := 0 +LOCAL RETVARARR := {}, PRNT_LEN := 80, WINV_NOTE := ' ', MSGCNT := 0 +LOCAL DEFAULT_NOTE := DEFAULTNOTE() +LOCAL INVNOTEPOS := DEFAULT_NOTE[2] +LOCAL NOTE_LEN := 0 //** P3N - 05/15/01 +IF EMPTY(PTAIL_ARR) + RETURN TAILERR +ENDIF +IF EMPTY( (CUR_MAST)->NOTE_FIELD ) //** P3N - 05/15/01 +ELSEIF (CUR_MAST)->PRNT_NOTES$'Y' //** P3N - 05/15/01 + //** TAKE INTO ACCOUNT THE ORDER MASTER->NOTE_FIELD (UP TO 5 LINES OF 50 CHARS) + NOTE_LEN := INT (LEN(ALLTRIM( (CUR_MAST)->NOTE_FIELD) ) / 50 ) + LINES_DONE := LINES_DONE + NOTE_LEN + 1 //** P3N - 05/15/01 +ENDIF //** P3N - 05/15/01 +WORKARR := {} +//** THE QUOTE HEADING IS LONGER THAN THE ORDER HEADING +//** INCREASE THE LINES_DONE TO ACCOUNT FOR THIS DIFF. +IF CUR_MAST = 'QUOTE' //** P3N - 1/6/99 + LINES_DONE := LINES_DONE + 8 //** P3N - 1/6/99 +ENDIF //** P3N - 1/6/99 +FOR I := LINES_DONE + 1 TO MAX(MBODY_LEN, LEN(PTAIL_ARR) ) + AADD(WORKARR, '') +NEXT +IF LEN(WORKARR) < LEN(PTAIL_ARR) + FOR I := 1 TO LEN(PTAIL_ARR) + //** P3N - 4/20/98 NONTAX ITEM + IF AT(' ~ ',PTAIL_ARR[I]) > 0 + //** P3N - 6/8/98 ADJ NONTAX ITEM FORMATING + WKTAIL := STRTRAN(PTAIL_ARR[I], '~', ' ' ) + ? MLMAR + WKTAIL + ELSE + ? MLMAR + SPACE(5) + PTAIL_ARR[I] + ENDIF + NEXT + TAILERR := 1 +ELSE + FOR I := 1 TO LEN(PTAIL_ARR) + WORKARR[I] := PTAIL_ARR[I] + NEXT + IF PRNT_GL_INFO + STOPVAR := LEN(WORKARR) - LEN(GL_ARR) + X := LEN(GL_ARR) + FOR I := LEN(WORKARR) TO MAX(STOPVAR, 1) STEP -1 + IF X > 0 .AND. X <= LEN(GL_ARR) + IF GL_ARR[X,2] < 0 //** P3N - 4/28/98 + NEGTOT := TRANSFORM(GL_ARR[X,2],'(9999999999999999.99)') //**P3N 4/28/98 + NEGTOT := STRTRAN(NEGTOT, ' ', '') //** P3N - 4/28/98 + NEGTOT := STRTRAN(NEGTOT, '-', '') //** P3N - 4/28/98 + NEGTOT := PADL(NEGTOT,11, ' ') //** P3N - 4/28/98 + ELSE + NEGTOT := '' //** P3N - 6/3/98 + ENDIF + + IF EMPTY(NEGTOT) //** P3N - 4/28/98 + IF GL_ARR[X,2] <= 999999.99 //** P3N - 4/28/98 + WKGLAMT := STR(GL_ARR[X,2],10,2) //** P3N - 4/28/98 + ELSE //** P3N - 4/28/98 + WKGLAMT := STR(GL_ARR[X,2],16,2) //** P3N - 4/28/98 + ENDIF //** P3N - 4/28/98 + ELSE //** P3N - 4/28/98 + WKGLAMT := NEGTOT //** P3N - 4/28/98 + ENDIF //** P3N - 4/28/98 + + IF EMPTY(SUBST(WORKARR[I], 1, 40) ) //** P3N - 11/25/98 + WORKARR[I] := PADR(GL_ARR[X,1],10) + WKGLAMT ; + + SUBS(WORKARR[I],21) //** P3N - 12/10/98 +//** + SUBS(WORKARR[I],19) //** P3N - 12/10/98 + ELSE //** P3N - 11/25/98 + WKI := LEN(WORKARR) + WORKARR[WKI] := 'GL ALLOCATIONS WILL NOT FIT ON ORDER' + WORKARR[WKI-1] := 'GL ALLOCATIONS WILL NOT FIT ON ORDER' + WORKARR[WKI-2] := 'GL ALLOCATIONS WILL NOT FIT ON ORDER' + WORKARR[WKI-3] := 'GL ALLOCATIONS WILL NOT FIT ON ORDER' + //** P3N - 11/25/98 + //** P3N - 11/25/98 + TAILERR := 2 //** P3N - 11/25/98 + EXIT //** P3N - 11/25/98 + ENDIF + ELSE + EXIT + ENDIF + X -- + NEXT + ENDIF + FOR I := 1 TO LEN(WORKARR) + //** P3N - 4/20/98 NONTAX ITEM + IF AT(' ~ ',WORKARR[I]) > 0 + //** P3N - 6/8/98 ADJ NONTAX ITEM FORMATING + WKTAIL := STRTRAN(WORKARR[I], '~', ' ' ) + ? MLMAR + WKTAIL + ELSE + ? MLMAR + SPACE(5) + WORKARR[I] + ENDIF + NEXT +ENDIF + +IF WHCHORDER = 'INV' .AND. EMPTY(SUBTYPE) //** P3N - 12/15/98 + FOR I := 1 TO INVNOTEPOS //** P3N - 12/16/98 + ? MLMAR + SPACE(5) //** P3N - 12/16/98 + NEXT //** P3N - 12/16/98 + //** PRINT THE TAIL(ORD_MAST->INVNOTES) INVOICE/SOLICITATION INFO FOR ORDERS + IF EMPTY( (CUR_MAST)->INVNOTES ) //** P3N - 12/15/98 + WINV_NOTE := DEFAULT_NOTE[1] //** P3N - 12/16/98 + ELSE + WINV_NOTE := (CUR_MAST)->INVNOTES //** P3N - 12/15/98 + ENDIF + RETVARARR := PRT_MEMO({}, {}, WINV_NOTE, PRNT_LEN) // PRINT THE LINE ITEM NOTES + IF EMPTY(RETVARARR) //** P3N - 12/15/98 + ELSE //** P3N - 12/15/98 + FOR I := 1 TO LEN(RETVARARR[1]) //** P3N - 12/15/98 + IF EMPTY(RETVARARR[1,I]) //** P3N - 12/15/98 + LOOP //** P3N - 12/15/98 + ENDIF //** P3N - 12/15/98 + MSGCNT := MSGCNT + 1 //** P3N - 12/15/98 + IF MSGCNT <= 3 //** P3N - 12/15/98 + ? MLMAR + RETVARARR[1,I] //** P3N - 12/15/98 + PTAIL_ARR := RETVARARR[1,I] //** P3N - 12/15/98 + ELSE //** P3N - 12/15/98 + TAILERR := 3 //** P3N - 12/15/98 + EXIT //** P3N - 12/15/98 + ENDIF //** P3N - 12/15/98 + NEXT //** P3N - 12/15/98 + ENDIF //** P3N - 12/15/98 +ENDIF //** P3N - 12/15/98 +RETURN TAILERR +*********************************************************** +* BUILD THE HEADING OF THE ORDER +*********************************************************** +PROCEDURE BLD_HEAD(MORDER_NUM, ORD_TYPE, OLOC_CODE, WHCHORDER, SUBTYPE) +LOCAL PHEAD_ARR := {}, PV := ' ', I := 0 ,HD1ARR := {}, III +LOCAL HD2ARR := {}, WORKVAR, MPO_NUM, HD3ARR := {} +LOCAL DUPL_MSG := {' ', ' ' , ' ' } , HD_LINES := 0 +LOCAL MTIME, MDATE, MAXLEN := 0 +ALTSHIPADR->(DBSEEK( (CUR_MAST)->ORDER_NUM) ) //** P3N - 1/6/99 +HD1ARR := HD1_PART(ORD_TYPE, OLOC_CODE, WHCHORDER, SUBTYPE) +HD2ARR := HD2_PART(ORD_TYPE, OLOC_CODE) +IF ORD_TYPE == 'BACKORD' //** P3N - 9/14/98 + HD2ARR := HD2_PART(ORD_TYPE, OLOC_CODE, SUBTYPE) //** P3N - 9/14/98 +ENDIF //** P3N - 9/14/98 +HD3ARR := HD3_PART(ORD_TYPE, SUBTYPE) +DO CASE //** P3N - 4/30/98 CHGD TO CASE STMT! + CASE WHCHORDER = 'INV' + IF !EMPTY((CUR_MAST)->IDATE_LAST) + IF SUBTYPE <> 'PREBILL' + DUPL_MSG := DUPL_MSG(ORD_TYPE, (CUR_MAST)->IDATE_LAST, (CUR_MAST)->ITIME_LAST ) + ENDIF + ENDIF + CASE WHCHORDER = 'PROD' + IF !EMPTY((CUR_MAST)->PDATE_LAST) + DUPL_MSG := DUPL_MSG(ORD_TYPE, (CUR_MAST)->PDATE_LAST, (CUR_MAST)->PTIME_LAST ) + ENDIF + CASE WHCHORDER = 'OD' + IF SUBTYPE = 'DELIVERY' .AND. !EMPTY( (CUR_MAST)->DDATE_LAST ) + DUPL_MSG := DUPL_MSG(SUBTYPE, (CUR_MAST)->DDATE_LAST, (CUR_MAST)->DTIME_LAST ) + ELSEIF SUBTYPE = 'ORDERDESK' .AND. !EMPTY((CUR_MAST)->ODATE_LAST) + DUPL_MSG := DUPL_MSG(ORD_TYPE, (CUR_MAST)->ODATE_LAST, (CUR_MAST)->OTIME_LAST ) + ENDIF + CASE WHCHORDER = 'BACKORD' //* P3N - 4/30/98 + IF !EMPTY((CUR_MAST)->BODATE_LST) + DUPL_MSG := DUPL_MSG(ORD_TYPE, (CUR_MAST)->BODATE_LST, (CUR_MAST)->BOTIME_LST ) + ENDIF +ENDCASE +DO CASE + CASE FORMTYPE = 'PREPRINT' //PRE-PRINTED ORDER FORM + **** LINDSBORG TOP HEADING +//**IF MHOME_LOC_CODE = 'LINDS' //** P3N - 2/04/99 + IF MHOME_LOC_CODE = 'LINDS' .OR. MHOME_LOC_CODE = 'PAWNEE' +//** PHEAD_ARR := LINDS_HEADING(MORDER_NUM, DUPL_MSG, WHCHORDER, SUBTYPE ) + PHEAD_ARR := LP_HEADING(MORDER_NUM, DUPL_MSG, WHCHORDER, SUBTYPE ) + ELSE + FOR III := 1 TO LEN(DUPL_MSG) + AADD(PHEAD_ARR, SPACE(25) + DUPL_MSG[III]) + NEXT + PV := SUBS( (CUR_MAST)->CUST_ID,1,2) + ' ' + PV := PV + SUBS( (CUR_MAST)->CUST_ID,3,4) + ' ' + PV := PV + SUBS( (CUR_MAST)->CUST_ID,7,2) + IF WHCHORDER = 'BACKORD' //* P3N - 8/12/98 + AADD(PHEAD_ARR, ' ' ) + AADD(PHEAD_ARR, ' ' ) + IF MHOME_LOC_CODE <> 'IOLA' + AADD(PHEAD_ARR, ' ') + AADD(PHEAD_ARR, ' ') + ENDIF + ELSE + IF MHOME_LOC_CODE = 'KC' + AADD(PHEAD_ARR, PADL( PV, 81, ' ' ) ) + ELSE + AADD(PHEAD_ARR, PADL( PV, 78, ' ' ) ) + ENDIF + IF MHOME_LOC_CODE <> 'IOLA' + AADD(PHEAD_ARR, TRIM(MORDER_NUM) ) + ENDIF + IF MHOME_LOC_CODE <> 'IOLA' + AADD(PHEAD_ARR, ' ') + ENDIF + AADD(PHEAD_ARR, (CUR_MAST)->USER_ID ) + ENDIF + IF MHOME_LOC_CODE = 'KC' + AADD(PHEAD_ARR, ' ') + AADD(PHEAD_ARR, ' ') + ENDIF + ENDIF + IF MHOME_LOC_CODE = 'IOLA' + AADD(PHEAD_ARR, ' ') + ENDIF + FOR I := 1 TO LEN(HD2ARR) + AADD(PHEAD_ARR, HD2ARR[I]) + NEXT + ** MAXLEN := 4 // 1-31-97 - EXTRA LINE FOR IOLA ABOVE HEAD2 + IF MHOME_LOC_CODE = 'KC' + MAXLEN := 5 + ELSE + MAXLEN := 4 + ENDIF + FOR I := LEN(HD2ARR)+1 TO MAXLEN + AADD(PHEAD_ARR, ' ') + NEXT + FOR I := 1 TO LEN(HD3ARR) + AADD(PHEAD_ARR, HD3ARR[I]) + NEXT + IF LEN(PHEAD_ARR) < MHEAD_LEN + HD_LINES := MHEAD_LEN - LEN(PHEAD_ARR) + FOR I := 1 TO HD_LINES + AADD(PHEAD_ARR, ' ' ) + NEXT + ENDIF + OTHERWISE // BLANK PAPER DOCUMENT + FOR I := 1 TO LEN(HD1ARR) + AADD(PHEAD_ARR, HD1ARR[I]) + NEXT + FOR III := 1 TO LEN(DUPL_MSG) + AADD(PHEAD_ARR, DUPL_MSG[III]) + NEXT + IF ORD_TYPE = 'PO' +//** MPO_NUM := GET_PO_NUM( MORDER_NUM, OLOC_CODE , .T. ) +//** AADD(PHEAD_ARR, PADL('PO #: ' + ALLTRIM(MPO_NUM), 78, ' ') ) + AADD(PHEAD_ARR, ' ' ) //** P3N - 04/06/10 - PER ELLEN - REMOVE PO #: PRINT + AADD(PHEAD_ARR, ' ' ) + AADD(PHEAD_ARR, PADL('Order #: ' + ALLTRIM(MORDER_NUM), 78, ' ') ) + AADD(PHEAD_ARR, ' ' ) + PV := 'Customer : ' + PV := PV + ALLTRIM((CUR_MAST)->BILL_NAME) + AADD(PHEAD_ARR, PADL( PV, 78, ' ' ) ) + ELSE + AADD(PHEAD_ARR, PADL('Order #: ' + ALLTRIM(MORDER_NUM), 78, ' ') ) + AADD(PHEAD_ARR, ' ' ) + IF WHCHORDER = 'BACKORD' //* P3N - 6/5/98 + ELSE + PV := 'Customer #: ' + PV := PV + SUBS( (CUR_MAST)->CUST_ID,1,2) + ' ' + PV := PV + SUBS( (CUR_MAST)->CUST_ID,3,4) + ' ' + PV := PV + SUBS( (CUR_MAST)->CUST_ID,7,2) + AADD(PHEAD_ARR, PADL( PV, 78, ' ' ) ) + ENDIF + ENDIF + IF WHCHORDER = 'BACKORD' //* P3N - 6/5/98 + ELSE + AADD(PHEAD_ARR, (CUR_MAST)->USER_ID ) + ENDIF + FOR I := 1 TO LEN(HD2ARR) + AADD(PHEAD_ARR, HD2ARR[I]) + NEXT + FOR I := 1 TO LEN(HD3ARR) + AADD(PHEAD_ARR, HD3ARR[I]) + NEXT + IF LEN(PHEAD_ARR) < MHEAD_LEN .AND. FORMTYPE = 'PREPRINT' + HD_LINES := MHEAD_LEN - LEN(PHEAD_ARR) + FOR I := 1 TO HD_LINES + AADD(PHEAD_ARR, ' ' ) + NEXT + ENDIF +ENDCASE +RETURN PHEAD_ARR +************************************************************* +//** LP_HEADING IS USED FOR BOTH LINDSBOURG AND PAWNEE * +//** LOCATIONS * +************************************************************* +FUNCTION LP_HEADING( MORDER_NUM, DUPL_MSG, WHCHORDER, SUBTYPE ) +LOCAL PHEAD_ARR := {}, PV, I , III +//** DUPL_MSG := {' ',' ',' '} //** P3N - 6/17/99 +** 6-16-97 - USE OLD FORMS UNTIL FURTHER NOTICE - PER LINDA!!!!! +** FOR I := 1 TO 3 +** 1-23-98 - USE NEW FORMS PER LINDA!!!!! +IF WHCHORDER == 'INV' // NEW INVOICE ORDER FORM + FOR I := 1 TO 1 // FORM HEADING IS 2 LINES LESS THAN OLD + AADD(PHEAD_ARR, ' ') + NEXT + IF MHOME_LOC_CODE = 'PAWNEE' //** P3N - 2/04/99 + AADD(PHEAD_ARR, ' ') //** P3N - 2/04/99 + AADD(PHEAD_ARR, ' ') //** P3N - 2/04/99 + AADD(PHEAD_ARR, ' ') //** P3N - 2/04/99 + AADD(PHEAD_ARR, ' ') //** P3N - 2/04/99 + ENDIF //** P3N - 2/04/99 +//**ELSEIF SUBTYPE = 'DELIVERY' .AND. ; // DELIVERY ORDER FORM +ELSEIF (SUBTYPE = 'DELIVERY' .OR. WHCHORDER = 'BACKORD') .AND. ; // DELIVERY/BACKORDER ORDER FORM + MHOME_LOC_CODE = 'PAWNEE' //** P3N - 2/04/99 + AADD(PHEAD_ARR, ' ') //** P3N - 2/04/99 + AADD(PHEAD_ARR, ' ') //** P3N - 2/04/99 + AADD(PHEAD_ARR, ' ') //** P3N - 2/04/99 + AADD(PHEAD_ARR, ' ') //** P3N - 2/04/99 + AADD(PHEAD_ARR, ' ') //** P3N - 2/04/99 +ELSE + FOR I := 1 TO 3 // ALL OTHER LINDS FORMS + AADD(PHEAD_ARR, ' ') + NEXT +ENDIF +FOR III := 1 TO LEN(DUPL_MSG) + IF III = 1 .OR. III = 3 + AADD(PHEAD_ARR, SPACE(25) + DUPL_MSG[III]) + ELSE + AADD(PHEAD_ARR, MORDER_NUM + SPACE(19) + DUPL_MSG[III]) + ENDIF +NEXT +PV := SUBS( (CUR_MAST)->CUST_ID,1,2) + ' ' +PV := PV + SUBS( (CUR_MAST)->CUST_ID,3,4) + ' ' +PV := PV + SUBS( (CUR_MAST)->CUST_ID,7,2) +AADD(PHEAD_ARR, (CUR_MAST)->USER_ID + SPACE(60) + PV ) +AADD(PHEAD_ARR, ' ') +RETURN PHEAD_ARR +*********************************************************** +*********************************************************** +*********************************************************** +FUNCTION HD1_PART( ORD_TYPE, OLOC_CODE, WHCHORDER, SUBTYPE ) +LOCAL PHEAD_ARR := {' ', ' ', ' '} +LOCAL FROM_LOC, PADLEN, Q_PHONE, QUOTE_LOC, QUOTE_LOC1, QUOTE_LOC2, QUOTE_LOC3 + +MFG_LOC->(DBSEEK(MHOME_LOC_CODE)) +FROM_LOC := 'From: ' + ALLTRIM(UPPER(MFG_LOC->LOC_DESC)) + ' ' ; + + ALLTRIM(UPPER(MFG_LOC->LOC_CITY)) + ' ' + MFG_LOC->LOC_STATE ; + + ' ' + ALLTRIM(MFG_LOC->LOC_ZIP) +QUOTE_LOC := 'From: ' + ALLTRIM(UPPER(MFG_LOC->LOC_DESC)) +QUOTE_LOC1 := ' ' + ALLTRIM(UPPER(MFG_LOC->LOC_ADDR1)) +QUOTE_LOC2 := ' ' + ALLTRIM(UPPER(MFG_LOC->LOC_ADDR2)) +QUOTE_LOC3 := ' ' + ALLTRIM(UPPER(MFG_LOC->LOC_CITY)) + ' ' + MFG_LOC->LOC_STATE ; + + ' ' + ALLTRIM(MFG_LOC->LOC_ZIP) +DO CASE + CASE FORMTYPE = 'PREPRINT' // PRE-PRINTED ORDER FORM + PHEAD_ARR := {} + IF MHOME_LOC_CODE <> 'KC' + AADD(PHEAD_ARR, ' ') + ENDIF + IF MHOME_LOC_CODE = 'IOLA' + AADD(PHEAD_ARR, ' ') + ENDIF + CASE ORD_TYPE = 'BACKORD' //** 4-30-98 + IF SUBTYPE == 'SCREENS' + AADD(PHEAD_ARR, PADC('B A C K O R D E R S C R E E N S', 80 ) ) + AADD(PHEAD_ARR, PADC('----------------------------------', 80 ) ) + ELSEIF SUBTYPE == 'STORMS' + AADD(PHEAD_ARR, PADC('B A C K O R D E R S T O R M S', 80 ) ) + AADD(PHEAD_ARR, PADC('--------------------------------', 80 ) ) + ELSE + AADD(PHEAD_ARR, PADC('B A C K O R D E R', 80 ) ) + AADD(PHEAD_ARR, PADC('------------------', 80 ) ) + ENDIF + CASE ORD_TYPE = 'PO' + AADD(PHEAD_ARR, PADC('I N T E R C O M P A N Y P U R C H A S E O R D E R', 80 ) ) + AADD(PHEAD_ARR, PADC('-----------------------------------------------------', 80 ) ) + CASE ORD_TYPE == 'CTRL' // PRINT PRODUCTION ORDER + IF WHCHORDER == 'OD' + IF SUBTYPE == 'DELIVERY' + AADD(PHEAD_ARR, PADC('D E L I V E R Y C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('-------------------------', 80) ) + ELSE + AADD(PHEAD_ARR, PADC('O R D E R D E S K - C O N T R O L C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('---------------------------------------------', 80) ) + ENDIF + ELSE + AADD(PHEAD_ARR, PADC('P R O D U C T I O N O R D E R - C O N T R O L C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('---------------------------------------------------------', 80) ) + ENDIF + CASE ORD_TYPE == 'INV' // PRINT CUSTOMER ORDER + IF CUR_MAST = 'QUOTE' + AADD(PHEAD_ARR, PADC( 'C U S T O M E R Q U O T E' , 80) ) + AADD(PHEAD_ARR, PADC(QUOTE_LOC , 80 ) ) + AADD(PHEAD_ARR, PADC(QUOTE_LOC1, 80 ) ) + IF EMPTY(QUOTE_LOC2) + ELSE + AADD(PHEAD_ARR, PADC(QUOTE_LOC2, 80 ) ) + ENDIF + AADD(PHEAD_ARR, PADC(QUOTE_LOC3, 80 ) ) + Q_PHONE := 'Phone: ' + MFG_LOC->PHONE_NUM + Q_PHONE := Q_PHONE + ' Fax: '+ MFG_LOC->FAX_NUMBER + AADD(PHEAD_ARR, ' ' + PADC( Q_PHONE, 80 ) ) + PADLEN := MAX( LEN(FROM_LOC), LEN(Q_PHONE) ) + AADD(PHEAD_ARR, ' ' + PADC( REPLICATE('-', PADLEN) , 80 ) ) + //** P3N - 01/16/02 PER LINDA @ LINDS - ADDED THE CONT_FNAME TO PRINT ON THE QUOTE + IF EMPTY( (CUR_MAST)->CONT_FNAME ) //** P3N - 01/16/02 + ELSE //** P3N - 01/16/02 + AADD(PHEAD_ARR,' '+PADL('Ordered By: '+(CUR_MAST)->CONT_FNAME,77,' ')) //** P3N - 01/16/02 + ENDIF //** P3N - 01/16/02 + ELSEIF SUBTYPE = 'PREBILL' + AADD(PHEAD_ARR, PADC( 'C U S T O M E R P R E B I L L', 80 ) ) + AADD(PHEAD_ARR, PADC( FROM_LOC , 80 ) ) + PADLEN := MAX( LEN(FROM_LOC), 31 ) + AADD(PHEAD_ARR, PADC( REPLICATE('-', PADLEN) , 80 ) ) + ELSEIF SUBTYPE = 'PRECOST' + AADD(PHEAD_ARR, PADC( 'P R E - C O S T C O P Y ', 80 ) ) + AADD(PHEAD_ARR, PADC( FROM_LOC , 80 ) ) + PADLEN := MAX( LEN(FROM_LOC), 31 ) + AADD(PHEAD_ARR, PADC( REPLICATE('-', PADLEN) , 80 ) ) + ELSE + AADD(PHEAD_ARR, SPACE(25) + 'C U S T O M E R I N V O I C E' ) + AADD(PHEAD_ARR, SPACE(25) + '-------------------------------' ) + ENDIF + CASE ORD_TYPE == 'FRAME' // PRINT FRAME ORDER + AADD(PHEAD_ARR, OLOC_CODE ) + AADD(PHEAD_ARR, PADC('P R O D U C T I O N O R D E R - F R A M E C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('-----------------------------------------------------', 80 ) ) + CASE ORD_TYPE == 'STDFRAME' // PRINT STD FRAME ORDER + AADD(PHEAD_ARR, OLOC_CODE ) + AADD(PHEAD_ARR, PADC('P R O D U C T I O N O R D E R - S T D F R A M E C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('-------------------------------------------------------------', 80 ) ) + CASE ORD_TYPE == 'SASH' // PRINT SASH ORDER + AADD(PHEAD_ARR, OLOC_CODE ) + AADD(PHEAD_ARR, PADC('P R O D U C T I O N O R D E R - S A S H C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('---------------------------------------------------', 80 ) ) + CASE ORD_TYPE == 'GLASS' // PRINT GLASS ORDER + AADD(PHEAD_ARR, OLOC_CODE ) + AADD(PHEAD_ARR, PADC('P R O D U C T I O N O R D E R - G L A S S C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('-----------------------------------------------------', 80 ) ) + CASE ORD_TYPE == 'SCREEN' // PRINT SCREEN ORDER + AADD(PHEAD_ARR, OLOC_CODE ) + AADD(PHEAD_ARR, PADC('P R O D U C T I O N O R D E R - S C R E E N C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('-------------------------------------------------------', 80 )) + CASE ORD_TYPE == 'STORM' // PRINT STORM ORDER + AADD(PHEAD_ARR, OLOC_CODE ) + AADD(PHEAD_ARR, PADC('P R O D U C T I O N O R D E R - S T O R M C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('-----------------------------------------------------', 80 ) ) + CASE ORD_TYPE == 'EXPANDER' // PRINT EXPANDER ORDER + AADD(PHEAD_ARR, OLOC_CODE ) + AADD(PHEAD_ARR, PADC('P R O D U C T I O N O R D E R - E X P A N D E R C O P Y', 80 ) ) + AADD(PHEAD_ARR, PADC('-----------------------------------------------------------', 80 ) ) + OTHERWISE + AADD(PHEAD_ARR, 'UNDEFINED Order' ) + AADD(PHEAD_ARR, ' ') +ENDCASE + +RETURN PHEAD_ARR +*********************************************************** +* BUILD THE BILL TO/SHIP TO PART OF THE ORDER +*********************************************************** +FUNCTION HD2_PART(ORD_TYPE, OLOC_CODE, SUBTYPE ) +LOCAL PHEAD_ARR := {},FROM_LOC, PDESC, PPHONE, PFAXC, PMODM, OLOC +LOCAL BIL_ARR := {}, SHP_ARR := {}, I, II , PADLEN, AS_ARR := {} +IF ORD_TYPE == 'PO' + PADLEN := 40 +ELSE + PADLEN := 48 +ENDIF +MFG_LOC->(DBSEEK(MHOME_LOC_CODE)) +FROM_LOC := MFG_LOC->LOC_DESC +PDESC := MFG_LOC->LOC_DESC +PPHONE := MFG_LOC->PHONE_NUM +PFAX := MFG_LOC->FAX_NUMBER +PMODM := MFG_LOC->MODEM_NUM +MFG_LOC->(DBSEEK(OLOC_CODE)) +OLOC := ALLTRIM(MFG_LOC->LOC_DESC) +DO CASE + CASE ORD_TYPE == 'PO' + PADLEN := 40 + AADD(BIL_ARR, 'Taken: ' + DTOC( (CUR_MAST)->CALL_DATE ) ) + AADD(BIL_ARR, 'From: ' + PDESC ) + + AADD(SHP_ARR, ' To: ' + MFG_LOC->LOC_DESC) + AADD(SHP_ARR, ' ' + TRIM(MFG_LOC->LOC_ADDR1) ) + IF !EMPTY(MFG_LOC->LOC_ADDR2) + AADD(SHP_ARR, ' ' + TRIM(MFG_LOC->LOC_ADDR2) ) + ENDIF + AADD(SHP_ARR, ' ' + TRIM(MFG_LOC->LOC_CITY) + SPACE(2) + ; + TRIM(MFG_LOC->LOC_STATE) + ' ' + MFG_LOC->LOC_ZIP ) + OTHERWISE + IF EMPTY( (CUR_MAST)->CALL_DATE) .OR. ORD_TYPE == 'BACKORD' + AADD(BIL_ARR, SPACE(12) + (CUR_MAST)->BILL_NAME + SPACE(6)) + ELSE + AADD(BIL_ARR, DTOC( (CUR_MAST)->CALL_DATE ) + SPACE(4) + (CUR_MAST)->BILL_NAME ) + ENDIF + + IF ORD_TYPE == 'BACKORD' .AND. ; //** P3N - 6/5/98 + MHOME_LOC_CODE = 'KC' //** P3N - 03/09/99 + SHP_ARR := ALTSHP(SHP_ARR, SUBTYPE) //** P3N - 03/09/99 + IF EMPTY(SHP_ARR) + AADD(SHP_ARR, (CUR_MAST)->BILL_ADD1 ) //** P3N - 11/11/98 + AADD(SHP_ARR, (CUR_MAST)->BILL_ADD2 ) //** P3N - 11/11/98 + AADD(SHP_ARR, (CUR_MAST)->BILL_CSZ ) //** P3N - 11/11/98 + AADD(SHP_ARR, (CUR_MAST)->PHONE ) //** P3N - 11/11/98 + ENDIF + //** END BACKORDER + ELSE + AADD(BIL_ARR, SPACE(12) + (CUR_MAST)->BILL_ADD1 + SPACE(6) ) + IF !EMPTY( (CUR_MAST)->BILL_ADD2 ) + AADD(BIL_ARR, SPACE(12) + (CUR_MAST)->BILL_ADD2 + SPACE(6) ) + ENDIF + AADD(BIL_ARR, SPACE(12) + (CUR_MAST)->BILL_CSZ + SPACE(6) ) + + IF (CUR_MAST)->BILL_NAME == (CUR_MAST)->SHIP_NAME + ELSEIF !EMPTY( (CUR_MAST)->SHIP_NAME ) + AADD(SHP_ARR, (CUR_MAST)->SHIP_NAME ) + ENDIF + IF (CUR_MAST)->BILL_ADD1 == (CUR_MAST)->SHIP_ADD1 + ELSEIF !EMPTY( (CUR_MAST)->SHIP_ADD1 ) + AADD(SHP_ARR, (CUR_MAST)->SHIP_ADD1 ) + ENDIF + IF !EMPTY( (CUR_MAST)->SHIP_ADD2 ) + IF (CUR_MAST)->BILL_ADD2 == (CUR_MAST)->SHIP_ADD2 + ELSEIF !EMPTY( (CUR_MAST)->SHIP_ADD2 ) + AADD(SHP_ARR, (CUR_MAST)->SHIP_ADD2 ) + ENDIF + ENDIF + IF (CUR_MAST)->BILL_CSZ == (CUR_MAST)->SHIP_CSZ + ELSEIF !EMPTY( (CUR_MAST)->SHIP_CSZ ) + AADD(SHP_ARR, (CUR_MAST)->SHIP_CSZ ) + ENDIF + IF (CUR_MAST)->PHONE == (CUR_MAST)->SHIPPHN + AADD(SHP_ARR, (CUR_MAST)->PHONE ) + ELSE + AADD(SHP_ARR, (CUR_MAST)->PHONE + ' / ' + (CUR_MAST)->SHIPPHN ) + ENDIF + ENDIF + //** P3N - 03/09/99 + IF ORD_TYPE == 'BACKORD' //** P3N - 03/09/99 + IF MHOME_LOC_CODE = 'KC' //** P3N - 03/09/99 + //** ALREADY FORMATED FOR THE BACK ORDER FORMS IN KC + ELSE //** P3N - 03/09/99 + AS_ARR := ALTSHP(AS_ARR, SUBTYPE) //** P3N - 03/09/99 + IF EMPTY(AS_ARR) //** P3N - 03/09/99 + ELSE //** P3N - 03/09/99 + SHP_ARR := AS_ARR //** P3N - 03/09/99 + ENDIF //** P3N - 03/09/99 + ENDIF //** P3N - 03/09/99 + ENDIF //** P3N - 03/09/99 +ENDCASE +FOR I := 1 TO MIN( LEN(BIL_ARR), LEN(SHP_ARR) ) + BIL_ARR[I] := PADR( BIL_ARR[I], PADLEN ) + AADD(PHEAD_ARR, BIL_ARR[I] + SHP_ARR[I] ) +NEXT +IF LEN(BIL_ARR) <> LEN(SHP_ARR) + IF I > LEN(BIL_ARR) + FOR I := I TO LEN(SHP_ARR) + AADD(PHEAD_ARR, SPACE(PADLEN) + SHP_ARR[I] ) + NEXT + ELSE + FOR I := I TO LEN(BIL_ARR) + BIL_ARR[I] := PADR( BIL_ARR[I], PADLEN ) + AADD(PHEAD_ARR, BIL_ARR[I] ) + NEXT + ENDIF +ENDIF +//** PER LINDA @ LINDS PRINT THE DELIVERY ROUTE INFORMATION - LINDS ONLY +//**IF MHOME_LOC_CODE = 'LINDS' //** P3N - 08/26/99 +//** AADD(PHEAD_ARR, SPACE(35)+ 'Del Route: ' + (CUR_MAST)->DEL_ROUTE) +//**ENDIF //** P3N - 08/26/99 +RETURN PHEAD_ARR +******************************************************************** +//** P3N-03/09/99 MADE A FUNCTION FOR MULTI USE +//** USE ORDER ALTERNATE SHIPPING +//** INFO FOR BACKORDERS IF PRESENT! +******************************************************************** +FUNCTION ALTSHP(SHP_ARR, SUBTYPE) +LOCAL WKALTSHPZIP +IF EMPTY(SUBTYPE) .OR. SUBTYPE == 'BACKORD' + IF !EMPTY( ALTSHIPADR->ALTSHPNAME ) + AADD(SHP_ARR, ALTSHIPADR->ALTSHPNAME ) + ENDIF + IF !EMPTY( ALTSHIPADR->ALTSHPADDR ) + AADD(SHP_ARR, ALTSHIPADR->ALTSHPADDR ) + ENDIF + IF !EMPTY( ALTSHIPADR->ALTSHPADD2 ) + AADD(SHP_ARR, ALTSHIPADR->ALTSHPADD2 ) + ENDIF + IF !EMPTY( ALTSHIPADR->ALTSHPADD3 ) + AADD(SHP_ARR, ALTSHIPADR->ALTSHPADD3 ) + ENDIF + WKALTSHPZIP := ALTSHIPADR->ALTSHPZIP + IF EMPTY(SUBST(WKALTSHPZIP, 7, 4)) + WKALTSHPZIP := SUBST(WKALTSHPZIP, 1,5) + ENDIF + IF !EMPTY( ALTSHIPADR->ALTSHPCITY ) .AND. ; + !EMPTY( ALTSHIPADR->ALTSHPSTAT ) .AND. ; + !EMPTY( ALTSHIPADR->ALTSHPZIP ) + IF LEN(ALLTRIM(ALTSHIPADR->ALTSHPCITY)) > 20 + AADD(SHP_ARR, ALLTRIM( ALTSHIPADR->ALTSHPCITY) ) + AADD(SHP_ARR, ALLTRIM( ALTSHIPADR->ALTSHPSTAT) + ' ' + ; + WKALTSHPZIP ) + ELSE + AADD(SHP_ARR, ALLTRIM( ALTSHIPADR->ALTSHPCITY) + ' ' + ; + ALLTRIM( ALTSHIPADR->ALTSHPSTAT) + ' ' + ; + WKALTSHPZIP ) + ENDIF + ELSEIF !EMPTY( ALTSHIPADR->ALTSHPCITY ) + AADD(SHP_ARR, ALTSHIPADR->ALTSHPCITY ) + ENDIF +ELSEIF SUBTYPE == 'SCREENS' //** P3N - 9/23/98 + //** USE ORDER ALTERNATE SHIPPING + //** INFO FOR SCREEN BACKORDERS IF PRESENT! + IF !EMPTY( ALTSHIPADR->ASNAMESCRN ) + AADD(SHP_ARR, ALTSHIPADR->ASNAMESCRN ) + ENDIF + IF !EMPTY( ALTSHIPADR->ASADDRSCRN ) + AADD(SHP_ARR, ALTSHIPADR->ASADDRSCRN ) + ENDIF + IF !EMPTY( ALTSHIPADR->ASADD2SCRN ) + AADD(SHP_ARR, ALTSHIPADR->ASADD2SCRN ) + ENDIF + IF !EMPTY( ALTSHIPADR->ASADD3SCRN ) + AADD(SHP_ARR, ALTSHIPADR->ASADD3SCRN ) + ENDIF + WKALTSHPZIP := ALTSHIPADR->ASZIPSCRN + IF EMPTY(SUBST(WKALTSHPZIP, 7, 4)) + WKALTSHPZIP := SUBST(WKALTSHPZIP, 1,5) + ENDIF + IF !EMPTY( ALTSHIPADR->ASCITYSCRN ) .AND. ; + !EMPTY( ALTSHIPADR->ASSTATSCRN ) .AND. ; + !EMPTY( ALTSHIPADR->ASZIPSCRN ) + IF LEN(ALLTRIM(ALTSHIPADR->ASCITYSCRN)) > 20 + AADD(SHP_ARR, ALLTRIM( ALTSHIPADR->ASCITYSCRN) ) + AADD(SHP_ARR, ALLTRIM( ALTSHIPADR->ASCITYSCRN) + ' ' + ; + WKALTSHPZIP ) + ELSE + AADD(SHP_ARR, ALLTRIM( ALTSHIPADR->ASCITYSCRN) + ' ' + ; + ALLTRIM( ALTSHIPADR->ASSTATSCRN) + ' ' + ; + WKALTSHPZIP ) + ENDIF + ELSEIF !EMPTY( ALTSHIPADR->ASCITYSCRN ) + AADD(SHP_ARR, ALTSHIPADR->ASCITYSCRN ) + ENDIF +ELSEIF SUBTYPE == 'STORMS' //** P3N - 9/23/98 + //** USE ORDER ALTERNATE SHIPPING + //** INFO FOR STORM BACKORDERS IF PRESENT! + IF !EMPTY( ALTSHIPADR->ASNAMESTRM ) + AADD(SHP_ARR, ALTSHIPADR->ASNAMESTRM ) + ENDIF + IF !EMPTY( ALTSHIPADR->ASADDRSTRM ) + AADD(SHP_ARR, ALTSHIPADR->ASADDRSTRM ) + ENDIF + IF !EMPTY( ALTSHIPADR->ASADD2STRM ) + AADD(SHP_ARR, ALTSHIPADR->ASADD2STRM ) + ENDIF + IF !EMPTY( ALTSHIPADR->ASADD3STRM ) + AADD(SHP_ARR, ALTSHIPADR->ASADD3STRM ) + ENDIF + WKALTSHPZIP := ALTSHIPADR->ASZIPSTRM + IF EMPTY(SUBST(WKALTSHPZIP, 7, 4)) + WKALTSHPZIP := SUBST(WKALTSHPZIP, 1,5) + ENDIF + IF !EMPTY( ALTSHIPADR->ASCITYSTRM ) .AND. ; + !EMPTY( ALTSHIPADR->ASSTATSTRM ) .AND. ; + !EMPTY( ALTSHIPADR->ASZIPSTRM ) + IF LEN(ALLTRIM(ALTSHIPADR->ASCITYSTRM)) > 20 + AADD(SHP_ARR, ALLTRIM( ALTSHIPADR->ASCITYSTRM) ) + AADD(SHP_ARR, ALLTRIM( ALTSHIPADR->ASCITYSTRM) + ' ' + ; + WKALTSHPZIP ) + ELSE + AADD(SHP_ARR, ALLTRIM( ALTSHIPADR->ASCITYSTRM) + ' ' + ; + ALLTRIM( ALTSHIPADR->ASSTATSTRM) + ' ' + ; + WKALTSHPZIP ) + ENDIF + ELSEIF !EMPTY( ALTSHIPADR->ASCITYSTRM ) + AADD(SHP_ARR, ALTSHIPADR->ASCITYSTRM ) + ENDIF +ENDIF + //** USE ORDER SHIPPING INFO FOR BACK ORDERS IF NO ALT SHIPINFO! +IF EMPTY(SHP_ARR) + IF !EMPTY( (CUR_MAST)->SHIP_NAME ) + AADD(SHP_ARR, (CUR_MAST)->SHIP_NAME ) + ENDIF + IF !EMPTY( (CUR_MAST)->SHIP_ADD1 ) + AADD(SHP_ARR, (CUR_MAST)->SHIP_ADD1 ) + ENDIF + IF !EMPTY( (CUR_MAST)->SHIP_ADD2 ) + AADD(SHP_ARR, (CUR_MAST)->SHIP_ADD2 ) + ENDIF + IF !EMPTY( (CUR_MAST)->SHIP_CSZ ) + AADD(SHP_ARR, (CUR_MAST)->SHIP_CSZ ) + ENDIF +ENDIF + //** USE ORDER BILLING INFO FOR BACK ORDERS IF NO ALT SHIPINFO AND SHIPPING +IF EMPTY(SHP_ARR) //** P3N - 10/01/99 + IF (CUR_MAST)->BILL_NAME = (CUR_MAST)->SHIP_NAME; //** P3N - 10/01/99 + .OR. EMPTY((CUR_MAST)->SHIP_NAME) //** P3N - 10/01/99 + ELSE //** P3N - 10/01/99 + AADD(SHP_ARR, (CUR_MAST)->BILL_NAME ) //** P3N - 10/01/99 + ENDIF //** P3N - 10/01/99 + AADD(SHP_ARR, (CUR_MAST)->BILL_ADD1 ) //** P3N - 10/01/99 + IF EMPTY((CUR_MAST)->BILL_ADD2 ) //** P3N - 10/01/99 + ELSE //** P3N - 10/01/99 + AADD(SHP_ARR, (CUR_MAST)->BILL_ADD2 ) //** P3N - 10/01/99 + ENDIF //** P3N - 10/01/99 + AADD(SHP_ARR, (CUR_MAST)->BILL_CSZ ) //** P3N - 10/01/99 +ENDIF //** P3N - 10/01/99 +IF EMPTY ( (CUR_MAST)->SHIPPHN) + AADD(SHP_ARR, (CUR_MAST)->PHONE ) //** P3N - 9/29/99 +ELSEIF (CUR_MAST)->SHIPPHN = ' - - ' + AADD(SHP_ARR, (CUR_MAST)->PHONE ) //** P3N - 9/29/99 +ELSE + AADD(SHP_ARR, (CUR_MAST)->SHIPPHN ) +ENDIF +RETURN SHP_ARR +*********************************************************** +* BUILD THE TERMS PART OF THE ORDER +********************************************************** +FUNCTION HD3_PART(ORD_TYPE, SUBTYPE) +LOCAL PHEAD_ARR := {}, I, COL_HD_ARR := {}, SM_FRST, SM_LAST, WORKDATE +LOCAL TERMS_DESC := GP_TERMS( (CUR_MAST)->TERMS ), SM_ALL, SPACEPOS := 0 +LOCAL SHIP_DESC := GP_SHIP( (CUR_MAST)->SHP_METHOD) +LOCAL BOSHIP_DESC := '' //** P3N - 8/12/98 - HAPPY 40TH JEFF +LOCAL BOSHIP_SCRNS := '', BOSHIP_STORM := '' //** P3N - 8/17/98 +IF ORD_TYPE == 'BACKORD' //** P3N - 8/17/98 + BOSHIP_DESC := GP_SHIP( ALTSHIPADR->BOSHP_METH) //** P3N -11/13/98 + IF EMPTY(BOSHIP_DESC) //** P3N - 1/6/99 + BOSHIP_DESC := SHIP_DESC //** P3N - 1/6/99 + ENDIF + BOSHIP_SCRNS := GP_SHIP( ALTSHIPADR->BOSHP_SCRN) //** P3N -11/13/98 + IF EMPTY(BOSHIP_SCRNS) //** P3N - 1/6/99 + BOSHIP_DESC := SHIP_DESC //** P3N - 1/6/99 + ENDIF //** P3N - 1/6/99 + BOSHIP_STORM := GP_SHIP( ALTSHIPADR->BOSHP_STRM) //** P3N -11/13/98 + IF EMPTY(BOSHIP_STORM) //** P3N - 1/6/99 + BOSHIP_DESC := SHIP_DESC //** P3N - 1/6/99 + ENDIF //** P3N - 1/6/99 + IF SUBTYPE == 'SCREENS' //** P3N - 8/17/98 + BOSHIP_DESC := BOSHIP_SCRNS //** P3N - 8/17/98 + ELSEIF SUBTYPE == 'STORMS' //** P3N - 8/17/98 + BOSHIP_DESC := BOSHIP_STORM //** P3N - 8/17/98 + ENDIF +ENDIF +SALESMEN->(DBSEEK( (CUR_MAST)->SLSMAN ) ) +IF SALESMEN->(FOUND()) + SM_FRST := SALESMEN->FST_NME + SM_LAST := SALESMEN->LST_NME +ELSE + SM_FRST := ' ' + SM_LAST := (CUR_MAST)->SLSMAN +ENDIF +SM_ALL := ALLTRIM(TRIM(SM_FRST) + ' ' + TRIM(SM_LAST)) +SPACEPOS := AT(' ', SM_ALL) +SM_FRST := SUBS(SM_ALL, 1, SPACEPOS - 1 ) +SM_LAST := SUBS(SM_ALL, SPACEPOS + 1 ) +IF ORD_TYPE == 'INV' + WORKDATE := MAX( (CUR_MAST)->IDATE_FST, CURDATE ) +ELSEIF ORD_TYPE == 'BACKORD' //** P3N - 05/18/06 - IF BACKORDER USE CURRENT DATE + WORKDATE := CURDATE //** P3N - 05/18/06 - PER DARLENE-IOLA +ELSE + WORKDATE := (CUR_MAST)->IDATE_FST +ENDIF +IF FORMTYPE = 'PREPRINT' + AADD(PHEAD_ARR, SPACE(70) + TRIM(SM_FRST) ) + IF ORD_TYPE == 'BACKORD' //** P3N - 8/12/98 + AADD(PHEAD_ARR, SPACE(6)+ DTOC(WORKDATE) + SPACE(22)+; + BOSHIP_DESC + SPACE(19) + TRIM(SM_LAST) ) + AADD(PHEAD_ARR, ' ') + AADD(PHEAD_ARR, SPACE(68) + (CUR_MAST)->CUST_PO ) + ELSE + AADD(PHEAD_ARR, SPACE(12) + DTOC(WORKDATE) + SPACE(16) + SHIP_DESC + SPACE(19) + TRIM(SM_LAST) ) + AADD(PHEAD_ARR, ' ') + AADD(PHEAD_ARR, DTOC((CUR_MAST)->ORDER_DATE) ; + + SPACE(9) + DTOC( (CUR_MAST)->SHIP_DATE ) + SPACE(10) ; + + TERMS_DESC + SPACE(07) ; + + (CUR_MAST)->CUST_PO ) + ENDIF + AADD(PHEAD_ARR, ' ') + AADD(PHEAD_ARR, ' ') +ELSE //FORMTYPE == 'BLANK' + IF EMPTY(SUBTYPE) // Condensed PRODUCTION headings + //** P3N - 8/4/98 (HAPPY BIRTHDAY TO ME!!!) + //** ADDED TERMS TO QUOTE HEADING - PER ELLEN + IF CUR_MAST = 'ORD_MAST' + AADD(PHEAD_ARR, 'Entered: ' + DTOC((CUR_MAST)->ORDER_DATE) + ; + ' Shipped Via: ' + SHIP_DESC + ; + ' Cust PO#: ' + (CUR_MAST)->CUST_PO ) + ELSE + AADD(PHEAD_ARR, 'Entered: ' + DTOC((CUR_MAST)->ORDER_DATE) + ; + ' ' + SPACE(LEN(SHIP_DESC))+ ; + ' Cust PO#: ' + (CUR_MAST)->CUST_PO ) + AADD(PHEAD_ARR, 'Terms: ' + TERMS_DESC + ; + + SPACE(LEN(SHIP_DESC))+ ; + ' Shipped Via: ' + SHIP_DESC ) + ENDIF + AADD(PHEAD_ARR, REPLICATE('-', 80 ) ) + ELSE + AADD(PHEAD_ARR, ' ') + IF SUBTYPE = 'PREBILL' + AADD(PHEAD_ARR, 'Prebill Date: ' + DTOC(WORKDATE) + ' Shipped Via: ' + SHIP_DESC + ' Sold By: '+ ALLTRIM(SM_FRST) + ' ' + ALLTRIM(SM_LAST) ) + ELSE + IF SUBTYPE = 'PREBILL' + AADD(PHEAD_ARR, ' Print Date: ' + DTOC(WORKDATE) + ' Shipped Via: ' + SHIP_DESC + ' Sold By: '+ ALLTRIM(SM_FRST) + ' ' + ALLTRIM(SM_LAST) ) + ELSEIF SUBTYPE == 'BACKORD' + IF EMPTY((CUR_MAST)->BOSHP_METH) + REC_LOCK(3, CUR_MAST) + (CUR_MAST)->BOSHP_METH := CUST_MAST->BOSHP_METH + (CUR_MAST)->(DBUNLOCK()) + ENDIF + SHIP_DESC := GP_SHIP( (CUR_MAST)->BOSHP_METH) + AADD(PHEAD_ARR, SPACE(22) + ' Shipped Via: ' + SHIP_DESC) + ELSE + AADD(PHEAD_ARR, 'Invoice Date: ' + DTOC(WORKDATE) + ' Shipped Via: ' + SHIP_DESC + ' Sold By: '+ ALLTRIM(SM_FRST) + ' ' + ALLTRIM(SM_LAST) ) + ENDIF + ENDIF + AADD(PHEAD_ARR, ' ') + IF SUBTYPE == 'BACKORD' + AADD(PHEAD_ARR, SPACE(34) + SPACE(LEN(SHIP_DESC)) + ; + ' Cust PO#: ' + (CUR_MAST)->CUST_PO ) + ELSE + AADD(PHEAD_ARR, 'Entered: ' + DTOC((CUR_MAST)->ORDER_DATE) + ' Shipped: ' + DTOC((CUR_MAST)->SHIP_DATE) + ; + ' Terms: ' + SUBS(TERMS_DESC,1,15) + ' Cust PO#: ' + (CUR_MAST)->CUST_PO ) + ENDIF + AADD(PHEAD_ARR, REPLICATE('-', 80 ) ) + DO CASE + CASE ORD_TYPE == 'BACKORD' //** P3N - 5/1/98 + COL_HD_ARR := BO_HEAD() //** P3N - 5/1/98 + CASE ORD_TYPE == 'INV' + COL_HD_ARR := FULL_HEAD() + CASE ORD_TYPE == 'CTRL' + IF SUBTYPE = NIL + COL_HD_ARR := PART_HDQTY() + ELSEIF SUBTYPE = 'DELIVERY' + COL_HD_ARR := FULL_HEAD() + ELSEIF SUBTYPE = 'ORDERDESK' + COL_HD_ARR := PART_HEAD() + ENDIF + OTHERWISE + COL_HD_ARR := PART_HEAD() + ENDCASE + FOR I := 1 TO LEN(COL_HD_ARR) + AADD(PHEAD_ARR, COL_HD_ARR[I]) + NEXT + IF EMPTY(COL_HD_ARR) + ELSE + AADD(PHEAD_ARR, REPLICATE('-', 80 ) ) + ENDIF + ENDIF +ENDIF +RETURN PHEAD_ARR +*********************************************************** +* BUILD THE PARTIAL HEADING LINE FOR FREE FORM PRINT +* (IE: FRAME/GLASS/SASH/EXPANDER, ... COPIES) +*********************************************************** +FUNCTION PART_HEAD() +LOCAL COL_HEAD := SPACE(1) + 'Ord' + SPACE(25) + ' ' + SPACE(23) + ' ' + SPACE(5) + ' ' +LOCAL PHEAD_ARR := {} +AADD(PHEAD_ARR, COL_HEAD) +COL_HEAD := SPACE(1) + 'Qty' + SPACE(25) + 'Description' + SPACE(23) + ' ' + SPACE(5) + ' ' +AADD(PHEAD_ARR, COL_HEAD) +RETURN PHEAD_ARR +*********************************************************** +* BUILD THE FULL HEADING LINE FOR FREE FORM PRINT +* (IE: PRODUCTION CTRL / DELIVERY COPIES) +*********************************************************** +FUNCTION PART_HDQTY() +LOCAL COL_HEAD := SPACE(1) + 'Ord' + ' Back' + ' Ship' + SPACE(13) + ' ' + SPACE(23) + ' ' + SPACE(5) + ' ' +LOCAL PHEAD_ARR := {} +AADD(PHEAD_ARR, COL_HEAD) +COL_HEAD := SPACE(1) + 'Qty' + ' Ord.' + ' Qty ' + SPACE(13) + 'Description' + SPACE(23) + ' ' + SPACE(5) + ' ' +AADD(PHEAD_ARR, COL_HEAD) +RETURN PHEAD_ARR +*********************************************************** +* BUILD THE FULL HEADING LINE FOR FREE FORM PRINT +* (IE: ORDER DESK COPY) +*********************************************************** +FUNCTION FULL_HEAD() +LOCAL COL_HEAD := SPACE(1) + 'Ord' + ' Back' + ' Ship' + SPACE(13) + ' ' + SPACE(23) + ' ' + SPACE(5) + ' ' +LOCAL PHEAD_ARR := {} +AADD(PHEAD_ARR, COL_HEAD) +COL_HEAD := SPACE(1) + 'Qty' + ' Ord.' + ' Qty ' + SPACE(13) + 'Description' + SPACE(23) + ' Unit ' + SPACE(5) + 'Amount' +AADD(PHEAD_ARR, COL_HEAD) +RETURN PHEAD_ARR +*********************************************************** +* BUILD THE BACKORDER HEADING LINE FOR FREE FORM PRINT +* (IE: ORDER DESK COPY) +*********************************************************** +FUNCTION BO_HEAD() +LOCAL COL_HEAD := SPACE(10) + 'Ord.' +LOCAL PHEAD_ARR := {} +AADD(PHEAD_ARR, COL_HEAD) +COL_HEAD := SPACE(10) + 'Qty ' + SPACE(13) + 'Description' +AADD(PHEAD_ARR, COL_HEAD) +RETURN PHEAD_ARR +*********************************************************** +* BUILD THE DUPLICATE ORDER MSG. LINE +*********************************************************** +FUNCTION DUPL_MSG( ORD_TYPE, MDATE, MTIME ) +LOCAL PV1, PV2, RET_VAL, DUP_MSG_TYPE := SUBS(ORD_TYPE,1,3) +PV1 := &WIDEON ; + + 'DUPLICATE ' + DUP_MSG_TYPE ; + + &WIDEOFF +PV2 := + '(Last Printed ' ; + + DTOC(MDATE) + ' ' ; + + SUBS(MTIME,1,5) + ')' +RET_VAL := { PV1, PV2, ' ' } +RETURN RET_VAL +*********************************************************** +// PRINTS THE SIZE AS 23 15/16 X 23 1/4 +*********************************************************** +FUNCTION PRNT_SIZE(PRNTWIDTH, PRNTHEIGHT, DELIMCHAR, MAX_DENOMINATOR, VALUESONLY) +LOCAL MDEC, ELM, W_FRACT, H_FRACT, ADDVAL, ITEM_LINE := '', WIDVAL, HTVAL +IF VALUESONLY = NIL + VALUESONLY := .F. +ENDIF +IF MAX_DENOMINATOR = NIL + MAX_DENOMINATOR := 16 +ENDIF +IF DELIMCHAR = NIL + DELIMCHAR := ' x ' +ELSE + DELIMCHAR := ' ' + DELIMCHAR + ' ' +ENDIF +MDEC := PRNTWIDTH - INT(PRNTWIDTH) +IF MDEC = 0 + ELM = 0 +ELSE + ELM := ASCAN( FRACTION_ARR , {|X| X[2] == MDEC } ) +ENDIF +IF ELM == 0 // DECIMAL - FRACTION NOT FOUND IN ARRAY + W_FRACT := '' +ELSE + W_FRACT := FRACTION_ARR[ELM, 1] // WIDTH FRACTION VALUE TO PRT + IF RIGHT(ALLTRIM(W_FRACT),2) = '32' + IF ELM = 1 + W_FRACT := ' ' + ELSE + W_FRACT := FRACTION_ARR[ELM-1,1] + ENDIF + ENDIF +ENDIF +ADDVAL := LTRIM(STR(INT(PRNTWIDTH),3)) +ITEM_LINE := ITEM_LINE + ADDVAL +WIDVAL := ADDVAL +IF LEN(W_FRACT) > 0 + ADDVAL := ALLTRIM(W_FRACT) + ITEM_LINE := ITEM_LINE + ' ' + ADDVAL + WIDVAL := WIDVAL + ' ' + ADDVAL +ENDIF +IF PRNTHEIGHT <> NIL .AND. PRNTHEIGHT <> 0 + MDEC := PRNTHEIGHT - INT(PRNTHEIGHT) + IF MDEC = 0 + ELM = 0 + ELSE + ELM := ASCAN( FRACTION_ARR , {|X| X[2] == MDEC } ) + ENDIF + IF ELM == 0 // DECIMAL - FRACTION NOT FOUND IN ARRAY + H_FRACT := '' + ELSE + H_FRACT := FRACTION_ARR[ELM, 1] + ' ' // HEIGHT FRACTION VALUE TO PRT + ENDIF + ADDVAL := LTRIM(STR(INT(PRNTHEIGHT),3)) + ITEM_LINE := ITEM_LINE + DELIMCHAR + ADDVAL + HTVAL := ADDVAL + IF LEN(H_FRACT) > 0 + ADDVAL := ALLTRIM(H_FRACT) + ITEM_LINE := TRIM(ITEM_LINE + ' ' + ADDVAL ) + HTVAL := HTVAL + ' ' + ADDVAL + ENDIF +ENDIF +IF VALUESONLY + RETURN { WIDVAL, HTVAL } +ELSE + RETURN STRTRAN(ITEM_LINE, ' ', '~') +ENDIF +******************************************************************* +* THIS FUNCTION WILL CALCULATE THE UNIT PRICE FOR PRINTING PURPOSES +******************************************************************* +FUNCTION CALC_UNIT(PRICE, QTY) +RETURN TRANSFORM(PRICE / QTY,'99999.99') + +******************************************************************* +* THIS FUNCTION PRINT THE MISC. ITEMS ON THE INVOICE COPY OF THE ORDER +******************************************************************* +FUNCTION PRT_MISC(P_DESC, P_AMT) +LOCAL RET_VAL := PADL(ALLTRIM(P_DESC), LEN(P_DESC)+8 ) + ': ' + STR(P_AMT,10,2) +RETURN +********************************************************** +* BUILD BOTTOM OF ORDER (IE: CUSTOMER ORDER MISC ITEMS/TAX/TOTALS) +********************************************************** +FUNCTION BLD_TAIL(MORDER_NUM, ORD_TYPE, LINE_TOTAL, WHICHCOPY, SUBTYPE,; + LI_DISC_PRNT, PARTIAL_INVOICE, MISC_ARR, PRT_BO, REPRINT_INVOICE ) +LOCAL MISCPRNT, I, ELEM, PRT_AMT, NEGTOT, TAXPRNTARR := {} +LOCAL NUMGL_LINES := LEN(GL_ARR), NUMPRNT := 0, DIFF, QUOT_FACTOR +LOCAL PV1, PV2, PVCNT := 0, TOTAL_GL := 0, WK_TOTAL, PTAIL_ARR := {} +LOCAL DP_DESC := 'Downpmt - ' + DTOC( (CUR_MAST)->DP_DATE) + ':' +LOCAL TAX_ARR := STAX_RATE( (CUR_MAST)->TAXSCH ) // WHOLE TAX ARRAY +LOCAL TAX_DESC := TAX_ARR[3] // DESCRIPTION +LOCAL TAX_DET := TAX_ARR[4] // ALL COMPONENTS {RATE, DESC, GL_NUM} +LOCAL NOTEVAL := '', RETVALARR := {}, RETVARARR := {},DID_NOTES := .F. +LOCAL NOTEARR := {}, ARR2 := {}, WORKSPACE := 56, NOTELEN := 32 +LOCAL TEMPSPACE := 23, GL_TOTAL := 0, SV_TOTAL := 0, ELM, WKPCT := 0 +LOCAL WORKARR, BILL_STATE, SHIP_STATE, WK_STATE, SVARR_LEN := 0, SUBTOTL := 0 +LOCAL WKNOTES := '',NONTX_ARR := {} //** P3N-11/2/98 -HAPPY B-DAY MATT +LOCAL ORDTOT := (CUR_MAST)->TOTAL_AMT //** P3N - 11/19/98 +STATIC SV_GLARR := {} +//**ORDTOT := ORDTOT - (CUR_MAST)->ORD_BO_TTL //** P3N - 11/19/98 + +FOR I := 1 TO LEN(GL_ARR) + GL_TOTAL := GL_TOTAL + GL_ARR[I,2] +NEXT +FOR I := 1 TO LEN(SV_GLARR) + IF VALTYPE(SV_GLARR[I]) == 'C' + ELSE + SV_TOTAL := SV_TOTAL + SV_GLARR[I,2] + SVARR_LEN := SVARR_LEN + 1 + ENDIF +NEXT + +IF EMPTY(SV_GLARR) + SV_GLARR:= ACLONE(GL_ARR) + AADD(SV_GLARR, MORDER_NUM) +ELSE + // IS IT THE SAME ORDER NUMBER USE THE SAVE GL_ARR + ELM := ASCAN(SV_GLARR, {|X| VALTYPE(X) == 'C'}) + IF EMPTY(ELM) + SV_GLARR:= ACLONE(GL_ARR) + AADD(SV_GLARR,MORDER_NUM) + ELSEIF MORDER_NUM == SV_GLARR[ELM] + // THE SAME ORDER NUMBER HAS THE GL_ARR CHANGED + IF LEN(GL_ARR) <> SVARR_LEN .OR. SV_TOTAL <> GL_TOTAL + SV_GLARR:= ACLONE(GL_ARR) + AADD(SV_GLARR,MORDER_NUM) + ENDIF + ELSE + SV_GLARR:= ACLONE(GL_ARR) + AADD(SV_GLARR,MORDER_NUM) + ENDIF +ENDIF +IF GLALLOC_OVR + GL_ARR := ASORT(GL_OVR,,, {|X,Y| X[1] < Y[1] }) +ELSE + GL_ARR := {} + FOR I := 1 TO LEN(SV_GLARR) + IF VALTYPE(SV_GLARR[I]) == 'C' + //THIS IS THE ORDER NUMBER-USED TO DETERMINE WHEN TO RESET THE ARRAY + ELSE + AADD(GL_ARR, SV_GLARR[I]) + ENDIF + NEXT + GL_ARR := ASORT(GL_ARR,,, {|X,Y| X[1] < Y[1] }) +ENDIF +WORKSPACE := 46 +TEMPSPACE := 21 +IF MHOME_LOC_CODE = 'KC' + WORKSPACE := 49 +ELSEIF MHOME_LOC_CODE = 'LINDS' + WORKSPACE := 48 + //** ADDRESS LINDS DELIVERY TICKET PRINT ANOMALIES //** P3N -07/17/00 + IF SUBTYPE = 'DELIVERY' + WORKSPACE := 47 + ENDIF +ENDIF + + +FOR I := 1 TO LEN(GL_ARR) + IF LEN(GL_ARR[I]) > 2 // TAX SCHEDULE NAME + AADD(TAXPRNTARR, GL_ARR[I]) // GL NUM, TAX AMT, DESC + ENDIF +NEXT + +// MEMO NOTE FIELD FROM ORDER SCREEN +IF !EMPTY( (CUR_MAST)->NOTES ) + RETVARARR := PRT_MEMO( {} , {} , ALLTRIM((CUR_MAST)->NOTES), NOTELEN) // PRINT THE ORDER MASTER NOTES + WORKARR := ACLONE( RETVARARR[1] ) + FOR I := 1 TO LEN( WORKARR ) + AADD(NOTEARR, WORKARR[I] ) + NEXT + AADD(NOTEARR, ' ' ) +ENDIF + +// TAX NOTES ON INVOICE +IF ORD_TYPE = 'INV' .AND. TAX_SCHED->(DBSEEK ( (CUR_MAST)->TAXSCH ) ) ; + .AND. !EMPTY( TAX_SCHED->NOTES ) + RETVARARR := PRT_MEMO( {}, {}, TAX_SCHED->NOTES, NOTELEN) // PRINT THE TAX SCHEDULE NOTES + WORKARR := ACLONE( RETVARARR[1] ) + FOR I := 1 TO LEN( WORKARR ) + AADD(NOTEARR, WORKARR[I] ) + NEXT +ENDIF + +// 9-6-95 - just say "Sales Tax" +IF EMPTY(TAX_DESC) .OR. MHOME_LOC_CODE <> 'KC' + TAX_DESC := PADL( TRIM("Sales Tax") + ': ', TEMPSPACE-3, ' ' ) +ELSE + TAX_DESC := PADL( TRIM(TAX_DESC) + ': ', TEMPSPACE-3, ' ' ) +ENDIF + +PRT_AMT := DO_WE_PRT_AMT( ORD_TYPE, SUBTYPE ) +IF PRT_AMT .OR. ITEMIZE = 2 + DID_NOTES := .T. + IF (CUR_MAST)->ORDER_NUM == MORDER_NUM + ELSE + (CUR_MAST)->(DBSEEK(MORDER_NUM)) + ENDIF + + // PRINT SUBTOTAL SO FAR + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE), NOTEARR ) + PV2 := SPACE(18) + '----------' + AADD(PTAIL_ARR, PV1 + PV2) + + IF (CUR_MAST)->ORD_D_TTL <> 0 .AND. LI_DISC_PRNT + LINE_TOTAL := LINE_TOTAL - (CUR_MAST)->ORD_D_TTL + ENDIF + + IF LINE_TOTAL < 0 + NEGTOT := TRANSFORM(LINE_TOTAL, '(9999999999999999.99)') //**P3N 4/28/98 +****NEGTOT := TRANSFORM(LINE_TOTAL, '(9999999999.99)') + NEGTOT := STRTRAN(NEGTOT, ' ', '') + NEGTOT := STRTRAN(NEGTOT, '-', '') + NEGTOT := PADL(NEGTOT,17, ' ') //** P3N - 4/28/98 +****NEGTOT := PADL(NEGTOT,11, ' ') + ELSE + NEGTOT := 0 + ENDIF + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE), NOTEARR ) + IF (CUR_MAST)->QUOTE_PRIC = 0 + IF EMPTY(NEGTOT) + PV2 = ' ' + STR(LINE_TOTAL,16,2) //** P3N - 4/28/98 + ELSE + PV2 = ' ' + NEGTOT // NEGATIVE TOTAL //** P3N - 4/28/98 + ENDIF + ELSE + PV2 = ' Quoted Amount: ' + STR( (CUR_MAST)->QUOTE_PRIC,10,2) + ENDIF + AADD(PTAIL_ARR, PV1 + PV2) + + MISCPRNT := .F. + IF (CUR_MAST)->ORD_D_TTL <> 0 + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE-8), NOTEARR ) + IF LI_DISC_PRNT + IF EMPTY(PV1) + ELSE + AADD(PTAIL_ARR, PV1 ) + ENDIF + ELSEIF EMPTY((CUR_MAST)->ORD_D_TTL) + ELSE + IF EMPTY((CUR_MAST)->DISCOUNT) + PV2 := ' Less ORDER Discount:' + ELSE + PV2 := 'Less ORDER Discount ' + PV2 := PV2+ STR((CUR_MAST)->DISCOUNT,3,0) + '%:' + ENDIF + PV2 := PV2+ STR((CUR_MAST)->ORD_D_TTL*-1,11,2) //** P3N - 12/10/98 + PV2 := STRTRAN( PV2, '-','(' ) + ')' //** P3N - 12/10/98 +//** PV2 := STRTRAN(((CUR_MAST)->ORD_D_TTL*-1,11,2) //** P3N - 12/10/98 + AADD(PTAIL_ARR, PV1 + PV2) + LINE_TOTAL := LINE_TOTAL - (CUR_MAST)->ORD_D_TTL + ENDIF + ENDIF + + IF (CUR_MAST)->( FIELDPOS('FREIGHT') ) > 0 + IF (CUR_MAST)->FREIGHT <> 0 + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE), NOTEARR ) + AADD(PTAIL_ARR, PV1 + ' Freight Charges: ' + STR((CUR_MAST)->FREIGHT,10,2) ) + MISCPRNT := .T. + ENDIF + ENDIF + + NEGTOT := 0 //** P3N - 12/4/98 + + //** P3N - 09/21/06 - ADDED THE FUEL SURCHARGE TO ORDER ENTRY + IF (CUR_MAST)->FUEL_CHRG <> 0 + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE-30), NOTEARR ) + SUBTOTL := (CUR_MAST)->ORD_L_TTL - (CUR_MAST)->ORD_D_TTL + (CUR_MAST)->ORD_M_TTL //**P3N - 11/13/06 +//**SUBTOTL := (CUR_MAST)->ORD_L_TTL - (CUR_MAST)->ORD_D_TTL //** P3N - 11/13/06 + SUBTOTL += (CUR_MAST)->MISC_QTY1 * (CUR_MAST)->MISC_AMT1 + SUBTOTL += (CUR_MAST)->MISC_QTY2 * (CUR_MAST)->MISC_AMT2 + SUBTOTL += (CUR_MAST)->MISC_QTY3 * (CUR_MAST)->MISC_AMT3 +//**WKPCT := VAL(STR(((CUR_MAST)->FUEL_CHRG / SUBTOTL) * 100,15,2) ) //** P3N - 04/22/09 - per Darlene - remove % + AADD(PTAIL_ARR, PV1 +SPACE(31)+ ; //** P3N - 04/22/09 - per Darlene - remove % + 'Delivery Charge:'+ STR((CUR_MAST)->FUEL_CHRG,11,2)) //** P3N - 04/22/09 +//**AADD(PTAIL_ARR, PV1 +SPACE(8)+ STR( WKPCT,3,0) + ; //** P3N - 04/13/09 +//** '% Delivery Charge:'+ STR((CUR_MAST)->FUEL_CHRG,28,2)) //** P3N - 04/13/09 + //** P3N - 04/13/09 - PER DARLENE - REMOVE "Fuel Sur" from description + //** '% Delivery Fuel SurCharge:'+ STR((CUR_MAST)->FUEL_CHRG,28,2)) + MISCPRNT := .T. + ENDIF + + IF (CUR_MAST)->SALES_TAX <> 0 + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE ), NOTEARR ) + IF (CUR_MAST)->SALES_TAX < 0 //** P3N - 10/14/98 + NEGTOT := TRANSFORM((CUR_MAST)->SALES_TAX, '(9999999999.99)') + NEGTOT := STRTRAN(NEGTOT, ' ', '') //** P3N - 10/14/98 + NEGTOT := STRTRAN(NEGTOT, '-', '') //** P3N - 10/14/98 + NEGTOT := PADL(NEGTOT,11, ' ') //** P3N - 10/14/98 + ENDIF //** P3N - 10/14/98 + IF EMPTY(NEGTOT) //** P3N - 10/14/98 + AADD(PTAIL_ARR, PV1 + TAX_DESC + STR((CUR_MAST)->SALES_TAX,10,2) ) + ELSE //** P3N - 10/14/98 + AADD(PTAIL_ARR, PV1 + TAX_DESC + NEGTOT ) //** P3N - 10/14/98 + ENDIF + MISCPRNT := .T. + ENDIF + + //** P3N - 12/3/98 DO NOT PRINT NONTAX ITEMS FOR INTER COMPANY PO'S + IF WHICHCOPY == 'PO' .AND. SUBTYPE == 'PO' + //** P3N - 12/2/98 PREPARE NONTAX ITEMS FOR PRINTING + ELSE + NONTX_ARR := PRT_NONTX(MISC_ARR, PARTIAL_INVOICE, .T., PRT_BO, REPRINT_INVOICE) + FOR I := 1 TO LEN(NONTX_ARR) + PV1 := NONTX_ARR[I] + PVCNT ++ + AADD(PTAIL_ARR, PV1) + MISCPRNT := .T. + NEXT + ENDIF + + NEGTOT := 0 //** P3N - 12/4/98 + + IF MISCPRNT .OR. PRT_AMT //** P3N - 4/8/98 + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE), NOTEARR ) + PV2 := SPACE(18) + '----------' + AADD(PTAIL_ARR, PV1 + PV2) + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE), NOTEARR ) + IF ORDTOT < 0 +//** NEGTOT := TRANSFORM((CUR_MAST)->TOTAL_AMT, '(9999999999.99)') + NEGTOT := TRANSFORM(ORDTOT, '(9999999999.99)') + NEGTOT := STRTRAN(NEGTOT, ' ', '') + NEGTOT := STRTRAN(NEGTOT, '-', '') + NEGTOT := PADL(NEGTOT,11, ' ') +//** P3N - 11/19/98 +//**ELSEIF (CUR_MAST)->TOTAL_AMT = 0.00 // ** P3N - 4/8/98 + ELSEIF ORDTOT = 0.00 + GL_ARR := {} // ** NO GL ALLOCATIONS + NEGTOT := 0 // ** FOR A ORDER TOTAL OF 0! + ELSE + NEGTOT := 0 + ENDIF + IF EMPTY(NEGTOT) +//** P3N - 11/19/98 +//** AADD(PTAIL_ARR, PV1 + ' Order Total: ' + STR((CUR_MAST)->TOTAL_AMT,10,2) ) + AADD(PTAIL_ARR, PV1 + ' Order Total: ' + STR(ORDTOT,10,2) ) + ELSE + AADD(PTAIL_ARR, PV1 + ' Order Total: ' + NEGTOT ) + ENDIF + ENDIF + + NEGTOT := 0 //** P3N - 12/4/98 + + IF (CUR_MAST)->DOWN_PMT <> 0 + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE-2), NOTEARR ) + NEGTOT := TRANSFORM((CUR_MAST)->DOWN_PMT*-1 , '(9999999999.99)') + NEGTOT := STRTRAN(NEGTOT, ' ', '') + NEGTOT := STRTRAN(NEGTOT, '-', '') + NEGTOT := PADL(NEGTOT,12, ' ') + AADD(PTAIL_ARR, PV1 + DP_DESC + NEGTOT ) + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE), NOTEARR ) + AADD(PTAIL_ARR, PV1 + SPACE(18) + '----------' ) + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE), NOTEARR ) + + NEGTOT := 0 //** P3N - 12/4/98 + +//** P3N - 11/19/98 +//**IF (CUR_MAST)->TOTAL_AMT < 0 + IF ORDTOT < 0 +//** IF (CUR_MAST)->TOTAL_AMT + (CUR_MAST)->DOWN_PMT < 0 + IF ORDTOT + (CUR_MAST)->DOWN_PMT < 0 +//** NEGTOT := TRANSFORM((CUR_MAST)->TOTAL_AMT-(CUR_MAST)->DOWN_PMT , '(9999999999.99)') + NEGTOT := TRANSFORM(ORDTOT-(CUR_MAST)->DOWN_PMT , '(9999999999.99)') + NEGTOT := STRTRAN(NEGTOT, ' ', '') + NEGTOT := STRTRAN(NEGTOT, '-', '') + NEGTOT := PADL(NEGTOT,11, ' ') + ELSE + NEGTOT := 0 + ENDIF + ELSE + NEGTOT := 0 + ENDIF + IF EMPTY(NEGTOT) +//** P3N - 11/19/98 +//** AADD(PTAIL_ARR, PV1 + 'Total Amount Due: ' + STR((CUR_MAST)->TOTAL_AMT - (CUR_MAST)->DOWN_PMT,10,2) ) + AADD(PTAIL_ARR, PV1 + 'Total Amount Due: ' + STR(ORDTOT - (CUR_MAST)->DOWN_PMT,10,2) ) + ELSE + AADD(PTAIL_ARR, PV1 + 'Total Amount Due: ' + NEGTOT ) + ENDIF + ENDIF + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE), NOTEARR ) + IF MHOME_LOC_CODE <> 'IOLA' // DARLENE 8-22-96 + AADD(PTAIL_ARR, PV1 + SPACE(18) + '----------' ) + ENDIF + + FOR I := PVCNT TO MAX(LEN(GL_ARR), LEN(NOTEARR) ) + PVCNT ++ + PV1 := GETPV1(GL_ARR, PVCNT, SPACE(WORKSPACE), NOTEARR ) + AADD(PTAIL_ARR, PV1 ) + NEXT +ELSE + //** P3N - 12/3/98 DO NOT PRINT NONTAX ITEMS FOR INTER COMPANY PO'S + IF WHICHCOPY == 'PO' .AND. SUBTYPE == 'PO' + //** P3N - 12/2/98 PREPARE NONTAX ITEMS FOR PRINTING + ELSE + NONTX_ARR := PRT_NONTX(MISC_ARR, PARTIAL_INVOICE, .F., PRT_BO, REPRINT_INVOICE) + FOR I := 1 TO LEN(NONTX_ARR) + PV1 := NONTX_ARR[I] + PVCNT ++ + AADD(PTAIL_ARR, PV1) + MISCPRNT := .T. + NEXT + ENDIF +ENDIF +IF !DID_NOTES .AND. LEN(NOTEARR) > 0 + //** P3N 9/2/98 + //** ONLY INCLUDE THE SPECIAL BACKORDER NOTES ON THE INVOICE COPIES + IF AT(' ARE ON BACK ORDER AND INCLUDED IN THE ', (CUR_MAST)->NOTES) > 0 + IF ORD_TYPE == 'INV' + FOR I := 1 TO LEN(NOTEARR) + AADD(PTAIL_ARR, SPACE(15) + NOTEARR[I]) + NEXT + ENDIF + ELSE + FOR I := 1 TO LEN(NOTEARR) + AADD(PTAIL_ARR, SPACE(15) + NOTEARR[I]) + NEXT + ENDIF +ENDIF +//** P3N 9/2/98 +//** BO MEMO NOTE FIELD FROM ORDER MASTER(CGW0OM) +//** ORDER CONTROL SCREEN (3220B/F1) +IF ORD_TYPE == 'BACKORD' + PTAIL_ARR := {} + IF SUBTYPE == 'BACKORD' //** P3N - 11/2/98 HAPPY B-DAY MATT + WKNOTES := (CUR_MAST)->BO_NOTES //** P3N - 11/2/98 HAPPY B-DAY MATT + ELSEIF SUBTYPE == 'SCREENS' //** P3N - 11/2/98 HAPPY B-DAY MATT + IF (CUR_MAST)->(FIELDPOS('BONOTESCRN')) > 0 + WKNOTES := (CUR_MAST)->BONOTESCRN //** P3N - 11/2/98 HAPPY B-DAY MATT + ENDIF //** P3N - 11/2/98 HAPPY B-DAY MATT + ENDIF //** P3N - 11/2/98 HAPPY B-DAY MATT + IF !EMPTY( WKNOTES ) + RETVARARR := PRT_MEMO( {} , {} , ALLTRIM(WKNOTES), NOTELEN) // PRINT THE ORDER MASTER BO_NOTES + WORKARR := ACLONE( RETVARARR[1] ) + FOR I := 1 TO LEN( WORKARR ) + AADD(PTAIL_ARR, SPACE(12) + WORKARR[I] ) + NEXT + AADD(PTAIL_ARR, ' ' ) + ENDIF +ENDIF +RETURN PTAIL_ARR +*************************************************************** +* P3N - 12/02/98 * +* PREPARE NONTAX ITEMS FOR PRINTING * +*************************************************************** +FUNCTION PRT_NONTX(MISC_ARR, PARTIAL_INVOICE, PRT_AMT, PRT_BO, REPRINT_INVOICE) +LOCAL TX1SHP := 0, TX2SHP := 0, TX3SHP := 0, TX1INV := 0, TX2INV := 0, TX3INV := 0 +LOCAL TX1BO := 0, TX2BO := 0, TX3BO := 0, TX1A := 0, TX2A := 0, TX3A := 0 +LOCAL TX1Q := 0 , TX2Q := 0, TX3Q := 0, I := 0, WK_TOTAL := 0, PV1 +LOCAL PTAXAMT := PRT_AMT, PTAIL_ARR := { } +IF ITEMIZE = 2 + PTAXAMT := .F. +ENDIF +TX1A := (CUR_MAST)->NOTX_AMT1 +TX1Q := (CUR_MAST)->NOTX_QTY1 +TX2A := (CUR_MAST)->NOTX_AMT2 +TX2Q := (CUR_MAST)->NOTX_QTY2 +TX3A := (CUR_MAST)->NOTX_AMT3 +TX3Q := (CUR_MAST)->NOTX_QTY3 +IF PRT_BO + FOR I := 1 TO LEN(MISC_ARR[1]) + IF MISC_ARR[1,I,5] == 'ORDNOTX1' + TX1SHP := MISC_ARR[1,I,3] //** SHIP QTY + TX1INV := MISC_ARR[1,I,6] //** INV QTY + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX2' + TX2SHP := MISC_ARR[1,I,3] //** SHIP QTY + TX2INV := MISC_ARR[1,I,6] //** INV QTY + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX3' + TX3SHP := MISC_ARR[1,I,3] //** SHIP QTY + TX3INV := MISC_ARR[1,I,6] //** INV QTY + ENDIF + NEXT + TX1BO := TX1Q - TX1SHP + TX2BO := TX2Q - TX2SHP + TX3BO := TX3Q - TX3SHP +ENDIF +IF (CUR_MAST)->NOTX_QTY1 <> 0 + IF PARTIAL_INVOICE + WK_TOTAL := TX1A * TX1SHP + ELSEIF REPRINT_INVOICE + WK_TOTAL := TX1A * TX1INV + ELSE + WK_TOTAL := TX1A * TX1Q + ENDIF + IF EMPTY(TX1BO) + TX1BO := SPACE(4) + ELSE + TX1BO := STR(TX1BO,4,0) + ENDIF + IF EMPTY(TX1SHP) + TX1SHP := SPACE(5) + ELSEIF TX1Q = TX1SHP //** P3N - 12/28/98 + TX1SHP := SPACE(5) //** DO NOT PRINT SHIP QTY IF SAME AS + ELSE //** ORDER QTY + TX1SHP := STR(TX1SHP,5,0) + ENDIF + PV1 := STR(TX1Q,4,0) + TX1BO + TX1SHP + SPACE(2) + IF MHOME_LOC_CODE = 'KC' + PV1 := PV1 + (CUR_MAST)->NOTX_ITEM1 + ' ~ ' + SPACE(13) + IF PTAXAMT + PV1 := PV1 + STR(TX1A,7,2) + ' ' + ENDIF + ELSEIF MHOME_LOC_CODE = 'LINDS' + PV1 := PV1 + (CUR_MAST)->NOTX_ITEM1 + ' ~ ' + SPACE(13) + IF PTAXAMT + PV1 := PV1 + STR(TX1A,7,2) + ' ' + ENDIF + ELSE // IOLA AND PAWNEE + PV1 := PV1 + (CUR_MAST)->NOTX_ITEM1 + ' ~ ' + SPACE(11) + IF PTAXAMT + PV1 := PV1 + STR(TX1A,7,2) + ' ' + ENDIF + ENDIF + IF PTAXAMT + PV1 := PV1 + STR(WK_TOTAL,10,2) + ELSE + AADD(PTAIL_ARR, ' ') + ENDIF + AADD(PTAIL_ARR, PV1) +ENDIF +IF (CUR_MAST)->NOTX_QTY2 <> 0 + IF PARTIAL_INVOICE + WK_TOTAL := TX2A * TX2SHP + ELSEIF REPRINT_INVOICE + WK_TOTAL := TX2A * TX2INV + ELSE + WK_TOTAL := TX2A * TX2Q + ENDIF + IF EMPTY(TX2BO) + TX2BO := SPACE(4) + ELSE + TX2BO := STR(TX2BO,4,0) + ENDIF + IF EMPTY(TX2SHP) + TX2SHP := SPACE(5) + ELSEIF TX2Q = TX2SHP //** P3N - 12/28/98 + TX2SHP := SPACE(5) //** DO NOT PRINT SHIP QTY IF SAME AS + ELSE //** ORDER QTY + TX2SHP := STR(TX2SHP,5,0) + ENDIF + PV1 := STR(TX2Q,4,0) + TX2BO + TX2SHP + SPACE(2) + IF MHOME_LOC_CODE = 'KC' + PV1 := PV1 + (CUR_MAST)->NOTX_ITEM2 + ' ~ ' + SPACE(13) + IF PTAXAMT + PV1 := PV1 + STR(TX2A,7,2) + ' ' + ENDIF + ELSEIF MHOME_LOC_CODE = 'LINDS' + PV1 := PV1 + (CUR_MAST)->NOTX_ITEM2 + ' ~ ' + SPACE(13) + IF PTAXAMT + PV1 := PV1 + STR(TX2A,7,2) + ' ' + ENDIF + ELSE // IOLA AND PAWNEE + PV1 := PV1 + (CUR_MAST)->NOTX_ITEM2 + ' ~ ' + SPACE(11) + IF PTAXAMT + PV1 := PV1 + STR(TX2A,7,2) + ' ' + ENDIF + ENDIF + IF PTAXAMT + PV1 := PV1 + STR(WK_TOTAL,10,2) + ELSE + AADD(PTAIL_ARR, ' ') + ENDIF + AADD(PTAIL_ARR, PV1) +ENDIF +IF (CUR_MAST)->NOTX_QTY3 <> 0 + IF PARTIAL_INVOICE + WK_TOTAL := TX3A * TX3SHP + ELSEIF REPRINT_INVOICE + WK_TOTAL := TX3A * TX3INV + ELSE + WK_TOTAL := TX3A * TX3Q + ENDIF + IF EMPTY(TX3BO) + TX3BO := SPACE(4) + ELSE + TX3BO := STR(TX3BO,4,0) + ENDIF + IF EMPTY(TX3SHP) + TX3SHP := SPACE(5) + ELSEIF TX3Q = TX3SHP //** P3N - 12/28/98 + TX3SHP := SPACE(5) //** DO NOT PRINT SHIP QTY IF SAME AS + ELSE //** ORDER QTY + TX3SHP := STR(TX3SHP,5,0) + ENDIF + PV1 := STR(TX3Q,4,0) + TX3BO + TX3SHP + SPACE(2) + IF MHOME_LOC_CODE = 'KC' + PV1 := PV1 + (CUR_MAST)->NOTX_ITEM3 + ' ~ ' + SPACE(13) + IF PTAXAMT + PV1 := PV1 + STR(TX3A,7,2) + ' ' + ENDIF + ELSEIF MHOME_LOC_CODE = 'LINDS' + PV1 := PV1 + (CUR_MAST)->NOTX_ITEM3 + ' ~ ' + SPACE(13) + IF PTAXAMT + PV1 := PV1 + STR(TX3A,7,2) + ' ' + ENDIF + ELSE // IOLA AND PAWNEE + PV1 := PV1 + (CUR_MAST)->NOTX_ITEM3 + ' ~ ' + SPACE(11) + IF PTAXAMT + PV1 := PV1 + STR(TX3A,7,2) + ' ' + ENDIF + ENDIF + IF PTAXAMT + PV1 := PV1 + STR(WK_TOTAL,10,2) + ELSE + AADD(PTAIL_ARR, ' ') + ENDIF + AADD(PTAIL_ARR, PV1) +ENDIF +RETURN PTAIL_ARR +*************************************************************** +*************************************************************** +*************************************************************** +// PRINT THE ACCOUNTING TOTALS / GL ALLOCATIONS? +FUNCTION PRNT_ACCT_INFO( ORD_TYPE, WHICHCOPY, SUBTYPE ) +LOCAL RETVAL +//**IF (CUR_MAST)->TERMS = '90' .OR. ; //** NO CHARGE //**P3N - 6/4/98 +//** (CUR_MAST)->TERMS = '96' //** CANCELLATION //**P3N - 6/4/98 +IF ZERO_ORDER() //** NO CHARGE //**P3N - 3/5/99 + //** FOR A NO CHARGE OR CANCELLATION FORCE TO NOT PRINT GL AMTS + RETVAL := .F. +ELSEIF ORD_TYPE == 'INV' // PRINT CUSTOMER INVOICE + RETVAL := .T. +ELSEIF (ORD_TYPE == 'OD' .AND. WHICHCOPY == 'CTRL' ) + RETVAL := .T. + IF MHOME_LOC_CODE = 'LINDS' .AND. SUBTYPE == 'ORDERDESK' + //PER LINDA @ LINDSBOURG 11-10-97 + //PRINT GL ALLOCATIONS / ORDER AMOUNTS ON ORDERDESK - GOLDEN ROD + ELSEIF SUBTYPE = 'DELIVERY' .AND. IS_COD( (CUR_MAST)->TERMS ) + RETVAL := .T. + ELSE + RETVAL := .F. + ENDIF +ELSE + RETVAL := .F. +ENDIF +RETURN RETVAL +************************************************************ +************************************************************ +************************************************************ +FUNCTION GETPV1(GL_ARR, ELEM, ALTVALU, NOTEARR) +LOCAL RETVAL := SPACE(10) // FILL OUT 1ST "COLUMN" +IF LEN(NOTEARR) >= ELEM + RETVAL := RETVAL + ' ' + NOTEARR[ELEM] +ENDIF +IF LEN(RETVAL) < LEN(ALTVALU) + RETVAL := PADR(RETVAL, LEN(ALTVALU) ) +ELSE + IF LEN(RETVAL) > LEN(ALTVALU) + RETVAL := SUBS(RETVAL, 1, LEN(ALTVALU) ) + ENDIF +ENDIF +RETURN RETVAL +*************************************************************** +//* CALCULATE THE NUMBER OF LINES THAT WILL FIT ON EACH PAGE OF THE ORDER +//* AND THE NUMBER OF PAGES ON THE ORDER +*************************************************************** +FUNCTION CALC_PAGES(PBODY_ARR, PTAIL_ARR) +LOCAL STRT := 1, PG_NUM := 0, I +LOCAL NEW_PROD, PG_LINES := 0 +LOCAL LINES_LEFT := MBODY_LEN +LOCAL PG_ARR := {}, THIS_PG, WKPG +LOCAL NEWSTRT := 1, WK_LI_DESC + +IF LEN(PBODY_ARR) = 1 + AADD (PG_ARR, {1, 1}) + RETURN PG_ARR +ENDIF + +DO WHILE STRT < LEN(PBODY_ARR) + PG_LINES := 0 + // START ON FIRST PRODUCT + // WON'T FIND ANY IF ONLY MISC LINE ITEMS + FOR I := STRT TO LEN(PBODY_ARR) + IF SUBS(PBODY_ARR[I], 1,1)$'^' + STRT = I + EXIT + ENDIF + NEXT + THIS_PG := CNT_PAGE_LINES(STRT, PBODY_ARR, PTAIL_ARR) //** P3N - 05/15/01 +//** THIS_PG := CNT_PAGE_LINES(STRT, PBODY_ARR) //** P3N - 05/15/01 + STRT := STRT + THIS_PG +//** IF THIS_PG > MBODY_LEN //** P3N - 9/8/99 +//** DO WHILE THIS_PG > MBODY_LEN //** P3N - 9/8/99 + IF THIS_PG >= MBODY_LEN //** P3N - 9/8/99 + DO WHILE THIS_PG >= MBODY_LEN //** P3N - 9/8/99 + PG_NUM ++ + IF PG_NUM == 1 + SV_LI_DESC := SV_DESC_LINE_ITEM(PBODY_ARR, 1) //FIND LINE ITEM HEADING + ELSE + WK_LI_DESC := SV_DESC_LINE_ITEM(PBODY_ARR, (PG_NUM*MBODY_LEN)) //FIND LINE ITEM HEADING + IF EMPTY(WK_LI_DESC) + ELSE + SV_LI_DESC := WK_LI_DESC + ENDIF + ENDIF + + IF LEN(PBODY_ARR) > (PG_NUM*MBODY_LEN) + IF SUBS(PBODY_ARR[PG_NUM*MBODY_LEN], 1,1)$'^' + AADD (PG_ARR, {PG_NUM, MBODY_LEN-1 }) + THIS_PG := THIS_PG - MBODY_LEN+1 + ELSEIF THIS_PG = MBODY_LEN //** P3N 12/07/99 PAGE BRK + ELSE + //7-24-97 FIX PAGE BREAK LOGIC! + AADD (PG_ARR, {PG_NUM, PAGEBRK(PBODY_ARR, PG_ARR, PG_NUM) }) + THIS_PG := THIS_PG - PAGEBRK(PBODY_ARR, PG_ARR, PG_NUM) + ENDIF + ELSE + WKPG := MIN( LEN(PBODY_ARR)-(PG_NUM-1*MBODY_LEN),MBODY_LEN) + AADD (PG_ARR, {PG_NUM, WKPG }) + THIS_PG := THIS_PG - WKPG + ENDIF + ENDDO + ENDIF + PG_NUM ++ + IF PG_NUM == 1 //** P3N - 9/9/99 NO THE EARTH DID NOT COME TO AN END TODAY + SV_LI_DESC := SV_DESC_LINE_ITEM(PBODY_ARR, 1) //FIND LINE ITEM HEADING + ENDIF //** P3N - 9/9/99 NO THE EARCH DID NOT COME TO AN END TODAY + IF EMPTY(THIS_PG) //** P3N - 12/7/99 PAGE BRK + ELSE //** P3N - 12/7/99 PAGE BRK + AADD (PG_ARR, {PG_NUM, THIS_PG }) + ENDIF //** P3N - 12/7/99 PAGE BRK +ENDDO + +// PRINT NOTES AT BOTTOM OF EVERY PAGE. ALTER LINE COUNT ACCORDINGLY +IF !EMPTY((CUR_MAST)->NOTE_FIELD) .AND. (CUR_MAST)->PRNT_NOTES$'Y' + FOR I := 1 TO LEN(PG_ARR) + IF MBODY_LEN < PG_ARR[I,2] + PG_ARR[I,2] -- + ENDIF + NEXT +ENDIF + +RETURN PG_ARR +*************************************************************** +* FIND THE SPOT TO BREAK A PAGE CLEANLY!!! +*************************************************************** +FUNCTION PAGEBRK(PBODY_ARR, PG_ARR, PG_NUM) +LOCAL LOOPSTRT := 0 +LOCAL PG_BRK, I +IF EMPTY(PG_ARR) //** P3N - 8/20/99 + LOOPSTRT := LEN(PBODY_ARR) //** P3N - 8/20/99 +ELSE //** P3N - 8/20/99 + FOR I := 1 TO LEN(PG_ARR) //** P3N - 8/20/99 + LOOPSTRT := LOOPSTRT + PG_ARR[I,2] //** P3N - 8/20/99 + NEXT //** P3N - 8/20/99 + LOOPSTRT := LEN(PBODY_ARR) - LOOPSTRT //** P3N - 8/20/99 +ENDIF //** P3N - 8/20/99 +DO WHILE .T. + FOR I := LOOPSTRT TO 1 STEP -1 +//** IF SUBS(PBODY_ARR[I], 1,1)$'^' //** P3N - 3/20/98 + IF SUBS(PBODY_ARR[I], 1,1)$'^' .OR. ; + SUBS(PBODY_ARR[I], 1,1)$' ' + PG_BRK := I - 1 + EXIT + ENDIF + NEXT + IF PG_BRK > MBODY_LEN + LOOPSTRT := PG_BRK + LOOP + ELSE //** P3N - 8/20/99 + PG_BRK := ( MBODY_LEN - LEN(SV_LI_DESC) ) //** NO CLEAN BREAK FOUND - BREAK BASED + EXIT //** ON MBODY_LEN FROM CONTROL FILE + ENDIF +ENDDO +RETURN PG_BRK +*************************************************************** +* BLD A PAGE OF ORDER LINES FOR A GIVEN PRODUCT +*************************************************************** +//**FUNCTION CNT_PAGE_LINES( STRT, PBODY_ARR ) //** P3N - 05/15/01 +FUNCTION CNT_PAGE_LINES( STRT, PBODY_ARR, PTAIL_ARR) //** P3N - 05/15/01 +LOCAL I, ENDLINE := 0, NEW_PROD, RET_ARR := {} +LOCAL INLOOP := .F., WORKVAR +LOCAL NOTE_LEN := 0 //** P3N - 05/15/01 +IF EMPTY( (CUR_MAST)->NOTE_FIELD ) //** P3N - 05/15/01 +ELSEIF (CUR_MAST)->PRNT_NOTES$'Y' //** P3N - 05/15/01 + //** TAKE INTO ACCOUNT THE ORDER MASTER->NOTE_FIELD (UP TO 5 LINES OF 50 CHARS) + NOTE_LEN := INT (LEN(ALLTRIM( (CUR_MAST)->NOTE_FIELD) ) / 50 ) + NOTE_LEN := NOTE_LEN + 1 + LEN(PTAIL_ARR) //** P3N - 05/15/01 +ENDIF //** P3N - 05/15/01 +LINE_CNTR := 0 +DO WHILE .T. + THIS_PROD := CNT_PROD_LINES(STRT, PBODY_ARR ) + + // STORM COPY - ONLY ONE PRODUCT PER PAGE + IF SUBS( PBODY_ARR[STRT],2,1 ) = CHR(1) + WORKVAR := ENDLINE + THIS_PROD + IF WORKVAR < LEN(PBODY_ARR) .AND. SUBS( PBODY_ARR[WORKVAR + 1],2,1) = CHR(1) + ENDLINE := ENDLINE + THIS_PROD + RETURN ENDLINE + ELSEIF WORKVAR = LEN(PBODY_ARR) //** P3N - 4/8/98 + IF EMPTY(ENDLINE) //** P3N - 4/9/98 + RETURN THIS_PROD //** ONLY ONE STORM COPY - ONE PAGE! + ELSE + RETURN ENDLINE //** LAST ITEM ON STORM S/B ON OWN PAGE! + ENDIF + ENDIF + ENDIF + +//** IF ENDLINE + THIS_PROD <= MBODY_LEN //**P3N - 05/15/01 + IF ENDLINE + THIS_PROD <= ( MBODY_LEN - NOTE_LEN ) //**P3N - 05/15/01 + ENDLINE := ENDLINE + THIS_PROD + STRT := STRT + THIS_PROD + ELSE + IF ENDLINE > 0 + RETURN ENDLINE + ELSE // IF ENDLINE IS ZERO THIS MEANS THE PRODUCT + // WON'T FIT ON THE PAGE ( > 36 LINES [BODYLINES] ) + RETURN THIS_PROD + ENDIF + ENDIF + IF STRT > LEN(PBODY_ARR) + RETURN ENDLINE + ENDIF +ENDDO +********************************************************************* +* COUNT THE NUMBER OF LINES ON THE +********************************************************************* +FUNCTION CNT_PROD_LINES(STRT, PBODY_ARR) +LOCAL LAST_ROW := 1 +STRT ++ +DO WHILE STRT <= LEN(PBODY_ARR) + IF SUBS(PBODY_ARR[STRT], 1, 1 )$'^' //COUNT PRODUCT LINES + EXIT + ENDIF + IF SUBS(PBODY_ARR[STRT], 1, 2 )$'^'+CHR(1) //STORMPAGE EACH ITEM ON OWN PAGE + EXIT + ENDIF + LAST_ROW ++ + STRT ++ +ENDDO +RETURN LAST_ROW +******************************************************************* +* THIS FUNCTION WILL DETERMINE THE FORM TYPE USED FOR PRINTING +******************************************************************* +FUNCTION GET_FORMTYPE(WHCHORDER, WHICH_TYPE, SUBTYPE) +LOCAL RET_VAL := ' ', ORD_TYPE := WHCHORDER, PP_LOC := {'IOLA', 'LINDS', 'KC', 'PAWNEE' } +DO CASE + CASE SUBTYPE = 'PREBILL' .OR. SUBTYPE = 'PRECOST' + MLMAR := '' // DO NOT ADJUST THE LMAR/TMAR FOR FREE FORM PRT + MTMAR := 0 // FORCE TO '' / 0 RESPECTIVELY + RET_VAL := 'BLANK' + CASE SUBTYPE = 'DELIVERY' .AND. ; + ASCAN( PP_LOC, {|X| X = ALLTRIM(MHOME_LOC_CODE) } ) > 0 + RET_VAL := 'PREPRINT-TRACTOR' + CASE ORD_TYPE = 'INV' .AND. CUR_MAST = 'ORD_MAST' ; + .AND. ASCAN( PP_LOC, {|X| X = ALLTRIM(MHOME_LOC_CODE) } ) > 0 + RET_VAL := 'PREPRINT-TRACTOR' // NO EJECT MESSAGE + CASE ORD_TYPE == 'INV' .AND. CUR_MAST = 'ORD_MAST' + RET_VAL := 'PREPRINT' + CASE ORD_TYPE == 'BACKORD' .AND. CUR_MAST = 'ORD_MAST' ; //** P3N - 9/11/98 + .AND. ASCAN( PP_LOC, {|X| X = ALLTRIM(MHOME_LOC_CODE) } ) > 0 + RET_VAL := 'PREPRINT-TRACTOR' + OTHERWISE + MLMAR := '' // DO NOT ADJUST THE LMAR/TMAR FOR FREE FORM PRT + MTMAR := 0 // FORCE TO '' / 0 RESPECTIVELY + RET_VAL := 'BLANK' +ENDCASE +RETURN RET_VAL +******************************************************************* +* THIS FUNCTION WILL FORMAT THE MISC SIZE FOR PRINTING +******************************************************************* +FUNCTION FORMAT_MISCSIZE(P_SIZE) +LOCAL RETVAL, I +FOR I := 1 TO LEN(P_SIZE) + IF SUBST(P_SIZE,I,1)$'0123456789' + IF EMPTY(RETVAL) + RETVAL := SUBST(P_SIZE,I,1) + ELSE + RETVAL := RETVAL + SUBST(P_SIZE,I,1) + ENDIF + ENDIF +NEXT +IF EMPTY(RETVAL) .OR. LEN(RETVAL) > 4 + RETVAL := 'INV MISC SIZE' +ELSE +//** RETVAL := PADL(RETVAL, 4, ' ') + RETVAL := VAL(RETVAL) +ENDIF + +RETURN RETVAL +******************************************************************* +//** P3N - 12/15/98 +//** THIS FUNCTION WILL GET THE DEFUALT SOLICITATION NOTE +//** FROM THE CONTROL FILE (CGW0KA) +******************************************************************* +FUNCTION DEFAULTNOTE() +LOCAL SVSEL := SELECT(), RETNOTE := ' ', RETPOS := 0 +DBOPEN('CONTROL') +IF FIELDPOS('INVNOTES') > 0 + RETNOTE := CONTROL->INVNOTES +ENDIF +IF FIELDPOS('INVNOTEPOS') > 0 + RETPOS := CONTROL->INVNOTEPOS +ENDIF +CLOSE CONTROL +SELECT(SVSEL) +RETURN {RETNOTE, RETPOS} +******************************************************************* +//** P3N - 1/15/99 +//** THIS IS A POSTPROC FOR SCREEN 21350 - SELECTIVE SHIPPING +******************************************************************* +FUNCTION EDT_TMP_OST() +LOCAL SVREC := USERFILE2->(RECNO()) +LOCAL RETVAL := .T. +USERFILE2->(DBGOTOP()) +DO WHILE USERFILE2->(!EOF()) + IF USERFILE2->(FIELDPOS('SHIP_DATE') ) > 0 //** P3N - 01/15/02 + IF DUPOSTDATE(USERFILE2->SHIP_DATE, 'SHIP') + ERR_BOX('** Can NOT have the Same SHIP date on TWO shipment transactions! **') + RETVAL := .F. + EXIT + ENDIF + ELSEIF USERFILE2->(FIELDPOS('COMPL_DATE') ) > 0 //** P3N - 01/15/02 + IF DUPOSTDATE(USERFILE2->COMPL_DATE, 'COMPL') + ERR_BOX('** Can NOT have the Same COMPLETION date on TWO production Transactions! **') + RETVAL := .F. + EXIT + ENDIF + ENDIF //** P3N - 01/15/02 + USERFILE2->(DBSKIP(+1)) +ENDDO +USERFILE2->(DBGOTO(SVREC)) +RETURN RETVAL +******************************************************************* +//** P3N - 1/15/99 +//** THIS FUNCTION WILL ENSURE THERE ARE NO DUPLICATE ORD_SHIP TRANS. +******************************************************************* +FUNCTION DUPOSTDATE(CHKDATE, WHATDATE) +LOCAL SVREC := USERFILE2->(RECNO()) +LOCAL RETVAL := .F. , CNTR := 0 +USERFILE2->(DBGOTOP()) +DO WHILE USERFILE2->(!EOF()) + IF WHATDATE == 'SHIP' //** P3N - 01/15/02 + IF USERFILE2->SHIP_DATE == CHKDATE + CNTR := CNTR + 1 + ENDIF + ELSEIF WHATDATE == 'COMPL' //** P3N - 01/15/02 + IF USERFILE2->COMPL_DATE == CHKDATE + CNTR := CNTR + 1 + ENDIF + ENDIF + USERFILE2->(DBSKIP(+1)) +ENDDO +USERFILE2->(DBGOTO(SVREC)) +IF CNTR > 1 + RETVAL := .T. +ENDIF +RETURN RETVAL +***************************************************************** +* THIS FUNCTION IS INITIATED FROM THE IMPORT CUST VALID_FUNC FOR* +* THE FIELD PRNT_ID IN THE CGW0CS DATABASE. * +***************************************************************** +FUNCTION VALID_CS_PRNT_ID() //** P3N - 4/07/99 +LOCAL WKFLD := PRNT_ID, RETVAL := .F. +IF WKFLD$' YNS' + RETVAL := .T. +ELSEIF AT('?',WKFLD) > 0 + ERR_BOX(' Valid Print ID(PID) values:', ; + ' " " - Do NOT Print Extra(line) Description on Production', ; + ' "N" - Do NOT Print Extra(line) Description on Production', ; + ' "Y" - Print Extra(line) Description on Production Glass/Screen', ; + ' "S" - Print Column Format on Production Storm (ie: C200007)') +ELSE + ERR_BOX('** Invalid Print ID (PID) - "'+ WKFLD + '" **', ; + ' ','Valid Values Are: " ", "Y", "N" or "S" ', ; + ' ','Key a "?" for more information. ') +ENDIF +RETURN RETVAL + \ No newline at end of file diff --git a/CGWPRNT3.PRG b/CGWPRNT3.PRG new file mode 100644 index 0000000..1d4815d --- /dev/null +++ b/CGWPRNT3.PRG @@ -0,0 +1,428 @@ + +#include "FiveWin.ch" +#include "report.ch" + +#define MPAPDER_LETTER 1 // Letter 8 1/2 x 11 in +#define DMPAPER_LEGAL 5 // Legal 8 1/2 x 14 in + + +************************************************************************* + +FUNCTION CGW_PRNT_FROM_FILE( WHCHORDER, OUTFILE, LPREVIEW, RPTNAME, ; + LINELIMIT, COL_LEN, PAPER, ORIENTATION, MYFONT ) + +LOCAL CFILE := M->_THISUSER_TEMP +LOCAL MHDC +LOCAL OPRINTER1, OPRINTER2, OPRINTER3 +LOCAL CMODEL, CDOCUMENT, LUSER, LMODAL, LSELECTION +LOCAL MPRNTR +LOCAL OPRINTER, ODEVICE +LOCAL OREPORT +LOCAL RETVAL +LOCAL MDESC +LOCAL CKNAME, DATA2PRINT := '' +LOCAL FONTARR, OFONTWIDE, OFONT, OFONTBOLD, CTEXT +LOCAL FACT_W := 100, FACT_H := 100, SAVESEL := ALIAS() + + +DEFAULT LPREVIEW := .F. +// DEFAULT LINELIMIT := 54 +DEFAULT LINELIMIT := 64 +DEFAULT COL_LEN := 80 +DEFAULT MYFONT := 'NORMAL' +DEFAULT ORIENTATION := 'PORTRAIT' // 3/4/2021 + +NET_USE('&WORKSTAT',.F.,5,'WORKSTAT') +SELECT( SAVESEL ) + +MDESC := WHCHORDER + ' ' + +IF WHCHORDER = 'REPORT' + MDESC := ALLTRIM( RPTNAME ) +ELSEIF SELECT( 'ORD_MAST' ) > 0 + MDESC += 'Order ' + ALLTRIM( ORD_MAST->ORDER_NUM ) +ELSEIF SELECT( 'QUOTE_MAST' ) > 0 + MDESC += 'Quote ' + ALLTRIM( QUOTE_MAST->ORDER_NUM ) +ENDIF + +DO CASE + CASE WHCHORDER = 'REPORT' + CKNAME := GETPRINTER('ReportPrinter') + FACT_W := WORKSTAT->REPT_FACW + FACT_H := WORKSTAT->REPT_FACH + + PAPER := 'LETTER' // PER DARLENE 7-30-2020 + ORIENTATION := 'LANDSCAPE' // PER DARLENE 7-30-2020 + LINELIMIT := 36 // really no effect because the eject char is present. + // LINELIMIT := 40 + // LINELIMIT := 42 + + CASE WHCHORDER = 'PROD' + CKNAME := GETPRINTER('ProdPrinter') + FACT_W := WORKSTAT->PROD_FACW + FACT_H := WORKSTAT->PROD_FACH + + CASE WHCHORDER = 'GOLDEN' + CKNAME := GETPRINTER('GoldenPrinter') + FACT_W := WORKSTAT->GR_FACW + FACT_H := WORKSTAT->GR_FACH + + CASE WHCHORDER = 'DEL' + CKNAME := GETPRINTER('DelPrinter') + FACT_W := WORKSTAT->DEL_FACW + FACT_H := WORKSTAT->DEL_FACH + + CASE WHCHORDER = 'OD' + CKNAME := GETPRINTER('OrdDeskPrinter') + FACT_W := WORKSTAT->OD_FACW + FACT_H := WORKSTAT->OD_FACH + + CASE WHCHORDER = 'PO' + CKNAME := GETPRINTER('InterCompPrinter') + FACT_W := WORKSTAT->IC_FACW + FACT_H := WORKSTAT->IC_FACH + + CASE WHCHORDER = 'INV' + CKNAME := GETPRINTER('InvPrinter') + FACT_W := WORKSTAT->INV_FACW + FACT_H := WORKSTAT->INV_FACH + + CASE WHCHORDER = 'PREBILL' + CKNAME := GETPRINTER('PreBillPrinter') + FACT_W := WORKSTAT->PRE_FACW + FACT_H := WORKSTAT->PRE_FACH + + CASE WHCHORDER = 'BACKORD' + CKNAME := GETPRINTER('BackOrdPrinter') + FACT_W := WORKSTAT->BO_FACW + FACT_H := WORKSTAT->BO_FACH + + CASE WHCHORDER = 'PREBILL' + CKNAME := GETPRINTER('PreBillPrinter') + FACT_W := WORKSTAT->PRE_FACW + FACT_H := WORKSTAT->PRE_FACH + + CASE WHCHORDER = 'PRECOST' + CKNAME := GETPRINTER('PreCostPrinter') + FACT_W := WORKSTAT->PRE_FACW + FACT_H := WORKSTAT->PRE_FACH + + CASE WHCHORDER = 'QUOTE' + CKNAME := GETPRINTER('QuotePrinter') + FACT_W := WORKSTAT->QTE_FACW + FACT_H := WORKSTAT->QTE_FACH + +ENDCASE + +IF FACT_W = 0 + FACT_W := 100 +ENDIF + +IF FACT_H = 0 + FACT_H := 100 +ENDIF + + +// this is a redirected printer if it has a comma - leave it alone. 3-18-2021 +// CKNAME := SUBS( CKNAME, 1, AT( ',', CKNAME )-1 ) + + +IF FILE( CFILE ) + DATA2PRINT := ALLTRIM( MEMOREAD( CFILE ) ) + IF EMPTY( DATA2PRINT ) + // MSGSTOP( 'No Information to Print', 'Document NOT printed' ) + ELSE + + ODEVICE := TPRINTER():NEW( MDESC, .F., NIL, CKNAME ) + // DEFAULT IS LETTER + IF PAPER = 'LEGAL' + ODEVICE:SETPAGE( DMPAPER_LEGAL ) + ELSE + // INCLUDING PAPER = 'LETTER' + ODEVICE:SETPAGE( MPAPDER_LETTER ) + ENDIF + + // DEFAULT IS PORTRAIT + IF ORIENTATION = 'LANDSCAPE' + ODEVICE:setlandscape() + ELSE + ODEVICE:setportrait() + ENDIF + + FONTARR := CGW_SETFONT( @ODEVICE, WHCHORDER, @OREPORT, COL_LEN, NIL, FACT_W, FACT_H ) + OFONT := FONTARR[1] + OFONTBOLD := FONTARR[2] + OFONTWIDE := FONTARR[3] + + REPORT oReport ; + CAPTION MDESC ; + TO DEVICE ODEVICE ; + FONT oFont, OFONTBOLD, OFONTWIDE + + COLUMN DATA " " SIZE COL_LEN // * Trick "Data" - we're fooling Mother + + END REPORT + + OREPORT:LSCREEN := LPREVIEW + oreport:cname := MDESC + oReport:nTitleUpLine := RPT_NOLINE + oReport:nTitleDnLine := RPT_NOLINE + + // HALF INCH MARGINS + // oReport:Margin(.00, RPT_LEFT, RPT_INCHES) + // oReport:Margin(-.100, RPT_LEFT, RPT_INCHES) + + + CTEXT := MEMOREAD( ( ALLTRIM( OUTFILE ) ) ) + + + IF WHCHORDER = 'REPORT' + oReport:Margin( 0.500, RPT_LEFT, RPT_INCHES ) + oReport:Margin( 0.500, RPT_TOP, RPT_INCHES) + IF SUBS( CTEXT, 1, 2 ) = CR_LF() + CTEXT := SUBS( CTEXT, 2 ) + ENDIF + + ELSE + IF AT( CHR(27) + CHR(77), CTEXT ) > 0 // SET TO PICA - NOT NEEDED - THIS IS AN IMPACT PRINTER + oReport:Margin(-0.400, RPT_LEFT, RPT_INCHES) + ELSE + oReport:Margin(0.100, RPT_LEFT, RPT_INCHES) + ENDIF + // oReport:Margin(.56, RPT_TOP, RPT_INCHES) + oReport:Margin(.00, RPT_TOP, RPT_INCHES) + oReport:Margin(.00, RPT_BOTTOM, RPT_INCHES) + ENDIF + + + + + +// IF AT( CHR(27) + CHR(77), CTEXT ) > 0 // SET TO PICA - NOT NEEDED - THIS IS AN IMPACT PRINTER +// oReport:Margin(-0.400, RPT_LEFT, RPT_INCHES) +// ELSE +// oReport:Margin(0.100, RPT_LEFT, RPT_INCHES) +// ENDIF +// // oReport:Margin(.56, RPT_TOP, RPT_INCHES) +// oReport:Margin(.00, RPT_TOP, RPT_INCHES) +// oReport:Margin(.00, RPT_BOTTOM, RPT_INCHES) + + + + + + ACTIVATE REPORT oReport ; + ON INIT ( SayMemo(OREPORT, CTEXT, COL_LEN, LINELIMIT ), ; + OREPORT:LBREAK := .T. ) + + oFont:End() + OREPORT:END() + + ODEVICE:setportrait() + ODEVICE:SETPAGE( MPAPDER_LETTER ) + + ENDIF +ENDIF + +RETURN NIL + +******************************************************************************************** + +STATIC Function SayMemo(OREPORT, cText, COL_LEN, MAXLEN ) + +LOCAL cLine +LOCAL nFor, nLines, nPageln +LOCAL POS1, POS2, WIDE_DATA, CLINE1, CLINE2, CLINE_WORK + +IF LEN( OREPORT:ACOLS ) = 1 // 1ST TIME IN - SET COLUMN POSITIONS + AADD( OREPORT:ACOLS, 400 ) // 2 + AADD( OREPORT:ACOLS, 750 ) // 3 dup delivery - 4th one + AADD( OREPORT:ACOLS, 1200 ) // 4 + AADD( OREPORT:ACOLS, 1600 ) // 5 + AADD( OREPORT:ACOLS, 2000 ) // 6 + AADD( OREPORT:ACOLS, 2400 ) // 7 + AADD( OREPORT:ACOLS, 2800 ) // 8 + AADD( OREPORT:ACOLS, 3200 ) // 9 + AADD( OREPORT:ACOLS, 3600 ) // 10 + AADD( OREPORT:ACOLS, 4100 ) // 11 + AADD( OREPORT:ACOLS, 4400 ) // 12 + AADD( OREPORT:ACOLS, 4800 ) // 13 + AADD( OREPORT:ACOLS, 5200 ) // 14 + AADD( OREPORT:ACOLS, 5600 ) // 15 + +ENDIF + +// cText := MEMOREAD( ( cTextfile ) ) + +nLines := MlCount( cText, COL_LEN ) // Original text has up to 76 chars. per line. +nPageln := 0 + +FOR nFor := 1 TO nLines + cLine := MemoLine( cText, COL_LEN, nFor ) + + + IF AT( CHR(27) + CHR(77), CLINE ) > 0 // SET TO PICA - NOT NEEDED - THIS IS AN IMPACT PRINTER + CLINE := STRTRAN( CLINE, CHR(27) + CHR(77), '' ) + ENDIF + + + // this overrides the actual line-limit - calculated in the report building. + IF AT( CHR(12), CLINE ) > 0 // EJECT + + IF NFOR = NLINES ; // LAST LINE + .or. NFOR = NLINES-1 // LAST LINE + ELSE + CLINE := SUBS( CLINE, 1, AT( CHR(12), CLINE )-1 ) + OUTPUT_LINE( OREPORT, CLINE ) + nPageln := nPageln + 1 + OREPORT:EndPage() + NPAGELN := 0 + ENDIF + + ELSE + + OUTPUT_LINE( OREPORT, CLINE ) + + ENDIF + +NEXT + +RETURN NIL + +********************************************************* + +FUNCTION OUTPUT_LINE( OREPORT, CLINE ) +LOCAL POS1, CLINE1, CLINE2, POS2, WIDE_DATA, CLINE_WORK + + +oReport:StartLine() + +POS1 := AT( CHR(27) + 'W1', CLINE ) // WE FOUND AN ESCAPE SEQUENCE FOR WIDE PRINT +IF POS1 > 0 + + CLINE_WORK := CLINE + DO WHILE .T. + CLINE1 := SUBS( CLINE_WORK, 1, POS1-1 ) // EVERYTHING LEADING UP TO THE WIDE PRINT + CLINE2 := SUBS( CLINE_WORK, POS1+3 ) + POS2 := AT( CHR(27) + 'W0', CLINE2 ) + WIDE_DATA := ALLTRIM( SUBS( CLINE2, 1, POS2 - 1 ) ) + // CLINE2 := ALLTRIM( SUBS( CLINE2, POS2+3 ) ) + CLINE2 := SUBS( CLINE2, POS2+3 ) + + IF !EMPTY( CLINE1 ) + OREPORT:SAY( 1, CLINE1, 1 ) // 1ST COLUMN NORMAL FONT + ENDIF + + IF AT( 'DUPLICATE DEL', WIDE_DATA) > 0 + OREPORT:SAY( 5, WIDE_DATA, 3 ) + ELSEIF AT( 'DUPLICATE', WIDE_DATA) > 0 + OREPORT:SAY( 1, WIDE_DATA, 3 ) + ELSEIF VAL( WIDE_DATA ) > 0 // ORDER NUMBER + OREPORT:SAY( 3, WIDE_DATA, 3 ) + ELSE + MSGSTOP( 'WIDE VALUE NOT DEFINED' ) + OREPORT:SAY( 1, WIDE_DATA, 3 ) + ENDIF + + POS1 := AT( CHR(27) + 'W1', CLINE2 ) // WE FOUND AN ESCAPE SEQUENCE FOR WIDE PRINT + IF POS1 > 0 + CLINE_WORK := CLINE2 // REMAINDER OF DATA + ELSE + IF !EMPTY( CLINE2 ) + OREPORT:SAY( 11, CLINE2, 1 ) + ENDIF + EXIT + ENDIF + ENDDO + +ELSE + oReport:Say( 1, cLine, 1 ) // NORMAL font +ENDIF +oReport:EndLine() + + +RETURN NIL + + + + /* + OREPORT:SAY( 1, '111111', 1 ) + OREPORT:SAY( 2, '22222', 3 ) + OREPORT:SAY( 3, '33333' , 1 ) + OREPORT:SAY( 4, '44444' , 3 ) + OREPORT:SAY( 5, '55555' , 1 ) // DUPLICATE DEL + OREPORT:SAY( 6, '66666' , 3 ) + OREPORT:SAY( 7, '77777', 3 ) + OREPORT:SAY( 8, '88888' , 1 ) + OREPORT:SAY( 9, '99999' , 3 ) + OREPORT:SAY( 10, 'aaaaa' , 1 ) + OREPORT:SAY( 11, 'BBBBB' , 3 ) // + 20% = ORDER NUMBER AND Page 1 of 1 + OREPORT:SAY( 12, 'CCCCC' , 1 ) + OREPORT:SAY( 13, 'DDDDD' , 3 ) + OREPORT:SAY( 14, 'EEEEE' , 1 ) + OREPORT:SAY( 15, 'FFFFF' , 3 ) + */ + + +*********************************************************************** + +FUNCTION CGW_SETFONT( ODEVICE, WHCHORDER, OREPORT, COL_LEN, PASS_MYFONT, FACT_W, FACT_H ) + +LOCAL MYFONT, OFONT, OFONTB, OFONTW // REGULAR, BOLD, WIDE +LOCAL FORCEBOLD := .F., MALTFONT + +//MYFONT := 'Courier New' //** don - 01/11/02 - reactivated 4/21/2021 + MYFONT := 'Lucida Sans Typewriter' + +// 3-31-2021 +FACT_W := FACT_W / 100 +FACT_H := FACT_H / 100 + + +DEFINE FONT oFont NAME MYFONT +DEFINE FONT oFontB NAME MYFONT BOLD +DEFINE FONT oFontW NAME MYFONT BOLD + + +// adjust the bold font height/width slightly. +IF WHCHORDER = 'REPORT' + // myfont is hard coded above depending on the data's width + OFONT:NCLIPPRECISION := 2 + OFONT:NPITCHFAMILY := 49 + + OFONT:NWIDTH := 4.00 + OFONT:NHEIGHT:= 12 + + +ELSEIF MYFONT = 'Courier New' + // tiny bit too wide + oFont:nWIDTH := 6.90 + oFont:nHEIGHT:= 14.00 + + // OK TALL / TOO WIDE + oFontW:nWIDTH := 15.00 + oFontW:nHEIGHT:= 18.00 + +ELSE + // this is the default - MyFont is 'Lucida Sans Typewriter' + // OK TALL / TOO WIDE + oFont:nWIDTH := 7.25 + oFont:nHEIGHT:= 12.00 + +// test logic begin + // oFont:nWIDTH := 17.25 + // oFont:nHEIGHT:= 22.00 +// test logic end + + +ENDIF + +// 03/31/2021 +OFONT:NWIDTH *= FACT_W +OFONT:NHEIGHT *= FACT_H + + +RETURN { OFONT, OFONTB, OFONTW } + + +*********************************************** \ No newline at end of file diff --git a/CGWPRPO.PRG b/CGWPRPO.PRG new file mode 100644 index 0000000..9543d1b --- /dev/null +++ b/CGWPRPO.PRG @@ -0,0 +1,8149 @@ +// don lowenstein - June 1993 -(preproc) for acd on screen 2100 +// all unique procs for the CGW SYSTEM + +//** #INCLUDE 'CGWINCLD.PRG' +// #INCLUDE 'FIVEWIN.CH' + +#INCLUDE 'INKEY.CH' +#INCLUDE 'BOX.CH' + + +****************************************************************** + +FUNCTION ACD_ATTRIB_CUT() + +LOCAL SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN() +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') + +IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + ACD_PAR_CHILD(1, 'Cutting Attribute Definitions', {NIL, 'ATTRIB_CUT', .F. ,,'ADD',,,,,,.F., 'USERFILET'}) +ELSE + ACD_PAR_CHILD(3, 'Cutting Attribute Definitions', {NIL, 'ATTRIB_CUT', .F. ,,'REV',,,,,,.F., 'USERFILET'}) +ENDIF + +SELECT (SAVESEL) +RESTSCREEN(,,,,SAVESCR) +RETURN .T. + +****************************************************************** +FUNCTION CUT_SPEC_DISP(ACTION) +// DISPLAYS GB_EXTRA FOR SEQ_NUM IN CUT SPEC FILE + +LOCAL RETVAL := '' + +IF !EMPTY(ATT_CODE) + IF ACTION = 'PROFILE' + RETVAL := DISPVALUE(ATT_CODE,"ATTRIB_CUT",{"PROFILE"}) + ELSE + RETVAL := DISPVALUE(ATT_CODE,"ATTRIB_CUT",{"PRINT_DESC"}) +** RETVAL := RETVAL + ' ' + DISPVALUE(ATT_CODE,"ATTRIB_CUT",{"DESC"}) + RETVAL := DISPVALUE(ATT_CODE,"ATTRIB_CUT",{"DESC"}) + ENDIF +ENDIF + +RETURN RETVAL + + +****************************************************************** + +FUNCTION SIZE_ERR( ) +ERR_BOX( ' Entry Sizes MUST Be HHHWWW ', ; + ' For NOMINAL SIZES or 99 X 99 ',; + " or 99G Basement or 9'9 Width Only",; + ' PLEASE RE-ENTER ') +RETURN .T. + +****************************************************************** +FUNCTION BLANK_1ST( ALLOW, FIELD, ALTPRICE ) +// CHECK TO SEE IF BLANK RECORD IS OK IF F10 ON EMPTY 1ST RECORD +LOCAL ALLOW_ENTER := .F. //** P3N - 6/30/98 +IF EMPTY(ALTPRICE) //** P3N - 6/30/98 + ALLOW_ENTER := .F. //** P3N - 6/30/98 +ELSEIF ALTPRICE == 'ALT_SPRICE' //** P3N - 6/30/98 + ALLOW_ENTER := .T. //** P3N - 6/30/98 +ENDIF //** P3N - 6/30/98 +IF ALLOW_ENTER //** ALLOW ENTER ON ALT_SPRICE EDIT - P3N - 6/30/98 + IF ALLOW .AND. EMPTY(&FIELD) .AND. RECNO() = 1 + REPLACE ORDER_NUM WITH ' ' + ENDIF + RETURN .T. +ELSE + IF LASTKEY() <> K_F10 + RETURN .F. + ELSE + IF ALLOW .AND. EMPTY(&FIELD) .AND. RECNO() = 1 + REPLACE ORDER_NUM WITH ' ' + RETURN .T. + ELSE + RETURN .F. + ENDIF + ENDIF +ENDIF + +****************************************************************** +FUNCTION DISPCOLOR(ADDL_MODE, REALFILE) +// DISPLAY THE COLOR OF PRODUCT ON THE LINE ITEM SCREEN FOR EACH MODEL + +LOCAL RETVAL, SEEKKEY +LOCAL SAVESEL := SELECT() + +IF REALFILE = NIL + REALFILE := 'USERFILE8' // USER ORDER_OPTS / ADDL_OPTS , NOT USERFILE8 +ENDIF + + +IF ADDL_MODE = NIL + ADDL_MODE := .F. +ENDIF + +IF ADDL_MODE + SEEKKEY := &CUR_MAST->ORDER_NUM + PROD_CODE + STR(USERFILE2->LINE_NUM,3) + 'FR COLOR' +ELSE + SEEKKEY := &CUR_MAST->ORDER_NUM + STR(USERFILE2->LINE_NUM,3) + 'FR COLOR' +ENDIF + +SELECT (REALFILE) +SEEK SEEKKEY +IF FOUND() + RETVAL := TRIM( (REALFILE)->USER_RESP) +ELSE + RETVAL := 'N/A' +ENDIF +SELECT (SAVESEL) + +RETURN RETVAL + +****************************************************************** +FUNCTION NEED_CALC(ACTIONCODE, FLD_NAME, UP_RECNO) +LOCAL SAVESEL := SELECT(), ADDL_MODE, SEEKKEY +STATIC LASTVAL := NIL + +IF UP_RECNO = NIL + UP_RECNO := .F. +ENDIF + +ADDL_MODE := UP_RECNO + +IF UP_RECNO + REPLACE LINE_NUM WITH RECNO() +ENDIF + +IF PROCNAME(1) = 'EDITGBROW' // F10 KEY PRESSED + RETURN .T. +ENDIF + +IF ACTIONCODE = 'W' // A BU_WHEN CONDITION + LASTVAL := USERFILE2->&FLD_NAME +ELSE + IF ACTIONCODE = 'V' // VALID_FUNC + IF !EMPTY(LASTVAL) // CAN'T CHANGE CERTAIN ITEMS + IF LASTVAL == USERFILE2->&FLD_NAME + // LEAVE THE NEEDCALC FLAG ALONE! + ELSE // DIFFERENT VALUES + SELECT USERFILE8 + IF ADDL_MODE + SEEKKEY := &CUR_MAST->ORDER_NUM + USERFILE2->PROD_CODE + STR(USERFILE2->LINE_NUM,3) + ELSE + SEEKKEY := &CUR_MAST->ORDER_NUM + STR(USERFILE2->LINE_NUM,3) + ENDIF + SEEK SEEKKEY + IF FOUND() + SELECT (SAVESEL) + DO CASE + // IF SPECIAL PROTECTED FIELD, REVERT TO OLD VALUE - LEAVE CALC FLAG ALONE + CASE FLD_NAME == 'PROD_CODE' // CAN'T CHANGE MODEL NUMBER + REPLACE USERFILE2->PROD_CODE WITH LASTVAL + ERR_BOX( ' You Can NOT Change the MODEL ', ; + ' You may DELETE incorrect Line Items ', ; + ' Model Changed to Original Value ') + CASE FLD_NAME == 'STD_OPTS' // CAN'T CHANGE STD OPTS + REPLACE USERFILE2->STD_OPTS WITH LASTVAL + ERR_BOX( ' You Can NOT Change the STANDARD OPTIONS FLAG ', ; + ' You may DELETE incorrect Line Items ', ; + ' SO Changed to Original Value ') + OTHERWISE // DIFFERENT VALUE/NON PROTECTED/SET NEEDCALC + REPLACE USERFILE2->NEED_CALC WITH 'Y' + ENDCASE + ELSE /// NO USERFILE8 OPTS FOUND + SELECT (SAVESEL) + REPLACE USERFILE2->NEED_CALC WITH 'Y' + ENDIF + ENDIF + ELSE // WAS EMPTY LASTVAL - NEED A CALC + REPLACE USERFILE2->NEED_CALC WITH 'Y' + ENDIF + LASTVAL := NIL + REPLACE USERFILE2->GL311_AMT WITH ; + ( SET_GL311(USERFILE2->PROD_CODE) * USERFILE2->QUANTITY ) + ENDIF +ENDIF +RETURN .T. + +****************************************************************** +FUNCTION SET_TCALC() +LOCAL SAVESEL := SELECT(), SEEKKEY := &CUR_MAST->ORDER_NUM +LOCAL SAVEORD, TAGNAME + +IF &CUR_MAST->NEED_CALC$'Y' .AND. SELECT('USERFILE2') > 0 + SELECT USERFILE2 + IF FIELDPOS('NEED_CALC') > 0 + REPLACE ALL NEED_CALC WITH 'Y' + ENDIF +ENDIF +IF SELECT('USERFILE8') > 0 //** P3N - 5/18/98 + SELECT USERFILE8 + ZAP +ELSE + SELECT (CUR_OO) //** P3N - 5/18/98 + COPY STRUCTURE TO &USERFILE8 + NET_USE( USERFILE8, .T., 3, 'USERFILE8' ) +ENDIF +//*SELECT ORDER_OPTS +SELECT (CUR_OO) +SAVEORD := INDEXORD() +DONSETORD(1) +NDX_EXP = INDEXKEY() +SELECT USERFILE8 +**INDEX ON &NDX_EXP TO &USERFILE8 +IF __DBDRIVER = 'CDX' + TAGNAME := 'T1' + INDEX ON &NDX_EXP TAG &TAGNAME TO &USERFILE8 +ELSE + INDEX ON &NDX_EXP TO &USERFILE8 +ENDIF + + +//*SELECT ORDER_OPTS +SELECT (CUR_OO) +DONSETORD(SAVEORD) + +SELECT (SAVESEL) +RETURN .T. + +****************************************************************** +FUNCTION NEED_TCALC() +LOCAL SAVESEL := SELECT() +LOCAL LOOKARR, ELEM, I +LOCAL DBFVAR, G_ACT_LIST, GA_DBFVAR + +G_ACT_LIST := GETACTIVE() +IF EMPTY(G_ACT_LIST) .OR. EMPTY(GETLIST) + RETURN .T. +ENDIF + +I := G_ACT_LIST[2,1] +GA_DBFVAR := GETVARS[I,3] +DBFVAR := &GA_DBFVAR +MEMVAR := GETVARS[I,4] + +IF EMPTY(&CUR_MAST->NEED_CALC) + RETURN .T. +ENDIF + +IF DBFVAR == MEMVAR +ELSE + REC_LOCK(3) + REPLACE &CUR_MAST->NEED_CALC WITH 'Y' + UNLOCK +ENDIF +RETURN .T. + +****************************************************************** + +FUNCTION CGWACD(OPTION, TITLE, WHICHFILE) + + +// OPEN CUST_MAST FILE FOR CUSTOMER SPECIFIC OPTIONS +DBOPEN('CUST_MAST', .F.) //** P3N - 3/2/99 +// OPEN MATHPACK FILE FOR 'C' FIELDS +DBOPEN('MATHPACK', .F.) +DO CASE + CASE WHICHFILE = 'PRODUCTS' + ACD_PAR_CHILD(OPTION, TITLE, {'PRODUCT', 'PROD_ATTS', .T., 3, 'ADD' }) + + CASE WHICHFILE = 'CATEGORY' + ACD_PAR_CHILD(OPTION, TITLE, {'CATEGORY', 'CAT_ATTS', .T., 3, 'ADD' }) + +ENDCASE + +RETURN + +****************************************************************** + +FUNCTION CGWPRINT(OPTION, TITLE, WHICHFILE) +LOCAL GET_PARMS, PRNT_KEY, CORR_MSG, CORR +PRIVATE PAGE_BREAK + +CLS + +DO CASE + CASE WHICHFILE = 'MODEL OPTIONS' + SAYTITLE('Select Model to PRINT', 'PRDI' ) + DBOPEN('ATTRIBUTES') + GET_PARMS := DBOPEN('PRODUCT') + PRNT_KEY = GET_KEY(GET_PARMS, .T.) + IF LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + PRNTDISP(OPTION, TITLE, "MODEL OPTIONS") + + CASE WHICHFILE = 'CATEGORY OPTIONS' + SAYTITLE('Select CATEGORY to PRINT', 'PRDI' ) + DBOPEN('ATTRIBUTES') + GET_PARMS := DBOPEN('CATEGORY') + PRNT_KEY = GET_KEY(GET_PARMS, .T.) + IF LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + PRNTDISP(OPTION, TITLE, "CATEGORY OPTIONS") + + CASE WHICHFILE = 'MODEL BASE PRICE' + SAYTITLE('Select Model to PRINT', 'PRDI' ) + DBOPEN('CATEGORY') + GET_PARMS := DBOPEN('PRODUCT') + PRNT_KEY = GET_KEY(GET_PARMS, .T.) + IF LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + PRNTDISP(OPTION, TITLE, WHICHFILE) + + CASE WHICHFILE = 'CATEGORY BASE PRICE' + SAYTITLE('Select CATEGORY to PRINT', 'PRDI' ) + DBOPEN('PRODUCT') + GET_PARMS := DBOPEN('CATEGORY') + PRNT_KEY = GET_KEY(GET_PARMS, .T.) + IF LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + SELECT PRODUCT + DONSETORD(3) + SEEK CATEGORY->CAT_CODE + DONSETORD(1) + CORR_MSG := 'PAGE BREAK BETWEEN PRODUCTS? ' + PAGE_BREAK := CORRCHEK( 10, CORR_MSG, , 2 ) +*- READ() + IF LASTKEY() = 27 .OR. PAGE_BREAK$'X' + CLOSE DATABASES + RETURN + ENDIF + PRNTDISP(OPTION, TITLE, WHICHFILE) + +ENDCASE + +RETURN + +****************************************************************** +FUNCTION SIZE_CONVERT( MPROD_CODE, IN_HM, OUT_HM, IN_WIDTH, IN_HEIGHT ) +LOCAL SAVESEL := SELECT(), RETVAL +LOCAL WORKVAR1, WORKVAR2 + +IF PRODUCT->(DBSEEK(MPROD_CODE)) + + DO CASE + CASE IN_HM = 'OS' + IF OUT_HM = 'TT' + WORKVAR1 := IN_WIDTH + PRODUCT->OS_WIDTH + PRODUCT->SAW_WIDTH + WORKVAR2 := IN_HEIGHT + PRODUCT->OS_HEIGHT + PRODUCT->SAW_HEIGHT + RETVAL := {WORKVAR1, WORKVAR2} + ELSEIF OUT_HM = 'NS' + WAIT_BOX('** NOT ACTIVE FOR "FROM" TT "TO" NS CONVERSIONS YET') + ENDIF + + CASE IN_HM = 'TT' + WAIT_BOX('** NOT ACTIVE FOR "FROM" TT CONVERSIONS YET') + IF OUT_HM = 'OS' + ELSEIF OUT_HM = 'NS' + ENDIF + + CASE IN_HM = 'NS' + WAIT_BOX('** NOT ACTIVE FOR "FROM" OS CONVERSIONS YET') + IF OUT_HM = 'TT' + ELSEIF OUT_HM = 'OS' + ENDIF + + ENDCASE +ENDIF +RETURN RETVAL + +* * * * * * * * * * +FUNCTION CGW11PRE(WHICHFILE) +// GET KEY --- PRODUCT ATTRIBUTE, FOR UPDATING OPTIONS + +LOCAL RETVAL +IF WHICHFILE = 'CATEGORY' + RETVAL := { USERFILE2->CAT_CODE, USERFILE2->ATT_CODE } +ELSE + IF WHICHFILE = 'PRODUCT' + RETVAL := { USERFILE2->PROD_CODE, USERFILE2->ATT_CODE } + ELSE + IF WHICHFILE = 'CUST' + RETVAL := { USERFILE3->CUST_ID, USERFILE3->PROD_CODE, USERFILE3->ATT_CODE } + ENDIF + ENDIF +ENDIF +RETURN RETVAL + +********************************************************** +FUNCTION CONT_PROC(M1, M2, M3) + +/// the system is pointing to the product parent record! +LOCAL SEEKKEY := PRODUCT->PROD_CODE +IF ( PROD_ATTS->(DBSEEK( SEEKKEY ) ) ) +ELSE + IF !PROMPT_BOX(M1,M2,M3) + CLEAR TYPEAHEAD + KEYBOARD CHR(27) + INKEY() + ENDIF +ENDIF +RETURN NIL + +****************************************************** +FUNCTION MAKE_MATH(FILENUM) +LOCAL USERFILE := 'USERFILE' + FILENUM +LOCAL SAVESEL := SELECT() +DBOPEN('PROD_OPTS') +DBOPEN('CAT_OPTS') +DBOPEN('MATHPACK') +IF SELECT('USERFILE5') > 0 + SELECT USERFILE5 + USE +ENDIF +SELECT MATHPACK +**COPY STRUCT TO &USERFILE5 +COPYSTRUCT(USERFILE5, .T.) +NET_USE('&USERFILE5', .T., 3, 'USERFILE5') +IF SAVESEL > 0 + SELECT (SAVESEL) +ENDIF +RETURN .T. + +*************************************************************** +FUNCTION WHCHPRICE(NCHOICE) +STATIC M_ARR + +@2,0 CLEAR TO 20,80 + +IF M_ARR = NIL + M_ARR := BLD_M_ARR() +ENDIF + +NCHOICE = LISTBOX(M_ARR, NCHOICE, 'Price Sheet') + +RETURN NCHOICE + + +************************************************** +FUNCTION BLD_M_ARR() +LOCAL M_ARR := {} +AADD(M_ARR, 'Dealer Price') +AADD(M_ARR, 'Special Dealer Price') +AADD(M_ARR, 'Builder/Build Stock Price') +AADD(M_ARR, 'Lumbermen Price') +AADD(M_ARR, 'Distributor Price') +AADD(M_ARR, 'Intercompany Price') +RETURN M_ARR + + +*************************************************************** +PROCEDURE CUSTP_TABLE( ) +LOCAL SAVESEL := SELECT(), SAVESCR := SAVESCREEN() +LOCAL CUSTID := USERFILE2->CUST_ID +LOCAL MPROD := USERFILE2->PROD_CODE +LOCAL MTITLE := 'Select CUSTOMER to Copy Pricing for Customer ' + ALLTRIM(CUSTID) + '/'+ALLTRIM(MPROD) +LOCAL FILE_CP := 'U'+ ALLTRIM(USERFILE2->PROD_CODE) //** P3N - 2/25/99 +LOCAL FILE_CP_SFX := '', PRICEFL := '', ORIGPRFL := '' //** P3N - 2/25/99 +LOCAL M1 := 'Customer pricing does not exist for this customer.' +LOCAL M2 := ' ' +LOCAL M3 := 'Do you want to copy pricing from an existing customer?' +LOCAL CPRICENUM := CUST_MAST->CPRICE_NUM + +IF USERFILE2->BASEFAC <> 0 + ERR_BOX('*** Price for this Product ' + MPROD + ' Customer # ' + CUSTID , ; + '*** Is Set Up as ' + STR(USERFILE2->BASEFAC,8,4) + '% of DEALER PRICE' ,; + '*** NO PRICE TABLE AVAILABLE ') + RETURN +ENDIF + +IF !CK_SPEC_PRICE( CUSTID, MPROD, CURDATE, 'USERFILE2' ) + ERR_BOX('*** NO SPECIAL Pricing Attributes FOUND', ; + '*** or SPECIAL Pricing Is EXPIRED', ; + '*** FOR This CUSTOMER - Set ATTS/OPTS 1st') + RETURN +ENDIF + +WAIT_BOX('*** Retrieving CUSTOMER PRICE TABLE ***', ; + '*** Please Wait ***') + +IF EMPTY(CPRICENUM) + DBOPEN('CONTROL') + IF CPRICE_NUM = 999 + ERR_BOX('*** 999 Customer Price Tables Defined', ; + '*** No More May Be Added - Call Don') + USE + SELECT(SAVESEL) + RETURN + ELSE + REC_LOCK(1) + REPLACE CPRICE_NUM WITH CPRICE_NUM + 1 + SELECT CUST_MAST + REC_LOCK(1) + REPLACE CUST_MAST->CPRICE_NUM WITH CONTROL->CPRICE_NUM + UNLOCK + CPRICENUM := CUST_MAST->CPRICE_NUM + SELECT CONTROL + USE + ENDIF + SELECT (SAVESEL) +ENDIF +FILE_CP_SFX := STR(CPRICENUM,3) //** P3N - 2/25/99 +FILE_CP_SFX := STRTRAN(FILE_CP_SFX, ' ', '0') //** P3N - 2/25/99 +PRICEFL := FILE_CP +'.'+FILE_CP_SFX //** P3N - 2/25/99 +IF FILE(PRICEFL) //** P3N - 2/26/99 +ELSEIF PROMPT_BOX(M1, M2, M3) //** P3N - 2/26/99 + @ 00, 00 CLEAR TO 24, 80 //** P3N - 2/26/99 + SAYTITLE( MTITLE, 'CUSTPR') //** P3N - 2/26/99 + GET_THE_CUST(' ') //** P3N - 2/26/99 + FILE_CP_SFX := STR(CUST_MAST->CPRICE_NUM,3) //** P3N - 2/26/99 + FILE_CP_SFX := STRTRAN(FILE_CP_SFX, ' ', '0') //** P3N - 2/26/99 + ORIGPRFL := FILE_CP +'.'+FILE_CP_SFX //** P3N - 2/25/99 + IF FILE(ORIGPRFL) //** P3N - 2/26/99 + COPY FILE (ORIGPRFL) TO (PRICEFL) //** P3N - 2/26/99 + ENDIF //** P3N - 2/26/99 +ENDIF //** P3N - 2/26/99 +CUST_MAST->(DBSEEK(CUSTID)) //** P3N - 2/26/99 + +CGWPRICE( NIL, 'CUSTOMER PRICING - ' + CUSTID + '/' + ALLTRIM(MPROD), ; + 99, CUSTID, MPROD, PADL(ALLTRIM(STR(CPRICENUM,3)),3,'0') ) + +SELECT (SAVESEL) +RESTSCREEN(,,,,SAVESCR) + +RETURN .T. + +*************************************************************** +PROCEDURE CGWPRICE(OPTION, TITLE, PNCHOICE, PPR_CUSTID, PPRODCODE, P_CPRICENUM ) + +LOCAL MODELPARMS := DBOPEN("PRODUCT"), CORRECT, SAVESCR2 +LOCAL MPROD_CODE, L, L2, POINTER, OFFSET, I , II, NUMVARS +LOCAL CURVAL, VARYPOS, FLD_ARR, PREFIX +LOCAL C_ARR := {}, R_ARR := {}, NEWFILE, NCHOICE +LOCAL COL_ARR := {}, ROW_ARR := {}, FILE1, FILE2 +LOCAL SEEKKEY, MFILE, DESC_ARR := {}, CHK_BLOCK, DBNAME +LOCAL CNTR, COUNT_ARR := {}, NUM_2_DO, MCODE +LOCAL NTOP, NLEFT, NRIGHT, NBOTTOM, TBARR := {} +LOCAL NUM_DONE, SAVESCR, LOOPKEY, MPRICE_SHEET +LOCAL REAL_FILE, OLDDESC_ARR := {}, MSG +LOCAL OLDDBF_ARR, NEWDBF_ARR, DIFFERENT, OLD_MFILE := '' +LOCAL MPERCENT, MCHOICE, OLD_PRICE_CD := '', CORR +LOCAL SV_SEL, SV_ORD, DLR_FILE, SV_REAL_FILE +LOCAL DESC_SIZE := 50, ELEM +LOCAL P1, P2, P3, P4, COPYTO +LOCAL PR_CUSTID := PPR_CUSTID +LOCAL CPRICENUM := P_CPRICENUM + +STATIC FILESOPEN, M_ARR, ALL_PR_ARR := {} + +IF PR_CUSTID = NIL + PR_CUSTID := SPACE(8) +ENDIF +//** P3N - 01/02/02 HAPPY NEW YEAR - LINDA +//**IF FILESOPEN = NIL .OR. SELECT('CAT_OPTS') = 0 + DBOPEN('ATTRIBUTES') + DBOPEN('ATT_OPTS') + + DBOPEN('CUST_ATTS') + DONSETORD(2) // CUSTID + PROD_CODE + ORDER + DBOPEN('CUST_OPTS') + DBOPEN('PROD_ATTS') + DONSETORD(2) // PROD_CODE + ORDER + DBOPEN('PROD_OPTS') + DBOPEN('CAT_ATTS') + DONSETORD(2) // CAT_CODE + ORDER + DBOPEN('CAT_OPTS') + FILESOPEN = .T. +//**ENDIF + +IF EMPTY(M_ARR) + M_ARR := BLD_M_ARR() +ENDIF + +SAVESCR = SAVESCREEN() +DO WHILE .T. + IF PNCHOICE = NIL .OR. PNCHOICE = 99 // MENU OPTION FOR UPDATE PRICE TABLES - PRODUCT OR CUSTOMER + CLS + SAYTITLE(TITLE,'PRPO') + IF PNCHOICE = NIL + MPROD_CODE := {GET_KEY( GET_FILEPARM("PRODUCT") )} + IF LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + ELSE + MPROD_CODE := {PPRODCODE} + ENDIF + ELSE + RESTSCREEN(,,,,SAVESCR) + ENDIF + DO WHILE .T. + IF PNCHOICE = NIL + NCHOICE := WHCHPRICE(1) + IF LASTKEY() = 27 + EXIT + ENDIF + ELSE + NCHOICE := PNCHOICE + ENDIF + + IF NCHOICE = 99 + MPRICE_SHEET = 'U' // USER SPECIFIC CUSTOMER PRICING + ELSE + MPRICE_SHEET = LEFT(M_ARR[NCHOICE],1) + ENDIF + + IF NCHOICE = 5 // IF IT'S DISTRIBUTOR + MPRICE_SHEET = 'J' // USE 'J' FOR THE CODE! (JOBBER) + ENDIF + + IF PNCHOICE <> NIL .AND. PNCHOICE <> 99 //PRINT THE BASE PRICE RPT + MFILE := PRODUCT->PROD_CODE + REAL_FILE := STRTRAN(ALLTRIM(MFILE), ' ', '_') + REAL_FILE := STRTRAN(REAL_FILE, '-', '_') + SV_REAL_FILE := REAL_FILE + REAL_FILE := MPRICE_SHEET + REAL_FILE + DLR_FILE := 'D' + SV_REAL_FILE + RETURN {REAL_FILE, DLR_FILE, MPRICE_SHEET} + ELSE // CALLED FROM A MENU / UPDATE SCREEN + IF PNCHOICE = NIL // REGULAR PRICING BUILD TABLE FROMMENU + MSG = M_ARR[NCHOICE] + ELSE + MSG = '' // CUSTOMER SPECIFIC PRICING + ENDIF + MFILE = MPROD_CODE[1] + MCODE = MFILE + REAL_FILE = STRTRAN(ALLTRIM(MFILE), ' ', '_') + REAL_FILE = STRTRAN(REAL_FILE, '-', '_') + REAL_FILE = MPRICE_SHEET + REAL_FILE + PREFIX := REAL_FILE + IF PNCHOICE = NIL + REAL_FILE = REAL_FILE + '.DBF' + ELSE + REAL_FILE = REAL_FILE + '.' + CPRICENUM + ENDIF + ENDIF + + // SEE IF IT'S THE SAME ONE TO DO, IF NOT BUILD THE STUFF FROM SCRATCH + ELEM := ASCAN(ALL_PR_ARR, {|X| X[1] == REAL_FILE .AND. X[5] == PR_CUSTID} ) + IF ELEM > 0 + FLD_ARR := ALL_PR_ARR[ELEM,2] + MFILE := ALL_PR_ARR[ELEM,3] + DESC_ARR := ALL_PR_ARR[ELEM,4] + ELSE + + SEEKKEY = MCODE // SEEK SO THE PERCENT OF DEALER STUFF IS ALWAYS VISIBLE + + IF !EMPTY(PR_CUSTID) + SELECT CUST_ATTS + FILE1 = 'CUST_ATTS' + FILE2 = 'CUST_OPTS' + DBNAME = 'CUST_ID + PROD_CODE' + SEEKKEY := PR_CUSTID + MCODE + CUST_ATTS->(DBSEEK(SEEKKEY)) + IF CUST_ATTS->(FOUND()) + ELSE +**********ERR_BOX('*** Customer Price table NOT FOUND! Pricing table/attributes', ; +********** '*** will be copied from the MODEL. You MUST save (F10) these', ; +********** '*** table/attributes to ensure accurate Price table creation!') + ENDIF + ENDIF + IF EMPTY(PR_CUSTID) .OR. !FOUND() + SEEKKEY = MCODE + SELECT PROD_ATTS + FILE1 = 'PROD_ATTS' + FILE2 = 'PROD_OPTS' + DBNAME = 'PROD_CODE' + SEEK SEEKKEY + IF !FOUND() + SELECT CAT_ATTS + SEEK SEEKKEY + FILE1 = 'CAT_ATTS' + FILE2 = 'CAT_OPTS' + DBNAME = 'CAT_CODE' + ENDIF + ENDIF + * SEEKKEY = MCODE + * + * SELECT PROD_ATTS + * FILE1 = 'PROD_ATTS' + * FILE2 = 'PROD_OPTS' + * DBNAME = 'PROD_CODE' + * SEEK SEEKKEY + * IF !FOUND() + ** SELECT PRODUCT + ** SEEK SEEKKEY + ** MCODE = CAT_CODE + ** SEEKKEY = MCODE + * + * SELECT CAT_ATTS + * SEEK SEEKKEY + * /// IF STILL NOT FOUND, DO MESSAGE THEN RETURN! + * FILE1 = 'CAT_ATTS' + * FILE2 = 'CAT_OPTS' + * DBNAME = 'CAT_CODE' + * ENDIF + // SITTING ON FILE1, EITHER PRODUCTS OR CATEGORY FILE OR CUST_ATTS FILE + // SHOULD HAVE FOUND AN APPROPRIATE RECORD + C_ARR := {} + R_ARR := {} + DO WHILE SEEKKEY == &DBNAME .AND. !EOF() + IF !EMPTY(PR_CUSTID) + IF LINK_CODE$'C' + AADD(C_ARR, ATT_CODE) + ELSE + IF LINK_CODE$'R' + AADD(R_ARR, ATT_CODE) + ENDIF + ENDIF + ELSE + + DO CASE + CASE NCHOICE = 1 + IF LINK_CODE = 'C' + AADD(C_ARR, ATT_CODE) + ELSE + IF LINK_CODE = 'R' + AADD(R_ARR, ATT_CODE) + ENDIF + ENDIF + + CASE NCHOICE = 2 + IF LINK_SD = 'C' + AADD(C_ARR, ATT_CODE) + ELSE + IF LINK_SD = 'R' + AADD(R_ARR, ATT_CODE) + ENDIF + ENDIF + + CASE NCHOICE = 3 + IF LINK_BU = 'C' + AADD(C_ARR, ATT_CODE) + ELSE + IF LINK_BU = 'R' + AADD(R_ARR, ATT_CODE) + ENDIF + ENDIF + + CASE NCHOICE = 4 + IF LINK_LU = 'C' + AADD(C_ARR, ATT_CODE) + ELSE + IF LINK_LU = 'R' + AADD(R_ARR, ATT_CODE) + ENDIF + ENDIF + + CASE NCHOICE = 5 + IF LINK_DI = 'C' + AADD(C_ARR, ATT_CODE) + ELSE + IF LINK_DI = 'R' + AADD(R_ARR, ATT_CODE) + ENDIF + ENDIF + + CASE NCHOICE = 6 + IF LINK_IN = 'C' + AADD(C_ARR, ATT_CODE) + ELSE + IF LINK_IN = 'R' + AADD(R_ARR, ATT_CODE) + ENDIF + ENDIF + + END CASE + ENDIF + + SKIP 1 + ENDDO + + // IF EMPTY C_ARR OR R_ARR, DO MESSAGE THEN RETURN + LOOPKEY = .F. + IF EMPTY(C_ARR) .OR. EMPTY(R_ARR) + IF MPRICE_SHEET$'D' + ERR_BOX( ' CANNOT find all ROW or COLUMN Information ', ; + ' for the ' + TRIM(MFILE) + ' Model! ', ; + ' Please Set them up in MODEL DEFINITIONS') + LOOPKEY = .T. + LOOP + ELSE + IF NCHOICE = 99 // CUSTOMER PRICING + MPERCENT = USERFILE2->BASEFAC + IF MPERCENT = 0 + ERR_BOX( ' CANNOT find all ROW or COLUMN Information ', ; + ' for Model ' + TRIM(MFILE) + ' Customer ' + PR_CUSTID, ; + ' and the % of DEALER was 0.00 ', ; + ' Please Set them up in CUSTOMER PRICING') + RETURN + ENDIF + ELSE + SELECT PRODUCT + DO CASE + CASE NCHOICE = 2 + MPERCENT = SD_BASEFAC + + CASE NCHOICE = 3 + MPERCENT = BU_BASEFAC + + CASE NCHOICE = 4 + MPERCENT = LU_BASEFAC + + CASE NCHOICE = 5 + MPERCENT = DI_BASEFAC + + CASE NCHOICE = 6 + MPERCENT = IN_BASEFAC + + ENDCASE + CORRECT := .F. + DO WHILE !CORRECT + @ 10,10 SAY 'Dealer Price Percentage' GET MPERCENT PICTURE '999.9999' + READ() + IF LASTKEY() = 27 + CORRECT := .T. + EXIT + ENDIF + CORR := CORRCHEK() + IF CORR = 'N' + LOOP + ELSE + CORRECT := .T. + IF CORR = 'Y' + SELECT PRODUCT + REC_LOCK(1) + DO CASE + CASE NCHOICE = 2 + REPLACE SD_BASEFAC WITH MPERCENT + CASE NCHOICE = 3 + REPLACE BU_BASEFAC WITH MPERCENT + CASE NCHOICE = 4 + REPLACE LU_BASEFAC WITH MPERCENT + CASE NCHOICE = 5 + REPLACE DI_BASEFAC WITH MPERCENT + CASE NCHOICE = 6 + REPLACE IN_BASEFAC WITH MPERCENT + END CASE + UNLOCK + ENDIF + ENDIF + ENDDO + ENDIF + LOOP + ENDIF + ENDIF + // IF IT GOT THIS FAR THEN IT'S GOING TO BE A PRICE TABLE + // NEED TO ZERO OUT ANY OLD PERCENTAGE AMOUNT FOR THIS TYPE + SELECT PRODUCT + REC_LOCK(1) + DO CASE + CASE NCHOICE = 2 + REPLACE SD_BASEFAC WITH 0 + + CASE NCHOICE = 3 + REPLACE BU_BASEFAC WITH 0 + + CASE NCHOICE = 4 + REPLACE LU_BASEFAC WITH 0 + + CASE NCHOICE = 5 + REPLACE DI_BASEFAC WITH 0 + + CASE NCHOICE = 6 + REPLACE IN_BASEFAC WITH 0 + + END CASE + UNLOCK + + SELECT (FILE2) + COL_ARR := {} + + FOR L = 1 TO LEN(C_ARR) + AADD(COL_ARR, {}) // MAKE ARRAY BUCKET FOR CURRENT ATTRIBUTE + + IF !EMPTY(PR_CUSTID) + CHK_BLOCK = {|| CUST_ID + PROD_CODE + ATT_CODE} + SELECT CUST_OPTS + FILE2 = 'CUST_OPTS' + SEEKKEY = PR_CUSTID + MPROD_CODE[1] + C_ARR[L] + SEEK SEEKKEY + ENDIF + IF EMPTY(PR_CUSTID) .OR. !FOUND() + // CHECK PRODUCT LEVEL NEXT + SELECT PROD_OPTS + CHK_BLOCK = {|| PROD_OPTS->PROD_CODE + PROD_OPTS->ATT_CODE} + + SEEKKEY = MPROD_CODE[1] + C_ARR[L] // MODEL + ATTRIBUTE + SEEK SEEKKEY + + IF !FOUND() + // CHECK CATEGORY LEVEL NEXT + SELECT CAT_OPTS + SEEKKEY = PRODUCT->CAT_CODE + C_ARR[L] // CAT CODE + ATTRIBUTE + SEEK SEEKKEY + CHK_BLOCK = {|| CAT_OPTS->CAT_CODE + CAT_OPTS->ATT_CODE} + ENDIF + + IF !FOUND() + // CHECK ATTRIBUTE LEVEL NEXT + SELECT ATT_OPTS + SEEKKEY = C_ARR[L] // ATTRIBUTE + SEEK SEEKKEY + CHK_BLOCK = {|| ATT_OPTS->ATT_CODE} + ENDIF + ENDIF + DO WHILE SEEKKEY == EVAL(CHK_BLOCK) .AND. !EOF() + AADD(COL_ARR[L], ALLTRIM(OPT_VALUE) ) + SKIP 1 + ENDDO + NEXT + // IF EMPTY COL_ARR, DO MESSAGE THEN RETURN + LOOPKEY = .F. + FOR L = 1 TO LEN(COL_ARR) + IF EMPTY(COL_ARR[L]) + ERR_BOX( ' CANNOT find COLUMN OPTION Info' , ; + ' for the ' + TRIM(MFILE) + ' Model! ', ; + ' Please Set them up in DEFAULT OPTIONS') + LOOPKEY = .T. + IF EMPTY(PR_CUSTID) + LOOP + ELSE + RETURN + ENDIF + ENDIF + NEXT + IF LOOPKEY + LOOP + ENDIF + + ROW_ARR := {} + FOR L = 1 TO LEN(R_ARR) + AADD(ROW_ARR, {}) // MAKE ARRAY BUCKET FOR CURRENT ATTRIBUTE + + IF !EMPTY(PR_CUSTID) + CHK_BLOCK = {|| CUST_ID + PROD_CODE + ATT_CODE} + SELECT CUST_OPTS + FILE2 = 'CUST_OPTS' + SEEKKEY = PR_CUSTID + MPROD_CODE[1] + R_ARR[L] + SEEK SEEKKEY + ENDIF + IF EMPTY(PR_CUSTID) .OR. !FOUND() + // CHECK IT AT THE PRODUCT LEVEL + SELECT PROD_OPTS + DONSETORD(1) // PROD_CODE + ATT_CODE + CHK_BLOCK = {|| PROD_OPTS->PROD_CODE + PROD_OPTS->ATT_CODE} + + SEEKKEY = MPROD_CODE[1] + R_ARR[L] + SEEK SEEKKEY + IF !FOUND() + // CHECK IT AT THE CATEGORY LEVEL + SELECT CAT_OPTS + DONSETORD(1) // CAT_CODE + ATT_CODE + SEEKKEY = PRODUCT->CAT_CODE + R_ARR[L] // CAT ATTT + ATTRIBUTE + SEEK SEEKKEY + CHK_BLOCK = {|| CAT_OPTS->CAT_CODE + CAT_OPTS->ATT_CODE} + ENDIF + IF !FOUND() + // CHECK ATTRIBUTE LEVEL NEXT + SELECT ATT_OPTS + SEEKKEY = R_ARR[L] // ATTRIBUTE + SEEK SEEKKEY + CHK_BLOCK = {|| ATT_OPTS->ATT_CODE} + ENDIF + ENDIF + + DO WHILE SEEKKEY == EVAL(CHK_BLOCK) .AND. !EOF() + AADD(ROW_ARR[L], ALLTRIM(OPT_VALUE) ) + SKIP 1 + ENDDO + NEXT + // IF EMPTY ROW_ARR, DO MESSAGE THEN RETURN + LOOPKEY = .F. + FOR L = 1 TO LEN(ROW_ARR) + IF EMPTY(ROW_ARR[L]) + ERR_BOX( ' CANNOT find ROW OPTION Info' , ; + ' for the ' + TRIM(MFILE) + ' Model! ', ; + ' Please Set them up in DEFAULT OPTIONS') + LOOPKEY = .T. + LOOP + ENDIF + NEXT + IF LOOPKEY + LOOP + ENDIF + + // BUILD FIELD LIST + FLD_ARR := {} + AADD(FLD_ARR, {'DESC', DESC_SIZE, 'C', 0}) // ADD REQUIRED FIELD FIRST! + FOR L = 1 TO LEN(COL_ARR) + FOR L2 = 1 TO LEN(COL_ARR[L]) + VAR = COL_ARR[L,L2] + VAR = STRTRAN(ALLTRIM(VAR), ' ', '_') + VAR = STRTRAN(VAR, '-', '_') + + // NO NUMERICS IN FIRST CHARACTER! + IF ISDIGIT(LEFT(VAR,1)) + VAR = 'V' + VAR + ENDIF + + // VAR CAN'T BE LONGER THAN 10 BYTES!!! + VAR = LEFT(VAR+SPACE(10), 10) + + AADD(FLD_ARR, {VAR, 7, 'N', 2 } ) + NEXT + NEXT + AADD(FLD_ARR, {'COL_HEAD1', 15, 'C', 0}) // ADD REQUIRED FIELD FIRST! + AADD(FLD_ARR, {'COL_HEAD2', 15, 'C', 0}) // ADD REQUIRED FIELD FIRST! + AADD(FLD_ARR, {'COL_HEAD3', 15, 'C', 0}) // ADD REQUIRED FIELD FIRST! + AADD(FLD_ARR, {'CUST_ID', 8, 'C', 0}) // ADD REQUIRED FIELD FIRST! + AADD(FLD_ARR, {'DATE_STAMP', 8, 'D', 0}) // ADD REQUIRED FIELD FIRST! + AADD(FLD_ARR, {'TIME_STAMP', 5, 'C', 0}) // ADD REQUIRED FIELD FIRST! + AADD(FLD_ARR, {'USER_STAMP', 8, 'C', 0}) // ADD REQUIRED FIELD FIRST! + AADD(FLD_ARR, {'UPDATED', 1, 'C', 0}) // ADD REQUIRED FIELD FIRST! + + NUMVARS := LEN(ROW_ARR) + + // SET UP THE 'DESC' FIELD VALUES + DESC_ARR := {} + ROWVARS := {} + CURVAL := {} + NUM_2_DO = 1 + FOR I = 1 TO NUMVARS // IE 3 ROW VARIABLES + NUM_2_DO = NUM_2_DO * LEN(ROW_ARR[I]) // IE 2 VALUES OF EACH VARIABLE + AADD(ROWVARS, LEN(ROW_ARR[I]) ) // IE # VALUES FOR THIS ATTRIBUTE + AADD(CURVAL, 1) // IE CURRENT VALUE POINTER FOR THIS ATTRIBUTE + NEXT + + FOR L = 1 TO NUM_2_DO // CREATE EMPTY ARRAY + AADD(DESC_ARR, '') + NEXT + + // MAKE ONE DESCVAR FOR EACH COMBINATION OF ALL ELEMENTS + // IE. FACTORIAL(ROW_ARR) + + VARYPOS := NUMVARS + POINTER := 0 + FOR I := 1 TO NUM_2_DO / ROWVARS[NUMVARS] // IE 3 ATTRIBUTES + FOR II := 1 TO ROWVARS[NUMVARS] // IE 2 CHOICES EACH ATTRIB + POINTER ++ + CURVAL[NUMVARS] := II + DESC_ARR[POINTER] := BLD_PRICE_LINE(ROW_ARR, CURVAL ) + NEXT + FOR III := NUMVARS-1 TO 1 STEP -1 + IF CURVAL[III] < ROWVARS[III] + CURVAL[III] ++ + EXIT + ELSE + CURVAL[III] := 1 + ENDIF + NEXT + NEXT + AADD(ALL_PR_ARR, {REAL_FILE, FLD_ARR, MFILE, DESC_ARR, PR_CUSTID} ) + ENDIF + + DIFFERENT = .F. + REAL_FILE = STRTRAN(ALLTRIM(MFILE), ' ', '_') + REAL_FILE = STRTRAN(REAL_FILE, '-', '_') + REAL_FILE = MPRICE_SHEET + REAL_FILE + IF CPRICENUM = NIL + REAL_FILE = REAL_FILE + '.DBF' + ELSE + REAL_FILE = REAL_FILE + '.' + CPRICENUM + ENDIF +** IF !FILE(REAL_FILE + '.DBF') + IF !FILE(REAL_FILE ) + NEWFILE = .T. + ELSE + // SEE IF STRUCTURE HAS CHANGED + NEWFILE = .F. + DIFFERENT = .F. + SET EXACT ON + NET_USE(REAL_FILE, .T., 5, 'REAL_FILE') + OLDDBF_ARR = ASORT(DBSTRUCT(),,, {|X,Y| X[1] < Y[1]}) // GET OLD STRUCTURE + NEWDBF_ARR = ASORT(ACLONE(FLD_ARR),,, {|X,Y| X[1] < Y[1]}) + IF LEN(OLDDBF_ARR) <> LEN(NEWDBF_ARR) + DIFFERENT = .T. + ELSE + FOR L = 1 TO LEN(OLDDBF_ARR) + IF OLDDBF_ARR[L,1] <> NEWDBF_ARR[L,1] + DIFFERENT = .T. + EXIT + ENDIF + NEXT + ENDIF + + // SEE IF THE 'DESC' FIELD VALUES HAVE CHANGED! + OLDDESC_ARR := {} + DO WHILE !EOF() + AADD(OLDDESC_ARR, ALLTRIM(DESC) ) + SKIP 1 + ENDDO + + IF LEN(OLDDESC_ARR) <> LEN(DESC_ARR) + DIFFERENT = .T. + ELSE + FOR L = 1 TO LEN(OLDDESC_ARR) + IF PADR(OLDDESC_ARR[L],DESC_SIZE) = PADR(DESC_ARR[L],DESC_SIZE) + ELSE + DIFFERENT = .T. + EXIT + ENDIF + NEXT + ENDIF + SET EXACT OFF + + IF DIFFERENT + IF PROMPT_BOX ('PRICE TABLE &/or OPTS for - ' + ALLTRIM(MFILE) + ' '+ ; + 'Have Possibly Changed!', ; //** P3N - 3/08/00 + '"YES" TO USE THE EXISTING ' + REAL_FILE, ; //** P3N - 3/08/00 + 'To RESTORE ORIGINAL FILE - copy '+ ; //** P3N - 3/08/00 + ALLTRIM(PREFIX) + '.OLD to ' + REAL_FILE, 1) //** P3N - 3/08/00 + SELECT REAL_FILE //** P3N - 3/08/00 + DIFFERENT := .F. //** P3N - 3/08/00 + FLD_ARR := DBSTRUCT() //** GET CURRENT STRUCTURE INFO + IF FILE(PREFIX+'.OLD') //** P3N - 12/27/01 + ERASE(PREFIX+'.OLD') //** P3N - 12/27/01 + ENDIF //** P3N - 12/27/01 + ALL_PR_ARR := {} //** P3N - 12/27/01 + ELSE //** P3N - 03/08/00 + SELECT REAL_FILE + USE + ?? CHR(7) + ERR_BOX( ' WARNING! The Pricing File for the ' + MFILE +' ', ; + ' Model has Changed! Some PRICES May Be LOST!', ; + ' Press to QUIT, or any other to continue.') + IF LASTKEY() = 27 + RETURN + ENDIF + ENDIF //** P3N - 03/08/00 + ENDIF + ENDIF + + IF NEWFILE .OR. DIFFERENT + IF DIFFERENT + NET_USE(REAL_FILE, .T., 5, 'REAL_FILE') + COPY TO &USERFILEX + COPYTO := ALLTRIM(PREFIX) + '.OLD' + COPY TO ©TO + USE + NET_USE(USERFILEX, .T., 5, 'TEMP_FILE') + ENDIF + + CREATE_DBF(REAL_FILE, FLD_ARR) + NET_USE(REAL_FILE, .T., 5, 'REAL_FILE') + + // LOAD THE ROW DESC RECORDS + NUM_ELEMS = LEN(DESC_ARR) + FOR L = 1 TO NUM_ELEMS + ADD_REC(3) + REPLACE DESC WITH DESC_ARR[L] + NEXT + + IF DIFFERENT + SELECT REAL_FILE + GOTO TOP + DO WHILE !EOF() + SELECT TEMP_FILE + LOCATE FOR ALLTRIM(DESC) == ALLTRIM(REAL_FILE->DESC) + IF FOUND() + REP_ONEREC('TEMP_FILE', 'REAL_FILE') + ENDIF + SELECT REAL_FILE + SKIP 1 + ENDDO + SELECT TEMP_FILE + USE + SELECT REAL_FILE + GOTO TOP + ENDIF + + ENDIF + + // DBROWSE WITH UPDATE ON CURRENT FILE + TBARR := {} + NTOP = 5 + NLEFT = 1 + NRIGHT = 78 + NBOTTOM = 20 + + P1 = 'Description' + P2 = 'DESC' + P3 = NIL + P4 = 30 + AADD(TBARR, {P1, P2, P3, P4}) + + FOR L = 2 TO LEN(FLD_ARR) + IF FLD_ARR[L,1] <> 'UPDATED' .AND. FLD_ARR[L,1] <> 'CUST_ID' + P1 = ALLTRIM(FLD_ARR[L,1]) + P2 = FLD_ARR[L,1] + P3 = 'REAL_FILE' + P5 = 'CK_PR_CHG()' + IF RIGHT(FLD_ARR[L,1],5) = 'STAMP' // AUDIT STAMPS + P7 = '.F.' + ELSE + P7 = NIL + ENDIF + AADD(TBARR, {P1, P2, P3, NIL, P5}) + ENDIF + NEXT + + //////////////////////////////////////////////////////////// + OLD_MFILE = MFILE // SAVE IT IN CASE WE HAVE TO DO IT AGAIN + OLD_PRICE_CD = MPRICE_SHEET + + @ 0,0 + TOPHEADING := {} + GOTO TOP + IF EMPTY(CPRICENUM) //P3N - 2-5-98 + XTITLE := TITLE + ' ' + PRODUCT->PROD_CODE + ELSE + XTITLE := TITLE + ' ' + CPRICENUM + ENDIF + DO WHILE .T. + BROWINST(XTITLE + ' ' + MSG, 'PRPO') + DBROWSE(NTOP,NLEFT,NBOTTOM,NRIGHT,.F.,TBARR,1,.F.,TOPHEADING) + @ 21,0 CLEAR + CORR = CORRCHEK() + IF CORR <> 'N' .OR. LASTKEY() = 27 + EXIT + ENDIF + ENDDO + SELECT REAL_FILE + IF !EMPTY(PR_CUSTID) // ONE TIME THRU FOR SPEC CUST PRICING + REPLACE ALL CUST_ID WITH PR_CUSTID + USE + RETURN + ELSE + USE // CLOSE THE MFILE + ENDIF + ENDDO +ENDDO + +RETURN +//******************************************************************* +//** P3N - 2/26/99 +//** F2-CUST PRICE HOTKEY TO REMOVE PRICE TABLE +//******************************************************************* +FUNCTION REMOVE_CUSTPR() +LOCAL CUSTID := USERFILE2->CUST_ID +LOCAL MPROD := USERFILE2->PROD_CODE +LOCAL MTITLE := 'Select CUSTOMER to Copy Pricing for Customer ' + ALLTRIM(CUSTID) + '/'+ALLTRIM(MPROD) +LOCAL FILE_CP := 'U'+ ALLTRIM(USERFILE2->PROD_CODE) +LOCAL FILE_CP_SFX := '', PRICEFL := '', ORIGPRFL := '' +LOCAL M1 := 'Are you sure you want to remove pricing for this Customer/Model?' +LOCAL M2 := ' ' +LOCAL M3 := 'Customer - ' + CUSTID + '/' +LOCAL CPRICENUM := CUST_MAST->CPRICE_NUM +FILE_CP_SFX := STR(CPRICENUM,3) +FILE_CP_SFX := STRTRAN(FILE_CP_SFX, ' ', '0') +PRICEFL := FILE_CP +'.'+FILE_CP_SFX +IF FILE(PRICEFL) + M3 := M3 + PRICEFL + IF PROMPT_BOX(M1, M2, M3) + ERASE(PRICEFL) + ENDIF +ENDIF +RETURN +*************************************************************** +FUNCTION CK_PR_CHG() +LOCAL GETO := GETACTIVE() + +IF GETO:CHANGED + AUDIT_STAMP( "PRICETABLE" ) +ENDIF +RETURN .T. + +*************************************************************** +FUNCTION BLD_PRICE_LINE(ROWARR, CURVARS) +LOCAL I, RETVAL + +FOR I = 1 TO LEN(ROWARR) + IF RETVAL = NIL + RETVAL := '' + ELSE + RETVAL := RETVAL + '-' + ENDIF + RETVAL := RETVAL + ALLTRIM(ROWARR[I,CURVARS[I]]) +NEXT + +RETURN RETVAL + +*************************************************************** +FUNCTION COPY_OPTS(WHICH_OPT_FILE, WHICH_FILE) +LOCAL SAVESEL := SELECT(), SAVEFILT +LOCAL SAVEORD, MAC, FILTEXP, SEEKKEY, MACX, NEWMSG +LOCAL FILTX +LOCAL NEWCUST := .F. //** P3N - 12/27/01 +PRIVATE CPYCUST := GETAVAR('CPYCUST') //** P3N - 12/27/01 +PRIVATE ITEMCATCODE + +IF EMPTY(CPYCUST) //** P3N - 12/27/01 + CPYCUST := '' //** P3N - 12/27/01 +ENDIF //** P3N - 12/27/01 +SELECT USERFILE1 +IF RECCOUNT() > 0 + RETURN .T. +ENDIF + +SELECT (WHICH_OPT_FILE) //CAT_OPTS OR ATT_OPTS +SAVEORD := INDEXORD() +SAVEFILT := DBFILTER() + // CALLED FROM PRODUCT SETUP +IF WHICH_FILE = 'PROD_OPTS' // 1ST, LOOK AT CATEGORY OPTS - 2ND TIME THRU + SEEKKEY := 'USERFILE2->ATT_CODE' + IF WHICH_OPT_FILE = 'CAT_OPTS' // CATEGORY OPTS TO PRODUCT OPTS +****SET FILTER TO CAT_CODE = PRODUCT->CAT_CODE + FILTEXP := 'CAT_CODE = PRODUCT->CAT_CODE' + DONSETORD(2) // ATT_CODE + OPTION + NEWMSG := 'CATEGORY' + ELSE + IF WHICH_OPT_FILE = 'ATT_OPTS' // ATTRIBUTE OPTS TO PRODUCT OPTS + ** SET FILTER TO ATT_CODE = USERFILE2->ATT_CODE + FILTEXP := 'ATT_CODE = USERFILE2->ATT_CODE' + DONSETORD(1) // ATT_CODE + OPTION + NEWMSG := 'SYSTEM ATTRIBUTE' + ENDIF + ENDIF +ELSE + IF WHICH_FILE = 'CAT_OPTS' // ATTRIBUTE OPTS TO CATEGOTY OPTS + SEEKKEY := 'USERFILE2->ATT_CODE' +** SET FILTER TO ATT_CODE = USERFILE2->ATT_CODE + FILTEXP := 'ATT_CODE = USERFILE2->ATT_CODE' + DONSETORD(1) // ATT_CODE + OPTION + NEWMSG := 'ATTRIBUTE' + ELSE + IF WHICH_FILE = 'CUST_OPTS' // CALLED FROM CUSTOMER PRICING SETUP + NEWCUST := .F. //** P3N - 12/27/01 + FILTEXP := '' //** P3N - 12/27/01 + SEEKKEY := CPYCUST + USERFILE3->PROD_CODE + USERFILE3->ATT_CODE + IF (WHICH_FILE)->(DBSEEK(SEEKKEY)) //** P3N - 12/27/01 + SELECT(WHICH_FILE) //** P3N - 12/27/01 + NEWCUST := .T. //** P3N - 12/27/01 + ENDIF //** P3N - 12/27/01 + SEEKKEY := 'USERFILE3->ATT_CODE' + IF WHICH_OPT_FILE = 'PROD_OPTS' // CATEGORY OPTS TO CUST_OPTS + ** SET FILTER TO PROD_CODE = USERFILE3->PROD_CODE + NEWMSG := 'PRODUCT' + IF NEWCUST //** P3N - 12/27/01 + NEWMSG := 'CUSTOMER' //** P3N - 12/27/01 + FILTEXP := 'CUST_ID == CPYCUST .AND. ' //** P3N - 12/27/01 + ENDIF //** P3N - 12/27/01 + FILTEXP := FILTEXP + 'PROD_CODE = USERFILE3->PROD_CODE' +//** FILTEXP := 'PROD_CODE = USERFILE3->PROD_CODE' + DONSETORD(2) // ATT_CODE + OPTION + ELSEIF WHICH_OPT_FILE = 'CAT_OPTS' // CATEGORY OPTS TO CUST_OPTS +********* SET FILTER TO CAT_CODE = ITEMCATCODE + ITEMCATCODE := GET_CATCODE(USERFILE3->PROD_CODE) + NEWMSG := 'CATEGORY' + IF NEWCUST //** P3N - 12/27/01 + NEWMSG := 'CUSTOMER' //** P3N - 12/27/01 + FILTEXP := 'CUST_ID == CPYCUST .AND. ' //** P3N - 12/27/01 + ENDIF //** P3N - 12/27/01 + FILTEXP := FILTEXP + 'CAT_CODE = ITEMCATCODE' //** P3N - 12/27/01 +//** FILTEXP := 'CAT_CODE = ITEMCATCODE' + DONSETORD(2) // ATT_CODE + OPTION + ELSEIF WHICH_OPT_FILE = 'ATT_OPTS' // ATTRIBUTE OPTS TO CUST_OPTS + **********SET FILTER TO ATT_CODE = USERFILE3->ATT_CODE + NEWMSG := 'SYSTEM ATTRIBUTE' + IF NEWCUST //** P3N - 12/27/01 + NEWMSG := 'CUSTOMER' //** P3N - 12/27/01 + FILTEXP := 'CUST_ID == CPYCUST .AND. ' //** P3N - 12/27/01 + ENDIF //** P3N - 12/27/01 + FILTEXP := FILTEXP + 'ATT_CODE = USERFILE3->ATT_CODE' + DONSETORD(1) // ATT_CODE + OPTION + ENDIF + ENDIF + ENDIF +ENDIF + +MAC := 'ATT_CODE == ' + SEEKKEY +SEEKKEY := &SEEKKEY +SEEK SEEKKEY + +** MACX := &('{|| ' + MAC + '}') + +MACX := MAKE_BLOCK(MAC) +FILTX := MAKE_BLOCK(FILTEXP) +DO WHILE EVAL(MACX) + IF EVAL( FILTX ) + __WHEREFROM := NEWMSG + SELECT USERFILE1 + IF NEWCUST //** P3N - 12/27/01 + ADD_ONEREC(WHICH_FILE, 'USERFILE1' ) //** CUST_OPTS + ELSE //** P3N -12/27/01 + ADD_ONEREC(WHICH_OPT_FILE, 'USERFILE1' ) + ENDIF //** P3N -12/27/01 + ENDIF + SELECT (WHICH_OPT_FILE) //CAT_OPTS OR ATT_OPTS + IF NEWCUST //** P3N - 12/27/01 + SELECT(WHICH_FILE) //** P3N - 12/27/01 CUST_OPTS + ENDIF //** P3N - 12/27/01 + SKIP 1 +ENDDO + +DONSETORD(SAVEORD) +SET FILTER TO &SAVEFILT +SELECT (SAVESEL) +RETURN .T. + +**************************************************** +**************************************************** +FUNCTION CAT_PAINT +// PUT COLUMN HEADING ON SCREEN FOR PRODUCTION INFO + +LOCAL SAVECOLOR := SETCOLOR(HNOR) +@ 11,1 SAY 'Conversion' +@ 12,1 SAY '--------------------' +@ 11,23 SAY 'Width' +@ 12,23 SAY '--------' +@ 11,34 SAY 'Height' +@ 12,34 SAY '--------' +SETCOLOR(SAVECOLOR) +RETURN NIL + +**************************************************** +** P3N - 02/13/04 ** +**************************************************** +FUNCTION CATPAINT2() +// PUT DOUBLE SPACING ORDER OPTIONS INFO ON SCREEN FOR CATEGORY SETUP + +LOCAL SAVECOLOR := SETCOLOR(HNOR) +@ 13,25 SAY '(Select Order Double Spacing Options)' +@ 14,07 SAY '-----------------------------------------------------------------------' +@ 15,34 SAY '( "F" Frame/"G" Glass/"S" Screen/"R" GoldRod )' +@ 16,34 SAY '( "D" Delivery/"O" OrderDesk /"I" ICO )' +@ 17,34 SAY '( "I" Invoice/"B" PreBill/"C" PreCost )' +@ 18,34 SAY '( "Y" Yes )' +SETCOLOR(SAVECOLOR) +RETURN NIL + +**************************************************** +FUNCTION GET_ORD_NUM(SCRNUM, CHGTYPE) +// GENERATE A NUMBER FOR A NEW ORDER + +LOCAL SAVESEL, MSG1, MORDER_NUM, NKEY +LOCAL LAST_GOOD_ORD, OLDCOLOR +LOCAL CLOSECTL := .T. //** P3N - 6/25/98 + +F5ORD := 0 //** P3N - 3/9/00 + +IF CHGTYPE <> NIL .AND. CHGTYPE = 'MANUAL' +**IF _CUROPT = 2 // CHANGE + RETURN '?' +ENDIF + +IF SELECT('USERFILE8') = 0 .AND. SCRNUM <> 'QCNV' + RETURN .T. +ENDIF +SAVESEL := SELECT() + +NKEY = NEXTKEY() +IF NKEY = ASC('Y') .OR. NKEY = ASC('y') .OR. NKEY = 19 // LEFT ARROW KEY +ELSE + CLEAR TYPEAHEAD +ENDIF + +IF CUR_MAST = 'ORD_MAST' + MSG1 := ' ADD New Sales ORDER? ' +ELSE + OLDCOLOR := SETCOLOR(BLOW) + @ 05,13 SAY ' ' + @ 06,13 SAY ' * * * * Q U O T E P R O C E S S I N G * * * * ' + @ 07,13 SAY ' ' + SETCOLOR(OLDCOLOR) + MSG1 := ' ADD New Sales QUOTE? ' +ENDIF +IF SELECT('CONTROL') > 0 //** P3N - 6/25/98 + CLOSE CONTROL + CLOSECTL := .F. +ENDIF +IF SCRNUM == 'QCNV' + DBOPEN('CONTROL') + REC_LOCK() + MORDER_NUM = STR( (VAL(ORDER_NUM) + 1),6) // GET NEW ORDER NUMBER + REPLACE ORDER_NUM WITH MORDER_NUM + USE +ELSE + IF PROMPT_BOX(MSG1,'','',1) // ASKS YES/NO, YES = .T., NO = .F. + DBOPEN('CONTROL') + REC_LOCK() + IF CUR_MAST = 'ORD_MAST' + MORDER_NUM = STR( (VAL(ORDER_NUM) + 1),6) // GET NEW ORDER NUMBER + REPLACE ORDER_NUM WITH MORDER_NUM + ELSE + MORDER_NUM = STR( (VAL(QUOTE_NUM) + 1),6) // GET NEW QUOTE NUMBER + REPLACE QUOTE_NUM WITH MORDER_NUM + ENDIF + USE + ELSE + MORDER_NUM = SPACE(6) // MAKE IT EMPTY + ENDIF +ENDIF +IF CLOSECTL //** P3N - 6/25/98 + //** SHOULD ALREADY BE CLOSED +ELSE + DBOPEN('CONTROL') +ENDIF +SELECT(SAVESEL) +@ 10,0 +RETURN MORDER_NUM + +************************************************************ +// RESET CONTROL FILE IF SOMEONE ESCAPED SOMEWHERE FROM NEW ORDER +FUNCTION RESET_CNTL(WHICHNUM) +LOCAL SAVESEL := SELECT() + +IF WHICHNUM = 'ORDER' + DBOPEN('CONTROL') + REC_LOCK(1) + REPLACE ORDER_NUM WITH STR( VAL(ORDER_NUM) - 1, 6) + USE +ELSE + IF NEWREC + IF CUR_MAST = 'ORD_MAST' + DBOPEN('CONTROL') + REC_LOCK(1) + IF (CUR_MAST)->ORDER_NUM = ORDER_NUM + REPLACE ORDER_NUM WITH STR( VAL(ORDER_NUM) - 1, 6) + ENDIF + USE + ELSE + DBOPEN('CONTROL') + REC_LOCK(1) + IF (CUR_MAST)->ORDER_NUM = QUOTE_NUM + REPLACE QUOTE_NUM WITH STR( VAL(QUOTE_NUM) - 1, 6) + ENDIF + USE + ENDIF + ENDIF +ENDIF + +SELECT (SAVESEL) + +RETURN +* +**************************************************** +FUNCTION UP_OM_NEED_CALC() +SELECT (CUR_MAST) +REC_LOCK(3) +REPLACE NEED_CALC WITH 'N' +UNLOCK +SELECT USERFILE2 +RETURN .T. + +**************************************************** +FUNCTION GET_LINEOPTS(MCODE, PACTION, UP_RECNO, ADDL_MODE) +// GET LINE OPTIONS FOR MODEL MCODE + + +LOCAL FILE1, FILE2, DBNAME, GET_ARR := {}, OPT_ARR := {}, WORKVAR +LOCAL SAVESEL := SELECT(), NCURSOR := SETCURSOR(1) +LOCAL ROW, SAVESCRN1 := SAVESCREEN(), SAVESCRN +LOCAL MORDER_NUM := &CUR_MAST->ORDER_NUM, EXITKEY, THISTITLE +LOCAL MLINE_NUM, MPROD_CODE +LOCAL SAVEDELIM := SET(_SET_DELIMITERS, .F.) +LOCAL MSTD_OPTS := USERFILE2->STD_OPTS, MTYPE, GET_IT +LOCAL SAVEREC, PRICE_ARR := {} +LOCAL SAVECURSOR := SETCURSOR(), PACK_FLAG +LOCAL CUR_PRICE_VALU := USERFILE2->SALE_PRICE +LOCAL RETVAL, NDX_EXP, FOUND_FLAG +LOCAL PIRATE_VAR, INFINAL := .F., TTEDIT +LOCAL CUR_USER_REC, MIDDLE, XSTD_OPTS, REPLINE +LOCAL DISC_ARR := {}, F7CALC_PRICE := 0 +LOCAL THIS_DISC_AMT := 0 +LOCAL PR_CUSTID := SPACE(8), RETARR := {}, M_MODEL +LOCAL HM_VAR, HMERR := .F., HM_VAROUT:="" + +STATIC P_CHGLIST := '' +STATIC O_CHGLIST := '' +STATIC STOP_SHOW := .F. + +PRIVATE SGACTION := PACTION +PRIVATE _SELFILE := SELECT() + +IF UP_RECNO = NIL + UP_RECNO := .F. +ENDIF + +IF ADDL_MODE = NIL + ADDL_MODE := .F. +ENDIF + +IF UP_RECNO + SELECT USERFILE2 + REPLACE LINE_NUM WITH RECNO() +ENDIF +MLINE_NUM = STR(USERFILE2->LINE_NUM,3) + +IF PROCNAME(1) = 'EDITGBROW' // F10 FINAL EDIT + INFINAL := .T. +ENDIF + +IF RECNO() = 1 + O_CHGLIST := '' // RESET CHANGED OPTION ITEMS + P_CHGLIST := '' // RESET CHANGED PRICE LINE ITEMS + STOP_SHOW := .F. // BE SURE STOP_SHOW ALWAYS FALSE +ENDIF // WHEN ENTERING THE PRICE FINAL EDIT + // ON 1ST RECORD + +IF SGACTION = NIL + IF !_OC_CAPABLE .OR. GETAVAR('ACTION_CODE') <> 'ADD' + SGACTION = 'REV' + ENDIF + + IF SGACTION = NIL + SGACTION = 'GET' + ENDIF + +**SGACTION = 'GET' +ENDIF + +IF PROCNAME(1) = 'EDITGBROW' .AND. USERFILE2->NEED_CALC = 'N' // DONT DO THE SYSTEM EDITS! + SET(_SET_DELIMITERS, SAVEDELIM) + IF RECNO() = LASTREC() .AND. STOP_SHOW + DISP_CHANGES(P_CHGLIST, O_CHGLIST) + + KEYBOARD CHR(1) // HOME KEY + RETURN .F. + ELSE + RETURN .T. + ENDIF +ENDIF + +CUR_USER_REC := RECNO() +PIRATE_VAR := FILL_EMPTY(MCODE, SGACTION, ADDL_MODE) +SELECT USERFILE2 +GOTO CUR_USER_REC +MCODE = USERFILE2->PROD_CODE +MPROD_CODE := MCODE +PRODUCT->(DBSEEK(MCODE)) +IF EMPTY(PRODUCT->ALLOW_SIZE) + HM_VAR := 'OTN' // ALLOW OS / TT / NS +ELSE + HM_VAR := PRODUCT->ALLOW_SIZE +ENDIF + +IF PIRATE_VAR == 'NO CONT' + IF RECNO() == 1 .AND. BLANK_1ST( .T.,'PROD_CODE') + SET(_SET_DELIMITERS, SAVEDELIM) + RETURN .T. + ELSE + ?? CHR(7) + ERR_BOX( ' MUST supply Missing Line Item Fields! ') + IF PROCNAME(1) = 'EDITGBROW' + RETURN .F. + ELSE + RETURN .T. + ENDIF + ENDIF +ENDIF + +// DO SPECIAL FIELD EDITS HERE! +// DO SPECIAL FIELD EDITS HERE! +// DO SPECIAL FIELD EDITS HERE! +// DO SPECIAL FIELD EDITS HERE! + +IF EMPTY(ENTRY_SIZE) // ONLY NEED TO CHECK IF EMPTY + // IF ! EMPTY, THE SIZE ALREADY VALIDATED + RETURN .F. +ENDIF + +IF !USERFILE2->STD_OPTS$'YN' + ERR_BOX( ' Invalid STANDARD OPTIONS CODE ' , ; + ' "Y" = Use Std Options ' ,; + ' "N" = Special Options ' ,; + ' PLEASE RE-ENTER') + RETURN .F. +ENDIF + +TTEDIT := CK_ENTRY_SIZE( HM_VAR, USERFILE2->ENTRY_SIZE, USERFILE2->HOW_MEAS ) + +IF TTEDIT == 'OK' + RND_WID_HT(MPROD_CODE, GET_ARR ) //CALC THE BILLING SIZE + BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR) //CALC THE BILLING SIZE +ELSE + IF TTEDIT = 'INVALID' .OR. TTEDIT = 'MU' + RETURN .F. + ELSE + ERR_BOX( ' UNKNOWN TTEDIT CODE IN CGWPRPO ' , ; + ' ') + RETURN .F. + ENDIF +ENDIF + +// IN CASE OF AN EMPTY PRICE_SHEET +IF EMPTY(USERFILE2->PRICE_SHT) + DISC_ARR := CALC_DISC(USERFILE2->PROD_CODE) + IF !EMPTY(DISC_ARR[2]) + REPLACE USERFILE2->PRICE_SHT WITH DISC_ARR[2] + ELSE + REPLACE USERFILE2->PRICE_SHT WITH &CUR_MAST->PRICE_SHT + ENDIF +ENDIF + +IF PROCNAME(1) = 'EDITGBROW' + DO CASE + CASE PIRATE_VAR = 'NO_OPTS_NO_PIRATE' + SGACTION = 'GET' + + OTHERWISE + SGACTION = 'PRICE' + + END CASE +ENDIF + + +**IF LASTKEY() = -6 // F7 KEY - GET PRICE +IF LASTKEY() = K_F7 // F7 KEY - GET PRICE + DO CASE + CASE PIRATE_VAR = 'NO_OPTS_NO_PIRATE' + SGACTION = 'GET' + + OTHERWISE + SGACTION = 'PRICE' + + END CASE +ENDIF + + +IF SGACTION == 'PRICE' + WAIT_BOX(' *** Calculating Price *** ',; + ' *** PLEASE WAIT ***') +ENDIF + +M_MODEL = MCODE // SAVE MODEL NAME FOR PRICING LOOKUP, MCODE MIGHT BE CATEGORY LATER ON! + +IF CK_SPEC_PRICE( (CUR_MAST)->CUST_ID, MCODE, (CUR_MAST)->ORDER_DATE, 'CUST_BP' ) + PR_CUSTID := (CUR_MAST)->CUST_ID +ENDIF + +// GO GET THE GET_ARR AND PRICE_ARR FOR THIS MODEL +RETVAL = BUILD_GETARR(MCODE, 1, MORDER_NUM, MLINE_NUM, PIRATE_VAR, , ADDL_MODE, PR_CUSTID, , 'USERFILE2') +GET_ARR = RETVAL[1] +PRICE_ARR = RETVAL[2] + +RND_WID_HT(MPROD_CODE, GET_ARR ) //ROUND THE WIDTH AND HEIGHT BASED ON OPTIONS +BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR) //CALC THE BILLING SIZE +PROD_SIZE(GET_ARR,MPROD_CODE, ADDL_MODE) // MAKE SURE CURRENT PROD SIZE INFO IS IN THERE + +LAST_CODE = MCODE // SAVE LAST MCODE + + +// SET THE INSTOCK, STDSIZE, ORIELSIZE FIELDS IN THE USERFILE RECORD +CK_STD_STOCK_SIZE(MPROD_CODE, GET_ARR, 'ALL', ADDL_MODE) + +IF SGACTION = 'GET' .OR. SGACTION = 'REV' + @ 0,0 CLEAR + THISTITLE := 'Line Item Options For Model '+ ALLTRIM(MCODE) + IF ADDL_MODE + THISTITLE := THISTITLE + '(Attach to ' + ALLTRIM(USERFILE2->PAR_COLOR) + ' '+ ALLTRIM(USERFILE2->PAR_PROD) + ')' + ENDIF + SAYTITLE(THISTITLE, 'PRPO') + @ 2,0 CLEAR +ENDIF + +//** P3N - 3/18/98 +F7CALC_PRICE := LASTKEY() + +RETARR := PROCESS_GETVALS( GET_ARR, ADDL_MODE, SGACTION, ; + STOP_SHOW, O_CHGLIST, P_CHGLIST, ; + MORDER_NUM, MLINE_NUM, MPROD_CODE, ; + M_MODEL, PR_CUSTID, PRICE_ARR, THISTITLE) +STOP_SHOW := RETARR[1] +O_CHGLIST := RETARR[2] +P_CHGLIST := RETARR[3] + +SETCURSOR(SAVECURSOR) +SELECT USERFILE2 +IF (CUR_PRICE_VALU <> USERFILE2->SALE_PRICE) ; + .AND. PROCNAME(1) = 'EDITGBROW' + STOP_SHOW := .T. + P_CHGLIST := P_CHGLIST + STR(RECNO() ,3) +ENDIF + +SELECT USERFILE2 + +//** P3N - 3/18/98 - F7 CALC PRICE DISPLAY ALL PRICING COMPONENTS +IF F7CALC_PRICE = K_F7 + DISP_PRICE_COMP() +ENDIF + +IF RECNO() = LASTREC() .AND. STOP_SHOW .AND. SGACTION = "PRICE" + DISP_CHANGES(P_CHGLIST, O_CHGLIST) + KEYBOARD CHR(1) // HOME KEY + RETVAL := .F. +ELSE + RETVAL := .T. +ENDIF + +SET(_SET_DELIMITERS, SAVEDELIM) +RESTSCREEN(,,,,SAVESCRN1) +SELECT(SAVESEL) + +RETURN RETVAL + +*************************************************************** +* //** P3N - 3/18/98 +* IF F7 KEY DEPRESSED - DISPLAY ALL PRICE COMPONENTS +* (IE: LINE ITEM - BASE_PRICE, OPT_PRICE, AND EXT_PRICE) +*************************************************************** +FUNCTION DISP_PRICE_COMP() +LOCAL L1 := 'Base Price - ' + STR(BASE_PRI,7,2) +LOCAL L2 := 'Opt. Price - ' + STR(OPT_PRI,7,2) +LOCAL L3 := 'Ext. Price - ' + STR(EXTRA_PRI,7,2) +LOCAL L4 := 'Sale Price - ' + STR(SALE_PRICE,7,2) +LOCAL L5 := 'SPECIAL CUSTOMER PRICING EXISTS' //** P3N - 07/17/02 +IF EMPTY(CUST_MAST->CPRICE_NUM) + L5 := '' +ENDIF +PRICEBOX( L5, L1, L2, L3, ; + ' --------', ; + L4, ; + ' ========') +RETURN .T. +//**************************************************************** +//** p3n - 05/01/03 *** +//** ADDRESS MSG LINES PASSED *** +//** (IE: MSG7 VARIABLE DOES NOT EXIST ABEND) *** +//**************************************************************** +FUNCTION PRICEBOX(LINE1, LINE2, LINE3, LINE4, LINE5, LINE6, LINE7) +LOCAL SCRN1, I, LONGEST, H, SAVECOL, SAVESCR +//**ATE LINEVAR, MSG1, MSG2, MSG3 +PRIVATE LINEVAR, MSG1, MSG2, MSG3, MSG4, MSG5, MSG6, MSG7 +CLEAR TYPEAHEAD +MSG1 := LINE1 +MSG2 := LINE2 +MSG3 := LINE3 +MSG4 := LINE4 +MSG5 := LINE5 +MSG6 := LINE6 +MSG7 := LINE7 +SAVECOL := SETCOLOR() +SETCOLOR(HREV) +SAVE SCREEN TO SAVESCR +LONGEST := 25 +FOR I = 1 TO PCOUNT() + LINEVAR := 'MSG' + STR(I,1) + IF &LINEVAR = NIL + ELSE + IF LEN(&LINEVAR) > LONGEST + LONGEST := LEN(&LINEVAR) + ENDIF + ENDIF +NEXT + +H = ((80 - LONGEST) / 2) +@ 12,H-5 CLEAR TO 17 + PCOUNT(),H+5+LONGEST +@ 12,H-5 TO 17 + PCOUNT(),H+5+LONGEST DOUBLE +V = 14 +@ V,H SAY LINE1 +IF PCOUNT() > 1 + V++ + @ V ,H SAY LINE2 +ENDIF +IF PCOUNT() > 2 + V++ + @ V,H SAY LINE3 +ENDIF +IF PCOUNT() > 3 + V++ + @ V,H SAY LINE4 +ENDIF +IF PCOUNT() > 4 + V++ + @ V,H SAY LINE5 +ENDIF +IF PCOUNT() > 5 + V++ + @ V,H SAY LINE6 +ENDIF +IF PCOUNT() > 6 + V++ + @ V,H SAY LINE7 +ENDIF +V++ +V++ +@ V,H SAY "Press Any Key to Continue" +INKEY(0) +RESTORE SCREEN FROM SCRN1 +SETCOLOR(SAVECOL) +RESTORE SCREEN FROM SAVESCR +RETURN (.T.) + + +*************************************************************** +* +*************************************************************** +FUNCTION CK_ENTRY_SIZE( HM_VAR, ENTSIZE, HOWMEAS ) + +LOCAL MIDDLE := AT('X', ENTSIZE) +LOCAL GPOS := AT('G', ENTSIZE) +LOCAL WOVAR := AT("'", ENTSIZE) +LOCAL FTVAR := 0 , I +LOCAL INVAR := 0 +LOCAL HMERR := .F., HM_VAROUT := '' + +FOR I := 1 TO LEN( ENTSIZE ) + IF SUBS(ENTSIZE,I,1)$"'" + FTVAR ++ + ENDIF +NEXT + +FOR I := 1 TO LEN( ENTSIZE ) + IF SUBS(ENTSIZE,I,1)$'"' + INVAR ++ + ENDIF +NEXT + +IF !EMPTY(HM_VAR) + DO CASE + CASE HOWMEAS=='TT' .AND. AT( 'T', HM_VAR ) = 0 + HMERR := .T. + CASE HOWMEAS=='OS' .AND. AT( 'O', HM_VAR ) = 0 + HMERR := .T. + CASE HOWMEAS=='NS' .AND. AT( 'N', HM_VAR ) = 0 + HMERR := .T. + CASE HOWMEAS=='WO' .AND. AT( 'W', HM_VAR ) = 0 + HMERR := .T. + CASE HOWMEAS=='BW' .AND. AT( 'B', HM_VAR ) = 0 + HMERR := .T. + CASE HOWMEAS=='OT' .AND. AT( '1', HM_VAR ) = 0 + HMERR := .T. + CASE HOWMEAS=='TO' .AND. AT( '2', HM_VAR ) = 0 + HMERR := .T. + ENDCASE + IF HMERR + IF AT('O', HM_VAR) > 0 + HM_VAROUT := HM_VAROUT + '"OS" ' + ENDIF + IF AT('T', HM_VAR) > 0 + HM_VAROUT := HM_VAROUT + '"TT" ' + ENDIF + IF AT('N', HM_VAR) > 0 + HM_VAROUT := HM_VAROUT + '"NS" ' + ENDIF + IF AT('W', HM_VAR) > 0 + HM_VAROUT := HM_VAROUT + '"WO" ' + ENDIF + IF AT('B', HM_VAR) > 0 + HM_VAROUT := HM_VAROUT + '"BW" ' + ENDIF + IF AT('1', HM_VAR) > 0 + HM_VAROUT := HM_VAROUT + '"OT" ' + ENDIF + IF AT('2', HM_VAR) > 0 + HM_VAROUT := HM_VAROUT + '"TO" ' + ENDIF + ERR_BOX('*** Invalid HOW MEASURE ', ; + '*** Valid Method(s) - ' + HM_VAROUT ) + RETURN 'INVALID' + ENDIF +ENDIF + + +WORKVAR := VAL_WD( 'USERFILE2', ENTSIZE) +DO CASE + CASE HOWMEAS=='TT' .AND. MIDDLE > 0 + TTEDIT := 'OK' + CASE HOWMEAS=='OS' .AND. MIDDLE > 0 + TTEDIT := 'OK' + CASE ( HOWMEAS=='NS' .AND. MIDDLE = 0 ) .OR. FTVAR = 2 + TTEDIT := 'OK' + CASE HOWMEAS=='WO' .AND. WORKVAR[2] = 'WO' + TTEDIT := 'OK' +* CASE HOWMEAS=='WO' .AND. WOVAR > 0 .AND. FTVAR = 1 +* TTEDIT := 'OK' +* CASE HOWMEAS=='WO' .AND. INVAR = 1 +* TTEDIT := 'OK' +* CASE HOWMEAS=='WO' .AND. VAL_WD('USERFILE2', ENTSIZE ) +* TTEDIT := 'OK' + CASE HOWMEAS=='BW' .AND. GPOS > 0 + TTEDIT := 'OK' + CASE HOWMEAS=='TO' .AND. MIDDLE > 0 + TTEDIT := 'OK' + CASE HOWMEAS=='OT' .AND. MIDDLE > 0 + TTEDIT := 'OK' + OTHERWISE + DO CASE + CASE HOWMEAS=='TT' + TTEDIT := 'MU' + CASE HOWMEAS=='OS' + TTEDIT := 'MU' + CASE HOWMEAS=='NS' + TTEDIT := 'MU' + CASE HOWMEAS=='WO' + TTEDIT := 'MU' + CASE HOWMEAS=='BW' + TTEDIT := 'MU' + CASE HOWMEAS=='TO' + TTEDIT := 'MU' + CASE HOWMEAS=='OT' + TTEDIT := 'MU' + OTHERWISE + TTEDIT := 'INVALID' + ENDCASE +ENDCASE + +IF TTEDIT = 'MU' // MIXED - UP + ERR_BOX( ' Size and HOW MEASURE are ILLOGICAL ' , ; + ' "TT/OS/TO/OT" = 99 X 99' , ; + ' "NS" = 9999 ' , ; + [ "WO" = 99'99 ] , ; + ' "BW" = 99G99 ') + REPLACE USERFILE2->HOW_MEAS WITH ' ' + TTEDIT := 'INVALID' +**RETURN .F. +ENDIF + +IF TTEDIT = 'INVALID' + ERR_BOX( ' Invalid HOW MEASURE CODE ' , ; + '"TT" = Tip to Tip "BW" = Basement Window ' , ; + '"OS" = Opening Size "WO" = Width Only ' , ; + '"TO" = TT WD - OS HT "OT" = OS WD - TT WD ' , ; + '"NS" = Nominal Size ') +**RETURN .F. +ENDIF + +RETURN TTEDIT +***************************************************************** + +FUNCTION PROCESS_GETVALS( GET_ARR, ADDL_MODE, SGACTION, ; + STOP_SHOW, O_CHGLIST, P_CHGLIST, ; + MORDER_NUM, MLINE_NUM, MPROD_CODE, ; + M_MODEL, PR_CUSTID, PRICE_ARR, THISTITLE) + +LOCAL PAGENUM := 0, STRTROW, ENDROW, FULLPAGE, FSTPAGE, GET_COL +LOCAL L, NUM2GET, L2, MTYPE, GET_IT, ROW, SAY_COL, DESCVAR +LOCAL CORRECT, EXITKEY, CORR, SAVEL, FSTGET, LASTGET +LOCAL REPLINE, PACK_FLAG, MOPT_VALUE, ELEM, XSTD_OPTS, SEEKKEY +LOCAL DISC_ARR, MSALE_PRICE, BPD, OPD, EPD +LOCAL PRNT_DESARR +LOCAL ASALE // P3N - 2/18/98 +LOCAL BASEPRICE_CUST // P3N - 2/18/98 + +// PUT GET ARRAY ON SCREEN +SETCOLOR(LNOR) +STRTROW = 2 +ENDROW := MAXROW() - 3 +FULLPAGE := ENDROW - STRTROW +FSTPAGE := .T. +PAGENUM := 0 +GET_COL = 35 + + +FOR L = 1 TO LEN(GET_ARR) + PAGENUM ++ + ROW := STRTROW + NUM2GET = 0 + NUMGOT := 0 + FSTGET := 0 + LASTGET := 0 + GOTFST := .F. +* IF SGACTION <> 'PRICE' +* @ 2,0 CLEAR +* ENDIF + DO WHILE ROW < ENDROW .AND. L <= LEN(GET_ARR) + NUM2GET++ + IF FSTGET = 0 + FSTGET := L + ENDIF + LASTGET := L + MTYPE = GET_ARR[L,2] + GET_IT = .F. + IF MTYPE$'UP' + GET_IT = .T. + ENDIF + + IF MTYPE = 'P' .AND. USERFILE2->STD_OPTS = 'Y' + GET_IT = .F. + + // MAKE SURE THERE ARE DEFAULTS IN THE PICK LIST + // LOOK FOR THE DEFAULT VALUE + IF GET_ARR[L,7] .OR. EMPTY(GET_DEFAULT(L,GET_ARR, ADDL_MODE)) + GET_IT = .T. + ENDIF + ENDIF + + GET_ARR[L,7] = GET_IT // LET ARR KNOW TO GET/SAY OR NOT! + + IF GET_IT .AND. (SGACTION = 'GET' .OR. SGACTION = 'REV') + IF !GOTFST + GOTFST := .T. + CLS + IF SGACTION = 'GET' .OR. SGACTION = 'REV' + IF SGACTION <> 'PRICE' + SAYTITLE(THISTITLE, 'PRPO') + @ 2,0 CLEAR + ENDIF + // PUT UP MSG FOR SECOND GET_ARR COLUMN +* IF CUR_OO = 'ACT_OPTS' +* PMSG = 'Actual # Before ' + DTOC(MDISP_DATE) +* @ 2,55 SAY PMSG +* ENDIF + ENDIF + ENDIF + ROW++ + NUMGOT ++ + DESCVAR := ALLTRIM(GET_ARR[L,5]) + SAY_COL = GET_COL - LEN(DESCVAR) -1 + @ ROW, SAY_COL SAY DESCVAR + + ENDIF + L++ // SET LOOP COUNTER TO NEXT ELEMENT + ENDDO + L-- // RESET LOOP COUNTER TO CORRECT ELEMENT + + IF SGACTION = 'GET' .OR. SGACTION = 'REV' + SAY_GET('SAY',GET_COL, L, NUM2GET, GET_ARR, USERFILE2->STD_OPTS, ADDL_MODE, STRTROW) + ENDIF + + * + * GET USER'S INPUT + * + CORRECT := .F. + EXITKEY = .F. + DO WHILE !CORRECT // AND IT IS EDIT MODE + IF SGACTION = 'GET' + SAY_GET( 'GET', GET_COL, L, NUM2GET, GET_ARR, USERFILE2->STD_OPTS, ADDL_MODE, STRTROW) + ENDIF + + IF LASTKEY() = 27 + CORRECT := .T. + EXITKEY = .T. + CORR := 'X' + L := LEN(GET_ARR) + 1 + SETKEY(-4,{|| ' '}) //** TURN OFF F5-PICKLIST HOTKEY - P3N - 6/18/98 + RETURN {STOP_SHOW, O_CHGLIST, P_CHGLIST} +******EXIT + ENDIF + IF EXITKEY + L := LEN(GET_ARR) + 1 + RETURN {STOP_SHOW, O_CHGLIST, P_CHGLIST} + ENDIF + CORR = ' ' + IF SGACTION = 'GET' .OR. SGACTION = 'REV' + SAY_GET('SAY',GET_COL, L, NUM2GET, GET_ARR, USERFILE2->STD_OPTS, ADDL_MODE, STRTROW) + FOR L2 = FSTGET TO LASTGET + IF GET_ARR[L2,7] // DID WE 'GET' THIS ONE? + IF GET_ARR[L2,4] = 'No DEFAULT' .OR. !VALID_PICK(GET_ARR, L2) + + ERR_BOX( 'INVALID Response for the ', ; + ALLTRIM(GET_ARR[L2,5]) + ' Option!', ; + ' PLEASE RE-ENTER ') + + CORR = 'N' + EXIT + ENDIF + ENDIF + NEXT + IF CORR = 'N' + LOOP + ENDIF + + IF NUMGOT > 0 + CORR := CORRCHEK( MAXROW()-1) + @ MAXROW()-1,0 CLEAR // ERASE CORRCHEK LINE + ENDIF + ELSE + CORR = 'Y' + ENDIF + + + IF CORR = 'N' + LOOP + ELSE + CORRECT := .T. + IF CORR = 'X' + CORRECT := .T. + EXITKEY = .T. + L = LEN(GET_ARR) // EXIT ENTIRE LOOP + EXIT + ELSE // ASSUMES CORR = 'Y' // good record - do the update + ENDIF + ENDIF + + ENDDO + +NEXT + +// CALCULATE/UPDATE BILLING/PRODUCTION SIZE BASED ON OPTIONS +// ALSO WILL CALC THE ACTUAL FINISHED PRODUCTION SIZE + +RND_WID_HT(MPROD_CODE, GET_ARR) //ROUND WID/HT ENTRY SIZE +BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR) //CALC THE BILLING SIZE +PROD_SIZE(GET_ARR,MPROD_CODE, ADDL_MODE) + + +REPLINE := USERFILE2->LINE_NUM +SELECT USERFILE6 +REPLACE ALL UPDATED WITH 'X' FOR LINE_NUM = REPLINE +SELECT USERFILE2 +PACK_FLAG = .F. +SAVEL := L +FOR L2 = 1 TO LEN(GET_ARR) + + // SEE IF THERE IS A PARENT PRODUCT FOR THIS OPTION + // OR IF THERE IS AN ADDITIONAL PRODUCT FOR THIS OPTION + MOPT_VALUE = GET_ARR[L2,4] + IF !EMPTY(MOPT_VALUE) + ELEM = ASCAN(GET_ARR[L2,3], {|X| X[1] == MOPT_VALUE}) + IF ELEM > 0 + IF !EMPTY(GET_ARR[L2,3,ELEM,11]) // PARENT PRODUCT CODE + REPLACE USERFILE2->PAR_PROD WITH GET_ARR[L2,3,ELEM,11] + ENDIF + IF !EMPTY(GET_ARR[L2,3,ELEM,10]) // addl product code + IF USERFILE2->STD_OPTS <> 'Y' // USE USERFILE2 BECAUSE IT GETS UPDATED ON THE FLY IN + // PIRATE OPTS / FILL_EMPTY PROCESSING + XSTD_OPTS = CHK_ADDITIONAL(GET_ARR[L2,1],; + GET_ARR[L2,3,ELEM,10], GET_ARR[L2,5], GET_ARR[L2,4]) + ELSE + XSTD_OPTS = 'Y' + ENDIF + // SEE IF WE NEED TO ADDIT TO LINEITEM FILE + ADD_ADDITIONAL(GET_ARR[L2,3,ELEM,10], XSTD_OPTS, GET_ARR) + ENDIF + ENDIF + ENDIF + + + + // REEVALUATE ALL ITEMS SELECT FOR DEFAULT INCASE + // THE DEFAULT IS NOW DIFFERENT DUE TO USER RESPONSES + IF GET_ARR[L2,9] == '*' // DEFAULT + GET_ARR[L2,4] = GET_DEFAULT(L2, GET_ARR, ADDL_MODE) + ENDIF + + // UPDATE THE DATA FILE + IF GET_ARR[L2,2] = 'C' // CALC FIELD + UPDATE_MATH(L2, GET_ARR) // GO DO MATH CALCULATIONS + ENDIF + + // DON'T PUT DEFAULT OR EMPTY VALUES INTO THE ORDER OPTION FILE + IF ( EMPTY(GET_ARR[L2,4]) .OR. ; + GET_ARR[L2,9] == '*' ) .AND. ; + TRIM(GET_ARR[L2,1]) <> 'RANCH SLID' // ALWAYS WRITE RANCH SLIDER ATTRIBUTES + + SELECT USERFILE8 + IF ADDL_MODE + SEEKKEY = MORDER_NUM + MPROD_CODE + MLINE_NUM + GET_ARR[L2,1] // ATT_CODE + ELSE + SEEKKEY = MORDER_NUM + MLINE_NUM + GET_ARR[L2,1] // ATT_CODE + ENDIF + SEEK SEEKKEY + IF FOUND() + REC_LOCK(1) + DELETE + PACK_FLAG = .T. + ENDIF + ELSE // NOT DEFAULT OR EMPTY CHOICE OR N/A + SELECT USERFILE8 + IF ADDL_MODE + SEEKKEY = MORDER_NUM + MPROD_CODE + MLINE_NUM + GET_ARR[L2,1] // ATT_CODE + ELSE + SEEKKEY = MORDER_NUM + MLINE_NUM + GET_ARR[L2,1] // ATT_CODE + ENDIF + SEEK SEEKKEY + IF !FOUND() + ADD_REC(3) + ELSE + REC_LOCK(3) + ENDIF + // SET KEY ON ORDER OPTS FILE + REPLACE ORDER_NUM WITH MORDER_NUM + REPLACE LINE_NUM WITH VAL(MLINE_NUM) + REPLACE ATT_CODE WITH GET_ARR[L2,1] + REPLACE USER_RESP WITH GET_ARR[L2,4] + IF ADDL_MODE + REPLACE PROD_CODE WITH MPROD_CODE + ENDIF + UNLOCK + ENDIF +NEXT +L := SAVEL + +// REMOVE RECORDS NO LONGER NEEDED! +SELECT USERFILE6 +DELETE ALL FOR UPDATED = 'X' +PACK + +IF PACK_FLAG + SELECT USERFILE8 + PACK +ENDIF + +// BUILD PRINT DESCRIPTION +// MSG TO SHOW PROCESSING IS OCCURING!! + +// CALCULATE/UPDATE BILLING/PRODUCTION SIZE BASED ON OPTIONS +// ALSO WILL CALC THE ACTUAL FINISHED PRODUCTION SIZE + +RND_WID_HT(MPROD_CODE, GET_ARR) //ROUND WID/HT ENTRY SIZE +BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR) //CALC THE BILLING SIZE +PROD_SIZE(GET_ARR,MPROD_CODE, ADDL_MODE) + + +// SS CLEAR GLASS? USED IN GLASS BOX PROCESSING DURING PRINT. +CLR_SS_GLASS(GET_ARR, 'USERFILE2') + +// standard size edit +CK_STD_STOCK_SIZE(MPROD_CODE, GET_ARR, 'ALL', ADDL_MODE) + +// DO WE HAVE ANY SYSTEM LEVEL/PRODUCT LINE DISCOUNTS? +// THIS DISC% / PRICE_SHT COMES FROM CUST_PRICE OR (CUR_MAST) +DISC_ARR := CALC_DISC(USERFILE2->PROD_CODE) + +// GO GET PRICING +//**MSALE_PRICE = GET_SALEPRICE(M_MODEL, USERFILE2->PRICE_SHT, PRICE_ARR, GET_ARR, ADDL_MODE, PR_CUSTID) +ASALE := GET_SALEPRICE(M_MODEL, USERFILE2->PRICE_SHT, PRICE_ARR, GET_ARR, ADDL_MODE, PR_CUSTID) +MSALE_PRICE := ASALE[1] //* P3N - 2/18/98 +BASEPRICE_CUST := ASALE[2] //* P3N - 2/18/98 +IF &CUR_MAST->QUOTE_PRIC = 0 + // CALC THE SYSTEM DISCOUNT IF REQUIRED + IF USERFILE2->PRICE_SHT == DISC_ARR[2] .AND. EMPTY(USERFILE2->ALT_SPRICE) + REPLACE USERFILE2->SYS_DISC WITH DISC_ARR[1] + BPD:=0 + OPD:=0 + EPD:=0 + IF DISC_ARR[3] = 'Y' + BPD := (USERFILE2->SYS_DISC * USERFILE2->BASE_PRI * .01) + ENDIF + IF DISC_ARR[4] = 'Y' + OPD := (USERFILE2->SYS_DISC * USERFILE2->OPT_PRI * .01) + ENDIF + IF DISC_ARR[5] = 'Y' + EPD := (USERFILE2->SYS_DISC * USERFILE2->EXTRA_PRI * .01) + ENDIF + REPLACE USERFILE2->DISC_S_AMT WITH BPD + OPD + EPD + ELSE + IF (CUR_MAST)->DISCOUNT <> 0 + REPLACE USERFILE2->SYS_DISC WITH (CUR_MAST)->DISCOUNT + IF EMPTY(USERFILE2->ALT_SPRICE) .AND. EMPTY(USERFILE2->DISCOUNT) + REPLACE USERFILE2->DISC_S_AMT WITH MSALE_PRICE * ((CUR_MAST)->DISCOUNT*.01) + ELSEIF !EMPTY(USERFILE2->ALT_SPRICE) .AND. !EMPTY(USERFILE2->DISCOUNT) + REPLACE USERFILE2->DISC_S_AMT WITH USERFILE2->ALT_SPRICE * (USERFILE2->DISCOUNT*.01) + ELSEIF EMPTY(USERFILE2->ALT_SPRICE) + REPLACE USERFILE2->DISC_S_AMT WITH MSALE_PRICE * (USERFILE2->DISCOUNT*.01) + ELSE + REPLACE USERFILE2->DISC_S_AMT WITH 0 + REPLACE USERFILE2->SYS_DISC WITH 0 +******ELSE +****** REPLACE USERFILE2->DISC_S_AMT WITH USERFILE2->ALT_SPRICE * (USERFILE2->DISCOUNT*.01) + ENDIF + ELSE + REPLACE USERFILE2->SYS_DISC WITH 0 + REPLACE USERFILE2->DISC_S_AMT WITH 0 + ENDIF + ENDIF +ELSE // QUOTED PRICE + REPLACE USERFILE2->CALC_PRICE WITH MSALE_PRICE + MSALE_PRICE := 0 + REPLACE USERFILE2->DISCOUNT WITH 0 + REPLACE USERFILE2->SYS_DISC WITH 0 + REPLACE USERFILE2->DISC_S_AMT WITH 0 +ENDIF + +IF BASEPRICE_CUST //* P3N - 2/18/98 - PER ELLEN + REPLACE USERFILE2->DISCOUNT WITH 0 + REPLACE USERFILE2->SYS_DISC WITH 0 + REPLACE USERFILE2->DISC_S_AMT WITH 0 +ENDIF + +SELECT USERFILE2 +REPLACE SALE_PRICE WITH MSALE_PRICE + +IF USERFILE2->NEED_CALC <> 'N' + STOP_SHOW := .T. + O_CHGLIST := O_CHGLIST + STR( RECNO(), 3) +ENDIF +IF EMPTY(USERFILE2->ALT_SPRICE) //** P3N - 6/30/98 + //** ALLOW AN ALT PRICE TO BE ENTERED - NO STOP_SHOW +ELSE + STOP_SHOW := .F. //** P3N - 6/30/98 +ENDIF + +REPLACE USERFILE2->NEED_CALC WITH 'N' + +// BUILD PRINT DESCRIPTION +PRNT_DESARR := BLD_DESC(GET_ARR, 'USERFILE2') + +REPLACE USERFILE2->ITEM_DESC WITH PRNT_DESARR[1] +REPLACE USERFILE2->LINE_DESC WITH PRNT_DESARR[4] +IF USERFILE2->(FIELDPOS('LDESC_COPY')) > 0 + REPLACE USERFILE2->LDESC_COPY WITH PRNT_DESARR[5] +ENDIF +IF USERFILE2->(FIELDPOS('GLINE_DESC')) > 0 + REPLACE USERFILE2->GLINE_DESC WITH PRNT_DESARR[6] +ENDIF +REPLACE USERFILE2->LINE_DESC WITH PRNT_DESARR[4] +REPLACE USERFILE2->LOC_CODE WITH PRNT_DESARR[2] +REPLACE USERFILE2->GLASSORDER WITH IF(PRNT_DESARR[3], 'Y', 'N') + +RETURN { STOP_SHOW, O_CHGLIST, P_CHGLIST } + +*************************************************** + +FUNCTION DISP_CHANGES(P_CHGLIST, O_CHGLIST) + +LOCAL M1:= '' , M2 := '' +IF LEN(P_CHGLIST) > 0 + M1 = ' PRICE CHANGES on Lines ' + P_CHGLIST +ENDIF +IF LEN(O_CHGLIST) > 0 + M2 = ' OPTION CHANGES on Lines ' + O_CHGLIST +ENDIF + ERR_BOX( M1, ; + M2, ; + ' PLEASE REVIEW Each Line ') +RETURN .T. + +*************************************************** +FUNCTION CK_STOCK_SIZE(MPROD_CODE, GET_ARR) +// STOCK ITEM edit (proper stock rule and std_size) +LOCAL RESULT, SAVESEL := SELECT(), RETVAL := .T. + +// ONLY ITEMS WITH IN_STOCK$'X' GOT TO HERE. +// FIRST CHECK IF THERE IS A RULE AT THE SS FILE LEVEL +// THEN CHECK IF THERE IS A RULE AT THE PRODUCT FILE LEVEL +// IF NO RULES, RETURN .T. + +IF !EMPTY(STD_SIZES->RULE_PACK) + RESULT = CHK_RULE(STD_SIZES->RULE_PACK, GET_ARR, , _SELFILE) + IF RESULT + RETVAL := .T. + ELSE + RETVAL := .F. + ENDIF +ELSE + + SELECT PRODUCT + SEEK MPROD_CODE + + // stock item rule stored in the product file + IF !EMPTY(PRODUCT->RULE_PACK) + RESULT = CHK_RULE(PRODUCT->RULE_PACK, GET_ARR, , _SELFILE) + IF RESULT + RETVAL := .T. + ELSE + RETVAL := .F. + ENDIF + ENDIF + SELECT (SAVESEL) +ENDIF +RETURN RETVAL + +****************************************************************** +FUNCTION CK_STD_STOCK_SIZE(MPROD_CODE, GET_ARR, ACTION, ADDL_MODE) +LOCAL SAVESEL := SELECT(), RETVAL := .T. +LOCAL SAVEORD, ELEM1, ELEM2, PARENT_ARR +LOCAL POTENTIAL_STOCK:=.F., SEEKPROD +LOCAL OR_TOP := 0, OR_BOT := 0 +LOCAL OR_RES := 'N' +LOCAL SS_RES := 'N', SIZE_ARR +LOCAL SK_RES := 'N', MWIDTH := 0, MHEIGHT := 0 +LOCAL I, WK_TOP //P3N - 2/20/98 + +IF ACTION = NIL + ACTION = 'ALL' +ENDIF + +FILE2USE := 'USERFILE2' + + +MWIDTH := DECVAL( (FILE2USE)->WIDTH ) +MHEIGHT:= DECVAL( (FILE2USE)->HEIGHT) + + + +SELECT STD_SIZES +DONSETORD(2) + +ELEM1 = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'ORIEL TOP'}) +ELEM2 = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'ORIEL BOTT'}) +IF ELEM2 > 0 + OR_BOT := DECVAL(GET_ARR[ELEM2, 4]) +ENDIF +IF ELEM1 > 0 + OR_TOP := DECVAL(GET_ARR[ELEM1, 4]) +ENDIF + + + +IF EMPTY(USERFILE2->PAR_PROD) // NOT ADDL MODE +**SEEK MPROD_CODE + STR( (FILE2USE)->ACT_WIDTH,10,6) + STR( (FILE2USE)->ACT_HEIGHT,10,6) + SIZE_ARR := CONV_SIZE( MPROD_CODE, MWIDTH,; + MHEIGHT, (FILE2USE)->HOW_MEAS, .T.) + SEEK MPROD_CODE + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6) +ELSE +* SIZE_ARR := CONV_SIZE(USERFILE2->PAR_PROD, DECVAL(USERFILE2->WIDTH),; +* DECVAL(USERFILE2->HEIGHT), USERFILE2->HOW_MEAS) +* SIZE_ARR := CONV_SIZE(USERFILE2->PAR_PROD, USERFILE2->ACT_WIDTH,; +* USERFILE2->ACT_HEIGHT, USERFILE2->HOW_MEAS) + SIZE_ARR := CONV_SIZE(USERFILE2->PAR_PROD, MWIDTH,; + MHEIGHT, USERFILE2->HOW_MEAS, .T.) +**SEEK USERFILE2->PAR_PROD + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6) + SEEK MPROD_CODE + STR(SIZE_ARR[1],10,6) + STR(SIZE_ARR[2],10,6) +ENDIF +IF ADDL_MODE + PARENT_ARR := SET_PARENT(USERFILE2->ORDER_NUM+STR(USERFILE2->LINE_NUM) ) + SS_RES := PARENT_ARR[1] //STD_SIZE + SK_RES := PARENT_ARR[2] //IN_STOCK + OR_RES := PARENT_ARR[3] //ORIEL_SIZE +** SS_RES = PARENT SS +** SK_RES = PARENT SK +** OR_RES = PARENT OR +ELSE + IF FOUND() // POTENTIAL STD/STOCK/STOCK_ORIEL + SS_RES := 'Y' + IF STD_SIZES->ORIEL_SIZE$'X' .OR. OR_TOP <> OR_BOT + OR_RES := 'Y' + ELSE //** P3N - 2/20/98 -( KC ONLY SITE W\"IS ORIEL") + //** NON STANDARD ORIEL + I := ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'IS ORIEL'}) + IF EMPTY(I) + // NO IS ORIEL OPTION + ELSEIF ALLTRIM(GET_ARR[I,4]) == 'ORIEL' //USER OPT RESPONSE + OR_RES := 'Y' //SET AS AN ORIEL + I := ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'ORIEL TOP'}) + IF EMPTY(I) + // NO ORIEL TOP + ELSEIF EMPTY(GET_ARR[I,4]) //NO USER OPT RESPONSE FOR ORIEL TOP + //DEFAULT TO STD SIZE ORIEL TOP + IF EMPTY(STD_SIZES->ORIEL_TOP) + ELSE + WK_TOP := STR(STD_SIZES->ORIEL_TOP,7,4) + GET_ARR[I,4] := PADR(WK_TOP, 20, ' ') + ENDIF + ENDIF + ENDIF + ENDIF + + // NO ATTACHMENTS TO BE CONSIDERED IN STOCK + // 4-2-97 CHECK ATTACHMENTS FOR STOCK / PRODUCE ITEMS + **IF STD_SIZES->STOCK_SIZE$'X' .AND. EMPTY( (FILE2USE)->PAR_PROD ) + IF STD_SIZES->STOCK_SIZE$'X' + POTENTIAL_STOCK := CK_STOCK_SIZE(MPROD_CODE, GET_ARR) + ENDIF + + IF POTENTIAL_STOCK .AND. (FILE2USE)->STD_OPTS$'Y' + // NO ORIEL ATTRIBUTES FOUND .OR. SPECIFIED + IF (FILE2USE)->STD_OPTS$'Y' + IF OR_TOP = 0 .AND. OR_BOT = 0 + SK_RES := 'Y' + ENDIF + ENDIF + ENDIF + ELSE + IF OR_TOP <> OR_BOT + OR_RES := 'Y' + ENDIF + ENDIF +ENDIF + +REPLACE (FILE2USE)->STD_SIZE WITH SS_RES +REPLACE (FILE2USE)->IN_STOCK WITH SK_RES +REPLACE (FILE2USE)->ORIEL_SIZE WITH OR_RES + +DONSETORD(SAVEORD) + +SELECT (SAVESEL) +RETURN RETVAL + +****************************************************************** +* GET THE PARENT STOCK, STD_SIZE, ORIEL_SIZE * +****************************************************************** +FUNCTION SET_PARENT(KEY) +LOCAL RET_ARR := {'N', 'N', 'N'} +IF (CUR_OL)->(DBSEEK(KEY)) + RET_ARR[1] := (CUR_OL)->STD_SIZE + RET_ARR[2] := (CUR_OL)->IN_STOCK + RET_ARR[3] := (CUR_OL)->ORIEL_SIZE +ENDIF +RETURN RET_ARR +****************************************************************** +FUNCTION CONV_SIZE(PROD, MWIDTH, MHEIGHT, HM, USE_SAW) +// CONVERTS WIDTH,HEIGHT TO TIP TO TIP MEASUREMENT FOR PROD_CODE + +LOCAL SAVESEL := SELECT(), SAVEREC, ES_WD := 0, ES_HT := 0 +SELECT PRODUCT +SAVEREC := RECNO() +SEEK PROD + +IF USE_SAW = NIL + USE_SAW := .F. +ENDIF + +DO CASE + // THE FINAL SIZE IS THE CONVERTED ENTRY SIZE + CATEGORY ADJS + // AND ADJUSTMENTS BASED ON HOW MEASURED + + // THIS IS THE CONVERTED ENTRY SIZE OF EITHER STAND-ALONE PRODUCT + // OR THE PRODUCT IT IS TO BE ATTACHED TO. + CASE UPPER( HM ) == 'OS' //* OPENING SIZE + ES_WD := PRODUCT->OS_WIDTH + MWIDTH + ES_HT := PRODUCT->OS_HEIGHT + MHEIGHT + + CASE UPPER( HM ) == 'TO' //* TT WIDTH OS HEIGHT + ES_WD := PRODUCT->TT_WIDTH + MWIDTH + ES_HT := PRODUCT->OS_HEIGHT + MHEIGHT + + CASE UPPER( HM ) == 'OT' //* OS WIDTH TT HEIGHT + ES_WD := PRODUCT->OS_WIDTH + MWIDTH + ES_HT := PRODUCT->TT_HEIGHT + MHEIGHT + + CASE UPPER( HM ) == 'WO' //* WIDTH ONLY + ES_WD := PRODUCT->NS_WIDTH + MWIDTH + ES_HT := 0 + + CASE UPPER( HM ) == 'BW' //* BASEMENT WINDOW + ES_WD := PRODUCT->TT_WIDTH + MWIDTH + ES_HT := 0 + + CASE UPPER( HM ) == 'TT' //* TIP-TIP + ES_WD := PRODUCT->TT_WIDTH + MWIDTH + ES_HT := PRODUCT->TT_HEIGHT + MHEIGHT + + CASE UPPER( HM ) == 'NS' //* NOMINAL SIZE + ES_WD := PRODUCT->NS_WIDTH + MWIDTH + ES_HT := PRODUCT->NS_HEIGHT + MHEIGHT + +ENDCASE + +IF USE_SAW + ES_WD := ES_WD + PRODUCT->SAW_WIDTH + ES_HT := ES_HT + PRODUCT->SAW_HEIGHT +ENDIF + + +GOTO SAVEREC +SELECT (SAVESEL) + +RETURN {ES_WD, ES_HT} + +****************************************************************** +FUNCTION STD_SIZE_EDIT(MPROD_CODE) +LOCAL LEFTPART, RITEPART, TT_ARR := {} +LOCAL MIDDLE := AT(' X ', OPT_VALUE) +LOCAL NOM_SIZE := .F., MENTRY_SIZE := ALLTRIM(OPT_VALUE) +LOCAL REG_SIZE := .T. +LOCAL WDFEET, WDINCH, HTFEET, HTINCH +LOCAL LEFTVAL, RITEVAL, WONLY_OK := .F. +* +// CHECK FOR VALID 99 X 99 SIZE + +PRODUCT->(DBSEEK(MPROD_CODE)) +IF EMPTY(PRODUCT->ALLOW_SIZE) .OR. 'W'$PRODUCT->ALLOW_SIZE + WONLY_OK := .T. +ENDIF + +IF MIDDLE = 0 + REG_SIZE := .F. +ELSE + // GOT ?? X ??, NOW CHECK FOR VALID ITEMS BOTH SIDES OF "X" + LEFTPART = ALLTRIM(LEFT(OPT_VALUE, MIDDLE-1)) + RITEPART = ALLTRIM(SUBS(OPT_VALUE, MIDDLE+3)) + LEFTVAL := DECVAL(LEFTPART) + RITEVAL := DECVAL(RITEPART) + + IF !CHK_FRACTION(LEFTPART, 'EDIT') .OR. !CHK_FRACTION(RITEPART,'EDIT') + REG_SIZE := .F. + ELSEIF DECVAL(LEFTPART) = 0 + REG_SIZE := .F. + ELSEIF DECVAL(RITEPART) = 0 .AND. !WONLY_OK + REG_SIZE := .F. + ENDIF + +ENDIF + +IF !REG_SIZE .AND. !NOM_SIZE + IF EMPTY(OPT_VALUE) //** P3N - 4/2/98 + RETURN .T. //** ALLOW THE DELETION OF STD SIZES + ELSE + SS_ERROR() + RETURN .F. + ENDIF +ELSE + REPLACE OS_WIDTH WITH LEFTVAL + REPLACE OS_HEIGHT WITH RITEVAL + REPLACE OPT_VALUE WITH LEFTPART + ' X ' + RITEPART + TT_ARR := SIZE_CONVERT(MPROD_CODE, 'OS', 'TT', OS_WIDTH, OS_HEIGHT) + REPLACE TT_WIDTH WITH TT_ARR[1] + REPLACE TT_HEIGHT WITH TT_ARR[2] + +ENDIF + +RETURN .T. + +*********************************** + +FUNCTION SS_ERROR() +ERR_BOX( ' Standard Opening Sizes MUST Be in Format ', ; + ' 99 X 99 (With Fractions) ', ; + ' PLEASE RE-ENTER ') +RETURN .T. + + +* * * * * * * * * * * * * +STATIC PROCEDURE SAY_GET(CMD, GET_COL, LAST_GETVAR, NUM2GET, GET_ARR, MSTD_OPTS, ADDL_MODE, ROW) +LOCAL I, STRT_INLIST, L2, NUMGET := 0 +**LOCAL ROW + +SETCOLOR(HNOR) +**ROW = 4 + +STRT_INLIST = LAST_GETVAR - NUM2GET + 1 +FOR I := STRT_INLIST TO LAST_GETVAR + + IF GET_ARR[I,7] // PROCESS THIS ONE? + ROW++ +*** NUMGET++ + NUMGET := NUMGET + 1 + IF CMD = 'SAY' + @ ROW,GET_COL SAY ':' + @ ROW,GET_COL+1 SAY GET_ARR[I,4] + @ROW(), COL() SAY ':' + ELSE // GETLOOP + @ ROW,GET_COL+1 GET GET_ARR[I,4] WHEN WHEN_GET(GET_ARR, ADDL_MODE) ; + VALID VALID_GET(GET_ARR, ADDL_MODE) + ENDIF + ENDIF +NEXT +IF CMD = 'GET' .AND. NUMGET > 0 + READ() +ENDIF +SETCOLOR(LNOR) + +RETURN + + +* * * * * * * * * * * * * +FUNCTION VALID_GET(GET_ARR, ADDL_MODE) +// THIS IS THE VALID CONDITION ON THE GETS IN SAY_GET +// NEED TO VALIDATE THE PICK LIST INPUT + +LOCAL X, ELEM, NEW_VAL, MTYPE, ELEM2, RESULT +LOCAL DEF_VALU, OPT_ARR, CUROPT + +// IF IT'S A CURSOR MOVEMENT, DON'T DO THE VALID +IF LASTKEY() = K_UP .OR. LASTKEY() = K_DOWN .OR. LASTKEY() = K_PGUP ; + .OR. LASTKEY() = K_PGDN + @ 0,0 SAY SPACE(12) + SETKEY(-4,{|| ''}) + RETURN .T. +ENDIF + +X = GETACTIVE() +ELEM = X[2,1] +*****NEW_VAL = X[12] +NEW_VAL = X:BUFFER +MTYPE = GET_ARR[ELEM,2] + //** P3N - 10/13/06 - PER ELLEN IF ADDL OPT USE PARENT FRAME COLOR +CUROPT := GET_ARR[ELEM,1] //** P3N - 10/13/06 + +DO CASE + CASE MTYPE$'PT' // PICK LIST OR TABLE LIST??? + IF ADDL_MODE //** P3N - 10/13/06 + IF CUROPT = 'FR COLOR' //** P3N - 10/13/06 + IF EMPTY(NEW_VAL) //** P3N - 10/13/06 + NEW_VAL := USERFILE2->PAR_COLOR //** P3N - 10/13/06 + ENDIF //** P3N - 10/13/06 + ENDIF //** P3N - 10/13/06 + ENDIF //** P3N - 10/13/06 + ELEM2 = ASCAN(GET_ARR[ELEM,3], {|XX| ALLTRIM(XX[1]) == ALLTRIM(NEW_VAL)}) +//**IF ELEM2 = 0 //** P3N - 10/13/06 + IF ELEM2 = 0 .OR. ADDL_MODE //** P3N - 10/13/06 + IF ADDL_MODE .AND. NEW_VAL = 'N/A' //** P3N - 10/13/06 + RESULT := .T. + ELSE + RESULT = SET_PICK(GET_ARR, NEW_VAL) // GET INPUT FROM PICKLIST + ENDIF +//** RESULT = SET_PICK(GET_ARR) // GET INPUT FROM PICKLIST + IF !RESULT + RETURN .F. + ENDIF + ENDIF + + IF ELEM2 > 0 + OPT_ARR := GET_ARR[ELEM,3] + GET_ARR[ELEM,11] := OPT_ARR[ELEM2,11] // UPDATE CURRENT PAR_PROD + ENDIF + + IF X:CHANGED + X:KILLFOCUS() // TERMINATE THE GET + // CHECK TO SEE IF THE "NEW" VALUE IS THE DEFAULT OR NOT. + DEF_VALU := GET_DEFAULT(ELEM, GET_ARR, ADDL_MODE) + IF GET_ARR[ELEM,4] == DEF_VALU + GET_ARR[ELEM,9] := '*' + ELSE + GET_ARR[ELEM,9] := ' ' + ENDIF + ELSE + X:KILLFOCUS() // TERMINATE THE GET + ENDIF + + + CASE MTYPE$'U' + IF X:CHANGED + IF GET_ARR[ELEM,1] = 'ORIEL TOP' .OR. GET_ARR[ELEM,1] = 'ORIEL BOTT' + CK_STD_STOCK_SIZE(USERFILE2->PROD_CODE, GET_ARR, 'ALL', ADDL_MODE) + ENDIF + ENDIF + + +ENDCASE +@ 0,0 SAY SPACE(12) +SETKEY(-4,{|| ''}) +RETURN .T. + + + + +* * * * * * * * * * * * * +FUNCTION WHEN_GET(GET_ARR, ADDL_MODE) +// THIS IS THE WHEN CONDITION ON THE GETS IN SAY_GET + +LOCAL X, ELEM, ELEM2, MTYPE, ARR := {}, NCHOICE +LOCAL CUR_VAL, NTOP, NLEFT, NRIGHT, NBOTTOM, SAVEBOX +LOCAL L, BCENTER, OFFSET, HEADER, RESULT, NCOLOR, NPOS +LOCAL RULE_ARR := {}, MELEM, SAVESEL := SELECT(), DEF_VALU, GET_LEN +LOCAL CHG_2_DEF := .F., MRULE, ADDIT + +@ 0,0 SAY SPACE(12) + +X = GETACTIVE() +ELEM = X[2,1] +MTYPE = GET_ARR[ELEM,2] + +// CHECK INCLUDE RULE AT THE ATTRIBUTE LEVEL +RESULT = CHK_RULE(GET_ARR[ELEM,6], GET_ARR, , _SELFILE) +IF !RESULT + // SEE IF THERE IS AN OPTION RECORD OUT THERE & DELETE IT! + SELECT USERFILE8 + IF ADDL_MODE + SEEKKEY = USERFILE2->ORDER_NUM + USERFILE2->PROD_CODE + STR(USERFILE2->LINE_NUM,3) + GET_ARR[ELEM,1] // ATT_CODE + ELSE + SEEKKEY = USERFILE2->ORDER_NUM + STR(USERFILE2->LINE_NUM,3) + GET_ARR[ELEM,1] // ATT_CODE + ENDIF + + SEEK SEEKKEY + IF FOUND() + REC_LOCK(3) + REPLACE ORDER_NUM WITH '' + REPLACE LINE_NUM WITH 0 + REPLACE ATT_CODE WITH '' + REPLACE USER_RESP WITH '' + IF ADDL_MODE + REPLACE PROD_CODE WITH '' + ENDIF + DELETE + UNLOCK + ENDIF + SELECT(SAVESEL) + + // MAKE VALUE = "N/A" AND REDISPLAY IT + IF MTYPE$'U' + GET_ARR[ELEM,4] = ' ' + SPACE( LEN(GET_ARR[ELEM,4]) -3 ) + ELSE + GET_ARR[ELEM,4] = 'N/A' + SPACE( LEN(GET_ARR[ELEM,4]) -3 ) + ENDIF + X:DISPLAY(GET_ARR[ELEM,4]) // PUT VALUE ON THE SCREEN + RETURN .F. // RULES DIDN'T PASS! +ENDIF + +// IF NO DEFAULT OPTIONS OR (STD_OPTS AND PICKED DEFAULT) +// REEVALUATE THE DEFAULT JUST IN CASE OTHER CHANGES RESULT +// IN A NEW DEFAULT +GET_LEN := LEN(GET_ARR[ELEM,4]) +IF GET_ARR[ELEM,2]$'PT' + // LOOK FOR THE DEFAULT VALUE + DEF_VALU := GET_DEFAULT(ELEM, GET_ARR, ADDL_MODE) + IF !EMPTY(DEF_VALU) + IF GET_ARR[ELEM,9] = '*' ; + .AND. GET_ARR[ELEM,4] <> DEF_VALU + CHG_2_DEF := .T. + ELSE + IF USERFILE2->STD_OPTS$'Y' ; + .AND. GET_ARR[ELEM,4] <> DEF_VALU + CHG_2_DEF := .T. + ELSE + IF !USERFILE2->STD_OPTS$'Y' ; // NON STANDARD OPTIONS-INVALID OPTION + .AND. !VALID_OPTION(GET_ARR[ELEM]) + CHG_2_DEF := .T. + ENDIF + ENDIF + ENDIF + ENDIF + + IF CHG_2_DEF .AND. GET_ARR[ELEM,4] <> DEF_VALU + GET_ARR[ELEM,4] = DEF_VALU + GET_ARR[ELEM,9] := '*' + // IF THE CALCULATED DEFAULT DON'T GET IT! + X:DISPLAY(GET_ARR[ELEM,4]) // PUT VALUE ON THE SCREEN + RETURN .F. + ENDIF +ENDIF + +// HILITE THE CURRENT GET +CUR_VAL = GET_ARR[X[2,1], X[2,2] ] +X:SETFOCUS() // MUST SET FOCUS TO DO THE FOLLOWING +NCOLOR = X:COLORSPEC() // GET THE CURRENT COLORS +NPOS = AT(',', NCOLOR) +NCOLOR = LEFT(NCOLOR,NPOS) + 'W+/R' +X:COLORDISP(NCOLOR) // SET THE SELECTED COLOR +X:DISPLAY(CUR_VAL) // PUT VALUE ON THE SCREEN +X:KILLFOCUS() // TERMINATE THE GET + +DO CASE + CASE MTYPE = 'U' // USER INPUT + @ 0,0 SAY SPACE(12) + SETKEY(-4,{|| ''}) + RETURN .T. + CASE MTYPE = 'C' // CALCULATION TYPE - SHOULD NEVER GET HERE! + @ 0,0 SAY SPACE(12) + SETKEY(-4,{|| ''}) // MAKE SURE HOT KEY IS OFF + RETURN .F. // DONT DO A GET! + + CASE MTYPE$'P' // PICK LIST + + FOR L = 1 TO LEN(GET_ARR[ELEM,3]) // LOAD UP THE AVAILABLE OPTIONS!! +******AADD(ARR, GET_ARR[ELEM,3,L,1]) +******MRULE := GET_ARR[ELEM,3,L,3] + MRULE := GET_ARR[ELEM,3,L,18] + ADDIT := .T. + IF !EMPTY(MRULE) // DON'T INCLUDE IF RULE ISN'T TRUE + ADDIT := CHK_RULE(MRULE, GET_ARR, , _SELFILE) // SINCE NOT A DEFAULT SITUATION + ENDIF + IF ADDIT + AADD(ARR, GET_ARR[ELEM,3,L,1]) + ENDIF + NEXT + IF LEN(ARR) > 1 + // SET UP HOT KEY + SETKEY(-4, {|| SET_PICK(GET_ARR)}) + SETCOLOR(HREV) + @ 0,0 SAY 'F5 for List' + SETCOLOR(LNOR) + // CHECK IF CURRENT VALUE IS IN VALID LIST + IF ASCAN(ARR, {|X| X == GET_ARR[ELEM,4] }) = 0 + GET_ARR[ELEM,4] := SPACE(LEN(GET_ARR[ELEM,4])) + KEYBOARD CHR(13) // FORCE IT INTO THE PICKLIST!!! + ENDIF + ELSE + // IF 1 ELEMENT AND GOING DOWN THRU LIST, STUFF IT INTO KEYBOARD + IF LEN(ARR) = 1 .AND. ; + !(LASTKEY() = K_UP .OR. LASTKEY() = K_PGUP ) + KEYBOARD ARR[1] + ENDIF + ENDIF + IF GET_ARR[ELEM,4] = 'No DEFAULT Options!!' ; + .OR. ALLTRIM(GET_ARR[ELEM,4]) = 'N/A' + KEYBOARD CHR(13) // FORCE IT INTO THE PICKLIST!!! + ENDIF + + RETURN .T. + + + +ENDCASE + + +@ 0,0 SAY SPACE(12) +SETKEY(-4,{|| ''}) +RETURN .T. + + +*************************************************************** + +FUNCTION VALID_OPTION(VAL_ARR) +LOCAL OPTARR := VAL_ARR[3] +LOCAL ELEM := ASCAN(OPTARR, {|X| X[1] == VAL_ARR[4]}) +IF ELEM > 0 + RETURN .T. +ELSE + RETURN .F. +ENDIF + +*************************************************************** +* * * * * * * * * * * * * +FUNCTION SET_ORDKEY +// SET A HOT KEY TO UPDATE THE ORDER OPTIONS FROM THE ORDER LINE SCREEN + +LOCAL SAVECOLOR := SETCOLOR(HREV) + +SET KEY -3 TO GET_LINEOPTS(USERFILE2->PROD_CODE) +@ 0,0 SAY 'F4 to Update Options' +SETCOLOR(SAVECOLOR) +RETURN NIL + +* * * * * * * * * * * * * +FUNCTION RESET_ORDKEY +// RESET A HOT KEY TO UPDATE THE ORDER OPTIONS FROM THE ORDER LINE SCREEN + +SET KEY -3 +RETURN NIL +* * * * * * * * * * * * * +* * * * * * * * * * * * * +//** P3N - 4/16/98 (YES I survived tax day!) - BARELY +**FUNCTION GET_TOTQTY() +**LOCAL WKFLD := ALLTRIM(STR(LINE_NUM, 3)) + '/' + ALLTRIM(PROD_CODE) +**LOCAL SHIPQTY := CHK_SHIPQTY('SHIPQTY') +**ERR_BOX ('** Order Quantity for '+WKFLD+' is - ' + ALLTRIM(STR(QUANTITY,3)) + ' **', ; +** '** Quantity Shipped '+SPACE(LEN(WKFLD))+' is - ' + ALLTRIM(STR(SHIPQTY,3)) + ' **' ) +**RETURN .T. +* * * * * * * * * * * * * +* * * * * * * * * * * * * +//HOTKEY CTRL+T RETURNS THE CURRENT DATE FOR THE ORDER CONTROL SCREEN +//** P3N - 4/16/98 (YES I survived tax day!) - BARELY +* * * * * * * * * * * * * +//** NOTE: IF THE IMPORTCUST DEFINITION FOR THE ORD_SHIP (CGW0OSW/CGW0OST) +//** NOTE: OR THE IMPORTCUST DEFINITION FOR THE ORD_PROD (CGW0OPW/CGW0OPT) +//** NOTE: CHANGES FOR THE FIELDS COMPL_DATE, SHIP_DATE, OR CONFIRM_DATE +//** NOTE: THIS LOGIC IS SUBJECT TO CHANGE ACCORDING TO THE ORDER OF THE +//** NOTE: THE FIELDS IN THE IMPORT CUST AND THE COLUMN HEADINGS. +* * * * * * * * * * * * * +**FUNCTION GET_CURDATE(REMOVEDT) +**LOCAL OCURR_COL := OBROW:GETCOLUMN(OBROW:COLPOS) +**LOCAL FLD, COL_HEADING := UPPER( OCURR_COL:HEADING ) +**LOCAL RETVAL := .T., REPLVAL +**IF EMPTY(REMOVEDT) +** REPLVAL := CURDATE +**ELSEIF REMOVEDT == 'REMOVEDT' +** REPLVAL := CTOD(' / / ') +**ENDIF +**REC_LOCK(3) +**IF COL_HEADING = 'PROD DATE' +** FLD := COLARR[3,2] //** COMPL_DATE-ORD_PROD +** REPLACE &FLD WITH REPLVAL //** COMPL_DATE-ORD_PROD +**ELSEIF COL_HEADING = 'SHIP ' +** FLD := COLARR[5,2] //** SHIP_DATE-ORD_SHIP +** IF EMPTY(&FLD) //** SHIP_DATE-ORD_SHIP +** REPLACE &FLD WITH REPLVAL //** SHIP_DATE-ORD_SHIP +** ENDIF +****ELSEIF COL_HEADING = 'DELIV' +**** FLD := COLARR[6,2] //** CONFIRM_DT-ORD_SHIP +**** REPLACE &FLD WITH REPLVAL //** CONFIRM_DT-ORD_SHIP +**ENDIF +**IF DUPL_CTRLDT() +** REPLACE &FLD WITH CTOD(' / / ') //** DUPL DATE RESET TO EMPTY +**ENDIF +**UNLOCK +**RETURN RETVAL +** +* * * * * * * * * * * * * +*********************************** + +//**FUNCTION SET_PICK(GET_ARR) //** P3N 10/13/06 +FUNCTION SET_PICK(GET_ARR, NEW_VAL) //** P3N - 10/13/06 +// USE PICKLIST FOR CURRENT GET - CONTAINS LIST OF OPTIONS AVAILABLE + +LOCAL X, ELEM, L, ARR := {}, ELEM2, CUR_VAL, MIRULE +LOCAL NTOP, NLEFT, NRIGHT, NBOTTOM, SAVEBOX +LOCAL BCENTER, OFFSET, HEADER, RESULT, MRULE, MDEF, ADDIT := .F. +LOCAL SVSCRN := SAVESCREEN() +SET KEY -4 TO // TURN OFF HOT KEY + +X = GETACTIVE() +ELEM = X[2,1] + + +// DON'T ADD TO ARRAY IF THE RULE IF FALSE AND NO DEFAULT FLAG +FOR L = 1 TO LEN(GET_ARR[ELEM,3]) + // IF NO ASTERICK AND A RULE IS PRESENT + // THEN ONLY AN OPTION IF THE RULE IS TRUE. + MRULE := GET_ARR[ELEM,3,L,3] + MIRULE := GET_ARR[ELEM,3,L,18] + MDEF := GET_ARR[ELEM,3,L,2] + ADDIT := .T. + + IF !EMPTY(MIRULE) // DON'T INCLUDE IF RULE ISN'T TRUE + ADDIT := CHK_RULE(MIRULE, GET_ARR, , _SELFILE) + ELSE + IF MDEF = ' ' .AND. !EMPTY(MRULE) // DON'T INCLUDE IF RULE ISN'T TRUE + ADDIT := CHK_RULE(MRULE, GET_ARR, , _SELFILE) // SINCE NOT A DEFAULT SITUATION + ENDIF + ENDIF + IF EMPTY(NEW_VAL) //** P3N - 10/13/06 + //** USE CUR_VAL //** P3N - 10/13/06 + ELSE //** P3N - 10/13/06 + //** P3N - 10/13/06 - PER ELLEN IF ADDL OPT USE PARENT FRAME COLOR + ADDIT := .F. //** P3N - 10/13/06 + IF GET_ARR[ELEM,3,L,1] = NEW_VAL //** P3N - 10/13/06 + ADDIT := .T. //** P3N - 10/13/06 + ENDIF //** P3N - 10/13/06 + ENDIF //** P3N - 10/13/06 + IF ADDIT + AADD(ARR, GET_ARR[ELEM,3,L,1]) + ENDIF +NEXT + +IF LEN(ARR) > 1 + CUR_VAL = GET_ARR[X[2,1], X[2,2] ] + HEADER = GET_ARR[ELEM,1] + ELEM2 = ASCAN(ARR, {|X| X == CUR_VAL}) + + NTOP = X:ROW - 1 + NLEFT = X:COL + LEN(CUR_VAL) + NRIGHT = NLEFT + LEN(CUR_VAL) + NBOTTOM = NTOP + LEN(ARR) + 1 + IF NBOTTOM > MAXROW() -2 + NBOTTOM = MAXROW() -2 + ENDIF + + + SAVEBOX = SAVESCREEN(NTOP,NLEFT,NBOTTOM+1,NRIGHT+1) + * + SETCOLOR(BLACK) + @ NTOP+1,NLEFT+1 CLEAR TO NBOTTOM+1,NRIGHT+1 // DRAW SHADOW BOX + SETCOLOR(HNOR) + @ NTOP,NLEFT CLEAR TO NBOTTOM,NRIGHT // DRAW BACKROUND COLOR + @ NTOP,NLEFT TO NBOTTOM,NRIGHT // DRAW DOUBLE LINE + // FIND THE CENTER OF THE BOX + BCENTER = INT( (NRIGHT - NLEFT) / 2) + OFFSET = INT(LEN(HEADER) / 2) + SETCOLOR(HREV) + @ NTOP,NLEFT+(BCENTER-OFFSET) SAY HEADER + + SETCOLOR(LNOR) + DO WHILE .T. + NCHOICE := ACHOICE(NTOP+1,NLEFT+1,NBOTTOM-1,NRIGHT-1,ARR,,,ELEM2) + // DON'T LEAVE UNLESS VALID INPUT OR ESCAPE KEY IS PRESSED!!! + IF NCHOICE <> 0 + EXIT + ELSE + IF LASTKEY() = 27 + RESTSCREEN(NTOP,NLEFT,NBOTTOM+1,NRIGHT+1,SAVEBOX) + SETKEY(-4, {|| SET_PICK(GET_ARR)}) // TURN HOT KEY BACK ON + RETURN .F. + ENDIF + ENDIF + ENDDO +ELSE + NCHOICE = 1 +ENDIF + +IF EMPTY(NCHOICE) .OR. NCHOICE > LEN(ARR) + RESTSCREEN(,,,,SVSCRN) + SETKEY(-4, {|| SET_PICK(GET_ARR)}) // TURN HOT KEY BACK ON + RETURN .F. +ELSE + X:BUFFER = ARR[NCHOICE] // STUFF THE BUFFER + X:ASSIGN() // UPDATE THE GET VAR + IF LEN(ARR) > 1 + RESTSCREEN(NTOP,NLEFT,NBOTTOM+1,NRIGHT+1,SAVEBOX) + ENDIF + IF PROCNAME(1) = '(b)WHEN_GET' + KEYBOARD ARR[NCHOICE] + ENDIF + SETKEY(-4, {|| SET_PICK(GET_ARR)}) // TURN HOT KEY BACK ON! + RETURN .T. +ENDIF +************************************************* +FUNCTION CHK_RULE(MRULE, GET_ARR, MTYPE, SELFILE, GETELM) +// CHECK THE RULE FOR MRULE +// MTYPE = 'M' FOR MATH PACKS + +LOCAL MELEM, L, RULE_ARR := {}, RESULT := .T. +STATIC ALL_RULES + +IF ALL_RULES = NIL + ALL_RULES := {} +ENDIF + +IF !EMPTY(MRULE) // RULE PACK NAME + MELEM = 0 + FOR L = 1 TO LEN(ALL_RULES) + IF ALLTRIM(ALL_RULES[L,1]) == ALLTRIM(MRULE) + MELEM = L + EXIT + ENDIF + NEXT + + IF MELEM = 0 + RULE_ARR = GETRULES(MRULE, SELFILE, GET_ARR, GETELM) // RULE PACK NAME + IF !EMPTY(RULE_ARR) + AADD(ALL_RULES, {MRULE , RULE_ARR}) + MELEM = LEN(ALL_RULES) + ELSE + //////////////////////////////////////////////////////////// + // A RULE NAME WAS PASSED BUT NO RULE PACKET INFO WAS FOUND!!!! + //////////////////////////////////////////////////////////// + IF MTYPE = 'M' + RETURN RULE_ARR + ELSE + RETURN .T. + ENDIF + ENDIF + ELSE + RULE_ARR = ALL_RULES[MELEM,2] + ENDIF + IF MTYPE = 'M' + RETURN RULE_ARR + ELSE + RESULT = EVALCLRULES({RULE_ARR},,GET_ARR, SELFILE) // RULE ARRAY + ENDIF +ENDIF +RETURN RESULT + + +******************************************************************** +FUNCTION GET_DEFAULT(ELEM, GET_ARR, ADDL_MODE) +// GET DEFAULT VALUE OPTION + +LOCAL RETVAL := '', L2, RESULT, I, GOODNUM +LOCAL RETVALLEN, NUM_AVAIL, CK_ARR:= {} + +IF !EMPTY(GET_ARR[ELEM,3]) // HAS OPTIONS + ** CHECK TO SEE IF THE ATTRIBUTE IS RULE DEPENDENT. + IF !CHK_RULE(GET_ARR[ELEM,6], GET_ARR, , _SELFILE) // THE RULE NAME AT ATTRIBUTE LEVEL + RETURN RETVAL + ENDIF + + FOR L2 = 1 TO LEN(GET_ARR[ELEM,3]) + IF EMPTY(GET_ARR[ELEM,3,L2,18]) ; // IF OPTION HAS AN INCLUDE RULE + .OR. CHK_RULE(GET_ARR[ELEM,3,L2,18], GET_ARR, , _SELFILE) // THE RULE NAME + AADD(CK_ARR, GET_ARR[ELEM,3,L2]) + ENDIF + NEXT + +**FOR L2 = 1 TO LEN(GET_ARR[ELEM,3]) + FOR L2 = 1 TO LEN(CK_ARR) +** IF GET_ARR[ELEM,3,L2,2] = '*' .OR. LEN(GET_ARR[ELEM,3]) = 1 + IF CK_ARR[L2,2] = '*' .OR. LEN(CK_ARR) = 1 + ** CHECK TO SEE IF THE DEFAULT OPTION IS RULE DEPENDENT. + RESULT = .T. + // CHECK FOR OPTION RULE! +**** IF !EMPTY(GET_ARR[ELEM,3,L2,3]) // IF OPTION HAS A DEFAULT RULE + IF !EMPTY(CK_ARR[L2,3]) // IF OPTION HAS A DEFAULT RULE +***** RESULT = CHK_RULE(GET_ARR[ELEM,3,L2,3], GET_ARR, , _SELFILE) // THE RULE NAME + RESULT = CHK_RULE(CK_ARR[L2,3], GET_ARR, , _SELFILE) // THE RULE NAME + ENDIF + IF RESULT // GOOD RESULT +****** RETVAL = GET_ARR[ELEM,3,L2,1] // DEFAULT VALUE + RETVAL = CK_ARR[L2,1] // DEFAULT VALUE + RETVALLEN := LEN(RETVAL) + IF GET_ARR[ELEM,2] = 'T' // IF TABLE TYPE + IF ISDIGIT(LEFT(LTRIM(RETVAL),1)) + RETVAL = 'V' + LTRIM(RETVAL) + ELSE + RETVAL = SUBS(LTRIM(RETVAL)+SPACE(RETVALLEN), 1, RETVALLEN) + ENDIF + ENDIF + + EXIT // NO NEED TO DO ANYMORE! + ENDIF + ENDIF + NEXT +ENDIF +RETURN RETVAL + + +****************************************************************** +FUNCTION PAR_ATT_VALU(ADDL_MODE, REALFILE) +// DISPLAY THE COLOR OF PRODUCT ON THE LINE ITEM SCREEN FOR EACH MODEL + +LOCAL RETVAL, SEEKKEY +LOCAL SAVESEL := SELECT() + +IF REALFILE = NIL + REALFILE := 'USERFILE8' // USER ORDER_OPTS / ADDL_OPTS , NOT USERFILE8 +ENDIF + + +IF ADDL_MODE = NIL + ADDL_MODE := .F. +ENDIF + +IF ADDL_MODE + SEEKKEY := &CUR_MAST->ORDER_NUM + PROD_CODE + STR(USERFILE2->LINE_NUM,3) + 'FR COLOR' +ELSE + SEEKKEY := &CUR_MAST->ORDER_NUM + STR(USERFILE2->LINE_NUM,3) + 'FR COLOR' +ENDIF + +SELECT (REALFILE) +SEEK SEEKKEY +IF FOUND() + RETVAL := TRIM( (REALFILE)->USER_RESP) +ELSE + RETVAL := 'N/A' +ENDIF +SELECT (SAVESEL) + +RETURN RETVAL + + +******************************************************************** +FUNCTION UPDATE_MATH(ELEM, GET_ARR) +// UPDATE THE CALCULATION FIELDS + +LOCAL RESULT, MATH_ARR := {}, MCAT_CODE, MATT_CODE, SAVESEL := SELECT() + +MCAT_CODE = GET_CATCODE(USERFILE2->PROD_CODE) +MATT_CODE = GET_ARR[ELEM,1] +SEEKKEY = MCAT_CODE + MATT_CODE +SELECT MATHPACK +SEEK SEEKKEY +DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF() + IF MATHPACK->TYPE$' ' + AADD(MATH_ARR, {FIELD1, OPERATOR, FIELD2}) + ENDIF + SKIP 1 +ENDDO + +IF !EMPTY(MATH_ARR) + RESULT = EVAL_MATH(MATH_ARR, GET_ARR, MCAT_CODE, MATT_CODE, _SELFILE ) + + DO CASE + CASE VALTYPE(RESULT) = 'C' + GET_ARR[ELEM,4] = RESULT + CASE VALTYPE(RESULT) = 'N' + GET_ARR[ELEM,4] = STR(RESULT) + END CASE +ENDIF +SELECT (SAVESEL) +RETURN NIL + +******************************************************************** +FUNCTION SIZE_NEEDED( SELFILE ) + +LOCAL RESULT, MATH_ARR := {}, MCAT_CODE, MATT_CODE +LOCAL SAVESEL := SELECT(), SEEKKEY + +MCAT_CODE = (SELFILE)->UOM +MATT_CODE = '_MISCITEM ' +SEEKKEY = MCAT_CODE + MATT_CODE +SELECT MATHPACK +SEEK SEEKKEY +DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF() + IF MATHPACK->TYPE$'M' // MISC ITEM + AADD(MATH_ARR, {FIELD1, OPERATOR, FIELD2}) + ENDIF + SKIP 1 +ENDDO + +SELECT (SAVESEL) + +IF EMPTY(MATH_ARR) + REPLACE ENTRY_SIZE WITH '' + RETURN .F. +ELSE + RETURN .T. +ENDIF + +******************************************************************** +FUNCTION MISC_PRICE( SELFILE ) + +LOCAL RESULT, MATH_ARR := {}, MCAT_CODE, MATT_CODE +LOCAL SAVESEL := SELECT(), UOMVAR := 1, SEEKKEY +LOCAL PRICEUOM:=0, PRICECOL:=0 + +MCAT_CODE = (SELFILE)->UOM +MATT_CODE = '_MISCITEM ' +SEEKKEY = MCAT_CODE + MATT_CODE +SELECT MATHPACK +SEEK SEEKKEY +DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF() + IF MATHPACK->TYPE$'M' // MISC ITEM + AADD(MATH_ARR, {FIELD1, OPERATOR, FIELD2}) + ENDIF + SKIP 1 +ENDDO + +SELECT (SAVESEL) + +IF !EMPTY(MATH_ARR) .AND. EMPTY( (SELFILE)->ENTRY_SIZE ) + IF LASTKEY() = K_F10 + ERR_BOX( '*** Size Information is REQUIRED ') + RETURN .F. + ELSE + UOMVAR := 0 + ENDIF +ELSE + IF !EMPTY(MATH_ARR) + UOMVAR = EVAL_MATH(MATH_ARR, {}, MCAT_CODE, MATT_CODE, SELFILE, 'MISC' ) + IF VALTYPE(RESULT) = 'C' + UOMVAR = VAL(RESULT) + ENDIF + ENDIF + + + SEEKKEY := (SELFILE)->PARTNUM + (SELFILE)->UOM + MISC_PUOM->(DBSEEK ( SEEKKEY )) + DO CASE + CASE (SELFILE)->PRICE_SHT$'D' + PRICEUOM := MISC_PUOM->DLR_AMT + CASE (SELFILE)->PRICE_SHT$'S' + PRICEUOM := MISC_PUOM->SD_AMT + CASE (SELFILE)->PRICE_SHT$'B' + PRICEUOM := MISC_PUOM->BU_AMT + CASE (SELFILE)->PRICE_SHT$'J' + PRICEUOM := MISC_PUOM->DIST_AMT + CASE (SELFILE)->PRICE_SHT$'L' + PRICEUOM := MISC_PUOM->LUMB_AMT + CASE (SELFILE)->PRICE_SHT$'I' + PRICEUOM := MISC_PUOM->IC_AMT + OTHERWISE + PRICEUOM := 0 + ENDCASE + +ENDIF + +IF PRICEUOM * UOMVAR > 9999.99 //** P3N - 2/23/99 + ERR_BOX('** ERROR in SALE PRICE calculation! **', ' ', ; + ' SALE PRICE should be less than 9999.99 / calc. = ' + ; + STR(PRICEUOM * UOMVAR , 12,4) ) +ELSE + REPLACE (SELFILE)->SALE_PRICE WITH (PRICEUOM * UOMVAR) +ENDIF //** P3N - 2/23/99 + +RETURN .T. + + + +******************************************************************** +FUNCTION GET_CATCODE(MPROD_CODE) +// RETURN THE ASSOCIATED CATEGORY CODE FOR MPROD_CODE + +LOCAL SAVESEL := SELECT(), RETVAL, SAVEREC + +SELECT PRODUCT +SAVEREC := RECNO() +SEEK MPROD_CODE +RETVAL = CAT_CODE +GOTO SAVEREC +SELECT(SAVESEL) +RETURN RETVAL + +******************************************************************** +FUNCTION CHK_SIZE( PUFILENAME, ALLOW_EMPTY ) +// VALIDATE THE VALUE IN THE ENTRY_SIZE FIELD FOR LINE ITEMS +// MUST BE FOUR DIGITS IF HOW MEASURED = 'NS' +// MUST BE DELIMITED WITH AN 'X' IF NOT! +// IF ANY ENTRY SIZE ADJUSTMENTS REQUIRED THEN MAKE THEM HERE + +LOCAL DO_ERR := .F., MLEN, MHOW_MEAS, SEEKKEY, I +LOCAL LEFTNUM, RITENUM, MIDDLE, RESULT1, RESULT2, SAVEORD +LOCAL SAVESEL := SELECT() +LOCAL M1:= ' ', ERRFLAG, LEFTPART, RITEPART +LOCAL M2:= ' ', WORKVAR +LOCAL M3:= ' ', UFILENAME +LOCAL XWIDTH, XHEIGHT, ISNOMINAL := .F. +LOCAL GPOS, WOPOS, ADD_QUOTE2 := .F., ADD_QUOTE1 := .F. +LOCAL MHEIGHT, MWIDTH, WWIDTH, WHEIGHT, WHOWMEAS, RETVAL := .F. + + /* + IF NOMINAL SIZE --> OK + IF 99 X 99 SIZE --> OK + + IF 4/5/6 DIGIT SIZE --> REPLACE HOW_MEAS WITH 'NS' + IF 99 X 99 SIZE --> AND HOW_MEAS <> 'TT' .OR. 'OS' - REPLACE HOW_MEAS WITH ' ' + */ + +IF PUFILENAME = NIL + UFILENAME := 'USERFILE2' +ELSE + UFILENAME := PUFILENAME +ENDIF + +IF ALLOW_EMPTY = NIL + ALLOW_EMPTY := .F. +ENDIF + +IF EMPTY((UFILENAME)->ENTRY_SIZE) .AND. !ALLOW_EMPTY + SIZE_ERR() + + RETURN .F. +ENDIF + +IF PROCNAME(1) = 'EDITGBROW' // F10 - SIZE WAS VALIDATED AT DATA ENTRY TIME + RETURN .T. +ENDIF + +MENTRY_SIZE = ALLTRIM((UFILENAME)->ENTRY_SIZE) + +WORKVAR := NIL +// SOMETHING X SOMETHING +XPOS := AT('X', MENTRY_SIZE) +IF XPOS > 0 + LEFTNUM := ALLTRIM(SUBS(MENTRY_SIZE,1,XPOS -1)) + IF RIGHT(LEFTNUM,1)$'"' + LEFTNUM := ALLTRIM( STRTRAN( LEFTNUM, '"', ' ' )) + ADD_QUOTE1 := .T. + ENDIF + WORKVAR := VAL_WD( UFILENAME, LEFTNUM ) + + IF !EMPTY(WORKVAR) + WWIDTH := LEFTNUM + WHOWMEASE := WORKVAR[2] + + RITENUM := ALLTRIM(SUBS(MENTRY_SIZE,XPOS +1)) + IF RIGHT(RITENUM,1)$'"' + RITENUM := ALLTRIM( STRTRAN( RITENUM, '"', ' ' )) + ADD_QUOTE2 := .T. + ENDIF + WORKVAR := VAL_WD( UFILENAME, RITENUM ) + IF !EMPTY(WORKVAR) + WORKVAR[1] := WWIDTH + WORKVAR[2] := RITENUM // CURRENT ONE RETURNED +******WORKVAR[3] := '' + WORKVAR := { WORKVAR[1], WORKVAR[2], '' } + MENTRY_SIZE := ALLTRIM(WORKVAR[1]) + ' X ' + WORKVAR[2] + ENDIF + ENDIF + +ELSE + // BASEMENT WINDOWS + IF AT('G', MENTRY_SIZE) > 0 + WORKVAR := VAL_BW( UFILENAME, MENTRY_SIZE ) // BASEMENT WINDOW + ELSE + + // NS ENTRY WWWHHH + WORKVAR := VAL_NS( UFILENAME, MENTRY_SIZE ) + IF EMPTY(WORKVAR) + // SINGLE NUMBER PROCESSING + LEFTNUM := ALLTRIM(MENTRY_SIZE) + IF RIGHT(LEFTNUM,1)$'"' + LEFTNUM := ALLTRIM( STRTRAN( LEFTNUM, '"', ' ' )) + ADD_QUOTE2 := .T. + ENDIF + + WORKVAR := VAL_WD( UFILENAME, LEFTNUM ) + IF !EMPTY(WORKVAR) + WORKVAR := {LEFTNUM, '', 'WO'} + MENTRY_SIZE := ALLTRIM(LEFTNUM) + ENDIF + ENDIF + ENDIF +ENDIF + +// GOOD SIZE / HOW MEAS COMBO, NOW TEST FOR REASONABLE ENTRY SIZES + +IF EMPTY(WORKVAR) + SIZE_ERR() + RETURN .F. +ENDIF + +MWIDTH := WORKVAR[1] +MHEIGHT := WORKVAR[2] +MHOW_MEAS := WORKVAR[3] + +XWIDTH := DECVAL(MWIDTH) +XHEIGHT := DECVAL(MHEIGHT) + +IF PUFILENAME = NIL // NOT MISC LINE ITEMS + + SEEKKEY := (UFILENAME)->PROD_CODE + PRODUCT->(DBSEEK(SEEKKEY)) + M1 := ' MAX WIDTH IS ' + STR(PRODUCT->MAXWIDTH) + M2 := ' MAX HEIGHT IS ' + STR(PRODUCT->MAXHEIGHT) + M3 := ' MAX SQFT IS ' + STR(PRODUCT->MAXSQFT) + M4 := ' Press Any Key to Continue . . .' + ERRFLAG := .F. + IF PRODUCT->MAXWIDTH > 0 + IF XWIDTH > PRODUCT->MAXWIDTH + ERRFLAG := .T. + ENDIF + ENDIF + IF PRODUCT->MAXHEIGHT > 0 + IF XHEIGHT > PRODUCT->MAXHEIGHT + ERRFLAG := .T. + ENDIF + ENDIF + IF PRODUCT->MAXSQFT > 0 + IF (XWIDTH * XHEIGHT) / 144 > PRODUCT->MAXSQFT + ERRFLAG := .T. + ENDIF + ENDIF + + IF ERRFLAG + ERR_BOX('*** WARNING - MAXIMUM SIZE WAS EXCEEDED!', M1, M2, M3, M4) + ENDIF +ENDIF + + +// IT'S A GOOD ENTRY, SO UPDATE HEIGHT & WIDTH +SELECT (UFILENAME) +REPLACE WIDTH WITH MWIDTH +REPLACE HEIGHT WITH MHEIGHT +IF !EMPTY(MHOW_MEAS) + REPLACE HOW_MEAS WITH MHOW_MEAS +ENDIF +IF ADD_QUOTE1 .OR. ADD_QUOTE2 + IF AT('X', MENTRY_SIZE)>0 + WORKVAR := SUBS(MENTRY_SIZE,1, AT('X', MENTRY_SIZE) -1 ) + IF ADD_QUOTE1 + WORKVAR := WORKVAR + '"' + ENDIF + IF AT('X', MENTRY_SIZE ) > 0 + WORKVAR := WORKVAR + ' X ' + ENDIF + WORKVAR := WORKVAR + SUBS(MENTRY_SIZE, AT('X', MENTRY_SIZE)+1 ) + IF ADD_QUOTE2 + WORKVAR := WORKVAR + '"' + ENDIF + MENTRY_SIZE := ALLTRIM(WORKVAR) + ELSE + IF ADD_QUOTE2 + MENTRY_SIZE := ALLTRIM(MENTRY_SIZE) + '"' + ENDIF + ENDIF +ENDIF +REPLACE (UFILENAME)->ENTRY_SIZE WITH MENTRY_SIZE +** REPLACE (UFILENAME)->ENTRY_SIZE WITH ALLTRIM(MENTRY_SIZE) + ' "' +**ENDIF + +IF PUFILENAME = NIL // NOT MISC LINE ITEMS + + // SET ADDL LINE ENTRY SIZES IF CHANGING PREVIOUS ORDER + SEEKKEY := ORDER_NUM + PROD_CODE + STR(LINE_NUM,3) + SELECT USERFILE6 + SAVEORD := INDEXORD() + + DONSETORD(2) // ORDER + PAR_PROD + LINE_NUM + SEEK SEEKKEY + IF FOUND() .AND. ENTRY_SIZE <> (UFILENAME)->ENTRY_SIZE + REPLACE ENTRY_SIZE WITH (UFILENAME)->ENTRY_SIZE + REPLACE WIDTH WITH (UFILENAME)->WIDTH + REPLACE HEIGHT WITH (UFILENAME)->HEIGHT + REPLACE HOW_MEAS WITH (UFILENAME)->HOW_MEAS + REPLACE PRICE_SHT WITH (UFILENAME)->PRICE_SHT + REPLACE NEED_CALC WITH 'Y' + ENDIF + DONSETORD(SAVEORD) +ENDIF + +SELECT(SAVESEL) + +IF MHOME_LOC_CODE == 'LINDS ' //** P3N - 5/02/00 + //** LINDA DOES NOT LIKE THIS EDIT + RETVAL := .T. //** P3N - 5/02/00 +ELSEIF CK_ENTRYSZ() //** P3N - 4/21/00 + RETVAL := .T. //** P3N - 4/21/00 +ELSE //** P3N - 4/21/00 + RETVAL := .F. //** P3N - 4/21/00 + ERR_BOX( ' You can NOT change the entry size!', ; //** P3N - 4/21/00 + ' ', ; //** P3N - 4/21/00 + ' DELETE line item(F3) and Re-Enter.') //** P3N - 4/21/00 +ENDIF +RETURN RETVAL +//**RETURN .T. + +*********************************************************** +FUNCTION VAL_BW( UFILENAME, MENTRY_SIZE ) // BASEMENT WINDOW + +// TEST FOR BASEMENT WINDOW 12G, ETC +LOCAL GPOS := AT( 'G', MENTRY_SIZE ) +LOCAL LEFT_NUM, RIGHT_NUM, MWIDTH, MHEIGHT + +IF GPOS > 0 + IF LEN(MENTRY_SIZE) = 3 .AND. ; + ISDIGIT( SUBS(MENTRY_SIZE,1,1) ) .AND. ; + ISDIGIT( SUBS(MENTRY_SIZE,2,1) ) .AND. ; + GPOS = 3 + // GOOD BASEMENT WINDOW + // ONLY GOOD SIZES GOT THIS FAR + // GET HEIGHT & WIDTH + LEFT_NUM = LEFT(MENTRY_SIZE,2) + + // NOW GET THE STRING OF IT + MWIDTH = VAL(LEFT_NUM) + MWIDTH = LTRIM(STR( MWIDTH )) + MHEIGHT = '0' +** REPLACE (UFILENAME)->HOW_MEAS WITH 'BW' + RETURN {MWIDTH, MHEIGHT, 'BW'} + ENDIF +ENDIF +RETURN NIL + + + + +* ELSE +* RETURN NIL +* ERR_BOX( ' BASEMENT WINDOWS Must be ', ; +* ' WINDOW SIZE "G" ', ; +* ' ie: "20G" ' , ; +* ' PLEASE RE-ENTER ') +* +* RETURN .F. +* ENDIF +* RETURN .T. +*ELSE +* RETURN .F. +*ENDIF + + +*********************************************************** + +FUNCTION VAL_FI( UFILENAME, MENTRY_SIZE , DOMSG) // FEET'INCHES + +// CHECK FOR WIDTH ONLY MEASUREMENT IE 3'6 FI - FEET'INCHES +LOCAL WOPOS := AT( "'", MENTRY_SIZE) +LOCAL LEFTPART, RITEPART, WORKVAR, I +LOCAL LEFT_NUM, RIGHT_NUM, DO_ERR := .F. +LOCAL STARTFRAC := 0 + +IF DOMSG = NIL + DOMSG := .T. +ENDIF + +IF WOPOS > 1 // AT LEAST IN SECOND POSTION + LEFTPART = SUBS(MENTRY_SIZE,1, WOPOS-1) + // COULD HAVE FRACTIONS OR NOT? + RITEPART = ALLTRIM(SUBS(MENTRY_SIZE,WOPOS+1)) + STARTFRAC := AT( " ", RITEPART) + IF STARTFRAC = 0 + STARTFRAC := LEN(RITEPART) + ENDIF + IF VAL(LEFTPART ) > 0 + WORKVAR := '' + FOR I := 1 TO LEN(RITEPART) + IF !ISDIGIT(SUBS(RITEPART,I,1)) + DO_ERR := .T. + EXIT + ELSE + WORKVAR := WORKVAR + SUBS(RITEPART,I,1) + ENDIF + NEXT + IF LEN(WORKVAR) = 0 + DO_ERR := .T. + ENDIF + ELSE + DO_ERR := .T. + ENDIF + IF DO_ERR + IF DO_MSG + ERR_BOX( ' WIDTH ONLY WINDOWS Must be', ; + ' Width in FEET and INCHES ', ; + [ ie: "3'6" ] , ; + ' PLEASE RE-ENTER ') + + ENDIF + RETURN .F. + ELSE + // GOOD WIDTH ONLY WINDOW + // ONLY GOOD SIZES GOT THIS FAR + // GET HEIGHT & WIDTH + LEFT_NUM = LEFTPART + RIGHT_NUM = RITEPART + + // NOW GET THE STRING OF IT + MWIDTH = ( VAL(LEFT_NUM) * 12 ) + VAL(RIGHT_NUM) + MWIDTH = LTRIM(STR( MWIDTH )) + MHEIGHT = '0' + REPLACE (UFILENAME)->HOW_MEAS WITH 'WO' + ENDIF + RETURN .T. +ELSE + RETURN .F. +ENDIF + + +*********************************************************** + +FUNCTION VAL_WD( UFILENAME, MENTRY_SIZE , DOMSG) // FEET'INCHES + +// CHECK FOR WIDTH ONLY MEASUREMENT IE 3'6 1/4 FI - FEET'INCHES +LOCAL WOPOS := AT( "'", MENTRY_SIZE) +LOCAL FRPOS := AT( "/", MENTRY_SIZE) +LOCAL PEPOS := AT( ".", MENTRY_SIZE) +LOCAL LEFTPART, RITEPART, WORKVAR, I +LOCAL FT_NUM:='', IN_NUM:='', DO_ERR := .F. +LOCAL FTPART:=0, INPART:=0, FRPART:=0 +LOCAL STARTFRAC := 0 + +IF DOMSG = NIL + DOMSG := .T. +ENDIF + +IF WOPOS > 1 // HAVE THE FEET PART + FT_NUM = SUBS(MENTRY_SIZE,1, WOPOS-1) +ENDIF +RITEPART := ALLTRIM(SUBS(MENTRY_SIZE,WOPOS+1)) +IF FRPOS = 0 ; // NO "/" FRACTION + .OR. PEPOS > 0 .AND. FRPOS = 0 // DECIMAL IE 10' 6.5 + IN_NUM := RITEPART +ELSE + IF FRPOS > 0 + IN_NUM := CHK_FRACTION(RITEPART, 'VALUE') + ENDIF +ENDIF + +IF EMPTY(IN_NUM) .AND. EMPTY(FT_NUM) + RETURN NIL +ELSE + // GOOD WIDTH ONLY WINDOW + // ONLY GOOD SIZES GOT THIS FAR + // GET HEIGHT & WIDTH + // NOW GET THE STRING OF IT + MWIDTH = ( VAL(FT_NUM) * 12 ) + DECVAL(IN_NUM) + MWIDTH = LTRIM(STR( MWIDTH,10,4 )) +**MHEIGHT = '0' +**REPLACE (UFILENAME)->HOW_MEAS WITH 'WO' +**RETURN { MWIDTH, MHEIGHT, 'WO' } + RETURN { MWIDTH, 'WO' } +ENDIF + + +*********************************************************** + +FUNCTION VAL_NS( UFILENAME, MENTRY_SIZE ) // NOMINAL SIZE + +LOCAL MLEN := LEN(ALLTRIM(MENTRY_SIZE)) +LOCAL DO_ERR:=.F., L, LEFT_NUM, RIGHT_NUM +LOCAL MWIDTH, MHEIGHT + +MENTRY_SIZE := ALLTRIM(MENTRY_SIZE) +// SEE IF A NOMINAL VALID SIZE +IF MLEN < 4 .OR. MLEN > 6 + RETURN NIL +**DO_ERR := .T. +ELSE + FOR L = 1 TO LEN(MENTRY_SIZE) + IF !ISDIGIT(SUBSTR(MENTRY_SIZE,L,1)) + RETURN NIL +******EXIT + ENDIF + NEXT +ENDIF + +* IF DO_ERR +* RETURN .F. +* ELSE +// ONLY GOOD SIZES GOT THIS FAR +// GET HEIGHT & WIDTH +DO CASE + CASE MLEN = 4 + LEFT_NUM = '0' + LEFT(MENTRY_SIZE,2) + RIGHT_NUM = '0' + RIGHT(MENTRY_SIZE,2) + CASE MLEN = 5 + LEFT_NUM = LEFT(MENTRY_SIZE,3) + RIGHT_NUM = '0' + RIGHT(MENTRY_SIZE,2) + CASE MLEN = 6 + LEFT_NUM = LEFT(MENTRY_SIZE,3) + RIGHT_NUM = RIGHT(MENTRY_SIZE,3) +ENDCASE + +// NOW GET THE STRING OF IT +MWIDTH = (VAL(LEFT(LEFT_NUM,2)) * 12) + VAL(RIGHT(LEFT_NUM,1)) +MWIDTH = LTRIM(STR( MWIDTH )) +MHEIGHT = (VAL(LEFT(RIGHT_NUM,2)) * 12) + VAL(RIGHT(RIGHT_NUM,1)) +MHEIGHT = LTRIM(STR( MHEIGHT)) +// UPDATE NS HOW MEAS FOR NOMINAL SIZES +// OR REMOVE NS IF 'X' TYPE ENTRY SIZE +**REPLACE (UFILENAME)->HOW_MEAS WITH 'NS' +RETURN { MWIDTH, MHEIGHT, 'NS' } + +** ENDIF + +RETURN .T. + +**************************************************************** +// ROUND THE WIDTH / HEIGHT IF ADJUST ENTRY SIZE INFO FOUND + +FUNCTION RND_WID_HT(MPROD_CODE, GET_ARR) + +//* SPIN THRU GET_ARR FOR ALL WIDTH/HT ADJUSTMENTS AND KEEP RUNNING TOTAL +LOCAL WK_WIDTH := DECVAL(USERFILE2->WIDTH) +LOCAL WORKVAL, WK_HEIGHT := DECVAL(USERFILE2->HEIGHT) + +LOCAL ADJ_ARR, STRARR + +IF EMPTY(GET_ARR) + RETURN .T. +ENDIF + +ADJ_ARR := FIND_OPTS(GET_ARR) + +// UPDATE PRD SIZE FIRST +IF ADJ_ARR[5] <> 0 // ROUND WIDTH TO + WORKVAL := ROUNDUP(WK_WIDTH, ADJ_ARR[5]) + STR_ARR := PRNT_SIZE( WORKVAL, , , , .T. ) + REPLACE USERFILE2->WIDTH WITH ALLTRIM( STR_ARR[1] ) +ENDIF +IF ADJ_ARR[6] <> 0 // ROUND HEIGHT TO + WORKVAL := ROUNDUP(WK_HEIGHT, ADJ_ARR[6]) + STR_ARR := PRNT_SIZE( WORKVAL, , , , .T. ) + REPLACE USERFILE2->HEIGHT WITH ALLTRIM( STR_ARR[1] ) +ENDIF + +RETURN .T. + + +**************************************************************** +//* CALCULATE THE BILLING HEIGHT/WIDTH +**************************************************************** + +FUNCTION BILL_SIZE(MPROD_CODE, ADDL_MODE, GET_ARR) + +// ENTRY SIZE IS THE SIZE USER ENTERED +// BIL_SIZE IS THE SIZE TO BILL ON BASED ON CONVERSION +// FROM HOW_MEASURED AND CUTTING ADJUSTMENTS +**// ACT_SIZE IS THE ACTUAL TIP TO TIP MEASURMENT OF WINDOW / PARENT PRODUCT + +LOCAL MWIDTH, SEEKKEY +LOCAL MHEIGHT, ADDL_CATCODE, SIZE_ARR +LOCAL ACT_PAR_WD +LOCAL ACT_PAR_HT +LOCAL SEEKPROD +LOCAL ES_WD:=0, ES_HT:=0 +LOCAL ADJ_ARR + +IF EMPTY(GET_ARR) + RETURN .T. +ENDIF + +ADJ_ARR := FIND_OPTS(GET_ARR) +// RETURNS {WIDTH, HEIGHT, BWIDTH, BHEIGHT, WID_RND, HT_RND, WID_BRND, HT_BRND } + +MWIDTH := DECVAL(USERFILE2->WIDTH) +MHEIGHT := DECVAL(USERFILE2->HEIGHT) + +IF EMPTY( USERFILE2->PAR_PROD ) + SEEKPROD := USERFILE2->PROD_CODE +ELSE + SEEKPROD := USERFILE2->PAR_PROD +ENDIF +IF PRODUCT->(DBSEEK(SEEKPROD)) +ELSE + ? 'ERROR IN SEEK ON PRODUCT IN BILL_SIZE IN CGWPRPO! ' + WAIT +ENDIF + +SIZE_ARR := CONV_SIZE(SEEKPROD, MWIDTH, MHEIGHT, USERFILE2->HOW_MEAS) +IF EMPTY(SIZE_ARR[1]) .AND. EMPTY(ADJ_ARR[3]) + ES_WD := 0 +ELSEIF EMPTY(ADJ_ARR[3]) + ES_WD := SIZE_ARR[1] +ELSEIF EMPTY(SIZE_ARR[1]) + ES_WD := ADJ_ARR[3] +ELSE + ES_WD := SIZE_ARR[1] + ADJ_ARR[3] +ENDIF +IF EMPTY(SIZE_ARR[2]) .AND. EMPTY(ADJ_ARR[4]) + ES_HT := 0 +ELSEIF EMPTY(ADJ_ARR[4]) + ES_HT := SIZE_ARR[2] +ELSEIF EMPTY(SIZE_ARR[2]) + ES_HT := ADJ_ARR[4] +ELSE + ES_HT := SIZE_ARR[2] + ADJ_ARR[4] +ENDIF + +// NOW, ES_HT AND ES_WIDTH ARE THE TIP TO TIP MEASURMENTS OF +// PRODUCT OR ATTACH TO PARENT PRODUCT + +// ADDITIONAL MODE OR PARENT PRODUCT- GET SIZE SPECS FROM PARENT DEFINITION +// WHICH WILL FURTHER ADJUST THE "ATTACH ON" PRODUCT +IF !EMPTY( USERFILE2->PAR_PROD ) + ADDL_CATCODE := GET_CATCODE(USERFILE2->PROD_CODE) + + // GET THE TIP TO TIP MEASUREMENT OF PARENT WINDOW + + SELECT USERFILE2 + DO CASE + CASE TRIM(ADDL_CATCODE) == 'SCREENS' + + CASE TRIM(ADDL_CATCODE) == 'STORMS' + ES_WD := PRODUCT->STR_WIDTH + ES_WD + ES_HT := PRODUCT->STR_HEIGHT + ES_HT + + OTHERWISE + ? 'NEW/UNDEFINED ADDITIONAL PRODUCT APPEARED IN BILL_SIZE-CGWPRPO' + WAIT + ENDCASE +ENDIF + +IF ES_WD > 999.9999 + ERR_BOX('** ERROR in Billing Width calculation! **', ' ', ; + ' Billing Width should be less than 999.9999 / calc. = ' + ; + STR(ES_WD, 12,4) ) +ELSE + REPLACE USERFILE2->BIL_WIDTH WITH ES_WD +ENDIF +IF ES_HT > 999.9999 + ERR_BOX('** ERROR in Billing Height calculation! **', ' ', ; + ' Billing Height should be less than 999.9999 / calc. = ' + ; + STR(ES_HT, 12,4) ) +ELSE + REPLACE USERFILE2->BIL_HEIGHT WITH ES_HT +ENDIF + +// UI SIZE USED FOR BILLING ONLY WHEN PRICED BY THE UNITED INCH +IF (USERFILE2->BIL_WIDTH+USERFILE2->BIL_HEIGHT) > 999.99 + ERR_BOX('** ERROR in UI SIZE calculation! **', ' ', ; + ' UI SIZE should be less than 999.99 / calc. = ' + ; + STR(USERFILE2->BIL_WIDTH+USERFILE2->BIL_HEIGHT, 8,2) ) +ELSE + REPLACE USERFILE2->UI_SIZE WITH ; + ROUNDUP(USERFILE2->BIL_WIDTH) + ROUNDUP(USERFILE2->BIL_HEIGHT) +ENDIF +// UPDATE ACTUAL SIZE FOR SAW HERE BASED ON SIZE BEFORE OPTIONS ADJUSTMENTS. +IF ADDL_MODE .OR. !EMPTY(USERFILE2->PAR_PROD) + SELECT PRODUCT + SEEK USERFILE2->PROD_CODE // GO BACK TO ADDL_PRODUCT DEFINITION +ENDIF + +RETURN + +**************************************************************** +**************************************************************** +//* CALCULATE THE PRODUCTION HEIGHT/WIDTH +**************************************************************** +**************************************************************** +FUNCTION CLR_SS_GLASS(GET_ARR, FILE2USE) + +LOCAL SAVESEL := SELECT() +LOCAL ELEM1, ELEM2 + +//* SPIN THRU GET_ARR AND LOOK FOR GL TYPE = 'CLEAR' .AND. GL STRENG = 'SINGLE' +ELEM1 = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'GL STREN'}) +IF ELEM1 > 0 .AND. ALLTRIM(GET_ARR[ELEM1, 4]) == 'SINGLE STRENGTH' + ELEM2 = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'GL TYPE'}) + IF ELEM2 > 0 .AND. ALLTRIM(GET_ARR[ELEM2, 4]) == 'CLEAR' + REPLACE (FILE2USE)->CLEAR_SS WITH 'Y' + RETURN + ENDIF +ENDIF + +REPLACE (FILE2USE)->CLEAR_SS WITH 'N' +RETURN + +**************************************************************** +FUNCTION PROD_SIZE(GET_ARR,SEEKPROD, ADDL_MODE) + +//* SPIN THRU GET_ARR FOR ALL WIDTH/HT ADJUSTMENTS AND KEEP RUNNING TOTAL + +// PRODUCTION SIZE USED TO PRINT ON ORDERS +// THE PRODUCTION SIZE IS THE (ENTRY SIZE + CATEGORY ADJUSTMENTS) +// -OR- THE BILLING SIZE ABOVE + THE OPTION SIZE ADJUSTMENTS +// ALSO WILL CALC THE ACTUAL FINISHED PRODUCTION SIZE + +LOCAL ADJ_ARR, SIZE_ARR := {} +LOCAL MWIDTH := DECVAL(USERFILE2->WIDTH) +LOCAL MHEIGHT := DECVAL(USERFILE2->HEIGHT) +LOCAL ES_WD := 0, EW_HT := 0, WK := 0 +LOCAL AES_WD := 0, AEW_HT := 0 + +IF EMPTY(GET_ARR) + RETURN .T. +ENDIF + +ADJ_ARR := FIND_OPTS(GET_ARR) +// ADJ ADJ ADJ BILL SIZE? RND_TT_WD RND_TT_H RND_BI_WD RND_BI_HT ADJ_TTSZ? +// RETURNS {WIDTH, HEIGHT, BWIDTH, BHEIGHT, WID_RND, HT_RND, WID_BRND, HT_BRND, ADJ_ACT_WD, ADJ_ACT_HT } + + +IF EMPTY( USERFILE2->PAR_PROD ) + SEEKPROD := USERFILE2->PROD_CODE +ELSE + SEEKPROD := USERFILE2->PAR_PROD +ENDIF +PRODUCT->(DBSEEK(SEEKPROD)) + +SIZE_ARR := CONV_SIZE(SEEKPROD, MWIDTH, MHEIGHT, USERFILE2->HOW_MEAS) + +ES_WD := SIZE_ARR[1] + ADJ_ARR[1] +ES_HT := SIZE_ARR[2] + ADJ_ARR[2] +AES_WD := ES_WD - ADJ_ARR[9] +AES_HT := ES_HT - ADJ_ARR[10] +**AES_WD := SIZE_ARR[1] + ADJ_ARR[9] +**AES_HT := SIZE_ARR[2] + ADJ_ARR[10] + +// UPDATE PRD SIZE FIRST +**IF AES_WD > 999.9999 // PERRY - 2/18/98 +IF AES_WD > 999.9999 // PERRY - 2/18/98 + ERR_BOX('** ERROR in Production Width calculation! **', ' ', ; + ' Production Width should be less than 999.9999 / calc. = ' + ; + STR(ES_WD, 12,4) ) +ELSE +**REPLACE USERFILE2->PRD_WIDTH WITH ES_WD // AES??? PERRY - 2/18/98 + REPLACE USERFILE2->PRD_WIDTH WITH AES_WD // PERRY - 2/18/98 +ENDIF +**IF ES_HT > 999.9999 // PERRY - 2/18/98 +IF AES_HT > 999.9999 // PERRY - 2/18/98 + ERR_BOX('** ERROR in Production Height calculation! **', ' ', ; + ' Production Height should be less than 999.9999 / calc. = ' + ; + STR(ES_HT, 12,4) ) +ELSE +**REPLACE USERFILE2->PRD_HEIGHT WITH ES_HT + REPLACE USERFILE2->PRD_HEIGHT WITH AES_HT // PERRY - 2/18/98 +ENDIF + +**REPLACE USERFILE2->PRD_WIDTH WITH USERFILE2->BIL_WIDTH + ADJ_ARR[1] +**REPLACE USERFILE2->PRD_HEIGHT WITH USERFILE2->BIL_HEIGHT + ADJ_ARR[2] +* IF ADJ_ARR[5] <> 0 // ROUND WIDTH TO +* REPLACE USERFILE2->PRD_WIDTH WITH ROUNDUP(USERFILE2->PRD_WIDTH, ADJ_ARR[5]) +* ENDIF +* IF ADJ_ARR[6] <> 0 // ROUND HEIGHT TO +* REPLACE USERFILE2->PRD_HEIGHT WITH ROUNDUP(USERFILE2->PRD_HEIGHT, ADJ_ARR[6]) +* ENDIF + +// UPDATE ACTUAL SIZE NEXT +// ALWAYS ADJUST FOR SAW CUTTING ?? +IF AES_WD+PRODUCT->SAW_WIDTH > 999.9999 // PERRY - 4/8/98 + ERR_BOX('** ERROR in ACTUAL Width calculation! **', ' ', ; + ' Actual Width should be less than 999.9999 / calc. = ' + ; + STR(AES_WD + PRODUCT->SAW_WIDTH, 12,4) ) +ELSE + REPLACE USERFILE2->ACT_WIDTH WITH AES_WD ; + + PRODUCT->SAW_WIDTH +ENDIF +IF AES_HT+PRODUCT->SAW_HEIGHT > 999.9999 // PERRY - 4/8/98 + ERR_BOX('** ERROR in ACTUAL Height calculation! **', ' ', ; + ' Actual Height should be less than 999.9999 / calc. = ' + ; + STR(AES_HT + PRODUCT->SAW_HEIGHT, 12,4) ) +ELSE + REPLACE USERFILE2->ACT_HEIGHT WITH AES_HT ; + + PRODUCT->SAW_HEIGHT +ENDIF + +**REPLACE USERFILE2->ACT_WIDTH WITH USERFILE2->PRD_WIDTH + PRODUCT->SAW_WIDTH +**REPLACE USERFILE2->ACT_HEIGHT WITH USERFILE2->PRD_HEIGHT + PRODUCT->SAW_HEIGHT + +* REPLACE USERFILE2->ACT_WIDTH WITH USERFILE2->ACT_WIDTH + ADJ_ARR[3] +* REPLACE USERFILE2->ACT_HEIGHT WITH USERFILE2->ACT_HEIGHT + ADJ_ARR[4] +* IF ADJ_ARR[7] <> 0 // ROUND WIDTH TO ON TT SIZE +* REPLACE USERFILE2->ACT_WIDTH WITH ROUNDUP(USERFILE2->ACT_WIDTH, ADJ_ARR[7]) +* ENDIF +* IF ADJ_ARR[8] <> 0 // ROUND HEIGHT TO ON TT SIZE +* REPLACE USERFILE2->ACT_HEIGHT WITH ROUNDUP(USERFILE2->ACT_HEIGHT, ADJ_ARR[8]) +* ENDIF + +// UPDATE ACTUAL NOMINAL WIDTH, HEIGHT +// ADJUSTED FOR TT ROUNDING ABOVE IN THE ACT_HEIGHT PART +WK := USERFILE2->ACT_WIDTH - PRODUCT->SAW_WIDTH - PRODUCT->NS_WIDTH +IF WK > 999.9999 .OR. WK < -999.9999 //** P3N - 4/8/98 + ERR_BOX('** ERROR in ACTUAL NOM Width calculation! **', ' ', ; + ' Actual NOM Width should be less than 999.9999 / calc. = ' + ; + STR(WK, 12,4) ) +ELSE + REPLACE USERFILE2->NOM_WIDTH WITH USERFILE2->ACT_WIDTH ; + - PRODUCT->SAW_WIDTH - PRODUCT->NS_WIDTH +ENDIF +WK := USERFILE2->ACT_HEIGHT - PRODUCT->SAW_HEIGHT - PRODUCT->NS_HEIGHT +IF WK > 999.9999 .OR. WK < -999.9999 //** P3N - 4/8/98 + ERR_BOX('** ERROR in ACTUAL NOM Height calculation! **', ' ', ; + ' Actual NOM Height should be less than 999.9999 / calc. = ' + ; + STR(WK, 12,4) ) +ELSE + REPLACE USERFILE2->NOM_HEIGHT WITH USERFILE2->ACT_HEIGHT ; + - PRODUCT->SAW_HEIGHT - PRODUCT->NS_HEIGHT +ENDIF + +RETURN .T. + + +******************************************************************** +* THIS FUNC ROUNDS NUMBERS UP IF NEEDED (THE OLD ROUND FUNC) +******************************************************************** +FUNCTION ROUNDUP(VAL2ROUND, ROUND2) +LOCAL WORKVAL, DECVAL + +IF ROUND2 = NIL + ROUND2 := 0 +ENDIF + +IF ROUND2 > 1 .OR. ROUND2 < 0 + ERR_BOX('*** INVALID ROUND TO VALUE ' + STR(ROUND2,8,4) , ; + '*** Value NOT ROUNDED!' , ; + '*** CHECK THE MODEL SETUP') + RETURN VAL2ROUND +ENDIF + +IF ROUND2 = 0 // ROUND TO INTEGER + IF VAL2ROUND - INT(VAL2ROUND) = 0 + RETURN VAL2ROUND + ELSE + RETURN INT(VAL2ROUND) + 1 + ENDIF +ELSE + DECVAL := VAL2ROUND - INT(VAL2ROUND) // DECIMAL PORTION + IF DECVAL = 0 + RETURN VAL2ROUND + ELSE + WORKVAL := DECVAL + DO WHILE WORKVAL > ROUND2 + WORKVAL := WORKVAL - ROUND2 + ENDDO + RETURN VAL2ROUND + (ROUND2 - WORKVAL) // ORIG AMT + (DIFF BETWEEN DECVAL AND ROUND2) + ENDIF +ENDIF + +******************************************************************** +* THIS FUNC FINDS ALL OPTIONS IN ORDER TO CALC THE HEIGHT/WIDTH ADJS. +* AT ALL LEVELS +******************************************************************** +FUNCTION FIND_OPTS(GET_ARR) +LOCAL M_HEIGHT := 0, M_WIDTH := 0, MADJ_INVSZ +LOCAL BHEIGHT := 0, BWIDTH := 0 +LOCAL OO_KEY, I, II, USER_CHOICE, MRULE, WID_RND := 0, HT_RND := 0 +LOCAL WID_BADJ := 0 +LOCAL HT_BADJ := 0, H_ADJAMT:= 0, W_ADJAMT:= 0 +LOCAL WID_AADJ := 0 +LOCAL HT_AADJ := 0 + +//* SEARCH ALL SELECTED OPTIONS IN THE GET_ARR, AND MAKE ADJUSTMENTS ON +//* ALL OPTIONS FOUND IN THE ORDER OPTIONS FILE SELECTED AT ORDER ENTRY TIME +FOR I := 1 TO LEN(GET_ARR) + USER_CHOICE := GET_ARR[I,4] + FOR II := 1 TO LEN(GET_ARR[I, 3]) // OPTION ARRAY + IF ALLTRIM(USER_CHOICE) == ALLTRIM(GET_ARR[I, 3, II, 1]) // OPT DESC + MRULE := GET_ARR[I,3,II,14] // ROUND WIDTH RULE + // ALWAYS ADJUST THE WIDTH - NO RULE + // CHECK IF THERE IS A WIDTH ROUND RULE + IF EMPTY(MRULE) .OR. CHK_RULE(MRULE, GET_ARR, , _SELFILE) + WID_RND := WID_RND + GET_ARR[I,3,II,13] // ROUND WIDTH AMOUNT + ENDIF + + MRULE := GET_ARR[I,3,II,16] // ROUND HEIGHT RULE + // ALWAYS ADJUST THE HEIGHT - NO RULE + // CHECK IF THERE IS A HEIGHT ROUND RULE + IF EMPTY(MRULE) .OR. CHK_RULE(MRULE, GET_ARR, , _SELFILE) + HT_RND := HT_RND + GET_ARR[I,3,II,15] // ROUND HEIGHT AMOUNT + ENDIF + + // AMT TO ADJUST PRODUCTION WIDTHS AND HEIGHTS (PRD AND ACTUAL) + W_ADJAMT := GET_ARR[I,3,II,8] // ADJ WD AMT + H_ADJAMT := GET_ARR[I,3,II,9] // ADJ HT AMT + IF W_ADJAMT <> 0 .OR. H_ADJAMT <> 0 +//// IF MADJ_TTSZ$'Y' + M_WIDTH := M_WIDTH + W_ADJAMT // OPT WIDTH ADJ + M_HEIGHT := M_HEIGHT + H_ADJAMT // OPT HEIGHT ADJ + * M_WIDTH := M_WIDTH + GET_ARR[I, 3, II, 8] // OPT WIDTH ADJ + * M_HEIGHT := M_HEIGHT + GET_ARR[I, 3, II, 9] // OPT HEIGHT ADJ + MADJ_INVSZ := GET_ARR[I, 3, II, 12] // OPT ADJ BILL? + IF MADJ_INVSZ$'Y' + // AMT TO ADJUST BILLING WIDTHS AND HEIGHTS + BWIDTH := BWIDTH + W_ADJAMT // OPT WIDTH ADJ + BHEIGHT := BHEIGHT + H_ADJAMT // OPT HEIGHT ADJ + ** BWIDTH := BWIDTH + GET_ARR[I, 3, II, 8] // OPT WIDTH ADJ + ** BHEIGHT := BHEIGHT + GET_ARR[I, 3, II, 9] // OPT HEIGHT ADJ + WID_BADJ := WID_BADJ + W_ADJAMT + HT_BADJ := HT_BADJ + H_ADJAMT + ENDIF + IF GET_ARR[I,3,II,17]$'N' // ADJ_TTSZ BLANK DEFAULTS TO YES + WID_AADJ := WID_AADJ + W_ADJAMT // THIS IS AMT TO ADD BACK IF NO ADJ + HT_AADJ := HT_AADJ + H_ADJAMT + ENDIF + ENDIF + ENDIF + NEXT +NEXT + //PRD/ACT ADJ BILL ADJ ROUND TO PRD/ACT ADJ ROUND TO BILL ADJ? ADJ TT SIZE? +RETURN {M_WIDTH, M_HEIGHT, BWIDTH, BHEIGHT, WID_RND, HT_RND , WID_BADJ, HT_BADJ , WID_AADJ, HT_AADJ } + +******************************************************************** +//** P3N - 4/21/00 DO NOT ALLOW UPDATE OF A LINE ITEM ENTRY SIZE +//** PER SCOTT IN KC +******************************************************************** +FUNCTION CK_ENTRYSZ() +LOCAL SVREC := (CUR_OL)->(RECNO()) +LOCAL CURFILE := ALIAS(), RETVAL := .T. +//**LOCAL SEEKKEY := (CURFILE)->ORDER_NUM + STR( (CURFILE)->LINE_NUM, 3) //** P3N - 07/10/02 +LOCAL SEEKKEY := (CURFILE)->ORDER_NUM //** P3N - 07/10/02 ADDRESS ABEND FOR DARLENE - IOLA +IF VALTYPE( (CURFILE)->LINE_NUM ) $'N' //** P3N - 07/10/02 + SEEKKEY := SEEKKEY + STR( (CURFILE)->LINE_NUM, 3) //** P3N - 07/10/02 +ELSE //** P3N - 07/10/02 + SEEKKEY := SEEKKEY + (CURFILE)->LINE_NUM //** P3N - 07/10/02 +ENDIF //** P3N - 07/10/02 +IF (CUR_OL)->(DBSEEK(SEEKKEY)) + IF (CUR_OL)->ENTRY_SIZE == (CURFILE)->ENTRY_SIZE + RETVAL := .T. + ELSE + RETVAL := .F. + ENDIF +ENDIF +(CUR_OL)->(DBGOTO(SVREC)) +RETURN RETVAL +******************************************************************** + +FUNCTION UPDATE_SQFT() +// CALCULATE AND UPDATE THE UI SIZE FIELD + +LOCAL MHEIGHT, MWIDTH, MCALC + +IF !EMPTY(USERFILE2->HEIGHT) .AND. !EMPTY(USERFILE2->WIDTH) + MHEIGHT = DECVAL(USERFILE2->HEIGHT) // CONVERT CHARACTER FRACTIONS + MWIDTH = DECVAL(USERFILE2->WIDTH) + MCALC := (MHEIGHT * MWIDTH) / 144 + IF MCALC > 999.99 + ERR_BOX('** ERROR in Square Ft. Calculation! **' ,' ', ; + '** Sqft. MUST BE LESS THAN 999.99 / calc. = ' + STR(MCALC,9,2) ) + ELSE + REPLACE USERFILE2->SQFT WITH (MHEIGHT * MWIDTH) / 144 + ENDIF +ENDIF +RETURN .T. + + +******************************************************************** +FUNCTION CHK_FRACTION(C_NUM, ACTION) +// MAKE SURE C_NUM IS A CHARACTER STRING OF DIGITS AND/OR FRACTIONS +// FRACTIONS MUST BE IN THIS FORM 1/2, 3/8, WITH NO DECIMALS OR LETTERS +// IF ACTION = 'VALUE' THEN JUST RETURN THE VALUE, DON'T UPDATE GET FIELD + +LOCAL SLASH_POS, SPACE1_POS, SPACE2_POS, WHOLE_NUM, FRACTION +LOCAL TOP_FRACTION, BOTT_FRACTION, DECIMAL_NUM +LOCAL N_CHOICE, L, X, I, FRACT_PARR := {} , RETVAL + +IF ACTION = NIL + ACTION = 'UPDATE' +ENDIF + +IF EMPTY(C_NUM) + + IF ACTION = 'VALUE' + RETURN C_NUM + ELSE + RETURN .T. + ENDIF +ELSE + C_NUM = ALLTRIM(C_NUM) + ' ' +ENDIF + +IF AT('.', C_NUM) > 0 + IF ACTION = 'VALUE' + RETURN C_NUM + ELSE + RETURN .F. + ENDIF +ENDIF + +FOR L = 1 TO LEN(C_NUM) + X = UPPER(SUBSTR(C_NUM,L,1)) + IF !X$"0123456789/ '" + IF X$["'X] + ELSE + ERR_BOX( X + ' is an INVALID Character',; + 'Please Re-Enter!') + ENDIF + IF ACTION = 'VALUE' + RETURN C_NUM + ELSE + RETURN .F. + ENDIF + ENDIF +NEXT + +// CHECK THE SYNTAX +SLASH_POS = AT('/', C_NUM) + +**SPACE1_POS = AT(' ', C_NUM) +SPACE1_POS := LEN(C_NUM) +FOR I := LEN(C_NUM) - 1 TO 1 STEP -1 + IF SUBS(C_NUM,I,1)$' ' + SPACE1_POS := I + EXIT + ENDIF +NEXT + +IF SPACE1_POS > SLASH_POS .AND. SLASH_POS <> 0 // NO WHOLE NUMBER! + WHOLE_NUM = 0 + SPACE1_POS = 1 +ELSE + WHOLE_NUM = VAL(LEFT(C_NUM, SPACE1_POS-1)) + SPACE1_POS++ // POINT TO FIRST FRACTION DIGIT! +ENDIF + +// FIND END OF FRACTION EXPRESSION +SPACE2_POS = LEN(C_NUM) +FOR L = SLASH_POS TO LEN(C_NUM) + X = SUBSTR(C_NUM,L,1) + IF X = ' ' + SPACE2_POS = L-1 // NEED ACTUAL END OF FRACTION EXPRESSION + EXIT + ENDIF +NEXT +// MAKE SURE NOTHING COMES AFTER THE FRACTION +IF !EMPTY(RIGHT(C_NUM, LEN(C_NUM)-SPACE2_POS) ) + ERR_BOX( 'ERRONEOUS Characters Detected after number',; + 'Please Re-Enter!') + IF ACTION = 'VALUE' + RETURN C_NUM + ELSE + RETURN .F. + ENDIF +ENDIF + + +IF SLASH_POS = 0 // NO FRACTION! + // CHECK FOR REALISTIC VALUE + IF WHOLE_NUM > 300 + ERR_BOX( 'That Value is too LARGE',; + 'Please Re-Enter!') + ** RETURN .F. + IF ACTION = 'VALUE' + RETURN ALLTRIM(STR(WHOLE_NUM,3)) + ELSE + RETURN .F. + ENDIF + ELSE +****RETURN .T. + IF ACTION = 'VALUE' + RETURN ALLTRIM(STR(WHOLE_NUM,3)) + ELSE + RETURN .T. + ENDIF + ENDIF +ELSE + // VALIDATE FRACTION EXPRESSION + FRACTION = ALLTRIM(SUBSTR(C_NUM, SPACE1_POS, SPACE2_POS)) + IF ASCAN(FRACTION_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(FRACTION)}) = 0 + IF ACTION = 'EDIT' + ERR_BOX( 'Invalid FRACTION Entered' ,; + 'Please Reenter!') + RETURN .F. + ENDIF + DO WHILE .T. + FOR I := 1 TO LEN(FRACTION_ARR) + AADD(FRACT_PARR, FRACTION_ARR[I,1]) + NEXT + NCHOICE = LISTBOX(FRACT_PARR,1,'Choose A Fraction') + IF LASTKEY() = 27 + IF ACTION = 'VALUE' + RETURN '0' + ELSE + RETURN .F. + ENDIF + ENDIF + IF NCHOICE <> 0 + FRACTION = FRACTION_ARR[ NCHOICE, 1 ] + EXIT + ENDIF + ENDDO + + IF ACTION = 'VALUE' + IF WHOLE_NUM = 0 + RETURN FRACTION + ELSE + RETURN LTRIM(STR(WHOLE_NUM)) + ' ' + FRACTION + ENDIF + ELSE + // UPDATE THE GET VARIABLE IF IT'S A GET + X = GETACTIVE() // GET CURRENT GET INFO + IF X:HASFOCUS + IF WHOLE_NUM = 0 + X:BUFFER := PADR(ALLTRIM(FRACTION), LEN(X[13]), ' ') // X[13] = OLD VALUE OF GET VAR + ELSE + X:BUFFER := PADR(LTRIM(STR(WHOLE_NUM)) + ' ' + ALLTRIM(FRACTION) ,LEN(X[13]), ' ') + ENDIF + X:ASSIGN() + ENDIF + ENDIF + + + ENDIF + + +ENDIF + +IF ACTION = 'VALUE' + IF WHOLE_NUM = 0 + RETURN FRACTION + ELSE + RETURN LTRIM(STR(WHOLE_NUM)) + ' ' + FRACTION + ENDIF +ELSE + RETURN .T. +ENDIF + +******************************************************************** +FUNCTION GET_SALEPRICE(MMODEL, MPRICE_TYPE, XPRICE_ARR, GET_ARR, ADDL_MODE, PR_CUSTID) +// GET THE WHOLE PRICE + +LOCAL BASE_AMT, OPT_AMT, MEXT_AMT, MSALE_PRICE +LOCAL DISC_AMT := 0 +LOCAL SAVESEL := SELECT() +LOCAL MCAT_CODE +LOCAL MSYS_DISC := 0 +LOCAL MDISC_AMT := 0 +LOCAL MSYS_PCT := (USERFILE2->SYS_DISC * .01) +LOCAL BASEPRICE_CUST := .F. //P3N - 2/18/98 +LOCAL ABASEPRICE //P3N - 2/18/98 + +// GET THE PRICE ARRAY FOR THIS MPRICE TYPE +MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, MPRICE_TYPE, PR_CUSTID) + +// GET BASE PRICE +IF ADDL_MODE .AND. USERFILE2->STD_OPTS$'Y' + BASE_AMT := 0 +ELSE + ABASEPRICE := GET_BASEPRICE(MMODEL, MPRICE_TYPE, XPRICE_ARR, GET_ARR, PR_CUSTID) + BASE_AMT := ABASEPRICE[1] //* P3N - 2/18/98 + BASEPRICE_CUST := ABASEPRICE[2] //* P3N - 2/18/98 +ENDIF +IF BASE_AMT > 9999.99 + ERR_BOX('** ERROR in BASE Price Calculation! **' , ' ', ; + ' Base Price should be less than 9999.99 / calc = ' + ; + STR(BASE_AMT, 9,2) ) +ELSE + REPLACE USERFILE2->BASE_PRI WITH BASE_AMT +ENDIF +// GET ANY OPTION PRICING BEFORE EXTRAS +OPT_AMT = GET_OPTPRICE(MMODEL, MPRICE_ARR, GET_ARR, 'B') +IF OPT_AMT > 9999.99 + ERR_BOX('** ERROR in OPTION Pricing Calculation! **' , ' ', ' Option Price should be less than 9999.99 / calc = ' + STR(OPT_AMT, 9,2) ) +ELSE + REPLACE USERFILE2->OPT_PRI WITH OPT_AMT +ENDIF +// GET EXTRA PRICING +MEXT_AMT = GET_EXTPRICE(GET_ARR, PR_CUSTID) +IF MEXT_AMT > 9999.99 + ERR_BOX('** ERROR in EXTRA Pricing Calculation! **' , ' ', ; + ' Extra Price should be less than 9999.99 / calc = ' + ; + STR(MEXT_AMT, 9,2) ) +ELSE + REPLACE USERFILE2->EXTRA_PRI WITH MEXT_AMT +ENDIF + +// GET ANY OPTION PRICING AFTER EXTRAS +OPT_AMT = GET_OPTPRICE(MMODEL, MPRICE_ARR, GET_ARR, 'A') +IF OPT_AMT > 9999.99 + ERR_BOX('** ERROR in EXTRA OPTION Pricing Calculation - GET_OPTPRICE()! **' , ' ', ; + ' Option Price should be less than 9999.99 / calc = ' + ; + STR(OPT_AMT, 9,2) ) +ELSE + IF OPT_AMT+USERFILE2->OPT_PRI > 9999.99 + ERR_BOX('** ERROR in EXTRA OPTION Pricing Calculation! **' , ' ', ; + ' Option Price should be less than 9999.99 / calc = ' + ; + STR(OPT_AMT+USERFILE2->OPT_PRI, 9,2) ) + ELSE + REPLACE USERFILE2->OPT_PRI WITH USERFILE2->OPT_PRI + OPT_AMT + ENDIF +ENDIF + +// ADD COMPONENTS TOGETHER TO GET FINAL PRICE +MSALE_PRICE = USERFILE2->BASE_PRI + ; + USERFILE2->OPT_PRI + ; + USERFILE2->EXTRA_PRI +IF MSALE_PRICE > 9999.99 + ERR_BOX('** ERROR in SALE Price Calculation! **' , ; + ' Sale Price should be less than 9999.99 / calc = ' + ; + STR(MSALE_PRICE, 9,2), ' ', ; + ' Sale Price can NOT be calculated!' ) + MSALE_PRICE := 0 +ENDIF + +// ROUND TO NEAREST NICKEL +MSALE_PRICE = ROUND_IT(MSALE_PRICE, .05) + + +SELECT (SAVESEL) +RETURN { MSALE_PRICE, BASEPRICE_CUST } + +//** MSALE_PRICE // THIS IS THE PER UNIT PRICE +//** BASEPRICE_CUST // TELLS IF THE BASE PRICE IS FROM THE CUST LVL + +******************************************************************** +FUNCTION GET_BASEPRICE(MMODEL, MPRICE_TYPE, XPRICE_ARR, GET_ARR, PR_CUSTID) +// LOOKUP AND CALCULATE PRICING FOR MMODEL ACCORDING TO PRICE TYPE +// PRICE TYPE: D = DEALER, S = SPECIAL DEALER, B = BUILDER/BUILD TO STOCK +// PRICE TYPE: J = JOBBER(DISTRUBUTER), L = LUMBERMAN +// PRICE ARRAY = LIST OF ROW AND COLUMNS +// GET ARRAY HOLDS THE USER RESPONSES (SEE GET_LINEOPTS FOR ARRAY LAYOUT) + +LOCAL L, SEEKKEY, MATT_CODE, ELEM, DB_ARR := {} +LOCAL M_NUM, MUI_SIZE, MFIELD := '', BASE_PRICE:=0, SAVESEL := SELECT() +LOCAL MCOL_VAR, RETVAL, ELEM2, SCANVAR +LOCAL MPERCENT, SPECPRICE, FLD_ARR +LOCAL XFILE, YFILE := ' ',DFILE := ' ' //P3N 2-5-98-CUST.PRICING UPGRD +LOCAL BASEPRICE_CUST := .F. +IF MPRICE_TYPE = NIL + MPRICE_TYPE = '' +ENDIF + +**SPECPRICE := CUST_SPEC_BP(MMODEL) + +**IF SPECPRICE <> NIL +** RETURN SPECPRICE +**ENDIF + +SELECT PRODUCT +SEEK MMODEL + +MPERCENT = 0 +IF !EMPTY(PR_CUSTID) + CUST_BP->(DBSEEK( PR_CUSTID + MMODEL )) + MPERCENT := CUST_BP->BASEFAC +ELSE + DO CASE + CASE MPRICE_TYPE = 'S' + IF SD_BASEFAC <> 0 + MPERCENT = SD_BASEFAC + ENDIF + + CASE MPRICE_TYPE = 'B' + IF BU_BASEFAC <> 0 + MPERCENT = BU_BASEFAC + ENDIF + + CASE MPRICE_TYPE = 'L' + IF LU_BASEFAC <> 0 + MPERCENT = LU_BASEFAC + ENDIF + + CASE MPRICE_TYPE = 'J' + IF DI_BASEFAC <> 0 + MPERCENT = DI_BASEFAC + ENDIF + + CASE MPRICE_TYPE = 'I' + IF IN_BASEFAC <> 0 + MPERCENT = IN_BASEFAC + ENDIF + + END CASE +ENDIF + +// SELECT THE PRICE TABLE +IF MPERCENT <> 0 + // FORCE IT TO USE DEALER PRICE TABLE + XFILE = 'D' + ALLTRIM(MMODEL) + '.DBF' + // NEED TO GET THE DEALER PRICE ARRAY!!! + MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, 'D', PR_CUSTID) +ELSE + MPERCENT = 100 // SET THIS TO 100, FOR NO CHANGE IN PRICE CALC (BELOW) + IF EMPTY(PR_CUSTID) + XFILE = MPRICE_TYPE + ALLTRIM(MMODEL) + '.DBF' +****XFILE := XFILE + '.DBF' +//** P3N - 2-5-98 - CHANGED TO ADDRESS CUSTOMER PRICING MODIFICATIONS + // GET THE PRICE ARRAY FOR THIS MPRICE TYPE + MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, MPRICE_TYPE, PR_CUSTID) + ELSE + DFILE := 'D' + ALLTRIM(MMODEL) + '.DBF' + YFILE := MPRICE_TYPE + ALLTRIM(MMODEL) + '.DBF' + // UXXXXXXX.001 PRICE DBF + XFILE := 'U' + ALLTRIM(MMODEL) + XFILE := XFILE + '.' + PADL( ALLTRIM(STR( CUST_MAST->CPRICE_NUM )),3,'0') +//** P3N - 2-5-98 - CHANGED TO ADDRESS CUSTOMER PRICING MODIFICATIONS +// GET THE PRICE ARRAY FOR THIS CUSTOMER TYPE 'D'-DEALER + MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, 'D', PR_CUSTID) + ENDIF +//** P3N - 2-5-98 - CHANGED TO ADDRESS CUSTOMER PRICING MODIFICATIONS +// GET THE PRICE ARRAY FOR THIS MPRICE TYPE +**MPRICE_ARR = GET_PRICEARR(XPRICE_ARR, MPRICE_TYPE, PR_CUSTID) +ENDIF + +//** P3N - 4/1/98 - CHANGED TO ADDRESS PRICING CONCERNS (APRIL FOOLS) +//** (IE: PRICE TABLE '*PWS-O.DBF' - S/B '*PWS_O.DBF' ) +XFILE := STRTRAN(XFILE, '-', '_') +YFILE := STRTRAN(YFILE, '-', '_') +DFILE := STRTRAN(DFILE, '-', '_') + +IF VALTYPE(MPRICE_ARR) = 'N' // NO PRICE TABLE, NO PERCENT + BASE_PRICE := 0 +**RETURN BASE_PRICE + PICKUP_DISC(MMODEL) + RETURN { BASE_PRICE + PICKUP_DISC(MMODEL) , BASEPRICE_CUST } +ENDIF + +**IF !FILE(XFILE + '.DBF') +IF !FILE(XFILE) + BASE_PRICE = 0.00 +**RETURN BASE_PRICE + PICKUP_DISC(MMODEL) + RETURN { BASE_PRICE + PICKUP_DISC(MMODEL) , BASEPRICE_CUST } +ELSE + IF SELECT('XMFILE') > 0 + SELECT XMFILE + USE + ENDIF + NET_USE(XFILE, .F., 5, 'XMFILE') +ENDIF + +SEEKKEY = '' + +FOR L = 1 TO LEN(MPRICE_ARR) + IF MPRICE_ARR[L,2] = 'R' // ROW? + MATT_CODE = MPRICE_ARR[L,1] + ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(MATT_CODE)}) + IF ELEM <> 0 + IF !EMPTY(SEEKKEY) + SEEKKEY = SEEKKEY + '-' + ENDIF + SEEKKEY = SEEKKEY + TRIM(GET_ARR[ELEM,4]) + ENDIF + ELSE + IF MPRICE_ARR[L,2] = 'C' + MCOL_VAR = MPRICE_ARR[L,1] + ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(MCOL_VAR)}) + IF ELEM > 0 + MFIELD = ALLTRIM(GET_ARR[ELEM,4]) + ENDIF + ENDIF + ENDIF +NEXT + +// CHECK THAT OPTION RESPONSE IS A VALID FIELD NAME!!! +FLD_ARR = DBSTRUCT() // GET FIELD LIST +SCANVAR := LEFT( STRTRAN(MFIELD, ' ', '_') + SPACE(10), 10) +ELEM2 = ASCAN(FLD_ARR, {|X| LEFT(X[1]+SPACE(10),10) == SCANVAR}) +IF ELEM2 = 0 .OR. ELEM = NIL .OR. ELEM = 0 + IF EMPTY(PR_CUSTID) + IF ELEM = NIL .OR. ELEM = 0 + ERR_BOX( ' CANNOT Calculate Base Price! ', ; + ' The ' + TRIM(MMODEL) + ' Price Table ',; + ' May NOT Be Set Up Correctly ') + ELSE + ERR_BOX( ' CANNOT Calculate Base Price! ', ; + ' Field ' + MFIELD + ' for Option ' + ALLTRIM(GET_ARR[ELEM,1]) ,; + ' Does NOT Exist. Check the Option Responses ', ; + ' Or The ' + TRIM(MMODEL) + ' Price Table ') + ENDIF + ENDIF + IF EMPTY(PR_CUSTID) + BASE_PRICE = GET_ALTPRICE(MMODEL) + ELSE + BASE_PRICE = 0 + ENDIF +**RETURN BASE_PRICE + PICKUP_DISC(MMODEL) + RETURN { BASE_PRICE + PICKUP_DISC(MMODEL) , BASEPRICE_CUST } +ENDIF + +LOCATE FOR TRIM(DESC) == SEEKKEY +**IF !EMPTY(SCANVAR) +IF !EMPTY(SCANVAR) .AND. FIELDPOS(SCANVAR) > 0 + BASE_PRICE = &SCANVAR + BASE_PRICE = BASE_PRICE * (MPERCENT*.01) +ENDIF + +USE + +//** P3N - 2-5-98 - CHANGED TO ADDRESS CUSTOMER PRICING MODIFICATIONS +***IF EMPTY(PR_CUSTID) .AND. BASE_PRICE = 0 +*** BASE_PRICE = GET_ALTPRICE(MMODEL) +***ENDIF +IF EMPTY(PR_CUSTID) + IF BASE_PRICE = 0 + BASE_PRICE := GET_ALTPRICE(MMODEL) + ELSE + // BASE PRICE CALCULATED ABOVE! + ENDIF +ELSE + // CUST. BASE PRICE NOT CALCULATED ABOVE - GET FROM REAL BASE PRICE TABLE! + IF BASE_PRICE = 0 + BASE_PRICE := GET_REALBASE(YFILE, SEEKKEY, SCANVAR, MPERCENT, DFILE) + ELSE + // CUSTOMER BASE PRICE CALCULATED ABOVE! + // DO NOT APPLY A DISCOUNT FOR CUSTOMER BASE PRICE ITEMS! + BASEPRICE_CUST := .T. //* P3N - 2/18/98 + ENDIF +ENDIF + + +SELECT(SAVESEL) +RETURN { BASE_PRICE + PICKUP_DISC(MMODEL) , BASEPRICE_CUST } +** RETURN BASE_PRICE + PICKUP_DISC(MMODEL) + +********************************************************** +* CUSTOMER BASE PRICE WAS ZERO GET THE REAL BASE PRICE +* FROM THE ORIGINAL BASE PRICE TABLE - PRICE SHEET OR DEALER +* // P3N 2-5-98 - CUSTOMER PRICING UPGRADE +********************************************************** +FUNCTION GET_REALBASE(YFILE, SEEKKEY, SCANVAR, MPERCENT, DFILE) +LOCAL BASE_PRICE := 0.00 +IF FILE(YFILE) // IF PRICE SHEET TABLE EXISTS GET THE + // BASE_PRICE FROM PRICE SHEET PRICE TABLE! + BASE_PRICE := SEEK_BASE(SEEKKEY, YFILE, SCANVAR, MPERCENT) +ENDIF +IF EMPTY(BASE_PRICE) // NO PRICE @ PRICE SHEET TABLE + IF FILE(DFILE) // DEFAULT IS THE DEALER PRICE TABLE + BASE_PRICE := SEEK_BASE(SEEKKEY, DFILE, SCANVAR, MPERCENT) + ENDIF +ENDIF +RETURN BASE_PRICE + + +********************************************************** +* SEEK AND RETIREVE THE BASE PRICE FROM THE PRICE SHEET OR DEALER TABLE +* // P3N 2-5-98 - CUSTOMER PRICING UPGRADE +********************************************************** +FUNCTION SEEK_BASE(SEEKKEY, PFILE, SCANVAR, MPERCENT) +LOCAL SVSEL := SELECT(), BASE_PRICE := 0.00 +IF SELECT('XMFILE') > 0 + SELECT XMFILE + USE +ENDIF +NET_USE(PFILE, .F., 5, 'PFILE') +LOCATE FOR TRIM(DESC) == SEEKKEY +IF !EMPTY(SCANVAR) .AND. FIELDPOS(SCANVAR) > 0 + BASE_PRICE = &SCANVAR + IF EMPTY(MPERCENT) + ELSE + BASE_PRICE = BASE_PRICE * (MPERCENT*.01) + ENDIF +ENDIF +USE + +SELECT(SVSEL) +RETURN BASE_PRICE +********************************************************************** +* ARE THERE ANY SPECIAL CUSTOMER BASE PRICE TABLES ACTIVE? +********************************************************************** +FUNCTION CK_SPEC_PRICE( CUSTID, MMODEL, CKDATE, LOOKFILE ) +LOCAL SEEKKEY := CUSTID + MMODEL +LOCAL MDATE1, MDATE2, SAVESEL := SELECT(), RETVAL := .F. + +IF LOOKFILE = 'CUST_BP' + SELECT CUST_BP + CUST_BP->(DBSEEK(SEEKKEY)) +ELSE + SELECT (LOOKFILE) + LOCATE FOR PROD_CODE == MMODEL +ENDIF + +IF FOUND() + IF EMPTY(DATE1) + MDATE1 := CTOD('01/01/1960') + ELSE + MDATE1 := DATE1 + ENDIF + + IF EMPTY(DATE2) + MDATE2 := CTOD('01/01/2050') + ELSE + MDATE2 := DATE2 + ENDIF + + IF CKDATE >= MDATE1 .AND. CKDATE <= MDATE2 + RETVAL := .T. + ENDIF +ENDIF +SELECT (SAVESEL) +RETURN RETVAL + +******************************************************************** +** FUNCTION CUST_SPEC_BP(MMODEL) +** LOCAL SEEKKEY, RETVAL, MDATE1, MDATE2 +** LOCAL SPEC_PRICE +** +** SEEKKEY := (CUR_MAST)->CUST_ID + MMODEL +** SELECT CUST_BP +** SEEK SEEKKEY +** IF !FOUND() +** RETURN NIL +** ENDIF +** +** IF EMPTY(DATE1) +** MDATE1 := CTOD('01/01/1960') +** ELSE +** MDATE1 := DATE1 +** ENDIF +** +** IF EMPTY(DATE2) +** MDATE2 := CTOD('01/01/2050') +** ELSE +** MDATE2 := DATE2 +** ENDIF +** +** **IF !(USERFILE2->ORDER_DATE >= MDATE1 .AND. USERFILE2->ORDER_DATE <= MDATE2) +** +** IF !( (CUR_MAST)->ORDER_DATE >= MDATE1 .AND. (CUR_MAST)->ORDER_DATE <= MDATE2 ) +** RETURN NIL +** ENDIF +** +** SPEC_PRICE := CALC_CUST_PR( MMODEL, USERFILE2->UI_SIZE ) +** +** RETURN SPEC_PRICE +** +** +** ******************************************************************** +** FUNCTION CALC_CUST_PR(MMODEL, SIZEVAL) +** LOCAL SEEKKEY +** +** SELECT CUST_BPLVL +** SEEKKEY := (CUR_MAST)->CUST_ID + MMODEL +** SEEK SEEKKEY +** IF !FOUND() +** RETURN NIL +** ENDIF +** +** DO WHILE CUST_ID + PROD_CODE == SEEKKEY .AND. !EOF() +** IF SIZEVAL <= VAL(UI_BREAK) +** // RETURN THE (UI PRICE * SIZE) + THE "EACH" PRICE +** RETURN (SIZEVAL * PRICE) + UNIT_PRICE +** ENDIF +** SKIP 1 +** ENDDO +** +** RETURN NIL +** +******************************************************************** +FUNCTION PICKUP_DISC(MMODEL, SELFILE) +// LOOKUP AND CALCULATE DISCOUNT FOR DEALER PICKUPS +// PICKUP DELIVERY DISCOUNT FOR DEALERS +LOCAL RETVAL := 0, SAVESEL := SELECT() + +IF SELFILE = NIL + SELFILE := 'USERFILE2' +ENDIF + +**IF (SELFILE)->PRICE_SHT$'D' ; // DEALER PRICING +**IF ((MHOME_LOC_CODE = 'KC' .AND. (SELFILE)->PRICE_SHT$'D') ; +** .OR. MHOME_LOC_CODE <> 'KC' ) ; +// IF THIS PRICE SHEET CODE IS IN THE CONTROL FILE PICKUPDISC LIST +// AND THE ORDER IS TO BE PICKED UP +IF (SELFILE)->PRICE_SHT$MPICKUPDISC ; + .AND. &CUR_MAST->PICK_DEL == 'P' // PICKUP + SELECT PRODUCT + SEEK MMODEL + SELECT CATEGORY + SEEK PRODUCT->CAT_CODE + RETVAL := D_PICKDISC * -1 +ENDIF + +SELECT (SAVESEL) + +RETURN RETVAL + + +******************************************************************** +FUNCTION GET_OPTPRICE(MMODEL, MPRICE_ARR, GET_ARR, WHCHOPTS) +// LOOKUP AND CALCULATE PRICING FOR MMODEL OPTIONS + + +LOCAL L, SAVESEL := SELECT(), MOPT_PRICE := 0 +LOCAL SEEKKEY, MCAT_CODE +LOCAL II, CUR_ATTSTUFF, CUR_ATTOPTS, CUR_OPTPRICES, CUR_OPTOPTS +LOCAL CUR_ELEM, M1, M2, M3, M4, M5, M6 + +FOR L = 1 TO LEN(GET_ARR) + IF WHCHOPTS <> GET_ARR[L,10] // BAFLAG FOR OPTIONS + LOOP + ENDIF + CUR_ATTSTUFF := GET_ARR[L] + MUSER_RESP := CUR_ATTSTUFF[4] + IF ASCAN(MPRICE_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(MUSER_RESP)} ) > 0 + LOOP // DON'T PROCESS BASE PRICE STUFF + ENDIF + IF !GET_ARR[L,2]$'P' + LOOP // ONLY PROCESS THE P TYPE ATTRIBUTES + ENDIF + IF !EMPTY(MUSER_RESP) .AND. TRIM(MUSER_RESP) <> 'N/A' ; + .AND. TRIM(MUSER_RESP) <> 'NO OPTIONS FOUND!!' + CUR_ATTOPTS := CUR_ATTSTUFF[3] + CUR_ELEM := ASCAN(CUR_ATTOPTS, {|X| ALLTRIM(X[1]) == ALLTRIM(MUSER_RESP)} ) + IF EMPTY(CUR_ELEM) //NO attribute OPTIONS + M1 := '**************************************************' + M2 := '** NO attribute OPTIONS found for ' + ALLTRIM(CUR_ATTSTUFF[5]) + M3 := '**' + M4 := '** In the MODEL/PRODUCT setup function enter the ' + M5 := '** attribute OPTIONS for ' + ALLTRIM(CUR_ATTSTUFF[1]) + M6 := '**************************************************' + ERR_BOX( M1, M2, M3, M4, M5, M6) + ELSE + CUR_OPTOPTS := CUR_ATTOPTS[CUR_ELEM] + CUR_OPTPRICES := CUR_OPTOPTS[4] + + // WHICH COLUMN TO DO!? + DO CASE + CASE CUR_OPTPRICES[1] <> 0 // LIST PER UNIT + MOPT_PRICE = MOPT_PRICE + CUR_OPTPRICES[1] + CASE CUR_OPTPRICES[2] <> 0 // TIMES UNITED INCHES + MOPT_PRICE = MOPT_PRICE + (CUR_OPTPRICES[2]*USERFILE2->UI_SIZE) + CASE CUR_OPTPRICES[3] <> 0 // TIMES SQFT PRICE + MOPT_PRICE = MOPT_PRICE + (CUR_OPTPRICES[3]*USERFILE2->SQFT) + ENDCASE + ENDIF + ENDIF +NEXT + +SELECT(SAVESEL) +RETURN MOPT_PRICE + +******************************************************************** +FUNCTION GET_EXTPRICE(GET_ARR, PR_CUSTID) +// LOOKUP AND CALCULATE EXTRA PRICING FOR OPTION +// AT THE CATEGORY LEVEL ONLY + +LOCAL SAVESEL := SELECT(), MEXT_PRICE := 0 +LOCAL RULE_ARR := {}, GOOD_RESULT, M_AMT := 0, MULTIPLIER := 0 +LOCAL TFVALUE := 0.0000, RESULT, TVVALUE +LOCAL SAVEORD +LOCAL TVSTRTRAN +LOCAL OPT_VAL_TYPE, WHCHCHOICE, CHOICEARR, CHOICEPRICES +LOCAL MROUND_UP +LOCAL WORKVAL1, WORKVAL2 +LOCAL GET_PRICE + + + +SELECT PRI_EXTRAS +SAVEORD := INDEXORD() +DONSETORD(2) +MCAT_CODE = GET_CATCODE(USERFILE2->PROD_CODE) +SEEK MCAT_CODE +DO WHILE CAT_CODE == MCAT_CODE .AND. !EOF() + IF AT('U', PRI_EXTRAS->PRICE_SHT) > 0 ; // USER PRICING + .AND. CUST_PE->(DBSEEK(PRI_EXTRAS->CAT_CODE + PRI_EXTRAS->OPTION + (CUR_MAST)->CUST_ID)) + // USE THIS OPTION + GET_PRICE := 'CUST_PE' + ELSE + GET_PRICE := 'PRI_EXTRAS' + // NO SPECIAL USER PRICING - CHECK PRICE SHEET FROM ORDER LINE + IF EMPTY(PR_CUSTID) .AND. AT(USERFILE2->PRICE_SHT, PRI_EXTRAS->PRICE_SHT) = 0 + SKIP 1 + LOOP + ENDIF + // IF A 'U' IS NOT IN THE PRI_EXTRAS->PRICE_SHT - EXIT + // ELSE SPECIAL CUSTOMERS WILL HAVE ACCESS BASED ON PRI_EXTRAS PRICE VALUES + IF !EMPTY(PR_CUSTID) .AND. AT(USERFILE2->PRICE_SHT, 'U') = 0 + SKIP 1 + LOOP + ENDIF + ENDIF + + IF !EMPTY(RULE_PACK) + IF ALLTRIM(RULE_PACK) = 'ORIEL' + IF USERFILE2->ORIEL_SIZE$'N' .OR. (CUR_MAST)->ORIEL_CHRG$'N' + SKIP 1 + LOOP + ENDIF + ENDIF + + DO CASE + CASE !EMPTY( (GET_PRICE)->UNIT_SALE) + M_AMT = (GET_PRICE)->UNIT_SALE + + CASE !EMPTY( (GET_PRICE)->UI_SALE) // TIMES NUMBER OF UNITED INCHES + M_AMT = (GET_PRICE)->UI_SALE * USERFILE2->UI_SIZE + + CASE !EMPTY( (GET_PRICE)->SQFT_SALE) // TIMES NUMBER OF SQUARE FEET + M_AMT = (GET_PRICE)->SQFT_SALE * USERFILE2->SQFT + + ENDCASE + + MROUND_UP := ROUND_UP // SHOULD TRUE/FALSE VALUE BE ROUNDED UP? + + /* STEP 1. TEST RULE + STEP 2. IF TRUE, EVAL(TRUE VAL) + IF FALSE, USE FALSE VAL + STEP 3. TAKE EVAL FROM STEP 2 * M_AMT + */ + +** RULE_ARR = GETRULES(RULE_PACK) // RULE PACK NAME +** GOOD_RESULT = EVALCLRULES({RULE_ARR},,GET_ARR) // RULE ARRAY + GOOD_RESULT = CHK_RULE(RULE_PACK, GET_ARR, , _SELFILE ) // RULE ARRAY + + IF GOOD_RESULT + TRUE_FALSE = ALLTRIM(TRUE_VAL) + ELSE + TRUE_FALSE = ALLTRIM(FALSE_VAL) + ENDIF + + ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == TRUE_FALSE}) + // IT'S AN OPTION VALUE + TFVALUE := 0 + DO CASE + CASE ELEM > 0 + // DECVAL() (IN CGWMATH) EXPECTS A CHARACTER, AND RETURNS A NUMERIC + + OPT_VAL_TYPE = GET_ARR[ELEM,2] + DO CASE + CASE OPT_VAL_TYPE$'UC' + TFVALUE = DECVAL(GET_ARR[ELEM,4]) // * USER_RESP + + CASE OPT_VAL_TYPE$'P' + // IF PICK LIST, GET THE PRICES FROM THE SELECTED OPTION + // THEN EVALUATE THE TRUE FALSE ON THAT LIKE A NUMERIC ONE + CHOICEARR = GET_ARR[ELEM,3] + WHCHCHOICE = ASCAN(CHOICEARR, {|X| ALLTRIM(X[1]) == ALLTRIM(GET_ARR[ELEM,4])}) + IF WHCHCHOICE = 0 + TFVALUE := 0 + ELSE + CHOICEPRICES = CHOICEARR[WHCHCHOICE,4] + DO CASE + CASE CHOICEPRICES[1] <> 0 + TFVALUE := CHOICEPRICES[1] + CASE CHOICEPRICES[2] <> 0 + TFVALUE := CHOICEPRICES[2] + CASE CHOICEPRICES[3] <> 0 + TFVALUE := CHOICEPRICES[3] + ENDCASE + ENDIF + ENDCASE + CASE ALLTRIM(TRUE_FALSE) == 'ITEM PRICE' + TFVALUE := USERFILE2->BASE_PRI + USERFILE2->OPT_PRI ; + + MEXT_PRICE // ADD ALL PRICE COMPONENTS SO FAR + // DON'T USE "SPECIAL_FIELDS()" BECAUSE IT RETURNS STORED VALUE + // OF THE EXT_PRICE IN DBF VS. THE CURRENT CALCULATED VALUE + TFVALUE = ROUND_IT(TFVALUE, .05) + CASE ALLTRIM(TRUE_FALSE) == 'BASE PRICE' + TFVALUE := USERFILE2->BASE_PRI + CASE ALLTRIM(TRUE_FALSE) == "TT WIDTH'" + TFVALUE := USERFILE2->ACT_WIDTH / 12 + CASE ALLTRIM(TRUE_FALSE) == 'TT WIDTH' + TFVALUE := USERFILE2->ACT_WIDTH + CASE ALLTRIM(TRUE_FALSE) == "TT HEIGHT'" + TFVALUE := USERFILE2->ACT_HEIGHT / 12 + CASE ALLTRIM(TRUE_FALSE) == 'TT HEIGHT' + TFVALUE := USERFILE2->ACT_HEIGHT + CASE SPEC_FLD(TRUE_FALSE) // IS IT A SPECIAL FIELD? + TVSTRTRAN:= STRTRAN(ALLTRIM(TRUE_FALSE),' ', '_') // INCASE BLANKS + TFVALUE := USERFILE2->&TVSTRTRAN + IF VALTYPE(TFVALUE)$'C' + TFVALUE := VAL(TFVALUE) + ENDIF + CASE VALTYPE(TRUE_FALSE) = 'C' + TFVALUE = VAL(TRUE_FALSE) // IS IT ALWAYS A CHARACTER? + OTHERWISE + TFVALUE = TRUE_FALSE // IS IT ALWAYS A NUMERIC? + ENDCASE + + IF MROUND_UP = 'Y' + WORKVAL1 := TFVALUE - INT(TFVALUE) + IF WORKVAL1 > 0 + TFVALUE := INT(TFVALUE) + 1 + ENDIF + ENDIF + MEXT_PRICE = MEXT_PRICE + (TFVALUE * M_AMT) + + ENDIF + SKIP 1 +ENDDO + +DONSETORD(SAVEORD) + +SELECT(SAVESEL) +RETURN MEXT_PRICE + +******************************************************************** +* BASE PRICE COULD NOT BE CALCULATED ALLOW USER TO ENTER A PRICE! +******************************************************************** +FUNCTION GET_ALTPRICE(MODEL_NUM) +// ASK USER FOR A BASE_PRICE + +LOCAL BASE_PRICE := USERFILE2->ALT_BPRICE, SAVESCR := SAVESCREEN() +LOCAL NTOP, NBOTT, NLEFT, NRIGHT + +NTOP = 10 +NBOTT = 17 +NLEFT = 20 +NRIGHT = 61 + +SETCOLOR(BLACK) +@ NTOP+1,NLEFT+1 CLEAR TO NBOTT+1,NRIGHT+1 // DRAW SHADOW BOX +SETCOLOR(HREV) +@ NTOP,NLEFT CLEAR TO NBOTT,NRIGHT // DRAW BACKROUND COLOR +@ NTOP,NLEFT TO NBOTT,NRIGHT // DRAW DOUBLE LINE + +@ NTOP+2,NLEFT+3 SAY ' Base Price for LINE #' + STR(USERFILE2->LINE_NUM,3) + ' Was Zero' +@ NTOP+4,NLEFT+3 SAY ' Enter Price for this ' + ALLTRIM(MODEL_NUM) GET BASE_PRICE; + PICTURE '9999.99' +READ() +SETCOLOR(LNOR) +RESTSCREEN(,,,,SAVESCR) + +REPLACE USERFILE2->ALT_BPRICE WITH BASE_PRICE + +RETURN BASE_PRICE + +************************************************************** +//* DELETE THE CURRENT LINE IN THE TEMP ORDER LINES FILE +************************************************************** +FUNCTION DEL_LINEDETAIL(ADDL_MODE) + +LOCAL SAVEREC, CORR, MSG, DEL_LINE, SEEKKEY, MORDER_NUM, CUR_LINE, DONE := .F. +LOCAL SAVESCR := SAVESCREEN(), SAVEORD +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') + +LOCAL SVSEL := SELECT() //** P3N - 8/4/98 + +LOCAL M1 := 'Order ' + (CUR_MAST)->ORDER_NUM + ' shippped on ' + ; + DTOC((CUR_MAST)->SHIP_DATE) + '. ' +LOCAL M2 := 'If you continue Shipping Information will be REMOVED!' +LOCAL M3 := 'DO YOU WANT TO CONTINUE?' + +IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + @ 23,0 CLEAR + ? CHR(7) + IF SELECT('ORD_SHIP') > 0 //** P3N - 8/4/98 + ELSE //** P3N - 8/4/98 + DBOPEN('ORD_SHIP') //** P3N - 8/4/98 + ENDIF //** P3N - 8/4/98 + IF ORD_SHIP->(DBSEEK( (SVSEL)->ORDER_NUM )) //** P3N - 8/4/98 + ERR_BOX ('Order ' + (SVSEL)->ORDER_NUM + ' shippped on ' + ; + DTOC((CUR_MAST)->SHIP_DATE) + '!' , ; + 'Contact Supervisor to DELETE this Line !!' ) + IF LASTKEY() <> 126 //** '~' //** P3N - 8/4/98 + RESTSCREEN(,,,,SAVESCR) //** P3N - 8/4/98 + RETURN .F. //** P3N - 8/4/98 + ENDIF //** P3N - 8/4/98 + ENDIF //** P3N - 8/4/98 + SELECT(SVSEL) //** P3N - 8/4/98 + MSG = ' DELETE Line ' + LTRIM(STR(RECNO())) + ' --- Are You Sure?' + CORR = CORRCHEK(23, MSG) + IF CORR <> 'Y' + RESTSCREEN(,,,,SAVESCR) + RETURN .F. + ENDIF +//** P3N - 10/15/98 + IF EMPTY( (CUR_MAST)->SHIP_DATE ) + ELSEIF PROMPT_BOX(M1, M2, M3) //** P3N - 10/15/98 + IF REMOVE_ORD_SHIP() //** P3N - 10/15/98 + // USER REQUESTED TO CONTINUE WITH THE DELETE - SEND INFO MSG + ERR_BOX('Order Control Shipping Information has been REMOVED. ', ' ', ; + 'This Order MUST be RE-SHIPPED!! ', ' ',; + 'INFORM Order Control to RE-SHIP this Order!! ') + ELSE + RETURN .F. //** P3N - 10/15/98 + ENDIF //** P3N - 10/15/98 + ELSE //** P3N - 10/15/98 + RETURN .F. //** P3N - 10/15/98 + ENDIF //** P3N - 10/15/98 + MORDER_NUM = ORDER_NUM + DEL_LINE = RECNO() // LINE ITEM NUMBER TO DELETE IN ODER_OPTS + + SAVEREC := DEL_LINE - 1 + DELETE + PACK + IF LASTREC() = 0 + ADD_REC(3) + ELSE + SAVEORD := INDEXORD() + DONSETORD(0) + REPLACE ALL LINE_NUM WITH LINE_NUM - 1 FOR LINE_NUM > DEL_LINE + DONSETORD(SAVEORD) + ENDIF + + + // UPDATE THE ORDER OPTIONS STUFF! + SELECT USERFILE8 // ORDER OPTIONS (ORD_OPTS-CGW0OO) + IF ADDL_MODE + SEEKKEY = MORDER_NUM + USERFILE2->PROD_CODE + STR(DEL_LINE,3) + ELSE + SEEKKEY = MORDER_NUM + STR(DEL_LINE,3) + ENDIF + DO WHILE .T. + SEEK SEEKKEY + IF !FOUND() + EXIT + ENDIF + REC_LOCK(3) + REPLACE ORDER_NUM WITH '' + REPLACE LINE_NUM WITH 0 + DELETE + ENDDO + + CUR_LINE = DEL_LINE + + // ADJUST ALL ORDER OPTS WITH LINE NUMBER GREATER THAN DEL_LINE + SELECT USERFILE8 //** ORDER OPTS(ORD_OPTS-CGW0OO) + SAVEORD := INDEXORD() + DONSETORD(0) + REPLACE ALL LINE_NUM WITH LINE_NUM - 1 FOR LINE_NUM > DEL_LINE + DONSETORD(SAVEORD) + PACK + + *-// ADJUST ALL ORDER OPTS WITH LINE NUMBER GREATER THAN DEL_LINE + *-DELETE ALL RECS IN ADDL_LINES WHICH HAVE THIS ORDER NUMBER + *-AND THIS LINE NUMBER. THEN DELETE ALL ADDL_OPTS RECORDS FOR + *-THIS ORDER NUMBER AND THIS LINE NUMBER. + *- + *-AFTER YOU DELETE THE RECORDS, THEN RENUMBER SUBSEQUENT RECORDS + *-SO THEIR LINE NUMBERS MATCH WHAT THEY ARE SUPPOSED TO BE! + + SELECT USERFILE6 //** ADDL LINES (CGW0XL) + SAVEORD := INDEXORD() + DONSETORD(0) + DELETE ALL FOR LINE_NUM = DEL_LINE + REPLACE ALL LINE_NUM WITH LINE_NUM - 1 FOR LINE_NUM > DEL_LINE + DONSETORD(SAVEORD) + PACK + + // ADJUST ALL ADDL OPTS WITH LINE NUMBER GREATER THAN DEL_LINE + SELECT USERFILE9 //** ADDL OPTS (CGW0XO) + SAVEORD := INDEXORD() + DONSETORD(0) + DELETE ALL FOR LINE_NUM = DEL_LINE + REPLACE ALL LINE_NUM WITH LINE_NUM - 1 FOR LINE_NUM > DEL_LINE + DONSETORD(SAVEORD) + PACK + + SELECT USERFILE2 + GOTO MAX(SAVEREC,1) + KEYBOARD CHR(5) + CHR(19) +ELSEIF ACTION_CODE = 'REV' + ERR_BOX('You CAN NOT Delete line Items in REVIEW mode!') +ELSE + ERR_BOX('You DO NOT have Authorization to Delete line Items!') +ENDIF + +RETURN .T. + +*********************************************** +FUNCTION F5_NOTACTIVE() +LOCAL M1 := 'The SORT OPTON is NOT ACTIVE' +LOCAL M2 := 'While Entering Line Items.' +LOCAL M3 := 'Request for SORT was IGNORED.' +ERR_BOX( M1, M2, M3) +RETURN .T. + + +*********************************************** +FUNCTION ROUND_IT(M_AMT, ROUNDER) +// ROUND OFF M_AMT TO THE NEXT ROUNDER AMOUNT +// IN CENTS ONLY + +LOCAL CENTS, ROUND_CENTS, DIFFERENCE, RESULT, DO_ROUND := 'N' + +IF SELECT('CUST_MAST') > 0 + DO_ROUND := CUST_MAST->RND_PRICE +ENDIF + +IF M_AMT = 0 .OR. DO_ROUND$'N' + RETURN M_AMT +ENDIF + +SET DECIMALS TO 2 // ONLY WANT 2 DECIMALS! + +CENTS = M_AMT - INT(M_AMT) +RESULT = CENTS / ROUNDER +REMAINDER = RESULT - INT(RESULT) +///// HAVE TO DO THIS BULLSHIT BECAUSE CLIPPER DOESN'T THINK 0 = 0 !!!??? +IF STR(REMAINDER) = STR(0.00) // IS IT DIVISIBLE BY 5, EVENLY? + SET DECIMALS TO + RETURN M_AMT +ENDIF + +ROUND_CENTS = ( INT( CENTS / ROUNDER ) + 1) * ROUNDER +DIFFERENCE = ROUND_CENTS - CENTS + +SET DECIMALS TO +RETURN M_AMT + DIFFERENCE + + +*********************************************** +FUNCTION FILL_EMPTY(MCODE, ACTION, ADDL_MODE) +// THIS WILL FILL THE EMPTY LINE ITEM FIELDS (CURRENT RECORD) +// WITH THE VALUES OF THE PREVIOUS RECORD + +LOCAL SAVESEL := SELECT(), RETVAL := .T., SEEKKEY, NEWSEEK +LOCAL MPROD_CODE := '', MDISCOUNT, MHOW_MEAS +LOCAL MSTD_OPTS := '', MPAR_COLOR := '' + +SELECT USERFILE2 // ORDER LINE ITEMS RECORD + +IF RECNO() > 1 + SKIP -1 // POINT TO PREVIOUS RECORD + + MPROD_CODE := PROD_CODE + MDISCOUNT := DISCOUNT + MHOW_MEAS := HOW_MEAS + MSTD_OPTS := STD_OPTS + IF EMPTY(FIELDPOS('PAR_COLOR')) + MPAR_COLOR := ' ' + ELSE + MPAR_COLOR := PAR_COLOR + ENDIF + SKIP 1 // POINT BACK TO ORIGINAL RECORD +ENDIF + + +IF RECNO() = 1 ; // MUST FILL EVERYTHING MANUALLY +.OR. ( !EMPTY(PROD_CODE) .AND. (PROD_CODE <> MPROD_CODE)) + IF EMPTY(PROD_CODE) + RETVAL := .F. + ENDIF + + IF EMPTY(HOW_MEAS) + RETVAL := .F. + ENDIF + + IF EMPTY(STD_OPTS) + RETVAL := .F. + ENDIF + + IF RETVAL = .F. + SELECT (SAVESEL) + RETURN 'NO CONT' // NEED TO GET USERFILE2 INFO FROM USER + ELSE + SELECT USERFILE8 + IF ADDL_MODE + SEEKKEY := (CUR_MAST)->ORDER_NUM + USERFILE2->PROD_CODE + STR(USERFILE2->LINE_NUM,3) + ELSE + SEEKKEY := (CUR_MAST)->ORDER_NUM + STR(USERFILE2->LINE_NUM,3) + ENDIF + SEEK SEEKKEY + IF !FOUND() // MEANS OPTS NOT THERE + SELECT(SAVESEL) + RETURN 'NO_OPTS_NO_PIRATE' + ELSE + SELECT(SAVESEL) + RETURN 'HAS_OWN_OPTS' + ENDIF + ENDIF +ENDIF + + +// ALL ITEMS HAD SAME PRODUCT CODE AS ITEM ABOVE IT. +// PIRATE ANY MISSING ITEMS FROM THE GUY ABOVE. +IF EMPTY(PROD_CODE) + REPLACE PROD_CODE WITH MPROD_CODE +ENDIF + +IF EMPTY(HOW_MEAS) + REPLACE HOW_MEAS WITH MHOW_MEAS +ENDIF + +IF EMPTY(STD_OPTS) + REPLACE STD_OPTS WITH MSTD_OPTS +ENDIF + +//FILL ANY EMPTY LINE_OPTS WHICH ARE MISSING + +SELECT USERFILE8 +IF ADDL_MODE + SEEKKEY := (CUR_MAST)->ORDER_NUM + MPROD_CODE + STR(USERFILE2->LINE_NUM,3) +ELSE + SEEKKEY := (CUR_MAST)->ORDER_NUM + STR(USERFILE2->LINE_NUM,3) +ENDIF +SEEK SEEKKEY +IF !FOUND() // MEANS OPTS NOT THERE + IF USERFILE2->STD_OPTS == MSTD_OPTS .AND. CK_PAR_COLOR(MPAR_COLOR) + RETVAL := 'PIRATE_OPTS' //COPY ORDER_OPTS FOR LINE PREVIOUS + ELSE + RETVAL = 'NO_OPTS_NO_PIRATE' + ENDIF +ELSE + RETVAL := 'HAS_OWN_OPTS' //DON'T COPY ORDER_OPTS FOR LINE PREVIOUS +ENDIF + +SELECT(SAVESEL) +RETURN RETVAL + +***************************************************** +* IS THERE A PARENT COLOR FOR THIS LINE ITEM? * +* IF SO IS IT THE SAME AS THE PREV LINE ITEM? * +***************************************************** +FUNCTION CK_PAR_COLOR(MPAR_COLOR) +LOCAL RET_VAL +IF EMPTY(USERFILE2->(FIELDPOS('PAR_COLOR'))) + RETVAL := .T. +ELSEIF USERFILE2->PAR_COLOR == MPAR_COLOR + RETVAL := .T. +ELSE + RETVAL := .F. +ENDIF +RETURN RETVAL +***************************************************** +FUNCTION BUILD_GETARR(MPROD_CODE, ACTION, MORDER_NUM, MLINE_NUM, PIRATE_VAR, USE_TMP, ADDL_MODE, PPR_CUSTID, DISP_WAIT, SELFILE) +// BUILDS A GET ARRAY AND A PRICING ARRAY FOR MPROD_CODE +// ACTION = 1, GET THE OPTIONS FROM THE ORDER OPTION FILE +// ACTION = 2, JUST BUILD THE GET_ARR & PRICING ARRAY + + +// LAYOUT FOR THE PRICE_ARR +// 1 = PRICE TABLE TYPE (DEALER, SPEC DEALER, INSTALLER, LUMBERMAN, DISTRIBUTOR) +// 1 = ATTRIBUTE NAME +// 2 = PRICE TYPE (R=ROW, C=COLUMN) + +// LAYOUT FOR THE GET_ARR +// 1 = ATTRIBUTE NAME +// 2 = FIELD TYPE (P=PICK, U=USER INPUT, C=CALCULATE, T=PRICE TABLE) +// 3 = ARRAY OF ALL THE POSSIBLE ATTRIBUTE OPTIONS (FOR THE PICK TYPE) +// 1 = OPTION VALUE +// 2 = HOLDS THE DEFAULT FLAG (IF IT'S AN ASTERISK, IT'S THE DEFAULT) +// 3 = HOLDS THE DEFAULT FLAG RULE +// 4 = ARRAY OF PRICES +// 1 = UNIT SALE PRICE +// 2 = UNITED INCH SALE PRICE +// 3 = SQUARE FEET SALE PRICE +// 5 = SEQUENCE NUMBER FOR OPTIONS +// 6 = PRINT INDICATOR USED FOR OPTIONAL PRINT VALUES +// 7 = OPTIONAL PRINT VALUE - USED WITH PRINT INDICATOR +// 8 = OPTION ADJUSTMENT WIDTH +// 9 = OPTION ADJUSTMENT HEIGHT +// 10 = (ADDITIONAL) LINK PRODUCT CODE (ie A STORM WINDOW FOR A 404) +// 11 = (PARENT PRODUCT LINK CODE (ie A STORM WINDOW FOR A 404) +// 12 = RND_TTW_TO - ROUND TT WID TO SIZE (AND PROD SIZE) +// 13 = RND_TTW_RU - ROUND TT WID TO SIZE RULE +// 14 = RND_TTH_TO - ROUND TT HT TO SIZE (AND PROD SIZE) +// 15 = RND_TTH_RU - ROUND TT HT TO SIZE RULE +// 4 = THE VALUE THAT THE USER CHOOSES, TO GO IN THE FILE (USER RESPONSE) +// 5 = ATTRIBUTE DESCRIPTION +// 6 = RULE TO EXECUTE +// 7 = LOGIC VAR, WHETHER TO GET/SAY IT OR NOT +// 8 = HOLDS THE FILE NAME WHERE THE OPTIONS WERE FOUND +// 9 = TELLS IF THE OPTION WAS A DEFAULT SELECTION +// 10 = IS THE ATTRIBUTE CALCULATED BEFORE/AFTER CATEGORY EXTRAS? +// 11 = CURRENT PARENT PRODUCT + +// PIRATE_VAR TELLS WHETHER OR NOT TO PIRATE THE LINE_OPT RECORDS +***************************************************** + +LOCAL MCODE := MPROD_CODE, L, CHK_BLOCK +LOCAL SEEKKEY, FILE1, FILE2, DBNAME, MATT_CODE, MDESC +LOCAL GET_ARR := {}, PRICE_ARR := {}, OPT_ARR, OPT_ARRAMT +LOCAL NEW_PCODE, NEW_STD_OPTS, ELEM := 0 +LOCAL SV_SEL := SELECT(), SAVESCRN := SAVESCREEN() +LOCAL LINEFILE, OPTFILE, MSTD_OPTS +LOCAL D_ARR := {}, S_ARR := {}, B_ARR := {}, L_ARR := {}, J_ARR := {} +LOCAL CUST_PARR := {} +LOCAL TEMP_ARR := {}, NEW_GET_ARR := .T., I_ARR := {} +LOCAL MHOW_MEAS, PR_CUSTID := SPACE(8) + +LOCAL RND_TTW_RULE := '' +LOCAL RND_TTH_RULE := '' + + +STATIC ALLGET_ARR := {} +STATIC ALLPRI_ARR := {} + +PRIVATE _SELFILE := SELFILE + +IF DISP_WAIT = NIL + DISP_WAIT := .T. +ENDIF + +//**IF SELECT('USERFILE2') > 0 //** P3N-4/22/98 +//** MSTD_OPTS := USERFILE2->STD_OPTS +//** MHOW_MEAS := USERFILE2->HOW_MEAS +//**ELSE +//** MSTD_OPTS := NIL +//** MHOW_MEAS := NIL +//**ENDIF +IF FIELDPOS('STD_OPTS') > 0 //** P3N - 4/22/98 + MSTD_OPTS := STD_OPTS +ELSE + MSTD_OPTS := NIL +ENDIF +IF FIELDPOS('HOW_MEAS') > 0 //** P3N - 4/22/98 + MHOW_MEAS := HOW_MEAS +ELSE + MHOW_MEAS := NIL +ENDIF + +IF DISP_WAIT + WAIT_BOX('*** Retrieving Product Options ***' , ; + ' ', ; + '*** Please Wait ***') +ENDIF + +IF USE_TMP == NIL + USE_TMP := .T. +ENDIF + +IF PPR_CUSTID = NIL + PR_CUSTID := SPACE(8) +ELSE + PR_CUSTID := PPR_CUSTID +ENDIF + +ELEM := ASCAN(ALLGET_ARR, {|X| X[1] == MPROD_CODE ; + .AND. X[2] == MHOW_MEAS ; + .AND. X[5] == MSTD_OPTS ; + .AND. X[6] == PR_CUSTID } ) + +IF ELEM > 0 + GET_ARR := ACLONE(ALLGET_ARR[ELEM, 4]) + PRICE_ARR := ACLONE(ALLPRI_ARR[ELEM, 4]) + FILE1 := ALLPRI_ARR[ELEM,6] +ELSE + + SEEKKEY = MCODE // SEEK SO THE PERCENT OF DEALER STUFF IS ALWAYS VISIBLE + SELECT PRODUCT + SEEK SEEKKEY + + IF !EMPTY(PR_CUSTID) + SELECT CUST_ATTS + FILE1 = 'CUST_ATTS' + FILE2 = 'CUST_OPTS' + DBNAME = 'CUST_ID + PROD_CODE' + SEEKKEY := PR_CUSTID + MCODE + SEEK SEEKKEY + ENDIF + IF EMPTY(PR_CUSTID) .OR. !FOUND() + SEEKKEY = MCODE + SELECT PROD_ATTS + FILE1 = 'PROD_ATTS' + FILE2 = 'PROD_OPTS' + DBNAME = 'PROD_CODE' + SEEK SEEKKEY + IF !FOUND() + SELECT CAT_ATTS + SEEKKEY := PRODUCT->CAT_CODE + SEEK SEEKKEY + FILE1 = 'CAT_ATTS' + FILE2 = 'CAT_OPTS' + DBNAME = 'CAT_CODE' + ENDIF + ENDIF + + // SITTING ON FILE1, EITHER CUST_ATTS OR PRODUCTS OR CATEGORY FILE + // GET LIST OF ATTRIBUTES + + GET_ARR := {} + DO WHILE SEEKKEY == &DBNAME .AND. !EOF() + MATT_CODE = ATT_CODE + SELECT ATTRIBUTES + SEEK MATT_CODE + MDESC = DESC + SELECT &FILE1 + AADD(GET_ARR, {ATT_CODE, FIELD_TYPE, {}, SPACE(20), MDESC, ; + RULE_PACK, .F., '', '', BEF_AFT_X, ''}) + + //////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\ + // SET UP THE PRICING ARRAY TOO + // ALL CUSTOMER ROWS/COLS ARE IN LINK_CODE + IF !EMPTY(PR_CUSTID) + IF LINK_CODE$'RC' + AADD(D_ARR, {ATT_CODE, LINK_CODE}) + ENDIF + ELSE + + IF LINK_CODE$'RC' + AADD(D_ARR, {ATT_CODE, LINK_CODE}) + ENDIF + + IF LINK_SD$'RC' + AADD(S_ARR, {ATT_CODE, LINK_SD}) + ENDIF + + IF LINK_BU$'RC' + AADD(B_ARR, {ATT_CODE, LINK_BU}) + ENDIF + + IF LINK_LU$'RC' + AADD(L_ARR, {ATT_CODE, LINK_LU}) + ENDIF + + IF LINK_DI$'RC' + AADD(J_ARR, {ATT_CODE, LINK_DI}) + ENDIF + + IF LINK_IN$'RC' + AADD(I_ARR, {ATT_CODE, LINK_IN}) + ENDIF + ENDIF + + SKIP 1 + ENDDO + + IF !EMPTY(D_ARR) + AADD(PRICE_ARR, {'D', D_ARR}) + ENDIF + + IF !EMPTY(B_ARR) + AADD(PRICE_ARR, {'B', B_ARR}) + ELSE + AADD(PRICE_ARR, {'B', PRODUCT->BU_BASEFAC}) + ENDIF + + IF !EMPTY(S_ARR) + AADD(PRICE_ARR, {'S', S_ARR}) + ELSE + AADD(PRICE_ARR, {'S', PRODUCT->SD_BASEFAC}) + ENDIF + + IF !EMPTY(L_ARR) + AADD(PRICE_ARR, {'L', L_ARR}) + ELSE + AADD(PRICE_ARR, {'L', PRODUCT->LU_BASEFAC}) + ENDIF + + IF !EMPTY(J_ARR) + AADD(PRICE_ARR, {'J', J_ARR}) + ELSE + AADD(PRICE_ARR, {'J', PRODUCT->DI_BASEFAC}) + ENDIF + + IF !EMPTY(I_ARR) + AADD(PRICE_ARR, {'I', I_ARR}) + ELSE + AADD(PRICE_ARR, {'I', PRODUCT->IN_BASEFAC}) + ENDIF + + // LOAD UP THE OPTIONS FOR EACH ATTRIBUTE + IF ELEM = 0 // no options in stored allget_arr + FOR L = 1 TO LEN(GET_ARR) + IF GET_ARR[L,2]$'PT' // ONLY DO PICKS & TABLES + OPT_ARR := {} + // START WITH LOWEST LEVEL FIRST! + + IF !EMPTY(PR_CUSTID) + CHK_BLOCK = {|| CUST_ID + PROD_CODE + ATT_CODE} + SELECT CUST_OPTS + FILE2 = 'CUST_OPTS' + SEEKKEY = PR_CUSTID + MPROD_CODE + GET_ARR[L,1] + SEEK SEEKKEY + ENDIF + IF EMPTY(PR_CUSTID) .OR. !FOUND() + CHK_BLOCK = {|| PROD_CODE + ATT_CODE} + + SELECT PROD_OPTS + FILE2 = 'PROD_OPTS' + SEEKKEY = MPROD_CODE + GET_ARR[L,1] + SEEK SEEKKEY + + IF !FOUND() + SELECT CAT_OPTS + FILE2 = 'CAT_OPTS' + SEEKKEY = PRODUCT->CAT_CODE + GET_ARR[L,1] // CAT ATTT + ATTRIBUTE + SEEK SEEKKEY + DBNAME = 'CAT_CODE' + CHK_BLOCK = {|| CAT_CODE + ATT_CODE} + ENDIF + ENDIF + + IF !FOUND() + SELECT ATT_OPTS + FILE2 = 'ATT_OPTS' + SEEKKEY = GET_ARR[L,1] // ATTRIBUTE + SEEK SEEKKEY + CHK_BLOCK = {|| ATT_CODE} + ENDIF + + DO WHILE SEEKKEY == EVAL(CHK_BLOCK) .AND. !EOF() + // ADD THE OPT VALUE, AND THE DEFAULT FLAG + AADD(OPT_ARR, {OPT_VALUE, OPT_TYPE, RULE_PACK, {}, SEQ_NUM, ; // 1-5 + PRINT_IND, PRINT_VAL, WIDTH_ADJ, HEIGHT_ADJ, ; // 6-9 + LINK_PROD, PAR_PROD, ADJ_INVSZ, ; // 10-12 + RND_TTW_TO, RND_TTW_RULE, ; // 13-14 + RND_TTH_TO, RND_TTH_RULE, ADJ_TTSZ, ; // 15-17 + INCL_RULE, ICPRT_RULE } ) // 18-19 + // IF YOU ADD MORE, UPDATE EMPTY ARRAY BELOW! + + // GET ASSOCIATED PRICING VALUES + OPT_ARRAMT := {} + AADD(OPT_ARRAMT, LIST_PRICE ) + AADD(OPT_ARRAMT, LIST_UI ) + AADD(OPT_ARRAMT, LIST_SQFT ) + + OPT_ARR[LEN(OPT_ARR),4] = OPT_ARRAMT + SKIP 1 + ENDDO + IF EMPTY(OPT_ARR) + //* THE OPT_ARR NEEDS TO BE 19 ELEMENTS + //* 1 , 2 , 3 , 4, 5, 6 , 7, 8 , 9 , 10 , 11 , 12, 13 , 14 , 15 , 16 , 17 , 18 19 + AADD(OPT_ARR, {'NO OPTIONS FOUND!! ', ' ', '', {},0,' ',"",0.0000,0.0000," "," "," ",0.0000, " " ,0.0000," "," ", ' ', ' ' }) + ENDIF + OPT_ARR := ASORT(OPT_ARR, ,, {|X,Y| X[5] < Y[5] } ) + + GET_ARR[L,3] = OPT_ARR // PUT OPTION INFO INTO GET ARRAY + GET_ARR[L,8] = FILE2 // WHERE THE OPTIONS CAME FROM + ENDIF + NEXT + ENDIF + IF ELEM = 0 + TEMP_ARR := ACLONE(GET_ARR) + AADD(ALLGET_ARR, {MPROD_CODE, MHOW_MEAS, ADDL_MODE, TEMP_ARR, MSTD_OPTS, PR_CUSTID}) + TEMP_ARR := ACLONE(PRICE_ARR) + AADD(ALLPRI_ARR, {MPROD_CODE, MHOW_MEAS, ADDL_MODE, TEMP_ARR, MSTD_OPTS, FILE1, PR_CUSTID }) + ENDIF + +ENDIF + + + +// AT THIS POINT, HAVE A BLANK ARRAY EITHER FROM STATIC HOLD ARR OR FILE + +FOR L = 1 TO LEN(GET_ARR) + IF ACTION = 1 // ?? LOAD USER CHOICES + IF USE_TMP + LINEFILE := 'USERFILE2' + OPTFILE := 'USERFILE8' + ELSE + LINEFILE := CUR_OL + OPTFILE := CUR_OO + ENDIF + // + // LOAD USER RESPONSES OR DEFAULTS + IF ADDL_MODE + LINEFILE := CUR_XL //** P3N - 11/26/01 + OPTFILE := CUR_XO //** P3N - 11/26/01 + SEEKKEY = MORDER_NUM + (LINEFILE)->PROD_CODE + MLINE_NUM + GET_ARR[L,1] + ELSE + SEEKKEY = MORDER_NUM + MLINE_NUM + GET_ARR[L,1] + ENDIF + SELECT (OPTFILE) + SEEK SEEKKEY + IF FOUND() + NEW_GET_ARR := .F. + GET_ARR[L,4] = USER_RESP // HAS OWN OPTS + ELSE + // NO OPTIONS FOUND. FIRST, SEE IF PIRATE FROM LINE PREVIOUS. + // IF NOT, THEN SEE IF PIRATE FROM THE PARENT ITEM IF ADDL_MODE + // IF IT'S THE SAME AS THE MODEL BEFORE, GET THOSE OPTIONS + SELECT (LINEFILE) + IF USE_TMP .AND. RECNO() > 1 .AND. PIRATE_VAR = 'PIRATE_OPTS' + SKIP -1 + SELECT (OPTFILE) + IF ADDL_MODE + SEEKKEY = MORDER_NUM + (LINEFILE)->PROD_CODE + STR(&LINEFILE->LINE_NUM,3) + GET_ARR[L,1] + ELSE + SEEKKEY = MORDER_NUM + STR(&LINEFILE->LINE_NUM,3) + GET_ARR[L,1] + ENDIF + SEEK SEEKKEY + IF FOUND() + IF GET_ARR[L,1] = 'ORIEL TOP' .OR. GET_ARR[L,1] = 'ORIEL BOTT' + // DON'T PIRATE ORIEL MEASUREMENTS. + ELSE + IF USER_RESP <> 'N/A' // 7-3-95 DON-SIZE PROBLEMS WHEN PIRATING OPTS FROM + GET_ARR[L,4] = USER_RESP // PREVIOUS LINE'S VALUES. + ENDIF + ENDIF + ENDIF + SELECT (LINEFILE) + SKIP 1 + ELSE + // SEEK ON THE PARENT OPTIONS FILE FOR THIS ATTRIBUTE + IF ADDL_MODE + SEEKKEY = MORDER_NUM + STR(&LINEFILE->LINE_NUM,3) + GET_ARR[L,1] + SELECT (CUR_OO) + SEEK SEEKKEY + IF FOUND() + GET_ARR[L,4] = USER_RESP + ENDIF + SELECT (OPTFILE) + ENDIF + ENDIF + +//// IF * WAS IN DATABASE, ONLY DO IF DURING SET OPTIONS. + + IF EMPTY(GET_ARR[L,4]) .AND. GET_ARR[L,2]$'PT' + // LOOK FOR THE DEFAULT VALUE + GET_ARR[L,4] = GET_DEFAULT(L, GET_ARR) + IF EMPTY(GET_ARR[L,4]) + GET_ARR[L,4] = 'No DEFAULT Options!!' + GET_ARR[L,9] = ' ' + SGACTION = 'GET' + ELSE + GET_ARR[L,9] = '*' + // SET ANOTHER ELEMENT IN THE OPTIONS PART OF THE GETARR + // WHICH SIGNIFIES THAT THIS VALUE WAS A CALCULATED DEFAULT. + // THEN, DURING THE PRINT PROCESS, DON'T HAVE TO MESS WITH 'GET_DEFAULT' + ENDIF + ENDIF + ENDIF + + ENDIF + +NEXT + +RESTSCREEN(,,,,SAVESCRN) +SELECT(SV_SEL) +RETURN {GET_ARR, PRICE_ARR, FILE1} +********************************************************* +// MOVES THE TEMPORARY ORDER LINES INTO THE PERMANENT FILE (ADDL_LINES) +********************************************************* +FUNCTION UPDATE_LINES +LOCAL SAVESEL := SELECT(), MORDER_NUM, L := 0 +LOCAL DELFLAG := .F., DEL_ARR := {}, MPROD_CODE + +MORDER_NUM = &CUR_MAST->ORDER_NUM + +SELECT USERFILE6 +GOTO TOP +DO WHILE !EOF() + IF UPDATED = 'P' + SKIP 1 + LOOP + ENDIF + MLINE_NUM = LINE_NUM + MPROD_CODE = PROD_CODE + SELECT (CUR_XL) + SEEK MORDER_NUM + MPROD_CODE + STR(MLINE_NUM,3) + IF !FOUND() + ADD_ONEREC('USERFILE6', CUR_XL) + ELSE + REC_LOCK(1) + REP_ONEREC('USERFILE6', CUR_XL) + REPLACE (CUR_XL)->GL311_AMT WITH ; + ( SET_GL311( (CUR_XL)->PROD_CODE ) * (CUR_XL)->QUANTITY ) + REPLACE UPDATED WITH ' ' // INDICATE THAT THIS IS NO LONGER PENDING + UNLOCK + ENDIF + SELECT USERFILE6 + SKIP 1 +ENDDO + +SELECT (CUR_XL) +SEEK MORDER_NUM +DO WHILE ORDER_NUM == MORDER_NUM .AND. !EOF() + IF UPDATED = 'P' + AADD(DEL_ARR, RECNO() ) + DELFLAG := .T. + ENDIF + SKIP 1 +ENDDO + +IF DELFLAG + FOR L = 1 TO LEN(DEL_ARR) + GOTO DEL_ARR[L] + REC_LOCK(1) + REPLACE ORDER_NUM WITH '' + REPLACE LINE_NUM WITH 0 + REPLACE PROD_CODE WITH '' + DELETE + UNLOCK + NEXT +ENDIF + +RETURN .T. +********************************************************* +// MOVES THE TEMPORARY ORDER OPTIONS INTO THE PERMANENT FILE +********************************************************* +FUNCTION UPDATE_ORDS(MUSERFILE) +LOCAL MORDER_NUM, MLINE_NUM, MATT_CODE, MUSER_RESP +LOCAL SAVESEL := SELECT(), DELFLAG := .F., SAVESCR +LOCAL DEL_ARR := {}, REALFILE, SEEKKEY +LOCAL ADDL_MODE := .F. +LOCAL REAL_PARENT +LOCAL M1 := 'Do you want to CONTINUE? ' + ; + 'Order ' +(CUR_MAST)->ORDER_NUM + ' shippped on ' + ; + DTOC((CUR_MAST)->SHIP_DATE) +LOCAL M2 := 'If you do continue it is IMPERATIVE to RECREATE ' +LOCAL M3 := 'Order Control Shipping Information to reflect any changes.' +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') //** P3N - 10/15/98 +IF CUR_MAST == 'ORD_MAST' .AND. MUSERFILE = 'USERFILE8' //** P3N - 10/15/98 + IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' //** P3N - 10/15/98 + IF SELECT('ORD_SHIP') > 0 //** P3N - 10/15/98 + ELSE //** P3N - 10/15/98 + DBOPEN('ORD_SHIP') //** P3N - 10/15/98 + ENDIF //** P3N - 10/15/98 + IF ORD_SHIP->(DBSEEK((CUR_MAST)->ORDER_NUM)) //** P3N - 10/15/98 + ? CHR(7) //** P3N - 10/15/98 + IF PROMPT_BOX(M1, M2, M3) //** P3N - 10/15/98 + // USER REQUESTED TO CONTINUE WITH THE UPDATE SEND INFO MSG + ERR_BOX('ANY Order changes will TAINT EXISTING Shipping Information. ' , ; + 'IF YOU CONTINUE - To ENSURE ACCURATE shipping information: ' , ; + ' 1) REMOVE ALL current Shipping Information.', ' and', ; + ' 2) RE-SHIP this Order. ' , ; + 'Press to ABORT. ' ) + IF LASTKEY() = 27 //** P3N - 10/15/98 + RETURN .F. //** P3N - 10/15/98 + ENDIF //** P3N - 10/15/98 + ELSE //** P3N - 10/15/98 + KEYBOARD CHR(27) //** P3N - 11/19/98 + RETURN .F. //** P3N - 10/15/98 + ENDIF //** P3N - 10/15/98 + ENDIF //** P3N - 10/15/98 + ENDIF //** P3N - 10/15/98 +ENDIF //** P3N - 10/15/98 + +IF MUSERFILE == 'USERFILE8' +//* REALFILE = 'ORDER_OPTS' +//* REAL_PARENT := 'ORD_LINES' +* REALFILE = ['] + &CUR_OO + ['] +* REAL_PARENT := ['] + &CUR_OL + ['] + REALFILE = CUR_OO + REAL_PARENT := CUR_OL +ELSE + IF MUSERFILE == 'USERFILE9' +//* REALFILE = 'ADDL_OPTS' +//* REAL_PARENT := 'ADDL_LINES' +* REALFILE = ['] + &CUR_XO + ['] +* REAL_PARENT := ['] + &CUR_XL + ['] + REALFILE = CUR_XO + REAL_PARENT := CUR_XL + ADDL_MODE := .T. + ELSE + IF MUSERFILE == 'FILE8FILE9' + MUSERFILE = 'USERFILE8' +//* REALFILE = "ADDL_OPTS" +//* REAL_PARENT := 'ADDL_LINES' +* REALFILE = ['] + &CUR_XO + ['] +* REAL_PARENT := ['] + &CUR_XL + ['] + REALFILE = CUR_XO + REAL_PARENT := CUR_XL + ADDL_MODE := .T. + ENDIF + ENDIF +ENDIF + +SELECT (MUSERFILE) +GO TOP +MORDER_NUM = ORDER_NUM + +DO WHILE !EOF() + MLINE_NUM = LINE_NUM + MATT_CODE = ATT_CODE + MUSER_RESP = USER_RESP + + SELECT (REALFILE) + IF ADDL_MODE + SEEKKEY := MORDER_NUM + (MUSERFILE)->PROD_CODE + STR(MLINE_NUM,3) + ELSE + SEEKKEY := MORDER_NUM + STR(MLINE_NUM,3) + ENDIF + + IF !( (REAL_PARENT)->(DBSEEK(SEEKKEY)) ) + SELECT (MUSERFILE) + SKIP 1 + LOOP + ENDIF + + SELECT (REALFILE) + SEEKKEY := SEEKKEY + MATT_CODE // SEEKKEY ON OPT_FILE HAS ATT_CODE AT END + SEEK SEEKKEY + IF !FOUND() + ADD_REC(3) + REPLACE ORDER_NUM WITH MORDER_NUM + REPLACE LINE_NUM WITH MLINE_NUM + REPLACE ATT_CODE WITH MATT_CODE + IF ADDL_MODE + REPLACE PROD_CODE WITH (MUSERFILE)->PROD_CODE + ENDIF + ELSE + REC_LOCK(3) + ENDIF + REPLACE USER_RESP WITH MUSER_RESP + REPLACE UPDATED WITH ' ' + UNLOCK + + SELECT (MUSERFILE) + SKIP 1 +ENDDO + +SELECT (REALFILE) +SEEKKEY = MORDER_NUM +SEEK SEEKKEY +DO WHILE ORDER_NUM == SEEKKEY .AND. !EOF() + IF UPDATED = 'P' + AADD(DEL_ARR, RECNO() ) + DELFLAG := .T. + ENDIF + SKIP 1 +ENDDO + +IF DELFLAG + FOR L = 1 TO LEN(DEL_ARR) + GOTO DEL_ARR[L] + REC_LOCK(1) + REPLACE ORDER_NUM WITH '' + REPLACE LINE_NUM WITH 0 + REPLACE ATT_CODE WITH '' + IF ADDL_MODE + REPLACE PROD_CODE WITH '' + ENDIF + DELETE + UNLOCK + NEXT +ENDIF + +SELECT (SAVESEL) +RETURN .T. + +********************************************************* +// MAKE SURE THE PICKS HAVE A VALID RESPONSE +********************************************************* +FUNCTION VALID_PICK(GET_ARR, POINTER) +LOCAL L, CHECK_VAR +IF GET_ARR[POINTER,2]$'PT' + CHECK_VAR = GET_ARR[POINTER,4] + IF ALLTRIM(CHECK_VAR) = 'N/A' .OR. EMPTY(CHECK_VAR) + RETURN .T. + ENDIF + FOR L = 1 TO LEN(GET_ARR[POINTER,3]) // LIST OF GOOD OPTS + IF CHECK_VAR == GET_ARR[POINTER,3,L,1] + RETURN .T. + ENDIF + NEXT + RETURN .F. +ENDIF +RETURN .T. + +********************************************************* +// RENAME ATTRIBUTES +********************************************************* +FUNCTION REN_ATT +// RENAME ATTRIBUTES + +LOCAL ATT_PARM := DBOPEN('ATTRIBUTES', .T.) , CUR_ATT, NEW_ATT +LOCAL MSG1, MSG2 + +CLS +SAYTITLE('Rename Attributes', 'PRPO' ) + +DBOPEN('ATT_OPTS', .T.) +DBOPEN('CAT_ATTS', .T.) +DBOPEN('CAT_OPTS', .T.) +DBOPEN('PROD_ATTS', .T.) +DBOPEN('PROD_OPTS', .T.) +DBOPEN('ORDER_OPTS', .T.) +DBOPEN('ADDL_OPTS', .T.) +DBOPEN('MATHPACK', .T.) +DBOPEN('RULEPACK', .T.) +// ADD NEW FILES TO THIS LIST FOR QUOTE OPTS +DBOPEN('QUOTE_OPTS', .T.) +DBOPEN('ADDL_QOPT', .T.) + +DO WHILE .T. + CUR_ATT = GET_KEY(ATT_PARM) + IF EMPTY(CUR_ATT) .OR. LASTKEY() = 27 + CLOSE DATABASES + RETURN + ENDIF + NEW_ATT = SPACE(10) + @ 05,19 SAY ' Enter New Attribute' GET NEW_ATT PICTURE '@!' + @ 06,19 SAY ' (Press to Quit)' + READ() + IF EMPTY(NEW_ATT) + LOOP + ENDIF + + MSG1 := 'About to CHANGE Attributes' + MSG2 := 'Do You Wish to Continue?' + IF !PROMPT_BOX(MSG1,MSG2,'') // ASKS YES/NO, YES = .T., NO = .F. + @ 5,0 CLEAR + LOOP + ENDIF + + @ 6,0 CLEAR + @ 10,10 SAY 'Changing ATTRIBUTES in the Attribute File' + SELECT ATTRIBUTES + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Attribute Options File' + SELECT ATT_OPTS + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Category File' + SELECT CAT_ATTS + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Category Options File' + SELECT CAT_OPTS + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Model File' + SELECT PROD_ATTS + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Model Options File' + SELECT PROD_OPTS + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Order Options File' + SELECT ORDER_OPTS + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Additional Order Options File' + SELECT ADDL_OPTS + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Quote Options File' + SELECT QUOTE_OPTS + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Additional Quote Options File' + SELECT ADDL_QOPT + DONSETORD(0) + REPLACE ALL ATT_CODE WITH NEW_ATT FOR TRIM(ATT_CODE) == TRIM(CUR_ATT) + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Math Pack File' + SELECT MATHPACK + DONSETORD(0) + DO WHILE !EOF() + IF TRIM(FIELD1) == TRIM(CUR_ATT) + REPLACE FIELD1 WITH NEW_ATT + ENDIF + IF TRIM(FIELD2) == TRIM(CUR_ATT) + REPLACE FIELD2 WITH NEW_ATT + ENDIF + IF TRIM(ATT_CODE) == TRIM(CUR_ATT) + REPLACE ATT_CODE WITH NEW_ATT + ENDIF + SKIP 1 + ENDDO + DONSETORD(1) + + @ 10,0 + @ 10,10 SAY 'Changing ATTRIBUTES in the Rule Pack File' + SELECT RULEPACK + DONSETORD(0) + DO WHILE !EOF() + IF TRIM(FIELD1) == TRIM(CUR_ATT) + REPLACE FIELD1 WITH NEW_ATT + ENDIF + IF TRIM(FIELD2) == TRIM(CUR_ATT) + REPLACE FIELD2 WITH NEW_ATT + ENDIF + IF TRIM(ALIAS1) == TRIM(CUR_ATT) + REPLACE ALIAS1 WITH NEW_ATT + ENDIF + IF TRIM(ALIAS2) == TRIM(CUR_ATT) + REPLACE ALIAS2 WITH NEW_ATT + ENDIF + SKIP 1 + ENDDO + DONSETORD(1) + @ 5,0 CLEAR + +ENDDO +CLOSE DATABASES +RETURN +********************************************************* +* CALCULATE THE ITEM DISCOUNTS +********************************************************* +FUNCTION ITEMDISC( PARTIAL_INVOICE, REPRINT_INVOICE, SELFILE) +LOCAL THIS_DISC, THIS_LINE +LOCAL ALT_PRICE_IND := .F. //** P3N - 9/1/98 +LOCAL QTYARR := {} //** P3N -12/4/98 +LOCAL INV_QTY := 0 //** P3N -12/4/98 + +//DEFAULT PARTIAL_INVOICE := .F. +//DEFAULT REPRINT_INVOICE := .F. + +If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) +If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) + + +IF EMPTY(PARTIAL_INVOICE) //** P3N -11/24/98 + PARTIAL_INVOICE := .F. //** P3N -11/24/98 +ENDIF //** P3N -11/24/98 + +IF EMPTY(REPRINT_INVOICE) //** P3N -12/4/98 + REPRINT_INVOICE := .F. //** P3N -12/4/98 +ENDIF //** P3N -12/4/98 + +IF PARTIAL_INVOICE .OR. REPRINT_INVOICE //** P3N -12/4/98 + QTYARR := GET_OSTQTY(SELFILE) //** P3N -12/4/98 + IF EMPTY(QTYARR) //** P3N - 12/4/98 + SHP_QTY := 0 //** P3N - 12/4/98 + INV_QTY := 0 //** P3N - 12/4/98 + ELSE //** P3N - 12/4/98 + SHP_QTY := QTYARR[1] //** P3N - 12/4/98 + INV_QTY := QTYARR[2] //** P3N - 12/4/98 + ENDIF //** P3N - 12/4/98 +ENDIF //** P3N - 12/4/98 + +IF ALT_SPRICE <> 0 + IF PARTIAL_INVOICE //** P3N - 11/24/98 +//**THIS_LINE := (ALT_SPRICE * SHIP_QTY) //** P3N - 11/24/98 + THIS_LINE := (ALT_SPRICE * SHP_QTY) //** P3N - 11/24/98 + ELSEIF REPRINT_INVOICE //** P3N - 12/07/98 + THIS_LINE := (ALT_SPRICE * INV_QTY) //** P3N - 12/07/98 + ELSE + THIS_LINE := (ALT_SPRICE * QUANTITY) + ENDIF + ALT_PRICE_IND := .T. //** P3N - 9/1/98 +ELSE + IF PARTIAL_INVOICE //** P3N - 11/24/98 +//**THIS_LINE := (SALE_PRICE * SHIP_QTY) //** P3N - 11/24/98 + THIS_LINE := (SALE_PRICE * SHP_QTY) //** P3N - 11/24/98 + ELSEIF REPRINT_INVOICE //** P3N - 12/07/98 + THIS_LINE := (SALE_PRICE * INV_QTY) //** P3N - 12/07/98 + ELSE + THIS_LINE := (SALE_PRICE * QUANTITY) + ENDIF +ENDIF + +//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING +IF EMPTY(THIS_LINE) + THIS_DISC := 0 //** P3N - 11/23/98 +ELSEIF DISCOUNT <> 0 + THIS_DISC := (DISCOUNT * .01 * THIS_LINE) +ELSEIF EMPTY(DISC_S_AMT) //** IF NO LINE ITEM DISC. USE SYS/CUST DISC + THIS_DISC := (SYS_DISC * .01 * THIS_LINE) +ELSEIF PARTIAL_INVOICE //** P3N - 12/4/98 +//** THIS_DISC := DISC_S_AMT * SHIP_QTY + THIS_DISC := DISC_S_AMT * SHP_QTY +ELSEIF REPRINT_INVOICE //** P3N - 12/4/98 + THIS_DISC := DISC_S_AMT * INV_QTY +ELSE //** P3N - 12/4/98 + THIS_DISC := DISC_S_AMT * QUANTITY +ENDIF + +**IF EMPTY(ALT_SPRICE) // P3N - PER ELLEN - 6/3/98 +**ELSE // DO NOT APPLY A DISCOUNT ON ALT PRICE! +** THIS_DISC := 0 +**ENDIF +THIS_DISC := VAL(STR(THIS_DISC,12,2)) + +//** P3N - 4/3/98 IS THIS ALT_SPRICE A CREDIT? +//** P3N - IF A CREDIT SET THE DISCOUNT NEGATIVE +//** P3N - CGWPRINT FUNC PRNT_DISCOUNTS() WILL TREAT A NEGATIVE DISCOUNT +//** P3N - AS A POSITIVE CHARGE BACK. +IF ALT_SPRICE <> 0 + IF ALT_SPRICE + SALE_PRICE = 0 + IF THIS_DISC < 0 + // DISCOUNT IS ALREADY NEGATIVE + ELSE + THIS_DISC := THIS_DISC * -1 + ENDIF + ENDIF +ELSEIF (CUR_MAST)->TERMS = '98' //CREDIT MEMO + IF THIS_DISC < 0 + // DISCOUNT IS ALREADY NEGATIVE + ELSE + THIS_DISC := THIS_DISC * -1 + ENDIF +ENDIF + +RETURN {THIS_LINE, THIS_DISC, ALT_PRICE_IND} //** P3N - 9/1/98 +****RETURN {THIS_LINE, THIS_DISC} //** P3N - 9/1/98 + + +********************************************************* +** UPDATE MISC TOTAL IN ORDER MASTER +** P3N - 2/20/98 +** PER ELLENS REQUEST - ADDED AN ALTERNATE PRICE +** USED TO OVERRIDE THE SYSTEM GENERATED PRICE! +********************************************************* +FUNCTION UP_MISCTOT(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) +//**LOCAL SUBTOT:=0, SAVESEL := SELECT() +LOCAL SUBTOT := 0, QTYARR := {} +LOCAL WKQTY := 0, MISCKEY //** P3N - 11/25/98 +LOCAL MISCITMS := CUR_MISC //** P3N - 11/25/98 + +//DEFAULT PARTIAL_INVOICE := .F. +//DEFAULT REPRINT_INVOICE := .F. + + +If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) +If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) + + +IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/25/98 + PARTIAL_INVOICE := .F. //** P3N - 11/25/98 +ENDIF + +IF EMPTY(REPRINT_INVOICE) //** P3N - 12/4/98 + REPRINT_INVOICE := .F. //** P3N - 12/4/98 +ENDIF + +IF PARTIAL_INVOICE .OR. REPRINT_INVOICE //** P3N - 12/4/98 + MISCITMS := 'TORD_LINES' //** P3N - 11/25/98 + IF SELECT('TORD_LINES') > 0 + //** TORD_LINES ALREADY EXISTS + IF (MISCITMS)->ORDER_NUM == (CUR_MAST)->ORDER_NUM + //** TORD_LINES ALREADY EXISTS WITH THE SAME ORDER - PROCESS + ELSE + CLOSE TORD_LINES + BLD_TORD_LINES((CUR_MAST)->ORDER_NUM) + ENDIF + ELSE + BLD_TORD_LINES((CUR_MAST)->ORDER_NUM) + ENDIF + (MISCITMS)->(DBGOTOP()) +ELSE + (MISCITMS)->(DBSEEK(MORDER_NUM)) +ENDIF +DO WHILE (MISCITMS)->(!EOF()) .AND. (MISCITMS)->ORDER_NUM == MORDER_NUM + WKQTY := (MISCITMS)->QUANTITY + IF PARTIAL_INVOICE .OR. REPRINT_INVOICE //** P3N - 12/4/98 + IF (MISCITMS)->PROD_CODE == 'MISCITM' + MISCKEY := (MISCITMS)->ORDER_NUM + MISCKEY := MISCKEY + STR((MISCITMS)->LINE_NUM, 3) + MISCKEY := MISCKEY + (MISCITMS)->PROD_CODE + QTYARR := GET_OSTQTY('TORD_LINES', MISCKEY) + IF EMPTY(QTYARR) //** P3N - 12/4/98 + WKQTY := 0 //** P3N - 12/4/98 + ELSEIF PARTIAL_INVOICE //** P3N - 12/4/98 + WKQTY := QTYARR[1] //** SHIP QTY + ELSEIF REPRINT_INVOICE //** P3N - 12/4/98 + WKQTY := QTYARR[2] //** INVOICE QTY + ENDIF //** P3N - 12/4/98 + ELSE + WKQTY := 0 + ENDIF + ENDIF + IF EMPTY((MISCITMS)->ALT_SPRICE) //** P3N - 2/20/98 + SUBTOT := SUBTOT + ( (MISCITMS)->SALE_PRICE * WKQTY ) + ELSE + SUBTOT := SUBTOT + ((MISCITMS)->ALT_SPRICE * WKQTY ) //**P3N-2/20/98 + ENDIF + (MISCITMS)->(DBSKIP(+1)) +ENDDO +//**(MISCITMS)->(DBGOTOP()) + +IF SUBTOT > 99999.99 + ERR_BOX('** Calculated total - ' + ALLTRIM(STR(SUBTOT,16,4)) + ; + ' is larger Than allowable! **', ; + ' The Max. allowable MISC. Order Items total is - $99,999.99', ; + ' The Order INVOICE TOTAL may be INCORRECT!') +ELSE +//** SELECT (CUR_MAST) + REC_LOCK(1, CUR_MAST) + REPLACE (CUR_MAST)->ORD_M_TTL WITH SUBTOT + (CUR_MAST)->(DBUNLOCK()) +ENDIF + +//**SELECT (SAVESEL) +RETURN .T. + + +********************************************************* +****PAINT SCREEN BEFORE 2115 EXECUTES +********************************************************* +FUNCTION MISCP_PAINT(NOPAINT, PARTIAL_INVOICE, REPRINT_INVOICE, SELFILE) + +LOCAL SAVESEL := SELECT() +LOCAL LINE_TOTAL := 0, SUBTOTL := 0, SEEKKEY := &CUR_MAST->ORDER_NUM +LOCAL DISC_TOTAL := 0, _DISC_INFO +LOCAL MISC_TOTAL, L1 := 0, L2 := 0, L3 := 0 +LOCAL THIS_LINE := 0, THIS_DISC := 0 +LOCAL M1 := 0, M2 := 0, M3 := 0, NTX1 := 0, NTX2 := 0, NTX3 := 0 +LOCAL T1 := 0, T2 := 0, T3 := 0 //** P3N - 11/25/98 +LOCAL ALT_PRICE_IND := .F. //** P3N - 9/1/98 +LOCAL ALT_PR_ARR := {} //** P3N - 9/1/98 +LOCAL MISC_ARR := {} //** P3N - 11/25/98 +LOCAL DISC_ARR := {} //** P3N - 12/07/98 +LOCAL DISC_PCT := 0, ELM := 0, TOT_AMT := 0 //** P3N - 12/07/98 +LOCAL DISP_PCT := 0 +LOCAL FSC_PCT := SHIPMETH->FUEL_CHRG / 100 //** P3N - 09/21/06 + +//DEFAULT PARTIAL_INVOICE := .F. +//DEFAULT REPRINT_INVOICE := .F. + +If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) +If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) + + +IF SHIPMETH->(DBSEEK( (CUR_MAST)->SHP_METHOD )) //** P3N - 11/13/06 + FSC_PCT := SHIPMETH->FUEL_CHRG / 100 //** P3N - 11/13/06 +ENDIF //** P3N - 11/13/06 +//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING MODIFICATIONS + +IF EMPTY(NOPAINT) //** P3N - 11/23/98 + NOPAINT := .F. //** P3N - 11/23/98 +ENDIF //** P3N - 11/23/98 + +IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/23/98 + PARTIAL_INVOICE := .F. //** P3N - 11/23/98 +ENDIF //** P3N - 11/23/98 + +IF EMPTY( REPRINT_INVOICE ) //** P3N - 12/4/98 + REPRINT_INVOICE := .F. //** P3N - 12/4/98 +ENDIF //** P3N - 12/4/98 + +IF LASTKEY() = 27 + RETURN +ENDIF + +// DO ORDER LINES FIRST, THEN ADDL PRODUCTS SECOND +IF &CUR_MAST->QUOTE_PRIC > 0 + LINE_TOTAL := &CUR_MAST->QUOTE_PRIC +ELSE + SELECT (CUR_OL) + SEEK SEEKKEY + DO WHILE ORDER_NUM == SEEKKEY .AND. !EOF() + _DISC_INFO := ITEMDISC(PARTIAL_INVOICE, REPRINT_INVOICE, SELFILE) + THIS_LINE := _DISC_INFO[1] + THIS_DISC := _DISC_INFO[2] + ALT_PRICE_IND := _DISC_INFO[3] //** P3N - 9/1/98 + IF ALT_PRICE_IND //** P3N - 9/1/98 + AADD(ALT_PR_ARR, {LINE_NUM, PROD_CODE } ) //** P3N - 9/1/98 + ENDIF //** P3N - 9/1/98 + LINE_TOTAL := LINE_TOTAL + THIS_LINE + // CHECK FOR USER LINE DISCOUNTS OR SYSTEM CALC DISCOUNTS + DISC_TOTAL := DISC_TOTAL + THIS_DISC + + SKIP 1 + ENDDO + + SELECT (CUR_XL) + SEEK SEEKKEY + DO WHILE ORDER_NUM == SEEKKEY .AND. !EOF() + IF ALT_SPRICE <> 0 + THIS_LINE := (ALT_SPRICE * QUANTITY) + ELSE + THIS_LINE := (SALE_PRICE * QUANTITY) + ENDIF + //** P3N - 9/1/98 DO NOT INCLUDE THE ADDL LINE PRICE IN THE TOTAL + //** P3N - 9/1/98 ORDER AMOUNT IF AN ALT. PRICE HAS BEEN ENTERED. + IF EMPTY(ALT_PR_ARR) .OR. ; //** P3N - 9/1/98 + EMPTY(ASCAN(ALT_PR_ARR, {|X| X[1] == LINE_NUM .AND. ; + X[2] == PAR_PROD } ) ) + LINE_TOTAL := LINE_TOTAL + THIS_LINE //** P3N - 9/1/98 + ENDIF //** P3N - 9/1/98 + + + // CHECK FOR USER LINE DISCOUNTS OR SYSTEM CALC DISCOUNTS + IF DISCOUNT <> 0 + THIS_DISC := (DISCOUNT * .01 * THIS_LINE) + ELSE + THIS_DISC := DISC_S_AMT * QUANTITY + ENDIF + DISC_TOTAL := DISC_TOTAL + THIS_DISC + SKIP 1 + ENDDO +ENDIF + +//* CALC SUBTOTAL +UP_MISCTOT((CUR_MAST)->ORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) //** P3N - 11/25/98 + +SELECT (CUR_MAST) +MISC_TOTAL := &CUR_MAST->ORD_M_TTL //* F8-MISC TOTALS +IF PARTIAL_INVOICE .OR. REPRINT_INVOICE //** P3N - 11/24/98 + MISC_ARR := GETQTYMISC( (CUR_MAST)->ORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE ) + FOR I := 1 TO LEN(MISC_ARR[1]) + IF MISC_ARR[1,I,5] == 'ORDMISC1' + IF REPRINT_INVOICE //** P3N - 12/4/98 + M1 := MISC_ARR[1,I,6] //** INV QTY + ELSE + M1 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L1 := MISC_ARR[1,I,4] //** ITEM PRICE + M1 := M1 * L1 + ELSEIF MISC_ARR[1,I,5] == 'ORDMISC2' + IF REPRINT_INVOICE //** P3N - 12/4/98 + M2 := MISC_ARR[1,I,6] //** INV QTY + ELSE + M2 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L2 := MISC_ARR[1,I,4] //** ITEM PRICE + M2 := M2 * L2 + ELSEIF MISC_ARR[1,I,5] == 'ORDMISC3' + IF REPRINT_INVOICE //** P3N - 12/4/98 + M3 := MISC_ARR[1,I,6] //** INV QTY + ELSE + M3 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L3 := MISC_ARR[1,I,4] //** ITEM PRICE + M3 := M3 * L3 + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX1' + IF REPRINT_INVOICE //** P3N - 12/4/98 + T1 := MISC_ARR[1,I,6] //** INV QTY + ELSE + T1 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L1 := MISC_ARR[1,I,4] //** ITEM PRICE + NTX1 := T1 * L1 + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX2' + IF REPRINT_INVOICE //** P3N - 12/4/98 + T2 := MISC_ARR[1,I,6] //** INV QTY + ELSE + T2 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L2 := MISC_ARR[1,I,4] //** ITEM PRICE + NTX2 := T2 * L2 + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX3' + IF REPRINT_INVOICE //** P3N - 12/4/98 + T3 := MISC_ARR[1,I,6] //** INV QTY + ELSE + T3 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L3 := MISC_ARR[1,I,4] //** ITEM PRICE + NTX3 := T3 * L3 + ENDIF + NEXT +ELSE +//* - SCREEN 2115 MISC ITEMS + M1 := &CUR_MAST->MISC_AMT1 * &CUR_MAST->MISC_QTY1 + M2 := &CUR_MAST->MISC_AMT2 * &CUR_MAST->MISC_QTY2 + M3 := &CUR_MAST->MISC_AMT3 * &CUR_MAST->MISC_QTY3 + +//* 7-30-97 NON-TAXABLE AMOUNTS ADDED - Perry Nichols + NTX1 := &CUR_MAST->NOTX_AMT1 * &CUR_MAST->NOTX_QTY1 + NTX2 := &CUR_MAST->NOTX_AMT2 * &CUR_MAST->NOTX_QTY2 + NTX3 := &CUR_MAST->NOTX_AMT3 * &CUR_MAST->NOTX_QTY3 +ENDIF +SUBTOTL := (CUR_MAST)->ORD_L_TTL + (CUR_MAST)->ORD_M_TTL + M1 + M2 + M3 +SUBTOTL := SUBTOTL - (CUR_MAST)->ORD_D_TTL +IF _OC_CAPABLE + REC_LOCK(1) + REPLACE (CUR_MAST)->ORD_L_TTL WITH LINE_TOTAL + IF DISC_TOTAL > 9999.99 + ERR_BOX('** The Calculated Discount is - ' + STR(DISC_TOTAL, 15,2) + ' **' , ; + '** The system can store a discount up to $9999.99 **') + ELSE + REPLACE (CUR_MAST)->ORD_D_TTL WITH DISC_TOTAL + ENDIF + IF M->OE_TYPE == 'ADD' .AND. ; //** P3N - 09/22/06 HAPPY BDAY CINDY #47 + EMPTY((CUR_MAST)->FUEL_CHRG) + //** ADD ORDER TIME-CALC BASED ON THE ORDER TOTAL * SHIPMETH->FUEL_CHRG % + SUBTOTL := (CUR_MAST)->ORD_L_TTL + (CUR_MAST)->ORD_M_TTL + M1 + M2 + M3 + SUBTOTL := SUBTOTL - (CUR_MAST)->ORD_D_TTL + REPLACE (CUR_MAST)->FUEL_CHRG WITH SUBTOTL * FSC_PCT + ENDIF + SUBTOTL += (CUR_MAST)->FUEL_CHRG //** P3N - 09/22/06 HAPPY BDAY CINDY #47 + REPLACE (CUR_MAST)->SALES_TAX WITH ( (CUR_MAST)->SLS_TX_PCT * SUBTOTL ) /100 + +//* 7-30-97 NON-TAXABLE AMOUNTS ADDED - Perry Nichols + TOT_AMT := SUBTOTL +(CUR_MAST)->SALES_TAX + NTX1 + NTX2 + NTX3 + //** P3N - 09/21/06 ADDED THE FUEL SURCHARGE TO ORDER ENTRY + REPLACE (CUR_MAST)->TOTAL_AMT WITH TOT_AMT + + IF ZERO_ORDER() //** NO CHARGE P3N-3/5/99 + REPLACE (CUR_MAST)->TOTAL_AMT WITH 0 + REPLACE (CUR_MAST)->SALES_TAX WITH 0 //** P3N - 02/20/07 + ENDIF + (CUR_MAST)->(DBUNLOCK()) +ENDIF + +//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING MODIFICATIONS +IF NOPAINT + //** DO NOT PAINT ANYTHING ON THE SCREEN + +ELSE + + @ 02,33 SAY ' Line Item Totals ' + STR(&CUR_MAST->ORD_L_TTL,9,2) + @ 03,33 SAY ' Less Discounts ' + @ 04,33 SAY ' Misc Item Lines ' + @ 06,06 SAY 'Misc. Items' + @ 06,36 SAY 'Qty' + @ 06,45 SAY 'Cost' + @ 10,53 SAY '----------' + @ 11,43 SAY 'Subtotal ' + + //* 7-30-97 NON-TAXABLE AMOUNTS ADDED - Perry Nichols + //* lines 16-20 are used for the NON-TAXABLE items + //** P3N - 09/21/06 ADD FUEL SURCHARGE TO ORDER ENTRY + @ 14,53 SAY '----------' + @ 15,06 SAY 'Non-Taxable Items' + @ 15,36 SAY 'Qty' + @ 15,45 SAY 'Cost' + @ 19,53 SAY '----------' + + IF EMPTY((CUR_MAST)->FUEL_CHRG) + + ELSE + DISP_PCT := VAL (STR((CUR_MAST)->FUEL_CHRG / SUBTOTL,15,2)) + ENDIF + + @ 12,65 SAY STR(DISP_PCT*100, 3,0) + '%' //** P3N - 09/21/06 + @ 13,65 SAY STR((CUR_MAST)->SLS_TX_PCT, 8,4) + '%' //** P3N - 09/22/06 - HAPPY BDAY CINDY #47 + @ 21,33 SAY 'Order ' + ALLTRIM((CUR_MAST)->ORDER_NUM) + ' TOTAL' + @ 22,53 SAY '==========' + +ENDIF + + +UP_ORD_TTL(NOPAINT, MISC_ARR, PARTIAL_INVOICE, REPRINT_INVOICE ) + +SELECT(SAVESEL) + +RETURN .T. + + + +********************************************************* +* THIS FUNCTION PROVIDES THE PROCESSING FOR THE MISC PRICING SCREEN +********************************************************* + +FUNCTION MISC_PRICING( ) + +LOCAL SV_SEL := SELECT() +LOCAL SV_COLOR := SETCOLOR(BLACK) +LOCAL I_DESC := SPACE(30), I_AMT := 0, FR_AMT := 0 +LOCAL SLS_TAX := 0 +LOCAL MTITLE := 'ADD Misc Items / Close Order - ' + &CUR_MAST->ORDER_NUM +LOCAL ASR_ARR, OPT +LOCAL ACTION_CODE := GETAVAR( 'ACTION_CODE' ) + +IF LASTKEY() = 27 + RETURN +ENDIF + +IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + OPT := 1 + MTITLE := 'ADD Misc Items / Close Order - ' + &CUR_MAST->ORDER_NUM + IF CUR_MAST = 'QUOTE_MAST' + MTITLE := 'ADD Misc Items / Close Quote - ' + &CUR_MAST->ORDER_NUM + ENDIF +ELSE + OPT := 3 + MTITLE := 'ORDER Misc Items - ' + &CUR_MAST->ORDER_NUM + IF CUR_MAST = 'QUOTE_MAST' + MTITLE := 'QUOTE Misc Items - ' + &CUR_MAST->ORDER_NUM + ENDIF +ENDIF + +ASR_ARR := {'&CUR_MAST',.F., , , , , ACTION_CODE , '2115', .F.} + +NEWREC := .F. +ADD_SING_REC(OPT, MTITLE, ASR_ARR) + +UP_OM_NEED_CALC() // INDICATE THE THE ORDER IS COMPLETE. + +SETCOLOR(SV_COLOR) +SELECT(SV_SEL) +RETURN .T. + +********************************************************* +* THIS FUNCTION UPDATES THE ORDER TOTALS +********************************************************* + +FUNCTION UP_ORD_TTL(NOPAINT, MISC_ARR, PARTIAL_INVOICE, REPRINT_INVOICE) + +LOCAL SAVECOLOR := SETCOLOR(HNOR), LINE_TOTAL := 0 +LOCAL PRNTVAR, SAVESEL := SELECT() +LOCAL M1 := 0, M2 := 0, M3 := 0, NTX1 := 0, NTX2 := 0, NTX3 := 0 +LOCAL T1 := 0, T2 := 0, T3 := 0 //** P3N - 11/25/98 +LOCAL MISC_TOTAL := 0, M_FSC := 0, MFUEL_CHRG := 0 +LOCAL DISC_TOTAL := 0, SUB1 := 0 +LOCAL STX_AMT := 0, TOT_AMT := 0 +LOCAL M_AMT1 := 0, M_AMT2 := 0, M_AMT3 := 0, M_STAX := 0 +LOCAL M_QTY1 := 0, M_QTY2 := 0, M_QTY3 := 0, M_OTTL := 0 +LOCAL DISP_PCT := 0 + +//7-30-97 NO more FREIGHT - per Ellen +****STATIC M_TTL +****STATIC M_FRT + +//7-30-97 NON-TAX MODIFICATIONS - Perry Nichols +LOCAL NOTX_AMT1,NOTX_AMT2,NOTX_AMT3,NOTX_QTY1,NOTX_QTY2,NOTX_QTY3 + +//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING MODIFICATIONS +IF EMPTY(NOPAINT) + NOPAINT := .F. +ENDIF +IF NOPAINT +//** DO NOT PAINT ANYTHING ON THE SCREEN - JUST CALC TOTALS +//** P3N - 11/23/98 PARTIAL INVOICE PROCESSING MODIFICATIONS + IF EMPTY(MISC_ARR) //** USE ORDER QTYS TO CALC TOTALS + M1 := (CUR_MAST)->MISC_AMT1 * (CUR_MAST)->MISC_QTY1 + M2 := (CUR_MAST)->MISC_AMT2 * (CUR_MAST)->MISC_QTY2 + M3 := (CUR_MAST)->MISC_AMT3 * (CUR_MAST)->MISC_QTY3 + NTX1 := (CUR_MAST)->NOTX_AMT1 * (CUR_MAST)->NOTX_QTY1 + NTX2 := (CUR_MAST)->NOTX_AMT2 * (CUR_MAST)->NOTX_QTY2 + NTX3 := (CUR_MAST)->NOTX_AMT3 * (CUR_MAST)->NOTX_QTY3 + ELSE //** USE SHIP QTYS TO CALC TOTALS + FOR I := 1 TO LEN(MISC_ARR[1]) + IF MISC_ARR[1,I,5] == 'ORDMISC1' + IF REPRINT_INVOICE + M1 := MISC_ARR[1,I,6] //** INV QTY + ELSE + M1 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L1 := MISC_ARR[1,I,4] //** ITEM PRICE + M1 := M1 * L1 + ELSEIF MISC_ARR[1,I,5] == 'ORDMISC2' + IF REPRINT_INVOICE + M2 := MISC_ARR[1,I,6] //** INV QTY + ELSE + M2 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L2 := MISC_ARR[1,I,4] //** ITEM PRICE + M2 := M2 * L2 + ELSEIF MISC_ARR[1,I,5] == 'ORDMISC3' + IF REPRINT_INVOICE + M3 := MISC_ARR[1,I,6] //** INV QTY + ELSE + M3 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L3 := MISC_ARR[1,I,4] //** ITEM PRICE + M3 := M3 * L3 + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX1' + IF REPRINT_INVOICE + T1 := MISC_ARR[1,I,6] //** INV QTY + ELSE + T1 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L1 := MISC_ARR[1,I,4] //** ITEM PRICE + NTX1 := T1 * L1 + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX2' + IF REPRINT_INVOICE + T2 := MISC_ARR[1,I,6] //** INV QTY + ELSE + T2 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L2 := MISC_ARR[1,I,4] //** ITEM PRICE + NTX2 := T2 * L2 + ELSEIF MISC_ARR[1,I,5] == 'ORDNOTX3' + IF REPRINT_INVOICE + T3 := MISC_ARR[1,I,6] //** INV QTY + ELSE + T3 := MISC_ARR[1,I,3] //** SHIP QTY + ENDIF + L3 := MISC_ARR[1,I,4] //** ITEM PRICE + NTX3 := T3 * L3 + ENDIF + NEXT + ENDIF + SUB1 := M1 + M2 + M3 ; + + &CUR_MAST->ORD_L_TTL - &CUR_MAST->ORD_D_TTL ; + + &CUR_MAST->ORD_M_TTL + MFUEL_CHRG := (CUR_MAST)->FUEL_CHRG //** P3N - 09/22/06 HAPPY BDAY CINDY #47 + SUB1 += MFUEL_CHRG //** P3N - 09/22/06 HAPPY BDAY CINDY #47 + STX_AMT := (SUB1 * (&CUR_MAST->SLS_TX_PCT / 100)) + STX_AMT := VAL( STR( STX_AMT, 8, 2 ) ) + //** IF (CUR_MAST)->TERMS = '90' .OR. ; //NO CHARGE + //** (CUR_MAST)->TERMS = '96' //CANCELLED + IF ZERO_ORDER() //** NO CHARGE P3N-3/5/99 + TOT_AMT := 0.00 //** TOTAL ORDER IS ZERO + ELSE + TOT_AMT := SUB1 + STX_AMT + NTX1 + NTX2 + NTX3 + ENDIF +ELSE + IF !EMPTY(GETVARS) + //7-30-97 NON-TAX MODIFICATIONS - Perry Nichols + NOTX_AMT1 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_AMT1'}) + NOTX_AMT2 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_AMT2'}) + NOTX_AMT3 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_AMT3'}) + NOTX_QTY1 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_QTY1'}) + NOTX_QTY2 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_QTY2'}) + NOTX_QTY3 := ASCAN(GETVARS, {|X| X[3] = 'NOTX_QTY3'}) + + M_AMT1 := ASCAN(GETVARS, {|X| X[3] = 'MISC_AMT1'}) + M_AMT2 := ASCAN(GETVARS, {|X| X[3] = 'MISC_AMT2'}) + M_AMT3 := ASCAN(GETVARS, {|X| X[3] = 'MISC_AMT3'}) + M_QTY1 := ASCAN(GETVARS, {|X| X[3] = 'MISC_QTY1'}) + M_QTY2 := ASCAN(GETVARS, {|X| X[3] = 'MISC_QTY2'}) + M_QTY3 := ASCAN(GETVARS, {|X| X[3] = 'MISC_QTY3'}) + M_STAX := ASCAN(GETVARS, {|X| X[3] = 'SALES_TAX'}) + M_OTTL := ASCAN(GETVARS, {|X| X[3] = 'TOTAL_AMT'}) + //7-30-97 NO more FREIGHT - per Ellen + ****M_FRT := ASCAN(GETVARS, {|X| X[3] = 'FREIGHT'}) + + + // WRITE DISCOUNTS TO SCREEN + LINE_TOTAL := (CUR_MAST)->ORD_L_TTL + DISC_TOTAL := (CUR_MAST)->ORD_D_TTL * -1 + MISC_TOTAL := (CUR_MAST)->ORD_M_TTL + @ 02,53 SAY VAL(STR(LINE_TOTAL,10,2)) PICTURE '9999999.99' //*ORDER LINE ITEM TOTALS +//**@ 02,52 SAY VAL(STR(LINE_TOTAL,10,2)) PICTURE '9999999.99' //*ORDER LINE ITEM TOTALS + **@ 02,53 SAY VAL(STR(LINE_TOTAL,9,2)) PICTURE '999999.99' //*ORDER LINE ITEM TOTALS +//**@ 03,53 SAY VAL(STR(DISC_TOTAL,9,2)) PICTURE '999999.99' //*DISC TAX AMT + @ 03,54 SAY VAL(STR(DISC_TOTAL,9,2)) PICTURE '999999.99' //*DISC TAX AMT +//**@ 04,53 SAY VAL(STR(MISC_TOTAL,9,2)) PICTURE '999999.99' //*MISC AMT + @ 04,54 SAY VAL(STR(MISC_TOTAL,9,2)) PICTURE '999999.99' //*MISC AMT + + IF EMPTY(M_AMT1) //** GET OUT - DO NOT CONTINUE DUE TO NO + SETCOLOR(SAVECOLOR) //** GETVARS ARR TO USE FOR UPDATE + RETURN .T. + ENDIF + + //* CALC SUB TOTAL OF MISC ITEMS + // misc_amt1,2,3 + M1 := (GETVARS[M_AMT1,4] * GETVARS[M_QTY1,4]) + M2 := (GETVARS[M_AMT2,4] * GETVARS[M_QTY2,4]) + M3 := (GETVARS[M_AMT3,4] * GETVARS[M_QTY3,4]) + SUB1 := M1 + M2 + M3 ; + + &CUR_MAST->ORD_L_TTL - &CUR_MAST->ORD_D_TTL ; + + &CUR_MAST->ORD_M_TTL + + M_FSC := ASCAN(GETVARS, {|X| X[3] = 'FUEL_CHRG'}) //** P3N - 09/21/06 + IF EMPTY(M_FSC) //** P3N - 09/21/06 + MFUEL_CHRG := (CUR_MAST)->FUEL_CHRG //** P3N - 09/21/06 + ELSE //** P3N - 09/21/06 + MFUEL_CHRG := GETVARS[M_FSC,4] //** P3N - 09/21/06 + ENDIF //** P3N - 09/21/06 +//**@ 07,53 SAY STR(M1, 9, 2) + @ 07,54 SAY STR(M1, 9, 2) +//**@ 08,53 SAY STR(M2, 9, 2) + @ 08,54 SAY STR(M2, 9, 2) +//**@ 09,53 SAY STR(M3, 9, 2) + @ 09,54 SAY STR(M3, 9, 2) + IF M->OE_TYPE = 'ADD' //** P3N - 10/16/06 + @ 12, 54 SAY MFUEL_CHRG PICTURE '999999.99' //** P3N - 10/16/06 + ENDIF //** P3N - 10/16/06 + @ 11,54 SAY VAL(STR(SUB1,9,2)) PICTURE '999999.99' //*SUBTOTAL + + //* CALC THE SALES TAX AMT + STX_AMT := ( (SUB1+ MFUEL_CHRG) * (&CUR_MAST->SLS_TX_PCT / 100)) + STX_AMT := VAL( STR( STX_AMT, 8, 2 ) ) + PRNTVAR := STX_AMT + + // sales tax amt + GETVARS[M_STAX,4] := STX_AMT + // @ 12,53 SAY VAL(STR(PRNTVAR,9,2)) PICTURE '999999.99' //*SALES TAX AMT + // @ 13,53 SAY VAL(STR(PRNTVAR,9,2)) PICTURE '999999.99' //*SALES TAX AMT + @ 13,54 SAY VAL(STR(PRNTVAR,9,2)) PICTURE '999999.99' //*SALES TAX AMT + + //7-30-97 NON-TAX MODIFICATIONS - Perry Nichols + //* DISPLAY THE NON - TAXABLE ITEMS - SCREEN 2115 + NTX1 := (GETVARS[NOTX_AMT1,4] * GETVARS[NOTX_QTY1,4]) + NTX2 := (GETVARS[NOTX_AMT2,4] * GETVARS[NOTX_QTY2,4]) + NTX3 := (GETVARS[NOTX_AMT3,4] * GETVARS[NOTX_QTY3,4]) +//**@ 15,53 SAY STR(NTX1, 9, 2) + @ 16,54 SAY STR(NTX1, 9, 2) +//**@ 16,53 SAY STR(NTX2, 9, 2) + @ 17,54 SAY STR(NTX2, 9, 2) +//**@ 17,53 SAY STR(NTX3, 9, 2) + @ 18,54 SAY STR(NTX3, 9, 2) + + //* DISPLAY THE TOTAL ORDER AMT + + //** P3N - 4/3/98 +//**IF (CUR_MAST)->TERMS = '90' .OR. ; //NO CHARGE +//** (CUR_MAST)->TERMS = '96' //CANCELLED + IF ZERO_ORDER() //** NO CHARGE P3N-3/5/99 + TOT_AMT := 0.00 //** TOTAL ORDER IS ZERO + ELSE + TOT_AMT := SUB1 + MFUEL_CHRG + STX_AMT + NTX1 + NTX2 + NTX3 + ENDIF + + GETVARS[M_OTTL,4] := TOT_AMT + PRNTVAR := TOT_AMT + //** P3N - 09/21/06 - ADDED FUEL SURCHARGE TO ORDER ENTRY + IF EMPTY(MFUEL_CHRG) + ELSE + DISP_PCT := MFUEL_CHRG / SUB1 //** P3N - 09/22/06 HAPPY BDAY CINDY #47 + ENDIF + @ 12,65 SAY STR(DISP_PCT*100, 3,0) + '%' //** P3N - 09/22/06 HAPPY BDAY CINDY #47 + @ 13,65 SAY STR((CUR_MAST)->SLS_TX_PCT, 8,4) + '%' //** P3N - 09/22/06 HAPPY BDAY CINDY #47 + @ 21,52 SAY VAL(STR(PRNTVAR,10,2)) PICTURE '99999999.99' //*TOTAL ORDER AMT +//**@ 20,52 SAY VAL(STR(PRNTVAR,10,2)) PICTURE '99999999.99' //*TOTAL ORDER AMT + **@ 20,53 SAY VAL(STR(PRNTVAR,9,2)) PICTURE '999999.99' //*TOTAL ORDER AMT + ENDIF +ENDIF + +IF (CUR_MAST)->SALES_TAX <> VAL(STR(STX_AMT, 9,2)) .OR. ; + (CUR_MAST)->TOTAL_AMT <> VAL(STR(TOT_AMT, 10,2)) + IF _OC_CAPABLE + (CUR_MAST)->(REC_LOCK(1)) + REPLACE (CUR_MAST)->SALES_TAX WITH STX_AMT + REPLACE (CUR_MAST)->TOTAL_AMT WITH TOT_AMT + (CUR_MAST)->(DBUNLOCK()) + ENDIF +ENDIF + +SETCOLOR(SAVECOLOR) + +RETURN .T. + +********************************************************* +* THIS FUNCTION VALIDATES THE PRINT IND VALUE +********************************************************* +FUNCTION PRTIND_VAL() +LOCAL SV_SEL := SELECT(), RETVAL +IF PRINT_IND$' ANDE' + RETVAL := .T. +ELSE + ERR_BOX('VALID Values are the following:', ; + '"A" - ALWAYS Print Option Value', ; + '"N" - NEVER Print the Option Value', ; + '"D" - PRINT Print if Option is DEFAULT ', ; + '"E" - PRINT Print if Option is NOT Default-EXCEPTION') + RETVAL := .F. +ENDIF +SELECT(SV_SEL) +RETURN RETVAL + +************************************************************** +FUNCTION NOSORT() // called by acdcargo for lineitems +ERR_BOX('*** SORT OPTION Not AVAILABLE ***', ; + '*** In This Process ***', ; + ' ') +RETURN .T. + +************************************************************** +* NOTES EDIT FOR THE LINE ITEM +************************************************************** +FUNCTION LINENOTE() // called by acdcargo for lineitems +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') +LOCAL SAVESCRN := SAVESCREEN(), LI_NOTES := 3, SV_IND := PRT_NOTES +LOCAL MTITLE := 'Line Item ' + ALLTRIM(STR(USERFILE2->LINE_NUM)) ; + + ' (' + ALLTRIM(USERFILE2->PROD_CODE) + ')' +IF _OC_CAPABLE + NOTES('LINE_NOTES', NOTEREV_EDIT(), MTITLE, 3, .F.,.F.) // NO AUDIT_PROC AND DON'T MESS WITH SETTING HOT KEYS + REMOVE_XLNOTE(ORDER_NUM, LINE_NUM) //** P3N - 2/8/99 + ****// 5-7-97 ************** + **** Ask where to PRINT the line item NOTE? + IF EMPTY(LINE_NOTES) + REPLACE PRT_NOTES WITH 'U' //Print notes under the line item - DEFAULT + ELSE + IF PRT_NOTES = 'A' + LI_NOTES := 1 + ELSEIF PRT_NOTES = 'B' + LI_NOTES := 2 + ELSE + LI_NOTES := 3 + ENDIF + + LI_NOTES := PICKLIST({'ABOVE Line Item', 'BESIDE Line Item', 'UNDER Line Item'}, 5, 31, 'PRINT Notes', LI_NOTES) + IF LI_NOTES = 1 + REPLACE PRT_NOTES WITH 'A' //Print notes above the line item + ELSEIF LI_NOTES = 2 + REPLACE PRT_NOTES WITH 'B' //Print notes beside the line item + ELSE // = 3 + REPLACE PRT_NOTES WITH 'U' //Print notes under the line item - DEFAULT + ENDIF + IF LASTKEY() == 27 + REPLACE PRT_NOTES WITH SV_IND // RETURN TO ORIGINAL VALUE IF ESCAPE + ENDIF + ENDIF +ELSE + NOTES('LINE_NOTES', NOTEREV_EDIT(),'Review '+MTITLE, 3, .F.,.F.) // NO AUDIT_PROC AND DON'T MESS WITH SETTING HOT KEYS +ENDIF +RESTSCREEN(,,,,SAVESCRN) +RETURN .T. +************************************************************** +//** P3N - 2/08/99 * +//** REMOVE THE XL NOTE * +************************************************************** +FUNCTION REMOVE_XLNOTE(MORD_NUM, MLINE) +LOCAL SEEKKEY := MORD_NUM + STR(MLINE, 3) +LOCAL SVSEL := SELECT() +LOCAL SVORD, SVREC +LOCAL LINEFILE := 'ADDL_LINES' +IF CUR_MAST = 'QUOTE_MAST' + LINEFILE := 'QUOTE_ADDL' +ENDIF +SVREC := (LINEFILE)->(RECNO()) +SVORD := (LINEFILE)->(INDEXORD()) +SVREC := (LINEFILE)->(RECNO()) +SELECT(LINEFILE) +DONSETORD(3) //** ORDER_NUM + STR(LINE_NUM, 3) +IF (LINEFILE)->(DBSEEK(SEEKKEY)) + REC_LOCK(3, LINEFILE) + (LINEFILE)->LINE_NOTES := ' ' + (LINEFILE)->(DBUNLOCK()) +ENDIF +DONSETORD(SVORD) +(LINEFILE)->(DBGOTO(SVREC)) +SELECT(SVSEL) +RETURN .T. +************************************************************** +FUNCTION TAXNOTE() // called by acdcargo for lineitems +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') +LOCAL SAVESCRN := SAVESCREEN() +LOCAL MTITLE := 'Tax Table Notes ' + USERFILE2->STAXSCH +IF _OC_CAPABLE + NOTES('NOTES', NOTEREV_EDIT(), MTITLE, 3, .F.,.F.) // NO AUDIT_PROC AND DON'T MESS WITH SETTING HOT KEYS +ELSE + NOTES('NOTES', NOTEREV_EDIT(),'Review '+MTITLE, 3, .F.,.F.) // NO AUDIT_PROC AND DON'T MESS WITH SETTING HOT KEYS +ENDIF +RESTSCREEN(,,,,SAVESCRN) +RETURN .T. + + +************************************************************** +FUNCTION GET_PRICEARR(MPRICE_ARR, MPRICE_TYPE, PPR_CUSTID) +// GET THE PRICE ARRAY FOR THIS MPRICE TYPE + +LOCAL ELEM, PR_CUSTID := PPR_CUSTID + +**ELEM = ASCAN(MPRICE_ARR, {|X| X[1] == MPRICE_TYPE .AND. X[6] == PR_CUSTID} ) +ELEM = ASCAN(MPRICE_ARR, {|X| X[1] == MPRICE_TYPE} ) +IF ELEM > 0 + RETURN MPRICE_ARR[ELEM,2] +ELSE + RETURN {} +ENDIF + + +************************************************************** +* VALIDATE THE DECIMAL VALUES AT ORDER ENTRY TIME +************************************************************** + +FUNCTION VALID_DECIMAL(VAL2CHEK) +LOCAL DECIMAL_VAL := VAL2CHEK - INT(VAL2CHEK) +LOCAL NCHOICE +LOCAL SV_COLOR := SETCOLOR(LNOR) +LOCAL NTOP := 03, NLEFT := 50, NBOTTOM := 20, NRIGHT := 65 +LOCAL DEC_ARR := {}, I, ELM, NEG_SW := .F. + +IF DECIMAL_VAL == 0 + RETURN .T. +ELSEIF DECIMAL_VAL < 0 + DECIMAL_VAL := DECIMAL_VAL * -1 + NEG_SW := .T. +ENDIF + +ELM := ASCAN( FRACTION_ARR , {|X| X[2] == DECIMAL_VAL } ) +IF ELM == 0 + ERR_BOX( ' *** INVALID DECIMAL ENTERED ', ; + ' *** Check the FRACTION VALUE ', ; + ' *** Must be a Multiple of 1/' + ALLTRIM(STR(MBASE_NUM,2) ) ) + RETURN .F. +ELSE + RETURN .T. +ENDIF + + +************************************************************** +FUNCTION CHK_ADDITIONAL(MPROD_CODE, MADDL_PROD, MOPTION, MRESPONSE) +// CHECK THE ADDITIONAL PRODUCT + +LOCAL ELEM, SAVESEL := SELECT() +LOCAL MSTD_OPTS := ' ', MSG1, RESULT, MSG2, MSG3 +LOCAL SAVESCR := SAVESCREEN(), SAVEREC +LOCAL SAVECOLOR := SETCOLOR() + + + +SELECT PRODUCT +SAVEREC = RECNO() + +SEEK MADDL_PROD +MDESC = DESC // PRODUCT DESCRIPTION +MSG1 = 'Additional Product, ' + MDESC +MSG2 = 'For Option, ' + TRIM(MOPTION) + ': ' + MRESPONSE +MSG3 = 'Do You Want to use Standard Options' + + +bTOP = 10 +bBOTM = 16 +bLEFT = 10 +bRIGHT = 70 +* +SETCOLOR(DARK) +@ bTOP+1,bLEFT+1 CLEAR TO bBOTM+1,bRIGHT+1 // DRAW SHADOW BOX +SETCOLOR(HREV) +@ bTOP,bLEFT CLEAR TO bBOTM,bRIGHT // DRAW BACKROUND COLOR +@ bTOP,bLEFT TO bBOTM,bRIGHT // DRAW DOUBLE LINE + +IF EMPTY(MSTD_OPTS) + MSTD_OPTS = 'Y' +ENDIF +@ BTOP+1, BLEFT+2 SAY MSG1 +@ BTOP+2, BLEFT+2 SAY MSG2 +@ BTOP+4, BLEFT+2 SAY MSG3 GET MSTD_OPTS PICTURE '!' VALID MSTD_OPTS$'YN' +READ() + +GOTO SAVEREC +SELECT(SAVESEL) +RESTSCREEN(,,,,SAVESCR) +SETCOLOR(SAVECOLOR) +RETURN MSTD_OPTS + + +************************************************************** +FUNCTION ADD_ADDITIONAL(MADDL_PROD, MSTD_OPTS, GET_ARR) +// CHECK THE ADDITIONAL PRODUCT IN ADDL_LINE FILE + +LOCAL ELEM, SAVESEL := SELECT(), MLINE_NUM := USERFILE2->LINE_NUM +LOCAL MPROD_CODE +LOCAL CLR_ELM := ASCAN(GET_ARR, { |X| X[1] = 'FR COLOR'}) //** P3N - 10/17/06 +LOCAL MCOLOR := GET_ARR[CLR_ELM,4] //** P3N - 10/17/06 +MPROD_CODE = USERFILE2->PROD_CODE + +SELECT PRODUCT +SAVEREC = RECNO() + +SEEK MADDL_PROD +SELECT USERFILE6 +LOCATE FOR PROD_CODE == MADDL_PROD .AND. LINE_NUM == MLINE_NUM +IF !FOUND() + ADD_ONEREC('USERFILE2', 'USERFILE6') +ENDIF + +// IF EXTRA WINDOWS (TWIN, TRIPLE, QUAD, ETC) +// INCREASE THE QUANTITY OF THE ADDITIONAL PRODUCT +// BY THE NUMBER OF ADDITIONAL WINDOWS +ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'XTRA WIND'}) +IF ELEM > 0 + REPLACE QUANTITY WITH USERFILE2->QUANTITY * ( VAL( GET_ARR[ELEM,4] ) + 1 ) +ENDIF + +REPLACE ORDER_NUM WITH &CUR_MAST->ORDER_NUM +REPLACE PROD_CODE WITH MADDL_PROD +REPLACE PAR_PROD WITH MPROD_CODE +REPLACE PAR_COLOR WITH DISPCOLOR(.F.) +IF PAR_COLOR = 'N/A' //** P3N - 10/17/06 + REPLACE PAR_COLOR WITH MCOLOR //** P3N - 10/17/06 +ENDIF //** P3N - 10/17/06 +REPLACE LINE_NUM WITH MLINE_NUM +REPLACE STD_OPTS WITH MSTD_OPTS +REPLACE ALT_SPRICE WITH 0 +REPLACE UPDATED WITH ' ' + +REPLACE LINE_NOTES WITH ' ' //** P3N - 2/8/99 + +RETURN NIL + + +******************************************************* +FUNCTION DO_ADDL_LINES +// GO DO AN ACD UPDATE FOR THE ADDITIONAL PRODUCTS AND OPTION + +LOCAL TITLE, SAVESEL := SELECT() +LOCAL MORDER_NUM := &CUR_MAST->ORDER_NUM + +SELECT USERFILE6 +IF LASTREC() > 0 + IF SELECT('USERFILE8') > 0 + SELECT USERFILE8 + USE + ENDIF + + SELECT USERFILE9 + COPY TO (USERFILE8) FOR GOOD_AO('USERFILE9') + + NET_USE('&USERFILE8', .T., 3, 'USERFILE8') + SELECT (CUR_XO) + DONSETORD(1) + NDX_EXP = INDEXKEY() + SELECT USERFILE8 + INDEX ON &NDX_EXP TO &USERFILE8 + IF __DBDRIVER = 'CDX' + TAGNAME := 'T1' + INDEX ON &NDX_EXP TAG &TAGNAME TO &USERFILE8 + ELSE + INDEX ON &NDX_EXP TO &USERFILE8 + ENDIF + + + + IF _OC_CAPABLE .AND. GETAVAR('ACTION_CODE') = 'ADD' + TITLE = 'Update Additional Line Items' + ACD_PAR_CHILD(1, TITLE, {NIL, CUR_XL, .F., 3, 'ADD NOAPPEND',,,,,,.F. }) // don't close dbfs + ELSE + TITLE = 'Review Additional Line Items' + ACD_PAR_CHILD(3, TITLE, {NIL, CUR_XL, .F., 3, 'REV',,,,,,.F. }) // don't close dbfs + ENDIF +ELSE + IF SELECT('USERFILE8') > 0 + SELECT USERFILE8 + ZAP + ENDIF +ENDIF + +SELECT(SAVESEL) + +RETURN NIL + + +******************************************************** +FUNCTION GOOD_AO(SELFILE) +LOCAL SEEKKEY := (SELFILE)->ORDER_NUM + (SELFILE)->PROD_CODE + STR( (SELFILE)->LINE_NUM,3) +//*IF ADDL_LINES->(DBSEEK(SEEKKEY)) +IF (CUR_XL)->(DBSEEK(SEEKKEY)) + RETURN .T. +ELSE + RETURN .F. +ENDIF +******************************************************** +FUNCTION GET_CM_VALU(FLD_NAM,FLD_VALU) +LOCAL SAVESEL := SELECT(), EVALVAL +IF EMPTY(&FLD_VALU) + SELECT CUST_MAST + &FLD_VALU := &FLD_NAM +ENDIF +SELECT (SAVESEL) +RETURN .T. + + +******************************************************** +FUNCTION CUST_CSZ(FLDLEN) +RETURN PADR(ALLTRIM(CUST_CITY) + ' ' + ALLTRIM(CUST_STATE) + ' ' + CUST_ZIP, FLDLEN) + +******************************************************** +FUNCTION SHIP_CSZ(FLDLEN) +RETURN PADR(ALLTRIM(SHIPADD2) + ' ' + ALLTRIM(SHIPST) + ' ' + SHIPZIP, FLDLEN) + + + +******************************************************** +FUNCTION ADDL_KEY() +RETURN {&CUR_MAST->ORDER_NUM} + + +******************************************************** +FUNCTION STUFF_ENTER_KEY() +KEYBOARD CHR(13) +RETURN + + +******************************************************** +FUNCTION CK_DELSIZE(MWIDTH) +IF MWIDTH >= 999 + DELETE + PACK + IF RECCOUNT() = 0 + ADD_REC(3) + ELSE + GOTO TOP + ENDIF +ENDIF +RETURN .T. +********************************************************** +* +********************************************************** +FUNCTION CGWBASEPRICE(WHICHFILE, NCHOICE) +LOCAL TABLE_ARR + +IF WHICHFILE = 'PRODUCT' + SELECT PRODUCT //* - ONLY CALL LOAD UP FOR THIS PRODUCT RECORD + TABLE_ARR := CGWPRICE(,,NCHOICE) + CGWBP_LOAD(TABLE_ARR) // READ TABLE_ARR AND CREATE USERFILE7 RECS. + RETURN +ELSE + SELECT PRODUCT + DONSETORD(3) + SEEK CATEGORY->CAT_CODE + DO WHILE PRODUCT->CAT_CODE == CATEGORY->CAT_CODE .AND. !EOF() + TABLE_ARR := CGWPRICE(,,NCHOICE) + CGWBP_LOAD(TABLE_ARR) // ASSUMES SITTING ON CORRECT PRODUCT RECORD + SELECT PRODUCT + SKIP 1 + ENDDO +ENDIF +RETURN +********************************************************** +* LOAD THE USER FILE WITH THE BASE PRICE INFORMATION FOR PRINT/DISPL +********************************************************** +FUNCTION CGWBP_LOAD(BP_ARR) // READ TABLE_ARR AND CREATE USERFILE7 RECS. +LOCAL REP_VAR, AMT, DESC, II, I +LOCAL FHEAD1, FHEAD2, FHEAD3 +LOCAL HEAD1 := ' ' , HEAD2 := ' ' , HEAD3 := ' ' + + //PRICE_DBF, DLR_DBF, PRICE_SHT +LOCAL PRT_ARR := BLDPRICE_ARR(BP_ARR[1], BP_ARR[2], BP_ARR[3]) +LOCAL FRZ_ARR := PRT_ARR[1] // FIXED COL - IE: ROW HEADINGS/COL HEADINGS +LOCAL DTL_ARR := PRT_ARR[2] // ROW DETAIL - COL HEADING/AMTS +LOCAL DTL_LINE, TOTL_PRT := 0 +LOCAL FRST_COL := 1 +LOCAL COL_LIMIT := 7-1 // 7 TO LEN(FRZ_ARR) TO CONTROL THE NUMBER OF VARIABLE COLS +LOCAL LAST_COL := COL_LIMIT + +DTL_LINE := ' ' + +DO WHILE .T. + FOR II := 1 TO LEN(FRZ_ARR) + DTL_LINE := FRZ_ARR[II] + SPACE(3) + + FOR I := FRST_COL TO MIN( LAST_COL, LEN(DTL_ARR) ) + IF II <= LEN(DTL_ARR[I]) + DTL_LINE := DTL_LINE + DTL_ARR[I, II] + SPACE(3) + ENDIF + NEXT + + ADD_U7(DTL_LINE) + NEXT + + ADD_U7(' ') + ADD_U7(' ') + IF PAGE_BREAK = 'Y' + ADD_U7(' ') // CATEGORY PAGE BREAK ???????????????????? + ENDIF + + FRST_COL := FRST_COL + COL_LIMIT + LAST_COL := LAST_COL + COL_LIMIT + IF FRST_COL > LEN(DTL_ARR) + EXIT + ENDIF + +ENDDO + + +RETURN +******************************************************** +******************************************************** +******************************************************** +FUNCTION BLDPRICE_ARR(PRICE_DBF, DLR_FILE, PRICE_SHEET) +LOCAL FLD_ARR := {}, HEAD1, FLD_TYPE +LOCAL VAL_ARR := {} +LOCAL WK_VAL +LOCAL PR_ARR := {}, COL_VAL +LOCAL LEFT_COL_ARR := {} +LOCAL SV_SEL := SELECT(), I +LOCAL FLD_NAME, PRICE_FACTOR, HEAD_TYP + +SELECT PRODUCT + // UI SIZE + +IF PRICE_SHEET == 'L' + PRICE_FACTOR := PRODUCT->LU_BASEFAC / 100 +ELSEIF PRICE_SHEET == 'J' + PRICE_FACTOR := PRODUCT->DI_BASEFAC / 100 +ELSEIF PRICE_SHEET == 'B' + PRICE_FACTOR := PRODUCT->BU_BASEFAC / 100 +ELSEIF PRICE_SHEET == 'S' + PRICE_FACTOR := PRODUCT->SD_BASEFAC / 100 +ELSEIF PRICE_SHEET == 'I' + PRICE_FACTOR := PRODUCT->IN_BASEFAC / 100 +ELSE + PRICE_FACTOR := 1 +ENDIF + +IF PRICE_FACTOR = 0 + PRICE_FACTOR := 1 +ENDIF + +IF SELECT('PRICE_DBF') > 0 + SELECT PRICE_DBF + USE +ENDIF + +IF PRICE_FACTOR > 0 .AND. PRICE_FACTOR < 1 + IF !FILE(DLR_FILE + '.DBF') + ERR_BOX('*** PRICE TABLE ' + DLR_FILE + '.DBF Was NOT FOUND!', ; + '*** It must be SETUP under the OPEN MODEL BASE PRICES TABLES') + RETURN { {} , {} } + ENDIF + NET_USE(DLR_FILE, .F., 5, 'PRICE_DBF') +ELSE + IF !FILE(PRICE_DBF + '.DBF') + ERR_BOX('*** PRICE TABLE ' + PRICE_DBF + '.DBF Was NOT FOUND!', ; + '*** It must be SETUP under the OPEN MODEL BASE PRICES TABLES') + RETURN { {} , {} } + ENDIF + NET_USE(PRICE_DBF, .F., 5, 'PRICE_DBF') +ENDIF + + // PRICE BREAK +HEAD1 := 'Model - ' + ALLTRIM(PRODUCT->PROD_CODE) + ' / ' + ALLTRIM(PRODUCT->DESC) +AADD(LEFT_COL_ARR, HEAD1) +AADD(LEFT_COL_ARR, ' ') +AADD(LEFT_COL_ARR, SPACE(15)) +AADD(LEFT_COL_ARR, SPACE(15)) +AADD(LEFT_COL_ARR, SPACE(15)) + +DO CASE + CASE !EMPTY(PRODUCT->COL_HEAD3) + LEFT_COL_ARR[5] := PRODUCT->COL_HEAD3 + LEFT_COL_ARR[4] := PRODUCT->COL_HEAD2 + LEFT_COL_ARR[3] := PRODUCT->COL_HEAD1 + CASE !EMPTY(PRODUCT->COL_HEAD2) + LEFT_COL_ARR[5] := PRODUCT->COL_HEAD2 + LEFT_COL_ARR[4] := PRODUCT->COL_HEAD1 + OTHERWISE + LEFT_COL_ARR[5] := PRODUCT->COL_HEAD1 +ENDCASE + +AADD(LEFT_COL_ARR, REPLICATE('-',15) ) + +FLD_ARR := DBSTRUCT() +FOR I := 1 TO LEN(FLD_ARR) + IF FLD_ARR[I,1] = 'COL_HEAD' .OR. FLD_ARR[I,1] = 'DESC' ; + .OR. FLD_ARR[I,1] = 'CUST_ID' .OR. FLD_ARR[I,1] = 'UPDATED' + LOOP + ELSE +*** COL_VAL := PADR( FLD_ARR[I,1] , 15 ) + COL_VAL := COLVAL( FLD_ARR[I,1] , 'TEXT', 15 ) + AADD( LEFT_COL_ARR, COL_VAL ) + ENDIF +NEXT + +DO WHILE !EOF() + WK_ARR := {} + AADD (WK_ARR, SPACE(15)) + AADD (WK_ARR, SPACE(15)) + AADD (WK_ARR, SPACE(15)) + AADD (WK_ARR, SPACE(15)) + AADD (WK_ARR, SPACE(15)) + + DO CASE + CASE !EMPTY(COL_HEAD3) + WK_ARR[5] := PADL(TRIM(COL_HEAD3),15) + WK_ARR[4] := PADL(TRIM(COL_HEAD2),15) + WK_ARR[3] := PADL(TRIM(COL_HEAD1),15) + CASE !EMPTY(COL_HEAD2) + WK_ARR[5] := PADL(TRIM(COL_HEAD2),15) + WK_ARR[4] := PADL(TRIM(COL_HEAD1),15) + OTHERWISE + WK_ARR[5] := PADL(TRIM(COL_HEAD1),15) + ENDCASE + AADD (WK_ARR, REPLICATE('-',15) ) + + FOR I := 1 TO LEN(FLD_ARR) + FLD_NAME := FLD_ARR[I,1] + FLD_TYPE := FLD_ARR[I,2] + IF FLD_NAME = 'DESC' .OR. FLD_NAME = 'COL_HEAD' ; // DESCRIPTION IN COL HEAD 1/2/3 + .OR. FLD_NAME = 'CUST_ID' .OR. FLD_NAME = 'UPDATED' + LOOP + ELSE + IF FLD_TYPE == 'N' + // ROUND TO NEAREST NICHOLS + AADD(WK_ARR, STR(ROUND_IT(&FLD_NAME * PRICE_FACTOR, .05) ,15,2)) + ENDIF + ENDIF + NEXT + AADD (PR_ARR, WK_ARR ) + SKIP 1 +ENDDO +SELECT PRICE_DBF +USE +SELECT(SV_SEL) +RETURN { LEFT_COL_ARR, PR_ARR } + +********************************************************** +FUNCTION COLVAL(WORKVAL, TYPE, LEN) +LOCAL I, CKCHAR + +IF TYPE = NIL + TYPE = 'TEXT' +ENDIF + +// system generated "V9" VARIABLE +IF LEFT(WORKVAL,1)$'V' .AND. SUBS(WORKVAL,2,1)$'0123456789' + RETURN FORM_WORKVAL(SUBS(WORKVAL,2 ), TYPE, LEN) +ELSE + RETURN FORM_WORKVAL(WORKVAL, TYPE, LEN) +ENDIF +********************************************************** +FUNCTION FORM_WORKVAL(WORKVAL, TYPE, LEN) +LOCAL WK_LEN +IF LEN = NIL + WK_LEN := 18 +ELSE + WK_LEN := LEN +ENDIF +WORKVAL := STRTRAN(WORKVAL, '_', ' ') + +IF TYPE = 'TEXT' + RETURN PADR(WORKVAL, WK_LEN) +ELSE + RETURN PADL(WORKVAL, WK_LEN) +ENDIF +**************************************************************** +* //** P3N - 12/10/98 +* DO WE PRINT LINE ITEM DISCOUNTS +**************************************************************** +FUNCTION PRT_ITMDISC(PRN_ARR, PRODCODE) +LOCAL RETVAL := .F., I, DISC_AMT := 0, DISC_PCT := 0 +LOCAL STRT := ASCAN( PRN_ARR, { |X| X[10] == PRODCODE } ) +FOR I := STRT TO LEN(PRN_ARR) + IF PRODCODE = PRN_ARR[I,10] + IF EMPTY(DISC_PCT) + DISC_PCT := PRN_ARR[I, 5, 1] // LINE ITEM DISCOUNT PCT + DISC_AMT := PRN_ARR[I, 5, 2] // LINE ITEM DISCOUNT AMT + ENDIF + IF DISC_PCT == PRN_ARR[I, 5, 1] // LINE ITEM DISCOUNT PCT + ELSE + RETVAL := .T. + ENDIF + ELSE + EXIT + ENDIF +NEXT +RETURN RETVAL +**************************************************************** +* P3N -11/24/98 +* GET THE ORDER MASTER (CGW0OM) MISC ITEMS (SCREEN 2115) +* ORDER QTYS FOR INVOICING PURPOSES +**************************************************************** +FUNCTION GETQTYMISC(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) +LOCAL MTOT := 0, QTY := 0, AMT := 0, MAMTS := {}, INVQTY := 0 +LOCAL SHPQTY := 0, BKO_QTY := 0, MISCKEY, SVPROD, SVLINE, MAMTS_ARR := {} +LOCAL SVREC := 1, QTYARR := {}, SVSEL := SELECT() + + + +IF SELECT('TORD_LINES') > 0 + SVREC := TORD_LINES->(RECNO()) + TORD_LINES->(DBGOTOP()) + IF MORDER_NUM == TORD_LINES->ORDER_NUM + ELSE + CLOSE TORD_LINES + BLD_TORD_LINES(MORDER_NUM) + ENDIF +ELSE + BLD_TORD_LINES(MORDER_NUM) +ENDIF + +TORD_LINES->(DBGOTOP()) +SVPROD := TORD_LINES->PROD_CODE +SVLINE := TORD_LINES->LINE_NUM +DO WHILE TORD_LINES->(!EOF()) + IF TORD_LINES->PROD_CODE = 'ORD' + IF TORD_LINES->LINE_NUM == SVLINE .AND. ; + TORD_LINES->PROD_CODE == SVPROD + ELSE + IF EMPTY(MAMTS) + ELSE + AADD(MAMTS_ARR, MAMTS ) + MAMTS := {} + ENDIF + SVPROD := TORD_LINES->PROD_CODE + SVLINE := TORD_LINES->LINE_NUM + ENDIF + MISCKEY := TORD_LINES->ORDER_NUM + MISCKEY := MISCKEY + STR(TORD_LINES->LINE_NUM, 3) + MISCKEY := MISCKEY + TORD_LINES->PROD_CODE + QTYARR := GET_OSTQTY('TORD_LINES', MISCKEY, PARTIAL_INVOICE, REPRINT_INVOICE ) + IF EMPTY(QTYARR) //** P3N - 12/3/98 + SHPQTY := 0 //** P3N - 12/3/98 + INVQTY := 0 //** P3N - 12/3/98 + ELSE //** P3N - 12/3/98 + SHPQTY := QTYARR[1] //** P3N - 12/3/98 + INVQTY := QTYARR[2] //** P3N - 12/3/98 + ENDIF //** P3N - 12/3/98 + BKO_QTY := TORD_LINES->QUANTITY - SHPQTY + MTOT := MTOT + ( TORD_LINES->QUANTITY * TORD_LINES->SALE_PRICE ) + MAMTS := { TORD_LINES->QUANTITY, BKO_QTY, SHPQTY, TORD_LINES->SALE_PRICE, ; + TORD_LINES->PROD_CODE+STR(TORD_LINES->LINE_NUM,1), INVQTY } + ENDIF + TORD_LINES->(DBSKIP(+1)) +ENDDO +IF EMPTY(MAMTS) +ELSE + AADD(MAMTS_ARR, MAMTS ) +ENDIF +TORD_LINES->(DBGOTO(SVREC)) +SELECT(SVSEL) +RETURN { MAMTS_ARR } +**************************************************************** +* P3N - 7/29/98 +* BLD THE ORDER MASTER (CGW0OM) MISC ITEMS (SCREEN 2115) +* FOR BACK ORDER PRINTING PURPOSES +**************************************************************** + +FUNCTION BLD_ORDMISC( PBODY_ARR, PAMTS_ARR, LI_TOTALS, PRT_AMT, PRT_BO, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE ) + +LOCAL MTOT := 0, QTY := 0, AMT := 0, PAMTS := {}, INVQTY := 0, QTYARR := {} +LOCAL SHPQTY := 0 , BKO_QTY := 0, MISCKEY, SVPROD, ORD_QTY := 0 +LOCAL SVREC := TORD_LINES->(RECNO()) + +//DEFAULT PARTIAL_INVOICE := .F. +//DEFAULT REPRINT_INVOICE := .F. + +If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) +If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) + + +IF EMPTY(PARTIAL_INVOICE) + PARTIAL_INVOICE := .F. +ENDIF + +IF REPRINT_INVOICE = NIL +//IF EMPTY( REPRINT_INVOICE ) + REPRINT_INVOICE := .F. +ELSE + +ENDIF + +TORD_LINES->(DBGOTOP()) +SVPROD := TORD_LINES->PROD_CODE +DO WHILE TORD_LINES->(!EOF()) + IF TORD_LINES->PROD_CODE = 'ORD' + IF TORD_LINES->PROD_CODE == SVPROD + ELSE + // double space ORDER misc items for now. + IF EMPTY(PBODY_ARR) //** P3N 1/6/99 + ELSE + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL ) // nil pamts_arr will line up in body + ENDIF + SVPROD := TORD_LINES->PROD_CODE + ENDIF + MISCKEY := TORD_LINES->ORDER_NUM + MISCKEY := MISCKEY + STR(TORD_LINES->LINE_NUM, 3) + MISCKEY := MISCKEY + TORD_LINES->PROD_CODE + QTYARR := GET_OSTQTY('TORD_LINES', MISCKEY, PARTIAL_INVOICE, REPRINT_INVOICE) + IF EMPTY(QTYARR) //** P3N - 12/3/98 + SHPQTY := 0 //** P3N - 12/3/98 + INVQTY := 0 //** P3N - 12/3/98 + ELSE //** P3N - 12/3/98 + SHPQTY := QTYARR[1] //** P3N - 12/3/98 + INVQTY := QTYARR[2] //** P3N - 12/3/98 + ENDIF //** P3N - 12/3/98 + BKO_QTY := TORD_LINES->QUANTITY - SHPQTY + ORD_QTY := TORD_LINES->QUANTITY + MTOT := MTOT + ( TORD_LINES->QUANTITY * TORD_LINES->SALE_PRICE ) + IF WHCHORDER == 'BACKORD' + PAMTS := { 0, 0 , BKO_QTY, TORD_LINES->SALE_PRICE, PRT_AMT, PRT_BO, 0, , INVQTY } + ELSE + PAMTS := { ORD_QTY, BKO_QTY , SHPQTY , TORD_LINES->SALE_PRICE, PRT_AMT, PRT_BO, 0, , INVQTY } + ENDIF + IF EMPTY(BKO_QTY) + ELSE + AADD(PBODY_ARR, '^' + SUBS(TORD_LINES->LINE_DESC, 1, 30) ) + AADD(PAMTS_ARR, PAMTS ) + ENDIF + ENDIF + TORD_LINES->(DBSKIP(+1)) +ENDDO +LI_TOTALS := LI_TOTALS + MTOT +TORD_LINES->(DBGOTO(SVREC)) + +RETURN { PBODY_ARR, PAMTS_ARR, LI_TOTALS } + +**************************************************************** +* P3N - 7/7/98 +* BLD THE MISC ORDER LINE ITEMS FOR PRINTING PURPOSES +**************************************************************** +FUNCTION BLD_MISCORD(CUR_MISC, PBODY_ARR, PAMTS_ARR, LI_TOTALS, PRT_AMT, ; + DIDFST, PRT_BO, WHCHORDER, PARTIAL_INVOICE, REPRINT_INVOICE, ORDSHIPD, SUBTYPE) +LOCAL M1 := 0, M_UOM := '', M_QTY_UOM := '', WORKVAR := '', WORKPRICE := 0 +LOCAL MISCITMS := CUR_MISC, WRKQTY := 0, QTYARR := {}, PAMTS, WRK1, TOTBKO := 0 +LOCAL BKO_QTY := 0, MISCKEY, SHPQTY := 0, INVQTY := 0, SVSEL := SELECT() + +IF EMPTY(ORDSHIPD) //** P3N - 1/7/99 + ORDSHIPD := .F. +ENDIF + + +//DEFAULT PARTIAL_INVOICE := .F. +//DEFAULT REPRINT_INVOICE := .F. + + +If( PARTIAL_INVOICE == nil, PARTIAL_INVOICE := .F., ) +If( REPRINT_INVOICE == nil, REPRINT_INVOICE := .F., ) + +IF REPRINT_INVOICE = NIL // 1/20/20 + //IF EMPTY(REPRINT_INVOICE) //** P3N - 12/3/98 + REPRINT_INVOICE := .F. +ENDIF +IF EMPTY(PARTIAL_INVOICE) //** P3N - 11/24/98 + PARTIAL_INVOICE := .F. +ENDIF +IF MISCITMS == 'TORD_LINES' + IF SELECT('TORD_LINES') > 0 + //** TORD_LINES ALREADY EXISTS + IF (MISCITMS)->ORDER_NUM == (CUR_MAST)->ORDER_NUM + //** TORD_LINES ALREADY EXISTS WITH THE SAME ORDER - PROCESS + ELSE + CLOSE TORD_LINES + BLD_TORD_LINES((CUR_MAST)->ORDER_NUM) + ENDIF + ELSE + BLD_TORD_LINES((CUR_MAST)->ORDER_NUM) + ENDIF + (MISCITMS)->(DBGOTOP()) +ELSE + (MISCITMS)->(DBSEEK((CUR_MAST)->ORDER_NUM)) +ENDIF +DO WHILE (MISCITMS)->ORDER_NUM == (CUR_MAST)->ORDER_NUM .AND. (MISCITMS)->(!EOF()) +//** IF WHCHORDER == 'BACKORD' //** P3N - 1/14/99 + IF WHCHORDER == 'BACKORD' .OR. ORDSHIPD //** P3N - 1/14/99 + IF (MISCITMS)->PROD_CODE == 'MISCITM' + //** PROCESS ONLY MISC ITEMS + ELSE + (MISCITMS)->(DBSKIP(+1)) + LOOP + ENDIF + ENDIF + MISCKEY := (MISCITMS)->ORDER_NUM + IF VALTYPE((MISCITMS)->LINE_NUM)== 'N' + MISCKEY := MISCKEY + STR((MISCITMS)->LINE_NUM, 3) + ELSE + MISCKEY := MISCKEY + (MISCITMS)->LINE_NUM + ENDIF + MISCKEY := MISCKEY + 'MISCITM' + QTYARR := GET_OSTQTY(CUR_OL, MISCKEY, PARTIAL_INVOICE, REPRINT_INVOICE ) + IF EMPTY(QTYARR) //** P3N - 12/3/98 + SHPQTY := 0 //** P3N - 12/3/98 + INVQTY := 0 //** P3N - 12/3/98 + ELSE //** P3N - 12/3/98 + SHPQTY := QTYARR[1] //** P3N - 12/3/98 + INVQTY := QTYARR[2] //** P3N - 12/3/98 + ENDIF //** P3N - 12/3/98 + BKO_QTY := (MISCITMS)->QUANTITY - SHPQTY + TOTBKO := TOTBKO + BKO_QTY //** P3N - 1/14/99 + IF WHCHORDER == 'BACKORD' .AND. EMPTY(BKO_QTY) + (MISCITMS)->(DBSKIP(+1)) //** DO NOT INCLUDE 0 QTY'S ON BACKORDERS + LOOP + ENDIF + MISC_ITEMS->(DBSEEK ( (MISCITMS)->PARTNUM )) + IF (MISCITMS)->UOM = 'N/A' + M_UOM := '' + ELSE + UOMFILE->(DBSEEK ( (MISCITMS)->UOM )) + IF UOMFILE->PRINT_FLAG$'N' + M_UOM := '' + ELSE + M_UOM := (MISCITMS)->UOM + ENDIF + M_QTY_UOM := UOMFILE->PRINT_QTY + ENDIF + WORKVAR := '^' //** P3N - 12/16/98 + IF (MISCITMS)->COLOR <> 'N/A' + WORKVAR := WORKVAR + ALLTRIM( (MISCITMS)->COLOR ) + ' ' + ENDIF + WORKVAR:= WORKVAR + ALLTRIM( MISC_ITEMS->DESC ) + ' ' + //** P3N - 1/7/99 IS THIS CHECKING FOR ORDER ENTIRELY SHIPPED ?? + IF ORDSHIPD .AND. EMPTY(SHPQTY) + //** DO NOT ADD PRICES BECAUSE WE ARE ONLY BUILDING THIS ARRAY + //** TO DETERMINE IF THE ENTIRE ORDER HAS BEEN SHIPPED!!! + //** NOT TO PRINT ON ANY DOCUMENT + ELSE + //** P3N - 2/20/98 PER ELLEN-KC + IF EMPTY( (MISCITMS)->ALT_SPRICE) + WORKPRICE := (MISCITMS)->SALE_PRICE + ELSE + WORKPRICE := (MISCITMS)->ALT_SPRICE + ENDIF + ENDIF + IF M_QTY_UOM $'N' + WRK1 := { (MISCITMS)->QUANTITY, (MISCITMS)->ENTRY_SIZE } + IF WHCHORDER == 'BACKORD' + WRK1 := { 0 , (MISCITMS)->ENTRY_SIZE } + PAMTS := {WRK1, 0 ,BKO_QTY, WORKPRICE, PRT_AMT,PRT_BO ,0, M_UOM, INVQTY } + ELSE + PAMTS := { WRK1 ,BKO_QTY, SHPQTY, WORKPRICE, PRT_AMT,PRT_BO ,0, M_UOM, INVQTY } + ENDIF + ELSEIF WHCHORDER == 'BACKORD' + PAMTS := { 0, 0, BKO_QTY, WORKPRICE , PRT_AMT, PRT_BO, 0, M_UOM , INVQTY } + ELSE + PAMTS := { (MISCITMS)->QUANTITY, BKO_QTY,SHPQTY, WORKPRICE, PRT_AMT, PRT_BO, 0, M_UOM , INVQTY } + ENDIF + IF PARTIAL_INVOICE //** P3N - 11/25/98 + LI_TOTALS := LI_TOTALS + ( SHPQTY * WORKPRICE ) + ELSEIF REPRINT_INVOICE //** P3N - 12/4/98 + LI_TOTALS := LI_TOTALS + ( INVQTY * WORKPRICE ) + ELSE //** P3N - 11/25/98 + LI_TOTALS := LI_TOTALS + ( (MISCITMS)->QUANTITY * WORKPRICE ) + ENDIF //** P3N - 11/25/98 + // start order below last detail printed + IF !DIDFST + IF !EMPTY(PBODY_ARR) // SEPERATE FROM DATA ABOVE + IF WHCHORDER == 'BACKORD' + AADD(PBODY_ARR, ' -----' ) + ELSE + AADD(PBODY_ARR, '-------------' ) + ENDIF + AADD(PAMTS_ARR, {}) // empty array will left justify + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL ) // nil pamts_arr will line up in body + ENDIF + DIDFST := .T. + ENDIF + AADD(PBODY_ARR, WORKVAR ) + AADD(PAMTS_ARR, PAMTS ) + IF !EMPTY( (MISCITMS)->ENTRY_SIZE ) + IF M_QTY_UOM $'N' + // Print size IN THE QTY AREA + ELSE + // Print size below desc + AADD(PBODY_ARR, 'Size: ' + ALLTRIM((MISCITMS)->ENTRY_SIZE ) + ' ' + ALLTRIM( M_UOM ) ) + AADD(PAMTS_ARR, NIL ) + ENDIF + ENDIF + //** P3N - 04/30/03 - MOVED FROM ABOVE - WAS ONLY PRINTING IF !EMPTY(ENTRY_SIZE) PER LINDA LINDS + //** P3N - 11/18/02 - ADDED THE KEYWORD FOR PRINTING - PER LINDA LINDS + IF EMPTY(SUBTYPE) //** P3N - 11/18/02 + //** DO NOT PRINT KEYWORDS ON EMPTY SUBTYPES + ELSEIF SUBTYPE = 'DELIVERY' .OR. ; //** DELIVERY COPY + SUBTYPE = 'GOLDEN' .OR. ; //** GOLDEN ROD COPY + SUBTYPE = 'PREBILL' //** PREBILL COPY + AADD(PBODY_ARR, MISC_ITEMS->KEYWORD ) //** P3N - 11/18/02 + AADD(PAMTS_ARR, NIL ) //** P3N - 11/18/02 + ENDIF //** P3N - 11/18/02 + // double space the cur_misc items for now. + AADD(PBODY_ARR, ' ' ) + AADD(PAMTS_ARR, NIL ) // nil pamts_arr will line up in body + (MISCITMS)->(DBSKIP(+1)) +ENDDO +RETURN { PBODY_ARR, PAMTS_ARR, LI_TOTALS, TOTBKO } +**************************************************************** +* DO WE WANT TO PRINT A PRODUCTION FRAME COPY OR +* A PRODUCTION STD FRAME COPY ? +* 'STD' - STORM DOOR +**************************************************************** +FUNCTION PRT_FRAME(WHICH_TYPE, PROD) +LOCAL RETVAL := .F. +DO CASE + CASE WHICH_TYPE = 'FRAME' + IF PROD_STD(PROD) + RETVAL := .F. + ELSE + RETVAL := .T. + ENDIF + CASE WHICH_TYPE = 'STDFRAME' + IF PROD_STD(PROD) + // STORM DOOR FRAME COPY + RETVAL := .T. + ENDIF +ENDCASE +RETURN RETVAL +**************************************************************** +* IS THIS PRODUCT A 'STD' +* 'STD' - STORM DOOR +**************************************************************** +FUNCTION PROD_STD(PROD) +LOCAL RETVAL := .F. +IF PRODUCT->(DBSEEK(PROD)) + IF PRODUCT->CAT_CODE = 'STD' + RETVAL := .T. + ENDIF +ENDIF +RETURN RETVAL +**************************************************************** +* SHOULD WE PRINT A DISCOUNT TOTAL +**************************************************************** +FUNCTION PRINT_DISC(PRN_ARR, PRODCODE) //PRINT A DISCOUNT% +LOCAL STRT := ASCAN(PRN_ARR, {|X| X[10] == PRODCODE}), I, RETVAL := .F. +IF EMPTY(STRT) + RETVAL := .F. +ELSE + FOR I := STRT TO LEN(PRN_ARR) + IF PRN_ARR[I,10] == PRODCODE + IF EMPTY(PRN_ARR[I,5,1]) + RETVAL := .F. + ELSE + RETVAL := .T. + EXIT + ENDIF + ENDIF + NEXT +ENDIF +RETURN RETVAL +**************************************************************** +* GET THE PRODUCT DISCOUNT TOTAL ( IE: ALL LINE ITEMS FOR A PRODUCT) +**************************************************************** +FUNCTION GETDISCTOT(PRN_ARR, STRT) +LOCAL PRODCODE := PRN_ARR[STRT, 10], ELM, DISC_PCT, I, RETARR := {} +//**LOCAL DISC_AMT := 0,ITMDISC := PRT_ITMDISC(PRN_ARR, PRODCODE) +LOCAL DISC_AMT := 0,ITMDISC := .F. +FOR I := STRT TO 1 STEP -1 + IF PRODCODE = PRN_ARR[I,10] + DISC_AMT := PRN_ARR[I, 5, 2] // LINE ITEM DISCOUNT AMT + DISC_PCT := PRN_ARR[I, 5, 1] // LINE ITEM DISCOUNT PCT + DISC_SIZE := PRN_ARR[I, 5, 3] // LINE ITEM ENTRY SIZE + IF EMPTY(DISC_AMT) + ELSE + IF EMPTY(RETARR) + AADD(RETARR, {PRODCODE, DISC_PCT, DISC_AMT, DISC_SIZE}) + ELSE + ELM := ASCAN(RETARR, {|X| X[1] == PRODCODE .AND. X[2] == DISC_PCT}) + IF EMPTY(ELM) + AADD(RETARR, {PRODCODE, DISC_PCT, DISC_AMT, DISC_SIZE}) + ELSEIF ITMDISC + AADD(RETARR, {PRODCODE, DISC_PCT, DISC_AMT, DISC_SIZE}) + ELSE + RETARR[ELM,3] := RETARR[ELM,3] + DISC_AMT + ENDIF + ENDIF + ENDIF + ENDIF +NEXT +RETURN RETARR +***************************************************************** +//** P3N - 3/5/99 - NEW FUNCTION TO IDENTIFY ZERO ORDERS +//** IN ONE PLACE. ( NO PRICING ) +//** P3N- 3/5/99 ADDED '93' TO THE NO PRICING TERMS LIST. +***************************************************************** +FUNCTION ZERO_ORDER() +LOCAL RETVAL := .F. +IF (CUR_MAST)->TERMS = '90' .OR. ; //** NO CHARGE //**P3N - 6/16/98 + (CUR_MAST)->TERMS = '91' .OR. ; //** EVEN EXCHANGE//**P3N - 3/10/99 + (CUR_MAST)->TERMS = '93' .OR. ; //** MEMO BILLING //**P3N - 3/05/99 + (CUR_MAST)->TERMS = '96' //** CANCELLATION //**P3N - 6/16/98 + RETVAL := .T. +ENDIF +RETURN RETVAL +***************************************************************** +//** P3N - 2/1/00 - NEW FUNCTION TO PAINT THE KEY VALUES AS NEEDED +//** IN A PREPROC SITUATION +***************************************************************** +FUNCTION PAINT_KEYS(KEYFLD,DISPROW, DISPCOL) +LOCAL SVCOLOR := SETCOLOR(HNOR) +MGET_KEY := &KEYFLD +IF EMPTY(DISPROW) + DISPROW := 3 +ENDIF +IF EMPTY(DISPCOL) + DISPCOL := 40 +ENDIF +@ DISPROW, 0 CLEAR +@ DISPROW, DISPCOL SAY MGET_KEY +SETCOLOR(SVCOLOR) +RETURN .T. +********************************************************* +// VALIDATE A PRODUCT CODE + +FUNCTION VAL_PRODUCT(PASSKEY, ELEM, DISPNAME, DOPACK) +LOCAL SAVESCR := SAVESCREEN() +LOCAL SAVESEL := SELECT() +LOCAL SAVEREC := RECNO() +LOCAL RETVAL := .F., A_ELEM +LOCAL SAVECOL := SETCOLOR() +LOCAL SAYMSG := "PRODUCT->DESC" + +LOCAL SAVEGETLIST := SAVEGETS() +LOCAL SEEKKEY + +IF PASSKEY = NIL + SEEKKEY := PROD_CODE + ELEM := NIL + DISPNAME := .F. +ELSE + SEEKKEY := &PASSKEY +ENDIF + +IF DISPNAME = NIL + DISPNAME := .T. +ENDIF + +IF DOPACK = NIL + DOPACK := .T. +ENDIF + +SETCOLOR(SAVECOL) +IF EMPTY(SEEKKEY) .AND. DOPACK + DELETE + PACK + RETURN .T. +ENDIF + +IF EMPTY(SEEKKEY) .OR. GOOD_PROD(SEEKKEY) + IF DISPNAME + A_ELEM := DISP_GETVAR(ELEM, SAYMSG) + ENDIF + RETURN .T. +ENDIF + +GBROWSE(3,'Product Lookup', 'PRODUCT') +SELECT (SAVESEL) +GOTO SAVEREC +SETCOLOR(SAVECOL) +RESTSCREEN(,,,,SAVESCR) +IF LASTKEY() = 13 + DO CASE + CASE ELEM = NIL // DBROWSE TYPE PROC +***** REPLACE USERFILE2->CLUBID WITH CLUB_MAST->CLUBID + REPLACE (SAVESEL)->PROD_CODE WITH PRODUCT->PROD_CODE + REPLACE UPDATED WITH 'Y' + + CASE VALTYPE(ELEM)$'A' // EXECUTE SOMETHING + NILVAR := &ELEM[1] + + CASE DISPNAME // GET_ONE_REC TYPE PROC + A_ELEM := DISP_GETVAR(ELEM, SAYMSG) + GETVARS[A_ELEM,4] := CLUB_MAST->CLUBID + ENDCASE + RETVAL := .T. +ELSE + RETVAL := .F. +ENDIF + +SETCOLOR(SAVECOL) +RETURN RETVAL + + + +**************************************************************** +* VALIDATE THE INPUT FIELD TO CONTAIN A VALID SET OF CHARACTARS* +**************************************************************** +FUNCTION VALID_CHR(PARM) +LOCAL I, RETVAL, FLD := &PARM +FOR I := 1 TO LEN(FLD) + IF SUBS(FLD,I,1)$'ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890_' + RETVAL := .T. + ELSE + ERR_BOX('** Invalid Option Value **', ; + '** Remove the - ' + ALLTRIM(SUBS(FLD,I,1)) ) + RETVAL := .F. + EXIT + ENDIF +NEXT +RETURN RETVAL + + +**************************************************************** +FUNCTION GOOD_PROD(SEEKKEY) +LOCAL SAVESEL := SELECT(), RECNUM := RECNO(), RETVAL +IF PRODUCT->(DBSEEK(SEEKKEY)) + RETVAL := .T. +ELSE + RETVAL := .F. +ENDIF +SELECT (SAVESEL) +GOTO RECNUM +RETURN RETVAL + +******************************************************************* +//** P3N - 1/15/99 +//** THIS FUNCTION WILL BUILD USERFILE2 WITH ORD_SHIP TRANS. +//** THIS IS A PREPROC 'I' FOR SCREEN 21350 - SELECTIVE SHIPPING +//** (F7-ORDER CONTROL / SHIPPING INFORMATION - SCREEN 3220) +******************************************************************* +FUNCTION BLD_TMP_OST() +LOCAL ORDNUM := TORD_LINES->ORDER_NUM +LOCAL LINENUM := TORD_LINES->LINE_NUM +LOCAL PROD := TORD_LINES->PROD_CODE +LOCAL PARPROD := TORD_LINES->PAR_PROD +LOCAL TRANNUM := TORD_LINES->(STR(RECNO(), 3) ) +LOCAL SVSEL := SELECT() +SELECT USERFILE2 +ZAP +IF ORD_SHIP->(DBSEEK(ORDNUM+STR(LINENUM,3)+ PROD +PARPROD+TRANNUM)) + DO WHILE ORD_SHIP->(!EOF()) .AND. ; + ORD_SHIP->ORDER_NUM == ORDNUM .AND. ; + ORD_SHIP->LINE_NUM == LINENUM .AND. ; + ORD_SHIP->PROD_CODE == PROD .AND. ; + ORD_SHIP->PAR_PROD == PARPROD .AND. ; + ORD_SHIP->TRAN_NUM == TRANNUM + SELECT USERFILE2 + ADD_REC(1) + REC_LOCK(1, 'USERFILE2') + REP_ONEREC('ORD_SHIP', 'USERFILE2' ) + ORD_SHIP->(DBSKIP(+1)) + ENDDO +ENDIF +SELECT(SVSEL) +RETURN .T. + +******************************************************************* +//** P3N - 1/15/02 +//** THIS FUNCTION WILL BUILD USERFILE2 WITH ORD_PROD TRANS. +//** THIS IS A PREPROC 'I' FOR SCREEN 22350 - SELECTIVE PRODUCTION +//** (F7-PRODUCTION CONTROL / PRODUCTION INFORMATION - SCREEN ????) +******************************************************************* +FUNCTION BLD_TMPOPT() +LOCAL ORDNUM := TORD_LINES->ORDER_NUM +LOCAL LINENUM := TORD_LINES->LINE_NUM +LOCAL PROD := TORD_LINES->PROD_CODE +LOCAL PARPROD := TORD_LINES->PAR_PROD +LOCAL TRANNUM := TORD_LINES->(STR(RECNO(), 3) ) +LOCAL SVSEL := SELECT() +SELECT USERFILE2 +//**ZAP +USERFILE2->(__DBZAP()) +IF ORD_PROD->(DBSEEK(ORDNUM+STR(LINENUM,3)+ PROD +PARPROD+TRANNUM)) + DO WHILE ORD_PROD->(!EOF()) .AND. ; + ORD_PROD->ORDER_NUM == ORDNUM .AND. ; + ORD_PROD->LINE_NUM == LINENUM .AND. ; + ORD_PROD->PROD_CODE == PROD .AND. ; + ORD_PROD->PAR_PROD == PARPROD .AND. ; + ORD_PROD->TRAN_NUM == TRANNUM + SELECT USERFILE2 + ADD_REC(1) + REC_LOCK(1, 'USERFILE2') + REP_ONEREC('ORD_PROD', 'USERFILE2' ) + ORD_PROD->(DBSKIP(+1)) + ENDDO +ENDIF +SELECT(SVSEL) +RETURN .T. +//******************************************************************* +//** P3N - 08/08/11 +//** Allow ONLY the AMOUNT OR PCT for Freight calc +//******************************************************************* +FUNCTION VAL_FRT(FLD) +LOCAL G_ACT_LIST := GETACTIVE() +LOCAL RETVAL := .T. +STATIC SVAMT, SVPCT +IF EMPTY(FLD) + FLD := '' +ENDIF +IF FLD = 'FRT_AMT' + IF EMPTY(G_ACT_LIST) + //** NO GET OBJ - CONTINUE + ELSE + SVAMT := G_ACT_LIST:BUFFER + ENDIF +ELSE + IF EMPTY(G_ACT_LIST) + //** NO GET OBJ - CONTINUE + ELSE + SVPCT := G_ACT_LIST:BUFFER + + IF VAL(SVAMT) <> 0 .AND. VAL(SVPCT) <> 0 + ERR_BOX( ' Freight Amount = '+ SVAMT , ; + ' Freight PCT = ' + SVPCT , ; + ' ', ; + ' Please - enter ONLY Amount OR PCT - NOT BOTH!') + RETVAL := .F. + ENDIF + ENDIF +ENDIF +RETURN RETVAL + \ No newline at end of file diff --git a/CGWPRPO0.PRG b/CGWPRPO0.PRG new file mode 100644 index 0000000..71ef2d1 --- /dev/null +++ b/CGWPRPO0.PRG @@ -0,0 +1,8964 @@ +// CGWPRPO0 - DON LOWENSTEIN - 4-25-94 (OTHER PRPO GOT TOO BIG!!) +// +#INCLUDE 'CGWINCLD.PRG' +#INCLUDE 'inkey.ch' + + +************************************************************ +* CONTROL MENU (PRODUCTION / ORDER) +************************************************************ +FUNCTION CNTRL_FUNC(OPT, TITLE,WHATFUNC, SEEKKEY) + +LOCAL FLD_INFO:={}, M1ST_DATE, SAVESEL := SELECT(), SHIPBROWSE := .F. +LOCAL PTITLE := 'Shipping / Back Orders', NOLINESMSG, SCREEN +PRIVATE PRNTSOURCE := 'OE' //** P3N - 11/24/98 +PRIVATE MODE:=0 +PRIVATE XFERARR := {} +PRIVATE ALLOWTRANS := .T. +PRIVATE CUR_MAST := NIL +PRIVATE CUR_OL := NIL +PRIVATE CUR_XL := NIL +PRIVATE CUR_OO := NIL +PRIVATE CUR_XO := NIL +PRIVATE CUR_MISC := NIL + +IF EMPTY(SEEKKEY) //** P3N - 1/26/00 + SHIPBROWSE := .F. //** P3N - 1/26/00 +ELSE //** P3N - 1/26/00 + SHIPBROWSE := .T. //** P3N - 1/26/00 +ENDIF //** P3N - 1/26/00 + +SET_ALIAS( 'ORDER' ) +OPEN_BASEFILES() +ORD_OPEN() + +DO WHILE .T. + + IF WHATFUNC == 'SHIP' // ORDER SHIPPING/CONTROL + SCREEN := '3220' + PTITLE := 'Shipping Information - Order #: ' + NOLINESMSG := '** Nothing FOUND to Ship! **' + DBOPEN('ORD_SHIP') + IF SELECT('USERFILE2') > 0 + CLOSE USERFILE2 + ENDIF + ELSE // PROD CONTROL + SCREEN := '3230' + PTITLE := 'Production Control - Order #: ' + NOLINESMSG := '** Nothing FOUND to Produce! **' + DBOPEN('ORD_PROD') + IF SELECT('USERFILE2') > 0 + CLOSE USERFILE2 + ENDIF + ENDIF + + IF SHIPBROWSE //** P3N - 1/26/00 + SCREEN := '3210' //** P3N - 1/26/00 + ENDIF //** P3N - 1/26/00 + + CLS + SAYTITLE(PTITLE, SCREEN) + COPY STRUCTURE TO (USERFILE2) + NET_USE(USERFILE2, .T. , 3 ,'USERFILE2') + + ORD_PARMS := DBOPEN( 'ORD_MAST' ) + IF SHIPBROWSE //** P3N - 1/26/00 + ELSE //** P3N - 1/26/00 + SEEKKEY := GET_KEY(ORD_PARMS) + ENDIF //** P3N - 1/26/00 + IF LASTKEY() = 27 + EXIT + ENDIF + + WAIT_BOX('** Preparing System Files! **', ; + '** Please Wait! **') + + BLD_TORD_LINES(SEEKKEY, WHATFUNC) //** P3N - 02/17/04 +//** BLD_TORD_LINES(SEEKKEY) //** P3N - 02/17/04 + + IF WHATFUNC == 'SHIP' // ORDER SHIPPING/CONTROL + UPD_BO_TOTAL('ORD_LINES') //** P3N - 11/19/98 + UPD_BO_TOTAL('ADDL_LINES') //** P3N - 11/23/98 + ENDIF + + SELECT TORD_LINES + IF LASTREC() = 0 + ERR_BOX (NOLINESMSG) + CLOSE TORD_LINES + ERASE &USERFILE4+'.DB*' + LOOP + ENDIF + + + ACD_PAR_CHILD( 1, PTITLE+TORD_LINES->ORDER_NUM , ; + { NIL , 'TORD_LINES', .F., 3, ; + 'REV',,,, .F. ,SCREEN ,.F., 'TORD_LINES' }) + + CLOSE TORD_LINES + ERASE &USERFILE4+'.DB*' + +ENDDO + +IF SHIPBROWSE //** P3N - 1/26/00 + //** DO NOT CLOSE DATA BASES //** P3N - 1/26/00 + //** WHEN BROWSING SHIPPING //** P3N - 1/26/00 + //** FROM ORDER ENTRY //** P3N - 1/26/00 +ELSE //** P3N - 1/26/00 + CLOSE DATABASES +ENDIF //** P3N - 1/26/00 + +RETURN .T. + +************************************************************ +* CREATE THE TORD_LINES FILE (USERFILE4) +* USED IN SHIPPING PROCESS. +************************************************************ +//**FUNCTION BLD_TORD_LINES(SEEKKEY) //** P3N - 02/17/04 +FUNCTION BLD_TORD_LINES(SEEKKEY, WHATFUNC) //** P3N - 02/17/04 +LOCAL CUT_SPEC_ARR := {}, OLQTY, NUM_IN_SPEC, XFACTOR, CALCQTY, ADDLKEY +LOCAL WKARR := {}, GETARR := {}, SV_ORD_REC := 1, FLANKCNT := 0, SVLINE +LOCAL MPROD_CODE, MORDER_NUM, MLINE_NUM, USE_TEMP, ADDL_MODE, PPR_CUSTID +LOCAL DISP_WAIT, SELFILE, FR_COLOR := '', ELM, FLANKERS := '', ADDL_CNTR +LOCAL VENTPOS := '' //** P3N - 11/26/01 +LOCAL SVPROD := PRODUCT->(RECNO()), PREVQTY := 0 //** P3N - 9/23/98 +LOCAL SCR_RULE1 := .F., SCR_RULE2 := .F. //** P3N -11/2/98 - HAPPY B-DAY MATT +LOCAL RESULT := .F., RESULT1 := .F., RESULT2 := .F., WIDTH_SPEC := .F. +LOCAL BACKORDER_SPEC := .F. //** P3N - 11/6/98 +LOCAL SCRDESC := '', PRNT_DESARR //** P3N - 7/21/99 - HAPPY BDAY DANIEL +LOCAL ITEM_CAT_CODE //** P3N - 7/21/99 - HAPPY BDAY DANIEL +DBOPEN( 'TORD_LINES' ) +COPY STRUCTURE TO &USERFILE4 +CLOSE TORD_LINES +NET_USE( USERFILE4, .T., 3, 'TORD_LINES' ) + +DBOPEN( 'ORDER_OPTS' ) //** P3N - 01/14/02 - FIX LINDA ABEND ON QUOTES?? +DBOPEN( 'ORD_LINES' ) +SV_ORDREC := ORD_LINES->(RECNO()) +SEEK SEEKKEY +SVLINE := ORD_LINES->LINE_NUM +DO WHILE ORD_LINES->ORDER_NUM == SEEKKEY .AND. !EOF() + IF EMPTY(ORD_LINES->PROD_CODE) .AND. EMPTY(ORD_LINES->QUANTITY) + ELSE + ADD_ONEREC( 'ORD_LINES', 'TORD_LINES' ) + ENDIF + ADDLKEY := ORD_LINES->ORDER_NUM + STR(ORD_LINES->LINE_NUM, 3) + XFACTOR := CK_XTRAWIND( 'ORD_LINES', 'ORDER_OPTS', .F. ) + MPROD_CODE := ORD_LINES->PROD_CODE + MORDER_NUM := ORD_LINES->ORDER_NUM + MLINE_NUM := STR(ORD_LINES->LINE_NUM, 3) + USE_TEMP := .F. + ADDL_MODE := .F. + PPR_CUSTID := NIL + DISP_WAIT := .F. + SELFILE := 'ORD_LINES' + WKARR := BUILD_GETARR( MPROD_CODE, 1, MORDER_NUM, MLINE_NUM, '', ; + USE_TEMP, ADDL_MODE, PPR_CUSTID, DISP_WAIT, SELFILE) + GETARR := WKARR[1] + ELM := ASCAN(GETARR, {|X| X[1] = 'FR COLOR'} ) //** P3N - 9/23/98 + IF EMPTY(ELM) //** P3N - 9/23/98 + FR_COLOR := '' //** P3N - 9/23/98 + ELSE //** P3N - 9/23/98 + FR_COLOR := ' ' + ALLTRIM(GETARR[ELM,4]) + ' ' //** P3N - 9/23/98 + ENDIF //** P3N - 9/23/98 + + ELM := ASCAN(GETARR, {|X| X[1] = 'VENT POS'} ) //** P3N -11/26/01 + IF EMPTY(ELM) //** P3N -11/26/01 + VENTPOS := '' //** P3N -11/26/01 + ELSE //** P3N -11/26/01 + VENTPOS := ALLTRIM(GETARR[ELM,4]) //** P3N -11/26/01 + ENDIF //** P3N -11/26/01 + + ELM := ASCAN(GETARR, {|X| X[1] = 'FLANKERS'} ) //** P3N -11/2/98 HAPPY B-DAY MATT + IF EMPTY(ELM) //** P3N -11/2/98 HAPPY B-DAY MATT + FLANKERS := '' //** P3N -11/2/98 HAPPY B-DAY MATT + ELSE //** P3N -11/2/98 HAPPY B-DAY MATT + FLANKERS := ALLTRIM(GETARR[ELM,4]) //** P3N -11/2/98 HAPPY B-DAY MATT + ELM := ASCAN(GETARR, {|X| X[1] = 'FLANK SCRN'}) //** P3N -11/2/98 HAPPY B-DAY MATT + IF EMPTY(ELM) //** P3N - 11/12/98 + FLANKERS := '' //** P3N -11/12/98 + ELSEIF ALLTRIM(GETARR[ELM,4]) == 'YES' //** P3N - 11/3/98 + ELSE + FLANKERS := '' //** P3N -11/2/98 HAPPY B-DAY MATT + ENDIF //** P3N -11/2/98 HAPPY B-DAY MATT + ENDIF //** P3N -11/2/98 HAPPY B-DAY MATT + + CUT_SPEC_ARR := {} +//** IF EMPTY(FLANKERS) // DO NOT GET THE ADDL LINE STUFF FOR FLANKERS + ADDL_CNTR := GET_ADDL(ADDLKEY, VENTPOS) //GET THE ADDL LINES STUFF +//**ADDL_CNTR := GET_ADDL(ADDLKEY, GETARR, SELFILE ) //GET THE ADDL LINES STUFF +//** IF EMPTY(ADDL_CNTR) + CUT_SPEC_ARR := GET_CUT_SPEC( ORD_LINES->PROD_CODE, 'ORD_LINES' ,ORD_LINES->QUANTITY, XFACTOR, GETARR ) +//** ENDIF +//** ELSE +//** CUT_SPEC_ARR := GET_CUT_SPEC( ORD_LINES->PROD_CODE, 'ORD_LINES' ,ORD_LINES->QUANTITY, XFACTOR, GETARR ) +//** ENDIF +//**ELM := ASCAN(CUT_SPEC_ARR, {|X| AT('N', X[9]) > 0 }) // IS THIS A SCREEN SPEC? +//** IS THIS A SCREEN OR A BACKORDER SPEC? + ELM := ASCAN(CUT_SPEC_ARR, ; //**P3N - 11/6/98 + {|X| AT('N', X[9]) > 0 .OR. AT('B', X[9]) > 0 }) //**P3N - 11/6/98 + IF EMPTY(ELM) + // NO SCREEN CUTTING SPECS - NO EXTRA REC BASED ON CUTTING SPECS + ELSEIF SCREEN_OPTS(GETARR) //SCREEN OPTIONS ENTERED - FIND SCREEN CUTTING SPECS + FOR ELM := ELM TO LEN(CUT_SPEC_ARR) + BACKORDER_SPEC := .F. //** P3N - 11/6/98 + IF AT('N', CUT_SPEC_ARR[ELM, 9]) > 0 //**SCREEN CUTTING SPECS ONLY + ELSEIF AT('B', CUT_SPEC_ARR[ELM, 9]) > 0 //**BACKORDER SPECS ONLY + BACKORDER_SPEC := .T. //** P3N - 11/6/98 + ELSE + LOOP + ENDIF +//** IF CUT_SPEC_ARR[ELM, 11] == 'W' //** WIDTH CUTTING SPEC + IF CUT_SPEC_ARR[ELM, 11] $'W ' //** WIDTH OR " "-DESC CUTTING SPEC + WIDTH_SPEC := .T. //** USE ONLY ONE SPEC OUT OF + ELSE //** WIDTH / HEIGHT PAIR + WIDTH_SPEC := .F. + LOOP + ENDIF + RESULT := .F. + SCR_RULE1 := CUT_SPEC_ARR[ELM,8] //** RULE TO CHECK!! + SCR_RULE2 := CUT_SPEC_ARR[ELM,16] //** RULE TO CHECK!! + IF EMPTY(SCR_RULE1) .AND. EMPTY(SCR_RULE2) //** P3N - 11/2/98 - HAPPY B-DAY MATT + RESULT := .T. //** P3N - 11/2/98 - HAPPY B-DAY MATT + ELSE //** P3N - 11/2/98 + RESULT1 := CHK_RULE(SCR_RULE1, GETARR, , SELFILE) + IF RESULT1 + IF EMPTY(SCR_RULE2) + RESULT2 := .T. + ELSE + RESULT2 := CHK_RULE(SCR_RULE2, GETARR, , SELFILE) + ENDIF + IF RESULT2 + RESULT := .T. + ENDIF + ENDIF + ENDIF + OLQTY := CUT_SPEC_ARR[ELM, 3] + IF ( RESULT .AND. !EMPTY(OLQTY) .AND. WIDTH_SPEC ) .OR. ; + BACKORDER_SPEC + NUM_IN_SPEC := CUT_SPEC_ARR[ELM, 13] + XFACTOR := CK_XTRAWIND( 'ORD_LINES', 'ORDER_OPTS', .F. ) + CALCQTY := OLQTY * NUM_IN_SPEC * ( 1 + XFACTOR ) + ITEM_CAT_CODE := GET_CATCODE( TORD_LINES->PROD_CODE) //** P3N - 7/21/99 HAPPY BDAY DANIEL +//** IF ADDSCREEN() //** P3N - 7/21/99 HAPPY BDAY DANIEL + IF (EMPTY(ADDL_CNTR) .AND. ADDSCREEN()) .OR. ; //** P3N - 7/21/99 HAPPY BDAY DANIEL + (!EMPTY(ADDL_CNTR) .AND. ADDSCREEN() .AND. ITEM_CAT_CODE <> 'SCREENS') + ADD_ONEREC( 'ORD_LINES', 'TORD_LINES' ) + REC_LOCK( 3, 'TORD_LINES' ) + REPLACE TORD_LINES->PAR_PROD WITH PROD_CODE + REPLACE TORD_LINES->PROD_CODE WITH 'SCREENS' + REPLACE TORD_LINES->QUANTITY WITH CALCQTY + IF PRODUCT->PROD_CODE == TORD_LINES->PAR_PROD + ELSE + PRODUCT->(DBSEEK(TORD_LINES->PAR_PROD)) + ENDIF +//** P3N - 7/21/99 HAPPY BDAY DANIEL +//** CHANGED TO ADDRESS BACKORDER SCREEN DESCR. PRINTING +//** REPLACE TORD_LINES->ITEM_DESC WITH 'SCREENS FOR'+FR_COLOR+PRODUCT->DESC + PRNT_DESARR := BLD_DESC(GETARR, SELFILE, 'BACKORD', , 'SCREENS') + SCRDESC := PRNT_DESARR[1] //** P3N - 7/21/99 - HAPPY BDAY DANIEL + REPLACE TORD_LINES->ITEM_DESC WITH 'SCREENS FOR '+SCRDESC + ENDIF //** P3N - 7/21/99 - HAPPY B-DAY DANIEL + IF EMPTY(FLANKERS) //** P3N - 11/2/98 - HAPPY B-DAY MATT + SVLINE := ORD_LINES->LINE_NUM + FLANKCNT := 0 + ELSEIF ORD_LINES->LINE_NUM = SVLINE + REPLACE TORD_LINES->LINE_DESC WITH ' ' //** P3N - 1/26/99 + FLANKCNT := FLANKCNT + 1 + IF FLANKCNT = 1 + PREVQTY := TORD_LINES->QUANTITY + ELSEIF PREVQTY = TORD_LINES->QUANTITY + ELSE +//** REPLACE TORD_LINES->ENTRY_SIZE WITH FLANKERS + ENDIF + ELSE + SVLINE := ORD_LINES->LINE_NUM + FLANKCNT := 1 //** P3N - 1/27/99 + REPLACE TORD_LINES->LINE_DESC WITH ' ' //** P3N - 1/27/99 + ENDIF + ENDIF + NEXT + IF EMPTY(FLANKCNT) //** UPDATE PENDING FLANKER SIZE + ELSE + //** P3N - 1/26/99 +//** REPLACE TORD_LINES->ENTRY_SIZE WITH FLANKERS + ADD_ONEREC( 'ORD_LINES', 'TORD_LINES' ) + REC_LOCK( 3, 'TORD_LINES' ) + REPLACE TORD_LINES->PAR_PROD WITH PROD_CODE +//** REPLACE TORD_LINES->PROD_CODE WITH 'SCREENS' + REPLACE TORD_LINES->PROD_CODE WITH 'SCRFLNK' + REPLACE TORD_LINES->QUANTITY WITH CALCQTY + IF TORD_LINES->HOW_MEAS == 'NS' //** P3N - 2/02/99 + REPLACE TORD_LINES->ENTRY_SIZE WITH SUBST(FLANKERS, 1, 4) + ELSE + REPLACE TORD_LINES->ENTRY_SIZE WITH FLANKERS + ENDIF +//** P3N - 7/21/99 HAPPY BDAY DANIEL +//** CHANGED TO ADDRESS BACKORDER SCREEN DESCR. PRINTING +//** REPLACE TORD_LINES->ITEM_DESC WITH 'SCREENS FOR'+FR_COLOR+PRODUCT->DESC + PRNT_DESARR := BLD_DESC(GETARR, SELFILE, 'BACKORD', , 'SCREENS') + SCRDESC := PRNT_DESARR[1] //** P3N - 7/21/99 - HAPPY BDAY DANIEL + REPLACE TORD_LINES->ITEM_DESC WITH 'SCREENS FOR '+ SCRDESC + FLANKERS := ' ' + FLANKCNT := 0 + ENDIF + ENDIF + IF WHATFUNC == 'SHIP' // ORDER SHIPPING/CONTROL //** P3N - 02/17/04 + //** DO NOT CREATE A GLASS ORDER SHIPPING ITEM //** P3N - 02/17/04 + ELSE //** P3N - 02/17/04 + ELM := ASCAN(CUT_SPEC_ARR, {|X| AT('G', X[9]) > 0 }) //** P3N - 02/16/04 + IF EMPTY(ELM) //** P3N - 02/16/04 + //** NO GLASS CUTTING SPECS - CONTINUE + ELSE + //** GLASS CUTTING SPECS //** P3N - 02/16/04 + //** CREATE A CONTROL REC FOR THE GLASS PARTS + OLQTY := CUT_SPEC_ARR[ELM, 3] + NUM_IN_SPEC := CUT_SPEC_ARR[ELM, 13] + XFACTOR := CK_XTRAWIND( 'ORD_LINES', 'ORDER_OPTS', .F. ) + CALCQTY := OLQTY * NUM_IN_SPEC * ( 1 + XFACTOR ) + ADD_ONEREC( 'ORD_LINES', 'TORD_LINES' ) + REC_LOCK( 3, 'TORD_LINES' ) + REPLACE TORD_LINES->PAR_PROD WITH PROD_CODE + REPLACE TORD_LINES->PROD_CODE WITH 'GLASS' + REPLACE TORD_LINES->QUANTITY WITH CALCQTY + IF PRODUCT->PROD_CODE == TORD_LINES->PAR_PROD + ELSE + PRODUCT->(DBSEEK(TORD_LINES->PAR_PROD)) + ENDIF + PRNT_DESARR := BLD_DESC(GETARR, SELFILE, 'BACKORD', , 'GLASS') + SCRDESC := PRNT_DESARR[1] + REPLACE TORD_LINES->ITEM_DESC WITH 'GLASS FOR '+SCRDESC + ENDIF //** P3N - 02/16/04 + ENDIF //** P3N - 02/17/04 + ORD_LINES->(DBSKIP(+1)) +ENDDO +GET_MISC(SEEKKEY) // CHK FOR MISC. ORDER LINES (CGW0OMI) + +GET_ORDMISC(SEEKKEY, 'MISC') //CHK FOR ORDER MISC ITEMS (CGW0OM->MISC_ITEM1...) + +GET_ORDMISC(SEEKKEY, 'NOTX') //CHK FOR ORDER NON TAX ITEMS (CGW0OM->NOTX_ITEM1...) + +TORD_LINES->(DBGOTOP()) //** P3N - 9/2/98 +ORD_LINES->(DBGOTO(SV_ORDREC)) //** P3N - 9/16/98 +PRODUCT->(DBGOTO(SVPROD)) //** P3N - 9/23/98 + +RETURN .T. + +************************************************************ +* P3N - 11/9/98 +* DOES THIS SCREEN ALREADY EXIST ON THIS ORDER? +************************************************************ +FUNCTION ADDSCREEN() +LOCAL RETVAL := .T. +LOCAL TORDREC := TORD_LINES->(RECNO()) +TORD_LINES->(DBGOTOP()) +DO WHILE TORD_LINES->(!EOF()) + IF ORD_LINES->ORDER_NUM == TORD_LINES->ORDER_NUM + IF ORD_LINES->LINE_NUM == TORD_LINES->LINE_NUM + IF ORD_LINES->PROD_CODE == TORD_LINES->PAR_PROD + IF TORD_LINES->PROD_CODE == 'SCREENS' + RETVAL := .F. + ENDIF + ENDIF + ENDIF + ENDIF + TORD_LINES->(DBSKIP(+1)) +ENDDO +TORD_LINES->(DBGOTO(TORDREC)) +RETURN RETVAL +************************************************************ +* P3N - 7/7/98 +* WAS THIS WINDOW ORDERED WITH A SCREEN? +************************************************************ +FUNCTION SCREEN_OPTS(GETARR) +LOCAL RETVAL := .F. +LOCAL ELM := ASCAN(GETARR, {|X| AT('SCRN', X[1]) > 0 .OR. ; + AT('WITH SCREN', X[1]) > 0 .OR. ; + AT('SCREEN', X[1]) > 0 } ) +IF ELM > 0 // IS THIS A SCREEN ATT ? + IF AT('SCREEN ONLY', GETARR[ELM, 4] ) > 0 .OR. ; + AT('WITH SCR', GETARR[ELM, 4]) > 0 .OR. ; + AT('VIEW SCREEN', GETARR[ELM, 4] ) > 0 .OR. ; + AT('W/SCR', GETARR[ELM, 4]) > 0 + //** ACCEPT SCREEN ONLY OPTION AND W/SCR OPTION + RETVAL := .T. + ENDIF +ENDIF +RETURN RETVAL +************************************************************ +* P3N - 8/17/98 +* WAS THIS WINDOW ORDERED WITH A STORM? +************************************************************ +FUNCTION STORM_OPTS(GETARR) +LOCAL RETVAL := .F. +LOCAL ELM := ASCAN(GETARR, {|X| AT('STORM', X[1]) > 0 } ) +IF ELM > 0 // IS THIS A STORM ATT ? + IF AT('STORM', GETARR[ELM, 4] ) > 0 + RETVAL := .T. + ENDIF +ENDIF +RETURN RETVAL +************************************************************ +* ADDL LINES FOR TORD_LINES SHIP ORDERS - +************************************************************ +//**FUNCTION GET_ADDL(SEEKKEY, GETARR, SELFILE ) +FUNCTION GET_ADDL(SEEKKEY, VENTPOS) +LOCAL ADDLCTR := 0, ADDLORD +LOCAL SVSEL := SELECT() +LOCAL PRNT_DESARR, SCRDESC //** P3N - 8/26/99 - HAPPY ANNIV. DON & RUTH #21 +LOCAL MPROD_CODE := '' //** P3N - 11/26/01 +LOCAL MORDER_NUM := ORD_LINES->ORDER_NUM //** P3N - 11/26/01 +LOCAL MLINE_NUM := STR(ORD_LINES->LINE_NUM, 3) //** P3N - 11/26/01 +LOCAL USE_TEMP := .F. //** P3N - 11/26/01 +LOCAL ADDL_MODE := .T. //** P3N - 11/26/01 +LOCAL PPR_CUSTID := NIL //** P3N - 11/26/01 +LOCAL DISP_WAIT := .F. //** P3N - 11/26/01 +LOCAL SELFILE := 'ADDL_LINES' //** P3N - 11/26/01 +LOCAL WKARR := {} //** P3N - 11/26/01 +DBOPEN( 'ADDL_LINES' ) +ADDLORD := INDEXORD() +SET ORDER TO 3 +ADDL_LINES->(DBSEEK(SEEKKEY)) +DO WHILE !EOF() .AND. ADDL_LINES->ORDER_NUM == ORD_LINES->ORDER_NUM ; + .AND. ADDL_LINES->LINE_NUM == ORD_LINES->LINE_NUM + ADDLCTR := ADDLCTR + 1 + ADD_ONEREC( 'ADDL_LINES', 'TORD_LINES' ) + MPROD_CODE := ADDL_LINES->PROD_CODE //** P3N - 11/26/01 + WKARR := BUILD_GETARR( MPROD_CODE, 1, MORDER_NUM, MLINE_NUM, '', ; //**P3N - 11/26/01 + USE_TEMP, ADDL_MODE, PPR_CUSTID, DISP_WAIT, SELFILE) //**P3N - 11/26/01 +//** GETARR := WKARR[1] + PRNT_DESARR := BLD_DESC(WKARR[1], 'ADDL_LINES', 'BACKORD', , 'SCREENS') + SCRDESC := PRNT_DESARR[1] //** P3N - 8/26/99 - HAPPY ANNIV. DON & RUTH #21 + IF EMPTY(VENTPOS) //** P3N - 11/26/01 + ELSE //** P3N - 11/26/01 + SCRDESC := SCRDESC + ' - ' + VENTPOS //** P3N - 11/26/01 + ENDIF //** P3N - 11/26/01 + REPLACE TORD_LINES->ITEM_DESC WITH SCRDESC +//** REPLACE TORD_LINES->ITEM_DESC WITH 'SCREENS FOR '+ SCRDESC + SKIP 1 +ENDDO +SET ORDER TO ADDLORD +SELECT(SVSEL) +RETURN ADDLCTR +************************************************************ +* P3N - 7/7/98 +* MISC ORDER LINES (CGW0OMI) +************************************************************ +FUNCTION GET_MISC(SEEKKEY) +LOCAL SVSEL := SELECT() +DBOPEN( 'ORD_MISC' ) +ORD_MISC->(DBSEEK(SEEKKEY)) +DO WHILE !EOF() .AND. ORD_MISC->ORDER_NUM == SEEKKEY + TORD_LINES->(DBAPPEND()) + REPLACE TORD_LINES->ORDER_NUM WITH ORD_MISC->ORDER_NUM + REPLACE TORD_LINES->LINE_NUM WITH VAL(ORD_MISC->LINE_NUM) + REPLACE TORD_LINES->QUANTITY WITH ORD_MISC->QUANTITY + REPLACE TORD_LINES->ENTRY_SIZE WITH ORD_MISC->ENTRY_SIZE + REPLACE TORD_LINES->WIDTH WITH ORD_MISC->WIDTH + REPLACE TORD_LINES->HEIGHT WITH ORD_MISC->HEIGHT + REPLACE TORD_LINES->PRICE_SHT WITH ORD_MISC->PRICE_SHT + REPLACE TORD_LINES->SALE_PRICE WITH ORD_MISC->SALE_PRICE + REPLACE TORD_LINES->ALT_SPRICE WITH ORD_MISC->ALT_SPRICE + REPLACE TORD_LINES->HOW_MEAS WITH ORD_MISC->HOW_MEAS + REPLACE TORD_LINES->COLOR WITH ORD_MISC->COLOR + REPLACE TORD_LINES->PARTNUM WITH ORD_MISC->PARTNUM + REPLACE TORD_LINES->LINE_DESC WITH ORD_MISC->PARTNUM + REPLACE TORD_LINES->UOM WITH ORD_MISC->UOM + REPLACE TORD_LINES->UPDATED WITH ORD_MISC->UPDATED + REPLACE TORD_LINES->PROD_CODE WITH 'MISCITM' + SKIP 1 +ENDDO +SELECT(SVSEL) +RETURN .T. +************************************************************ +* P3N - 7/28/98 +* ORDER MISC. ITEMS (CGW0OM->MISC_ITEM1...) +* OR +* ORDER NON TAX ITEMS (CGW0OM->NOTX_ITEM1...) +************************************************************ +FUNCTION GET_ORDMISC(SEEKKEY, WHATFLDS) +LOCAL I, ITM_NAME, QTY_NAME, AMT_NAME, CONT := .T., TOL_PROD, WK_QTY +IF WHATFLDS == 'MISC' + ITM_NAME := 'MISC_ITEM' + QTY_NAME := 'MISC_QTY' + AMT_NAME := 'MISC_AMT' + TOL_PROD := 'ORDMISC' +ELSEIF WHATFLDS == 'NOTX' + ITM_NAME := 'NOTX_ITEM' + QTY_NAME := 'NOTX_QTY' + AMT_NAME := 'NOTX_AMT' + TOL_PROD := 'ORDNOTX' +ELSE + ERR_BOX ('Invalid call to GET_ORDMISC()!', ; + 'All items from Order Entry Screen (2115) may not be present.', ; + 'ORDER SHIPPING Information MAY NOT be ACCURATE and/or COMPLETE.') + CONT := .F. +ENDIF +IF CONT + FOR I := 1 TO 3 + ITM_NAME := SUBS(ITM_NAME,1,9) + STR(I, 1) + QTY_NAME := SUBS(QTY_NAME,1,8) + STR(I, 1) + AMT_NAME := SUBS(AMT_NAME,1,8) + STR(I, 1) + IF EMPTY( (CUR_MAST)->&ITM_NAME) + LOOP + ENDIF + TORD_LINES->(DBAPPEND()) + REPLACE TORD_LINES->ORDER_NUM WITH (CUR_MAST)->ORDER_NUM + REPLACE TORD_LINES->LINE_NUM WITH I + REPLACE TORD_LINES->QUANTITY WITH (CUR_MAST)->&QTY_NAME + REPLACE TORD_LINES->SALE_PRICE WITH (CUR_MAST)->&AMT_NAME + REPLACE TORD_LINES->LINE_DESC WITH (CUR_MAST)->&ITM_NAME + REPLACE TORD_LINES->PROD_CODE WITH TOL_PROD + REPLACE TORD_LINES->LOC_CODE WITH MHOME_LOC_CODE + NEXT +ENDIF +RETURN .T. +************************************************************ +* ADD CHANGE ORDERS - +************************************************************ + +FUNCTION ACD_ORDERS ( OPT,TITLE, PARM, WHEREORD ) + +LOCAL OPTION := OPT, MTITLE := TITLE +LOCAL SAVESEL := SELECT(), RETVAL +LOCAL SAVESCR := SAVESCREEN() +LOCAL ACTION_CODE +** LOCAL OLDF8 := SETKEY( -7, OLDF8 ) //** P3N - 4/30/98 +PRIVATE PRNTSOURCE := 'OE' //** P3N - 11/24/98 + +//**(CUR_MAST)->(DONSETORD(1)) //** P3N - 1/28/00 + +IF PARM[5] <> NIL + SETAVAR( 'SET', 'ACTION_CODE', PARM[5] ) +ELSE + DO CASE + CASE OPT = 1 + SETAVAR( 'SET', 'ACTION_CODE', 'ADD' ) + PARM[5] := 'ADD' + CASE OPT = 2 + SETAVAR( 'SET', 'ACTION_CODE', 'DEL' ) + PARM[5] := 'DEL' + CASE OPT = 3 + SETAVAR( 'SET', 'ACTION_CODE', 'REV' ) + PARM[5] := 'REV' + ENDCASE +ENDIF + +IF WHEREORD = NIL + _WHEREORD := '1' +ELSE + _WHEREORD := WHEREORD + SELECT( CUR_MAST ) +ENDIF +M->OE_TYPE := 'CHG' //** P3N - 9/20/06 +IF OPT = 1 //** P3N - 11/01/06 + M->OE_TYPE := 'ADD' //** P3N - 11/01/06 +ENDIF //** P3N - 11/01/06 +//**IF OPT = 1 //** P3N - 3/03/00 +IF TITLE = 'ADD ' //** P3N - 4/17/01 + IF SELECT( CUR_MAST ) > 0 //** ADD ORDER TIME + (CUR_MAST)->(DONSETORD(1)) //** ENSURE YOU ARE ON THE + (CUR_MAST)->(DBGOTOP()) //** P3N - 03/30/01 HAPPY B-DAY CHRISTY + ENDIF //** ORDER_NUM INDEX +ENDIF //** P3N - 3/03/00 + + +RETVAL := ACD_PAR_CHILD (OPT,MTITLE, PARM ) + +**IF LASTKEY() == 27 //ESCAPE FROM THE ADD CHANGE ORDERS +** // do NOT refresh the output array if ESCAPE is used +**ELSE +**IF OPT = 1 .AND. _WHEREORD = '2' // ADD/CHANGE + OUT_ARR := BLD_ORDER( (CUR_MAST)->ORDER_NUM ) +**ENDIF + +** //** P3N - 5/8/98 +**OLDF8 := SETKEY( -7, {||SHIPINFO('ORD_MAST')} ) //ORDER SHIPPING INFORMATION +SELECT (SAVESEL) +RESTSCREEN(,,,, SAVESCR) + +IF SELECT('TORD_LINES') > 0 //** P3N - 1/26/00 + CLOSE TORD_LINES //** P3N - 1/26/00 +ENDIF //** P3N - 1/26/00 + +RETURN RETVAL + + +**************************************************************** +* Initialize the INSTALL (GL361) Amount in the active line item file. +* (ie: ORDER_LINES, or QUOTE_LINES) +//** AS OF 02/01/07 GL311 is GL361 +**************************************************************** +FUNCTION SET_GL311(SEEKKEY) +LOCAL SAVESEL := SELECT(), RECNUM := RECNO(), RETVAL := 0.00 +IF (CUR_MAST)->PICK_DEL$'I' // Install ORDER + IF PRODUCT->(DBSEEK(SEEKKEY)) + RETVAL := PRODUCT->INSTALLAMT + ENDIF +ENDIF +SELECT (SAVESEL) +RETURN RETVAL + +********************************************************* +// INITIALIZE NEW FIELDS FOR A PARTNUMBER + +FUNCTION NEED_DATA( MPARTNUM, FLD_NAME ) + +LOCAL SAVESEL := SELECT(), I:=0, WORKUOM, WORKCOLOR +LOCAL WORKARR := {}, CHOICE := 0, STRT, RETVAL := .F. + +IF FLD_NAME = 'UOM' + SELECT MISC_PUOM + DONSETORD(2) +ELSE + SELECT MISC_COLOR + DONSETORD(2) +ENDIF + +SEEK MPARTNUM +DO WHILE PARTNUM == MPARTNUM .AND. !EOF() + AADD(WORKARR, &FLD_NAME ) + SKIP 1 +ENDDO + +SELECT (SAVESEL) + +STRT := 1 +IF !EMPTY(&FLD_NAME) + FOR I := 1 TO LEN(WORKARR) + IF WORKARR[I] == &FLD_NAME + STRT := I + EXIT + ENDIF + NEXT +ENDIF + +IF EMPTY(WORKARR) + REPLACE &FLD_NAME WITH 'N/A' + RETVAL := .T. + KEYBOARD CHR(13) +ELSE + DO WHILE CHOICE = 0 + IF LEN(WORKARR) = 1 + CHOICE := 1 + ELSE + CHOICE = PICKLIST(WORKARR, MIN(ROW()+1,8) , MIN(COL()+5,40), 'Select' + FLD_NAME, STRT ) + ENDIF + ENDDO + REPLACE &FLD_NAME WITH WORKARR[CHOICE] + RETVAL := .T. + KEYBOARD CHR(13) +ENDIF + +IF FLD_NAME = 'UOM' + SELECT MISC_PUOM + DONSETORD(1) +ELSE + SELECT MISC_COLOR + DONSETORD(1) +ENDIF + +SELECT (SAVESEL) + +RETURN RETVAL + + +********************************************************* +// INITIALIZE NEW FIELDS FOR A PARTNUMBER + +FUNCTION SET_OMI_DATA( MPARTNUM ) + +LOCAL SAVESEL := SELECT(), I:=0, WORKUOM, WORKCOLOR + +SELECT MISC_PUOM +SEEK MPARTNUM +DO WHILE PARTNUM == MPARTNUM .AND. !EOF() + I ++ + WORKUOM := UOM + SKIP 1 +ENDDO + +SELECT (SAVESEL) + +IF I = 1 + REPLACE UOM WITH WORKUOM +ENDIF + +SELECT MISC_COLOR +SEEK MPARTNUM +I := 0 +DO WHILE PARTNUM == MPARTNUM .AND. !EOF() + I ++ + WORKCOLOR := COLOR + SKIP 1 +ENDDO + +SELECT (SAVESEL) + +IF I = 1 + REPLACE COLOR WITH WORKCOLOR +ENDIF + +REPLACE LINE_NUM WITH STR(RECNO(), 3) + +RETURN .T. + +********************************************************* +FUNCTION ACD_PARTS( ) + +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') +LOCAL SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN() +****LOCAL OPTION := 1 +LOCAL TITLE := 'MISC PARTS Setup' + +IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + TITLE := 'MISC PARTS Setup' + MISC_WHATWAY( 1, TITLE, .F., ACTION_CODE ) +ELSE + ERR_BOX('You CAN NOT Update Parts in REVIEW mode!') +**TITLE := 'MISC PARTS Review' +**MISC_WHATWAY( 3, TITLE, .F., 'REV' ) +ENDIF + +SELECT(SAVESEL) + +RESTSCREEN(,,,,SAVESCR) + +RETURN .T. + + +********************************************************* +FUNCTION MISC_ITEM( ) + +LOCAL SAVESEL := SELECT(), REARANGE_FILES := .F. +LOCAL SAVESCR := SAVESCREEN() +LOCAL OPTION := 1 +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') +LOCAL TITLE +IF EMPTY(ACTION_CODE) + ACTION_CODE := 'REV' //REVIEW OPTION +ENDIF + +IF ACTION_CODE = 'REV' //REVIEW OPTION + OPTION := 3 +ENDIF +IF CUR_MAST = 'ORD_MAST' + TITLE := 'MISC Items for Order ' + ALLTRIM( (SAVESEL)->ORDER_NUM ) +ELSE + TITLE := 'MISC Items for Quote ' + ALLTRIM( (SAVESEL)->ORDER_NUM ) +ENDIF + +IF SELECT( 'SALESMEN' ) > 0 + REARANGE_FILES := .T. + CLOSE SALESMEN + CLOSE MFG_LOC + CLOSE TERMS + CLOSE SHIPMETH + CLOSE TAX_DETAIL + CLOSE TAX_SCHED + CLOSE WORKSTAT + + IF SELECT( 'MISC_ITEMS' ) > 0 + CLOSE MISC_ITEMS + ENDIF + DBOPEN('MISC_ITEMS') + DBOPEN('MISC_PUOM') + DBOPEN('MISC_COLOR') +**DBOPEN('UOMFILE') +ENDIF + +ACD_PAR_CHILD(OPTION, TITLE, {NIL, CUR_MISC, .F., 3, ACTION_CODE, , , , , , .F., "USERFILEI"}) + +UP_MISCTOT((CUR_MAST)->ORDER_NUM ) //** P3N - 11/25/98 + +CLOSE USERFILEI + +IF REARANGE_FILES + CLOSE MISC_PUOM + CLOSE MISC_COLOR + CLOSE MISC_ITEMS + +//** P3N - 12/29/98 + DBOPEN("MISC_ITEMS") + DBOPEN("SALESMEN") + DBOPEN("MFG_LOC") +//** DBOPEN("MISC_ITEMS",,, {1}) +//** DBOPEN("SALESMEN",,, {1}) +//** DBOPEN("MFG_LOC",,, {1}) + DBOPEN("TERMS") + DBOPEN("SHIPMETH") + DBOPEN("TAX_DETAIL") + DBOPEN("TAX_SCHED") + DBOPEN("WORKSTAT") +ENDIF +RESTSCREEN(,,,,SAVESCR) + +SELECT(SAVESEL) + +RETURN .T. + + +********************************************************* +FUNCTION MASTER_LIST(ACTION) + +LOCAL SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN() +LOCAL OPTION := 1 +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') +LOCAL TITLE + +IF EMPTY(ACTION_CODE) + ACTION_CODE := 'REV' +ENDIF + +IF ACTION_CODE = 'REV' //REVIEW OPTION + OPTION := 3 +ENDIF + +IF ACTION = 'UOM' + TITLE := 'UOM Master List' + ACD_PAR_CHILD(OPTION, TITLE, {NIL, 'UOMFILE', .F., 3, ACTION_CODE, , , , , , .F., "USERFILEX"}) +ELSE + IF ACTION = 'COLOR' + TITLE := 'COLOR Master List' + ACD_PAR_CHILD(OPTION, TITLE, {NIL, 'COLOR_LIST', .F., 3, ACTION_CODE, , , , , , .F., "USERFILEX"}) + ENDIF +ENDIF + +RESTSCREEN(,,,,SAVESCR) + +CLOSE USERFILEX +SELECT(SAVESEL) + +RETURN .T. + + +********************************************************* +** F7 - Hot key to Change or Review ORDERS from the PRINT menu +********************************************************* +FUNCTION CHG_REV_HOTKEY(REVONLY, ORDCONTROL ) + +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') +LOCAL SAVESEL := SELECT(), OLDBLOCK, SCRNUM +LOCAL SAVESCR := SAVESCREEN() +LOCAL OPT := 1 +LOCAL TITLE +// SAVE CURRENT HOTKEYS +LOCAL OLDF5 := SETKEY( K_F5, NIL ) //** P3N - 8/18/99 +LOCAL OLDF10 := SETKEY( K_F10, NIL ) +LOCAL OLDPGDN := SETKEY( K_PGDN, NIL ) +LOCAL OLDPGUP := SETKEY( K_PGUP, NIL ) +LOCAL OLDPGLEFT := SETKEY( K_LEFT, NIL ) +LOCAL OLDPGRITE := SETKEY( K_RIGHT, NIL ) +LOCAL OLDF7 := SETKEY( K_F7, OLDF7 ) +//**LOCAL OLDF7 := SETKEY( -6, OLDF7 ) +LOCAL OLDCURSOR := SETCURSOR() +LOCAL BLDTORD := .F., SEEKKEY //** P3N - 6/29/98 + +IF EMPTY(ORDCONTROL) //** P3N - 6/29/98 + BLDTORD := .F. +ELSE + BLDTORD := ORDCONTROL +ENDIF + +IF EMPTY(REVONLY) + REVONLY := ' ' +ENDIF + +IF CUR_MAST == 'ORD_MAST' + SCRNUM := '2120' // ORDER PROCESSING SCREEN +ELSE + SCRNUM := '2220' // QUOTE PROCESSING SCREEN +ENDIF + +IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + TITLE := 'CHANGE Sales Orders' + IF SCRNUM = '2220' + TITLE := 'CHANGE Quote' + ENDIF + CMD := 'ADD' + OPT := 2 //** P3N - 02/02/07 + //**OPT := 1 //** P3N - 02/02/07 +ELSE + TITLE := 'Review Sales Orders' + IF SCRNUM = '2220' + TITLE := 'Review Quote' + ENDIF + CMD := 'REV' + OPT := 3 +ENDIF + +CLEAR GETS + +IF REVONLY == 'REV' + CMD := 'REV' +ENDIF + +ACD_ORDERS (OPT, TITLE, { CUR_MAST, CUR_OL, .T., 2, CMD ,,,,,, .F.,,SCRNUM,.F.,, }, '2') + +// RESTORE SAVED HOTKEYS +OLDF10 := SETKEY( K_F10, OLDF10 ) +OLDPGDN := SETKEY( K_PGDN, OLDPGDN ) +OLDPGUP := SETKEY( K_PGUP, OLDPGUP ) +OLDPGLEFT := SETKEY( K_LEFT, OLDPGLEFT ) +OLDPGRITE := SETKEY( K_RIGHT, OLDPGRITE ) +//**OLDF7 := SETKEY( -6, OLDF7 ) +OLDF7 := SETKEY( K_F7, OLDF7 ) +OLDF5 := SETKEY( K_F5, OLDF5 ) //** P3N - 8/18/99 + +//**IF BLDTORD //** P3N - 6/29/98 +IF BLDTORD .OR. SELECT('TORD_LINES') = 0 //** P3N -01/15/02 + WAIT_BOX('** Preparing System Files! **', ; + '** Please Wait! **') + IF SELECT('TORD_LINES') > 0 //** P3N - 1/29/00 + CLOSE TORD_LINES + ENDIF //** P3N - 1/29/00 + SEEKKEY := (CUR_MAST)->ORDER_NUM //** P3N - 6/29/98 + BLD_TORD_LINES(SEEKKEY) //** P3N - 6/29/98 + DBOPEN('TORD_LINES') +ENDIF + +// RESTORE SAVED ENVIRONMENT SETTINGS +SETCURSOR(OLDCURSOR) +IF SELECT(SAVESEL) > 0 //** 9/15/98 - HAPPY BDAY MOM + SELECT(SAVESEL) +ENDIF + +RESTSCREEN(,,,,SAVESCR) + +RETURN +********************************************************* +FUNCTION MISC_P_HOTKEY(ACTION) + +LOCAL SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN() +LOCAL OPTION := 1 +LOCAL TITLE +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') + +LOCAL CALLEDFROM := ACD_CALLED_BY(), CK_DESC, CK_COL + +STATIC D_ELEM, C_ELEM + +IF EMPTY(ACTION_CODE) + ACTION_CODE := 'REV' //REVIEW OPTION +ENDIF + +IF ACTION_CODE = 'REV' //REVIEW OPTION + OPTION := 3 +ENDIF + +IF CALLEDFROM = 'MYBROWSE' + CK_DESC := (SAVESEL)->DESC +ELSE + IF D_ELEM = NIL + D_ELEM = ASCAN(GETVARS, {|X| X[3]=='DESC'}) + ENDIF + CK_DESC := GETVARS[D_ELEM,4] +ENDIF + +//** P3N - 5/26/99 __VAL_ALL_RECS := .T. IN CGW0000.PRG NO NEED TO EXEC HERE +//** __VAL_ALL_REC := .T. //** P3N - 5/26/99 +IF ACTION = 'UOM' + TITLE := 'PRICING / UOM for ' + CK_DESC + ACD_PAR_CHILD(OPTION, TITLE, {NIL, 'MISC_PUOM', .F., 3, ACTION_CODE, , , , , , .F., "USERFILE3"}) +ELSE + IF ACTION = 'COLOR' + TITLE := 'COLORS for ' + CK_DESC + ACD_PAR_CHILD(OPTION, TITLE, {NIL, 'MISC_COLOR', .F., 3, ACTION_CODE, , , , , , .F., "USERFILE3"}) + ENDIF +ENDIF +//** __VAL_ALL_REC := .F. //** P3N - 5/26/99 + +RESTSCREEN(,,,,SAVESCR) +CLOSE USERFILE3 + +SELECT(SAVESEL) + +RETURN .T. + + +********************************************************* +FUNCTION VAL_CAT_CODE( FLD_NAME ) + +LOCAL X := GETACTIVE(), I, SEEKKEY, SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN() + +IF EMPTY(X) // NOT IN A READ! + RETURN .T. +ENDIF + +IF EMPTY(X:BUFFER) // EMPTY CAT_CODE IS OK + RETURN .T. +ENDIF + +SEEKKEY := X:BUFFER +IF CATEGORY->(DBSEEK(SEEKKEY)) + RETURN .T. +ENDIF + +GBROWSE(,"Category LOOKUP", {"CATEGORY", , .T.} ) +SELECT(SAVESEL) +IF LASTKEY() = 27 + RETURN .F. +ENDIF + +IF X:NAME = 'GETVARS' + I := X:SUBSCRIPT[1] + GETVARS[I,4] := CATEGORY->CAT_CODE +ELSE + REC_LOCK(1) + REPLACE &FLD_NAME WITH CATEGORY->CAT_CODE +ENDIF + +RESTSCREEN(,,,,SAVESCR) + +RETURN .T. +********************************************************* +FUNCTION VAL_CODE( FLD_NAME ) + +LOCAL X := GETACTIVE(), I, SEEKKEY, SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN(), STUFFVAR +LOCAL CALLEDFROM := ACD_CALLED_BY(), CK_DESC, CK_COL + +IF CALLEDFROM = 'MYBROWSE' .AND. EMPTY(X) .AND. LASTKEY() = K_F10 + RETURN .T. +ENDIF + +IF CALLEDFROM = 'MYBROWSE' + SEEKKEY := &FLD_NAME +ELSE + IF EMPTY(X) // NOT IN A READ! + RETURN .T. + ENDIF + + SEEKKEY := X:BUFFER + IF EMPTY(SEEKKEY) + RETURN .T. // END OF DEL_BLANK + ENDIF +ENDIF + +DO CASE + CASE FLD_NAME = 'UOM' + IF UOMFILE->(DBSEEK(SEEKKEY)) + RETURN .T. + ELSE + GBROWSE(,"Unit of Measure LOOKUP", {"UOMFILE", , .T.} ) + STUFFVAR := 'UOMFILE->UOM' + ENDIF + + CASE FLD_NAME = 'COLOR' + IF COLOR_LIST->(DBSEEK(SEEKKEY)) + RETURN .T. + ELSE + GBROWSE(,"Master Color List LOOKUP", {"COLOR_LIST", , .T.} ) + STUFFVAR := 'COLOR_LIST->COLOR' + ENDIF + + CASE FLD_NAME = 'PARTNUM' + IF MISC_ITEMS->(DBSEEK(SEEKKEY)) + RETURN .T. + ELSE + GBROWSE(,"Misc PARTS List LOOKUP", {"MISC_ITEMS", , .T.} ) + STUFFVAR := 'MISC_ITEMS->PARTNUM' + ENDIF + +ENDCASE + +SELECT(SAVESEL) +RESTSCREEN(,,,,SAVESCR) +IF LASTKEY() = 27 + RETURN .F. +ENDIF + +IF X:NAME = 'GETVARS' + // ASSUMES NO DISPLAY ONLY ITEMS IN GETLIST + I := X:SUBSCRIPT[1] +//** IF EMPTY(I) //** P3N - 11/12/98 + IF EMPTY(I) .OR. EMPTY(GETVARS) //** P3N - 01/06/99 + RETURN .F. //** P3N - 11/12/98 + ELSE //** P3N - 11/12/98 + GETVARS[I,4] := &STUFFVAR + ENDIF //** P3N - 11/12/98 +ELSE + REC_LOCK(1) + REPLACE &FLD_NAME WITH &STUFFVAR +ENDIF + + +RETURN .T. +********************************************************* +FUNCTION VAL_YN( FLD_NAME ) + +LOCAL X := GETACTIVE(), I, SEEKKEY, SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN() + +IF EMPTY(X) // NOT IN A READ! + RETURN .T. +ENDIF + +IF EMPTY(X:BUFFER) // EMPTY CAT_CODE IS OK + RETURN .T. +ENDIF + +IF X:BUFFER$'YN ' // BLANK = NO + RETURN .T. +ELSE + ERR_BOX('*** INVALID Response for ' + FLD_NAME ,; + '*** Y = Yes N = No ') + RETURN .F. +ENDIF + +RETURN .T. +********************************************************* +FUNCTION MISC_WHATWAY(OPTION, TITLE, CLOSEDBFS, ACTION_CODE) + +LOCAL SAVESEL := SELECT() +LOCAL MARR := {'1 Record at a Time', 'Browse Format'} +LOCAL NCHOICE +LOCAL SAVESCR := SAVESCREEN() + +CLS +SAYTITLE( TITLE, 'MITEMS') + +NCHOICE = PICKLIST(MARR,10,, 'Update FORMAT') +IF LASTKEY() = 27 + RESTSCREEN(,,,,SAVESCR) + RETURN {{}} +ENDIF + +IF CLOSEDBFS = NIL + CLOSEDBFS := .T. +ENDIF +IF EMPTY(ACTION_CODE) + IF _OC_CAPABLE + ACTION_CODE := 'ADD' + ELSE + ACTION_CODE := 'REV' + ENDIF +ENDIF + +IF NCHOICE = 1 + ADD_SING_REC(OPTION, TITLE, {'MISC_ITEMS', .T.,,,,, ACTION_CODE,,CLOSEDBFS}) +ELSEIF NCHOICE = 2 + DBOPEN('MISC_ITEMS') + DONSETORD(0) + DBOPEN('MISC_PUOM') + __VAL_ALL_REC := .F. + ACD_PAR_CHILD(OPTION, TITLE, {NIL, 'MISC_ITEMS', .F., 3, ACTION_CODE,,,,.F.,,CLOSEDBFS,'MISC_ITEMS' }) + __VAL_ALL_REC := .T. + IF !CLOSEDBFS + SELECT MISC_ITEMS + DONSETORD(1) + ENDIF +ENDIF + +IF !CLOSEDBFS + SELECT (SAVESEL) +ENDIF + + +RESTSCREEN(,,,,SAVESCR) +RETURN .T. + + +********************************************************* +FUNCTION CK_PRINT_ON(STR2CK, ALLOW_EMPTY) + +LOCAL CK_STR, I, SAVESEL := SELECT() +LOCAL M1 := '*** INDICATE the DOCUMENT to PRINT ON. ***' +LOCAL M2 := '*** VALID CHOICES ARE "FIGSENCVXB" ' +LOCAL M3 := '*** C=Control E=Expander F=Frame ' +LOCAL M4 := '*** G=Glass I=Insert/Sash N=Screen ' +LOCAL M5 := '*** S=Storm V=Invoice/Delivery X=Exclude Print' +LOCAL M6 := '*** B=BackOrder ' + +IF ALLOW_EMPTY = NIL + ALLOW_EMPTY := .F. +ENDIF + +CK_STR := ALLTRIM(&STR2CK) +IF EMPTY(CK_STR) + IF ALLOW_EMPTY + RETURN .T. + ELSE + ERR_BOX(M1, M2, M3, M4, M5, M6) //** P3N - 11/6/98 + RETURN .F. + ENDIF +ELSE + // which copy to print on + FOR I = 1 TO LEN(CK_STR) + //** - P3N*4/1/98 - ADDED "X" - EXCLUDE PRINT + //** - P3N*11/6/98 - ADDED "B" - BACKORDR PRINT + IF !SUBS(CK_STR,I,1)$'FIGSENCVXB' + ERR_BOX(M1, M2, M3, M4, M5, M6) //** P3N - 11/6/98 + RETURN .F. + ENDIF + NEXT +ENDIF +RETURN .T. + +************************************************************* +FUNCTION CK_OTN( CKVAR ) // CHECK FOR "OTN" + +LOCAL I + +FOR I := 1 TO LEN(ALLTRIM(CKVAR)) + IF !SUBS(CKVAR,I,1)$'OTNWB12' + RETURN .F. + ENDIF +NEXT +RETURN .T. + +************************************************************* +FUNCTION ACD_TAX_DETAIL() +// DEFINE DEATIL FROM TAX SCHEDULE HOT KEY + +LOCAL SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN() +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE'), OPT := 1 +IF EMPTY(ACTION_CODE) + ACTION_CODE := 'REV' //REVIEW OPTION +ENDIF + +IF ACTION_CODE = 'REV' //REVIEW OPTION + OPT := 3 +ENDIF + +ACD_PAR_CHILD(OPT, 'Tax Details',{NIL, 'TAX_DETAIL', .F., 3, ACTION_CODE,,,,,'TX210',.F.,'USERFILEI'} ) +CLOSE USERFILEI +SELECT (SAVESEL) +RESTSCREEN(,,,,SAVESCR) +RETURN .T. + +************************************************************* +FUNCTION RULE_DEF() +// DEFINE RULES FROM ACD HOT KEY + +LOCAL SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN() +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE'), OPT := 1 +IF EMPTY(ACTION_CODE) + ACTION_CODE := 'REV' //REVIEW OPTION +ENDIF + +IF ACTION_CODE = 'REV' //REVIEW OPTION + OPT := 3 +ENDIF + +ACD_PAR_CHILD(OPT, 'Rule Definitions',{'RULES', 'RULEPACK', .T., 6, ACTION_CODE,,,,,,.F.,'USERFILEI'} ) +IF SELECT('USERFILEI') > 0 + CLOSE USERFILEI +ENDIF +SELECT (SAVESEL) +RESTSCREEN(,,,,SAVESCR) +RETURN .T. + +****************************************************************** +FUNCTION NON_USER_PRICING( PASSVALUE ) +// CHECK FOR USER PRICING CODE IN THE DSBJL FIELD IN PRI_EXTRA DBROWSE + +IF PASSVALUE = NIL + PASSVALUE := PRICE_SHT +ENDIF + +IF ALLTRIM(PRICE_SHT)$'U' + CLEAR TYPEAHEAD + RETURN .F. +ELSE + RETURN .T. +ENDIF + + +****************************************************************** +FUNCTION STD_SASH_EDIT( EDITVALUE ) +// CHECK FOR VALID 99 X 99 SIZE + +LOCAL EDITVAL +LOCAL RETVAL + +RETVAL := &EDITVALUE +RETVAL := CHK_FRACTION(RETVAL, 'VALUE') + +IF DECVAL( RETVAL ) > 0 + REPLACE &EDITVALUE WITH RETVAL + RETURN .T. +ENDIF + +ERR_BOX('*** Please Specify Valid Height ***') +RETURN .F. + +********************************************************************** +FUNCTION ACD_STD_SASH() +LOCAL SAVESCR := SAVESCREEN(), SAVESEL := SELECT() +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE'), OPT := 1 + +STATIC MELEM + +IF EMPTY(ACTION_CODE) + ACTION_CODE := 'REV' //REVIEW OPTION +ENDIF + +IF ACTION_CODE = 'REV' //REVIEW OPTION + OPT := 3 +ENDIF +IF MELEM = NIL + MELEM := ASCAN(GETVARS, {|X| X[3] = 'SS_BOTSASH'}) +ENDIF + +IF GETVARS[MELEM, 4] $'Y' +ELSE + ERR_BOX('*** Indicate "Y" for STANDARD BOTTOM SASH ' , ; + '*** to Access the STANDARD SASH DEFINITION TABLE') + RETURN .F. +ENDIF + +CLS + +IF OPT = 1 + MTITLE := 'Standard Sashes for ' + PRODUCT->PROD_CODE +ELSE + MTITLE := 'Review Standard Sashes for ' + PRODUCT->PROD_CODE +ENDIF +SAYTITLE( MTITLE, 'STDSASH') + +ACD_PAR_CHILD(OPT, MTITLE, {NIL, 'STD_SASH', .F., NIL, ACTION_CODE, NIL,; + NIL, NIL, NIL, NIL, .F., 'USERFILE3'}) + +CLOSE USERFILE3 +SELECT (SAVESEL) +CLS +RESTSCREEN(,,,,SAVESCR) +RETURN .T. + +********************************************************************** +FUNCTION ACD_CUT_SPEC() +LOCAL SAVESCR := SAVESCREEN(), SAVESEL := SELECT() +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE'), OPT := 1 +IF EMPTY(ACTION_CODE) + ACTION_CODE := 'REV' //REVIEW OPTION +ENDIF + +IF ACTION_CODE = 'REV' //REVIEW OPTION + OPT := 3 +ENDIF + +CLS + +IF OPT = 1 + MTITLE := 'Cutting Specs for ' + PRODUCT->PROD_CODE + IF ACTION_CODE = 'REV' + ELSEIF DEL_CAPABLE + MTITLE := MTITLE + SPACE(05) + 'F12-Del' + ENDIF +ELSE + MTITLE := 'Review Cutting Specs for ' + PRODUCT->PROD_CODE +ENDIF +SAYTITLE( MTITLE, 'CUT_SPEC') + +ACD_PAR_CHILD(OPT, MTITLE, {NIL, 'CUT_SPEC', .F., NIL, ACTION_CODE, NIL,; + NIL, NIL, NIL, NIL, .F., 'USERFILE3'}) + +CLOSE USERFILE3 + +SELECT (SAVESEL) +CLS +RESTSCREEN(,,,,SAVESCR) +RETURN .T. +******************************************************* +//** P3N - 9/22/00 HAPPY BDAY CINDY 41 +//** DELETE ALL MATHPACKS FOR A GIVEN PRODUCT IF PRODUCT REC DELETED. +******************************************************* +FUNCTION CHK_PRODDEL() +LOCAL SVSEL := SELECT() +LOCAL RETVAL := .T., DELCNTR := 0 +LOCAL CUR_PROD := PRODUCT->PROD_CODE +IF DEL_CAPABLE //** P3N - 9/25/00 + IF _CUROPT = 2 //** DELETE PRODUCT - REMOVE + DBOPEN('MATHPACK', .T.) //** ALL MATHPACK RECS FOR PRODUCT + MATHPACK->(DBSEEK(CUR_PROD + ' ', .T.)) + DO WHILE MATHPACK->(!EOF()) .AND. MATHPACK->CAT_CODE == CUR_PROD + REC_LOCK(1,'MATHPACK') + MATHPACK->(DBDELETE()) + DELCNTR := DELCNTR + 1 + MATHPACK->(DBSKIP(+1)) + ENDDO + IF EMPTY(DELCNTR) + ELSE + SELECT('MATHPACK') + FIL_LOCK(3) + MATHPACK->(__DBPACK()) + ENDIF + CLOSE MATHPACK + ENDIF +ENDIF //** P3N - 9/25/00 +SELECT(SVSEL) +RETURN RETVAL +******************************************************* +//** P3N - 9/21/00 +//** DELETE ALL CUTTING SPECS AND MATHPACKS FOR A GIVEN PRODUCT +//** INITIATED FROM THE CUTTING SPEC SCREEN BY PRESSING - F12 +******************************************************* +FUNCTION DEL_CS() +LOCAL SVSEL := SELECT() +LOCAL CUR_PROD := PRODUCT->PROD_CODE, DELCNTR := 0 +LOCAL M1 := 'You have selected to remove ALL cutting information' +LOCAL M2 := 'for the model - ' + CUR_PROD +LOCAL M3 := 'Are you sure you want to continue?' +LOCAL RETVAL := .T., OPENMP := .F. +IF DEL_CAPABLE //** P3N - 9/25/00 + IF PROMPT_BOX(M1, M2, M3 ) + IF CUT_SPEC->(DBSEEK( CUR_PROD + ' ' )) + DO WHILE CUT_SPEC->(!EOF()) .AND. CUT_SPEC->PROD_CODE == CUR_PROD + REC_LOCK(1,'CUT_SPEC') + CUT_SPEC->PROD_CODE := ' ' + CUT_SPEC->ATT_CODE := ' ' + CUT_SPEC->(DBDELETE()) + CUT_SPEC->(DBSKIP(+1)) + ENDDO + ENDIF + MATHPACK->(DBSEEK(CUR_PROD + ' ', .T.)) + DO WHILE MATHPACK->(!EOF()) .AND. MATHPACK->CAT_CODE == CUR_PROD + REC_LOCK(1,'MATHPACK') + MATHPACK->(DBDELETE()) + MATHPACK->(DBSKIP(+1)) + ENDDO + IF EMPTY(DELCNTR) + IF SELECT('MATHPACK') > 0 + CLOSE MATHPACK + OPENMP := .T. + ENDIF + DBOPEN('MATHPACK', .T.) + MATHPACK->(__DBPACK()) + CLOSE MATHPACK + IF OPENMP + DBOPEN('MATHPACK') + ENDIF + ENDIF + ENDIF + USERFILE5->(__DBZAP()) //** CUT_SPEC USERFILE + USERFILE3->(__DBZAP()) //** MATHPACK USERFILE + KEYBOARD K_F10 //** P3N - 9/25/00 +ENDIF //** P3N - 9/25/00 +SELECT(SVSEL) +RETURN RETVAL +******************************************************* +//** P3N - 2/24/99 +//** COPY A CURRENT CUSTOMER FROM AN EXISTING CUSTOMER +//** F2 - FROM CUSTOMER PRICING SETUP (SCREEN - 11720B) +******************************************************* +FUNCTION COPY_CUSTBP( ) +LOCAL SVSEL := SELECT() +LOCAL NEWCUST := CUST_MAST->CUST_ID, ORIGCUST, SVREC +LOCAL MTITLE := 'Select CUSTOMER to Copy Setup for NEW Customer ' + ALLTRIM(NEWCUST) +LOCAL SVSCRN := SAVESCREEN() +LOCAL M1 := 'You are about to copy ALL Attributes & Options' +LOCAL M2 := 'from Customer - ' +LOCAL M3 := 'Are You Sure you want to ALL Customer setup info?' +IF EMPTY( GETAVAR ('TPATH') ) + SETAVAR('SET', 'TPATH', 'TEMP\') +ENDIF +IF CUST_BP->(DBSEEK(NEWCUST)) .OR. USERFILE2->(RECNO()) > 1 + ERR_BOX('Customer Pricing ALREADY exists') +ELSE + @ 00, 00 CLEAR TO 24, 80 + SAYTITLE( MTITLE, 'CUSTMA') + GET_THE_CUST(' ') + RESTSCREEN(,,,,SVSCRN) + ORIGCUST := CUST_MAST->CUST_ID + M2 := 'from Customer - ' + ORIGCUST + IF CUST_BP->(DBSEEK( ORIGCUST ) ) + REC_LOCK(1,'USERFILE2') + USERFILE2->(DBDELETE()) + USERFILE2->(DBUNLOCK()) + DO WHILE CUST_BP->CUST_ID == ORIGCUST .AND. CUST_BP->(!EOF()) + ADD_ONEREC('CUST_BP','USERFILE2') + REC_LOCK(1,'USERFILE2') + USERFILE2->CUST_ID := NEWCUST + USERFILE2->(DBUNLOCK()) + CUST_BP->(DBSKIP(+1)) + ENDDO + IF PROMPT_BOX(M1,M2,M3) + DBOPEN('CUST_ATTS') + IF CUST_ATTS->(DBSEEK(ORIGCUST)) + DO WHILE CUST_ATTS->CUST_ID == ORIGCUST .AND. CUST_ATTS->(!EOF()) + @ 22,10 SAY 'COPYING ATTS FROM- ' + ORIGCUST + ' PROD- '+ CUST_ATTS->PROD_CODE + SVREC := CUST_ATTS->(RECNO()) + QADD_ONEREC('CUST_ATTS','CUST_ATTS') + CUST_ATTS->(DBGOTO(CUST_ATTS->(LASTREC()))) + REC_LOCK(1,'CUST_ATTS') + CUST_ATTS->CUST_ID := NEWCUST + CUST_ATTS->(DBUNLOCK()) + CUST_ATTS->(DBGOTO(SVREC)) + CUST_ATTS->(DBSKIP(+1)) + ENDDO + ENDIF + CLOSE CUST_ATTS + DBOPEN('CUST_OPTS') + IF CUST_OPTS->(DBSEEK(ORIGCUST)) + DO WHILE CUST_OPTS->CUST_ID == ORIGCUST .AND. CUST_OPTS->(!EOF()) + @ 22,10 SAY 'COPYING ATTS FROM- ' + ORIGCUST + ' PROD- '+ CUST_OPTS->PROD_CODE + SVREC := CUST_OPTS->(RECNO()) + QADD_ONEREC('CUST_OPTS','CUST_OPTS') + CUST_OPTS->(DBGOTO(CUST_OPTS->(LASTREC()))) + REC_LOCK(1,'CUST_OPTS') + CUST_OPTS->CUST_ID := NEWCUST + CUST_OPTS->(DBUNLOCK()) + CUST_OPTS->(DBGOTO(SVREC)) + CUST_OPTS->(DBSKIP(+1)) + ENDDO + ENDIF + CLOSE CUST_OPTS + ENDIF + ENDIF + + USERFILE2->(DBGOTOP()) + DO WHILE USERFILE2->(!EOF()) + ADD_ONEREC('USERFILE2', 'CUST_BP') + USERFILE2->(DBSKIP(+1)) + ENDDO + +ENDIF + +USERFILE2->(DBGOTOP()) +CUST_MAST->(DBSEEK(NEWCUST)) +KEYBOARD CHR(13) +SELECT(SVSEL) +RETURN .T. +******************************************************* + +FUNCTION BLD_CUSTATTS( PARFILE, NEWFILE ) +LOCAL SVFILT := CUST_ATTS->(DBFILTER()) //** P3N - 2/23/99 +LOCAL SVREC := CUST_ATTS->(RECNO()) //** P3N - 2/23/99 +LOCAL NEWCUST := CUST_MAST->(RECNO()) //** P3N - 2/23/99 +LOCAL SAVESEL := SELECT() +LOCAL MAC, FROMFILE, SVCUST +SETAVAR('SET','CPYCUST','') //** P3N - 12/27/01 +PRIVATE SEEKKEY +SEEKKEY := (PARFILE)->PROD_CODE +SELECT PROD_ATTS +IF LASTKEY() = K_F2 //** P3N - 2/23/99 + GET_THE_CUST(' ') //** P3N - 2/23/99 + SVCUST := CUST_MAST->CUST_ID //** P3N - 2/23/99 + SETAVAR('SET','CPYCUST',SVCUST) //** P3N - 12/27/01 + SEEKKEY := SVCUST+(PARFILE)->PROD_CODE //** P3N - 2/23/99 + SELECT CUST_ATTS //** P3N - 2/23/99 + SET FILTER TO //** P3N - 2/23/99 + SEEK SEEKKEY //** P3N - 2/25/99 + IF FOUND() //** P3N - 2/25/99 + ELSE //** P3N - 2/25/99 + SEEKKEY := (PARFILE)->PROD_CODE //** P3N - 2/25/99 + SELECT PROD_ATTS //** P3N - 2/25/99 + SVCUST := '' //** P3N - 2/25/99 + ENDIF //** P3N - 2/25/99 +ENDIF //** P3N - 2/23/99 + +SEEK SEEKKEY +IF FOUND() + IF EMPTY(SVCUST) //** P3N - 2/23/99 + MAC := 'PROD_CODE == SEEKKEY .AND. !EOF() ' + FROMFILE := 'PROD_ATTS' + ELSE // F2-CUST_ATTS //** P3N - 2/23/99 + MAC := 'CUST_ID+PROD_CODE == SEEKKEY .AND. !EOF() ' + FROMFILE := 'CUST_ATTS' //** P3N - 2/23/99 + ENDIF //** P3N - 2/23/99 +ELSE + SEEKKEY := GET_CATCODE( SEEKKEY ) + SELECT CAT_ATTS + SEEK SEEKKEY + MAC := 'CAT_CODE == SEEKKEY .AND. !EOF() ' + FROMFILE := 'CAT_ATTS' +ENDIF + +DO WHILE &MAC + ADD_ONEREC( FROMFILE, NEWFILE ) + SELECT (NEWFILE) + REC_LOCK(1) + REPLACE UPDATED WITH 'M' + REPLACE CUST_ID WITH (PARFILE)->CUST_ID + REPLACE PROD_CODE WITH (PARFILE)->PROD_CODE + SELECT (FROMFILE) + SKIP 1 +ENDDO + +SELECT CUST_ATTS //** P3N - 2/23/99 +SET FILTER TO (SVFILT) //** P3N - 2/23/99 +CUST_ATTS->(DBGOTO(SVREC)) //** P3N - 2/23/99 +CUST_MAST->(DBGOTO(NEWCUST)) //** P3N - 2/23/99 + +SELECT (SAVESEL) +KEYBOARD CHR(13) //** P3N - 2/26/99 +RETURN .T. + + + +********************************************************************** +FUNCTION CUSTPRICELEVELS() +LOCAL SAVESCR := SAVESCREEN() +LOCAL PRE_KEY_VALU := {USERFILE2->CUST_ID} +LOCAL MCUSTID := USERFILE2->CUST_ID +LOCAL MMODEL := ALLTRIM(USERFILE2->PROD_CODE) +LOCAL MGET_KEY := USERFILE2->PROD_CODE, MTITLE +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') +LOCAL SEEKKEY := USERFILE2->CUST_ID + USERFILE2->PROD_CODE +LOCAL SVCAFILTER := '', SVCAFLBLK //** P3N - 5/26/99 + +DBOPEN('PROD_ATTS') +DBOPEN('CAT_ATTS') +DBOPEN('CUST_ATTS') +SVCAFILTER := CUST_ATTS->(DBFILTER()) //** P3N - 5/26/99 +SVCAFLBLK := '{||'+SVCAFILTER+'}' //** P3N - 5/26/99 + +CLS +MTITLE := 'CUSTOMER ' + CUST_MAST->CUST_ID + ' ATTRIBUTES FOR ' + ALLTRIM(USERFILE2->PROD_CODE) + +IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + CUST_ATTS->(DBSEEK(SEEKKEY)) + IF CUST_ATTS->(FOUND()) + ELSE + ERR_BOX('Pricing Attributes NOT FOUND for CUSTOMER '+MCUSTID+' / MODEL '+MMODEL, ; + '*** If you press F2 ATTRIBUTES for CUSTOMER '+MCUSTID + ' / MODEL '+ MMODEL, ; + '*** WILL be copied from the CUSTOMER of your choice - OTHERWISE ' , ; + '*** ATTRIBUTES WILL be copied from MODEL - ' + MMODEL, ; + '*** You MUST save (F10) these CUSTOMER attributes to ensure ' , ; + '*** accurate Customer Pricing! ') + ENDIF + ACD_PAR_CHILD(1, MTITLE, {NIL, 'CUST_ATTS', .F., NIL, 'ADD', NIL,; + 'CUST_ID == USERFILE2->CUST_ID', ; + NIL, NIL, NIL, .F., 'USERFILE3'}) +ELSE + ACD_PAR_CHILD(3,'Review '+MTITLE, {NIL, 'CUST_ATTS', .F., NIL, 'REV', NIL,; + 'CUST_ID == USERFILE2->CUST_ID', ; + NIL, NIL, NIL, .F., 'USERFILE3'}) +ENDIF +IF SELECT('USERFILE3') > 0 + CLOSE USERFILE3 +ENDIF +SELECT USERFILE2 +CLS +RESTSCREEN(,,,,SAVESCR) +IF EMPTY(SVCAFILTER) + CUST_ATTS->(DBSETFILTER()) +ELSE + CUST_ATTS->(DBSETFILTER(&SVCAFLBLK, SVCAFILTER )) +ENDIF + + +RETURN .T. + +********************************************************************** +* SPECIAL CUSTOMER PRICING SCREENS SET CUSTOMER ID +********************************************************************** +FUNCTION UPDTE_CUSTID(CK_DEL) +REPLACE CUST_ID WITH CUST_MAST->CUST_ID +IF EMPTY(CK_DEL) //** P3N - 3/12/99 +ELSEIF CK_DEL = 'CUSTPRICE' //** P3N - 3/12/99 + CUST_PRICEDEL() //** P3N - 3/12/99 +ENDIF //** P3N - 3/12/99 +RETURN .T. + +********************************************************************** +FUNCTION UPDTE_PRODCODE() +REPLACE PROD_CODE WITH USERFILE2->PROD_CODE +RETURN .T. + +********************************************************************** +* SPECIAL CUSTOMER PRICING SCREENS SET CUSTOMER ID,CAT_CODE,PROD_CODE +********************************************************************** +FUNCTION UPDTE_LVLPRI() +REPLACE CUST_ID WITH USERFILE2->CUST_ID +REPLACE PROD_CODE WITH USERFILE2->PROD_CODE +RETURN .T. + +********************************************************************** +* SPECIAL CUSTOMER PRICING MENU +********************************************************************** +FUNCTION SPEC_PRICING( OPTION, TITLE, CLOSEDBFS ) +LOCAL NCHOICE, SAVESEL := SELECT() +LOCAL OPTARR:= {}, SAVESCR, CUSTKEY + +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') + +STATIC CUSTPARMS +IF CUSTPARMS = NIL + CUSTPARMS := GET_FILEPARMS( 'CUST_MAST' ) +ENDIF + +IF CLOSEDBFS = NIL // HOTKEY CALL + CLOSEDBFS := .F. +ENDIF + +CLS +IF OPTION <> NIL // CALLED FROM MENU - OPEN DATABASES + DBOPEN( 'CUST_MAST' ) + SAYTITLE('Customer Pricing Options ' , 'CPRICE') + CUST_KEY = GET_KEY(CUSTPARMS) + IF LASTKEY() = 27 .OR. EMPTY(CUST_KEY) + CLOSE DATABASES + RETURN + ENDIF + DBOPEN( 'TAX_SCHED' ) + DBOPEN( 'TAX_DETAIL' ) +ELSE + SAYTITLE('Special Pricing Options - #' + CUST_MAST->CUST_ID, '1172') +ENDIF + + +AADD(OPTARR, 'CUSTOMER DISCOUNTS (DSLJBI)') +AADD(OPTARR, 'CUSTOMER Pricing Setup') + +SAVESCR := SAVESCREEN() + +DO WHILE .T. + RESTSCREEN(,,,,SAVESCR) + NCHOICE = LISTBOX(OPTARR,NCHOICE,'Select Choice', 8) + IF LASTKEY() = 27 + SELECT (SAVESEL) + IF CLOSEDBFS + CLOSE DATABASES + ENDIF + RETURN .F. + ENDIF + + TITLE := OPTARR[NCHOICE] + ' - #' + CUST_MAST->CUST_ID + IF NCHOICE=1 + IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + ACD_PAR_CHILD(1, TITLE, {NIL, 'CUST_PRICE', .F., 3, 'ADD', ,; + , , , ,.F. }) + ELSE + ACD_PAR_CHILD(3,'Review '+TITLE, {NIL, 'CUST_PRICE', .F., 3, 'REV', ,; + , , , ,.F. }) + ENDIF + ELSE + IF NCHOICE=2 + IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + ACD_PAR_CHILD(1, TITLE, {NIL, 'CUST_BP', .F., 3, 'ADD', ,; + , , , ,.F. }) + ELSE + ACD_PAR_CHILD(3,'Review '+TITLE, {NIL, 'CUST_BP', .F., 3, 'REV', ,; + , , , ,.F. }) + ENDIF + ENDIF + ENDIF +ENDDO +RETURN + +***************************************************************** +* P3N - 3/12/99 CUST PRICING - CONFIRM DELETE OPERATION * +***************************************************************** +FUNCTION CUST_PRICEDEL() +LOCAL SVSEL := SELECT() +LOCAL X := GETACTIVE(), ORIGPROD +LOCAL M1 := ' ', M2 := ' ' +LOCAL M3 := 'Are you sure you want to delete this CUSTOMER SETUP information ?' +LOCAL RETVAL +IF EMPTY(X) +ELSE + ORIGPROD := X:ORIGINAL() + M1 := 'About to DELETE CUSTOMER '+ CUST_MAST->CUST_ID +' / '+ TRIM(ORIGPROD) + ' information ! ' + IF EMPTY(PROD_CODE) + IF EMPTY(ORIGPROD) + ELSEIF PROMPT_BOX(M1, M2, M3) + DEL_CUSTSETUP(CUST_MAST->CUST_ID, ORIGPROD) + ELSE + REPLACE PROD_CODE WITH ORIGPROD + ENDIF + ENDIF +ENDIF +SELECT(SVSEL) +RETURN .T. + +***************************************************************** +* P3N - 3/12/99 CUST PRICING - REMOVE CHILD FILES INFO ON DEL* +***************************************************************** +FUNCTION DEL_CUSTSETUP(CUST, PROD) +LOCAL SEEKKEY := CUST+PROD, OPEN_ATTS := .F., OPEN_OPTS := .F. +LOCAL KEYFLDS := 'CUST_ID+PROD_CODE', DELOPTS := {}, DELATTS := {} +LOCAL DEL_ARRAY := {KEYFLDS,{ { 'CUST_ATTS', 1 }, {'CUST_OPTS', 1} } } +LOCAL SVSCRN := SAVESCREEN() +WAIT_BOX('Removing Customer setup information', ; + '*** Please Wait! ***') +IF SELECT('CUST_ATTS') > 0 + CLOSE CUST_ATTS + OPEN_ATTS := .T. +ENDIF +IF SELECT('CUST_OPTS') > 0 + CLOSE CUST_OPTS + OPEN_OPTS := .T. +ENDIF +DEL_RELATED_DBF(DEL_ARRAY, SEEKKEY) + +SET DELETED OFF + +DBOPEN('CUST_ATTS') +CUST_ATTS->(DBSEEK(CUST+PROD)) +DO WHILE CUST_ATTS->(!EOF()) .AND. ; + CUST_ATTS->CUST_ID + CUST_ATTS->PROD_CODE == CUST + PROD + IF CUST_ATTS->(DELETED()) + AADD(DELATTS, CUST_ATTS->(RECNO()) ) + ENDIF + CUST_ATTS->(DBSKIP(+1)) +ENDDO + +DBOPEN('CUST_OPTS') +CUST_OPTS->(DBSEEK(CUST+PROD)) +DO WHILE CUST_OPTS->(!EOF()) .AND. ; + CUST_OPTS->CUST_ID + CUST_OPTS->PROD_CODE == CUST + PROD + IF CUST_OPTS->(DELETED()) + AADD(DELOPTS, CUST_OPTS->(RECNO()) ) + ENDIF + CUST_OPTS->(DBSKIP(+1)) +ENDDO + +DELCUSTAO(DELATTS, 'CUST_ATTS') +DELCUSTAO(DELOPTS, 'CUST_OPTS') + +CLOSE CUST_OPTS +CLOSE CUST_ATTS + +SET DELETED ON + +IF OPEN_ATTS + DBOPEN('CUST_ATTS') +ENDIF +IF OPEN_OPTS + DBOPEN('CUST_OPTS') +ENDIF +RESTSCREEN(,,,, SVSCRN ) +RETURN .T. +***************************************************************** +* P3N - 3/12/99 CUST PRICING - REMOVE CHILD FILES INFO ON DEL* +***************************************************************** +FUNCTION DELCUSTAO(DELARR, FILENAME) +LOCAL I +FOR I := 1 TO LEN(DELARR) + (FILENAME)->(DBGOTO(DELARR[I])) + REC_LOCK( 3, FILENAME ) + REPLACE (FILENAME)->CUST_ID WITH ' ' + REPLACE (FILENAME)->PROD_CODE WITH ' ' + (FILENAME)->(DBUNLOCK()) +NEXT +RETURN +***************************************************************** +* CGW0GL / ACD_CARGO - CALC AND DISPLAY THE GL ALLOC BALANCE. * +***************************************************************** +FUNCTION GLBAL() +LOCAL RETVAL +RETVAL := AMOUNT + ADJ_AMT +RETURN STR(RETVAL, 9,2) + +******************************************************* +FUNCTION CUST_HOTKEYS(WHICHONE, WHICHSCREEN) + +LOCAL RETVAL := {}, NOTEVAR, NEEDVAR, SEEKKEY +LOCAL MTITLE := ' + CUST_ID' +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') +NOTEVAR := 'NOTES("CUST_NOTES", NOTEREV_EDIT(), "Notes - CUST #" + CUST_ID , , .T.)' +AADD(RETVAL, { 'F4-Customer Notes ', -3, NOTEVAR } ) + +RETURN RETVAL + + +******************************************************* + +//// 1/20/20 - 10-BYTE FUNCTION NAMES. +FUNCTION ORD_HOTKEY(WHICHONE, WHICHSCREEN) +// +RETURN ORD_HOTKEYS(WHICHONE, WHICHSCREEN) + +******************************************************* + +FUNCTION ORD_HOTKEYS(WHICHONE, WHICHSCREEN) + +LOCAL RETVAL := {}, NOTEVAR, NEEDVAR, SEEKKEY +LOCAL MTITLE := ' + ORDER_NUM ' +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') + +IF RIGHT( WHICHSCREEN, 1 ) = '0' + NOTEVAR := 'NOTES("NOTES", NOTEREV_EDIT(), "Notes - ORDER #" + ORDER_NUM , , .F.)' + AADD(RETVAL, { 'F4-Order Notes ', -3, NOTEVAR } ) + AADD(RETVAL, { 'F6-Customer Update', -5, 'UPDT_CUST()' } ) + IF WHICHONE == 'ORDERS' //** P3N - 1/27/00 + AADD(RETVAL, { 'F8-Shipping Info', K_F8, 'SHIPINFO()' }) + ENDIF //** P3N - 1/27/00 + AADD(RETVAL, { 'F9-Customer Browse', K_F9, 'UPDT_CUST("BROWSE")' } ) //** P3N - 3/20/00 +ELSEIF WHICHSCREEN = '2115' + AADD(RETVAL, { 'F8-Misc Items Entry', -7, 'MISC_ITEM()' } ) +ENDIF + +RETURN RETVAL + + +******************************************************* +FUNCTION NOTEREV_EDIT() +IF _OC_CAPABLE .AND. GETAVAR('ACTION_CODE') = 'ADD' + RETURN 'EDIT' +ELSE + RETURN 'REVIEW' +ENDIF + +******************************************************* + +FUNCTION GET_OR_REVU() +IF _OC_CAPABLE .AND. GETAVAR('ACTION_CODE') = 'ADD' + RETURN 'GET' +ELSE + RETURN 'REV' +ENDIF +********************************************************************* +//** P3N 1/26/00 BROWSE THE SHIPPING INFORMATION FROM ORDER ENTRY +********************************************************************* +FUNCTION SHIPINFO() +LOCAL SVSEL := SELECT() +LOCAL SEEKKEY := (CUR_MAST)->ORDER_NUM +LOCAL WHATFUNC := 'SHIP' +IF _CUROPT == 2 //** ORDER CHANGE / UPDATE ONLY + CNTRL_FUNC(,,WHATFUNC, SEEKKEY) +ENDIF +SELECT(SVSEL) +RETURN .T. + +******************************************************* + +FUNCTION OL_HOTKEYS(WHICHONE, WHICHSCREEN) + +LOCAL RETVAL := {} + +AADD(RETVAL, {'F3-DELETE Lines ',-2,'DEL_LINEDETAIL(.F.)'} ) +AADD(RETVAL, {'F4-Special Notes ',-3,'LINENOTE()'} ) +AADD(RETVAL, {'F6-UPDATE Options ',-5,'GET_LINEOPTS(USERFILE2->PROD_CODE,GET_OR_REVU(),,.F.)'} ) +AADD(RETVAL, {'F7-Calculate Price',-6,'GET_LINEOPTS(USERFILE2->PROD_CODE,"PRICE")'} ) +AADD(RETVAL, {'F8-Misc Items Entry', -7, 'MISC_ITEM()' } ) +AADD(RETVAL, {'',-4,'NOSORT()'} ) + +RETURN RETVAL + + +******************************************************* +* SOLICITATION NOTES EDIT/REV ( ORD_MAST->SOLNOTES ) +* //** P3N -12/14/98 +******************************************************* +FUNCTION EDIT_INVNOTES() +LOCAL SV_SEL := SELECT(), CLOSECTRL := .F. +LOCAL MARR := { '1. DEFAULT Invoice Message (ALL Orders)', '2. SPECIAL Invoice Message (This Order Only)'} +LOCAL ACTION := 'REVIEW' +LOCAL NCHOICE := PICKLIST(MARR,10,, 'Select a Note to Edit/Modify') +IF FUN6 == 'X' //** INVOICE PRINT FUNCTIONALITY + ACTION := 'EDIT' +ENDIF +IF LASTKEY() == 27 +ELSEIF NCHOICE == 1 + IF SELECT('CONTROL') > 0 + CLOSECTRL := .F. + ELSE + CLOSECTRL := .T. + DBOPEN('CONTROL') + ENDIF + SELECT('CONTROL') + IF FIELDPOS('INVNOTES') > 0 + //** NOTES("INVNOTES", NOTEREV_EDIT(), "Default Invoice Note - ALL Orders", , .F.) + NOTES("INVNOTES", ACTION, "Default Invoice Note - ALL Orders", , .F.) + ELSE + ERR_BOX(' ** Control File does not contian the field - INVNOTES.', ; + ' ** If you want to use this feature you must modify ', ; + ' ** the CONTROL FILE (CGW0KA)!' ) + ENDIF +ELSEIF NCHOICE == 2 + SELECT (CUR_MAST) + IF FIELDPOS('INVNOTES') > 0 + //** NOTES("INVNOTES", NOTEREV_EDIT(), "Invoice Order Note - Order #"+ORDER_NUM, ,.F.) + NOTES("INVNOTES", ACTION , "Invoice Order Note - Order #"+ORDER_NUM, ,.F.) + ELSE + ERR_BOX(' ** Order File does not contian the field - INVNOTES.', ; + ' ** If you want to use this feature you must modify ', ; + ' ** the Order Master FILE (CGW0OM)!' ) + ENDIF +ELSE + ERR_BOX(' ** Invalid Option ! **') +ENDIF +IF FIELDPOS('INVNOTES') > 0 + IF LEN(ALLTRIM(INVNOTES)) > 240 + ERR_BOX(' ** This Invoice Note will NOT fit at the bottom of the Order.', ; + ' ** This note is limited to three lines of 80 positions.', ; + ' ** A total size of 240 characters. ' ) + ENDIF +ENDIF +IF CLOSECTRL + CLOSE CONTROL +ENDIF +SELECT(SV_SEL) +RETURN + +******************************************************* +* BACKORDER NOTES EDIT/REV ( ORD_MAST ) +* //** P3N - 9/2/98 +******************************************************* +FUNCTION BONOTES() +LOCAL SV_SEL := SELECT() +LOCAL MARR := { '1. Back Order Notes', '2. Common Notes'} +LOCAL NARR := { '1. PRIMARY Back Order', '2. SCREEN Back Order'} +LOCAL NCHOICE := PICKLIST(MARR,10,, 'Select a Note Option') +IF LASTKEY() == 27 +ELSEIF NCHOICE == 1 + SELECT (CUR_MAST) + NCHOICE := PICKLIST(NARR,10,, 'Select a Note Type') + IF NCHOICE == 1 + NOTES("BO_NOTES", NOTEREV_EDIT(), "Notes - BACKORDER #"+ORDER_NUM, ,.F.) + ELSEIF NCHOICE == 2 + NOTES("BONOTESCRN", NOTEREV_EDIT(), "Notes - SCREEN BACKORDER #"+ORDER_NUM, ,.F.) + ENDIF + SELECT(SV_SEL) +ELSEIF NCHOICE == 2 + COMMON_NOTES() +ENDIF +RETURN + +******************************************************* +* ORDER SHIPPING HOTKEYS ( TORD_LINES ) +******************************************************* +FUNCTION TOL_HOTKEYS(WHICHONE, WHICHSCREEN) +LOCAL RETVAL := {} +IF WHICHONE == 'SHIP' +**AADD(RETVAL, {'F4-Review Order ', K_F4,'CHG_REV_HOTKEY("REV")'}) + AADD(RETVAL, {'F4-Review Order ', K_F4,'CHG_REV_HOTKEY(, .T.)'}) + AADD(RETVAL, {'F6-Ship Remaining ', K_F6,"SHIP_TOTQTY(,,'ORD_MAST',.F.)" }) + AADD(RETVAL, {'F7-Ship Selected ', K_F7,'SHP_SEL()' } ) + AADD(RETVAL, {'F8-Review Shipping', K_F8,'SHP_REV()' } ) + AADD(RETVAL, {'F9-Print Documents', K_F9, 'CTL_ORDPR()' } ) + AADD(RETVAL, {'' , K_F3,'UPD_SHIPADDR()'}) +**AADD(RETVAL, {'' , K_F2,'COMMON_NOTES()'}) + AADD(RETVAL, {'' , K_F2,'BONOTES()'}) +**AADD(RETVAL, {'' , K_F1,'BONOTES()' }) + AADD(RETVAL, {'' , K_F1,'REMOVE_ORD_SHIP()' }) +ELSEIF WHICHONE == 'OE' //** SHIPPING INFO BROWSE FROM ORDER ENTRY + AADD(RETVAL, {'F3-Shipping Addr.', K_F3,'UPD_SHIPADDR(.T.)'}) + AADD(RETVAL, {'F8-Review Shipping', K_F8,'SHP_REV()' } ) +ELSE + AADD(RETVAL, {'F4-Review Order ', K_F4,'CHG_REV_HOTKEY("REV")'}) + AADD(RETVAL, {'F6-Produce ALL ', K_F6,"PROD_ALL()" }) //** P3N 01/15/02 + AADD(RETVAL, {'F7-Produce Selected', K_F7,'PROD_SEL()' } ) + AADD(RETVAL, {'F8-Review Production', K_F8,'PROD_REV()' } ) + AADD(RETVAL, {'F9-Print Documents', K_F9, 'CTL_ORDPR()' } ) +ENDIF +RETURN RETVAL + +******************************************************* +* // P3N - 5/21/98 +* SHIP SELECTED LINE ITEMS OPTION (F7 - ORDER CONTROL SCREEN-3220) +******************************************************* +FUNCTION PROD_SEL() +LOCAL SVSEL := SELECT() +LOCAL SVSCRN := SAVESCREEN() +ACD_PAR_CHILD( 1 ,'Order Production - Line Item(s) / Order #: '+ ALLTRIM(TORD_LINES->ORDER_NUM), + ; + { , 'ORD_PROD', .F., 3, 'ADD',,,,, ,.F.,'USERFILE2'}) +RESTSCREEN(,,,,SVSCRN) +SELECT(SVSEL) +RETURN +******************************************************* +* // P3N -01/15/02 +* PRODUCE ALL LINE ITEMS OPTION (F6 - PRODUCTION CONTROL SCREEN-????) +******************************************************* +FUNCTION PROD_ALL() +LOCAL SVREC := TORD_LINES->(RECNO()), SEEKKEY, DOAUDIT := .T., RETVAL := .T. +LOCAL M1 := 'Production Transactions already exist for Order - ' + TORD_LINES->ORDER_NUM +LOCAL M2 := 'If you continue you will change existing production info!' +LOCAL M3 := SPACE(20)+ 'DO YOU WANT TO CONTINUE?', SEEKOL := '' +TORD_LINES->(DBGOTOP()) +DO WHILE TORD_LINES->(!EOF()) + SEEKOL := TORD_LINES->ORDER_NUM + SEEKOL := SEEKOL + STR(TORD_LINES->LINE_NUM,3) + SEEKKEY := TORD_LINES->ORDER_NUM + SEEKKEY := SEEKKEY + STR(TORD_LINES->LINE_NUM,3) + SEEKKEY := SEEKKEY + TORD_LINES->PROD_CODE + SEEKKEY := SEEKKEY + TORD_LINES->PAR_PROD + SEEKKEY := SEEKKEY + STR(TORD_LINES->(RECNO()),3) + IF ORD_LINES->(DBSEEK(SEEKOL)) .AND. ORD_LINES->PROD_CODE == TORD_LINES->PROD_CODE + IF ORD_PROD->(DBSEEK(SEEKKEY)) + //** REC_LOCK(3, 'ORD_SHIP') + IF PROMPT_BOX(M1, M2, M3) + ELSE + EXIT + ENDIF + ORD_PROD->(REC_LOCK(3)) + ELSE + ADD_ONEREC('TORD_LINES', 'ORD_PROD' , DOAUDIT) + ORD_PROD->(REC_LOCK(3)) + //**REC_LOCK(3, 'ORD_PROD') + ORD_PROD->TRAN_NUM := STR(TORD_LINES->(RECNO()),3) + ENDIF + ORD_PROD->COMPL_DATE := M->CURDATE + ORD_PROD->COMPL_QTY := TORD_LINES->QUANTITY + ORD_PROD->(DBUNLOCK()) + ENDIF + TORD_LINES->(DBSKIP(+1)) +ENDDO +TORD_LINES->(DBGOTO(SVREC)) +ERR_BOX('The Production has been Updated with Order Quantities',; + ' ', 'You MUST now enter the Time for each Item Produced') +RETURN RETVAL +******************************************************* +* // P3N - 5/18/98 +* SHIP SELECTED LINE ITEMS OPTION (F7 - ORDER CONTROL SCREEN-3220) +******************************************************* +FUNCTION SHP_SEL() +LOCAL TITLE := 'ORDER SHIPPING' //** P3N - 12/9/98 +LOCAL ACTION := GETAVAR('ACTION') //** P3N - 12/9/98 +LOCAL SVSEL := SELECT() +LOCAL SVSCRN := SAVESCREEN(), INVSCRN +IF EMPTY((CUR_MAST)->SHIP_DATE) //** P3N - 12/9/98 + INVSCRN := SAVESCREEN() //** P3N - 12/9/98 + @ 00, 00 CLEAR TO 24,80 //** P3N - 12/9/98 + SAYTITLE(TITLE, 'SHIPDT') //** P3N - 12/9/98 + GET_INV_SHPDT() //** P3N - 12/9/98 + RESTSCREEN(,,,,INVSCRN) //** P3N - 12/9/98 +ENDIF //** P3N - 12/9/98 +IF EMPTY((CUR_MAST)->ORDER_NEW) //** P3N - 12/9/98 + ACTION := 'ADD' //** P3N - 12/9/98 +ELSE //** P3N - 12/9/98 + ACTION := 'REV' //** P3N - 12/9/98 +ENDIF //** P3N - 12/9/98 +ACD_PAR_CHILD( 1 ,'Order Shipping - Line Item(s) / Order #: '+ ALLTRIM(TORD_LINES->ORDER_NUM), + ; + { , 'ORD_SHIP', .F., 3, ACTION,,,,, ,.F.,'USERFILE2'}) +//**{ , 'ORD_SHIP', .F., 3, 'ADD' ,,,,, ,.F.,'USERFILE2'}) +RESTSCREEN(,,,,SVSCRN) +SELECT(SVSEL) +RETURN +******************************************************* +* // P3N - 5/18/98 +* REVIEW SHIPPED ITEMS OPTION (F8 - ORDER CONTROL SCREEN-3220) +******************************************************* +FUNCTION SHP_REV() +LOCAL SVSEL := SELECT() +LOCAL SVSCRN := SAVESCREEN() +ACD_PAR_CHILD( 1 ,'Review Shipping - Order #: ' +ALLTRIM(TORD_LINES->ORDER_NUM), + ; + { , 'ORD_SHIP', .F., 3, 'REV',,,,,'21360' ,.F.,'USERFILE2'}) +RESTSCREEN(,,,,SVSCRN) +SELECT(SVSEL) +RETURN +******************************************************* +* // P3N - 5/22/98 +* REVIEW PRODUCED ITEMS OPTION (F8 - ORDER CONTROL SCREEN-3220) +******************************************************* +FUNCTION PROD_REV() +LOCAL SVSEL := SELECT() +LOCAL SVSCRN := SAVESCREEN() +ACD_PAR_CHILD( 1 ,'Review Production - Order #: ' +ALLTRIM(TORD_LINES->ORDER_NUM), + ; + { , 'ORD_PROD', .F., 3, 'REV',,,,,'22360' ,.F.,'USERFILE2'}) +RESTSCREEN(,,,,SVSCRN) +SELECT(SVSEL) +RETURN +******************************************************* +* // P3N - 5/18/98 +* SHIPPING PRINT OPTION (F9 - ORDER CONTROL SCREEN-3220) +******************************************************* +FUNCTION CTL_ORDPR() +LOCAL SVSEL := SELECT() +LOCAL SVSCRN := SAVESCREEN() +LOCAL SVREC := (SVSEL)->(RECNO()) +LOCAL ORDNUM := (SVSEL)->ORDER_NUM //** P3N - 2/28/00 +UPD_BO_TOTAL('ORD_LINES') //** P3N - 11/23/98 +UPD_BO_TOTAL('ADDL_LINES') //** P3N - 11/23/98 +ALL_ORDPR(,,'OE') +RESTSCREEN(,,,,SVSCRN) +IF (SVSEL)->(USED()) //** P3N - 2/28/00 + SELECT(SVSEL) + DBGOTO(SVREC) +ELSE //** P3N - 2/28/00 + BLD_TORD_LINES(ORDNUM) //** P3N - 2/28/00 + SELECT(SVSEL) //** P3N - 2/28/00 + DBGOTO(SVREC) //** P3N - 2/28/00 +//** TORD_LINES->(DBGOTOP()) //** P3N - 2/28/00 +ENDIF //** P3N - 2/28/00 +RETURN +******************************************************* +FUNCTION UPDT_CUST(PACTION) +LOCAL SAVESEL := SELECT() +LOCAL MELEM, CKVAR, MTITLE := 'Browse Customers' +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') + +MELEM := ASCAN(GETVARS, {|X| X[3] = 'CUST_ID'}) + +IF MELEM <> 0 + **KEYBOARD (SAVESEL)->CUST_ID +**KEYBOARD GETVARS[MELEM, 4] + CKVAR := GETVARS[MELEM, 4] +ELSE +**KEYBOARD (CUR_MAST)->CUST_ID + CKVAR := (CUR_MAST)->CUST_ID +ENDIF + +IF EMPTY(CKVAR) + ERR_BOX('*** Specify Customer Number before UPDATE') +ELSEIF EMPTY(PACTION) //** P3N - 3/20/00 + KEYBOARD CKVAR + IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + ADD_SING_REC(1,'Update CUSTOMER' ,{'CUST_MAST', .F.,,,,,'ADD',,.F.,.F. }) + ELSE + ADD_SING_REC(3,'Review CUSTOMER' ,{'CUST_MAST', .F.,,,,,'REV',,.F.,.F. }) + ENDIF +ELSEIF PACTION == 'BROWSE' //** P3N - 3/20/00 + GBROWSE(,MTITLE,{'CUST_MAST', {'CUST_PRICE'}, .F., }) //** P3N - 3/20/00 + F5ORD := 1 //** P3N - 3/20/00 + (CUR_MAST)->(DONSETORD(1)) //** P3N - 3/20/00 +ENDIF + +IF SELECT('USERFILE2') > 0 //P3N 2-5-98 CLOSE USERFILE2 IF LEFT OPEN + SELECT USERFILE2 + USE +ENDIF + +SELECT (SAVESEL) +RETURN .T. + + + +********************************************************************** +* // P3N - 8/10/98 +* SELECT COMMON NOTES (F2 - ORDER CONTROL SCREEN-3220) +********************************************************************** +FUNCTION COMMON_NOTES() +LOCAL NCHOICE := 0 +LOCAL MARR := { '1. BILLED SCREENS', ; + '2. PAID SCREENS', ; + '3. BILLED ITEMS ', ; + '4. PAID ITEMS '} +LOCAL MARR2 := { '1. OUR DELIVERY WHEN AVAILABLE' , ; + '2. OUR DELIVERY WHEN NOTIFIED ' , ; + '3. OUR INSTALLATION WHEN NOTIFIED', ; + '4. CUSTOMER PICK UP WHEN AVAILABLE'} + +LOCAL MNOTES := { 'SCREENS ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE ABOVE BILLING; ' + ; + 'OUR DELIVERY WHEN AVAILABLE.' , ; +; //** ELM 2 + 'SCREENS ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE ABOVE BILLING; ' + ; + 'OUR DELIVERY WHEN NOTIFIED.' , ; +; //** ELM 3 + 'SCREENS ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE ABOVE BILLING; ' + ; + 'OUR INSTALLATION WHEN NOTIFIED. ' , ; +; //** ELM 4 + 'SCREENS ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE ABOVE BILLING; ' + ; + 'CUSTOMER PICK UP WHEN AVAILABLE. ' , ; +; //** ELM 5 + 'SCREENS ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE PAID AMOUNT; ' + ; + 'OUR DELIVERY WHEN AVAILABLE.' , ; +; //** ELM 6 + 'SCREENS ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE PAID AMOUNT; ' + ; + 'OUR DELIVERY WHEN NOTIFIED.' , ; +; //** ELM 7 + 'SCREENS ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE PAID AMOUNT; ' + ; + 'OUR INSTALLATION WHEN NOTIFIED.' , ; +; //** ELM 8 + 'SCREENS ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE PAID AMOUNT; ' + ; + 'CUSTOMER PICK UP WHEN AVAILABLE.' , ; +; //** ELM 9 + 'ITEMS INDICATED ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE ABOVE BILLING; ' + ; + 'OUR DELIVERY WHEN AVAILABLE.' , ; +; //** ELM 10 + 'ITEMS INDICATED ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE ABOVE BILLING; ' + ; + 'OUR DELIVERY WHEN NOTIFIED.' , ; +; //** ELM 11 + 'ITEMS INDICATED ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE ABOVE BILLING; ' + ; + 'OUR INSTALLATION WHEN NOTIFIED.' , ; +; //** ELM 12 + 'ITEMS INDICATED ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE ABOVE BILLING; ' + ; + 'CUSTOMER PICK UP WHEN AVAILABLE.', ; +; //** ELM 13 + 'ITEMS INDICATED ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE PAID AMOUNT; ' + ; + 'OUR DELIVERY WHEN AVAILABLE.' , ; +; //** ELM 14 + 'ITEMS INDICATED ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE PAID AMOUNT; ' + ; + 'OUR DELIVERY WHEN NOTIFIED.' , ; +; //** ELM 15 + 'ITEMS INDICATED ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE PAID AMOUNT; ' + ; + 'OUR INSTALLATION WHEN NOTIFIED.' , ; +; //** ELM 16 + 'ITEMS INDICATED ARE ON BACK ORDER AND ' + ; + 'INCLUDED IN THE PAID AMOUNT; ' + ; + 'CUSTOMER PICK UP WHEN AVAILABLE.' } + +IF CUR_MAST == 'ORD_MAST' + IF EMPTY((CUR_MAST)->NOTES) + NCHOICE = PICKLIST(MARR,10,, 'Select a Note Type') + IF LASTKEY() == 27 + ELSEIF NCHOICE == 1 + NCHOICE = PICKLIST(MARR2,10,, 'BILLED SCREENS Notes') + IF LASTKEY() == 27 + ELSEIF NCHOICE = 1 + UPD_COMMON_NOTES(MNOTES[1]) + ELSEIF NCHOICE = 2 + UPD_COMMON_NOTES(MNOTES[2]) + ELSEIF NCHOICE = 3 + UPD_COMMON_NOTES(MNOTES[3]) + ELSEIF NCHOICE = 4 + UPD_COMMON_NOTES(MNOTES[4]) + ENDIF + ELSEIF NCHOICE == 2 + NCHOICE = PICKLIST(MARR2,10,, 'PAID SCREENS Notes') + IF LASTKEY() == 27 + ELSEIF NCHOICE = 1 + UPD_COMMON_NOTES(MNOTES[5]) + ELSEIF NCHOICE = 2 + UPD_COMMON_NOTES(MNOTES[6]) + ELSEIF NCHOICE = 3 + UPD_COMMON_NOTES(MNOTES[7]) + ELSEIF NCHOICE = 4 + UPD_COMMON_NOTES(MNOTES[8]) + ENDIF + ELSEIF NCHOICE == 3 + NCHOICE = PICKLIST(MARR2,10,, 'BILLED ITEMS Notes') + IF LASTKEY() == 27 + ELSEIF NCHOICE = 1 + UPD_COMMON_NOTES(MNOTES[9]) + ELSEIF NCHOICE = 2 + UPD_COMMON_NOTES(MNOTES[10]) + ELSEIF NCHOICE = 3 + UPD_COMMON_NOTES(MNOTES[11]) + ELSEIF NCHOICE = 4 + UPD_COMMON_NOTES(MNOTES[12]) + ENDIF + ELSEIF NCHOICE == 4 //** P3N - 2/23/99 + NCHOICE = PICKLIST(MARR2,10,, 'PAID ITEMS Notes') + IF LASTKEY() == 27 + ELSEIF NCHOICE = 1 + UPD_COMMON_NOTES(MNOTES[13]) + ELSEIF NCHOICE = 2 + UPD_COMMON_NOTES(MNOTES[14]) + ELSEIF NCHOICE = 3 + UPD_COMMON_NOTES(MNOTES[15]) + ELSEIF NCHOICE = 4 + UPD_COMMON_NOTES(MNOTES[16]) + ENDIF + ENDIF + ELSE + ERR_BOX(' Notes already exist on this ORDER !' , ; + ' USE F4 to Review the Order; ' , ; + ' Then F4 again to review the Order Notes.') + ENDIF +ENDIF +RETURN .T. + + +********************************************************************** +* // P3N - 8/10/98 +* UPDATE COMMON NOTES ON THE ORDER MASTER ( CGW0OM->NOTES ) +********************************************************************** +FUNCTION UPD_COMMON_NOTES(NOTEVAL) +REC_LOCK(5,CUR_MAST) +(CUR_MAST)->NOTES := '.'+CR_LF(10) + NOTEVAL +(CUR_MAST)->(DBUNLOCK()) +RETURN .T. +********************************************************************** +FUNCTION CUST_PE_KEY() +RETURN { CATEGORY->CAT_CODE, USERFILE2->OPTION } + + +********************************************************************** +// call CUSTOMER ID FOR PRICING EXTRAS +FUNCTION ACD_CUST_PE( ) +LOCAL MTITLE +LOCAL SAVESCR := SAVESCREEN(), ACDFILE +LOCAL SAVESEL := SELECT() +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') + +IF AT('U',(SAVESEL)->PRICE_SHT) = 0 + ERR_BOX('*** You Must Include a "U" Option ***', ; + '*** To Access The Customer Price Extras ***') + RETURN .T. +ENDIF + + +IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + MTITLE := 'Price Extras ' + ALLTRIM(CATEGORY->DESC) + ' ' + (SAVESEL)->OPTION + ACD_PAR_CHILD(1, MTITLE, ; + {NIL, 'CUST_PE', .F., , 'ADD',,,,,,.F. , 'USERFILE1'}) +ELSE + MTITLE := 'Review Price Extras ' + ALLTRIM(CATEGORY->DESC) + ' ' + (SAVESEL)->OPTION + ACD_PAR_CHILD(3, MTITLE, ; + {NIL, 'CUST_PE', .F., , 'REV',,,,,,.F. , 'USERFILE1'}) +ENDIF +SELECT USERFILE1 +USE +SELECT (SAVESEL) + +RESTSCREEN(,,,,SAVESCR) + +RETURN .T. +********************************************************************** +// call catagory option acd +FUNCTION ACD_OPTS( SEEKKEY ) +LOCAL MTITLE, MCUSTID := CUST_MAST->CUST_ID +LOCAL SAVESCR := SAVESCREEN(), ACDFILE +LOCAL SAVESEL := SELECT() +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') + +PRIVATE __SVSEL := SAVESEL //** P3N - 2/19/98 + +**IF USERFILE2->FIELD_TYPE$'UC' +IF (SAVESEL)->FIELD_TYPE$'UC' + ERR_BOX('*** No Options Available For ***', ; + '*** USER or Math CALCULATION Fields ***') + RETURN .T. +ENDIF + +IF SEEKKEY = 'CATEGORY' + ACDFILE := 'CAT_OPTS' + MTITLE := 'CATEORY OPTIONS for ' + (SAVESEL)->ATT_CODE +ELSE + IF SEEKKEY = 'MODEL' + ACDFILE := 'PROD_OPTS' + MTITLE := 'PRODUCT OPTIONS for ' + (SAVESEL)->ATT_CODE + ELSE + IF SEEKKEY = 'CUSTOMER' + ACDFILE := 'CUST_OPTS' + MTITLE := 'CUSTOMER '+MCUSTID+'/'+PROD_CODE+' OPTIONS for ' + (SAVESEL)->ATT_CODE + ENDIF + ENDIF +ENDIF + +IF SELECT( ACDFILE ) = 0 +**DBOPEN( ACDFILE, .T. ) + DBOPEN( ACDFILE ) +ENDIF + +PRIVATE __WHEREFROM := WHATLVL(SEEKKEY) //** P3N - 4/9/98 + +IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + ACD_PAR_CHILD(1, MTITLE, ; + {NIL, ACDFILE, .T., , 'ADD',,,,,,.F. , 'USERFILE1'}) +ELSE + ACD_PAR_CHILD(3, 'Review '+MTITLE, ; + {NIL, ACDFILE, .T., , 'REV',,,,,,.F. , 'USERFILE1'}) +ENDIF +SELECT USERFILE1 +USE +SELECT (SAVESEL) + +RESTSCREEN(,,,,SAVESCR) + +RETURN .T. +********************************************************************** +// DISPLAY THE WHEREFROM MESSAGE BASED ON PRIVATE VARIABLE INITIALIZED ABOVE +********************************************************************** +FUNCTION WHEREMSG(CMD) +LOCAL RETVAL := '' //** P3N - 2/19/98 +IF EMPTY(CMD) //** P3N - 2/19/98 + RETVAL := 'These Options Are From the ' + __WHEREFROM + ' Level ' +ELSEIF CMD = 'SET' //** P3N - 2/19/98 + SETCOLOR(HREV) //** P3N - 2/19/98 + RETVAL := 'NOSAY' //** P3N - 2/19/98 +ELSEIF CMD = 'RESET' //** P3N - 2/19/98 + SETCOLOR(LNOR) //** P3N - 2/19/98 +ENDIF //** P3N - 2/19/98 +RETURN RETVAL //** P3N - 2/19/98 + + +********************************************************************** +//** P3N - 4/9/98 +// DETERMINE THE LEVEL OF THE ATTRIBUTE OPTIONS. +// (IE: PRODUCT/MODEL LVL OR CATEGORY LVL OR SYSTEM/ATTRIBUTE LVL) +********************************************************************** +FUNCTION WHATLVL(LVL) //** P3N - 4/9/98 +LOCAL RETVAL := 'SYSTEM' // DEFAULT - IF NOT FOUND ANYWHERE ELSE THIS APPLIES! +LOCAL PRODKEY, CATKEY, CUSTKEY +IF LVL = 'CUSTOMER' // START AT THE CUSTOMER LVL AND WORK UP! + CUSTKEY := CUST_MAST->CUST_ID + USERFILE3->PROD_CODE + ATT_CODE + PRODKEY := USERFILE3->PROD_CODE + ATT_CODE + CATKEY := PRODUCT->CAT_CODE + ATT_CODE + IF CUST_OPTS->(DBSEEK(CUSTKEY)) + RETVAL := 'CUSTOMER' + ELSEIF PROD_OPTS->(DBSEEK(PRODKEY)) + RETVAL := 'PRODUCT' + ELSEIF CAT_OPTS->(DBSEEK(CATKEY)) + RETVAL := 'CATEGORY' + ENDIF +ELSEIF LVL = 'MODEL' // START AT THE MODEL/PROD LVL AND WORK UP! + PRODKEY := PROD_CODE + ATT_CODE + CATKEY := PRODUCT->CAT_CODE + ATT_CODE + IF PROD_OPTS->(DBSEEK(PRODKEY)) + RETVAL := 'PRODUCT' + ELSEIF CAT_OPTS->(DBSEEK(CATKEY)) + RETVAL := 'CATEGORY' + ENDIF +ELSEIF LVL = 'CATEGORY' // START AT THE CATEGORY LEVEL AND WORK UP! + CATKEY := CAT_CODE + ATT_CODE + IF CAT_OPTS->(DBSEEK(CATKEY)) + RETVAL := 'CATEGORY' + ENDIF +ENDIF +RETURN RETVAL +********************************************************************** +// SET THE PICKUP, DELIVERY, INSTALLATION FLAG FROM THE SHIP CODE +********************************************************************** +FUNCTION SET_PICKDEL( SEEKKEY ) +LOCAL I +LOCAL MVAL := ASCAN(GETVARS, {|X| X[3] = 'PICK_DEL'}) +LOCAL CUR_SHIP_CODE := GET_PDI_CODE(SEEKKEY) + +GETVARS[MVAL,4] := CUR_SHIP_CODE +RETURN .T. + +************************************************************** +FUNCTION GET_PDI_CODE(SEEKKEY) //PICKUP/DEL/INSTALL CODE? +************************************************************** +IF ASCAN(MDEL_SHIP, {|X| X == SEEKKEY } ) > 0 //SHIP CODE DELIVERY + RETURN 'D' +ELSE + IF ASCAN(MPU_SHIP, {|X| X == SEEKKEY } ) > 0 //SHIP CODE PICKUP + RETURN 'P' + ELSE + IF ASCAN(MINST_SHIP, {|X| X == SEEKKEY } ) > 0 //SHIP CODE INSTALLED + RETURN 'I' + ELSE + RETURN '?' + ENDIF + ENDIF +ENDIF + +********************************************************************** +//* VERIFY THAT THE CUSTOMER IS NOT A PRE-PAY CUSTOMER +********************************************************************** +FUNCTION PRE_PAY_CUST( SEEKKEY ) +LOCAL RETVAL + +****IF !NEWREC // CHANGE ON A CONVERTED QUOTE +***** RETURN .F. // NOT A PREPAY PERSON WHEN THIS HAPPENS +****ENDIF +IF EMPTY((CUR_MAST)->QUOTE_NUM) // CHANGE ON A CONVERTED QUOTE +ELSE + RETVAL := .F. // NOT A PREPAY PERSON WHEN THIS HAPPENS +ENDIF +IF EMPTY(ORD_MAST->TERMS) + CUST_MAST->(DBSEEK( SEEKKEY ) ) + IF ASCAN(MPREPAYCODE, {|X| X == CUST_MAST->TERMS } ) = 0 // TERMS CODE NOT IN LIST + RETVAL := .F. + ELSE + ERR_BOX('*** This Customer has been assigned a ***', ; + '*** TERMS CODE of PRE-PAY ORDERS ONLY; ***', ; + '*** PRESS F12 to Override the TERMS! ***') + IF LASTKEY() = K_F12 + IF MHOME_LOC_CODE = 'IOLA' // PER DARLENES REQUEST - 4/21/98 + RETVAL := .T. // DO NOT ALLOW OVERRIDE - P3N + ELSE + PRE_PAY_TERMS() + RETVAL := .F. + ENDIF + ENDIF + RETVAL := .T. + ENDIF +ELSE + RETVAL := .F. +ENDIF +IF RETVAL //** P3N - 12/22/00 +ELSE //** P3N - 12/22/00 + RETVAL := CK_CRLIMIT() //** P3N - 12/22/00 +ENDIF //** P3N - 12/22/00 +RETURN RETVAL + +********************************************************************** +//* P3N - 12/22/00 +//* CHECK TO SEE IF THIS CUSTOMER HAS EXCEEDED HIS CREDIT LIMIT??? +********************************************************************** +FUNCTION CK_CRLIMIT() +LOCAL RETVAL := .F. +LOCAL WKLIMIT := CUST_MAST->CREDIT_LIM, WKAMT := 0 +IF EMPTY(WKLIMIT) +ELSE + WKAMT := UNSHIPPED_ORDAMT() + IF WKAMT >= WKLIMIT + RETVAL := .T. + ERR_BOX('*** Customer Credit Limit is - ' + STR(WKLIMIT,12,2), ; + '*** ALL Unshipped Orders total - ' + STR(WKAMT, 12,2), ; + '*** Press F12 to Make this Order! ***') + IF LASTKEY() == K_F12 + RETVAL := .F. + ENDIF + ENDIF +ENDIF +RETURN RETVAL +********************************************************************** +//* P3N - 12/26/00 - MERRY X-MAS 2000 +//* SUM ALL ORDERS FOR THIS CUSTOMER WHICH HAVE BEEN INVOICED +//* AND HAVE NOT BEEN SHIPPED +********************************************************************** +FUNCTION UNSHIPPED_ORDAMT() +LOCAL SVREC := (CUR_MAST)->(RECNO()), SVSEL := SELECT() +LOCAL SVORD := (CUR_MAST)->(DONSETORD(2)) //** CUST# ORDER +LOCAL SEEKKEY := CUST_MAST->CUST_ID +LOCAL RETVAL := 0 +DBOPEN('ORD_SHIP') +IF (CUR_MAST)->(DBSEEK(SEEKKEY)) + DO WHILE (CUR_MAST)->(!EOF()) .AND. ; + (CUR_MAST)->CUST_ID == SEEKKEY + IF EMPTY( (CUR_MAST)->IDATE_FST ) //** ORDER HAS BEEN INVOICED + IF ORD_SHIP->(DBSEEK( (CUR_MAST)->ORDER_NUM ) ) + IF EMPTY(ORD_SHIP->SHIP_DATE) + RETVAL := RETVAL + (CUR_MAST)->TOTAL_AMT + ELSEIF ORD_SHIP->SHIP_DATE >= M->CURDATE + RETVAL := RETVAL + (CUR_MAST)->TOTAL_AMT + ENDIF + ELSE + RETVAL := RETVAL + (CUR_MAST)->TOTAL_AMT + ENDIF + ENDIF + (CUR_MAST)->(DBSKIP(+1)) + ENDDO +ENDIF +CLOSE ORD_SHIP +(CUR_MAST)->(DONSETORD(SVORD)) +(CUR_MAST)->(DBGOTO(SVREC)) +SELECT(SVSEL) +RETURN RETVAL +********************************************************************** +//* IF THE CUSTOMER IS PRE-PAY CUSTOMER - F12 TO OVERRIDE THE TERMS! +********************************************************************** +FUNCTION PRE_PAY_TERMS() +LOCAL I := ASCAN(GETVARS, {|X| X[3] == 'TERMS'}) +LOCAL OGET, DROW, DCOL, SVCOLOR +VAL_LOOKUP( GETVARS[I,4], 'TERMS', I, {'Code','Desc'}, 'N', .T.) +IF EMPTY(GETLIST) + RETURN .F. +ENDIF +OGET := GETLIST[I] +DROW := OGET:ROW +DCOL := OGET:COL +**SVCOLOR := SETCOLOR(NEWCOLOR) +@DROW, DCOL SAY GETVARS[I,4] +@DROW, DCOL-1 GET GETVARS[I,4] +**SETCOLOR(SVCOLOR) +REC_LOCK() +REPLACE TERMS WITH GETVARS[I,4] +UNLOCK +RETURN .T. + +********************************************************************** +// send data to another location for model setups, etc. +********************************************************************** +FUNCTION SEND_RECV(OPTION, TITLE, WHICH_FILE, ACTION) +LOCAL FILELIST := {} + +CLS +SAYTITLE(TITLE, 'SENDDATA') + +ERR_BOX('*** ALL PROCESSING ASSUMES That the TRANSFER DATA',; + '*** Will Be READ From and WRITTEN to the ', ; + '*** "DATA" Sub-directory Below This Directory') + +DO CASE + CASE WHICH_FILE = 'ATT' + AADD(FILELIST,'ATTRIBUTES') + AADD(FILELIST,'ATT_OPTS') + CASE WHICH_FILE = 'CUT' + AADD(FILELIST,'ATTRIB_CUT') + CASE WHICH_FILE = 'CAT' + AADD(FILELIST,'CATEGORY') + AADD(FILELIST,'CAT_ATTS') + AADD(FILELIST,'CAT_OPTS') + AADD(FILELIST,'PRI_EXTRAS') + AADD(FILELIST,'MATHPACK') + CASE WHICH_FILE = 'MODEL' + AADD(FILELIST,'PRODUCT') + AADD(FILELIST,'PROD_ATTS') + AADD(FILELIST,'PROD_OPTS') + AADD(FILELIST,'STD_SIZES') + AADD(FILELIST,'CUT_SPEC') + AADD(FILELIST,'MATHPACKP') + CASE WHICH_FILE = 'RULE' + AADD(FILELIST,'RULES') + AADD(FILELIST,'RULEPACK') + OTHERWISE + RETURN +ENDCASE + +DO CASE + CASE ACTION = "SEND" + PRO_SEND(WHICH_FILE, FILELIST) + CASE ACTION = "ZAP" + PRO_ZAP(WHICH_FILE, FILELIST) + CASE ACTION = "REVU" + PRO_REVU(WHICH_FILE, FILELIST, NIL , 'TEMP') + CASE ACTION = "RECV" + PRO_RECV(WHICH_FILE, FILELIST) + +ENDCASE + +CLOSE DATABASES +RETURN + +********************************************************************** +********************************************************************** +********************************************************************** +FUNCTION PRO_RECV(WHICH_FILE, FILELIST) + +LOCAL DRIVEFILE := FILELIST[1] +LOCAL TOFILE +LOCAL I, FILEOPEN := .F. +LOCAL DRIVEPARM +LOCAL FILEPARMS, DATAFILE, FILEKEY, PERMKEY, MGET_KEY, PTABLE_ARR +LOCAL PICKARR := {'Receive SELECTED ' + FILELIST[1], 'Receive ALL ' + FILELIST[1]} +LOCAL NCHOICE := PICKLIST(PICKARR, 8, , 'Select Your Choice') +LOCAL OVERWRITE +LOCAL M1 := '*** ABOUT TO UPDATE Your Setup Data ' +LOCAL M2, SAVEREC +LOCAL M3 := '*** Do You WISH TO CONTINUE? ' +LOCAL SELARR := {}, SELCHOICE := 0 +LOCAL CORR + +IF LASTKEY() = 27 + RETURN +ENDIF + +M1 := '*** If Data EXISTS on THIS COMPUTER ' +M2 := '*** Should It Be UPDATED WITH NEW DATA???' +M3 := ' ' + +IF PROMPT_BOX(M1,M2,M3) + OVERWRITE := .T. +ELSE + OVERWRITE := .F. +ENDIF +IF LASTKEY() = 27 + RETURN +ENDIF + +CORR := CORRCHEK() +IF CORR <> 'Y' + RETURN +ENDIF + +FILEPARMS := GET_FILEPARMS(DRIVEFILE) +DATAFILE := 'DATA\' + STRTRAN(ALLTRIM(FILEPARMS[8]), '0', '_') +FILEKEY := FILEPARMS[4,1] +PERMKEY := MAKE_BLOCK(FILEKEY) + +IF FILE(DATAFILE + '.DBF') + NET_USE( DATAFILE, .T., 3, 'DATAFILE') + GOTO TOP + DO WHILE !EOF() + AADD(SELARR, EVAL(PERMKEY) ) + SKIP 1 + ENDDO +ENDIF + +IF LEN(SELARR) = 0 + ERR_BOX('*** NO RECORDS FOUND TO RECEIVE ***') + RETURN NIL +ENDIF + +IF NCHOICE = 1 // SELECTED UPDATES + DO WHILE .T. + @ 2,0 CLEAR + // OPEN TEMPORARY FILE UNDER REAL FILE ALIAS + SELCHOICE := PICKLIST(SELARR, 8, , 'Select Item to Receive',,,.T.) + IF LASTKEY() = 27 + RETURN NIL + ENDIF + MGET_KEY := SELARR[SELCHOICE] + USE + RECV_DATA(MGET_KEY, FILELIST, OVERWRITE, PERMKEY, WHICH_FILE) + RETURN + ENDDO +ELSE + SELECT DATAFILE + GOTO TOP + DO WHILE !EOF() // DATAFILE + IF NEXTKEY() = 27 + EXIT + ELSE + CLEAR TYPEAHEAD + ENDIF + SAVEREC := RECNO() + MGET_KEY := EVAL(PERMKEY) + @ 10,10 SAY 'PROCESSING : ' + MGET_KEY + SPACE(10) + RECV_DATA(MGET_KEY, FILELIST, OVERWRITE, PERMKEY, WHICH_FILE) + NET_USE( DATAFILE, .T., 3, 'DATAFILE') + GOTO SAVEREC + SKIP 1 + ENDDO + RETURN +ENDIF + + +************************************************************** +************************************************************** +************************************************************** +FUNCTION RECV_DATA(MGET_KEY, FILELIST, OVERWRITE, PERMKEY, WHICH_FILE) +LOCAL DATAFILE, FILEPARMS +LOCAL I, SEEKKEY, OLDLOC, OLDGL +LOCAL OLDPERMKEY := PERMKEY +LOCAL DRIVEFILE + +FOR I := 1 TO LEN(FILELIST) + IF FILELIST[I] = 'MATHPACKP' + DRIVEFILE := 'MATHPACK' + ELSE + DRIVEFILE := FILELIST[I] + ENDIF + FILEPARMS := DBOPEN(DRIVEFILE, .T.) + FILEKEY := FILEPARMS[9,1] + PERMKEY := MAKE_BLOCK(FILEKEY) + DATAFILE := 'DATA\' + STRTRAN(ALLTRIM(FILEPARMS[8]), '0', '_') + IF FILE(DATAFILE+'.DBF') //** P3N- 2/19/98 + //FILE FOUND CONTINUE + ELSE + LOOP // BYPASS - NO FILE TO PROCESS + ENDIF + NET_USE( DATAFILE, .T., 3, 'DATAFILE') + + WAIT_BOX('*** Processing File ' + DRIVEFILE , ; + ' ' , ; + '*** Please Wait') + + SELECT DATAFILE + SET FILTER TO EVAL(PERMKEY) = MGET_KEY + GOTO TOP + DO WHILE !EOF() + SEEKKEY := EVAL(PERMKEY) + SELECT (DRIVEFILE) + SEEK SEEKKEY + IF !FOUND() + ADD_ONEREC( 'DATAFILE', DRIVEFILE ) + ELSE + IF OVERWRITE + IF DRIVEFILE = 'PRODUCT' + OLDLOC := LOC_CODE + OLDGL := GL_NUM + ENDIF + REP_ONEREC( 'DATAFILE', DRIVEFILE ) + IF DRIVEFILE = 'PRODUCT' + REPLACE PRODUCT->LOC_CODE WITH OLDLOC + REPLACE PRODUCT->GL_NUM WITH OLDGL + ENDIF + ELSE + // GET OUT - DON'T UPDATE ANY SUBORDINATE RECORDS + IF I = 1 + I := LEN(FILELIST) + SELECT DATAFILE + GOTO BOTTOM + ENDIF + ENDIF + ENDIF + SELECT DATAFILE + SKIP 1 + ENDDO + + SELECT (DRIVEFILE) + USE + + SELECT DATAFILE + USE + +NEXT + + +IF WHICH_FILE = 'MODEL' + PTABLE_ARR := DIRECTORY( 'DATA\?' + ALLTRIM(MGET_KEY) + '.DB_') + FOR I := 1 TO LEN(PTABLE_ARR) + FRFILE := ALLTRIM(PTABLE_ARR[I,1]) + TOFILE := FRFILE + TOFILE := SUBS(TOFILE, 1, LEN(TOFILE) - 4) + '.DBF' + FRFILE := 'DATA\' + ALLTRIM(PTABLE_ARR[I,1]) + IF !FILE(TOFILE) .OR. OVERWRITE + COPY FILE (FRFILE) TO (TOFILE) + ENDIF + NEXT +ENDIF + +RETURN + + +********************************************************************** +FUNCTION PRO_SEND(WHICH_FILE, FILELIST) + +LOCAL DRIVEFILE := FILELIST[1] +LOCAL FILEPARMS, TOFILE +LOCAL MGET_KEY, FILEKEY +LOCAL DATAFILE +LOCAL M1, M2, M3, I +LOCAL PERMKEY, DRIVEPARM, PTABLE_ARR +LOCAL PICKARR := {'Send SELECTED ' + FILELIST[1], 'Send ALL ' + FILELIST[1]} +LOCAL NCHOICE := PICKLIST(PICKARR, 8, , 'Select Your Choice') +IF NCHOICE = NIL .OR. LASTKEY() = 27 + RETURN NIL +ENDIF + +FILEPARMS := DBOPEN(DRIVEFILE, .T.) +FILEKEY := FILEPARMS[4,1] +PERMKEY := MAKE_BLOCK(FILEKEY) + +IF NCHOICE = 1 + DO WHILE .T. + @ 2,0 CLEAR + // OPEN TEMPORARY FILE UNDER REAL FILE ALIAS + MGET_KEY := GET_KEY(FILEPARMS) + IF LASTKEY() = 27 .OR. MGET_KEY = NIL + RETURN NIL + ENDIF + USE + SEND_DATA(MGET_KEY, FILELIST, PERMKEY, WHICH_FILE) + DBOPEN(DRIVEFILE, .T.) + ENDDO + +ELSE + + DO WHILE !EOF() // DATAFILE + IF NEXTKEY() = 27 + EXIT + ELSE + CLEAR TYPEAHEAD + ENDIF + SAVEREC := RECNO() + MGET_KEY := EVAL(PERMKEY) + @ 10,10 SAY 'PROCESSING : ' + MGET_KEY + SPACE(10) + SEND_DATA(MGET_KEY, FILELIST, PERMKEY, WHICH_FILE) + FILEPARMS := DBOPEN(DRIVEFILE, .T.) + GOTO SAVEREC + SKIP 1 + ENDDO + +ENDIF + +**************************************************************** +FUNCTION SEND_DATA(MGET_KEY, FILELIST, PERMKEY, WHICH_FILE) + +LOCAL I, SEEKKEY +LOCAL FILEPARMS := DBOPEN(FILELIST[1], .T.) +LOCAL DATAFILE := 'DATA\' + STRTRAN(ALLTRIM(FILEPARMS[8]), '0', '_') +LOCAL OLDPERMKEY := PERMKEY + +IF !FILE(DATAFILE + '.DBF') +**COPY STRUCT TO &DATAFILE + COPYSTRUCT(DATAFILE, .T. ) // DELETE CDX +ELSE + IF SELECT(DATAFILE) > 0 + SELECT (DATAFILE) + USE + ENDIF +ENDIF +NET_USE( DATAFILE, .T., 3, 'DATAFILE') +LOCATE FOR EVAL(PERMKEY) == MGET_KEY +IF FOUND() + M1 := '*** This Record is ALREADY IN THE SEND FILE.' + M2 := '*** The NEW DATA will OVERWRITE the OLD DATA.' + M3 := '*** Do You WISH TO CONTINUE FOR ' + MGET_KEY + IF !PROMPT_BOX(M1,M2,M3) + RETURN + ENDIF +ENDIF + +FOR I := 1 TO LEN(FILELIST) + WAIT_BOX('*** Processing File ' + FILELIST[I] , ; + ' ' , ; + '*** Please Wait') + + DRIVEFILE := FILELIST[I] + IF DRIVEFILE = 'MATHPACKP' // PRODUCT MATH CUTTING PACKS + DRIVEFILE := 'MATHPACK' + PERMKEY := MAKE_BLOCK( 'CAT_CODE' ) + ELSE + PERMKEY := OLDPERMKEY + ENDIF + DRIVEPARM := DBOPEN(DRIVEFILE) + DATAFILE := 'DATA\' + STRTRAN(ALLTRIM(DRIVEPARM[8]), '0', '_') + IF !FILE(DATAFILE + '.DBF') + COPYSTRUCT(DATAFILE) // DEL CDX + ENDIF + IF SELECT('DATAFILE') > 0 + SELECT ('DATAFILE') + USE + ENDIF + NET_USE( DATAFILE, .T., 3, 'DATAFILE') + LOCATE FOR EVAL(PERMKEY) == MGET_KEY + IF FOUND() + DELETE ALL FOR EVAL(PERMKEY) == MGET_KEY + PACK + ENDIF + SELECT (DRIVEFILE) + SEEK MGET_KEY + DO WHILE EVAL(PERMKEY) == MGET_KEY .AND. !EOF() + ADD_ONEREC( DRIVEFILE, 'DATAFILE' ) + SELECT (DRIVEFILE) + SKIP 1 + ENDDO + SELECT DATAFILE + USE + SELECT (DRIVEFILE) + USE +NEXT + +IF WHICH_FILE = 'MODEL' + WAIT_BOX('*** Processing Price Files ', ; + '*** For Model ' + MGET_KEY , ; + '*** Please Wait') + + PTABLE_ARR := DIRECTORY( '?' + ALLTRIM(MGET_KEY) + '.DBF') + FOR I := 1 TO LEN(PTABLE_ARR) + FRFILE := ALLTRIM(PTABLE_ARR[I,1]) + TOFILE := 'DATA\' + FRFILE + TOFILE := SUBS(TOFILE, 1, LEN(TOFILE) - 4) + '.db_' + COPY FILE (FRFILE) TO (TOFILE) + NEXT +ENDIF + +RETURN + +********************************************************************** +FUNCTION PRO_ZAP(WHICH_FILE, FILELIST) + +LOCAL DRIVEFILE, DRIVEPARM, DATAFILE1, DATAFILE2 +LOCAL FILEPARMS, TOFILE +LOCAL I, PTABLE_ARR, RETCODE + +LOCAL M1 := '*** ABOUT TO ERASE Transfer Data for ' + FILELIST[1] +LOCAL M2 := ' ' +LOCAL M3 := '*** Do You WISH TO CONTINUE? ' +IF !PROMPT_BOX(M1,M2,M3) + RETURN +ENDIF +FOR I := 1 TO LEN(FILELIST) + WAIT_BOX('*** Processing File ' + FILELIST[I] , ; + ' ' , ; + '*** Please Wait') + + DRIVEFILE := FILELIST[I] + IF DRIVEFILE = 'MATHPACKP' + DRIVEFILE := 'MATHPACK' + ENDIF + DRIVEPARM := DBOPEN(DRIVEFILE) + DATAFILE1 := 'DATA\' + STRTRAN(ALLTRIM(DRIVEPARM[8]),'0', '_') + '.DBF' + IF FILE(DATAFILE1) + RETCODE := FERASE( DATAFILE1 ) + IF RETCODE = -1 + ERR_BOX('*** ERASE ERROR ON ' + DATAFILE1) + ELSE + // CHECK FOR DBT + DATAFILE2 := 'DATA\' + STRTRAN(ALLTRIM(DRIVEPARM[8]),'0', '_') + '.DBT' + IF FILE( DATAFILE2 ) + RETCODE := FERASE( DATAFILE2 ) + IF RETCODE = -1 + ERR_BOX('*** ERASE ERROR ON ' + DATAFILE2) + ENDIF + ENDIF + ENDIF + ENDIF +NEXT + +IF WHICH_FILE = 'MODEL' + PTABLE_ARR := DIRECTORY( 'DATA\*.db_') + FOR I := 1 TO LEN(PTABLE_ARR) + TOFILE := ALLTRIM(PTABLE_ARR[I,1]) + RETCODE := FERASE( 'DATA\' + TOFILE ) + IF RETCODE = -1 + ERR_BOX('*** ERASE ERROR ON ' + TOFILE ) + ENDIF + NEXT +ENDIF + +RETURN + + +********************************************************************** +FUNCTION PRO_REVU(WHICH_FILE, FILELIST, PERMKEY, REAL_TEMP) + +LOCAL RETVAL +LOCAL DRIVEFILE := FILELIST[1] +LOCAL FILEPARMS := GET_FILEPARM(DRIVEFILE) +LOCAL DATAFILE + +IF REAL_TEMP = 'TEMP' + DATAFILE := 'DATA\' + STRTRAN(ALLTRIM(FILEPARMS[8]), '0', '_') +ELSE + DATAFILE := ALLTRIM(FILEPARMS[8]) +ENDIF + +IF !FILE(DATAFILE + '.DBF' ) + ERR_BOX( '*** No Data To REVIEW ***', ' ', ' ') +ELSE + NET_USE( DATAFILE, .T., 3, DRIVEFILE ) + + GBROWSE(1, 'Review Transfer ' + DRIVEFILE, DRIVEFILE) + IF LASTKEY() = 13 .AND. PERMKEY <> NIL + RETVAL := EVAL(PERMKEY) + ENDIF + + SELECT (DRIVEFILE) + USE +ENDIF +RETURN RETVAL + + +********************************************************************** +* ONLY 1 PRICING METHOD ALLOWED +********************************************************************** +FUNCTION DEL_ATT_OPTS(PASSVAL, MALIAS, ACTION) +LOCAL SAVESEL := SELECT(), SEEKNAME, I +LOCAL DELREC := .F., DELARR := {} + +STATIC SEEKKEY +IF ACTION = 'SET' + SEEKKEY := ATT_CODE + RETURN .T. +ENDIF + +IF !EMPTY(PASSVAL) // DELETED RECORD + RETURN .T. +ENDIF + +IF MALIAS = 'PROD_OPTS' + SEEKNAME = 'PROD_CODE + ATT_CODE' + SEEKKEY := PRODUCT->PROD_CODE + SEEKKEY +ELSE + IF MALIAS = 'CAT_OPTS' + SEEKNAME = 'CAT_CODE + ATT_CODE' + SEEKKEY := CATEGORY->CAT_CODE + SEEKKEY + ELSE + IF MALIAS = 'CUST_OPTS' + SEEKNAME = 'CUST_ID + PROD_CODE + ATT_CODE' + SEEKKEY := CUST_MAST->CUST_ID + USERFILE3->PROD_CODE + SEEKKEY + ENDIF + ENDIF +ENDIF + +IF SELECT( MALIAS ) = 0 + DBOPEN(MALIAS, .T.) +ENDIF +SELECT (MALIAS) +SEEK SEEKKEY +DO WHILE &SEEKNAME == SEEKKEY .AND. !EOF() + REC_LOCK(1) + DELETE + DELREC := .T. + AADD(DELARR, RECNO() ) + SKIP 1 +ENDDO +IF DELREC + WAIT_BOX('*** COMPRESSING OPTION FILE ***', ; + '*** Please Wait ***') + FOR I := 1 TO LEN(DELARR) + GOTO DELARR[I] + REC_LOCK(1) + REPLACE ATT_CODE WITH ' ' + NEXT +**PACK +ENDIF + +SELECT (SAVESEL) +RETURN .T. + +********************************************************************** +* ONLY 1 PRICING METHOD ALLOWED +********************************************************************** +FUNCTION CK_PRICE_METH() +LOCAL NUMX := 0 + +IF UNIT_PR = 'X' + NUMX ++ +ENDIF +IF UI_PR = 'X' + NUMX ++ +ENDIF +IF SQFT_PR = 'X' + NUMX ++ +ENDIF + +IF !UNIT_PR$'X ' + RETURN .F. +ENDIF +IF !UI_PR$'X ' + RETURN .F. +ENDIF +IF !SQFT_PR$'X ' + RETURN .F. +ENDIF + +IF NUMX > 1 + ERR_BOX('*** You May Select ONLY 1 PRICE METHOD ***') + RETURN .F. +ELSE + RETURN .T. +ENDIF + +********************************************************************** +* SPECIAL CUSTOMER PRICING SCREENS SET CUSTOMER ID +********************************************************************** +* DETERMINE IF ALT MFG LOCATION WAS ENTERED ELSE GET RULE +********************************************************************** +FUNCTION CK_ALTMFG_LOC(ALTMFGLOC) +IF EMPTY(ALTMFGLOC) + KEYBOARD SPACE(6) + CHR(13) +ENDIF +RETURN .T. + +********************************************************************** +* GET THE SALES TAX RATE +********************************************************************** +FUNCTION CALC_STAX(RATETABLE, ASSGN_VALU ) +LOCAL TAXPCT := 00.0000 +LOCAL MVAL + +IF ASSGN_VALU = NIL + ASSGN_VALU := .T. +ENDIF + + +IF MVAL = NIL .AND. ASSGN_VALU + MVAL := ASCAN(GETVARS, {|X| X[3] = 'SLS_TX_PCT'}) +ENDIF + +**TAXPCT := VAL(STR(STAX_RATE(NIL, 2 ),7,4)) +TAXPCT := VAL( STR ( STAX_RATE ( RATETABLE, 2 ) , 7, 4 ) ) +IF ASSGN_VALU + GETVARS[MVAL,4] := TAXPCT + RETURN .T. +ELSE + RETURN TAXPCT +ENDIF + +********************************************************************** +* GET THE SALES TAX RATE +********************************************************************** +FUNCTION STAX_RATE( RATETABLE, RETELEM, USEARRAY, RECVALS ) + +LOCAL SEEKKEY, TAXPCT := 0, SAVESEL := SELECT() +LOCAL I, VAR, DETARR, ADDVAR, II, SEQVAR, NEXTSEEK, CURRATE := 0.00 +LOCAL ELEM, DET_LINE, RETVAL, CURDESC := '', MPD +LOCAL MBILL_STATE, MSHIP_STATE, MVAL, MSTATE +LOCAL DETAILARR := {}, SELFILE + +// RATE ARR[SCH_NAME, SCH_PERCENT, SCH_DESC, DETAILARR ] +STATIC RATE_ARR := {} + +IF RECVALS = NIL + RECVALS := .F. +ENDIF + +IF USEARRAY = NIL + USEARRAY := .T. + SELFILE := 'TAX_SCHED' +ELSE + SELFILE := SELECT() +ENDIF +IF !USEARRAY + RATE_ARR := {} +ENDIF + + +// WHAT IS RATE TABLE DURING PRINT ORDER TIME?? +IF RATETABLE = NIL // ORDER ENTRY TIME AND REPORT TIME + SEEKKEY := ALLTRIM(CUST_MAST->TAXSCH) + // DON'T MESS WITH TAX EXEMPT + IF SEEKKEY == 'EXTAX' + ELSE + IF RECVALS + MPD = (CUR_MAST)->PICK_DEL + ELSE + MVAL := ASCAN(GETVARS, {|X| X[3] = 'PICK_DEL'}) + MPD := GETVARS[MVAL, 4] + ENDIF +****IF GETVARS[MVAL,4]$'P' + IF MPD$'P' // Pickup Order + SEEKKEY := MPICKUPTAX + ELSE + IF RECVALS + MSTATE:= CNV_ADDR((CUR_MAST)->SHIP_CSZ, 'STATE') + ELSE + MVAL := ASCAN(GETVARS, {|X| X[3] = 'SHIP_CSZ'}) + IF MVAL > 0 + MSTATE := CNV_ADDR(GETVARS[MVAL,4] , 'STATE' ) + ENDIF + ENDIF + IF MSTATE = NIL + IF RECVALS + MSTATE:= CNV_ADDR((CUR_MAST)->SHIP_ADD2, 'STATE') + ELSE + MVAL := ASCAN(GETVARS, {|X| X[3] = 'SHIP_ADD2'}) + IF MVAL > 0 + MSTATE := CNV_ADDR(GETVARS[MVAL,4] , 'STATE' ) + ENDIF + ENDIF + IF MSTATE = NIL + IF RECVALS + MSTATE:= CNV_ADDR((CUR_MAST)->SHIP_ADD1, 'STATE') + ELSE + MVAL := ASCAN(GETVARS, {|X| X[3] = 'SHIP_ADD1'}) + IF MVAL > 0 + MSTATE := CNV_ADDR(GETVARS[MVAL,4] , 'STATE' ) + ENDIF + ENDIF + IF MSTATE = NIL + IF RECVALS + MSTATE:= CNV_ADDR((CUR_MAST)->SHIP_ADD1, 'STATE' ) + ELSE + MVAL := ASCAN(GETVARS, {|X| X[3] = 'SHIP_NAME'}) + IF MVAL > 0 + MSTATE := CNV_ADDR(GETVARS[MVAL,4] , 'STATE' ) + ENDIF + ENDIF + ENDIF + ENDIF + IF MSTATE == NIL // NO VALID ADDRESS FOR SHIPPING ADDRESS + IF RECVALS // CHECK THE BILLING ADDRESS + MSTATE:= CNV_ADDR((CUR_MAST)->BILL_CSZ, 'STATE') + ELSE + MVAL := ASCAN(GETVARS, {|X| X[3] = 'BILL_CSZ'}) + IF MVAL > 0 + MSTATE := CNV_ADDR(GETVARS[MVAL,4] , 'STATE' ) + ENDIF + ENDIF + IF MSTATE == NIL + IF RECVALS + MSTATE:= CNV_ADDR((CUR_MAST)->BILL_ADD2, 'STATE' ) + ELSE + MVAL := ASCAN(GETVARS, {|X| X[3] = 'BILL_ADD2'}) + IF MVAL > 0 + MSTATE := CNV_ADDR(GETVARS[MVAL,4] , 'STATE' ) + ENDIF + ENDIF + ENDIF + IF MSTATE == NIL + IF RECVALS + MSTATE:= CNV_ADDR((CUR_MAST)->BILL_ADD1, 'STATE' ) + ELSE + MVAL := ASCAN(GETVARS, {|X| X[3] = 'BILL_ADD1'}) + IF MVAL > 0 + MSTATE := CNV_ADDR(GETVARS[MVAL,4] , 'STATE' ) + ENDIF + ENDIF + ENDIF + ENDIF + + // THIS COULD COME FROM ORDER MASTER??? + IF MSTATE <> NIL .AND. MSTATE <> CUST_MAST->CUST_STATE + SEEKKEY := MSTATE + 'TAX' + ENDIF + ENDIF + ENDIF + ENDIF +ELSE + SEEKKEY := RATETABLE +ENDIF +SEEKKEY := ALLTRIM(SEEKKEY) +ELEM := ASCAN( RATE_ARR, { |X| X[1] == SEEKKEY } ) +IF ELEM > 0 + IF RETELEM = NIL + RETURN RATE_ARR[ELEM] + ELSE + RETURN RATE_ARR[ELEM, RETELEM] + ENDIF +ENDIF + +SELECT (SELFILE) +IF USEARRAY + SEEKKEY := ALLTRIM(SEEKKEY) + **LOCATE FOR ALLTRIM(STAXSCH) == SEEKKEY + SEEK SEEKKEY +ENDIF +IF !USEARRAY .OR. FOUND() + CURDESC := (SELFILE)->DESC + FOR II := 1 TO 10 + SEQVAR := 'SEQ' + ALLTRIM(STR(II)) + NEXTSEEK := &SEQVAR + + IF NEXTSEEK <> 0 + SELECT TAX_DETAIL + SEEK STR(NEXTSEEK,3) + IF FOUND() + CURRATE := CURRATE + (STAXAMT * 100) + AADD(DETAILARR, { STAXAMT, ' ', GL_NUM, SSTAXSEQ }) //** P3N - 01/24/07 + //** AADD(DETAILARR, { STAXAMT, ' ', GL_NUM }) + ENDIF + SELECT (SELFILE) + ENDIF + NEXT + + ADDVAR := { ALLTRIM(TAX_SCHED->STAXSCH), CURRATE, CURDESC, DETAILARR } + AADD(RATE_ARR, ADDVAR ) + RETVAL := ADDVAR +ELSE + IF RATETABLE = NIL + ENDIF + RETVAL := { SPACE(6), 0, SPACE(10), {} } +ENDIF + +SELECT (SAVESEL) +IF RETELEM = NIL + RETURN RETVAL +ELSE + RETURN RETVAL[RETELEM] +ENDIF + + +********************************************************************** +* DETERMINE IF A MODEL AFTER PRODUCT IS REQUESTED +********************************************************************** + +FUNCTION NEW_ITEM(WHICHITEM, UFILENAME) + +// ASSUMES THE PRODUCT FILE IS OPEN +LOCAL SAVESEL := SELECT() +LOCAL SAVEREC := RECNO() +LOCAL NEWREC, I, II, III, APFROM, PROG +LOCAL MODREC +LOCAL CURMOD, CURREC +LOCAL SAVESCR := SAVESCREEN() +LOCAL SELFILE, ATTFILE, OPTFILE, MAC, XTRAFILE, MACC, DOMAC +LOCAL XFILEARR := {}, DIRARR, DIRSPEC +LOCAL COPYCS := .F. //** P3N - 9/21/00 +PRIVATE MOD_MODEL + +M1 := '** You have Entered a NEW ' + WHICHITEM + '!' +M2 := '** Do You Wish To' +M3 := '** COPY From ANOTHER ' + WHICHITEM + '?' + +IF !PROMPT_BOX(M1,M2,M3) + RETURN .T. +ENDIF + +M1 := ' ' +M2 := '** Do You want to copy existing Cutting Information for this Model?' +M3 := ' ' + +IF WHICHITEM == 'MODEL' //** P3N - 9/21/00 + IF PROMPT_BOX(M1,M2,M3) //** P3N - 9/21/00 + COPYCS := .T. //** P3N - 9/21/00 + ENDIF //** P3N - 9/21/00 +ENDIF //** P3N - 9/21/00 + +IF UFILENAME = NIL + UFILENAME := 'USERFILE3' +ENDIF + +IF WHICHITEM = 'MODEL' + SELFILE := 'PRODUCT' + CURMOD := (SELFILE)->PROD_CODE +ELSE + IF WHICHITEM = 'CUTTING SPEC' + SELFILE := 'PRODUCT' + CURMOD := (SELFILE)->PROD_CODE + ELSE + SELFILE := 'CATEGORY' + CURMOD := (SELFILE)->CAT_CODE + ENDIF +ENDIF +SELECT (SELFILE) +NEWREC := RECNO() +KEYPARMS := GET_FILEPARM(SELFILE) + +DO WHILE .T. + MOD_MODEL := GET_KEY(KEYPARMS,,,6) + IF MOD_MODEL = CURMOD + ERR_BOX('*** You May NOT Select the Same ' + SELFILE + ' CODE ***',; + '*** Please SELECT A DIFFERENT One to COPY ***') + LOOP + ENDIF + IF LASTKEY() = 27 + GOTO NEWREC + SELECT (SAVESEL) + GOTO SAVEREC + RESTSCREEN(,,,,SAVESCR) + RETURN .T. + ENDIF + + WAIT_BOX('*** Copying SETUP Information ***',; + '*** ' + ALLTRIM(MOD_MODEL) + ' To ' + CURMOD ,; + '*** Please Wait ***') + + MODREC := RECNO() + IF WHICHITEM <> 'CUTTING SPEC' + MODEL_ONE_REC( MODREC, NEWREC, SELFILE , 'USERFILE3' ) + SELECT (SELFILE) + GOTO NEWREC + REC_LOCK(3) + IF SELFILE = 'PRODUCT' + REPLACE PROD_CODE WITH CURMOD + ELSE + REPLACE CAT_CODE WITH CURMOD + ENDIF + + IF SELFILE = 'PRODUCT' + ATTFILE = 'PROD_ATTS' + OPTFILE = 'PROD_OPTS' + MACC := 'CAT_CODE == MOD_MODEL .AND. !EOF()' + MAC := 'PROD_CODE == MOD_MODEL .AND. !EOF()' + IF COPYCS //** P3N - 9/21/00 + XFILEARR := {'STD_SIZES', 'CUT_SPEC', {'MATHPACK', MACC} , '__PRICES' } + ELSE + XFILEARR := {'STD_SIZES', '__PRICES' } + ENDIF + ELSE + ATTFILE = 'CAT_ATTS' + OPTFILE = 'CAT_OPTS' + XFILEARR := {'PRI_EXTRAS', 'MATHPACK'} + MAC := 'CAT_CODE == MOD_MODEL .AND. !EOF()' + ENDIF + SELECT (ATTFILE) + COPYSTRUCT(USERFILE3) // DEL CDX + + DBOPEN('USERFILE3',.T.) + + //// GET THE ATTRIBUTES + SELECT (ATTFILE) + SEEK MOD_MODEL + DO WHILE &MAC + SELECT USERFILE3 + ADD_ONEREC( ATTFILE, 'USERFILE3') + SELECT USERFILE3 + IF SELFILE = 'PRODUCT' + REPLACE PROD_CODE WITH CURMOD + ELSE + REPLACE CAT_CODE WITH CURMOD + ENDIF + SELECT (ATTFILE) + SKIP 1 + ENDDO + SELECT USERFILE3 + USE + SELECT (ATTFILE) + FIL_LOCK(3) + APPEND FROM &USERFILE3 + UNLOCK + + //// GET THE OPTIONS + DBOPEN(OPTFILE) + COPYSTRUCT(USERFILE3, .T. ) // DEL CDX + + DBOPEN('USERFILE3',.T.) + + SELECT (OPTFILE) + SEEK MOD_MODEL + DO WHILE &MAC + SELECT USERFILE3 + ADD_ONEREC( OPTFILE, 'USERFILE3') + SELECT USERFILE3 + IF SELFILE = 'PRODUCT' + REPLACE PROD_CODE WITH CURMOD + ELSE + REPLACE CAT_CODE WITH CURMOD + ENDIF + SELECT (OPTFILE) + SKIP 1 + ENDDO + SELECT USERFILE3 + USE + SELECT (OPTFILE) + FIL_LOCK(3) + APPEND FROM &USERFILE3 + UNLOCK + ELSE + // CUTTING SPECS ARE ONLY SUBORDINATE ITEMS + MAC := 'PROD_CODE == MOD_MODEL .AND. !EOF()' + MACC := 'CAT_CODE == MOD_MODEL .AND. !EOF()' + XFILEARR := {'CUT_SPEC', {'MATHPACK', MACC} } + ENDIF + + //// GET THE EXTRAS / STD_SIZES / CUTTING SPECS + + + FOR I := 1 TO LEN(XFILEARR) + IF VALTYPE(XFILEARR[I])$'C' + XTRAFILE := XFILEARR[I] + DOMAC := MAC + ELSE + XTRAFILE := XFILEARR[I,1] + DOMAC := XFILEARR[I,2] + ENDIF + + IF XTRAFILE = '__PRICES' + // PROG := 'COPY ?' + ALLTRIM( MOD_MODEL ) + '.DB* ?' + ALLTRIM( CURMOD ) + '.* ' + // DONWAITRUN( PROG ) + // CALL_OLAY( , , PROG ) + + DIRSPEC := '?' + ALLTRIM( MOD_MODEL ) + '.DB*' + DIRARR := DIRECTORY( DIRSPEC ) + FOR II := 1 TO LEN( DIRARR ) + FROMFILE := DIRARR[ II, 1 ] + TOFILE := SUBS( FROMFILE, 1,1 ) + ALLTRIM( CURMOD ) + RIGHT( DIRARR[1][1], 4 ) + COPY FILE ( FROMFILE ) TO ( TOFILE ) + NEXT + + + ELSE + + DBOPEN(XTRAFILE) + APFROM := &UFILENAME + COPYSTRUCT(APFROM, .T. ) // DEL CDX + + DBOPEN(UFILENAME,.T.) + + IF XTRAFILE = 'MATHPACK' + SELECT (UFILENAME) + DELETE ALL + PACK + ENDIF + SELECT (XTRAFILE) + SEEK MOD_MODEL + DO WHILE &DOMAC + SELECT (UFILENAME) + ADD_ONEREC( XTRAFILE, UFILENAME ) + SELECT (UFILENAME) + IF SELFILE = 'PRODUCT' + IF XTRAFILE = 'MATHPACK' + REPLACE CAT_CODE WITH CURMOD + ELSE + REPLACE PROD_CODE WITH CURMOD + ENDIF + ELSE + REPLACE CAT_CODE WITH CURMOD + ENDIF + SELECT (XTRAFILE) + SKIP 1 + ENDDO + SELECT (UFILENAME) + USE + SELECT (XTRAFILE) + FIL_LOCK(3) + APFROM := ALLTRIM( &UFILENAME ) + APPEND FROM &APFROM + UNLOCK + ENDIF + NEXT + SELECT (SAVESEL) + GOTO SAVEREC + IF WHICHITEM = 'CUTTING SPEC' //** P3N - 9/21/00 + FIL_LOCK(3) //** P3N - 9/21/00 + // APFROM := CUT_SPEC //** P3N - 9/21/00 + APFROM := ALLTRIM( CUT_SPEC ) //** P3N - 9/21/00 + APPEND FROM &APFROM FOR PROD_CODE = PRODUCT->PROD_CODE //** P3N - 9/21/00 + UNLOCK //** P3N - 9/21/00 + DBGOTOP() //** P3N - 9/21/00 + ELSE //** P3N - 9/21/00 + RESTSCREEN(,,,,SAVESCR) + ENDIF //** P3N - 9/21/00 + IF WHICHITEM = 'CUTTING SPEC' + RETURN .F. + ENDIF + RETURN .T. +ENDDO + +***************************************************************** +// ASSUMES CALLING PROC WILL PUT THE PROPER KEY INTO THE NEW RECORD + +FUNCTION MODEL_ONE_REC( OLDREC, NEWREC, UPDATEFILE, WORKFILE) +LOCAL COPYTOFILE + +GOTO OLDREC +COPYTOFILE := (WORKFILE) // IE USERFILE3 IS T0BCED03.DBF ETC. +COPYTOFILE := ©TOFILE // IE USERFILE3 IS T0BCED03.DBF ETC. +**IF SELECT(COPYTOFILE) > 0 +** CLOSE ©TOFILE +IF SELECT( WORKFILE ) > 0 + CLOSE &WORKFILE +ENDIF +COPY NEXT 1 TO (COPYTOFILE) +DBOPEN(WORKFILE, .T. ) + +SELECT (UPDATEFILE) +GOTO NEWREC +REC_LOCK(1) +REP_ONEREC(WORKFILE, UPDATEFILE ) +SELECT (WORKFILE) +USE +SELECT (UPDATEFILE) +UNLOCK +GOTO NEWREC + +RETURN + +********************************************************** +FUNCTION CK_PRICE_SHT(CKVAR) + +IF &CKVAR$'DSBLJI' + RETURN .T. +ELSE + ERR_BOX('"D" = Dealer , "S" = Special Dealer' , ; + '"B" = Builder/Build to Stock, "I" = Intercompany ', ; + '"J" = Distributor ( Jobber ), "L" = Lumberman ') + RETURN .F. +ENDIF + + +********************************************************** +// IF THE ORDER IS FOR INSTALLATION, THE PRICE SHEET WILL ALWAYS BE 'B' +// WHEN FUNCTION TO SEE IF WE GET THE PRICE SHEET VARIABLE AT LINE LEVEL + +FUNCTION INIT_PRICESHT() + +IF (CUR_MAST)->PICK_DEL$'I' + RETURN 'B' +ELSE + RETURN ' ' +ENDIF + + +********************************************************** +// IF THE ORDER IS FOR INSTALLATION, THE PRICE SHEET WILL ALWAYS BE 'B' +// WHEN FUNCTION TO SEE IF WE GET THE PRICE SHEET VARIABLE AT LINE LEVEL + +FUNCTION IS_INSTALL() + +IF (CUR_MAST)->PICK_DEL$'I' + REPLACE USERFILE2->PRICE_SHT WITH 'B' + RETURN .F. +ELSE + RETURN .T. +ENDIF + + +********************************************************** +FUNCTION OPEN2100(OPTION, TITLE, REQ_ALIAS, CALL_MENU, WHCHORDER, ARCHIVE) + +LOCAL NDX_EXP, SAVESCR := SAVESCREEN() +STATIC CUR_ALIAS := NIL + +IF EMPTY(ARCHIVE) + ARCHIVE := .F. +ENDIF + +IF WHCHORDER = NIL + WHCHORDER = 'SEL' +ENDIF + +IF REQ_ALIAS = NIL + ERR_BOX('NO ALIAS PASSED TO OPEN2100') + ? ABEND +ENDIF + +WAIT_BOX('*** OPENING ORDER DATABASES ***' , ; + '*** Please Wait ***' ) + +DO CASE + // "NEWOPEN" MEANS SELECTED OFF MAIN MENU - OPEN COMMON FILES HERE. + CASE REQ_ALIAS = 'CONV_QUOTE' + + CLOSE DATABASES + DBOPEN('IMPCUST') + DBOPEN('ORD_MAST') + DBOPEN('ORD_LINES') + DBOPEN('ORDER_OPTS') + DBOPEN('ORD_MISC') + DBOPEN('ADDL_LINES') + DBOPEN('ADDL_OPTS') + DBOPEN('QUOTE_MAST') + DBOPEN('QUOTE_LINE') + DBOPEN('QUOTE_OPTS') + DBOPEN('QUOTE_ADDL') + DBOPEN('ADDL_QOPT') + DBOPEN('QUOTE_MISC') + + CONV_QUOTE(TITLE) + + CUR_ALIAS := NIL + WAIT_BOX('*** Closing Temporary Conversion Files *** ', ; + '*** Please Wait ***') + CLOSE DATABASES + + OPEN_BASEFILES() + + RETURN + + + CASE REQ_ALIAS = 'NEWOPEN' + + IF SELECT('ORD_MAST') = 0 .AND. SELECT('QUOTE_MAST') = 0 + PRIVATE CUR_MAST := NIL + PRIVATE CUR_OL := NIL + PRIVATE CUR_XL := NIL + PRIVATE CUR_OO := NIL + PRIVATE CUR_XO := NIL + PRIVATE CUR_MISC := NIL + + OPEN_BASEFILES(ARCHIVE) + ENDIF + IF REQ_ALIAS = 'NEWOPEN-RETURN' + RETURN + ENDIF + + // NEED THE REAL ORDER DATABASES OPEN IF NOT ALREADY OPEN. + CASE REQ_ALIAS = 'ORDER' .OR. REQ_ALIAS = 'PRT ORD' + IF CUR_ALIAS = 'QUOTE' + ORD_SHUTDOWN() + ENDIF + + IF CUR_ALIAS <> 'ORDER' // COULD BE NIL (1ST TIME) OR QUOTE + SET_ALIAS("ORDER") + CUR_ALIAS := 'ORDER' + + ORD_OPEN() + ENDIF + + IF REQ_ALIAS = 'ORDER' + CALL_MENU := 'CGW2110' + ELSEIF REQ_ALIAS = 'PRT ORD' + IF WHCHORDER = "SEL" + ORD_PRINT(,,"MM", '1') + ELSE + ALL_ORDPR(,,"ALL") + ENDIF + RETURN + ENDIF + + + CASE REQ_ALIAS = 'QUOTE' .OR. REQ_ALIAS = 'PRT QUOTE' + IF CUR_ALIAS = 'ORDER' + ORD_SHUTDOWN() + ENDIF + + IF CUR_ALIAS <> 'QUOTE' // COULD BE NIL (1ST TIME) OR QUOTE + SET_ALIAS("QUOTE") + CUR_ALIAS := 'QUOTE' + + ORD_OPEN() + ENDIF + + IF REQ_ALIAS = 'QUOTE' + CALL_MENU := 'CGW2112' + ELSEIF REQ_ALIAS = 'PRT QUOTE' + ORD_PRINT(,,"MM", '1') + RETURN + ENDIF + + +ENDCASE + +RESTSCREEN(,,,,SAVESCR) + +DO WHILE .T. + CALLMENU(CALL_MENU, OPTION) + IF LASTKEY() = 27 + IF CALL_MENU = 'CGW2100' .OR. CALL_MENU = 'CGW2200' + CUR_ALIAS := NIL + CLOSE DATABASES + ENDIF + RETURN + ENDIF +ENDDO + +RETURN .T. + +******************************************************************* + +FUNCTION OPEN_BASEFILES(ARCHIVE) +IF EMPTY(ARCHIVE) + ARCHIVE := .F. +ENDIF +IF ARCHIVE + DBOPEN('IMPCUST') + DBOPEN('RULES') + DBOPEN('RULEPACK') + DBOPEN('CUST_MAST') + DBOPEN('CUST_ATTS') + DBOPEN('CUST_OPTS') + DBOPEN('PROD_ATTS') + DBOPEN('PROD_OPTS') + DBOPEN('CATEGORY') + DBOPEN('CAT_ATTS') + DBOPEN('CAT_OPTS') + DBOPEN('CUST_PRICE') + DBOPEN('ATTRIBUTES') + DBOPEN('ATT_OPTS') + DBOPEN('MATHPACK') + DBOPEN('STD_SIZES') + DBOPEN('PRI_EXTRAS') + DBOPEN("PRODUCT") + DBOPEN("SALESMEN") + DBOPEN("MFG_LOC") + DBOPEN("TERMS") + DBOPEN("SHIPMETH") + DBOPEN("TAX_DETAIL") + DBOPEN("TAX_SCHED") + DBOPEN("WORKSTAT") + DBOPEN('CUST_BP') + DBOPEN('CUST_PE') + DBOPEN('STD_SASH') + DBOPEN('ATTRIB_CUT') + DBOPEN('CUT_SPEC') + DBOPEN('IPO_FILE') + DBOPEN('MISC_ITEMS') + DBOPEN('UOMFILE') + DBOPEN('SALEHIST') + NET_USE('&PRINTERS', .F., 5, 'PRINTERS') +ELSE + DBOPEN('IMPCUST') + DBOPEN('RULES',,,{1}) + DBOPEN('RULEPACK') + DBOPEN('CUST_MAST') + DBOPEN('CUST_ATTS',,,{2}) + DBOPEN('CUST_OPTS',,,{1}) + DBOPEN('PROD_ATTS',,,{2}) + DBOPEN('PROD_OPTS',,,{1}) + DBOPEN('CATEGORY',,,{1}) + DBOPEN('CAT_ATTS',,,{2}) + DBOPEN('CAT_OPTS',,,{1}) + DBOPEN('CUST_PRICE',,,{1}) + DBOPEN('ATTRIBUTES',,,{1}) + DBOPEN('ATT_OPTS',,,{1}) + DBOPEN('MATHPACK',,,{1}) + DBOPEN('STD_SIZES') + DBOPEN('PRI_EXTRAS') + DBOPEN("PRODUCT",,, {1}) // OPEN PRODUCT FILE FO SINGLE INDEX + DBOPEN("SALESMEN",,, {1}) + DBOPEN("MFG_LOC",,, {1}) + DBOPEN("TERMS") + DBOPEN("SHIPMETH") + DBOPEN("TAX_DETAIL",,, {1} ) + DBOPEN("TAX_SCHED",,, {1} ) + DBOPEN("WORKSTAT") + DBOPEN('CUST_BP') + DBOPEN('CUST_PE') + DBOPEN('STD_SASH') + DBOPEN('ATTRIB_CUT',,, {1}) + DBOPEN('CUT_SPEC',,, {1}) + DBOPEN('IPO_FILE') + DBOPEN('MISC_ITEMS',,,{1}) + DBOPEN('UOMFILE') +** DBOPEN('SALEHIST') //** P3N - 8/13/98 - ADDRESS POSTING LOCKOUT + NET_USE('&PRINTERS', .F., 5, 'PRINTERS') +ENDIF +RETURN + +************************************************************ + +FUNCTION ORD_OPEN() +LOCAL TAGNAME + +DBOPEN(CUR_MISC) + +DBOPEN(CUR_OO) +IF SELECT('USERFILE8') > 0 + SELECT USERFILE8 + USE +ENDIF + +SELECT (CUR_OO) +**COPY STRUCTURE TO &USERFILE8 +COPYSTRUCT(USERFILE8, .T. ) // DEL CDX +NET_USE('&USERFILE8', .T., 3, 'USERFILE8') + +SELECT (CUR_OO) +NDX_EXP = INDEXKEY() +SELECT USERFILE8 +**INDEX ON &NDX_EXP TO &USERFILE8 +IF __DBDRIVER = 'CDX' + TAGNAME := 'T1' + INDEX ON &NDX_EXP TAG &TAGNAME TO &USERFILE8 +ELSE + INDEX ON &NDX_EXP TO &USERFILE8 +ENDIF + + +// NEED TO HAVE THIS ONE READY TO ADD TO / DELETE / RENUMBER + +DBOPEN(CUR_XL) +IF SELECT('USERFILE6') > 0 + SELECT USERFILE6 + USE +ENDIF + +SELECT (CUR_XL) + +COPYSTRUCT( USERFILE6 ) // DEL CDX +NET_USE('&USERFILE6', .T., 3, 'USERFILE6') + +SELECT (CUR_XL) +SAVEORD := INDEXORD() +DONSETORD(1) +NDX_EXP1= INDEXKEY() +DONSETORD(2) +NDX_EXP2= INDEXKEY() +SELECT USERFILE6 + +*INDEX ON &NDX_EXP1 TO &USERFILE6 +*INDEX ON &NDX_EXP2 TO &USERFILET + +IF __DBDRIVER = 'CDX' + TAGNAME := 'T1' + INDEX ON &NDX_EXP1 TAG &TAGNAME TO &USERFILE6 + TAGNAME := 'T2' + INDEX ON &NDX_EXP2 TAG &TAGNAME TO &USERFILE6 +ELSE + INDEX ON &NDX_EXP1 TO &USERFILE6 + INDEX ON &NDX_EXP2 TO &USERFILET + + // 1-20-20 + ORDLISTCLEAR() + ORDLISTADD( USERFILE6 ) + ORDLISTADD( USERFILET ) + +ENDIF +SELECT (CUR_XL) +DONSETORD(SAVEORD) + + +DBOPEN(CUR_XO) +// NEED TO HAVE THIS ONE READY TO DELETE / RENUMBER LINE_NUM'S + +IF SELECT('USERFILE9') > 0 + SELECT USERFILE9 + USE +ENDIF +SELECT (CUR_XO) +**COPY STRUCTURE TO &USERFILE9 +COPYSTRUCT( USERFILE9 ) // DEL CDX +NET_USE('&USERFILE9', .T., 3, 'USERFILE9') + +SELECT (CUR_XO) +NDX_EXP = INDEXKEY() +SELECT USERFILE9 +**INDEX ON &NDX_EXP TO &USERFILE9 +IF __DBDRIVER = 'CDX' + TAGNAME := 'T1' + INDEX ON &NDX_EXP TAG &TAGNAME TO &USERFILE9 +ELSE + INDEX ON &NDX_EXP TO &USERFILE9 +ENDIF + +RETURN +********************************************************************* +FUNCTION ORD_SHUTDOWN() +IF SELECT(CUR_MAST) > 0 + SELECT(CUR_MAST) + USE +ENDIF + +IF SELECT(CUR_OL) > 0 + SELECT(CUR_OL) + USE +ENDIF + +IF SELECT(CUR_MISC) > 0 + SELECT(CUR_MISC) + USE +ENDIF + +SELECT(CUR_XL) +USE +SELECT(CUR_OO) +USE +SELECT(CUR_XO) +USE + +IF SELECT('USERFILE9') > 0 + SELECT USERFILE9 + USE +ENDIF + +IF SELECT('USERFILE8') > 0 + SELECT USERFILE8 + USE +ENDIF + +IF SELECT('USERFILE6') > 0 + SELECT USERFILE6 + USE +ENDIF + +RETURN + +********************************************************************* +*********************************************************************** +FUNCTION SET_ALIAS(WHICH_ALIAS) +IF WHICH_ALIAS = 'ORDER' + CUR_MAST := 'ORD_MAST' + CUR_OL := 'ORD_LINES' + CUR_XL := 'ADDL_LINES' + CUR_OO := 'ORDER_OPTS' + CUR_XO := 'ADDL_OPTS' + CUR_MISC := 'ORD_MISC' +ELSE + IF WHICH_ALIAS = 'QUOTE' + CUR_MAST := 'QUOTE_MAST' + CUR_OL := 'QUOTE_LINE' + CUR_XL := 'QUOTE_ADDL' + CUR_OO := 'QUOTE_OPTS' + CUR_XO := 'ADDL_QOPT' + CUR_MISC := 'QUOTE_MISC' + ENDIF +ENDIF +RETURN + +********************************************** +FUNCTION ORD_PAINT(RA, C1, RB, C2, COLORSPEC, SCRNUM) +LOCAL SAVECOL +IF SELECT('USERFILE8') = 0 + RETURN .T. +ENDIF +SAVECOL := SETCOLOR(&COLORSPEC) +@ RA,C1 SAY 'BILL TO' +@ RA+1,C1 SAY '-------' +@ RB,C2 SAY 'SHIP TO' +@ RB+1,C2 SAY '-------' +SETCOLOR(SAVECOL) +RETURN .T. +********************************************** +FUNCTION ZAP_FILE689(SCRNUM) +LOCAL SAVESEL := SELECT() +IF SELECT('USERFILE8') = 0 + RETURN .T. +ENDIF +SELECT USERFILE8 +ZAP +SELECT USERFILE6 +ZAP +SELECT USERFILE9 +ZAP + +SELECT (SAVESEL) +RETURN .T. + +********************************************** +FUNCTION ORD_USER() + +IF SELECT('USERFILE8') = 0 + RETURN .T. +ENDIF + +REC_LOCK(3) + + +* DOPROC := 'ADD_SING_REC(1, "Order Close", {"ORD_MAST", '+ ; +* '.F., 'ORD_NUM = ??' +* CALL ADD_SING_REC WITH PRICE LINE MISC ITEMS DESC/COST +* SALES TAX % AND TOTAL OF ORDER + + + +//* REPLACE ORD_MAST->USER_ID WITH USER +IF EMPTY(USER_ID) + REPLACE USER_ID WITH USER +ENDIF +IF EMPTY(NEED_CALC) + REPLACE NEED_CALC WITH 'V' // VIRGIN ORDER +ENDIF +// REMOVE TAX SCHED UPDATE 7-24-97 +**IF EMPTY( TAXSCH ) +** REPLACE TAXSCH WITH CUST_MAST->TAXSCH +**ENDIF + +UNLOCK +RETURN .T. + +********************************************** +FUNCTION DISP_ATTACH_PROD() +// DISPLAY THE COLOR OF PRODUCT ON THE LINE ITEM SCREEN FOR EACH MODEL + +RETURN ALLTRIM(USERFILE2->PAR_PROD) + ' ' + ALLTRIM(USERFILE2->PAR_COLOR) + + +********************************************** +* VALIDATE THE TAX SCHEDULE ON ENTRY * +* Perry Nichols 7-24-97 * +********************************************** +FUNCTION VALID_TAXSCH( ) +LOCAL SAVESEL := SELECT(), NEW_TAXSCH +LOCAL MSG1 := "Tax Schedule Lookup" +LOCAL OLDGETS := ACLONE(GETLIST) +LOCAL OLDACTIVE := ACTIVE_GET() +LOCAL ELEM := ASCAN(GETVARS, {|X| TRIM(X[3]) == 'TAXSCH' }) +LOCAL OLD_TAXSCH := GETVARS[ELEM,4] // GET ORIGINAL VALUE OF GET BEFORE GET +LOCAL SAVESCR := SAVESCREEN() + +SELECT TAX_SCHED +SEEK OLD_TAXSCH +IF !FOUND() + @ 2,0 CLEAR + GETLIST := {} // CLEAR THE CURRENT GETS + GBROWSE(,MSG1,{"TAX_SCHED", , .T.} ) + IF LASTKEY() = 27 + NEW_TAXSCH := OLD_TAXSCH + ELSE + NEW_TAXSCH := TAX_SCHED->STAXSCH + ENDIF + GETVARS[ELEM,4] := NEW_TAXSCH +ENDIF + +RESTSCREEN(,,,,SAVESCR) +SELECT (SAVESEL) +GETLIST := RESTGETS(OLDGETS, OLDACTIVE) +RETURN .T. +********************************************** +FUNCTION GET_THE_CUST(WHCHCUST, ACTION, REPVAR ) +LOCAL SAVESEL := SELECT(), NCHOICE, GOODCUST := NIL +LOCAL MSG1 := "CUSTOMER Lookup", BROW_CUST +LOCAL MSG2 := "ADD/CHANGE Customers" +LOCAL PICKARR := {MSG1, MSG2} +LOCAL OLDGETS := ACLONE(GETLIST) +LOCAL OLDACTIVE := ACTIVE_GET() +LOCAL SAVESCR, MARR := {}, SVCUSTORD := 1 +LOCAL NEW_CUSTID, ELEM +STATIC OLD_CUSTID +STATIC BEEN_HERE := NIL + +IF ACTION = 'RESET' + OLD_CUSTID = NIL + BEEN_HERE = NIL + RETURN .T. +ENDIF + +IF ACTION = 'PREBLOCK' + ELEM = ASCAN(GETVARS, {|X| TRIM(X[3]) == 'CUST_ID' }) + OLD_CUSTID := GETVARS[ELEM,4] // GET ORIGINAL VALUE OF GET BEFORE GET + RETURN .T. +ENDIF + +IF ACTION = 'EDIT' .AND. BEEN_HERE = NIL + BEEN_HERE := 'FIRST TIME IN' +ELSE + IF ACTION = 'EDIT' .AND. BEEN_HERE <> NIL + BEEN_HERE := 'BEEN HERE BEFORE' + ENDIF +ENDIF + +SELECT CUST_MAST +SEEK WHCHCUST +NCHOICE := 1 +BROW_CUST := .F. +IF !FOUND() + SAVESCR = SAVESCREEN() + @ 2,0 CLEAR + GETLIST := {} // CLEAR THE CURRENT GETS + IF ALPHACUST(WHCHCUST) //** P3N - 8/4/99 + IF GETCUSTNAME(WHCHCUST) //** P3N - 8/4/99 + SVCUSTORD := CUST_MAST->(INDEXORD()) //** P3N - 8/4/99 + CUST_MAST->(DBSETORDER(2)) //** P3N - 8/4/99 + GBROWSE(,"Customer LOOKUP", {"CUST_MAST" } ) + DONSETORD(SVCUSTORD) //** P3N - 8/4/99 + ELSE //** P3N - 8/4/99 + GBROWSE(,"Customer LOOKUP", {"CUST_MAST", , .T. } ) + ENDIF //** P3N - 8/4/99 + GOODCUST := CUST_MAST->CUST_ID //** P3N - 8/4/99 + RESTSCREEN(,,,,SAVESCR) //** P3N - 8/4/99 + BROW_CUST := .T. //** P3N - 8/4/99 + ELSE + DO WHILE .T. + NCHOICE = LISTBOX(PICKARR,NCHOICE,'Select Choice') + IF LASTKEY() = 27 + RESTSCREEN(,,,,SAVESCR) + SELECT (SAVESEL) + GETLIST := RESTGETS(OLDGETS, OLDACTIVE) // RESTORE OLD GETLIST! + RETURN .F. + ENDIF + IF NCHOICE = 1 + GBROWSE(,"Customer LOOKUP", {"CUST_MAST", , .T.} ) + IF LASTKEY() <> 27 + GOODCUST := CUST_MAST->CUST_ID + RESTSCREEN(,,,,SAVESCR) + BROW_CUST := .T. + EXIT + ENDIF + ELSE + IF NCHOICE = 2 + GOTO BOTTOM + SKIP 1 + ADD_SING_REC(1,"CUSTOMER Maintenance", {"CUST_MAST", .T., , , , 3, 'ADD', , .F.} ) + IF EOF() .OR. BOF() + ELSE + GOODCUST := CUST_MAST->CUST_ID + ENDIF + ENDIF + ENDIF + ENDDO + RESTSCREEN(,,,,SAVESCR) + ENDIF +ELSE + GOODCUST = WHCHCUST +ENDIF + +SELECT (SAVESEL) +GETLIST := RESTGETS(OLDGETS, OLDACTIVE) + +IF BROW_CUST + IF REPVAR <> NIL .AND. LASTKEY() = 13 + REPLACE &REPVAR WITH CUST_MAST->CUST_ID + DISP_CUST_STAR() + RETURN .T. + ELSE + CLEAR TYPEAHEAD + KEYBOARD CUST_MAST->CUST_ID + RETURN .F. + ENDIF +ENDIF + +// ONLY VALID CUST_ID'S FROM INPUT SCREEN GOT THIS FAR + + +IF GOODCUST <> NIL + GETVARS[1,4] := GOODCUST + + // MSL 5-4-94 + SELECT CUST_MAST + + // LAYOUT FOR MARR + // 1 = FIELD NAME OR FUNCTION THAT HAS THE VALUE TO DISPLAY + // 2 = IF ELEMENT 1 ISN'T THE FIELD NAME THAT IS IN THE 'GETVARS' + // ARRAY, THEN ELEMENT 2 MUST BE USED! + + IF OLD_CUSTID <> GOODCUST + OLD_CUST = GOODCUST + AADD(MARR, {'NOTE_FIELD', 'NOTE_FIELD'}) + AADD(MARR, {'NOTE_FLD2', 'NOTE_FLD2'}) //** P3N - 12/27/00 + AADD(MARR, {'PRNT_NOTES', 'PRNT_NOTES'}) + AADD(MARR, {'COMP_NAME', 'BILL_NAME'}) + AADD(MARR, {'CUST_ADDR', 'BILL_ADD1'}) + AADD(MARR, {'CUST_ADDR2', 'BILL_ADD2'}) + AADD(MARR, {'CUST_CSZ(30)', 'BILL_CSZ'}) + AADD(MARR, {'PHONE'}) + AADD(MARR, {'FAX'}) //** P3N - 08/09/01 + AADD(MARR, {'SHIPNAME', 'SHIP_NAME'}) + AADD(MARR, {'SHIPADD1', 'SHIP_ADD1'}) + AADD(MARR, {'SHIP_CSZ(30)', 'SHIP_CSZ'}) + AADD(MARR, {'SHIPPHN'}) + AADD(MARR, {'SHIPFAX'}) //** P3N - 08/09/01 + + AADD(MARR, {'SLSMAN'}) + AADD(MARR, {'TAXSCH'}) + IF (CUR_MAST)->(FIELDPOS('CONT_FNAME'))> 0 //** P3N - 12/26/01 + AADD(MARR, {'CONT_FNAME'}) //** P3N - 12/26/01 + ENDIF //** P3N - 12/26/01 + IF EMPTY((CUR_MAST)->TERMS) + AADD(MARR, {'TERMS'}) + ELSE + AADD(MARR, {'TERMS', '(CUR_MAST)->TERMS'}) + ENDIF + AADD(MARR, {'PICK_DEL'}) + AADD(MARR, {'SHP_METHOD'}) + AADD(MARR, {'DEL_ROUTE'}) + + AADD(MARR, {'PRICE_SHT'}) + AADD(MARR, {'DISCOUNT'}) + AADD(MARR, {'VAL(STR(STAX_RATE(NIL, 2 ),7,4))','SLS_TX_PCT'}) + AADD(MARR, {'ORIEL_CHRG'}) + + // DISPLAY ALL THESE FIELD VALUES ON THE SCREEN (VIA THE GETLIST) + UPDATE_GETS(MARR) + ENDIF + + DISP_CUST_STAR() + SELECT (SAVESEL) + RETURN .T. +ELSE + SELECT (SAVESEL) + RETURN .F. +ENDIF + +*********************************************************************** +//** P3N - 8/4/99 +//** CHECK FOR ALPHA ENTRY ON CUSTOMER NUMBER +*********************************************************************** +FUNCTION ALPHACUST(WHCHCUST) //** P3N - 8/4/99 +LOCAL RETVAL := .F. +IF SUBST(WHCHCUST, 1,1)$'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + RETVAL := .T. +ENDIF +RETURN RETVAL //** P3N - 8/4/99 +*********************************************************************** +//** P3N - 8/4/99 +//** CHECK FOR NAME ENTRY, AND LOOKUP ON CUSTOMER NAME IF ALPHA ENTRY +*********************************************************************** +FUNCTION GETCUSTNAME(WHCHCUST) //** P3N - 8/4/99 +LOCAL RETVAL := .F. //** P3N - 8/4/99 +LOCAL SVCUSTORD := CUST_MAST->(INDEXORD()) //** P3N - 8/4/99 +LOCAL SEEKKEY := REMOVENUM(WHCHCUST) //** P3N - 8/4/99 +CUST_MAST->(DBSETORDER(2)) //** P3N - 8/4/99 +IF CUST_MAST->(DBSEEK(SEEKKEY, .T.)) //** P3N - 8/4/99 + RETVAL := .T. //** P3N - 8/4/99 +ENDIF //** P3N - 8/4/99 +DONSETORD(SVCUSTORD) //** P3N - 8/4/99 +RETURN RETVAL //** P3N - 8/4/99 +*********************************************************************** +//** P3N - 8/4/99 +//** REMOVE FOR NUMERIC CHARS FROM CUSTOMER KEY +*********************************************************************** +FUNCTION REMOVENUM(WHCHCUST) //** P3N - 8/4/99 +LOCAL RETVAL := '', I +FOR I := 1 TO LEN(WHCHCUST) + IF SUBST(WHCHCUST, I,1)$'1234567890' + ELSE + RETVAL := RETVAL + SUBSTR(WHCHCUST,I,1) + ENDIF +NEXT +RETURN RETVAL //** P3N - 8/4/99 +*********************************************************************** +* Display message to identify CUSTOMER notes existance ! +*********************************************************************** +FUNCTION DISP_CUST_STAR() +LOCAL SAVECOLOR := SETCOLOR() + +IF !EMPTY( CUST_MAST->CUST_NOTES ) + SETCOLOR(BLOW) + @ 3,0 SAY '* Customer NOTES *' + SETCOLOR(SAVECOLOR) +ELSE + @ 3,0 SAY ' ' +ENDIF +RETURN .T. + +*********************************************************************** +* Display message to identify ORDER/QUOTE notes existance ! +*********************************************************************** +FUNCTION NOTES_MSG(WHAT_NOTES) +LOCAL SAVECOLOR := SETCOLOR() + +IF WHAT_NOTES == 'O' // Order Processing + IF !EMPTY( ORD_MAST->NOTES ) + SETCOLOR(BLOW) + @ 4,0 SAY '** Order NOTES **' + SETCOLOR(SAVECOLOR) + ELSE + @ 4,0 SAY ' ' + ENDIF +ELSEIF WHAT_NOTES == 'Q' // Quote processing + IF !EMPTY( QUOTE_MAST->NOTES ) + SETCOLOR(BLOW) + @ 4,0 SAY '** Quote NOTES **' + SETCOLOR(SAVECOLOR) + ELSE + @ 4,0 SAY ' ' + ENDIF +ELSE + @ 4,0 SAY ' ' +ENDIF + +RETURN + +********************************************** + +FUNCTION FIND_CP_REC(MPROD_CODE) +LOCAL SAVESEL := SELECT() +LOCAL MCAT_CODE := GET_CATCODE(USERFILE2->PROD_CODE) +LOCAL SEEKKEY, RETVAL := .F. +LOCAL CAT_RECORD := 0 +LOCAL PROD_RECORD := 0 + +SELECT CUST_PRICE +SEEKKEY := (CUR_MAST)->CUST_ID + MCAT_CODE +SEEK SEEKKEY +DO WHILE CUST_PRICE->CUST_ID + CUST_PRICE->CAT_CODE == SEEKKEY + IF EMPTY(CUST_PRICE->PROD_CODE) + CAT_RECORD := RECNO() + ELSE + IF CUST_PRICE->PROD_CODE == MPROD_CODE + PROD_RECORD := RECNO() + GOTO BOTTOM + ENDIF + ENDIF + SKIP 1 +ENDDO + +IF PROD_RECORD = 0 .AND. CAT_RECORD = 0 +ELSE + RETVAL := .T. + // MODEL LEVEL OVERRIDES CATEGORY LEVEL + IF PROD_RECORD > 0 + GOTO PROD_RECORD + ELSE + IF CAT_RECORD > 0 + GOTO CAT_RECORD + ENDIF + ENDIF +ENDIF +RETURN RETVAL + +********************************************** +// CALCS THE DISCOUNT % AS FOLLOWS: +// IF THE DISCOUNT IS 0 +// 1. IF CUST_PRICE CATEGORY DISCOUNT RULE APPLIES, USE THAT DISC. +// 2. IF ORD_MAST->DISCOUNT <> 0, USE THAT DISC. + +FUNCTION CALC_DISC(MPROD_CODE) +LOCAL SAVESEL := SELECT() +LOCAL SEEKKEY, RETVAL := 0 +LOCAL CAT_RECORD := 0 +LOCAL PROD_RECORD := 0, BP:=0, OP:=0, EP:=0 +LOCAL CP_STUFF := FIND_CP_REC(MPROD_CODE), RETPS := ' ' + +IF CP_STUFF + SELECT CUST_PRICE + IF IN_STOCK = 'Y' .AND. USERFILE2->IN_STOCK <> 'Y' + ELSEIF STD_SIZE = 'Y' .AND. USERFILE2->STD_SIZE <> 'Y' + // SO FAR WE ARE IN BUSINESS! + ELSE + RETVAL := DISCOUNT + RETPS := PRICE_SHT + BP := CUST_PRICE->BASE_PRICE + EP := CUST_PRICE->EXT_PRICE + OP := CUST_PRICE->OPT_PRICE + ENDIF + SELECT (SAVESEL) +ENDIF +RETURN {RETVAL, RETPS, BP, OP, EP} + +***************************************************************** +FUNCTION VALID_CP_PROD(MCAT_CODE, MPROD_CODE) +LOCAL SAVESEL := SELECT(), RETVAL := .F. +LOCAL THISREC := RECNO(), NEW_PROD + +LOCATE FOR DUP_PRODUCT(MCAT_CODE, MPROD_CODE, THISREC) + +IF FOUND() + ERR_BOX('*** ERROR - You have entered ****', ; + '*** DUPLICATE Category/Product Codes ****', ; + '*** PLEASE Re-enter OR "?" to Browse ****') + + GOTO THISREC + RETURN .F. +ENDIF + +GOTO THISREC +IF EMPTY(MPROD_CODE) + RETVAL := .T. +ELSE + SELECT PRODUCT + SEEK MPROD_CODE + IF FOUND() + SELECT USERFILE2 + IF MCAT_CODE <> NIL + REPLACE USERFILE2->CAT_CODE WITH PRODUCT->CAT_CODE + ENDIF + RETVAL := .T. + ELSE + SELECT USERFILE2 +****VAL_LOOKUP(MPROD_CODE, 'PRODUCT', '@_@', {'PROD_CODE', 'DESC'} , 'Y' ,.F., 'USERFILE2->PROD_CODE',{4,20}) + RETVAL := VAL_PRODUCT( '"' + MPROD_CODE + '"', , .F., .F. ) +** KEYBOARD CHR(13) + ENDIF + SELECT (SAVESEL) +ENDIF +RETURN RETVAL + +************************************************************** + +FUNCTION DUP_PRODUCT(MCAT_CODE, MPROD_CODE, THISREC) +LOCAL BIG_KEY +IF MCAT_CODE <> NIL + BIG_KEY := MCAT_CODE + MPROD_CODE +ELSE + BIG_KEY := MPROD_CODE +ENDIF + +IF RECNO() = THISREC + RETURN .F. +ENDIF + +IF MCAT_CODE <> NIL + IF USERFILE2->CAT_CODE + USERFILE2->PROD_CODE == BIG_KEY + RETURN .T. + ENDIF +ENDIF + +IF !EMPTY(USERFILE2->PROD_CODE) + IF USERFILE2->PROD_CODE == MPROD_CODE + RETURN .T. + ENDIF +ENDIF +RETURN .F. + +********************************************************* +FUNCTION EDIT_PS(MPROD_CODE) +LOCAL CP_STUFF := FIND_CP_REC(MPROD_CODE) +IF CP_STUFF + REPLACE USERFILE2->PRICE_SHT WITH CUST_PRICE->PRICE_SHT +ENDIF +RETURN .T. + +* +********************************************************* +FUNCTION VAL_PR_STR(STR2CK) + +LOCAL CK_STR, I, SAVESEL := SELECT() +LOCAL M1 := '*** You MUST INDICATE the PRICE SHEET ***' +LOCAL M2 := ' To Apply this EXTRA CALCULATION. ' +LOCAL M3 := ' ' +LOCAL M4 := ' VALID CHOICES ARE "DSBLJIU" ' +LOCAL M5 := ' (U = ALL USER DEFINED Special Pricing)' + +CK_STR := ALLTRIM(&STR2CK) +IF EMPTY(CK_STR) + ERR_BOX(M1, M2, M3, M4, M5) + RETURN .F. +ELSE + // CUSTOMER SPECIAL PRICING ITEM + FOR I = 1 TO LEN(CK_STR) + IF !SUBS(CK_STR,I,1)$'DSBLJIU' + ERR_BOX(M1, M2, M3, M4, M5) + RETURN .F. + ENDIF + NEXT +ENDIF +RETURN .T. + +***************************************************************** +FUNCTION VAL_CUSTPE_ID(PASSKEY) +LOCAL M1 := '*** Invalid Customer ID' +LOCAL M2 := '*** ? to Browse ' +LOCAL M3 := '*** Blank to Delete ' +LOCAL SAVESEL := SELECT(), RETVAL := .T. +IF EMPTY(CUST_ID) + // - DELETED RECORD - USER CLEARED THE CUST_ID! PERRY 2-13-98 + RETVAL := .T. +ELSE + IF !CUST_MAST->(DBSEEK(PASSKEY)) + IF GET_THE_CUST( PASSKEY, "EDIT", 'CUST_ID') + SELECT (SAVESEL) + RETVAL := .T. + ELSE + ERR_BOX(M1, M2, M3) + RETURN .F. + ENDIF + ENDIF +ENDIF +*REPLACE CAT_CODE WITH CATEGORY->CAT_CODE +*REPLACE OPTION WITH USERFILE2->OPTION +*REPLACE UPDATED WITH 'Y' +RETURN RETVAL +********************************************************* +* FUNCTION VAL_PR_STR(STR2CK) +* +* LOCAL CK_STR, I, SAVESEL := SELECT() +* LOCAL M1 := '*** You MUST INDICATE the PRICE SHEET ***' +* LOCAL M2 := ' To Apply this EXTRA CALCULATION. ' +* LOCAL M3 := ' ' +* LOCAL M4 := ' VALID CHOICES ARE "DSBLJIU" ' +* LOCAL M5 := ' (U = ALL USER DEFINED Special Pricing)' +* LOCAL M6 := ' or Input a VALID CUSTOMER ID (? to Browse)' +* +* CK_STR := ALLTRIM(&STR2CK) +* IF EMPTY(CK_STR) +* ERR_BOX(M1, M2, M3, M4, M5, M6) +* RETURN .F. +* ELSE +* // CUSTOMER SPECIAL PRICING ITEM +* FOR I = 1 TO LEN(CK_STR) +* IF !SUBS(CK_STR,I,1)$'DSBLJIU' +* I := 9999 +* ENDIF +* NEXT +* IF I < 9999 +* RETURN .T. +* ENDIF +* IF !CUST_MAST->(DBSEEK(CK_STR)) +* IF GET_THE_CUST( CK_STR, "EDIT", 'PRICE_SHT') +* SELECT (SAVESEL) +* RETURN .T. +* ENDIF +* ERR_BOX(M1, M2, M3, M4, M5, M6) +* RETURN .F. +* ENDIF +* ENDIF +* RETURN .T. +* +* +* +* * * * * * * * * * * * * * * * * * * ** +FUNCTION CALL_GP +// GO THRU OVERLAY AND CALL THE GREAT PLAINS SYSTEM + +LOCAL MGP_CALL + +DBOPEN('CONTROL') +MGP_CALL := ALLTRIM(GP_CALL) +USE + +CALL_OLAY(,, MGP_CALL) + +RETURN + + + +* * * * * * * * * * * * * * * * * * * ** +FUNCTION CALL_BTREV +// GO THRU OVERLAY AND CALL THE BTRIEVE BROWSE & IMPORT + +LOCAL PROG := 'CGWB' + +CALL_OLAY(,, 'CGWBTRV.BAT') + +RETURN + + +* * * * * * * * * * * * * * * * * * * ** +FUNCTION CHK_GPCUST(MGP_CUSTID) +// MAKE SURE THAT THEY DON'T ENTER A GP NUMBER THAT IS ALREADY +// IN USE (DURING ADDREC) + +LOCAL SAVESEL := SELECT(), SAVEORD +LOCAL SAVEREC := RECNO() + +IF NEWREC .AND. !EMPTY(MGP_CUSTID) + SELECT CUST_MAST + SAVEORD = INDEXORD() // SAVE THE ORDER + DONSETORD(4) // GP_CUSTID KEY + SEEK MGP_CUSTID + IF FOUND() + DONSETORD(SAVEORD) + SELECT(SAVESEL) + GOTO SAVEREC + ?? CHR(7) + ERR_BOX('That GP CUST ID is already being used' , ; + 'by ' + TRIM(COMP_NAME)) + RETURN .F. + ENDIF + DONSETORD(SAVEORD) + SELECT(SAVESEL) + GOTO SAVEREC +ENDIF +RETURN .T. + +*************************************************************** + +********************************************************************** +* CONVERT A QUOTE TO AN ORDER +********************************************************************** +FUNCTION CONV_QUOTE(TITLE) +LOCAL SV_SCREEN +LOCAL SV_SEL := SELECT() +LOCAL QMAST_PARMS := GET_FILEPARMS('QUOTE_MAST') +LOCAL MGET_KEY +LOCAL NEW_ORDR, DEL_QUOTE := .F. +LOCAL SVREC := RECNO() +LOCAL ACDPARMS := GETACD_PARM('QUOTE_MAST') +LOCAL UPDATE_CHILD := GETACD_PARM('QUOTE_LINE') +LOCAL GETVARARR := GET_ONE_PARMS(QMAST_PARMS, ACDPARMS) + +PRIVATE _CUROPT := 1 // USED FOR GET ORDER NUMBER ???? + +CLS +SAYTITLE(TITLE, '2300') + +SELECT QUOTE_MAST +DO WHILE .T. + MGET_KEY := GET_KEY(QMAST_PARMS) + IF EMPTY(MGET_KEY) .OR. LASTKEY() = 27 + EXIT + ENDIF + SV_SCREEN := SAVESCREEN() + + IF !DBSEEK(MGET_KEY) + LOOP + ENDIF + + NEW_ORDR := GET_ORD_NUM('QCNV') + + IF !PROMPT_BOX('*** About to CONVERT QUOTE ' + ALLTRIM(MGET_KEY) + ' to ORDER ' + ALLTRIM(NEW_ORDR), ; + '*** DO YOU WISH TO CONTINE? ', ' ' ) + RESET_CNTL('ORDER') + LOOP + ENDIF + + IF PROMPT_BOX('DELETE the Quote after Conversion?', ; + ' ', ' ' ) + DEL_QUOTE := .T. + ELSE + DEL_QUOTE := .F. + ENDIF + + IF LASTKEY() = 27 + RESET_CNTL('ORDER') + LOOP + ENDIF + + IF ALREADY_CONV(MGET_KEY) // HAS this quote already been converted??? + ELSE + RESET_CNTL('ORDER') + EXIT // ABORT THE CONVERSION + ENDIF + + WAIT_BOX('*** CONVERTING QUOTE - ' + ALLTRIM(MGET_KEY) + ' TO ORDER - ' + ALLTRIM(NEW_ORDR), ; + '*** Please Wait' ) + +//* MODEL QUOTE MASTER FILE FROM AN ORDER MASTER FILE +****5-8-97 +* COPY NEXT 1 TO &USERFILE3 +* DBOPEN('USERFILE3', .T.) + + SELECT ORD_MAST +****5-8-97 +**FIL_LOCK(3) +**APPEND FROM &USERFILE3 + ADD_ONEREC( 'QUOTE_MAST', 'ORD_MAST' ) + SELECT('QUOTE_MAST') //** P3N - 5/24/99 + REC_LOCK(3) //** P3N - 5/24/99 + REPLACE QUOTE_NUM WITH NEW_ORDR //** P3N - 5/24/99 + REPLACE ORDER_DATE WITH DATE() //** P3N - 5/24/99 + DBUNLOCK() //** P3N - 5/24/99 + SELECT ORD_MAST + REPLACE QUOTE_NUM WITH QUOTE_MAST->ORDER_NUM + REPLACE ORDER_NUM WITH NEW_ORDR + REPLACE IDATE_FST WITH CTOD(' / / ') + REPLACE ITIME_FST WITH ' ' + REPLACE IDATE_LAST WITH CTOD(' / / ') + REPLACE ITIME_LAST WITH ' ' + SELECT ORD_MAST + UNLOCK + +//* MODEL QUOTE DETAIL FILES FROM ORDER DETAIL FILES + + QUOTECOPY(MGET_KEY, NEW_ORDR, 'QUOTE_LINE', 'ORD_LINES') + + QUOTECOPY(MGET_KEY, NEW_ORDR, 'QUOTE_OPTS', 'ORDER_OPTS') + + QUOTECOPY(MGET_KEY, NEW_ORDR, 'QUOTE_ADDL', 'ADDL_LINES') + + QUOTECOPY(MGET_KEY, NEW_ORDR,'ADDL_QOPT', 'ADDL_OPTS') + + QUOTECOPY(MGET_KEY, NEW_ORDR, 'QUOTE_MISC', 'ORD_MISC') + + IF DEL_QUOTE + DEL_ARR := {} + CORR = GET_ONE_REC(2, QMAST_PARMS, MGET_KEY, ACDPARMS, NIL, NIL, {'QUOTE_LINE','QUOTE_ADDL', 'QUOTE_OPTS', 'ADDL_QOPT'}, GETVARARR, , .F., , , , .F.) // NO AUDIT PROC OR CONFIRM DELETE! + ENDIF +ENDDO + +RESTSCREEN(,,,, SV_SCREEN) +SELECT(SV_SEL) +RETURN + +**************************************************************** +//** DETERMINE WHAT TO DISPLAY AS THE QUOTE CONVERTION DATE? +**************************************************************** +FUNCTION QO_CONV_DATE() +LOCAL RETVAL := ' / / ' +IF EMPTY(QUOTE_MAST->QUOTE_NUM) +ELSE + RETVAL := DTOC(QUOTE_MAST->ORDER_DATE) +ENDIF +RETURN RETVAL +**************************************************************** +** DETERMINE IF this quote HAS already been converted??? +**************************************************************** +FUNCTION ALREADY_CONV(QUOTE_NUM) +LOCAL RETVAL, M1, M2, M3 +LOCAL SVSEL := SELECT() +LOCAL SVORD := INDEXORD() +SELECT ORD_MAST +SET ORDER TO 3 // QUOTE NUMBER INDEX +IF DBSEEK(QUOTE_NUM) + CLEAR TYPEAHEAD + M1 := 'Quote number - ' + QUOTE_NUM + ' has ALREADY been converted.' + M2 := ' ' + M3 := ' CONTACT SUPERVISOR TO RE-CONVERT THIS QUOTE ' + ERR_BOX(M1,M2,M3) + IF LASTKEY() == 126 // "~" + RETVAL := .T. //Quote ALREADY converted, allow conversion - OVERRIDE + ELSE + RETVAL := .F. //Quote ALREADY converted, DO NOT allow conversion + ENDIF +ELSE + RETVAL := .T. //Quote NEVER converted, allow conversion +ENDIF +SET ORDER TO SVORD +SELECT(SVSEL) +RETURN RETVAL +**************************************************************** + +FUNCTION QUOTECOPY(Q_NUM, NEW_ORDR, DATAFROM, FINALFILE) + +LOCAL APP_FROM +LOCAL DATATO := 'USERFILE3' +LOCAL COPYTO := &DATATO + +SELECT (DATAFROM) +**COPY STRUCT TO ©TO +COPYSTRUCT( COPYTO , .T. ) + +DBOPEN(FINALFILE) + +SELECT (DATAFROM) +SEEK Q_NUM +DO WHILE ORDER_NUM == Q_NUM .AND. !EOF() + ADD_ONEREC( DATAFROM, FINALFILE ) + SELECT (FINALFILE) + REPLACE ORDER_NUM WITH NEW_ORDR + UNLOCK + SELECT (DATAFROM) + SKIP 1 +ENDDO + +*****05-7-97 +** SELECT (DATAFROM) +** **COPY STRUCT TO ©TO +** COPYSTRUCT( COPYTO , .T. ) +** +** DBOPEN(DATATO,.T.) +** +** SELECT (DATAFROM) +** SEEK Q_NUM +** DO WHILE ORDER_NUM == Q_NUM .AND. !EOF() +** ADD_ONEREC( DATAFROM, DATATO ) +** SELECT (DATAFROM) +** SKIP 1 +** ENDDO +** +** SELECT (DATATO) +** REPLACE ALL ORDER_NUM WITH NEW_ORDR +** USE +** +** SELECT (FINALFILE) +** FIL_LOCK(3) +** APP_FROM := &DATATO +** APPEND ALL FROM &APP_FROM +** UNLOCK +** +RETURN + + +********************************************************************** +FUNCTION CNV_ADDR(CSZ, EXTR_FLD) +LOCAL POS, POS2, ZIP_FND := .F., RET_VAL + +CSZ := ALLTRIM(CSZ) +IF EMPTY(CSZ) +ELSE + POS := RAT(' ', CSZ) + IF POS > 0 + IF EXTR_FLD == 'CITY' + CSZ := ALLTRIM(SUBSTR(CSZ, 1, POS)) + POS := RAT(' ', CSZ) + IF POS > 0 + RET_VAL := ALLTRIM(SUBSTR(CSZ, 1, POS)) + ELSE + POS := RAT(',', CSZ) + IF POS > 0 + RET_VAL := ALLTRIM(SUBSTR(CSZ, 1, POS-1)) + ENDIF + ENDIF + + ELSEIF EXTR_FLD == 'STATE' + ZIP_FND := FIND_ZIP(CSZ) + IF ZIP_FND + CSZ := ALLTRIM(SUBSTR(CSZ, 1, POS)) + POS2 := RAT(' ', CSZ) + IF POS2 > 0 + RET_VAL := ALLTRIM(SUBSTR(CSZ, POS2, POS-POS2)) + ELSE + POS2 := RAT(',', CSZ) + IF POS2 > 0 + POS2++ + RET_VAL := ALLTRIM(SUBSTR(CSZ, POS2, POS-POS2)) + ENDIF + ENDIF + ENDIF + IF EMPTY(RET_VAL) + ELSE + IF LEN(RET_VAL) == 2 + ELSE + RET_VAL := NIL //STATE S/B AT LEAST 2 POSITIONS + ENDIF + ENDIF + ELSEIF EXTR_FLD == 'ZIP' + ZIP_FND := FIND_ZIP(CSZ) + IF ZIP_FND + RET_VAL := ALLTRIM(SUBSTR(CSZ, POS+1, LEN(CSZ)-POS)) + ENDIF + ENDIF + ENDIF +ENDIF + +IF RET_VAL <> NIL + RET_VAL := STRTRAN(RET_VAL, ',') // GET RID OF COMMA'S +ENDIF +RETURN RET_VAL + +***************************************************************** + + +FUNCTION FIND_ZIP(CSZ) +LOCAL I, NUM_CTR := 0 +FOR I := 1 TO LEN(CSZ) + IF SUBSTR(CSZ, I, 1)$'1234567890' + NUM_CTR++ + ENDIF +NEXT +IF NUM_CTR > 4 + RETURN .T. +ELSE + RETURN .F. +ENDIF + + +****************************************************************** + +FUNCTION CUT_SALEHIST( MORDER_NUM, MGL_ARR, MAPIXCODE ) + +//** P3N - 01/22/07 ADDED THE TAX ARRAY TO GET DETAILS +//** FOR THE ABW INTERFACE +LOCAL TAX_ARR := STAX_RATE( (CUR_MAST)->TAXSCH ) // GET THE TAX ARRAY +LOCAL TAX_DESC := TAX_ARR[3] // DESCRIPTION +LOCAL TAX_DET := TAX_ARR[4] // ALL COMPONENTS {RATE, DESC, GL_NUM} +LOCAL TAXCODE := 0 + +LOCAL I, SEEKKEY, SAVESEL := SELECT() +LOCAL RECARR := {} +LOCAL WORKARR + +SEEKKEY := MORDER_NUM +SELECT SALEHIST +SEEK SEEKKEY +DO WHILE ORDER_NUM = SEEKKEY .AND. !EOF() + AADD( RECARR, RECNO() ) + REC_LOCK(1) + REPLACE UPDATED WITH 'P' + SKIP 1 +ENDDO + +IF EMPTY(MGL_ARR) + UPD_SALEHIST(MORDER_NUM, ' ' , MAPIXCODE, (CUR_MAST)->TOTAL_AMT, 0,' ') +//**UPD_SALEHIST(MORDER_NUM, ' ' , MAPIXCODE, (CUR_MAST)->TOTAL_AMT) +ELSE + FOR I := 1 TO LEN(MGL_ARR) + TAXCODE := ASCAN( TAX_DET, {| X | ALLTRIM(MGL_ARR[I,1]) == ALLTRIM(X[3])} ) + IF EMPTY(TAXCODE) + //** NO TAX DETAIL FOUND + UPD_SALEHIST(MORDER_NUM, MGL_ARR[I,1], MAPIXCODE, MGL_ARR[ I, 2 ], 0 , ' ' ) + ELSE + // order # gl acct # GL AMT TAX PERCENT TAX AUTH CODE + UPD_SALEHIST(MORDER_NUM, MGL_ARR[I,1], MAPIXCODE, MGL_ARR[ I, 2 ], TAX_DET[TAXCODE,1], TAX_DET[TAXCODE,4] ) + ****UPD_SALEHIST(MORDER_NUM, GL_ARR[I,1], MAPIXCODE, GL_ARR[ I, 2 ]) + ENDIF + NEXT +ENDIF + +FOR I := 1 TO LEN( RECARR ) + GOTO RECARR[I] + IF UPDATED$'P' + REC_LOCK(1) + REPLACE ORDER_NUM WITH ' ' + REPLACE GL_NUM WITH ' ' + DELETE + ENDIF +NEXT + +SELECT (SAVESEL) +RETURN .T. + +****************************************************************** +* UPDATE THE SALE HISTORY RECORD APPROPRIATELY +****************************************************************** +//**FUNCTION UPD_SALEHIST(MORDER_NUM, GL_NUM, MAPIXCODE, GL_AMT ) +FUNCTION UPD_SALEHIST(MORDER_NUM, GL_NUM, MAPIXCODE, GL_AMT, PTXPCT, PTXCODE) +LOCAL SEEKKEY := MORDER_NUM + GL_NUM +SEEK SEEKKEY +IF !FOUND() + ADD_REC() + REPLACE ORDER_NUM WITH MORDER_NUM + REPLACE GL_NUM WITH GL_NUM +ELSE + REC_LOCK(1) +ENDIF +REPLACE UPDATED WITH ' ' +REPLACE COMP_CODE WITH MAPIXCODE +REPLACE CUST_ID WITH (CUR_MAST)->CUST_ID +REPLACE IDATE_FST WITH (CUR_MAST)->IDATE_FST +REPLACE IDATE_LAST WITH (CUR_MAST)->IDATE_LAST +REPLACE SLSMAN WITH ( CUR_MAST )->SLSMAN +REPLACE AMOUNT WITH GL_AMT +IF FIELDPOS('TXPCT') > 0 + REPLACE TXPCT WITH PTXPCT +ENDIF +IF FIELDPOS('TXCODE') > 0 + IF EMPTY(PTXCODE) + //** NOT A TAX GL ACCOUNT - DO NOT UPDATE RECORD + ELSE + REPLACE TXCODE WITH PTXCODE + ENDIF +ENDIF +IF EMPTY(PTXCODE) + //** THIS IS NOT A TAX GL - DO NOT INCLUDE THE TAX SCHEDULE HERE +ELSE + //** THIS IS A TAX GL - INCLUDE THE TAX SCHEDULE HERE + REPLACE TAXSCHED WITH ( CUR_MAST )->TAXSCH +ENDIF +RETURN +****************************************************************** + +FUNCTION CUT_BILLTRAN( MORDER_NUM, MGL_ARR, PARTIAL_INVOICE ) + +LOCAL I, SEEKKEY, SAVESEL := SELECT(), TXBL := 0 +LOCAL RECARR := {} +LOCAL WORKARR, RCODE := '' + +STATIC MAPIXCODE + +IF CUR_MAST <> 'ORD_MAST' + RETURN .T. +ENDIF + + + + + +IF MAPIXCODE = NIL + MFG_LOC->(DBSEEK( MHOME_LOC_CODE )) + MAPIXCODE := MFG_LOC->MAPIX_CODE +ENDIF + +SEEKKEY := MORDER_NUM +IF SELECT('BILLTRAN') > 0 + SELECT BILLTRAN +ELSE + DBOPEN('BILLTRAN') +ENDIF +SEEK SEEKKEY +DO WHILE ORDER_NUM = SEEKKEY .AND. !EOF() + AADD( RECARR, RECNO() ) + REC_LOCK(1) + REPLACE UPDATED WITH 'P' + SKIP 1 +ENDDO + +FOR I := 1 TO 2 + // order # + IF I = 1 + RCODE := 'RE' + ELSE + RCODE := 'RF' + ENDIF + SEEKKEY := MORDER_NUM + RCODE + SEEK SEEKKEY + IF !FOUND() + ADD_REC() + REPLACE ORDER_NUM WITH MORDER_NUM + REPLACE RCDCD WITH RCODE + REPLACE ACREC WITH 'A' + REPLACE COMNO WITH MAPIXCODE + REPLACE AGECD WITH '0' + ELSE + REC_LOCK(1) + ENDIF + REPLACE UPDATED WITH ' ' + REPLACE CUSNR WITH (CUR_MAST)->CUST_ID + REPLACE INVNR WITH PADINDEX( VAL( (CUR_MAST)->INVOICENUM ), 6 ) + REPLACE CLTCR WITH '0' + REPLACE MATCH WITH '00000' + IF I = 1 + REPLACE CRMNR WITH '000000' + WORKDATE := DTOC( (CUR_MAST)->IDATE_FST ) +*** REPLACE TRNDT WITH SUBS( WORKDATE,7,2) + SUBS(WORKDATE,1,2) + SUBS(WORKDATE,4,2) + REPLACE TRNDT WITH SUBS( WORKDATE,1,2) + SUBS(WORKDATE,4,2) + SUBS(WORKDATE,7,2) + REPLACE SALCD WITH 'R' + REPLACE INVAM WITH ( CUR_MAST )->TOTAL_AMT + REPLACE TXAM1 WITH ( CUR_MAST )->SALES_TAX //** P3N - 01/26/07 + IF ZERO_ORDER() //** P3N - 02/20/07 + REPLACE TXAM1 WITH 0 //** P3N - 02/20/07 + ENDIF //** P3N - 02/20/07 + REPLACE SLSNR WITH ( CUR_MAST )->SLSMAN + IF FIELDPOS('TXBLAMT') > 0 + //** P3N - 01/22/07 - ABW INTERFACE + TXBL := (CUR_MAST)->ORD_L_TTL - (CUR_MAST)->ORD_D_TTL + (CUR_MAST)->ORD_M_TTL + TXBL += (CUR_MAST)->MISC_QTY1 * (CUR_MAST)->MISC_AMT1 + TXBL += (CUR_MAST)->MISC_QTY2 * (CUR_MAST)->MISC_AMT2 + TXBL += (CUR_MAST)->MISC_QTY3 * (CUR_MAST)->MISC_AMT3 + TXBL += (CUR_MAST)->FUEL_CHRG + //**REPLACE TXBLAMT WITH TXBL //** P3N - 02/20/07 + IF ZERO_ORDER() //** P3N - 02/20/07 + REPLACE TXBLAMT WITH 0 //** P3N - 02/20/07 + ELSE //** P3N - 02/20/07 + REPLACE TXBLAMT WITH TXBL //** P3N - 02/20/07 + ENDIF //** P3N - 02/20/07 + ENDIF + IF FIELDPOS('TXSCHED') > 0 + //** P3N - 01/22/07 - ABW INTERFACE + REPLACE TXSCHED WITH ( CUR_MAST )->TAXSCH + ENDIF + ELSE + // NOTHING TO DO? + ENDIF +NEXT + +FOR I := 1 TO LEN( RECARR ) + GOTO RECARR[1] + IF UPDATED$'P' + REC_LOCK(1) + REPLACE ORDER_NUM WITH ' ' + REPLACE RCDCD WITH ' ' + DELETE + ENDIF +NEXT + +CUT_SALEHIST( MORDER_NUM, MGL_ARR, MAPIXCODE ) + +SELECT BILLTRAN +USE +SELECT (SAVESEL) +IF PARTIAL_INVOICE //** P3N - 12/01/98 + INVOICE_SHIPPED(MORDER_NUM) //** MARK ALL SHIPPED ITEMS AS INVOICED +ELSE + INVOICE_ALL(MORDER_NUM) //** MARK ALL ITEMS AS INVOICED +ENDIF +RETURN .T. +***************************************************************** +* Create the BILLING transaction file to be sent to the AS/400 +***************************************************************** +FUNCTION POST_BILLTRAN(OPTION, TITLE) +LOCAL COPYFILE := '', WORKFILE := USERFILE1 + '.TXT', CREATECODE := 0 +LOCAL M1 := '', M2 := '', M3 := '', BATCH_APPEND := .T. , OUTVAR := '' +LOCAL SV_COLOR := SETCOLOR(), SVCLR, PROG := '', RPT_DONE := .F. +LOCAL ABWFILE := '', RETVAL := .T., CONT := .T. +LOCAL SVSCRN := SAVESCREEN() +//**L SV_COLOR := SETCOLOR(), SVCLR, PROG, BKUPFILE, BKUPDIR + +DBOPEN('CONTROL') +ABWFILE := ALLTRIM(CONTROL->ABWSENDFIL) +SETCOLOR(SV_COLOR) +IF EMPTY(ABWFILE) + //** DO NOT CUT THE ABW FILE + //** - NOT REQUESTED (IE: VALID FILE NAME IN CONTROLFILE) +ELSE + CLS + SAYTITLE( TITLE, 'POST' ) + + @ 10,10 SAY ' *** About to Create the ABW transaction file ' + @ 12,10 SAY SPACE(5)+'file name is - ' + ABWFILE + + CORR := CORRCHEK() + + IF CORR$'Y' + + + + IF CUT_ABWTRANS(ABWFILE) + DBOPEN('BILLTRAN') + DBOPEN('CONTROL') + // PRINT BILLTRAN IF ANY ENTRIES + IF LASTREC() > 0 + SVSCRN := SAVESCREEN() + PRNTDISP( 1, 'Billing Transaction Recap', 'BILLTRAN RECAP-F',.F., .F.,.T. ) // DON'T CLOSE DBFS + PRNT_DAYSALES() + RESTSCREEN(,,,,SVSCRN) + SETCOLOR(SV_COLOR) + ENDIF + RPT_DONE := .T. + ENDIF + ENDIF +ENDIF + +CLS +SAYTITLE( TITLE, 'POST' ) + +@ 10,10 SAY ' *** About to Post Invoices to History ' +@ 11,10 SAY ' *** and Send Transactions to AS/400 ' +CORR := CORRCHEK() + +IF CORR$'Y' + IF FILE(WORKFILE) + SVCLR := SETCOLOR(HREV) + @ 08,10 SAY ' ***** W A R N I N G W A R N I N G ***** ' + SETCOLOR(SVCLR) + @ 10,10 SAY ' Billing DATA for transfer ALREADY EXISTS ' + @ 11,10 SAY ' DO you want to: ' + @ 14,10 SAY ' YES - ADD this batch to the EXISTING batch.' + @ 16,10 SAY ' NO - DELETE the EXISTING batch sending this batch ONLY.' + CORR := CORRCHEK(,,,,2) + IF CORR$'Y' + BATCH_APPEND := .T. + ELSEIF CORR$'N' + BATCH_APPEND := .F. + ELSE + //**RETURN .T. + RETVAL := .T. + CONT := .F. + ENDIF + ENDIF + + IF CONT + @ 10,0 CLEAR + WAIT_BOX( '*** Posting Invoice Transactions to ', ; + '*** History and Creating MAPIX Transfer File') + + + + + DBOPEN('BILLTRAN') + DBOPEN('CONTROL') + IF RPT_DONE + //** REPORT ALREADY PRINTED DURING ABW PROCESS - DO NO PRINT AGAIN + ELSE + // PRINT BILLTRAN IF ANY ENTRIES AND NOT ALREADY DONE + IF LASTREC() > 0 + PRNTDISP( 1, 'Billing Transaction Recap', 'BILLTRAN RECAP-F',.F., .F.,.T. ) // DON'T CLOSE DBFS + PRNT_DAYSALES() + ENDIF + ENDIF + + + + + + + + COPYFILE := CONTROL->BT_SENDFIL + IF CPYTRFILE(@COPYFILE , WORKFILE, @CREATECODE ) + //** TRANS FILE SUCCESSFULY COPIED TO RUNTIME FOLDER + SELECT BILLTRAN + SET FILTER TO + + + BILLTRAN->(DBGOTOP()) + IF BILLTRAN->(EOF()) + // NO DATA TO POST + ELSE + DO WHILE BILLTRAN->(!EOF()) + IF RCDCD = 'RE' + + OUTVAR := RCDCD + ACREC + COMNO + CUSNR + AGECD + INVNR ; + + CRMNR + TRNDT + SALCD + CLTCR ; + + PADINDEX( DON_INT( INVAM * 100 ), 13 ) ; + + PADINDEX( DON_INT( CDSAL * 100 ), 13 ) ; + + SLSNR ; + + PADINDEX( DON_INT( INSCA * 100 ), 13 ) ; + + PADINDEX( DON_INT( INVFR * 100 ), 13 ) ; + + PADINDEX( DON_INT( 0 * 100 ), 13 ) ; //** send 0 to mapix for tax + + SPACE(19) ; + + MATCH + //** p3n 01/26/07 + PADINDEX( DON_INT( TXAM1 * 100 ), 13 ) ; //** txam1 now contains total sales tax for report + + ELSE + + OUTVAR := RCDCD + ACREC + COMNO + CUSNR + AGECD + INVNR ; + + PADINDEX( DON_INT( INCST * 100 ), 13 ) ; + + SHPWT ; + + PADINDEX( DON_INT( DAINT * 100 ), 13 ) ; + + PADINDEX( DON_INT( VAL(AGEDT) ), 6 ) ; + + SPACE(62) ; + + MATCH + //*********** + PADINDEX( DON_INT( SHPWT * 10 ), 9 ) ; + + ENDIF + + WRITEOUT( CREATECODE, OUTVAR ) + BILLTRAN->(DBSKIP(+1)) + + ENDDO + FCLOSE(CREATECODE) // CLOSE REPORT FILE + + RETVAL := BATCH_POSTED(BATCH_APPEND, COPYFILE, WORKFILE, 'MAPIX') + ENDIF + ENDIF + ENDIF +ENDIF + +CLOSE DATABASES +RETURN RETVAL + +//*************************************************************** +//** P3N - 01/23/07 +//** ASK THE USER IF THE BATCH POSTED SUCCESSFULLY +//** IF SO - CLEAR OUT FOR NEXT BATCH +//** ELSE - LEAVE ALONE +//*************************************************************** +FUNCTION BATCH_POSTED(PBATCH_APPEND, PCPYFILE, PWKFILE, CMD) +LOCAL RETVAL := .T., M1 := '', M2 := '', M3 := '' +LOCAL PROG := '' +LOCAL COPYFILE := PCPYFILE, WORKFILE := PWKFILE, BATCH_APPEND := PBATCH_APPEND +LOCAL BKUPFILE := '' +LOCAL COPYFROM +LOCAL DATA1, DATA2, DATA3 + +COPYFILE := ALLTRIM( COPYFILE ) // 10-12-2020 +WORKFILE := ALLTRIM( WORKFILE ) // 10-12-2020 + + +DATA1 := MEMOREAD( COPYFILE ) +DATA2 := MEMOREAD( WORKFILE ) +IF BATCH_APPEND + //DATA1 := MEMOREAD( COPYFILE ) + //DATA2 := MEMOREAD( WORKFILE ) + LL_MEMOWRIT( COPYFILE, DATA1 + DATA2 ) // APPEND 1/20/20 + // PROG := 'COPY ' + COPYFILE + ' + ' + WORKFILE + ' ' + COPYFILE +ELSE + LL_MEMOWRIT( COPYFILE, DATA2 ) // JUST NEW DATA 1/20/20 + //PROG := 'COPY ' + WORKFILE + ' ' + COPYFILE +ENDIF + +//CALL_OLAY( ,, PROG ) + +SETCOLOR(LNOR) +@ 10,0 CLEAR +M1 := ' *** DID the '+CMD+ ' Batch Transfer to ABW Properly? ' +M2 := ' ' +M3 := ' ' +IF EMPTY(CMD) .OR. CMD = 'MAPIX' + M1 := ' *** DID the '+CMD+ ' Batch Transfer to the AS/400 Properly? ' + //** M1 := ' *** DID the Batch Transfer to the AS/400 Properly? ' + M2 := ' ' + M3 := ' ' +ENDIF +CLOSE DATABASES + + + +IF CMD = 'MAPIX' + //** AT THIS TIME ONLY ASK FOR THE MAPX FILE + IF PROMPT_BOX(M1,M2,M3, 1) //Default to YES - transfered properly! + DBOPEN('BILLPOST', .T.) + // APPEND FROM &BILLTRAN + COPYFROM := ALLTRIM( BILLTRAN ) + // APPEND FROM &BILLTRAN + APPEND FROM ©FROM + + CLOSE BILLPOST + WAIT_BOX('** Performing CleanUp **', ; + '** Please Wait **') + BKUPFILE := ALLTRIM(SUBST(BILLTRAN, 3,8)) + '.DBF' + PROG := 'GDG.BAT BILLTRAN BAK' + CALL_OLAY( ,, PROG ) + + PROG := 'GDG.BAT SALEHIST BAK' + CALL_OLAY( ,, PROG ) + + PROG := 'COPY ' + BKUPFILE + ' ' + 'BILLTRAN.BAK' + //CALL_OLAY( ,, PROG ) + COPYFILE ( BKUPFILE, 'BILLTRAN.BAK' ) // 1/20/20 + + BKUPFILE := ALLTRIM(SUBST(SALEHIST, 3,8)) + '.DBF' + PROG := 'COPY ' + BKUPFILE + ' ' + 'SALEHIST.BAK' + // CALL_OLAY( ,, PROG ) + COPYFILE ( BKUPFILE, 'SALESHIST.BAK' ) + + + DBOPEN('SALEHIST') + DBOPEN('BILLTRAN', .T.) + DO WHILE BILLTRAN->(!EOF()) + IF SALEHIST->(DBSEEK(BILLTRAN->ORDER_NUM)) + DO WHILE BILLTRAN->ORDER_NUM == SALEHIST->ORDER_NUM + SELECT SALEHIST + REC_LOCK(5) + REPLACE POST_DATE WITH DATE() + REPLACE POST_TIME WITH TIME() + UNLOCK + SALEHIST->(DBSKIP(+1)) + ENDDO + SELECT BILLTRAN + REC_LOCK(5) + DELETE + UNLOCK + BILLTRAN->(DBSKIP(+1)) + REC_LOCK(5) + DELETE + UNLOCK + ENDIF + BILLTRAN->(DBSKIP(+1)) + ENDDO + SELECT BILLTRAN + PACK + ENDIF +ENDIF + +RETURN RETVAL + +//*************************************************************** +//** P3N - 01/23/07 ** +//** COPY THE TRANSACTION FILE TO THE RUNTIME FOLDER FOR BKUP ** +//*************************************************************** +FUNCTION CPYTRFILE(PCPYFILE, WORKFILE, CREATECODE) + +LOCAL RETVAL := .T. +LOCAL COPYFILE := ALLTRIM(PCPYFILE), BKUPDIR := '', BKUPFILE := '', COPYEXT := '.TXT' +LOCAL FILSTRT := AT('\', COPYFILE), PROG +LOCAL EXTSTRT := AT('.', COPYFILE) + + +EXTSTRT := EXTSTRT+1 + +IF EMPTY(FILSTRT) + BKUPDIR := 'DATA' + BKUPFILE:= 'TRANS01' +ELSE + BKUPDIR := ALLTRIM(SUBST(COPYFILE,1,FILSTRT-1)) + BKUPFILE := ALLTRIM(SUBST(COPYFILE,FILSTRT+1,((EXTSTRT-1)-FILSTRT-1))) +ENDIF + +IF EMPTY(EXTSTRT) + COPYEXT := 'TXT' +ELSE + //**COPYEXT := ALLTRIM(SUBSTR(COPYFILE,EXTSTRT,LEN(COPYFILE)-EXTSTRT) ) + COPYEXT := SUBSTR(COPYFILE,EXTSTRT ) +ENDIF + +//PROG := 'COPY '+ COPYFILE +// CALL_OLAY( ,, PROG ) + + + + +TOFILE := SUBS( COPYFILE, AT( '\', COPYFILE )+1 ) +COPYFILE( COPYFILE, TOFILE ) + +PROG := 'GDG.BAT '+BKUPFILE+' '+COPYEXT +CALL_OLAY( ,, PROG ) + +CREATECODE := FCREATE(WORKFILE) +IF CREATECODE < 0 + ?? ' ' + CHR(7) + ERR_BOX('** Trans file CREATE ERROR **', ; + ' file name - ' + WORKFILE ) + //**? 'TRANS FILE CREATE ERROR' + CHR(7) + //**WAIT + ?? ' ' + CHR(7) + RETVAL := .F. +ENDIF + +RETURN RETVAL + +***************************************************************** +//** P3N - 01/23/07 +//** Create the ABW INTERFACE +***************************************************************** + +FUNCTION CUT_ABWTRANS(ABWFILE) + +LOCAL RETVAL := .T., CORR := '', BATCH_APPEND := .T., CONT := .T., ASH := {}, I := 0 +LOCAL WKABW := USERFILE3+'.TXT', OUTVAR := '', CREATECODE := 0, AREC := {}, BREC := {} + +IF FILE(WKABW) + SVCLR := SETCOLOR(HREV) + @ 08,05 SAY ' ***** ABW W A R N I N G ABW W A R N I N G ABW ***** ' + SETCOLOR(SVCLR) + @ 10,10 SAY ' ABW Transactions ALREADY EXIST '+SPACE(30) + @ 11,10 SAY ' DO you want to: ' + @ 14,10 SAY ' YES - ADD this batch to the EXISTING ABW Transactions.' + @ 16,10 SAY ' NO - DELETE EXISTING batch sending ONLY this batch to ABW.' + CORR := CORRCHEK(,,,,2) + IF CORR$'Y' + BATCH_APPEND := .T. + ELSEIF CORR$'N' + BATCH_APPEND := .F. + ELSE + RETVAL := .F. + CONT := .F. + ENDIF +ENDIF + + + + +IF CONT + IF CPYTRFILE(@ABWFILE, WKABW, @CREATECODE) + //**READY TO GO + DBOPEN('BILLTRAN') + DBOPEN('SALEHIST') + DBOPEN('BILLPOST', .T.) + + //** + @ 10,0 CLEAR + WAIT_BOX( '*** Creating the ABW Transaction ', ; + '*** Transfer File - ' + ABWFILE ) + + SELECT BILLTRAN + SET FILTER TO + //**GOTO TOP + BILLTRAN->(DBGOTOP()) + + + + + + + IF BILLTRAN->(EOF()) + // NO DATA TO POST + ELSE + DO WHILE BILLTRAN->(!EOF()) + ASH := GET_SH() + AREC := ASH[1] + BREC := ASH[2] + IF BILLTRAN->RCDCD = 'RE' + OUTVAR := 'A' + BILLTRAN->COMNO + BILLTRAN->INVNR + OUTVAR += BILLTRAN->CUSNR + BILLTRAN->TRNDT + OUTVAR += PADINDEX( DON_INT( BILLTRAN->INVAM * 100 ), 13, 'ABW' ) + OUTVAR += BILLTRAN->SLSNR + OUTVAR += PADINDEX( DON_INT( BILLTRAN->TXBLAMT*100 ), 13, 'ABW' ) + OUTVAR += BILLTRAN->TXSCHED + FOR I := 1 TO 9 + IF I <= LEN(AREC) + OUTVAR += AREC[I,1] //** TAX AUTH CODE + OUTVAR += PADINDEX( DON_INT( AREC[I,3]*100000), 7, 'ABW' ) //**TAX PCT + OUTVAR += PADINDEX( DON_INT( AREC[I,2]*100 ), 13, 'ABW' ) //**TAX AMT + ELSE + OUTVAR += ' ' + OUTVAR += PADINDEX( DON_INT( 0 ), 7 , 'ABW' ) + OUTVAR += PADINDEX( DON_INT( 0 ), 13, 'ABW' ) + ENDIF + NEXT + WRITEOUT( CREATECODE, OUTVAR ) + FOR I := 1 TO LEN(BREC) + OUTVAR := 'B' + BILLTRAN->COMNO + BILLTRAN->INVNR + OUTVAR += BREC[I,1] + OUTVAR += PADINDEX( DON_INT( BREC[I,2]*100 ), 13, 'ABW' ) + WRITEOUT( CREATECODE, OUTVAR ) + NEXT + ENDIF + BILLTRAN->(DBSKIP(+1)) + ENDDO + ENDIF + FCLOSE(CREATECODE) // CLOSE REPORT FILE + RETVAL := BATCH_POSTED(BATCH_APPEND, ABWFILE, WKABW, 'ABW') + IF FILE('CGW2ABW.BAT') //** P3N - 02/21/07 + CALL_OLAY( ,, 'CGW2ABW.BAT') //** P3N - 02/21/07 + ENDIF + ENDIF +ENDIF +CLOSE DATABASES +RETURN RETVAL +***************************************************************** +//** P3N - 01/24/07 +//** ABW INTERFACE FILE +//** GET ALL SALEHIST INFO FOR A BILLTRAN RECORD +***************************************************************** +FUNCTION GET_SH() +LOCAL AREC := {}, BREC := {} +LOCAL SEEKKEY := BILLTRAN->ORDER_NUM +IF SALEHIST->(DBSEEK(SEEKKEY)) + DO WHILE SALEHIST->ORDER_NUM == SEEKKEY .AND. ; + SALEHIST->(!EOF()) + AADD(BREC, {SALEHIST->GL_NUM, SALEHIST->AMOUNT}) + IF EMPTY(SALEHIST->TXCODE) + ELSE + AADD(AREC, {SALEHIST->TXCODE, SALEHIST->AMOUNT, SALEHIST->TXPCT}) + ENDIF + SALEHIST->(DBSKIP(+1)) + ENDDO +ENDIF +RETURN {AREC,BREC} +***************************************************************** +* Clear the current billing transaction file. +***************************************************************** +FUNCTION ZAP_BILLTRAN(OPTION, TITLE) +LOCAL COPYFILE, WORKFILE := USERFILE1 + '.TXT', CREATECODE, OUTVAR +LOCAL M1, M2, M3 + +CLS +SAYTITLE( TITLE, 'BZAP' ) + +M1 := ' *** DO You Wish to ZAP the Current File' +M2 := ' *** Without going thru the AS/400 Post' +M3 := ' ' + +IF PROMPT_BOX(M1,M2,M3) + DBOPEN('BILLTRAN', .T.) + SELECT BILLTRAN + ZAP +ENDIF +IF LASTKEY() = 27 + RETURN +ENDIF + +CLOSE DATABASES + +RETURN + +***************************************************************** +* Review the billing transaction files which have been posted. +***************************************************************** +FUNCTION REV_BILLTRAN(OPTION ,TITLE ) +LOCAL SVSCRN := SAVESCREEN(), PROG := '' +LOCAL CHOICE := 0, DISPFILE := 'SEND*.0*' +LOCAL WORKARR, FILSTRT, EXTSTRT, CURFILE +LOCAL DISPLARR := {}, STRT := 1, FILNM, FILSZ, FILDT, FILTM +DBOPEN('CONTROL') +DISPFILE := CONTROL->BT_SENDFIL +USE +WORKARR := DIRECTORY(DISPFILE) +//**IF EMPTY(WORKARR) +//** ERR_BOX('** NO file(s) found to review! **') +//**ELSE + CURFILE := ALLTRIM(DISPFILE) + IF FILE(CURFILE) + DISPLARR := BLD_DISPLARR(WORKARR, DISPLARR) + ELSE + DISPLARR := { CURFILE } + ENDIF + FILSTRT := AT('\', DISPFILE) + EXTSTRT := AT('.', DISPFILE) + EXTSTRT := EXTSTRT+1 + IF EMPTY(FILSTRT) + DISPFILE:= 'TRANS' + ELSE + DISPFILE := ALLTRIM(SUBST(DISPFILE,FILSTRT+1,((EXTSTRT-1)-FILSTRT-1))) + ENDIF + WORKARR := DIRECTORY(DISPFILE+'*.0*') + //** SORT IN DATE/TIME ORDER + WORKARR := ASORT(WORKARR,,,{|X,Y| DTOS(X[3])+X[4] > DTOS(Y[3])+Y[4] }) + CLS + SAYTITLE( TITLE, 'REVBT' ) + DISPLARR := BLD_DISPLARR(WORKARR, DISPLARR) + **DISPLARR := ASORT(DISPLARR,,,{|X,Y| SUBST(X,1,12) < SUBST(Y,1,12) }) + IF EMPTY(WORKARR) + ERR_BOX('** NO file(s) found to review! **') + ELSE + DO WHILE .T. + CHOICE = PICKLIST(DISPLARR, 05, 20, 'Select File to Review', STRT, .F., .T.) + IF LASTKEY() = 27 + EXIT + ENDIF + PROG := '' + IF CHOICE = 1 + IF FILE(CURFILE) + PROG := 'BROWSE ' + CURFILE + PROG := 'NOTEPAD.EXE ' + CURFILE + ELSE + ERR_BOX('** File '+ CURFILE + ' NOT found to review! **') + ENDIF + ELSE + // PROG := 'BROWSE ' + WORKARR[CHOICE-1,1] + PROG := 'NOTEPAD.EXE ' + WORKARR[CHOICE-1,1] + ENDIF + IF EMPTY(PROG) + //** NO BROWSE - CONTINUE + ELSE + CALL_OLAY(,,PROG, 0, '', '') + ENDIF + ENDDO + ENDIF +//**ENDIF +RESTSCREEN(,,,,SVSCRN) +RETURN +//**************************************************** +//** P3N 01/25/07 - ABW TRANSACTION INTERFACE +//**************************************************** +FUNCTION REV_ABWTRAN(OPTION ,TITLE ) +LOCAL SVSCRN := SAVESCREEN(), PROG := '' +LOCAL CHOICE := 0, DISPFILE := 'ABWT*.0*' +LOCAL WORKARR, FILSTRT, EXTSTRT, CURFILE +LOCAL DISPLARR := {}, STRT := 1, FILNM, FILSZ, FILDT, FILTM +DBOPEN('CONTROL') +DISPFILE := CONTROL->ABWSENDFIL +USE +WORKARR := DIRECTORY(DISPFILE) +CURFILE := ALLTRIM(DISPFILE) +IF FILE(CURFILE) + DISPLARR := BLD_DISPLARR(WORKARR, DISPLARR) +ELSE + DISPLARR := { CURFILE } +ENDIF +FILSTRT := AT('\', DISPFILE) +EXTSTRT := AT('.', DISPFILE) +EXTSTRT := EXTSTRT+1 +IF EMPTY(FILSTRT) + DISPFILE:= 'ABWTR' +ELSE + DISPFILE := ALLTRIM(SUBST(DISPFILE,FILSTRT+1,((EXTSTRT-1)-FILSTRT-1))) +ENDIF +WORKARR := DIRECTORY(DISPFILE+'*.0*') + //** SORT IN DATE/TIME ORDER +WORKARR := ASORT(WORKARR,,,{|X,Y| DTOS(X[3])+X[4] > DTOS(Y[3])+Y[4] }) +CLS +SAYTITLE( TITLE, 'REVABW') +DISPLARR := BLD_DISPLARR(WORKARR, DISPLARR) +IF EMPTY(WORKARR) + ERR_BOX('** NO file(s) found to review! **') +ELSE + DO WHILE .T. + CHOICE = PICKLIST(DISPLARR, 05, 20, 'Select File to Review', STRT, .F., .T.) + IF LASTKEY() = 27 + EXIT + ENDIF + PROG := '' + IF CHOICE = 1 + IF FILE(CURFILE) + // PROG := 'BROWSE ' + CURFILE + PROG := 'NOTEPAD ' + CURFILE + ELSE + ERR_BOX('** File '+ CURFILE + ' NOT found to review! **') + ENDIF + ELSE + // PROG := 'BROWSE ' + WORKARR[CHOICE-1,1] + PROG := 'NOTEPAD.EXE ' + WORKARR[CHOICE-1,1] + ENDIF + IF EMPTY(PROG) + //** NO BROWSE - CONTINUE + ELSE + CALL_OLAY(,,PROG, 0, '', '') + ENDIF + ENDDO +ENDIF +RESTSCREEN(,,,,SVSCRN) +RETURN +************************************************************** +* +************************************************************** +FUNCTION BLD_DISPLARR(WORKARR, DISPLARR, NOSIZE) +IF EMPTY(NOSIZE) + NOSIZE := .F. +ENDIF +FOR I := 1 TO LEN(WORKARR) + FILNM := WORKARR[I,1] + FILSZ := STR(WORKARR[I,2], 12) + FILDT := DTOC(WORKARR[I,3]) + FILTM := WORKARR[I,4] + IF NOSIZE + AADD(DISPLARR, FILNM + ' ' + FILDT + ' ' + FILTM) + ELSE + AADD(DISPLARR, FILNM + ' ' + FILSZ + ' '+ FILDT + ' ' + FILTM) + ENDIF +NEXT +RETURN DISPLARR +************************************************************** +FUNCTION PRNT_DAYSALES() +LOCAL SEEKKEY, SAVESEL := SELECT() + +IF SELECT('SALEHIST') > 0 //** P3N - 7/22/98 ENSURE ALL TRANS. + SELECT(SALEHIST) //** WRITTEN TO DISK PRIOR TO CREATING + USE //** THE SALES HISTORY RECAP RPT. +ENDIF +DBOPEN( 'SALEHIST',.T. ) +COPY STRUCT TO &USERFILE1 +NET_USE( USERFILE1, .T., 3, 'USERFILE1') + +SELECT BILLTRAN + +GOTO TOP +DO WHILE !EOF() + SEEKKEY := BILLTRAN->ORDER_NUM + SELECT SALEHIST + SEEK SEEKKEY + DO WHILE ORDER_NUM == SEEKKEY .AND. !EOF() + ADD_ONEREC( 'SALEHIST', 'USERFILE1' ) + SELECT SALEHIST + SKIP 1 + ENDDO + SELECT BILLTRAN + SKIP 1 +ENDDO + +CLOSE USERFILE1 +CLOSE SALEHIST +NET_USE( USERFILE1, .F. , 3, 'SALEHIST') + +PRNTDISP( 1, 'Daily Sales History Recap', 'SALEHIST RECAP-F',.F., .F.,.T. ) // DON'T CLOSE DBFS + +CLOSE SALEHIST +SELECT(SAVESEL) + +RETURN .T. + +******************************************************************* +* REPLACE ALL (LAST) PRINT DATES WITH EMPTY VALUES +******************************************************************* +FUNCTION REPL_PRNTDT(KEY, FLD_DATE, FLD_TIME, FLD) +LOCAL SV_SCRN := SAVESCREEN() +LOCAL OGET := GETACTIVE() +LOCAL SV_SEL := SELECT() +LOCAL MSG, CORR +IF EMPTY(OGET) .OR. KEY = OGET:BUFFER + // NO CHANGES +ELSE + KEY := OGET:BUFFER + IF FLD_DATE = 'DDATE' + MSG := 'Delivery Tickets ' + ELSEIF FLD_DATE = 'IDATE' + MSG := 'Customer Invoices ' + ELSEIF FLD_DATE = 'PDATE' + MSG := 'Production Orders ' + ELSEIF FLD_DATE = 'ODATE' + MSG := 'Order Desk Copies ' + ELSEIF FLD_DATE = 'XDATE' + MSG := 'Intercompany POs ' + ELSEIF FLD_DATE = 'BDATE' + MSG := 'PreBill Invoices ' + ELSEIF FLD_DATE = 'CDATE' + MSG := 'PreCost Invoices ' + ELSEIF FLD_DATE = 'GDATE' + MSG := 'Golden Rod Copies ' + ELSEIF FLD_DATE = 'BODATE' //** P3N - 4/30/98 + MSG := 'Backorder Copies ' + ELSE + MSG := ' ' + ENDIF + CORR := PROMPT_BOX('Do you want to REPRINT ALL ' + MSG , ' ', ; + 'From Order# - ' + ALLTRIM(KEY) ,1) + IF LASTKEY() == 27 + ELSE + IF CORR + REC_LOCK() + REPLACE &FLD WITH KEY + UNLOCK + WAIT_BOX('Reseting ALL ' + MSG ) + DBOPEN('ORD_MAST') + SET SOFTSEEK ON + IF FLD_DATE = 'BODATE' //** P3N - 4/30/98 + UPD_DT := FLD_DATE + '_LST' + ELSE + UPD_DT := FLD_DATE + '_LAST' + ENDIF + IF FLD_TIME = 'BOTIME' //** P3N - 4/30/98 + UPD_TM := FLD_TIME + '_LST' + ELSE + UPD_TM := FLD_TIME + '_LAST' + ENDIF + IF DBSEEK(KEY) + DBSKIP(+1) + ENDIF + SET SOFTSEEK OFF + DO WHILE !EOF() + REC_LOCK() + REPLACE &UPD_DT WITH CTOD(' / / ') + REPLACE &UPD_TM WITH SPACE(LEN(&UPD_TM)) + UNLOCK + DBSKIP(+1) + ENDDO + USE + SELECT(SV_SEL) + ENDIF + ENDIF +ENDIF +RESTSCREEN(,,,,SV_SCRN) +RETURN .T. + + +************************************************************** +* STRIP THE DECIMAL OUT OF THE DOLLAR AMOUNT +************************************************************** +FUNCTION DON_INT(PASS_VAL) +LOCAL STRVAR, RETVAL, DECPT +STRVAR := STR(PASS_VAL) +DECPT = AT('.', STRVAR) +IF DECPT = 0 + RETVAL = VAL(STRVAR) +ELSE + RETVAL = VAL(SUBSTR(STRVAR,1,DECPT-1) ) +ENDIF + +RETURN INT(RETVAL) +************************************************************** +* Validate the line notes print indicator +************************************************************** +FUNCTION LNOTES_VALID() +IF PRT_NOTES$' ABU' + RETURN .T. +ELSE + ERR_BOX(' *** Invalid value for Prt Notes Indicator ***', ; + ' *** "A" - print notes ABOVE line item ***' ,; + ' *** "B" - print notes BESIDE line item ***' ,; + ' *** "U" - print notes UNDER line item ***' ) + RETURN .F. +ENDIF + + + +************************************************************** +* LEFT PAD A NUMBER TO ? POSITIONS WITH '0', AND RETURN A CHAR STRING +************************************************************** + +FUNCTION PADINDEX(VAR2PAD, PADPOS, CMD) +LOCAL ZEROS := REPLICATE ( '0', PADPOS ) + +IF AT('-', STR(VAR2PAD)) > 0 // IS THIS NUMBER NEGATIVE?? + IF EMPTY(CMD) //** P3N - 02/15/07 + //** MAIPX - CONVERT THE NEGATIVE - OTHERWISE = ABW LEAVE AS NEGATIVE NUMBER + VAR2PAD := CNV_NEG(ALLTRIM(STR(VAR2PAD))) + VAR2PAD := STRTRAN(VAR2PAD,'-', '0') + ELSE //** P3N - 02/15/07 + VAR2PAD := STR( VAR2PAD, PADPOS, 0 ) //** P3N - 02/15/07 + ENDIF //** P3N - 02/15/07 + RETURN RIGHT(ZEROS + ALLTRIM(VAR2PAD), PADPOS) +ELSE + RETURN RIGHT(ZEROS + ALLTRIM(STR(VAR2PAD)), PADPOS) +ENDIF + + +************************************************************** +* CONVERT THE NUMBER TO A NEGATIVE VALUE TO BE PASSED TO THE AS/400 +************************************************************** +FUNCTION CNV_NEG(NUM) +LOCAL WKLEN := LEN(NUM) +LOCAL CNV_BYTE := SUBS(NUM,WKLEN,1) +IF CNV_BYTE = '0' + CNV_BYTE := '}' +ELSEIF CNV_BYTE = '1' + CNV_BYTE := 'J' +ELSEIF CNV_BYTE = '2' + CNV_BYTE := 'K' +ELSEIF CNV_BYTE = '3' + CNV_BYTE := 'L' +ELSEIF CNV_BYTE = '4' + CNV_BYTE := 'M' +ELSEIF CNV_BYTE = '5' + CNV_BYTE := 'N' +ELSEIF CNV_BYTE = '6' + CNV_BYTE := 'O' +ELSEIF CNV_BYTE = '7' + CNV_BYTE := 'P' +ELSEIF CNV_BYTE = '8' + CNV_BYTE := 'Q' +ELSEIF CNV_BYTE = '9' + CNV_BYTE := 'R' +ENDIF +RETURN SUBS(NUM,1,WKLEN-1) + CNV_BYTE +************************************************************************ +FUNCTION WRITEOUT( CREATECODE, OUTVAR ) +LOCAL NUMWRITTEN +OUTVAR = OUTVAR + CHR(13) + CHR(10) +NUMWRITTEN := FWRITE(CREATECODE, OUTVAR, LEN(OUTVAR) ) +IF NUMWRITTEN <> LEN(OUTVAR) + ? 'WRITE ERROR - TEXT FILE' + CHR(7) + WAIT + RETURN -1 +ENDIF + +RETURN 0 +************************************************************ +* GET THE ORDER NUMBER INTO THE GL ALLOC RECORD!!! * +************************************************************ +FUNCTION UPD_GLORD(MORDER_NUM) +REPLACE ORDER_NUM WITH MORDER_NUM +RETURN .T. +************************************************************ +* UPDATE/OVERRIDE THE GL ALLOCATIONS PER USER REQUEST!!! * +************************************************************ +FUNCTION UPD_GLALLOC(MORDER_NUM, PGL_ARR) +LOCAL SV_SCREEN := SAVESCREEN(), I, NOBEG_RECS := .F. +LOCAL SV_SEL := SELECT(), RET_ARR +LOCAL ACTION_CODE := GETAVAR('ACTION_CODE') + +DBOPEN('GL_ALLOC') +SET FILTER TO ORDER_NUM == MORDER_NUM +GO TOP +IF GL_ALLOC->(EOF()) + NOBEG_RECS := .T. + SAV_GLALLOC(MORDER_NUM, PGL_ARR) +ENDIF + +IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + ACD_PAR_CHILD(1, 'GL Allocation Override', {NIL, 'GL_ALLOC', .F. ,,'ADD',,,,,,.F., 'USERFILET'}) +ELSE + ACD_PAR_CHILD(3, 'GL Allocation Override', {NIL, 'GL_ALLOC', .F. ,,'REV',,,,,,.F., 'USERFILET'}) +ENDIF + +IF SELECT('USERFILET') > 0 + SELECT USERFILET + USE +ENDIF + +IF LASTKEY() == 27 .AND. NOBEG_RECS + RET_ARR := {} + DEL_GLALLOC(MORDER_NUM) +ELSE + RET_ARR := GET_GLALLOC(MORDER_NUM) +ENDIF + +IF SELECT('GL_ALLOC') > 0 + SELECT GL_ALLOC + USE +ENDIF + +SELECT(SV_SEL) +RESTSCREEN(,,,,SV_SCREEN) +RETURN RET_ARR +************************************************************ +* BALANCE/VALIDATE THE GL ALLOC. FROM MGL_ARRAY(ARRAY) OR GL_ALLOC(DBF) +************************************************************ +FUNCTION BAL_GLALLOC(MORDER_NUM, MGL_ARR) +LOCAL SV_SCRN := SAVESCREEN(), I +LOCAL SV_REC, GL_TOTAL := 0, RETVAL := .T. +LOCAL SV_SEL := SELECT() +LOCAL ORDTOTAL := (CUR_MAST)->TOTAL_AMT +IF EMPTY(MGL_ARR) +// BALANCE THE OVERRIDES TO THE ORDER TOTAL @ GL OVERRIDE ENTRY TIME!! + IF SELECT('USERFILET') > 0 + SELECT USERFILET + SV_REC := RECNO() + DBSKIP(+1) + IF EOF() + GO TOP + DO WHILE !EOF() .AND. ORDER_NUM == MORDER_NUM + IF EMPTY(AMOUNT) .AND. EMPTY(ADJ_AMT) + REC_LOCK(5) + DELETE + UNLOCK + ENDIF + GL_TOTAL := GL_TOTAL + (AMOUNT + ADJ_AMT) + DBSKIP(+1) + ENDDO + RETVAL := BAL_ERROR(GL_TOTAL, ORDTOTAL) + ENDIF + GOTO SV_REC + SELECT(SV_SEL) + ENDIF +ELSE +// BALANCE THE MGL_ARR TO THE ORDER TOTAL @ ORDER PRINT TIME!!! + FOR I := 1 TO LEN(MGL_ARR) + GL_TOTAL := GL_TOTAL + MGL_ARR[I,2] + NEXT + RETVAL := BAL_ERROR(GL_TOTAL, ORDTOTAL) +ENDIF +RESTSCREEN(,,,,SV_SCRN) +RETURN RETVAL +************************************************************ +* TOTAL ALL LINES FOR AN ORDER IN GL_ALLOC(DBF) +************************************************************ +FUNCTION TOT_GLALLOC(MORDER_NUM, FILE2USE, SAY) +LOCAL GL_TOTAL := 0, RETVAL +LOCAL SV_REC := RECNO() +LOCAL SV_SEL := SELECT() +LOCAL SV_COLR := SETCOLOR(HNOR) +// TOTAL OVERRIDES FOR THE ORDER +IF EMPTY(FILE2USE) + SELECT USERFILET + GO TOP +ELSEIF FILE2USE = 'GL_ALLOC' + SELECT GL_ALLOC + DBSEEK(MORDER_NUM) +ELSE + SELECT USERFILET + GO TOP +ENDIF +DO WHILE !EOF() .AND. ORDER_NUM == MORDER_NUM + GL_TOTAL := GL_TOTAL + (AMOUNT + ADJ_AMT) + DBSKIP(+1) +ENDDO +SELECT(SV_SEL) +GOTO SV_REC +IF SAY + @ 03, 45 CLEAR TO 03, 70 + @ 03, 45 SAY 'Total GL Alloc = ' + ALLTRIM(PADR(LTRIM(STR(GL_TOTAL, 9,2)),11)) + RETVAL := .T. +ELSE + RETVAL := 'Total GL Alloc = ' + ALLTRIM(PADR(LTRIM(STR(GL_TOTAL, 9,2)),11)) +ENDIF +SETCOLOR(SV_COLR) +RETURN RETVAL +************************************************************ +* DETERMINE IF THE GL ALLOCATION IS EQUAL TO THE ORDER TOTAL +* IF NOT DISPLAY AN ERROR MESSAGE!!! +************************************************************ +FUNCTION BAL_ERROR(GL_TOTAL, ORDTOTAL) +LOCAL DIFFAMT, DIFFVAL, RETVAL +IF VAL(STR(GL_TOTAL,9,2)) == ORDTOTAL + RETVAL := .T. +ELSE + DIFFAMT := ORDTOTAL - GL_TOTAL + IF ORDTOTAL > GL_TOTAL + DIFFVAL := SPACE(10) + 'ORDER TOTAL > GL ALLOC. by ' + ELSE + DIFFVAL := SPACE(10) + 'GL ALLOC. > ORDER TOTAL by ' + ENDIF + ERR_BOX('** Order Total and GL Allocations DO NOT Balance! **' ,; + ' Order Total = '+ ALLTRIM(STR(ORDTOTAL,9,2)) + ; + ' GL Alloc Total = ' + ALLTRIM(STR(GL_TOTAL, 9,2)), ; + DIFFVAL + ALLTRIM(STR(DIFFAMT , 9,2)) ) + RETVAL := .F. +ENDIF +RETURN RETVAL +************************************************************ +***************************************************************** +* SAVE THE GL ALLOCATIONS FOR A GIVEN ORDER IN THE GL_ALLOC DBF. +***************************************************************** +FUNCTION SAV_GLALLOC(MORDER_NUM, GL_ARR) +//** GL_ARR-1 = GL_NUM +//** GL_ARR-2 = GL_AMT +//** GL_ARR-3 = GL_TAX_DESC +//** GL_ARR-4 = GL_TAX_IND - "X" EXCLUDE FROM TAX ALLOC +//** "I" INCLUDE IN TAX ALLOC +//** "P" PRODUCT ALLOCATION +LOCAL I, GL +LOCAL SV_SEL := SELECT() +DBOPEN('GL_ALLOC') +FOR I := 1 TO LEN(GL_ARR) + IF !DBSEEK(MORDER_NUM+GL_ARR[I,1]) //ORDER_NUM + GL_NUM + ADD_REC(5) + ELSE + REC_LOCK(5) + ENDIF + REPLACE ORDER_NUM WITH MORDER_NUM + REPLACE GL_NUM WITH GL_ARR[I,1] + REPLACE AMOUNT WITH GL_ARR[I,2] + IF LEN(GL_ARR[I]) >= 3 // SOMETIMES ONLY 2 ELM'S IN GL_ARR + IF EMPTY(GL_ARR[I,3]) + ELSE + REPLACE TAX_DESC WITH GL_ARR[I,3] + ENDIF + ENDIF + IF LEN(GL_ARR[I]) >= 4 //SOMETIMES ONLY 2 OR 3 ELM'S IN GL_ARR + IF EMPTY(GL_ARR[I,4]) + ELSE + REPLACE TAX_ALLOC WITH GL_ARR[I,4] + ENDIF + ENDIF + UNLOCK +NEXT +USE +SELECT(SV_SEL) +RETURN +************************************************************ +************************************************************ +FUNCTION GET_PO_NUM( MORDER_NUM, MLOC_CODE, ADD_NEW ) +LOCAL SAVESEL := SELECT(), MPO_NUM + +SELECT IPO_FILE +DONSETORD(3) // ORDER# + LOC_CODE + +IF IPO_FILE->(DBSEEK ( MORDER_NUM + MLOC_CODE ) ) + MPO_NUM := IPO_FILE->PO_NUM +ELSE + IF ADD_NEW + MPO_NUM := NEW_PO_NUM() + SELECT IPO_FILE + ADD_REC(1) + REPLACE PO_NUM WITH MPO_NUM + REPLACE LOC_CODE WITH MLOC_CODE + REPLACE ORDER_NUM WITH MORDER_NUM + REPLACE PO_DATE WITH CURDATE + ELSE + MPO_NUM := SPACE( LEN( IPO_FILE->PO_NUM ) ) + ENDIF +ENDIF + + +SELECT (SAVESEL) +RETURN MPO_NUM +************************************************************ +* DELETE THE GL ALLOCATION RECS FOR A GIVEN ORDER NUMBER-GL_ALLOC(DBF) +************************************************************ +FUNCTION DEL_GLALLOC(MORDER_NUM) +LOCAL SV_SEL := SELECT(), DEL_CNTR := 0 +DBOPEN('GL_ALLOC') +IF DBSEEK(MORDER_NUM) + DO WHILE !EOF() .OR. ORDER_NUM == MORDER_NUM + REC_LOCK(5) + DELETE + UNLOCK + DBSKIP(+1) + ENDDO +ENDIF +GOTO 1 +DO WHILE !EOF() + IF DELETED() + DEL_CNTR := DEL_CNTR + 1 + ENDIF + DBSKIP(+1) +ENDDO +IF EMPTY(DEL_CNTR) + USE +ELSE + DBOPEN('GL_ALLOC', .T.) + PACK + USE +ENDIF +SELECT(SV_SEL) +RETURN +********************************************************* +********************************************************* +********************************************************* +FUNCTION NEW_PO_NUM( ) +LOCAL OPENCNTL := .F., SAVESEL := SELECT(), RETVAL +IF SELECT('CONTROL') = 0 + OPENCNTL := .T. + DBOPEN( 'CONTROL') +ENDIF +REC_LOCK(1) + +RETVAL := VAL(CONTROL->PO_NUM) + 1 +RETVAL := STR( RETVAL, 6 ) +REPLACE CONTROL->PO_NUM WITH RETVAL + +UNLOCK + +IF OPENCNTL + CLOSE CONTROL +ENDIF +SELECT (SAVESEL) +RETURN RETVAL +************************************************************************ +* IS THERE A CUSTOMER PO WITH THE SAME PO NUMBER?? +************************************************************************ +FUNCTION DUPL_CUST_PO(MORDER_NUM) +//**LOCAL SVORD := (CUR_MAST)->(INDEXORD()) +LOCAL SVREC := (CUR_MAST)->(RECNO()), ORGORD +LOCAL SVSEL := SELECT(), RETVAL := .T., DUPL_PO := .F. +LOCAL ELM := ASCAN(GETVARS,{|X| X[3] == 'CUST_PO'}) +LOCAL ELMID := ASCAN(GETVARS,{|X| X[3] == 'CUST_ID'}) +LOCAL MSG_PO, MSG_CUST, MSG_ORD, KEYPO, KEYID, MSG1, MSG2, MSG3 +IF (EMPTY(ELM) .OR. EMPTY(ELMID) .OR. EMPTY(GETVARS[ELM, 4])) .AND. ; + (GETVARS[ELM, 2] == GETVARS[ELM,4] .OR. ; // CUST_PO CHANGED??? + GETVARS[ELMID, 2] == GETVARS[ELMID,4]) // CUST_ID CHANGED??? +ELSE +//** SET SOFTSEEK ON //PARTIAL KEY READ +//** SET ORDER TO 4 //CUST_PO + CUST_ID + ORDER_NUM + ORGORD := DONSETORD(4) //CUST_PO + CUST_ID + ORDER_NUM + KEYPO := GETVARS[ELM, 4] //CUST_PO ENTERED + KEYID := GETVARS[ELMID, 4] //CUST_ID ENTERED + (CUR_MAST)->(DBSEEK(KEYPO+KEYID), .T.) + DUPL_PO := .F. + DO WHILE (CUR_MAST)->(!EOF()) + IF ((CUR_MAST)->CUST_PO == KEYPO .AND. (CUR_MAST)->CUST_ID == KEYID) + IF (CUR_MAST)->ORDER_NUM == MORDER_NUM + DUPL_PO := .F. + (CUR_MAST)->(DBSKIP(+1)) + ELSE + DUPL_PO := .T. + EXIT + ENDIF + ELSE + DUPL_PO := .F. + EXIT + ENDIF + ENDDO +//** SET SOFTSEEK OFF // RETURN TO ORIGINAL SETTING + SELECT (CUR_MAST) +//** SET ORDER TO SVORD // ORIGINAL INDEX ORDER!!! + DONSETORD(ORGORD) //ORIGINAL INDEX ORDER +ENDIF +MSG_ORD := ALLTRIM((CUR_MAST)->ORDER_NUM) +SELECT(SVSEL) // ORIGINAL SELECT +GOTO(SVREC) // ORIGINAL RECORD +IF DUPL_PO + RETVAL := DUPL_PO_MSG(MSG_PO, MSG_CUST, MSG_ORD, MSG1, MSG2, MSG3) +ELSE + RETVAL := .T. +ENDIF +RETURN RETVAL +************************************************************************ +* SEND THE USER THE DUPLICATE CUSTOMER PO MESSAGE +************************************************************************ +FUNCTION DUPL_PO_MSG(MSG_PO, MSG_CUST, MSG_ORD, MSG1, MSG2, MSG3) +LOCAL SVSEL := SELECT(), SVSCREEN //** P3N - 8/18/99 +LOCAL SVREC := (CUR_MAST)->(RECNO()) //** P3N - 8/18/99 +LOCAL ORD_PARMS, SEEKKEY, SVGETLIST //** P3N - 8/18/99 +LOCAL RETVAL := .T., PREVKEY, ESCKEY +LOCAL oGET := GETACTIVE() //** P3N - 8/26/99 + +IF EMPTY( OGET ) +ELSE + MSG_PO := ALLTRIM(oGET:BUFFER) //** P3N - 8/26/99 + //**MSG_PO := ALLTRIM((CUR_MAST)->CUST_PO) + MSG_CUST := ALLTRIM((CUR_MAST)->CUST_ID) + //**MSG_ORD := ALLTRIM((CUR_MAST)->ORDER_NUM) + MSG1 := 'Customer - '+MSG_CUST+' P. O. - '+MSG_PO+' Already EXISTS!' + MSG2 := 'Check ORDER Number - '+MSG_ORD + MSG3 := 'Do you want to continue?' + ERR_BOX (MSG1, MSG2, 'Press Enter to continue or F5 to review orders!') + //** 'Check ORDER Number - '+MSG_ORD ) + //**CONT := PROMPT_BOX(MSG1, MSG2, MSG3) + IF LASTKEY() == 13 + //**ELSEIF CONT + ELSEIF LASTKEY() == K_F5 //** P3N - 8/18/99 + SVSCRN := SAVESCREEN() //** P3N - 8/18/99 + SVGETLIST := SAVEGETS() //** P3N - 8/18/99 + ORD_PARMS := DBOPEN( CUR_MAST ) //** P3N - 8/18/99 + (CUR_MAST)->(DBSEEK(MSG_ORD), .T.) //** P3N - 8/18/99 + DO WHILE .T. //** P3N - 8/18/99 + SEEKKEY := GET_KEY(ORD_PARMS) //** P3N - 8/18/99 + IF LASTKEY() = 27 //** P3N - 8/18/99 + EXIT //** P3N - 8/18/99 + ELSE //** P3N - 8/18/99 + ESCKEY := CHG_REV_HOTKEY('REV') //** P3N - 8/18/99 + ENDIF //** P3N - 8/18/99 + ENDDO //** P3N - 8/18/99 + CLEAR TYPEAHEAD //** P3N - 8/18/99 + KEYBOARD CHR(0) //** P3N - 8/18/99 + DO WHILE .T. //** P3N - 8/26/99 + PREVKEY := INKEY() //** P3N - 8/26/99 + IF PREVKEY = 0 //** P3N - 8/26/99 + EXIT //** P3N - 8/26/99 + ENDIF //** P3N - 8/26/99 + ENDDO //** P3N - 8/26/99 +//**KEYBOARD CHR(4)+CHR(78) // "N" NO for corrcheck() //** P3N - 8/18/99 + RETVAL := .F. //** P3N - 8/18/99 + RESTSCREEN(,,,,SVSCRN) //** P3N - 8/18/99 + //** RESET ELEM 5 (CUSTID AS THE ACTIVE GET) + RESTGETS(SVGETLIST, 5) //** P3N - 8/18/99 + ELSE + RETVAL := .F. + ENDIF + SELECT(SVSEL) // ORIGINAL SELECT //** P3N - 8/18/99 + (CUR_MAST)->(DBGOTO(SVREC)) //** P3N - 8/18/99 +ENDIF +RETURN RETVAL +**************************************************************** +**************************************************************** +* ARCHIVE ORDERS - INTO A SUB DIRECTORY +**************************************************************** +FUNCTION ORD_ARCHIVE() +LOCAL SVSCRN := SAVESCREEN() +LOCAL ARCH_DATE := DATE(), ARCHIVE_DIR := 'ARCH'+DTOC(DATE()) +LOCAL TITLE := 'Order Archive', CORR +ARCH_DATE := ARCH_DATE - 365 +DO WHILE .T. + @ 2,0 CLEAR + SAYTITLE(TITLE, 'AS000') + //@ 11,11 SAY 'Enter Archive CUTOFF Date ' + DTOC(ARCH_DATE) + @ 11,11 SAY 'Enter Archive CUTOFF Date ' + DTOC(ARCH_DATE) + @ 11,37 GET ARCH_DATE + READ + IF LASTKEY() = 27 + EXIT + ENDIF + IF EMPTY(ARCH_DATE) + ERR_BOX('Invalid Date') + LOOP + ELSEIF ARCH_DATE <= DATE() - 365 + // GOOD DATE + ELSE + ERR_BOX('Date MUST be at least 1 year prior to ' + DTOC(DATE())) + LOOP + ENDIF + CORR := CORRCHEK() + IF CORR == 'Y' + @ 2,0 CLEAR + ARCHIVE_DIR := CHK_ARCHDIR(DTOS(ARCH_DATE)) + IF ARCHIVE_DIR[1] + IF PROMPT_BOX(' ARCHIVE ALREADY EXISTS FOR ' + ARCHIVE_DIR[2]+SPACE(7) , ; + ' This Archive will be OVERLAYED!', ; + ' Do you want to continue? ') + *************** ' Do you want to continue? ', 1) + ARCH_ORDER('Archive CLOSED Orders prior to ', ARCH_DATE, ARCHIVE_DIR ) + ELSE + EXIT + ENDIF + ELSE + ARCH_ORDER('Archive CLOSED Orders prior to ', ARCH_DATE, ARCHIVE_DIR ) + ENDIF + EXIT + ELSEIF CORR == 'N' + LOOP + ELSE + EXIT + ENDIF +ENDDO +RESTSCREEN(,,,, SVSCRN) +RETURN +**************************************************************** +* DETERMINE IF THE ARCHIVE DIRECTORY EXISTS. +**************************************************************** +FUNCTION CHK_ARCHDIR(ARCH_DIR) +LOCAL CURDIR := DIRECTORY(SUBS(ARCH_DIR,1,7)+"*", 'D') +LOCAL ARCH_EXISTS := .F. +IF EMPTY(CURDIR) + ARCH_EXISTS := .F. +ELSE + IF ASCAN(CURDIR, {|X| X[1] == ARCH_DIR} ) > 0 + ARCH_EXISTS := .T. + ELSE + ARCH_EXISTS := .F. + ENDIF +ENDIF +RETURN {ARCH_EXISTS, ARCH_DIR} + +**************************************************************** +* SELECT ALL ORDERS TO BE ARCHIVED & COPY TO ARCHIVE DIRECTORY +**************************************************************** +FUNCTION ARCH_ORDER(TITLE, ARCH_DATE, ARCHIVE_ARR) + +LOCAL ARCHDIR_EXISTS := ARCHIVE_ARR[1], TOTMAST, TOTQUOT +LOCAL ARCHIVE_DIR := ARCHIVE_ARR[2], ARCHFILE +LOCAL SVSCRN := SAVESCREEN() +LOCAL III +//**LOCAL MASTFILTER := {|ARCH_DATE|!EMPTY(ORD_MAST->IDATE_LAST).AND. ORD_MAST->IDATE_LAST < ARCH_DATE} +//** P3N - CHANGED TO ARCHIVE BASED ON THE ORDER SHIPPING DATE AS OPPOSED TO THE INVOICE DATE +//** THIS CHANGE WAS REQUESTED BY ELLEN AT KANSAS CITY ON 3/30/01 +//** THIS CHANGE WILL ONLY EFFECT THE ORDERS +LOCAL MASTFILTER := {|ARCH_DATE|!EMPTY(ORD_MAST->SHIP_DATE).AND. ORD_MAST->SHIP_DATE < ARCH_DATE} +LOCAL QUOTFILTER := {|ARCH_DATE|!EMPTY(QUOTE_MAST->IDATE_LAST).AND. QUOTE_MAST->IDATE_LAST < ARCH_DATE} +LOCAL SVDATADICT := DATADICT, SVCOLOR + +LOCAL COPYFROM +LOCAL COPYTO +LOCAL RETCOPYVAL +LOCAL DIRARR + + + +@ 2,0 CLEAR +SAYTITLE(TITLE+DTOC(ARCH_DATE) , 'AO000') + +WAIT_BOX('*** Selecting Orders & Quotes ***', ; + '*** Please Wait ***') +DBOPEN('QUOTE_MAST') +SET FILTER TO EVAL(QUOTFILTER, ARCH_DATE) +GO TOP +COUNT TO TOTQUOT WHILE AMSGMETER() +AMSGMETER(.T.) +DBOPEN('ORD_MAST') +SET FILTER TO EVAL(MASTFILTER, ARCH_DATE) +GO TOP +COUNT TO TOTMAST WHILE AMSGMETER() +CLOSE DATABASES +IF EMPTY(TOTQUOT) .AND. EMPTY(TOTMAST) + ERR_BOX('** No Orders / Quotes selected to Archive! **') +ELSE + WAIT_BOX('*** Preparing to Archive the following *** ', ; + '*** Orders - ' + ALLTRIM(STR(TOTMAST)) + ; + ' Quotes - ' + ALLTRIM(STR(TOTQUOT)) , ; + '*** Copying files - Please Wait ***') + + + // COPY ALL DATABASE files TO THE ARCHIVE DIRECTORY + // CALL_OLAY(,,PROG, 0, '', '') + // **CPYTOFILES := ARCHIVE_DIR+'\*.*' + // **COPY FILE ('*.DB*') TO ('&CPYTOFILES') + + + + // PROG := 'COPY *.DB* '+ ARCHIVE_DIR + ' >NUL' + @ 20,20 SAY 'Copying Files to Archive ' + RETCOPYVAL := LMKDIR( ARCHIVE_DIR ) + RETCOPYVAL := LMKDIR( ARCHIVE_DIR + '\BKUP' ) + + DIRARR := DIRECTORY( '*.DB*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + COPYTO := ARCHIVE_DIR + '\' + COPYFROM + RETCOPYVAL := COPYFILE ( COPYFROM, COPYTO ) + NEXT + + @ 4,0 CLEAR + WAIT_BOX('*** Copying files *** ', ; + '*** Please Wait ***') + + **************************************************************** + * COPY ALL SPECIAL PRICING DATABASE files TO THE ARCHIVE DIRECTORY + **************************************************************** + //**COLOR := SETCOLOR(HREV) + @ 20,20 SAY 'Processing Special Pricing Files' + + //PROG := 'COPY *.0* '+ ARCHIVE_DIR + ' >NUL' + //CALL_OLAY(,,PROG, 0, '', '') + + DIRARR := DIRECTORY( '*.0*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + COPYTO := ARCHIVE_DIR + '\' + COPYFROM + RETCOPYVAL := COPYFILE ( COPYFROM, COPYTO ) + NEXT + + **************************************************************** + * COPY THE ORDER/QUOTE DATABASES TO BKUP\*.* IN THE ARCHIVE DIRECTORY + * THIS WILL ALLOW A RESTORE TO CURRENT STATE IF ANY PROBLEMS. + * TO RESTORE: + * + * USE RESTORE OPTION FROM UTILITY MENU OR MANUALLY + * COPY CGW*.DB* FROM ARCHIVE\BKUP DIRECTORY TO CURRENT DIRECTORY + * ( ENSURE YOU DO A REINDEX!!!) + **************************************************************** + + @ 20,20 SAY 'Processing Order Files ' + + //PROG := 'COPY CGW0O*.DB* '+ ARCHIVE_DIR + '\BKUP' + ' >NUL' + //CALL_OLAY(,,PROG, 0, '', '') + DIRARR := DIRECTORY( 'CGW0O*.DB*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + COPYTO := ARCHIVE_DIR + '\BKUP' + COPYFROM + RETCOPYVAL := COPYFILE ( COPYFROM, COPYTO ) + NEXT + + + //PROG := 'COPY CGW0X*.DB* '+ ARCHIVE_DIR + '\BKUP' + ' >NUL' + //CALL_OLAY(,,PROG, 0, '', '') + DIRARR := DIRECTORY( 'CGW0X*.DB*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + COPYTO := ARCHIVE_DIR + '\BKUP' + COPYFROM + RETCOPYVAL := COPYFILE ( COPYFROM, COPYTO ) + NEXT + + + @ 20,20 SAY 'Processing Quote Files ' + //PROG := 'COPY CGW0Q*.DB* '+ ARCHIVE_DIR + '\BKUP' + ' >NUL' + //CALL_OLAY(,,PROG, 0, '', '') + DIRARR := DIRECTORY( 'CGW0Q*.DB*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + COPYTO := ARCHIVE_DIR + '\BKUP' + COPYFROM + RETCOPYVAL := COPYFILE ( COPYFROM, COPYTO ) + NEXT + + + @ 20,20 SAY 'Processing Sales History ' + //PROG := 'COPY CGW0SH.DB* '+ ARCHIVE_DIR + '\BKUP' + ' >NUL' + //CALL_OLAY(,,PROG, 0, '', '') + DIRARR := DIRECTORY( 'CGW0SH.DB*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + COPYTO := ARCHIVE_DIR + '\BKUP' + COPYFROM + RETCOPYVAL := COPYFILE ( COPYFROM, COPYTO ) + NEXT + + + **************************************************************** + * REMOVE ALL BACKUP (BAK*.DB* FILES) + **************************************************************** + @ 20,20 SAY 'Removing All Temporary Work Files ' + //PROG := 'DEL ' + ARCHIVE_DIR + '\BAK*.DB* ' + //CALL_OLAY(,,PROG, 0, '', '') + DIRARR := DIRECTORY( ARCHIVE_DIR + '\BAK.DB*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + //COPYTO := ARCHIVE_DIR + '\BKUP' + COPYFROM + RETCOPYVAL := FERASE( COPYFROM ) + NEXT + + + **************************************************************** + * COPY ALL DATADICT INDEX FILES FOR USE ON THE REINDEX FUNCTION + **************************************************************** + //PROG := 'COPY CGW?DD.* '+ ARCHIVE_DIR + ' >NUL' + //CALL_OLAY(,,PROG, 0, '', '') + DIRARR := DIRECTORY( 'CGW?DD.*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + COPYTO := ARCHIVE_DIR + '\' + COPYFROM + RETCOPYVAL := COPYFILE ( COPYFROM, COPYTO ) + NEXT + + + //** P3N - 4/8/98 COPY THE WORKSTATION INDEX INTO THE ARCHIVE! + //PROG := 'COPY CGW?WS.* '+ ARCHIVE_DIR + ' >NUL' + //CALL_OLAY(,,PROG, 0, '', '') + DIRARR := DIRECTORY( 'CGW?WS.*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + COPYTO := ARCHIVE_DIR + '\' + COPYFROM + RETCOPYVAL := COPYFILE ( COPYFROM, COPYTO ) + NEXT + + + ARCHIVE_DIR := ARCHIVE_DIR + '\' + SETCOLOR(SVCOLOR) + + + @ 4,0 CLEAR + WAIT_BOX('*** Opening files *** ', ; + '*** Please Wait ***') + + + OPEN_ARCHIVE(ARCHIVE_DIR) + + CLOSE ORD_MAST + CLOSE QUOTE_MAST + @ 4,0 CLEAR + WAIT_BOX('*** Archiving Orders/Quotes *** ', ; + '*** Please Wait ***') + SEL_ARCHIVE('ORD_MAST', 'AOMAST', ARCH_DATE) + SELECT AOMAST + INDEX ON ORDER_NUM TO AOMAST + CHILD_ARCH('ORDERS') + ERASE 'AOMAST.+INDEXEXT()' + + SEL_ARCHIVE('QUOTE_MAST', 'AQMAST', ARCH_DATE) + SELECT AQMAST + INDEX ON ORDER_NUM TO AQMAST + CHILD_ARCH('QUOTES') + ERASE 'AQMAST.+INDEXEXT()' + + @ 4,0 CLEAR + WAIT_BOX('*** Please wait while we cleanup! *** ') + + DEL_OLD() + + UTIL_OQFILES(,,'COMPRESSED', .F.) + + CLOSE DATABASES + + SVDATADICT := DATADICT + DBOPEN('DATADICT') + DBFARR := REASSIGN_DBFARR(ARCHIVE_DIR) + SETAVAR('SET', 'DBFARR', DBFARR) //** P3N -08/31/01 ADDRESS CHG IN DBOPEN + CLEAR TYPEAHEAD + KEYBOARD 'Y' + + IND_PACK(,,,'REINDEXED',ARCHIVE_DIR) //REINDEX ALL - archive directory + + /* + reindex all DATABASES: + + WORKSTAT CGW0WS , Workstation File + CONTROL CGW0KA , Control File + PASSWORD CGW0PA , Password File + DATADICT CGW0DD , DATA DICTIONARY + IMPORT , CGW0IM , Import Files + IMPCUST , CGW0IC , Field Definitions + STDCUST , CGW0SC , SYSTEM STD CUST FILE + MATHPACK CGW0MP , Mathpack File + ERRFILE , CGW0EF , SYSTEM ERROR FILE + AUDITFILE CGW0AU , SYSTEM AUDIT FILE + CATEGORY CGW0PC , PRODUCT CATEGORIES + ATTRIBUTES CGW0AT , PRODUCT ATTRIBUTES + STD_SIZES CGW0SS , PROD STD/STK SIZE TABLE + PRI_EXTRAS CGW0PE , PRICE EXTRAS - CATEGORY + CAT_ATTS CGW0CA , CATEGORY ATTRIBUTES + CAT_OPTS , CGW0CO , CATEGORY ATTRIBUTE OPTS + PRODUCT , CGW0PR , COLUMBIA WINDOW PRODUCTS + PROD_ATTS , CGW0PT , MODEL ATTRIBUTES + PROD_OPTS , CGW0PO , MODEL ATTRIBUTE OPTS + RULEPACK , CGW0RP , RULE PACK + RULES , CGW0RU , RULES FILE + ORD_MAST , CGW0OM , ORDER MASTER + ORD_LINES , CGW0OL , Order Lines + ORDER_OPTS CGW0OO , Sales Order Options + ATT_OPTS , CGW0AO , Attribute Options + ADDL_LINES, CGW0XL , Additional Order Lines + ADDL_OPTS , CGW0XO , Additional Order Options + CUST_MAST , CGW0CM , Customer Master + CUST_PRICE, CGW0CP , CUSTOMER PRICING TABLE + QUOTE_MAST, CGW0QM , QUOTE MASTER + QUOTE_LINE, CGW0QL , QUOTE LINE ITEMS + QUOTE_ADDL, CGW0QX , QUOTE ADDL LINES + QUOTE_OPTS, CGW0QO , QUOTE OPTIONS + ADDL_QOPT , CGW0QXO , QUOTE ADDL LINE OPTIONS + TAX_DETAIL, CGW0TD , SALES TAX DETAIL + TAX_SCHED , CGW0TS , SALES TAX SCHEDULE + AR_INFO , CGW0AR , ACCNT RECIEVABLE INFO + SHIPMETH , CGW0SV , SHIP VIA METHODS + CUST_BP , CGW0CB , CUSTOMER BASE PRICE TABLE + CUST_BPLVL CGW0CBL , CUST BASE PRICE LEVELS + MFG_LOC , CGW0ML , Manufacturing Location + CUST_ATTS , CGW0CPT , CUSTOMER PROD ATTRIBUTES + CUST_OPTS , CGW0CPO , CUSTOMER PRODUCT OPTIONS + CUST_PE , CGW0CPE , CUST PRICE EXTRAS + STD_SASH , CGW0SBS , STD BOTTOM SASH TABLE + GLASS_BOX , CGW0GB , GLASS BOX SIZES + ATTRIB_CUT, CGW0AC , ATTRIBUTES CUTTING SPEC + CUT_SPEC , CGW0CS , CUTTING SEPECIFICATIONS + IPO_FILE , CGW0IPO , INTERCOMPANY PO'S + MISC_ITEMS CGW0MI , MISC ITEMS + MISC_PUOM , CGW0MIP , MISC ITEM PRICING / UOM'S + MISC_COLOR, CGW0MIC , MISC ITEMS COLORS + UOMFILE , CGW0MU , MASTER LIST UOM + COLOR_LIST CGW0MC , MASTER COLOR LIST + ORD_MISC , CGW0OMI , ORDER MISC ITEMS + QUOTE_MISC, CGW0QMI , Quote Misc Line Items + BILLTRAN , CGW0BT , Billing Transactions + SALEHIST , CGW0SH , SALES HISTORY + BILLPOST , CGW0BP , POSTED BILLING TRANS + SALESMEN , CGW0SM , SALESMEN TABLE + TERMS , CGW0TR , REPAYMENT TERMS + GL_ALLOC , CGW0GL , GL ALLOCATION OVERRIDES + */ + DATADICT := SVDATADICT + DBOPEN('DATADICT') + DBFARR := REASSIGN_DBFARR("") // RESET THE DBFARR FOR THE CGW DIRECTORY + SETAVAR('SET', 'DBFARR', DBFARR) //** P3N -08/31/01 ADDRESS CHG IN DBOPEN + RESTSCREEN(,,,, SVSCRN) + @ 2,0 CLEAR + ERR_BOX ('** Archive Process Completed Successfully! **' ) +ENDIF +RETURN +**************************************************************** +* PROGRESS METER USED FOR THE ARCHIVE PROCESS +**************************************************************** +FUNCTION AMSGMETER(RESET) +LOCAL SVCOLOR := SETCOLOR(HREV) +LOCAL MSG := ALIAS() +STATIC CNT := 0 +IF EMPTY(RESET) + CNT := CNT + 1 + @ 16,20 SAY ' ' + @ 17,20 SAY ' ' + @ 16,20 SAY 'Processing '+MSG+' record:' + @ 17,25 SAY STR(CNT,9)+' of '+STR(LASTREC(),9) +ELSE + CNT := 0 +ENDIF +SETCOLOR(SVCOLOR) +RETURN .T. +**************************************************************** +* OPEN ALL FILES USED FOR THE ARCHIVE PROCESS +**************************************************************** +FUNCTION OPEN_ARCHIVE(ARCHIVE_DIR) +LOCAL SVSEL := SELECT() +LOCAL ARCHFILE +DBOPEN('ORD_LINES', .F.) +DBOPEN('ORDER_OPTS', .F.) +DBOPEN('ORD_MISC', .F.) +DBOPEN('ADDL_LINES', .F.) +DBOPEN('ADDL_OPTS', .F.) + +DBOPEN('QUOTE_LINE', .F.) +DBOPEN('QUOTE_MAST', .F.) +DBOPEN('QUOTE_ADDL', .F.) +DBOPEN('QUOTE_OPTS', .F.) +DBOPEN('QUOTE_MISC', .F.) +DBOPEN('ADDL_QOPT', .F.) + +DBOPEN('ORD_SHIP', .F.) //** P3N - 8/6/98 +DBOPEN('SALEHIST', .F.) +DBOPEN('QUOTE_MAST', .F. ) +DBOPEN('ORD_MAST', .F.) + +SELECT ORD_MAST +ARCHFILE := ARCHIVE_DIR+SUBS(ORD_MAST,3) +COPY STRUCTURE TO &ARCHFILE +USE &ARCHFILE NEW ALIAS AOMAST + +ARCHFILE := ARCHIVE_DIR+SUBS(ORD_LINES,3) +USE &ARCHFILE NEW ALIAS AOLINES EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(ORDER_OPTS,3) +USE &ARCHFILE NEW ALIAS AOOPTS EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(ORD_MISC,3) +USE &ARCHFILE NEW ALIAS AOMISC EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(ADDL_LINES,3) +USE &ARCHFILE NEW ALIAS AOALINES EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(ADDL_OPTS,3) +USE &ARCHFILE NEW ALIAS AOAOPTS EXCLUSIVE + +SELECT QUOTE_MAST +ARCHFILE := ARCHIVE_DIR+SUBS(QUOTE_MAST,3) +COPY STRUCTURE TO &ARCHFILE +USE &ARCHFILE NEW ALIAS AQMAST + +ARCHFILE := ARCHIVE_DIR+SUBS(QUOTE_LINE,3) +USE &ARCHFILE NEW ALIAS AQLINES EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(QUOTE_OPTS,3) +USE &ARCHFILE NEW ALIAS AQOPTS EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(QUOTE_ADDL,3) +USE &ARCHFILE NEW ALIAS AQADDL EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(ADDL_QOPT,3) +USE &ARCHFILE NEW ALIAS AQAOPTS EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(QUOTE_MISC,3) +USE &ARCHFILE NEW ALIAS AQMISC EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(SALEHIST,3) +USE &ARCHFILE NEW ALIAS ASALEHST EXCLUSIVE + +ARCHFILE := ARCHIVE_DIR+SUBS(ORD_SHIP,3) //** P3N - 8/6/98 +USE &ARCHFILE NEW ALIAS AORDSHIP EXCLUSIVE //** P3N - 8/6/98 + +SELECT (SVSEL) +RETURN + +**************************************************************** +* ADD NEW ORDER RECORDS TO THE ARCHIVE DIRECTORY +* (ONE MASTER TO MANY LINES, OPTS, MISC, ...) +* +* SELECT ALL ORDERS TO BE ARCHIVED!! +**************************************************************** +FUNCTION SEL_ARCHIVE( FROMFILE, TOFILE, ARCH_DATE) +LOCAL FILTER, MASTER := &FROMFILE +LOCAL COPYFROM + +SELECT &TOFILE + +//** P3N - CHANGED TO ARCHIVE BASED ON THE ORDER SHIPPING DATE AS OPPOSED TO THE INVOICE DATE +//** THIS CHANGE WAS REQUESTED BY ELLEN AT KANSAS CITY ON 3/30/01 +//** THIS CHANGE WILL ONLY EFFECT THE ORDERS + +IF FROMFILE == 'ORD_MAST' //** P3N - 03/30/01 HAPPY B-DAY CHRISTY + FILTER := '!EMPTY(SHIP_DATE) .AND. SHIP_DATE < CTOD("' //** P3N - 03/30/01 HAPPY B-DAY CHRISTY +ELSE //** P3N - 03/30/01 HAPPY B-DAY CHRISTY + FILTER := '!EMPTY(IDATE_LAST) .AND. IDATE_LAST < CTOD("' +ENDIF //** P3N - 03/30/01 HAPPY B-DAY CHRISTY +FILTER := FILTER + DTOC(ARCH_DATE) + '")' + +// APPEND FROM (MASTER) FOR &FILTER +COPYFROM := ALLTRIM( MASTER ) +APPEND FROM ©FROM FOR &FILTER + +RETURN + +**************************************************************** +* +* REMOVE ALL CHILD FILE RECORDS FOR ARCHIVED ORDERS (IN ARCHIVE DIR.) +* +**************************************************************** +FUNCTION CHILD_ARCH(WHATARCH) +IF WHATARCH = 'ORDERS' + DEL_CHILD('AOLINES', 'AOMAST') + DEL_CHILD('AOOPTS' , 'AOMAST') + DEL_CHILD('AOMISC' , 'AOMAST') + DEL_CHILD('AOALINES','AOMAST') + DEL_CHILD('AOAOPTS' ,'AOMAST') + DEL_CHILD('ASALEHST','AOMAST') + DEL_CHILD('AORDSHIP','AOMAST') //** P3N - 8/6/98 +ELSEIF WHATARCH = 'QUOTES' + DEL_CHILD('AQLINES' , 'AQMAST') + DEL_CHILD('AQOPTS' , 'AQMAST') + DEL_CHILD('AQADDL' , 'AQMAST') + DEL_CHILD('AQAOPTS' , 'AQMAST') + DEL_CHILD('AQMISC' , 'AQMAST') +ENDIF +RETURN + +**************************************************************** +* DELETE EACH CHILD FILE RECORDS FROM THE ARCHIVE FILES +**************************************************************** +FUNCTION DEL_CHILD(FILE, MASTER) +AMSGMETER(.T.) +SELECT &FILE +DELETE ALL FOR NOT_ON_ARCHIVE(FILE, MASTER) WHILE AMSGMETER() +PACK +RETURN + +**************************************************************** +* IS THE RECORD ON THE MASTER FILE? - NO DELETE THIS ROW! +**************************************************************** +FUNCTION NOT_ON_ARCHIVE(FILE, MASTER) +IF (MASTER)->(DBSEEK(&FILE->ORDER_NUM)) + RETURN .F. +ELSE + RETURN .T. +ENDIF + +**************************************************************** +* DELETE ALL ARCHIVED ORDERS FROM THE REAL DBF'S +**************************************************************** +FUNCTION DEL_OLD() +DBOPEN('QUOTE_MAST', .F. ) +DBOPEN('ORD_MAST', .F.) +SELECT AOMAST +GO TOP +DO WHILE !EOF() + DEL_ONEORD('ORD_MAST' , ORDER_NUM) + DEL_ONEORD('ORD_LINES', ORDER_NUM) + DEL_ONEORD('ORDER_OPTS',ORDER_NUM) + DEL_ONEORD('ORD_MISC' , ORDER_NUM) + DEL_ONEORD('ADDL_LINES',ORDER_NUM) + DEL_ONEORD('ADDL_OPTS', ORDER_NUM) + DEL_ONEORD('SALEHIST', ORDER_NUM) + DEL_ONEORD('ORD_SHIP', ORDER_NUM) //** P3N - 8/6/98 + AOMAST->(DBSKIP(+1)) +ENDDO + +SELECT AQMAST +GO TOP +DO WHILE !EOF() + DEL_ONEORD('QUOTE_MAST', ORDER_NUM) + DEL_ONEORD('QUOTE_LINE', ORDER_NUM) + DEL_ONEORD('QUOTE_OPTS', ORDER_NUM) + DEL_ONEORD('QUOTE_ADDL', ORDER_NUM) + DEL_ONEORD('ADDL_QOPT' , ORDER_NUM) + DEL_ONEORD('QUOTE_MISC', ORDER_NUM) + AQMAST->(DBSKIP(+1)) +ENDDO +@ 20,01 CLEAR TO 20,80 +RETURN +**************************************************************** +* DELETE ONE ORDER AFTER COPYING TO THE ARCHIVE +**************************************************************** +FUNCTION DEL_ONEORD(FILE, ARCH_ORDER_NUM) +LOCAL SVREC := (FILE)->(RECNO()) +(FILE)->(DBSEEK(ARCH_ORDER_NUM)) +@ 20,01 CLEAR TO 20,80 +@ 20,20 SAY 'Removing Archived Order ' + ARCH_ORDER_NUM + ' From '+FILE +DO WHILE (FILE)->(!EOF()) .AND. (FILE)->ORDER_NUM == ARCH_ORDER_NUM + IF (FILE)->(RLOCK()) + (FILE)->(DBDELETE()) + ENDIF + (FILE)->(DBSKIP(+1)) +ENDDO +(FILE)->(DBGOTO(SVREC)) +RETURN +**************************************************************** +* ARCHIVE PROCESSING +**************************************************************** +FUNCTION SET_ARCHIVE() +LOCAL ARCHIVE := .T., ARCH_YR := STR(YEAR(DATE())-1,4,0) +LOCAL SAVESCR := SAVESCREEN(), ARCH_MENU := 'CGWARCH' +LOCAL TITLE := 'Archive Selection', STRT := 3 +LOCAL SV_OC := _OC_CAPABLE, ARCH_DIR +LOCAL CHOICE, DIR_ARR, DISPLARR := {}, NOSIZE := .T. +LOCAL SVDATADICT := DATADICT, WORKARR, I + +_OC_CAPABLE := .F. +@ 2,0 CLEAR +SAYTITLE(TITLE, 'AS000') +DO WHILE .T. + @ 12,15 SAY 'Enter Retreival Year (CCYY) ' + ARCH_YR + @ 12,44 GET ARCH_YR + @ 13,15 SAY ' "?" to Browse Archive(s) ' + READ + IF LASTKEY() = 27 + EXIT + ENDIF + IF EMPTY(ARCH_YR) .OR. AT('?', ARCH_YR) > 0 + DIR_ARR := DIRECTORY(SUBS(DTOS(DATE()),1,3)+'*', 'D') + ELSE + DIR_ARR := DIRECTORY( ARCH_YR +'*', 'D') + ENDIF + IF EMPTY(DIR_ARR) + ERR_BOX('** No Archive(s) Found for the year ' + ARCH_YR ) + LOOP + ELSE + @ 03,00 CLEAR + DISPLARR := {'Archive Date Time' } + AADD(DISPLARR, '-------- -------- --------' ) + WORKARR := {} + WORKARR := BLD_DISPLARR(DIR_ARR, WORKARR, NOSIZE) + WORKARR := ASORT(WORKARR,,,{|X,Y| X > Y }) + FOR I := 1 TO LEN(WORKARR) + AADD(DISPLARR, WORKARR[I]) + NEXT + DO WHILE .T. + CHOICE = PICKLIST(DISPLARR, 05, 20, ' Archive(s) Found', STRT, .F., .T.) + IF LASTKEY() = 27 + EXIT + ENDIF + IF EMPTY(CHOICE) .OR. CHOICE < 3 + LOOP + ENDIF + ARCH_DIR := SUBS(DISPLARR[CHOICE],1,8) + IF FILE(ARCH_DIR+'\CGW0OM.DBF') + @ 03,00 CLEAR + IF PROMPT_BOX(' About to Retreive Archived Orders for ' + ARCH_DIR , ' ', ; + ' Do you want to continue? ', 1) + ARCH_DIR := ARCH_DIR+'\' + DBOPEN('DATADICT') + DBFARR := REASSIGN_DBFARR(ARCH_DIR) + SETAVAR('SET', 'DBFARR', DBFARR) //** P3N -08/31/01 ADDRESS CHG IN DBOPEN + BUILDMENUS(INIT, ARCHIVE) + TITLE := 'Archive Retrieval for ' + STRTRAN(ARCH_DIR, '\', '') + SAYTITLE(TITLE, 'AS010') + @ 2,0 CLEAR + CLEAR TYPEAHEAD + @ 22,05 SAY TITLE + DO WHILE .T. + CALLMENU(ARCH_MENU) //DISPLAY ARCHIVE MENU OPTIONS - MENU SYSTEM + IF LASTKEY() = 27 + EXIT + ENDIF + ENDDO + ELSE + LOOP + ENDIF + ELSE + ERR_BOX('** No Archive Files Found in directory: ' + ARCH_DIR ) + LOOP + ENDIF + ENDDO + IF LASTKEY() = 27 + EXIT + ENDIF + ENDIF +ENDDO +BUILDMENUS(INIT) +DATADICT := SVDATADICT +DBOPEN('DATADICT') +DBFARR := REASSIGN_DBFARR("") // RESET THE DBFARR FOR THE CGW DIRECTORY +SETAVAR('SET', 'DBFARR', DBFARR) //** P3N -08/31/01 ADDRESS CHG IN DBOPEN +_OC_CAPABLE := SV_OC +RESTSCREEN(,,,,SAVESCR) +RETURN + +**************************************************************** +* RE-INDEX OR COMPRESS/PACK ARCHIVE FILES +**************************************************************** + +FUNCTION UTIL_OQFILES(OPT,TITLE,ACTN,DISPMSG) + +LOCAL SVSCRN := SAVESCREEN(), ARCH_YR := STR(YEAR(DATE())-1,4,0) +LOCAL PROG, DISPLARR, NOSIZE := .T., STRT := 3, DIR_ARR, WORKARR, I +LOCAL ARCH_DIR + +LOCAL DIRARR, III, COPYFROM, COPYTO, RETCOPYVAL + +IF EMPTY(DISPMSG) + DISPMSG := .F. +ENDIF +IF ACTN == 'RESTORE' + @ 00,00 CLEAR + SAYTITLE(TITLE, 'RA000') + DO WHILE .T. + @ 12,15 SAY 'Enter RESTORE Year (CCYY) ' + ARCH_YR + @ 12,44 GET ARCH_YR + @ 13,15 SAY ' "?" to Browse Archive(s) ' + READ + IF LASTKEY() = 27 + EXIT + ENDIF + IF EMPTY(ARCH_YR) .OR. AT('?', ARCH_YR) > 0 + DIR_ARR := DIRECTORY(SUBS(DTOS(DATE()),1,3)+'*', 'D') + ELSE + DIR_ARR := DIRECTORY( ARCH_YR +'*', 'D') + ENDIF + IF EMPTY(DIR_ARR) + ERR_BOX('** No Archive(s) Found for the year ' + ARCH_YR ) + LOOP + ENDIF + DIR_ARR := DIRECTORY( ARCH_YR +'*', 'D') + DISPLARR := {'Archive Date Time' } + AADD(DISPLARR, '-------- -------- --------' ) + WORKARR := {} + WORKARR := BLD_DISPLARR(DIR_ARR, WORKARR, NOSIZE) + WORKARR := ASORT(WORKARR,,,{|X,Y| X > Y }) + FOR I := 1 TO LEN(WORKARR) + AADD(DISPLARR, WORKARR[I]) + NEXT + @ 03,00 CLEAR + DO WHILE .T. + CHOICE = PICKLIST(DISPLARR, 05, 20, ' Archive(s) Found', STRT, .F., .T.) + IF LASTKEY() = 27 + EXIT + ENDIF + IF EMPTY(CHOICE) .OR. CHOICE < 3 + LOOP + ENDIF + ARCH_DIR := SUBS(DISPLARR[CHOICE],1,8) + @ 03,00 CLEAR + IF PROMPT_BOX(' About to RESTORE Archived Orders for ' + ARCH_DIR , ' ', ; + ' Do you want to continue? ', 1) + @ 4,0 CLEAR + WAIT_BOX('*** Restoring Selected Archive *** ', ; + '*** Please Wait ***') + + //PROG := 'COPY ' + ARCH_DIR + '\BKUP\*.DB* CGW*.* >NUL' + //CALL_OLAY(,,PROG, 0, '', '') + + DIRARR := DIRECTORY( ARCH_DIR + '\BKUP\*.DB*' ) + FOR III := 1 TO LEN( DIRARR ) + COPYFROM := DIRARR[ III, 1 ] + COPYTO := 'CGW' + SUBS( COPYFROM, 4 ) + RETCOPYVAL := COPYFILE ( COPYFROM, COPYTO ) + NEXT + + ACTN := 'REINDEXED' + EXIT + + ENDIF + + ENDDO + + EXIT + + ENDDO + +ENDIF + +IF LASTKEY() = 27 + // EXIT +ELSE + WAIT_BOX('*** Re-Indexing files *** ', ; + '*** Please Wait ***') + IF SELECT('ORD_SHIP') > 0 //** P3N - 8/6/98 + ELSE //** P3N - 8/6/98 + DBOPEN('ORD_SHIP') //** P3N - 8/6/98 + ENDIF //** P3N - 8/6/98 + INDEX_FILE('ORD_SHIP',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('SALEHIST') > 0 + ELSE + DBOPEN('SALEHIST') + ENDIF + INDEX_FILE('SALEHIST',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('ORD_MAST') > 0 + ELSE + DBOPEN('ORD_MAST') + ENDIF + INDEX_FILE('ORD_MAST',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('ORD_LINES') > 0 + ELSE + DBOPEN('ORD_LINES') + ENDIF + INDEX_FILE('ORD_LINES',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('ORDER_OPTS') > 0 + ELSE + DBOPEN('ORDER_OPTS') + ENDIF + INDEX_FILE('ORDER_OPTS',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('ORD_MISC') > 0 + ELSE + DBOPEN('ORD_MISC') + ENDIF + INDEX_FILE('ORD_MISC',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('ADDL_LINES') > 0 + ELSE + DBOPEN('ADDL_LINES') + ENDIF + INDEX_FILE('ADDL_LINES',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('ADDL_OPTS') > 0 + ELSE + DBOPEN('ADDL_OPTS') + ENDIF + INDEX_FILE('ADDL_OPTS',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('QUOTE_MAST') > 0 + ELSE + DBOPEN('QUOTE_MAST') + ENDIF + INDEX_FILE('QUOTE_MAST',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('QUOTE_LINE') > 0 + ELSE + DBOPEN('QUOTE_LINE') + ENDIF + INDEX_FILE('QUOTE_LINE',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('QUOTE_ADDL') > 0 + ELSE + DBOPEN('QUOTE_ADDL') + ENDIF + INDEX_FILE('QUOTE_ADDL',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('QUOTE_OPTS') > 0 + ELSE + DBOPEN('QUOTE_OPTS') + ENDIF + INDEX_FILE('QUOTE_OPTS',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('QUOTE_MISC') > 0 + ELSE + DBOPEN('QUOTE_MISC') + ENDIF + INDEX_FILE('QUOTE_MISC',ACTN, DISPMSG) // PACK / REINDEX DBF + + IF SELECT('ADDL_QOPT') > 0 + ELSE + DBOPEN('ADDL_QOPT') + ENDIF + INDEX_FILE('ADDL_QOPT',ACTN, DISPMSG) // PACK / REINDEX DBF +ENDIF + +IF EMPTY(ARCH_DIR) + +ELSE + +ENDIF + +RESTSCREEN(,,,,SVSCRN) + +RETURN + +***************************************************************** +* THIS FUNCTION IS INITIATED FROM THE IMPORT CUST VALID_FUNC FOR* +* THE FIELD PARTNUM IN THE CGW0MI DATABASE. * +***************************************************************** + +FUNCTION DEL_MISCPUOM(DEL_KEY) //** P3N - 3/10/98 + +LOCAL SVSEL := SELECT() +LOCAL OGET := GETACTIVE(), MORIGINAL + +IF EMPTY(OGET) +ELSEIF SELECT('MISC_PUOM') > 0 + IF EMPTY(DEL_KEY) + MORIGINAL := OGET:ORIGINAL + SELECT MISC_PUOM + DBSEEK(MORIGINAL) + DO WHILE MISC_PUOM->PARTNUM == MORIGINAL .AND. MISC_PUOM->(FOUND()) + REC_LOCK(1) + REPLACE PARTNUM WITH SPACE(LEN(PARTNUM)) + DELETE + UNLOCK + DBSEEK(MORIGINAL) + ENDDO + ENDIF + SELECT(SVSEL) +ENDIF + +RETURN .T. + +***************************************************************** +***************************************************************** +* THIS FUNCTION IS INITIATED FROM THE IMPORT CUST VALID_FUNC FOR* +* THE FIELD PROD_CODE IN THE CGW0PR DATABASE. * +***************************************************************** + +FUNCTION VALID_PRODCODE() //** P3N - 3/27/98 + +LOCAL OGET := GETACTIVE(), I +LOCAL INVCHRS := {'"','`','~','!','@','#','$','%','^','&','*','(',')','+', ; + '=','<','>',',','.','/','|','\','{','}','[',']',';',':'} +LOCAL WKFLD := ALLTRIM(OGET:BUFFER), RETVAL := .T. +IF AT('?',WKFLD) > 0 + RETVAL := .T. +ELSEIF AT(' ',WKFLD) > 0 .OR. AT("'", WKFLD) > 0 + ERR_BOX('** Invalid PRODUCT/MODEL - '+WKFLD+' **', ; + ' Should NOT have embedded SPACE(s)!') + RETVAL := .F. +ELSE + FOR I := 1 TO LEN(INVCHRS) + IF INVALID_CHR(WKFLD, INVCHRS[I]) + ERR_BOX('** Invalid PRODUCT/MODEL - '+WKFLD+' **', ; + ' Should NOT have embedded CHAR('+ INVCHRS[I] +')!' ) + RETVAL := .F. + EXIT + ENDIF + NEXT +ENDIF +RETURN RETVAL +***************************************************************** +FUNCTION INVALID_CHR(FLD,CHR) //** P3N - 4/1/98 +LOCAL RETVAL := .F. +IF AT(CHR, FLD) > 0 + RETVAL := .T. +ENDIF +RETURN RETVAL +***************************************************************** +* //** P3N - 5/19/98 (IS THIS A NEW RECORD? INITIALIZE THE KEY) +***************************************************************** +FUNCTION SHPKEY() +LOCAL SVSEL := SELECT() +SELECT USERFILE2 +IF EMPTY(ORDER_NUM) .OR. EMPTY(TRAN_NUM) + REC_LOCK(3) + REPLACE ORDER_NUM WITH TORD_LINES->ORDER_NUM + REPLACE LINE_NUM WITH TORD_LINES->LINE_NUM + REPLACE PROD_CODE WITH TORD_LINES->PROD_CODE + REPLACE PAR_PROD WITH TORD_LINES->PAR_PROD + REPLACE TRAN_NUM WITH STR( TORD_LINES->(RECNO()), 3 ) + IF FIELDPOS('SHIP_DATE') > 0 //** P3N - 01/15/02 + IF EMPTY(SHIP_DATE) + REPLACE SHIP_DATE WITH (CUR_MAST)->SHIP_DATE //** P3N - 10/14/98 + ENDIF + ENDIF //** P3N - 01/15/02 +**REPLACE SHIP_DATE WITH CURDATE + UNLOCK +ENDIF +SELECT(SVSEL) +RETURN .T. +***************************************************************** +* //** P3N - 4/16/98 (YES - I survived tax day!) Barely +***************************************************************** +FUNCTION VALID_CTRL(EDITWHAT) //** P3N - 4/16/98 +LOCAL RETVAL := .T., WKFLD := ALLTRIM(STR(LINE_NUM, 3)) + '/' + ALLTRIM(PROD_CODE) +LOCAL CURFILE := ALIAS(), CMPRQTY, MQTY, MDATE +IF FIELDPOS('SHIP_QTY') > 0 + MQTY := 'SHIP_QTY' +ENDIF +IF FIELDPOS('COMPL_QTY') > 0 + MQTY := 'COMPL_QTY' +ENDIF +IF FIELDPOS('SHIP_DATE') > 0 + MDATE := 'SHIP_DATE' +ENDIF +IF FIELDPOS('COMPL_DATE') > 0 + MDATE := 'COMPL_DATE' +ENDIF +IF EDITWHAT == 'QTY' //** DOES THE SHIP_QTY EXCEED THE TOTAL QTY? + CMPRQTY := (CURFILE)->&MQTY // NEW QTY IN THE CURRENT DBF + IF CMPRQTY > TORD_LINES->QUANTITY + ERR_BOX('** Invalid QTY on line - '+WKFLD+' **', ; + ' The TOTAL line quantity is - ' + ALLTRIM(STR(TORD_LINES->QUANTITY, 3)) , ; + ' The QTY can NOT EXCEED TOTAL line QTY! ') + RETVAL := .F. + ELSEIF CHK_QTY(MQTY) + RETVAL := .T. + ELSE + RETVAL := .F. + ENDIF + DSPLBO_QTY() +ELSEIF EDITWHAT == 'DATE' + IF !EMPTY((CURFILE)->&MQTY) .AND. EMPTY((CURFILE)->&MDATE) + ERR_BOX('** Invalid DATE/QTY on line - '+WKFLD+' **', ; + ' CAN NOT have a QTY without a DATE!') + RETVAL := .F. + ELSEIF EDT_TMP_OST() //** P3N - 1/15/99 + ELSE //** P3N - 1/15/99 + RETVAL := .F. //** P3N - 1/15/99 + ENDIF //** P3N - 1/15/99 +ENDIF +RETURN RETVAL +***************************************************************** +* //** P3N - 5/20/98 DISPLAY CURRENT BACKORDER QTY - USERFILE +***************************************************************** +FUNCTION DSPLBO_QTY() +LOCAL BOQTY := UBO_QTY() +LOCAL RETVAL := 'NOSAY' //** P3N - 12/7/98 +IF USERFILE2->(FIELDPOS('SHIP_QTY')) > 0 //** P3N - 01/15/02 + @ 05, 06 CLEAR TO 05,75 + @ 05, 19 SAY 'Order Qty: '+ STR(TORD_LINES->QUANTITY,6) +**@ 05, 20 SAY 'Order Qty: '+ STR(TORD_LINES->QUANTITY,3) //** P3N - 8/25/98 + @ 05, 45 SAY 'Backorder: '+ BOQTY +ELSEIF USERFILE2->(FIELDPOS('COMPL_QTY')) > 0 //** P3N - 01/15/02 +//** @ 04, 05 CLEAR TO 05,75 + @ 04, 15 SAY 'Order Qty: '+ STR(TORD_LINES->QUANTITY,6) +ENDIF +//**RETVAL := 'Order Qty: '+ STR(TORD_LINES->QUANTITY,6) +//**RETVAL := RETVAL + SPACE(10)+ 'Backorder: '+ BOQTY +RETURN RETVAL +***************************************************************** +* //** P3N - 5/12/98 CALC THE CURRENT BACKORDER QTY - USERFILE +***************************************************************** +FUNCTION UBO_QTY() +LOCAL OLQTY := TORD_LINES->QUANTITY, BOQTY := 0, SHPQTY := 0 +LOCAL RETVAL, SVREC := RECNO(), SVSEL := SELECT(), USERREC +SELECT USERFILE2 +USERREC := RECNO() +GO TOP +DO WHILE !EOF() + IF FIELDPOS('SHIP_QTY') > 0 //** P3N - 01/15/02 + SHPQTY := SHPQTY + SHIP_QTY +//**ELSEIF FIELDPOS('COMPL_QTY') > 0 //** P3N - 01/15/02 +//**SHPQTY := SHPQTY + COMPL_QTY + ENDIF + DBSKIP(+1) +ENDDO +GOTO USERREC +SELECT(SVSEL) +GOTO SVREC +BOQTY := OLQTY - SHPQTY +RETURN STR(BOQTY, 6) +**RETURN STR(BOQTY, 3) //** P3N - 8/25/98 +***************************************************************** +* //** P3N - 5/12/98 CALC THE CURRENT BACKORDER QTY - ORD_SHIP +***************************************************************** +FUNCTION BO_QTY(RETWHAT) +LOCAL OLQTY := TORD_LINES->QUANTITY, BOQTY := 0, SHPQTY := 0 +LOCAL RETVAL, SVREC := RECNO(), SVSEL := SELECT() +LOCAL SVTRAN := STR(TORD_LINES->(RECNO()), 3) //** P3N - 11/4/98 +LOCAL CMPRKEY //** P3N - 11/4/98 +LOCAL SVKEY := TORD_LINES->ORDER_NUM + STR(TORD_LINES->LINE_NUM, 3) +SVKEY := SVKEY + TORD_LINES->PROD_CODE + TORD_LINES->PAR_PROD +CMPRKEY := SVKEY //** P3N - 11/4/98 +IF EMPTY(RETWHAT) + RETWHAT := ' ' +ENDIF + +DBOPEN('ORD_SHIP') +IF DBSEEK(SVKEY) + DO WHILE !EOF() .AND. CMPRKEY == SVKEY + IF EMPTY(BOQTY) + BOQTY := OLQTY - SHIP_QTY + ELSE + BOQTY := BOQTY - SHIP_QTY + ENDIF + SHPQTY := SHPQTY + SHIP_QTY + DBSKIP(+1) + CMPRKEY := ORDER_NUM+STR(LINE_NUM, 3)+PROD_CODE+PAR_PROD +****IF EMPTY(ORD_SHIP->TRAN_NUM) +****ELSE +******SVKEY := SVKEY + SVTRAN +**** CMPRKEY := CMPRKEY + SVTRAN +****ENDIF + ENDDO +ELSE + BOQTY := OLQTY +ENDIF +SELECT(SVSEL) +GOTO SVREC +IF RETWHAT == 'SHPQTY' + RETVAL := SHPQTY +ELSE + RETVAL := BOQTY +ENDIF + +RETURN STR(RETVAL, 6) + +********************************************************************* +***** //** P3N - 5/5/98 RETRIEVE THE ORDER LINE QTY +********************************************************************* + +FUNCTION CUROL_QTY(OLKEY, ADDL) +LOCAL RETVAL := 0, SEEKKEY, CUR_OL +LOCAL CURFILE := ALIAS() +IF EMPTY(OLKEY) + IF EMPTY(USERFILE2->PAR_PROD) + SEEKKEY := (CURFILE)->ORDER_NUM + STR((CURFILE)->LINE_NUM, 3) + CUR_OL := 'ORD_LINES' + ELSE + SEEKKEY := (CURFILE)->ORDER_NUM + (CURFILE)->PROD_CODE + ; + STR((CURFILE)->LINE_NUM, 3) + CUR_OL := 'ADDL_LINES' + ENDIF +ELSE + SEEKKEY := OLKEY + CUR_OL := 'ORD_LINES' + IF ADDL + CUR_OL := 'ADDL_LINES' + ENDIF +ENDIF +IF (CUR_OL)->(DBSEEK(SEEKKEY)) + RETVAL := (CUR_OL)->QUANTITY +ENDIF +RETURN RETVAL +***************************************************************** +* //** P3N - 5/20/98 RETREIVE THE TORD_LINES QTY FOR A GIVEN KEY +***************************************************************** +FUNCTION TOL_QTY(TOLKEY) +LOCAL SVREC := TORD_LINES->(RECNO()), TOL_QTY := 0 +TORD_LINES->(DBGOTO(1)) +DO WHILE TORD_LINES->(!EOF()) + IF TORD_LINES->ORDER_NUM + STR(TORD_LINES->LINE_NUM, 3) + ; + TORD_LINES->PROD_CODE + TORD_LINES->PAR_PROD + ; + STR(TORD_LINES->(RECNO()),3) == TOLKEY + TOL_QTY := TOL_QTY + TORD_LINES->QUANTITY + ENDIF + TORD_LINES->(DBSKIP(+1)) +ENDDO +TORD_LINES->(DBGOTO(SVREC)) +RETURN TOL_QTY +***************************************************************** +* //** P3N - 5/20/98 DISPLAY TORD_LINES BROWSE FIELDS +***************************************************************** +FUNCTION TOL_BROWSE_DSPL() +LOCAL INSTK, RETVAL, PROD_SHIP := ' ', SVLINE, SVREC := (ALIAS())->(RECNO()) +STATIC PREVLINE, PREVRETVAL +IF SELECT('ORD_SHIP') > 0 //** P3N - 02/17/04 + PROD_SHIP := 'SHIP' //** P3N - 02/17/04 +ELSE //** P3N - 02/17/04 + PROD_SHIP := 'PROD' //** P3N - 02/17/04 +ENDIF //** P3N - 02/17/04 +IF IN_STOCK == 'Y' + INSTK := ' (S)' +ELSE + INSTK := ' ' +ENDIF +RETVAL := STR(LINE_NUM, 3) + '/' + PROD_CODE + '-' + ; + PAR_PROD + ' ' +HOW_MEAS + ' ' + ENTRY_SIZE + INSTK +/* +//** SUPPRESS THE LINE_NUM FOR READABILITY +*IF PROD_SHIP == 'PROD' //** P3N - 02/17/04 + IF LASTKEY() = 24 //** DOWN ARROW SKIP(-1) + SVLINE := (ALIAS())->LINE_NUM + (ALIAS())->(DBSKIP(-1)) + IF (ALIAS())->(BOF()) + PREVLINE := 0 + ELSEIF SVLINE == (ALIAS())->LINE_NUM + PREVLINE := SVLINE + ENDIF + (ALIAS())->(DBGOTO(SVREC)) + ELSEIF LASTKEY() = 5 //** UP ARROW SKIP(+1) + SVLINE := (ALIAS())->LINE_NUM + (ALIAS())->(DBSKIP(+1)) + IF (ALIAS())->(EOF()) + PREVLINE := 0 + ELSEIF SVLINE == (ALIAS())->LINE_NUM + PREVLINE := SVLINE + ENDIF + (ALIAS())->(DBGOTO(SVREC)) + ENDIF + IF (ALIAS())->(RECNO()) = 1 //** P3N - 02/17/04 + //** CONTINUE WITH THE CURRENT RETVAL AND SET THE PREVLINE VAR + PREVLINE := (ALIAS())->LINE_NUM //** P3N - 02/17/04 + ELSEIF (ALIAS())->LINE_NUM == PREVLINE //** P3N - 02/17/04 + RETVAL := SPACE(4) + PROD_CODE + '-' + ; + PAR_PROD + ' ' +HOW_MEAS + ' ' + ENTRY_SIZE + INSTK + ELSE //** P3N - 02/17/04 + //** CONTINUE WITH THE CURRENT RETVAL AND SET THE PREVLINE VAR + PREVLINE := (ALIAS())->LINE_NUM //** P3N - 02/17/04 + ENDIF //** P3N - 02/17/04 +*ENDIF //** P3N - 02/17/04 +PREVRETVAL := RETVAL +*/ +RETURN RETVAL +***************************************************************** +* //** P3N - 5/20/98 DISPLAY ORD_SHIP BROWSE FIELDS +***************************************************************** +FUNCTION OS_BROWSE_DSPL() +LOCAL RETVAL := STR(LINE_NUM, 3) + '/' + PROD_CODE + ' - ' + PAR_PROD +//**IF USERFILE2->(FIELDPOS('COMPL_DATE')) > 0 //** P3N - 01/15/02 +//** RETVAL := ORDER_NUM + '/'+STR(LINE_NUM, 3) + '/' + PROD_CODE + ' - ' + PAR_PROD +//**ENDIF //** P3N - 01/15/02 +RETURN RETVAL +******************************************************************** +//** P3N - EDIT THE SHIP QTY TO THE TOTAL QTY +//** 4/20/98 +******************************************************************** +FUNCTION CHK_QTY(QTY) +LOCAL SV_SEL := SELECT(), SVREC +LOCAL SEEKORD, USERKEY, TOTQTY := 0, LINEQTY := 0 +LOCAL RETVAL := .T., WKFLD := ALLTRIM(STR(LINE_NUM, 3)) + '/' + ALLTRIM(PROD_CODE) +SELECT('USERFILE2') +SVREC := USERFILE2->(RECNO()) +SEEKORD := USERFILE2->ORDER_NUM + STR(USERFILE2->LINE_NUM, 3) + ; + USERFILE2->PROD_CODE + USERFILE2->PAR_PROD +GO TOP +DO WHILE USERFILE2->(!EOF()) + USERKEY := USERFILE2->ORDER_NUM + STR(USERFILE2->LINE_NUM, 3) + ; + USERFILE2->PROD_CODE + USERFILE2->PAR_PROD + IF USERKEY == SEEKORD + IF EMPTY(TOTQTY) + LINEQTY := TORD_LINES->QUANTITY + ENDIF + TOTQTY := TOTQTY + USERFILE2->&QTY + ENDIF + USERFILE2->(DBSKIP(+1)) +ENDDO +IF TOTQTY <= LINEQTY + RETVAL := .T. +ELSE + RETVAL := .F. + ERR_BOX('** Invalid LINE / QTY for - '+ WKFLD + ' **', ; + ' The LINE Quantity is - ' + ALLTRIM(STR(LINEQTY, 3)) , ; + ' The TOTAL QTY - ' + ALLTRIM(STR(TOTQTY, 3)) + ' can NOT EXCEED LINE QTY! ') +ENDIF +GOTO SVREC +SELECT(SV_SEL) +RETURN RETVAL +******************************************************************** +FUNCTION GET_CTL_KEY( NUM_KEYS ) + +IF NUM_KEYS = NIL + RETURN { TORD_LINES->ORDER_NUM, TORD_LINES->LINE_NUM , ; + TORD_LINES->PROD_CODE, TORD_LINES->PAR_PROD, ; + STR(TORD_LINES->(RECNO()),3) } +ELSEIF NUM_KEYS = 1 + RETURN { TORD_LINES->ORDER_NUM } +ELSE + ? ABEND +ENDIF +******************************************************************** +//** P3N - 11/13/98 FRIDAY THE 13TH +******************************************************************** +FUNCTION GET_ASA_KEY( ) +RETURN { ORD_MAST->ORDER_NUM } +******************************************************************** +//** P3N - UPDATE THE SHIPPING ADDRESS INFORMATION 'CUST_MAST' +//** 4/22/98 - F3 FROM SCREEN 3220(SCREEN-3245) +******************************************************************** +FUNCTION UPD_SHIPADDR(BROW_ONLY) +LOCAL SVSCRN:= SAVESCREEN(), WK_FLD +LOCAL SVSEL := SELECT(), DOAUDIT := .T. +LOCAL ACTION_CODE := GETAVAR( 'ACTION_CODE' ) +LOCAL PARENTFIL := NIL, ASR_ARR, OPT +LOCAL MTITLE := 'Alt. Ship Info. - ' + ALLTRIM(ORD_MAST->ORDER_NUM)+'/' +LOCAL USERKEY := ORD_MAST->CUST_ID, ADD_REC := .F. +IF EMPTY(BROW_ONLY) //** P3N - 1/27/00 + BROW_ONLY := .F. //** P3N - 1/27/00 +ENDIF //** P3N - 1/27/00 +IF SELECT(CUST_MAST) > 0 +ELSE + DBOPEN('CUST_MAST') +ENDIF + +IF SELECT(ALTSHIPADR) > 0 //** P3N - 11/13/98 +ELSE //** P3N - 11/13/98 + DBOPEN('ALTSHIPADR') //** P3N - 11/13/98 +ENDIF //** P3N - 11/13/98 + +IF CUST_MAST->(DBSEEK(USERKEY)) + MTITLE := MTITLE + ALLTRIM(CUST_MAST->COMP_NAME) + IF _OC_CAPABLE .AND. ACTION_CODE = 'ADD' + OPT := 1 + ELSE + OPT := 3 + ENDIF + IF ALTSHIPADR->(DBSEEK(ORD_MAST->ORDER_NUM)) + ELSE + ALTSHIPADR->(DBAPPEND()) //**PN3 -11/13/98 + REC_LOCK( 3, 'ALTSHIPADR' ) //**P3N -11/13/98 + ALTSHIPADR->ORDER_NUM := ORD_MAST->ORDER_NUM //**P3N -11/13/98 + ALTSHIPADR->BOSHP_METH := CUST_MAST->BOSHP_METH //**P3N -11/13/98 + ALTSHIPADR->BOSHP_SCRN := CUST_MAST->BOSHP_METH //**P3N -11/13/98 + ALTSHIPADR->BOSHP_STRM := CUST_MAST->BOSHP_METH //**P3N -11/13/98 + ALTSHIPADR->(DBUNLOCK()) //**P3N -11/13/98 + ENDIF //**P3N -11/13/98 + IF BROW_ONLY //**P3N - 1/27/00 + ACTION_CODE := 'REV' //**P3N - 1/27/00 + OPT := 3 //**P3N - 1/27/00 + ENDIF //**P3N -11/13/98 + ASR_ARR := {'ALTSHIPADR',ADD_REC, , , , , ACTION_CODE , '3245', .F.} + ADD_SING_REC(OPT, MTITLE, ASR_ARR) +ELSE + ERR_BOX('** Customer -' + ALLTRIM(USERKEY) + ' NOT Found! **') +ENDIF + +CLOSE ALTSHIPADR //** P3N - 11/13/98 + +SELECT(SVSEL) +RESTSCREEN(,,,,SVSCRN) +RETURN .T. +******************************************************************** +//** P3N - WILL WE SHIP THE ENTIRE ORDER? +//** 5/11/98 ( HAPPY BIRTHDAY DON-DON) +******************************************************************** +FUNCTION SHIP_TOTQTY(OPT, TITLE, CURMST, GBROWSE) +LOCAL CUR_MAST := CURMST, SHIPORD, SHIPREST +LOCAL MTITLE := TITLE +LOCAL SEEKORD, CHOICE := 0, SVCOLOR +LOCAL PARR := { 'Entire Order Shipment', ; + 'Ship Everything EXCEPT SCREENS'} +LOCAL SVSEL := SELECT() +LOCAL SVSCRN := SAVESCREEN() +DBOPEN('PRODUCT') +DBOPEN('ORD_SHIP') +DBOPEN('ADDL_LINES') +DBOPEN(CUR_MAST) +DBOPEN('ORD_LINES') +DO WHILE .T. + CLS + IF EMPTY(MTITLE) + MTITLE := 'Order Shipping' + ENDIF + SAYTITLE(MTITLE, '3220') + + IF GBROWSE + GBROWSE(, 'ORDER SHIPPING SELECTION', CUR_MAST) + IF LASTKEY() = 27 + EXIT + ENDIF + ENDIF + + SEEKORD := (CUR_MAST)->ORDER_NUM + IF EMPTY((CUR_MAST)->ORDER_NEW) //** P3N - 12/9/98 + IF ALL_SHIPPED(SEEKORD, 'OL') .AND. ALL_SHIPPED(SEEKORD, 'XL') .AND. ; + ALL_SHIPPED(SEEKORD, 'SCREENS') .AND. ALL_SHIPPED(SEEKORD, 'MISC') + ERR_BOX ('** The ENTIRE order is already shipped! **') + SHIPORD := .F. + ELSEIF ORD_SHIP->(DBSEEK(SEEKORD)) + M1 := '*** You are about to COMPLETE Order - ' + ALLTRIM(SEEKORD) + M2 := '*** Do you want to SHIP remaining Items, ' + M3 := ' and CLOSE this ORDER? ' + SHIPORD := PROMPT_BOX(M1,M2,M3) + SHIPREST := .T. + ELSE + SHIPORD := .T. + SHIPREST := .F. + ENDIF + ELSE //** P3N - 12/9/98 + //** PARTIAL INVOICE - THIS ORDER SHOULD BE FILLED BY ORDER_NEW + ERR_BOX ('** The ENTIRE order is already shipped! **') + SHIPORD := .F. + ENDIF + IF SHIPORD + IF GET_INV_SHPDT() //** P3N - 5/12/98 + @ 2,0 CLEAR + SVCOLOR := SETCOLOR(HREV) + @ 8,20 SAY 'Select Shipment activity for ORDER - ' + SEEKORD + SETCOLOR(SVCOLOR) + DO WHILE .T. + CHOICE := PICKLIST(PARR,10,25) //Select what ACTION to take????? + IF LASTKEY() = 27 + EXIT + ELSEIF EMPTY(CHOICE) + ELSEIF CHOICE = 2 + SHIP_ALL(SEEKORD, 'NOSCREENS', CUR_MAST, SHIPREST ) + EXIT + ELSEIF CHOICE = 1 + SHIP_ALL(SEEKORD, 'SCREENS', CUR_MAST, SHIPREST) + EXIT + ENDIF + ENDDO + ENDIF + ENDIF + IF GBROWSE + ELSE + EXIT + ENDIF +ENDDO +RESTSCREEN(,,,,SVSCRN) +SELECT(SVSEL) +RETURN .T. +******************************************************************** +//** P3N - SHIP THE ENTIRE ORDER! +//** 5/11/98 ( HAPPY BIRTHDAY DON-DON) +******************************************************************** +FUNCTION SHIP_ALL(SEEKORD, SHIPSCREENS, CUR_MAST, SHIPREST) +LOCAL SVSEL := SELECT(), OLKEY, ADDL, ITEM_CAT_CODE, DOAUDIT := .T. +LOCAL CUR_OL := 'ORD_LINES', TORDREC := 1 +WAIT_BOX('** Processing your SHIPPING request! **', ; + '** Please Wait! **') +IF SELECT('TORD_LINES') > 0 + TORDREC := TORD_LINES->(RECNO()) +ELSEIF SHIPSCREENS == 'SCREENS' + DBOPEN('TORD_LINES') + TORDREC := TORD_LINES->(RECNO()) + IF TORD_LINES->(DBSEEK(SEEKORD)) + //** ALREADY HAVE THE TORD_LINES BUILT + ELSE + CLOSE TORD_LINES + BLD_TORD_LINES(SEEKORD) + ENDIF +ENDIF +IF SHIPREST // SHIP THE REST OF THE ORDER! + SHIP_REST(SEEKORD, SHIPSCREENS) +ELSEIF (CUR_OL)->(DBSEEK(SEEKORD)) // FIND THE FIRST ORDER LINE RECORD! + SELECT TORD_LINES + GO TOP + DO WHILE TORD_LINES->(!EOF()) + ADD_ONEREC('TORD_LINES', 'ORD_SHIP' , DOAUDIT) + REC_LOCK(3, 'ORD_SHIP') + ORD_SHIP->TRAN_NUM := STR(TORD_LINES->(RECNO()),3) +//**ORD_SHIP->(DBUNLOCK()) + **** IF SHIPSCREENS == 'NOSCREENS' ?CATEGORY SCREENS? + **** SHIP EVERYTHING EXCEPT SCREENS ? + ITEM_CAT_CODE := GET_CATCODE(PROD_CODE) + //** P3N - 1/28/99 +//** (ITEM_CAT_CODE = 'SCREENS' .OR. ORD_SHIP->PROD_CODE == 'SCREENS') + IF SHIPSCREENS == 'NOSCREENS' .AND. ; + (ITEM_CAT_CODE = 'SCREENS' .OR. TORD_LINES->PROD_CODE == 'SCREENS' ; + .OR. TORD_LINES->PROD_CODE == 'SCRFLNK') + ****BYPASS SCREENS - DO NOT SHIP + REPLACE ORD_SHIP->SHIP_DATE WITH CTOD(' / / ') //** P3N - 1/29/99 + REPLACE ORD_SHIP->SHIP_QTY WITH 0 //** P3N - 1/29/99 + ELSE +//** REC_LOCK(3, 'ORD_SHIP') + REPLACE ORD_SHIP->SHIP_DATE WITH (CUR_MAST)->SHIP_DATE //** P3N - 10/14/98 + IF ORD_SHIP->PROD_CODE == 'MISCITM' + REPLACE ORD_SHIP->SHIP_QTY WITH ; + CURMISC_QTY(ORD_SHIP->ORDER_NUM, ORD_SHIP->PROD_CODE, STR(ORD_SHIP->LINE_NUM,3) ) + ELSEIF ORD_SHIP->PROD_CODE = 'ORD' + REPLACE ORD_SHIP->SHIP_QTY WITH ; + CURMISC_QTY(ORD_SHIP->ORDER_NUM, ORD_SHIP->PROD_CODE, STR(ORD_SHIP->LINE_NUM,3) ) + ELSE +//** REPLACE ORD_SHIP->SHIP_QTY WITH CUROL_QTY(OLKEY, ADDL) + REPLACE ORD_SHIP->SHIP_QTY WITH TORD_LINES->QUANTITY + ENDIF + ENDIF + ORD_SHIP->(DBUNLOCK()) + TORD_LINES->(DBSKIP(+1)) + ENDDO + SELECT(SVSEL) +ELSE + ERR_BOX('NO lines to Ship!') +ENDIF +DEL_ORD_SHIP(SEEKORD) +TORD_LINES->(DBGOTO(TORDREC)) +SELECT(SVSEL) +RETURN .T. +******************************************************************** +//** P3N - GET THE MISC QTYS FOR SHIPPING PURPOSES +//** 7/29/98 +******************************************************************** +FUNCTION CURMISC_QTY(ORDNUM, PRODCODE, LNUM ) +LOCAL RETVAL := 0, SVSEL := SELECT(), OMIKEY := ORDNUM + LNUM +IF PRODCODE == 'MISCITM' + DBOPEN('ORD_MISC') + IF ORD_MISC->(DBSEEK(OMIKEY)) + RETVAL := ORD_MISC->QUANTITY + ENDIF +ELSEIF PRODCODE = 'ORD' + IF PRODCODE == 'ORDMISC' + IF ALLTRIM(LNUM) == '1' + RETVAL := (CUR_MAST)->MISC_QTY1 + ELSEIF ALLTRIM(LNUM) == '2' + RETVAL := (CUR_MAST)->MISC_QTY2 + ELSEIF ALLTRIM(LNUM) == '3' + RETVAL := (CUR_MAST)->MISC_QTY3 + ENDIF + ELSEIF PRODCODE == 'ORDNOTX' + IF ALLTRIM(LNUM) == '1' + RETVAL := (CUR_MAST)->NOTX_QTY1 + ELSEIF ALLTRIM(LNUM) == '2' + RETVAL := (CUR_MAST)->NOTX_QTY2 + ELSEIF ALLTRIM(LNUM) == '3' + RETVAL := (CUR_MAST)->NOTX_QTY3 + ENDIF + ENDIF +ENDIF +SELECT(SVSEL) +RETURN RETVAL +******************************************************************** +//** P3N - DELETE THE ORDER SHIP REC IF EMPTY SHIP AND INVOICE QTYS +//** 5/20/98 +******************************************************************** +FUNCTION DEL_ORD_SHIP(SEEKORD) +LOCAL DELARR := {}, I +IF ORD_SHIP->(DBSEEK(SEEKORD)) // FIND THE FIRST ORDER SHIP RECORD! + DO WHILE ORD_SHIP->(!EOF()) .AND. ORD_SHIP->ORDER_NUM == SEEKORD + IF EMPTY(ORD_SHIP->SHIP_QTY) .AND. EMPTY(ORD_SHIP->INV_QTY) + AADD(DELARR, ORD_SHIP->(RECNO()) ) + ENDIF + ORD_SHIP->(DBSKIP(+1)) + ENDDO + FOR I := 1 TO LEN(DELARR) + ORD_SHIP->(DBGOTO(DELARR[I])) + REC_LOCK(3, 'ORD_SHIP') + REPLACE ORD_SHIP->ORDER_NUM WITH ' ' + REPLACE ORD_SHIP->LINE_NUM WITH 0 + REPLACE ORD_SHIP->PROD_CODE WITH ' ' + REPLACE ORD_SHIP->PAR_PROD WITH ' ' + REPLACE ORD_SHIP->SHIP_DATE WITH CTOD(' / / ') + ORD_SHIP->(DBDELETE()) + ORD_SHIP->(DBUNLOCK()) + NEXT +ENDIF +RETURN .T. +******************************************************************** +//** P3N - ZERO ALL ORDER SHIP REC SHIP AND INVOICE QTYS +//** 10/15/98 +******************************************************************** +FUNCTION REMOVE_ORD_SHIP() +LOCAL SVSEL := SELECT() +LOCAL M1 := '*** Are you sure you want to DELETE / REMOVE ' +LOCAL M2 := '*** ALL existing Shipping Information ???' +LOCAL M3 := ' ', RETVAL := .F., I, DELARR := {} +LOCAL SEEKORD := (CUR_MAST)->ORDER_NUM +LOCAL REMOVE_INV := .F., CLOSEBT := .F. //** P3N - 12/22/98 +LOCAL DONOTREMOVE := .T., CLOSESH := .F. //** P3N - 12/22/98 + +IF EMPTY(ORD_MAST->IDATE_FST) + DONOTREMOVE := .F. +ELSE + M1 := 'THIS ORDER HAS ALREADY BEEN INVOICED!!! ' + M2 := '*** Are you sure you want to DELETE / REMOVE ' + M3 := '*** ALL existing Shipping Information ???' + REMOVE_INV := .T. //** P3N -12/22/98 +ENDIF +IF PROMPT_BOX(M1,M2,M3) + IF POSTED_ORDER(SEEKORD) + ERR_BOX('** Order already INVOICED and POSTED to the A/S 400! **', ; + '** You CAN NOT remove these Shipping records !') + DONOTREMOVE := .T. //** P3N - 12/22/98 + ELSEIF REMOVE_INV //** P3N - 12/22/98 + M1 := 'IF YOU PROCEED YOU WILL ERASE THE FIRST INVOICE!!' + M2 := ' ' + M3 := 'CONTACT SUPERVISOR TO PROCEED !' + ERR_BOX(M1, M2, M3) //** P3N - 12/22/98 + DONOTREMOVE := .T. //** P3N - 12/22/98 + IF LASTKEY() == 126 //SHIFT + "~" //** P3N - 12/22/98 + DONOTREMOVE := .F. //** P3N - 12/22/98 + ENDIF //** P3N - 12/22/98 + ENDIF //** P3N - 12/22/98 + IF DONOTREMOVE //** P3N - 12/22/98 + ELSEIF ORD_SHIP->(DBSEEK(SEEKORD)) // FIND THE FIRST ORDER SHIP RECORD! + DO WHILE ORD_SHIP->(!EOF()) .AND. ORD_SHIP->ORDER_NUM == SEEKORD + REC_LOCK(3, 'ORD_SHIP') + REPLACE ORD_SHIP->SHIP_QTY WITH 0 + REPLACE ORD_SHIP->INV_QTY WITH 0 + ORD_SHIP->(DBUNLOCK()) + ORD_SHIP->(DBSKIP(+1)) + ENDDO + DEL_ORD_SHIP(SEEKORD) + REC_LOCK(3, CUR_MAST) //** P3N - 1/15/99 + REPLACE (CUR_MAST)->SHIP_DATE WITH CTOD(' / / ') //** P3N - 1/15/99 + IF REMOVE_INV //** P3N - 12/22/98 + REPLACE (CUR_MAST)->IDATE_FST WITH CTOD(' / / ') //** P3N - 12/22/98 + REPLACE (CUR_MAST)->ITIME_FST WITH SPACE(5) //** P3N - 12/22/98 + REPLACE (CUR_MAST)->IDATE_LAST WITH CTOD(' / / ') //** P3N - 12/22/98 + REPLACE (CUR_MAST)->ITIME_LAST WITH SPACE(5) //** P3N - 12/22/98 + IF SELECT('BILLTRAN') > 0 //** P3N - 12/22/98 + ELSE //** P3N - 12/22/98 + DBOPEN('BILLTRAN') //** P3N - 12/22/98 + CLOSEBT := .T. //** P3N - 12/22/98 + ENDIF //** P3N - 12/22/98 + IF BILLTRAN->(DBSEEK((CUR_MAST)->ORDER_NUM)) //** P3N - 12/22/98 + DELARR := {} + DO WHILE BILLTRAN->(!EOF()) .AND. ; + BILLTRAN->ORDER_NUM == (CUR_MAST)->ORDER_NUM + AADD(DELARR, BILLTRAN->(RECNO()) ) + BILLTRAN->(DBSKIP(+1)) //** P3N - 1/15/98 + ENDDO + FOR I := 1 TO LEN(DELARR) + BILLTRAN->(DBGOTO(DELARR[I])) //** P3N - 1/15/99 + REC_LOCK(3, 'BILLTRAN') //** P3N - 1/15/99 + BILLTRAN->ORDER_NUM := SPACE(LEN(BILLTRAN->ORDER_NUM)) + BILLTRAN->INVAM := 0 //** P3N - 1/15/99 + BILLTRAN->(DBDELETE()) //** P3N - 1/15/99 + BILLTRAN->(DBUNLOCK()) //** P3N - 1/15/98 + NEXT //** P3N - 1/15/99 + ENDIF //** P3N - 12/22/98 + IF CLOSEBT //** P3N - 12/22/98 + CLOSE BILLTRAN //** P3N - 12/22/98 + ENDIF //** P3N - 12/22/98 + IF SELECT('SALEHIST') > 0 //** P3N - 12/22/98 + ELSE //** P3N - 12/22/98 + DBOPEN('SALEHIST') //** P3N - 12/22/98 + CLOSESH := .T. //** P3N - 12/22/98 + ENDIF //** P3N - 12/22/98 + IF SALEHIST->(DBSEEK((CUR_MAST)->ORDER_NUM)) //** P3N - 12/22/98 + DELARR := {} + DO WHILE SALEHIST->(!EOF()) .AND. ; + SALEHIST->ORDER_NUM == (CUR_MAST)->ORDER_NUM + AADD(DELARR, SALEHIST->(RECNO()) ) + SALEHIST->(DBSKIP(+1)) //** P3N - 1/15/99 + ENDDO + FOR I := 1 TO LEN(DELARR) + SALEHIST->(DBGOTO(DELARR[I])) //** P3N - 1/15/99 + REC_LOCK(3, 'SALEHIST') //** P3N - 1/15/99 + SALEHIST->ORDER_NUM := SPACE(LEN(SALEHIST->ORDER_NUM)) + SALEHIST->AMOUNT := 0 //** P3N - 1/15/99 + SALEHIST->(DBDELETE()) //** P3N - 1/15/99 + SALEHIST->(DBUNLOCK()) //** P3N - 1/15/99 + NEXT //** P3N - 1/15/99 + ENDIF //** P3N - 12/22/98 + IF CLOSESH //** P3N - 12/22/98 + CLOSE SALEHIST //** P3N - 12/22/98 + ENDIF //** P3N - 12/22/98 + ENDIF //** P3N - 12/22/98 + (CUR_MAST)->(DBUNLOCK()) //** P3N - 1/15/99 + RETVAL := .T. + ENDIF +ENDIF +SELECT(SVSEL) +RETURN RETVAL +******************************************************************** +//** P3N - SHIP THE REST OF THE ORDER +//** 5/15/98 +******************************************************************** +FUNCTION SHIP_REST(SEEKORD, SHIPSCREENS) +LOCAL DOAUDIT := .T., ADDL, OLKEY, TOTQTY, OSKEY, SHPQTY, ITEM_CAT_CODE +LOCAL SVSEL := SELECT(), NEWORD, NEWLINE, NEWPROD, NEWPAR, NEWQTY, SVREC +LOCAL TOLKEY +ADDZEROSHIP(SEEKORD, SHIPSCREENS) //** ADD ALL ZERO SHIP RECS TO ORD_SHIP +SELECT ORD_SHIP +IF ORD_SHIP->(DBSEEK(SEEKORD)) // FIND THE FIRST ORDER SHIP RECORD! + DO WHILE ORD_SHIP->(!EOF()) .AND. SEEKORD == ORD_SHIP->ORDER_NUM + IF EMPTY(ORD_SHIP->PAR_PROD) + OLKEY := ORD_SHIP->ORDER_NUM + STR(ORD_SHIP->LINE_NUM,3) + ADDL := .F. + ELSE + OLKEY := ORD_SHIP->ORDER_NUM + ORD_SHIP->PROD_CODE + STR(ORD_SHIP->LINE_NUM,3) + ADDL := .T. //** ADDL LINES FILE + ENDIF + //** P3N - 11/04/98 + OSKEY := ORD_SHIP->ORDER_NUM + STR(ORD_SHIP->LINE_NUM,3)+ ; + ORD_SHIP->PROD_CODE+ORD_SHIP->PAR_PROD+ORD_SHIP->TRAN_NUM + IF ORD_SHIP->PROD_CODE = 'MISCITM' .OR. ORD_SHIP->PROD_CODE = 'ORD' + TOTQTY := CURMISC_QTY(ORD_SHIP->ORDER_NUM, ORD_SHIP->PROD_CODE, STR(ORD_SHIP->LINE_NUM,3) ) + ELSE + TOLKEY := ORD_SHIP->ORDER_NUM + STR(ORD_SHIP->LINE_NUM, 3) + ; + ORD_SHIP->PROD_CODE + ORD_SHIP->PAR_PROD + ORD_SHIP->TRAN_NUM + TOTQTY := TOL_QTY(TOLKEY) + ENDIF + SHPQTY := LINESHPQTY(OSKEY) + DO WHILE ORD_SHIP->(!EOF()) .AND. ; + OSKEY == ORD_SHIP->ORDER_NUM + STR(ORD_SHIP->LINE_NUM,3) + ; + ORD_SHIP->PROD_CODE + ORD_SHIP->PAR_PROD + ORD_SHIP->TRAN_NUM + NEWORD := ORD_SHIP->ORDER_NUM + NEWLINE := ORD_SHIP->LINE_NUM + NEWPROD := ORD_SHIP->PROD_CODE + NEWPAR := ORD_SHIP->PAR_PROD + ORD_SHIP->(DBSKIP(+1)) + ENDDO + ITEM_CAT_CODE := GET_CATCODE(PROD_CODE) + //** P3N - 1/28/99 +//** (ITEM_CAT_CODE = 'SCREENS' .OR. ORD_SHIP->PROD_CODE == 'SCREENS') + IF SHIPSCREENS == 'NOSCREENS' .AND. ; + (ITEM_CAT_CODE = 'SCREENS' .OR. ORD_SHIP->PROD_CODE == 'SCREENS' ; + .OR. ORD_SHIP->PROD_CODE == 'SCRFLNK') + // BYPASS THE SCREENS FOR SHIPMENT + ELSE + IF TOTQTY == SHPQTY + // EVERYTHING IS ALREADY SHIPPED - CONTINUE + ELSE + SVREC := ORD_SHIP->(RECNO()) + ADD_ONEREC('ORD_SHIP', 'ORD_SHIP' , DOAUDIT) + NEWQTY := TOTQTY - SHPQTY + REC_LOCK(3) + REPLACE ORD_SHIP->ORDER_NUM WITH NEWORD + REPLACE ORD_SHIP->LINE_NUM WITH NEWLINE + REPLACE ORD_SHIP->PROD_CODE WITH NEWPROD + REPLACE ORD_SHIP->PAR_PROD WITH NEWPAR + REPLACE ORD_SHIP->SHIP_DATE WITH (CUR_MAST)->SHIP_DATE //** P3N - 10/14/98 + REPLACE ORD_SHIP->SHIP_QTY WITH NEWQTY + UNLOCK + GOTO SVREC + ENDIF + ENDIF + ENDDO +ENDIF +SELECT(SVSEL) +RETURN +******************************************************************** +//** P3N - GET THE TOTAL SHIP QTY FOR A GIVEN LINE +//** 5/15/98 +******************************************************************** +FUNCTION LINESHPQTY(OSKEY, TRANKEY) +LOCAL SVSEL := SELECT(), SHPQTY := 0 +LOCAL SVREC := ORD_SHIP->(RECNO()), CMPRKEY +SELECT(SVSEL) +SELECT ORD_SHIP +IF DBSEEK(OSKEY) + //** P3N - 11/04/98 + DO WHILE !EOF() .AND. ORD_SHIP->ORDER_NUM == (CUR_MAST)->ORDER_NUM + CMPRKEY := ORDER_NUM + STR(LINE_NUM, 3)+PROD_CODE+PAR_PROD+TRAN_NUM + IF TRANKEY == 'NOTRAN' + CMPRKEY := ORDER_NUM + STR(LINE_NUM, 3)+PROD_CODE+PAR_PROD + ENDIF + IF CMPRKEY == OSKEY + SHPQTY := SHPQTY + SHIP_QTY + ENDIF + DBSKIP(+1) + ENDDO +ENDIF +GOTO SVREC +SELECT(SVSEL) +RETURN SHPQTY +******************************************************************** +//** P3N - ADD ALL KEYS WITH ZERO SHIP QTY FOR A GIVEN LINE +//** 5/15/98 +******************************************************************** +FUNCTION ADDZEROSHIP(SEEKORD, SHIPSCREENS, NOSHIPQTY) +LOCAL SVSEL := SELECT() +LOCAL OSKEY, DOAUDIT := .T., ITEM_CAT_CODE +LOCAL TORDREC := TORD_LINES->(RECNO()) +SELECT TORD_LINES +GO TOP +DO WHILE TORD_LINES->(!EOF()) + IF TORD_LINES->PROD_CODE = 'MISCITM' .OR. ; + TORD_LINES->PROD_CODE = 'ORD' + //** SHIP SYSTEM GENERATED (MISCITM), (ORDMISC) OR (ORDNOTX) RECORDS + ELSEIF SHIPSCREENS = 'NOSCREENS' + ITEM_CAT_CODE := GET_CATCODE(TORD_LINES->PROD_CODE) + IF TORD_LINES->PROD_CODE == 'SCREENS' .OR. ; + TORD_LINES->PROD_CODE == 'SCRFLNK' .OR. ; //** P3N - 1/28/99 + ITEM_CAT_CODE = 'SCREENS' + ****BYPASS SCREENS + TORD_LINES->(DBSKIP(+1)) + LOOP + ENDIF + ENDIF + //** P3N - 11/4/98 +//**OSKEY := TORD_LINES->ORDER_NUM + STR(TORD_LINES->LINE_NUM, 3) + TORD_LINES->PROD_CODE + TORD_LINES->PAR_PROD + OSKEY := TORD_LINES->ORDER_NUM + STR(TORD_LINES->LINE_NUM, 3) + ; + TORD_LINES->PROD_CODE + TORD_LINES->PAR_PROD + STR(TORD_LINES->(RECNO()), 3) + IF ORD_SHIP->(DBSEEK(OSKEY)) + IF EMPTY(ORD_SHIP->SHIP_DATE) .AND. EMPTY(ORD_SHIP->SHIP_QTY) + IF EMPTY(NOSHIPQTY) //** DO NOT UPDATE SHIP QTY WHEN INVOICING + SELECT ORD_SHIP + REC_LOCK(3) + REPLACE ORD_SHIP->SHIP_DATE WITH (CUR_MAST)->SHIP_DATE //** P3N - 10/14/98 +******REPLACE ORD_SHIP->SHIP_QTY WITH ORD_LINES->QUANTITY + REPLACE ORD_SHIP->SHIP_QTY WITH TORD_LINES->QUANTITY + UNLOCK + ENDIF + ENDIF + ELSE + ADD_ONEREC('TORD_LINES', 'ORD_SHIP' , DOAUDIT) + SELECT ORD_SHIP + REC_LOCK(3) + IF EMPTY(NOSHIPQTY) //** DO NOT UPDATE SHIP QTY WHEN INVOICING + REPLACE ORD_SHIP->SHIP_DATE WITH (CUR_MAST)->SHIP_DATE //** P3N - 10/14/98 + REPLACE ORD_SHIP->SHIP_QTY WITH TORD_LINES->QUANTITY + ELSEIF NOSHIPQTY //** P3N - 1/11/99 + REPLACE ORD_SHIP->SHIP_QTY WITH 0 //** P3N - 1/11/99 + ENDIF + REPLACE ORD_SHIP->TRAN_NUM WITH STR(TORD_LINES->(RECNO()),3) //** P3N - 11/4/98 + ORD_SHIP->(DBUNLOCK()) + ENDIF + TORD_LINES->(DBSKIP(+1)) +ENDDO +TORD_LINES->(DBGOTO(TORDREC)) +SELECT(SVSEL) +RETURN +******************************************************************** +//** P3N - IS THE ENTIRE ORDER ALREADY SHIPPED? +//** 5/15/98 +******************************************************************** +FUNCTION ALL_SHIPPED(SEEKORD, WHATLINE ) +LOCAL OSKEY, RETVAL := .T. +LOCAL OSREC := ORD_SHIP->(RECNO()), TORDREC +LOCAL SVSEL := SELECT() +IF SELECT('TORD_LINES') > 0 + TORDREC := TORD_LINES->(RECNO()) +ELSEIF WHATLINE == 'SCREENS' + DBOPEN('TORD_LINES') + IF TORD_LINES->(DBSEEK(SEEKORD)) + //** ALREADY HAVE THE TORD_LINES BUILT + ELSE + CLOSE TORD_LINES + BLD_TORD_LINES(SEEKORD) + ENDIF +ENDIF +IF WHATLINE == 'OL' + IF ORD_LINES->(DBSEEK(SEEKORD)) + DO WHILE ORD_LINES->(!EOF()) .AND. ORD_LINES->ORDER_NUM == SEEKORD + OSKEY := ORD_LINES->ORDER_NUM + STR(ORD_LINES->LINE_NUM,3)+ORD_LINES->PROD_CODE+ORD_LINES->PAR_PROD + IF ORD_SHIP->(DBSEEK(OSKEY)) + TOTQTY := ORD_LINES->QUANTITY + IF ORD_SHIP->PROD_CODE = 'MISCITM' .OR. ORD_SHIP->PROD_CODE = 'ORD' + SHPQTY := CURMISC_QTY(ORD_SHIP->ORDER_NUM, ORD_SHIP->PROD_CODE, STR(ORD_SHIP->LINE_NUM,3) ) + ELSE + //** P3N - 11/4/98 + SHPQTY := LINESHPQTY(OSKEY,'NOTRAN') + ENDIF + IF TOTQTY == SHPQTY + RETVAL := .T. + ELSE + RETVAL := .F. + EXIT + ENDIF + ELSE + RETVAL := .F. + EXIT + ENDIF + ORD_LINES->(DBSKIP(+1)) + ENDDO + ENDIF +ELSEIF WHATLINE == 'XL' .AND. ADDL_LINES->(DBSEEK(SEEKORD)) + DO WHILE ADDL_LINES->(!EOF()) .AND. ADDL_LINES->ORDER_NUM == SEEKORD + OSKEY := ADDL_LINES->ORDER_NUM + STR(ADDL_LINES->LINE_NUM,3)+ADDL_LINES->PROD_CODE+ADDL_LINES->PAR_PROD + IF ORD_SHIP->(DBSEEK(OSKEY)) + TOTQTY := ADDL_LINES->QUANTITY + //** P3N - 11/4/98 + SHPQTY := LINESHPQTY(OSKEY, 'NOTRAN') + IF TOTQTY == SHPQTY + ELSE + RETVAL := .F. + EXIT + ENDIF + ELSE + RETVAL := .F. + EXIT + ENDIF + ADDL_LINES->(DBSKIP(+1)) + ENDDO +ELSEIF WHATLINE == 'SCREENS' .OR. WHATLINE == 'MISC' + SELECT TORD_LINES + GO TOP + DO WHILE TORD_LINES->(!EOF()) + OSKEY := TORD_LINES->ORDER_NUM + STR(TORD_LINES->LINE_NUM, 3) + OSKEY := OSKEY + TORD_LINES->PROD_CODE + TORD_LINES->PAR_PROD + IF ORD_SHIP->(DBSEEK(OSKEY)) +//** IF PROD_CODE == 'SCREENS' .OR. ; //** P3N - 1/28/99 + IF PROD_CODE == 'SCREENS' .OR. PROD_CODE == 'SCRFLNK' .OR. ; + PROD_CODE = 'MISCITM' .OR. PROD_CODE = 'ORD' + TOTQTY := TORD_LINES->QUANTITY + SHPQTY := LINESHPQTY(OSKEY, 'NOTRAN') +//** SHPQTY := LINESHPQTY(OSKEY) + IF TOTQTY == SHPQTY + RETVAL := .T. + ELSE + RETVAL := .F. + EXIT + ENDIF + ENDIF + ELSE + RETVAL := .F. + EXIT + ENDIF + DBSKIP(+1) + ENDDO + TORD_LINES->(DBGOTO(TORDREC)) +ENDIF +ORD_SHIP->(DBGOTO(OSREC)) +SELECT(SVSEL) +RETURN RETVAL +******************************************************************** +//** P3N - EDIT THE ORD_MAST->TERMS +//** 7/28/98 +//** IF IOLA AND F6-FUN6(INVOICING AUTH.) ALLOW ORD_MAST->TERMS UPDATE +//** IF NOT IOLA ALLOW ORD_MAST->TERMS UPDATE REGARDLESS +******************************************************************** +FUNCTION EDIT_OM_TERM() +LOCAL RETVAL := .T. +IF MHOME_LOC_CODE = 'IOLA' + IF FUN6 == 'X' + RETVAL := .T. + ELSE + RETVAL := .F. + ENDIF +ENDIF +RETURN RETVAL +******************************************************************** +//** P3N - INITIALIZE THE ORDER SHIPPING RECORD WITH A DATE +//** 11/24/98 +******************************************************************** +FUNCTION OSTDATEINIT() +LOCAL RETVAL +IF EMPTY(ORD_MAST->SHIP_DATE) + RETVAL := DATE() +ELSE + RETVAL := ORD_MAST->SHIP_DATE +ENDIF +RETURN RETVAL +******************************************************************** +//** P3N - UPDATE THE ORD_MAST->ORD_BO_TTL +//**11/19/98 +******************************************************************** +FUNCTION UPD_BO_TOTAL(LINEFILE) +LOCAL RETVAL := .T., BO_TOTAL := 0, BO_AMT := 0, BO_QTY := 0, SHPQTY := 0 +IF (CUR_MAST)->(FIELDPOS('ORD_BO_TTL')) > 0 + IF (LINEFILE)->(DBSEEK( (CUR_MAST)->ORDER_NUM ) ) + DO WHILE (LINEFILE)->(!EOF()) .AND. (LINEFILE)->ORDER_NUM == (CUR_MAST)->ORDER_NUM + IF ORD_SHIP->(DBSEEK( (CUR_MAST)->ORDER_NUM ) ) + SHPQTY := 0 + OSKEY := (LINEFILE)->ORDER_NUM + STR((LINEFILE)->LINE_NUM, 3) + ; + (LINEFILE)->PROD_CODE + (LINEFILE)->PAR_PROD + IF ORD_SHIP->(DBSEEK(OSKEY)) + DO WHILE (LINEFILE)->LINE_NUM == ORD_SHIP->LINE_NUM .AND. ; + (LINEFILE)->PROD_CODE == ORD_SHIP->PROD_CODE .AND. ; + (LINEFILE)->PAR_PROD == ORD_SHIP->PAR_PROD + SHPQTY := SHPQTY + ORD_SHIP->SHIP_QTY + BO_QTY := (LINEFILE)->QUANTITY - ORD_SHIP->SHIP_QTY + IF EMPTY(ALT_SPRICE) + BO_AMT := (LINEFILE)->SALE_PRICE * BO_QTY + ELSE + BO_AMT := (LINEFILE)->ALT_SPRICE * BO_QTY + ENDIF + BO_TOTAL := BO_TOTAL + BO_AMT + ORD_SHIP->(DBSKIP(+1)) + ENDDO + ELSE + BO_QTY := (LINEFILE)->QUANTITY + IF EMPTY(ALT_SPRICE) + BO_AMT := (LINEFILE)->SALE_PRICE * BO_QTY + ELSE + BO_AMT := (LINEFILE)->ALT_SPRICE * BO_QTY + ENDIF + BO_TOTAL := BO_TOTAL + BO_AMT + ENDIF + ENDIF + REC_LOCK(3, LINEFILE) + (LINEFILE)->BO_AMOUNT := BO_AMT + (LINEFILE)->SHIP_QTY := SHPQTY + (LINEFILE)->(DBUNLOCK()) + (LINEFILE)->(DBSKIP(+1)) + ENDDO + ENDIF + REC_LOCK(3, CUR_MAST) + (CUR_MAST)->ORD_BO_TTL := BO_TOTAL + (CUR_MAST)->(DBUNLOCK()) + MISCP_PAINT(.T.) //** USED TO UPDATE ORDER TOTALS BASED ON BO AMT +ENDIF +RETURN RETVAL +******************************************************************** +//** P3N - UPDATE THE ORDER SHIP REC WITH INVOICED ITEMS +//** P3N - ONLY ITEMS SHIPPED WILL BE INVOICED. +//**12/1/98 +******************************************************************** +FUNCTION INVOICE_SHIPPED(SEEKORD) +IF ORD_SHIP->(DBSEEK(SEEKORD)) // FIND THE FIRST ORDER SHIP RECORD! + DO WHILE ORD_SHIP->(!EOF()) .AND. ORD_SHIP->ORDER_NUM == SEEKORD + REC_LOCK(3, 'ORD_SHIP') + REPLACE ORD_SHIP->INV_DATE WITH CURDATE + REPLACE ORD_SHIP->INV_QTY WITH ORD_SHIP->SHIP_QTY + ORD_SHIP->(DBUNLOCK()) + ORD_SHIP->(DBSKIP(+1)) + ENDDO +ENDIF +RETURN .T. +******************************************************************** +//** P3N - UPDATE THE ORDER SHIP REC WITH INVOICED ITEMS +//** P3N - ALL ITEMS WILL BE INVOICED (TOTAL LINE QUANTITY) +//**12/1/98 +******************************************************************** +FUNCTION INVOICE_ALL(SEEKORD) +LOCAL SVSEL := SELECT(), OSTKEY := ' ' +LOCAL SVORD := ' ' +LOCAL SVLIN := 0 +LOCAL SVPROD := ' ' +LOCAL SVPAR := ' ' +LOCAL NOSHIPQTY := .T. +IF SELECT('ORD_SHIP') > 0 +ELSE + DBOPEN('ORD_SHIP') +ENDIF +IF SELECT('TORD_LINES') > 0 + TORD_LINES->(DBGOTOP()) + IF TORD_LINES->ORDER_NUM == SEEKORD + ELSE + CLOSE TORD_LINES + BLD_TORD_LINES(SEEKORD) + ENDIF +ELSE + BLD_TORD_LINES(SEEKORD) +ENDIF +ADDZEROSHIP( (CUR_MAST)->ORDER_NUM, 'SCREENS', NOSHIPQTY) +TORD_LINES->(DBGOTOP()) +IF ORD_SHIP->(DBSEEK(SEEKORD)) + SVORD := TORD_LINES->ORDER_NUM + SVLIN := TORD_LINES->LINE_NUM + SVPROD := TORD_LINES->PROD_CODE + SVPAR := TORD_LINES->PAR_PROD + OSTKEY := TORD_LINES->ORDER_NUM + OSTKEY := OSTKEY + STR(TORD_LINES->LINE_NUM, 3) + OSTKEY := OSTKEY + TORD_LINES->PROD_CODE + OSTKEY := OSTKEY + TORD_LINES->PAR_PROD + DO WHILE TORD_LINES->(!EOF()) + IF ORD_SHIP->(DBSEEK(OSTKEY)) + DO WHILE SVORD == ORD_SHIP->ORDER_NUM .AND. ; + SVLIN == ORD_SHIP->LINE_NUM .AND. ; + SVPROD == ORD_SHIP->PROD_CODE .AND. ; + SVPAR == ORD_SHIP->PAR_PROD + REC_LOCK(3, 'ORD_SHIP') + REPLACE ORD_SHIP->INV_DATE WITH CURDATE + REPLACE ORD_SHIP->INV_QTY WITH TORD_LINES->QUANTITY + ORD_SHIP->(DBUNLOCK()) + ORD_SHIP->(DBSKIP(+1)) + ENDDO + ENDIF + TORD_LINES->(DBSKIP(+1)) + SVORD := TORD_LINES->ORDER_NUM + SVLIN := TORD_LINES->LINE_NUM + SVPROD := TORD_LINES->PROD_CODE + SVPAR := TORD_LINES->PAR_PROD + OSTKEY := TORD_LINES->ORDER_NUM + OSTKEY := OSTKEY + STR(TORD_LINES->LINE_NUM, 3) + OSTKEY := OSTKEY + TORD_LINES->PROD_CODE + OSTKEY := OSTKEY + TORD_LINES->PAR_PROD + ENDDO +ENDIF +SELECT(SVSEL) +RETURN .T. +******************************************************************* +* THIS FUNCTION WILL BUILD THE ORDER DESCRIPTION TO BE PRINTED +******************************************************************* +//* PRINT_IND VALUES: A-ALWAYS PRINT +//* N-NEVER PRINT +//* D-PRINT IF DEFAULT +//* E-PRINT EXCEPTION (IF NOT DEFAULT) +FUNCTION BLD_DESC(G_ARR, SELFILE, WHCHORDER, BKOPROD, SUBTYPE) +LOCAL SV_SEL := SELECT(), PRNT_DESC := '', IRULE := '', PRT_IC := .T. +LOCAL O_DESC := '', I, II, L_DESC := '', G_DESC := '', IRULEOPT := ' ' +LOCAL OPTARR, ELEM, DESC2USE, PRNTDESC, GLASS_ORDER := .F., IC_DESC +LOCAL MLOC_CODE, RESULT, CKVAR, WORKVAR, LASTBREAK, LASTSTRT +LOCAL L_DESC_COPY := '', WHATCOPY, MWCOPY, X //** P3N - 5/4/99 +LOCAL PRTOPT := '' //** P3N - 8/17/98 +LOCAL BACKORDER := .F. //** P3N - 8/17/98 +IF EMPTY(WHCHORDER) //** P3N - 8/17/98 + BACKORDER := .F. //** P3N - 8/17/98 +ELSEIF WHCHORDER == 'BACKORD' //** P3N - 8/17/98 + BACKORDER := .T. //** P3N - 8/17/98 +ENDIF //** P3N - 8/17/98 +IF EMPTY(SUBTYPE) //** P3N - 7/21/99 - HAPPY BDAY DANIEL + SUBTYPE := '' //** P3N - 7/21/99 +ENDIF //** P3N - 7/21/99 +IF EMPTY(BKOPROD) //** P3N - 5/26/99 + PRODUCT->(DBSEEK(&SELFILE->PROD_CODE)) +ELSE //** P3N - 5/26/99 + PRODUCT->(DBSEEK(BKOPROD)) //** P3N - 5/26/99 +ENDIF //** P3N - 5/26/99 +O_DESC := ALLTRIM(PRODUCT->DESC) +IC_DESC := O_DESC //** P3N - 02/22/02 +FOR I := 1 TO LEN(G_ARR) + IF EMPTY( G_ARR[I,4] ) // NO USER RESPONSE + LOOP + ELSEIF G_ARR[I,1] = 'ORIEL TOP' // BYPASS ORIEL MEASUREMENTS + LOOP + ELSEIF G_ARR[I,1] = 'ORIEL BOTT' // BYPASS ORIEL MEASUREMENTS + LOOP + ELSEIF G_ARR[I,1] = 'GL TYPE' + IF G_ARR[I,4] = 'UNGLAZED' // DO NOT PRINT A GLASS ORDER + GLASS_ORDER := .F. + ELSE + GLASS_ORDER := .T. + ENDIF + ENDIF + + PRNTDESC := '' + DO CASE + CASE G_ARR[I,OPT_TYP]$'U' // USER ENTERED FIELD + PRNTDESC := ALLTRIM(G_ARR[I,ATRB]) + ' ' + ALLTRIM(G_ARR[I,4]) + CASE G_ARR[I,OPT_TYP]$'PT' // PICK/TABLE LIST + // FIND OPT_ARR RECORD FOR THE USER_RESPONSE IN G_ARR[I,4] + OPTARR := G_ARR[I,OPT_ARR] + ELEM := ASCAN(OPTARR, {|X| X[1] == G_ARR[I,4]}) + IF ELEM=0 .OR. OPTARR[ELEM,1] = 'NO OPTIONS FOUND!!' + LOOP + ENDIF + + // WHICH DESCRIPTION TO PRINT? + IF !EMPTY(OPTARR[ELEM,OPT_PVAL]) + // ALTERNATE PRINT VALUE +//** ALLOW THE USER TO CONTROL OPTION SPACING ON ORDER PRINTING +//** DESC2USE := ALLTRIM(OPTARR[ELEM,OPT_PVAL]) //** P3N - 2/28/00 + DESC2USE := TRIM(OPTARR[ELEM,OPT_PVAL]) //** P3N - 2/28/00 + ELSE +//** ALLOW THE USER TO CONTROL OPTION SPACING ON ORDER PRINTING + // OPTION DESCRIPTION +//** DESC2USE := ALLTRIM(OPTARR[ELEM,OPT_DESC]) //** P3N - 2/28/00 + DESC2USE := TRIM(OPTARR[ELEM,OPT_DESC]) //** P3N - 2/28/00 + ENDIF + + PRTOPT := OPTARR[ELEM, OPT_PIND] //** P3N - 8/17/98 + IRULE := OPTARR[ELEM,19] //** P3N - 02/21/02 + IF EMPTY(IRULE) //** P3N - 02/21/02 + IRULEOPT := 'Y' //** P3N - 02/21/02 + ELSE //** P3N - 02/21/02 + PRT_IC := CHK_RULE(IRULE, G_ARR, , SELFILE) + IF PRT_IC //** P3N - 02/21/02 + IRULEOPT := 'Y' //** P3N - 02/21/02 + ELSE //** P3N - 02/21/02 + IRULEOPT := 'N' //** P3N - 02/21/02 + ENDIF //** P3N - 02/21/02 + ENDIF //** P3N - 02/21/02 + + //** DO NOT PRINT THE ORDER OPTION "W/SCREEN", "W/STORM" ... + //** ON THE PRIMARY BACKORDER - PER PAT 8/17/98 + IF BACKORDER //** P3N - 8/17/98 + IF SUBTYPE == 'SCREENS' //** P3N - 7/21/99 - HAPPY BDAY DANIEL + IF AT('COLOR', G_ARR[I,1]) > 0 //** P3N - 8/9/99 + ELSEIF AT('SCREEN', G_ARR[I,1]) > 0 //** P3N - 8/26/99 +//**P3N112601 PRTOPT := 'N' //** P3N - 5/17/01 +//**P3N082302 PRTOPT := 'N' //** P3N - 02/25/02 - DO NOT PRINT W/SCREEN FOR BACKORDER SCREENS-JET&2500 + ELSE //** P3N - 8/9/99 + PRTOPT := 'N' //** P3N - 8/9/99 + ENDIF //** P3N - 8/9/99 + ELSEIF G_ARR[I,1] = 'SCRN' .OR. ; //** P3N - 8/17/98 + G_ARR[I,1] = 'WITH SCREN' .OR. ; //** P3N - 8/17/98 + G_ARR[I,1] = 'SCREEN' //** P3N - 8/17/98 + IF AT('SCREEN', G_ARR[I,4]) > 0 //** P3N - 8/17/98 + IF SCREEN_OPTS(G_ARR) //** P3N - 8/17/98 + PRTOPT := 'N' //** P3N - 8/17/98 + ENDIF //** P3N - 8/17/98 + ELSEIF AT('SCREEN', UPPER(G_ARR[I,5])) > 0 //** P3N - 5/25/99 + PRTOPT := 'N' //** P3N - 5/25/99 + ELSEIF AT('STORM', G_ARR[I,4]) > 0 //** P3N - 8/17/98 + IF STORM_OPTS(G_ARR) //** P3N - 8/17/98 + PRTOPT := 'N' //** P3N - 8/17/98 + ENDIF //** P3N - 8/17/98 + ENDIF //** P3N - 8/17/98 + ELSEIF SUBTYPE == 'STORMS' //** P3N - 7/21/99 + ELSEIF G_ARR[I,1] = 'STORM' //** P3N - 8/17/98 + IF STORM_OPTS(G_ARR) //** P3N - 8/17/98 + PRTOPT := 'N' //** P3N - 8/17/98 + ENDIF //** P3N - 8/17/98 + ENDIF //** P3N - 8/17/98 + IF PRTOPT == 'N' //** P3N - 10/15/98 + LOOP //** P3N - 10/15/98 + ENDIF //** P3N - 10/15/98 + ENDIF //** P3N - 8/17/98 + + DO CASE + CASE OPTARR[ELEM, OPT_PIND] == 'A' // ALWAYS PRINT DESCRIPTION + PRNTDESC := DESC2USE + CASE OPTARR[ELEM, OPT_PIND] == 'N' // NEVER PRINT DESCRIPTION + LOOP + CASE OPTARR[ELEM, OPT_PIND] == 'D' ; // PRINT IF DEFAULT + .AND. G_ARR[I,DEFAULT]$'*' + PRNTDESC := DESC2USE + CASE OPTARR[ELEM, OPT_PIND] == 'E' ; // PRINT IF NOT DEFAULT + .AND. !G_ARR[I,DEFAULT]$'*' + PRNTDESC := DESC2USE + OTHERWISE + LOOP + ENDCASE + OTHERWISE // 'C' VALUES SHOULD BE ONLY ONES TO FALL THRU! + LOOP + ENDCASE + PRNTDESC := STRTRAN(PRNTDESC, ' ' , '~') + IF LEN(PRNTDESC) > 35 // MUST SPLIT THE ALTERNATE VALUE + WORKVAR := PRNTDESC + LASTBREAK := 0 + LASTSTRT := 0 + FOR II := 1 TO LEN(WORKVAR) + CKVAR := SUBS(WORKVAR,II,1) + IF II < 35 .AND. CKVAR = '~' // 1ST BREAK < 30TH POSITION + LASTBREAK := LASTSTRT + II + ELSE + IF II >= 35 + PRNTDESC := SUBS(PRNTDESC,1,LASTBREAK-1) + ; + ' ' + SUBS(PRNTDESC,LASTBREAK+1) + WORKVAR := SUBS(PRNTDESC, LASTBREAK + 1) + LASTSTRT := LASTBREAK + II := 0 + LOOP + ENDIF + ENDIF + NEXT + ENDIF + + ATTRIBUTES->(DBSEEK(G_ARR[I,1]) ) + IF ATTRIBUTES->PRNT_WHERE$'L' // PRINT ON THE LINE ITEM + IF EMPTY(L_DESC_COPY) //** P3N - 5/4/99 + L_DESC_COPY := TRIM(ATTRIBUTES->WHICH_COPY) //** P3N - 5/4/99 + ELSE //** P3N - 5/4/99 + MWCOPY := ATTRIBUTES->WHICH_COPY //** P3N - 5/4/99 + FOR X := 1 TO LEN(MWCOPY) //** P3N - 5/4/99 + WHATCOPY := SUBST(MWCOPY, X,1) //** P3N - 5/4/99 + IF EMPTY(WHATCOPY) //** P3N - 5/4/99 + ELSEIF AT(WHATCOPY, L_DESC_COPY) > 0 //** P3N - 5/4/99 + ELSE //** P3N - 5/4/99 + L_DESC_COPY := L_DESC_COPY + WHATCOPY //** P3N - 5/4/99 + ENDIF //** P3N - 5/4/99 + NEXT //** P3N - 5/4/99 + ENDIF //** P3N - 5/4/99 +//**IF AT('G', L_DESC_COPY) > 0 //** P3N - 6/7/99 + IF AT('G', ATTRIBUTES->WHICH_COPY) > 0 //** P3N - 5/2/00 + IF EMPTY(G_DESC) //** P3N - 6/7/99 + G_DESC := PRNTDESC //** P3N - 6/7/99 + ELSE //** P3N - 6/7/99 + G_DESC := G_DESC + ' - ' + PRNTDESC //** P3N - 6/7/99 + ENDIF //** P3N - 6/7/99 + ELSEIF EMPTY(L_DESC) + L_DESC := PRNTDESC + ELSE + L_DESC := L_DESC + ' - ' + PRNTDESC + ENDIF + + ELSE + O_DESC := O_DESC + ' - ' + PRNTDESC //** P3N - 02/22/02 + IF IRULEOPT == 'N' //** P3N - 02/22/02 + ELSE //** P3N - 02/22/02 + IC_DESC := IC_DESC + ' - ' + PRNTDESC //** P3N - 02/22/02 + ENDIF //** P3N - 02/22/02 + ENDIF +NEXT + +IF EMPTY(WHCHORDER) //** P3N - 02/22/02 +ELSEIF WHCHORDER == 'PO' //** P3N - 02/22/02 + O_DESC := IC_DESC //** P3N - 02/22/02 +ENDIF //** P3N - 02/22/02 + +// ALT MFG LOCATION used it exists and the rule is true +IF !EMPTY(PRODUCT->ALT_MFGRUL) + RESULT = CHK_RULE(PRODUCT->ALT_MFGRUL, G_ARR , , SELFILE) + IF RESULT + MLOC_CODE := PRODUCT->ALT_MFGLOC + ELSE + MLOC_CODE := PRODUCT->LOC_CODE + ENDIF +ELSE + MLOC_CODE := PRODUCT->LOC_CODE +ENDIF + +SELECT(SV_SEL) +RETURN {O_DESC, MLOC_CODE, GLASS_ORDER, L_DESC, L_DESC_COPY, G_DESC} //** P3N - 6/7/99 +//**RETURN {O_DESC, MLOC_CODE, GLASS_ORDER, L_DESC} //** P3N - 5/4/99 +************************************************************* +* P3N - 11/12/98 DO PARTIAL INVOICE PROCESSING * +************************************************************* +FUNCTION PARTIALINVOICE() +LOCAL SV_SCREEN, KEYARR +LOCAL SV_SEL := SELECT() +LOCAL MGET_KEY +LOCAL NEW_ORDR := GET_ORD_NUM('QCNV') +LOCAL SVREC := RECNO() +LOCAL ORG_MSTREC := ORD_MAST->(RECNO()) +LOCAL ORG_ORD := ORD_MAST->ORDER_NUM +LOCAL ORDMISCQTYS := GETORDMISCQTYS(), SHPQTY := 0 +LOCAL OMISC := ' ', OMNUM := ' ', OMTYP := ' ' +LOCAL M1 := '*** This Order has Unshipped Screens! ', M3 := ' ' +LOCAL M2 := '*** Should these SCREENS remain BACKORDERED?' +PRIVATE REPFLD := ' ' +PRIVATE _CUROPT := 1 // USED FOR GET ORDER NUMBER ???? + +WAIT_BOX('*** CREATING NEW ORDER - ' + ALLTRIM(NEW_ORDR) + ' From - ' + ORG_ORD, ; + '*** Please Wait' ) + +SELECT ORD_MAST +REC_LOCK(3, 'ORD_MAST') +REPLACE ORD_MAST->ORDER_NEW WITH NEW_ORDR +ORD_MAST->(DBUNLOCK()) +COPY NEXT 1 TO &USERFILE3 +NET_USE(USERFILE3, .T. , 3 ,'USERFILE3') +ORD_MAST->(DBGOTO(ORG_MSTREC) ) +ADD_ONEREC( 'USERFILE3', 'ORD_MAST' ) +SELECT ORD_MAST +REPLACE ORD_MAST->ORDER_ORG WITH ORG_ORD +REPLACE ORD_MAST->ORDER_NUM WITH NEW_ORDR +//** CLEAR THE INVOICE DATE AND BO DATE ON THE NEW ORDER +REPLACE ORD_MAST->IDATE_FST WITH CTOD(' / / ') +REPLACE ORD_MAST->ITIME_FST WITH ' ' +REPLACE ORD_MAST->IDATE_LAST WITH CTOD(' / / ') +REPLACE ORD_MAST->ITIME_LAST WITH ' ' +REPLACE ORD_MAST->BODATE_FST WITH CTOD(' / / ') +REPLACE ORD_MAST->BOTIME_FST WITH ' ' +REPLACE ORD_MAST->BODATE_LST WITH CTOD(' / / ') +REPLACE ORD_MAST->BOTIME_LST WITH ' ' +REPLACE ORD_MAST->INVOICENUM WITH ' ' +REPLACE ORD_MAST->ORDER_NEW WITH ' ' +REPLACE ORD_MAST->SHIP_DATE WITH CTOD(' / / ') +FOR I := 1 TO LEN(ORDMISCQTYS) //** UPDATE THE NEW ORDER MASTER + OMISC := ORDMISCQTYS[I,1] //** WITH THE NEW QTYS + OMNUM := SUBSTR(OMISC, 7, 3) //** NUMBER OF MISC/ NOTX ITEM + OMTYP := SUBSTR(OMISC, 10,7) //** ORDMISC OR ORDNOTX + SHPQTY := ORDMISCQTYS[I,2,1] //** ORDMISC OR ORDNOTX SHIP QTY + IF OMTYP == 'ORDMISC' + REPFLD := 'MISC_QTY' + STR(VAL(OMNUM),1) + ELSEIF OMTYP == 'ORDNOTX' + REPFLD := 'NOTX_QTY' + STR(VAL(OMNUM),1) + ENDIF + REPLACE ORD_MAST->&REPFLD WITH (ORD_MAST->&REPFLD - SHPQTY) +NEXT +ORD_MAST->(DBUNLOCK()) + + +//* MODEL NEW ORDER DETAIL FILES FROM CURRENT ORDER DETAIL FILES +CLOSE USERFILE3 +SELECT('ORD_LINES') +COPY STRUCTURE TO &USERFILE3 +NET_USE(USERFILE3, .f. , 3 ,'USERFILE3') +KEYARR := ORDCOPY(ORG_ORD, NEW_ORDR, 'ORD_LINES', 'USERFILE3') +CLOSE USERFILE3 +SELECT('ORD_LINES') +APPEND FROM (USERFILE3) + +SELECT('ORDER_OPTS') +COPY STRUCTURE TO &USERFILE3 +NET_USE(USERFILE3, .f. , 3 ,'USERFILE3') +ORDCOPY(ORG_ORD, NEW_ORDR, 'ORDER_OPTS', 'USERFILE3', KEYARR) +CLOSE USERFILE3 +SELECT('ORDER_OPTS') +APPEND FROM (USERFILE3) + +SELECT('ADDL_LINES') +COPY STRUCTURE TO &USERFILE3 +NET_USE(USERFILE3, .f. , 3 ,'USERFILE3') +ORDCOPY(ORG_ORD, NEW_ORDR, 'ADDL_LINES', 'USERFILE3', KEYARR) +CLOSE USERFILE3 +SELECT('ADDL_LINES') +APPEND FROM (USERFILE3) + +SELECT('ADDL_OPTS') +COPY STRUCTURE TO &USERFILE3 +NET_USE(USERFILE3, .f. , 3 ,'USERFILE3') +ORDCOPY(ORG_ORD, NEW_ORDR, 'ADDL_OPTS', 'USERFILE3', KEYARR) +CLOSE USERFILE3 +SELECT('ADDL_OPTS') +APPEND FROM (USERFILE3) + +SELECT('ORD_MISC') +COPY STRUCTURE TO &USERFILE3 +NET_USE(USERFILE3, .f. , 3 ,'USERFILE3') +ORDCOPY(ORG_ORD, NEW_ORDR, 'ORD_MISC', 'USERFILE3', KEYARR) +CLOSE USERFILE3 +SELECT('ORD_MISC') +APPEND FROM (USERFILE3) + +ORD_MAST->(DBGOTO(ORG_MSTREC) ) +SELECT(SV_SEL) + +//**SHIP_REST(ORG_ORD, 'SCREENS' ) //** SHIP ALL REMAINING ITEMS ON ORDER + +ERR_BOX('*** NEW ORDER - ' + ALLTRIM(NEW_ORDR) , ; + '*** CREATED From - ' + ORG_ORD ) + +RETURN .T. + +************************************************************* +* P3N - 11/13/98 COPY ALL ORDER FILES * +************************************************************* +FUNCTION ORDCOPY(O_NUM, NEW_ORDR, DATAFROM, FINALFILE, KEYARR) +LOCAL CMPRKEY, I, MISCKEY := ' ', QTYARR := {}, QTY := 0, SHP := 0 +IF EMPTY(KEYARR) + KEYARR := {} +ENDIF + +SELECT (DATAFROM) +DBSEEK(O_NUM) +DO WHILE ORDER_NUM == O_NUM .AND. !EOF() + IF DATAFROM == 'ORD_LINES' .OR. DATAFROM == 'ORD_MISC' + IF FIELDPOS('QUANTITY') > 0 .AND. FIELDPOS('SHIP_QTY') > 0 + QTY := QUANTITY + SHP := SHIP_QTY + ELSE + QTY := QUANTITY + MISCKEY := (DATAFROM)->ORDER_NUM + MISCKEY := MISCKEY + (DATAFROM)->LINE_NUM + MISCKEY := MISCKEY + 'MISCITM' + QTYARR := GET_OSTQTY('ORD_LINES', MISCKEY) + IF EMPTY(QTYARR) //** P3N - 12/9/98 + SHP := 0 //** P3N - 12/9/98 + ELSE //** P3N - 12/9/98 + SHP := QTYARR[1] //** P3N - 12/9/98 +//** INVQTY := QTYARR[2] //** P3N - 12/9/98 + ENDIF //** P3N - 12/9/98 + ENDIF //** P3N - 12/9/98 +//**IF QUANTITY == SHIP_QTY + IF QTY == SHP + //** ENTIRE LINE SHIPPED DO NOT CARRY OVER TO NEW ORDER + ELSE + ADD_ONEREC( DATAFROM, FINALFILE ) + SELECT (FINALFILE) + REC_LOCK(3) + REPCORR(DATAFROM, FINALFILE) + REPLACE ORDER_NUM WITH NEW_ORDR + REPLACE QUANTITY WITH (DATAFROM)->QUANTITY - SHP +//** REPLACE QUANTITY WITH (DATAFROM)->QUANTITY - (DATAFROM)->SHIP_QTY + IF FIELDPOS('SHIP_QTY') > 0 + REPLACE SHIP_QTY WITH 0 + ENDIF + DBUNLOCK() + SELECT (DATAFROM) + IF DATAFROM == 'ORD_LINES' + AADD(KEYARR, ORDER_NUM + STR(LINE_NUM, 3) ) + ENDIF + ENDIF + ELSE + FOR I := 1 TO LEN(KEYARR) + IF VALTYPE(LINE_NUM) = 'N' //** ORD_MISC FILE CONTAINS A CHAR LINE_NUM + CMPRKEY := ORDER_NUM + STR(LINE_NUM, 3) + ELSE + CMPRKEY := ORDER_NUM + LINE_NUM + ENDIF + IF CMPRKEY == KEYARR[I] + IF FIELDPOS('QUANTITY') > 0 .AND. FIELDPOS('SHIP_QTY') > 0 + IF QUANTITY == SHIP_QTY + //** ENTIRE LINE SHIPPED DO NOT CARRY OVER TO NEW ORDER + LOOP + ENDIF + ENDIF + ADD_ONEREC( DATAFROM, FINALFILE ) + SELECT (FINALFILE) + REC_LOCK(3) + REPCORR(DATAFROM, FINALFILE) + REPLACE ORDER_NUM WITH NEW_ORDR + IF FIELDPOS('QUANTITY') > 0 .AND. FIELDPOS('SHIP_QTY') > 0 + REPLACE QUANTITY WITH (DATAFROM)->QUANTITY - (DATAFROM)->SHIP_QTY + REPLACE SHIP_QTY WITH 0 + ENDIF + DBUNLOCK() + SELECT (DATAFROM) + ENDIF + NEXT + ENDIF + DBSKIP(+1) +ENDDO + +RETURN KEYARR +************************************************************* +* P3N - 12/10/98 GET THE ORDER MASTER MISC QTYS * +************************************************************* +FUNCTION GETORDMISCQTYS() +LOCAL I := 0, WRKARR := {} +LOCAL MISCKEY := ' ' +LOCAL QTYARR := {} +FOR I := 1 TO 6 + MISCKEY := ORD_MAST->ORDER_NUM + IF I <= 3 + MISCKEY := MISCKEY + STR(I,3) + 'ORDMISC' + ELSE + MISCKEY := MISCKEY + STR(I-3,3) + 'ORDNOTX' + ENDIF + WRKARR := GET_OSTQTY('ORD_LINES', MISCKEY) + AADD(QTYARR,{MISCKEY, WRKARR} ) +NEXT +RETURN QTYARR +************************************************************* +* P3N - 12/07/98 DETERMINE IF THERE ARE ANY ITEMS * +* TO BE INVOICED ( IE: NOT SHIPPED. ) * +************************************************************* +FUNCTION ORDER_SHIPPED(INV_ARR, MORDER_NUM, WHCHORDER) +LOCAL RETVAL := .F. , I := 0, WKORDQTY := 0, WKSHPDQTY := 0 +LOCAL CNTR := 0, MISC_ARR := {} +FOR I := 1 TO LEN(INV_ARR) + WKORDQTY := INV_ARR[I,7] //** ORDER QTY + WKSHPDQTY := INV_ARR[I,11] //** SHIPPED QTY + IF WKORDQTY - WKSHPDQTY <= 0 + ELSE + CNTR := CNTR + 1 + ENDIF +NEXT +IF EMPTY(CNTR) + IF LEN(INV_ARR) = 1 .AND. EMPTY(INV_ARR[1,10]) // EMPTY INV ARR + ELSE + RETVAL := .T. + ENDIF + //** P3N - 1/5/99 CHECK FOR MISC ORDER LINES ITEMS + MISC_ARR := BLD_MISCORD('TORD_LINES', {}, {}, 0, ; + .F., .F., .F., WHCHORDER, , , .T. ) + IF EMPTY(MISC_ARR[4]) //**P3N - 1/5/99 NO ORDMISC LINE ITEMS ON BACKORDER + RETVAL := .T. + //** P3N - 1/5/99 CHECK FOR MISC ORDER ITEMS / MISC & NOTX ITEMS (SCREEN 2115) + IF MISCSHIPPED(MORDER_NUM) + RETVAL := .T. + ELSE + RETVAL := .F. + ENDIF + ELSE + RETVAL := .F. + ENDIF +ELSE + RETVAL := .F. +ENDIF +RETURN RETVAL +********************************************************************* +* P3N - 12/09/98 DETERMINE IF THERE ARE ANY MISC ITEMS * +* TO BE INVOICED ( IE: NOT SHIPPED. ) * +********************************************************************* + +FUNCTION MISCSHIPPED(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) + +LOCAL RETVAL := .F., SHPQTY := 0, TOTQTY := 0, CNTR := 0 +LOCAL MISC_ARR := GETQTYMISC(MORDER_NUM, PARTIAL_INVOICE, REPRINT_INVOICE) + +FOR I := 1 TO LEN(MISC_ARR[1]) + TOTQTY := MISC_ARR[1,I,1] //** SHIP QTY + SHPQTY := MISC_ARR[1,I,3] //** SHIP QTY + IF TOTQTY - SHPQTY <= 0 + ELSE + CNTR := CNTR + 1 + ENDIF +NEXT + +IF EMPTY(CNTR) + RETVAL := .T. +ELSE + RETVAL := .F. +ENDIF + +RETURN RETVAL + +********************************************************************* +* GET THE TERMS CODE DESCRIPTION +********************************************************************* +FUNCTION GP_TERMS(TERMS_CODE) +LOCAL RET_VAL +TERMS->(DBSEEK (TERMS_CODE) ) +RETURN TERMS->DESC +********************************************************************* +* GET THE SHIP VIA CODE DESCRIPTION +********************************************************************* +FUNCTION GP_SHIP(SHIP_CODE) +SHIPMETH->(DBSEEK (SHIP_CODE) ) +RETURN SHIPMETH->DESC +********************************************************************* +* GET CUTTING SPECS FOR A PRODUCTION COPY +********************************************************************* +// STYPE$'FIGSNPEC' +FUNCTION GET_THESE_SPECS( G_ARR, CUT_SPEC_ARR, STYPE, SELFILE ) +LOCAL I, RETARR := {}, CKVAR +FOR I := 1 TO LEN(CUT_SPEC_ARR) + CKVAR := ALLTRIM(CUT_SPEC_ARR[I,9]) + IF STYPE$CKVAR + IF EMPTY( CUT_SPEC_ARR[I,8]) ; // 1st rule + .OR. CHK_RULE( CUT_SPEC_ARR[I,8], G_ARR , , SELFILE) + IF EMPTY( CUT_SPEC_ARR[I,16]) ; // 2nd rule + .OR. CHK_RULE( CUT_SPEC_ARR[I,16], G_ARR , , SELFILE) + AADD(RETARR, CUT_SPEC_ARR[I] ) + ENDIF + ENDIF + ENDIF +NEXT +IF EMPTY(RETARR) + RETURN NIL +ELSE + RETURN ACLONE(RETARR) +ENDIF +********************************************************************* +* GET CUTTING SPECS FOR A MODEL +********************************************************************* +FUNCTION GET_CUT_SPEC( MPROD_CODE, SELFILE, ORD_QTY, XFACTOR, G_ARR ) +LOCAL ELEM, SAVESEL := SELECT(), SPECWORK := {}, CURSPECARR := {} +LOCAL MATHARR, SEEKKEY, MATHWORK, NEWMATHARR := {} +LOCAL MATHRESULT := {}, I + +STATIC CUTARR := {} + +// SEE IF IT'S IN THE ARRAY OR BUILD IT +ELEM := ASCAN(CUTARR, {|X| X[1] == MPROD_CODE} ) +IF ELEM > 0 + CURSPECARR := CUTARR[ELEM,2] +ELSE + SELECT CUT_SPEC + SEEK MPROD_CODE + DO WHILE CUT_SPEC->PROD_CODE = MPROD_CODE .AND. !EOF() + SEEKKEY = MPROD_CODE + CUT_SPEC->ATT_CODE + SELECT MATHPACK + SEEK SEEKKEY + MATHWORK:={} + DO WHILE CAT_CODE + ATT_CODE == SEEKKEY .AND. !EOF() + IF MATHPACK->TYPE$'C' + AADD(MATHWORK, {FIELD1, OPERATOR, FIELD2} ) + ENDIF + SKIP 1 + ENDDO + ATTRIB_CUT->(DBSEEK(CUT_SPEC->ATT_CODE)) + SPECWORK := { CUT_SPEC->ATT_CODE, ; + CUT_SPEC->SEQ_NUM, CUT_SPEC->QUANTITY, ; //2-3 + ATTRIB_CUT->PRINT_DESC, CUT_SPEC->PROFILE , ; //4-5 + MATHWORK, 0 , ; // 0 = RESULT OF MATH INITIALIZED //6-7 + CUT_SPEC->RULE_PACK, CUT_SPEC->WHICH_COPY,; // 8-9 + ATTRIB_CUT->DESC, CUT_SPEC->WID_OR_HT ,; // 10-11 + CUT_SPEC->FRAC_DEC, 0, 0, CUT_SPEC->WH_DESC, ; // 12-15 (13 = SELFILE->QTY, 14=SELFILE->XFACTOR) + CUT_SPEC->RULE_PACK2 , CUT_SPEC->PRNT_ID } // 16-17 + AADD( CURSPECARR, SPECWORK ) + SELECT CUT_SPEC + SKIP 1 + ENDDO + CURSPECARR := ASORT(CURSPECARR,,, {|X,Y| STR(X[2],3)+DESCEND(X[11]) < STR(Y[2],3)+DESCEND(Y[11]) }) // SORT BY SEQUENCE NUMBER + AADD( CUTARR, { MPROD_CODE, CURSPECARR } ) +ENDIF + +FOR I := 1 TO LEN(CURSPECARR) + IF SELFILE <> NIL + MATHRESULT := EVAL_MATH( CURSPECARR[I,6], G_ARR, '_CUT_SP', CURSPECARR[I,1], SELFILE, 'CUT' ) + CURSPECARR[I,7] := MATHRESULT + CURSPECARR[I,13] := ORD_QTY + CURSPECARR[I,14] := XFACTOR + ENDIF +NEXT + +SELECT (SAVESEL) + +RETURN CURSPECARR + \ No newline at end of file diff --git a/CGWRULE.PRG b/CGWRULE.PRG new file mode 100644 index 0000000..b8f9cf2 --- /dev/null +++ b/CGWRULE.PRG @@ -0,0 +1,1137 @@ +** CGWRULE - ADD/CHG/DEL ATTRIBUTE RULES +** DON LOWENSTEIN 10-25-93 +* * * * * * * * * * * * * * * + + +#INCLUDE 'INKEY.CH' + +*************************************************************** + +FUNCTION REP_RECNO() +REPLACE LINE_NUM WITH RECNO() +RETURN .T. + +*************************************************************** + +FUNCTION RULE_DISPLINE +LOCAL RETVAL, CURREC +CURREC := STR(RECNO(),4 ) +RETVAL := SUBS( 'L' + ALLTRIM(CURREC) + SPACE(10) , 1, 6) +RETURN RETVAL + +********************************************************* +FUNCTION CK_OPERRULE +LOCAL GOODOPER := .F. +DO CASE + CASE OPERATOR = '==' + RETURN .T. + CASE OPERATOR = 'LT' + RETURN .T. + CASE OPERATOR = 'GT' + RETURN .T. + CASE OPERATOR = 'EQ' + RETURN .T. + CASE OPERATOR = 'LE' + RETURN .T. + CASE OPERATOR = 'GE' + RETURN .T. + CASE OPERATOR = 'NE' + RETURN .T. + CASE ALLTRIM(OPERATOR) == '<' + REPLACE OPERATOR WITH '< ' + RETURN .T. + CASE ALLTRIM(OPERATOR) == '>' + REPLACE OPERATOR WITH '> ' + RETURN .T. + CASE ALLTRIM(OPERATOR) == '=' + REPLACE OPERATOR WITH '= ' + RETURN .T. + CASE OPERATOR == '<=' + RETURN .T. + CASE OPERATOR == '>=' + RETURN .T. + CASE OPERATOR == '<>' + RETURN .T. + OTHERWISE + ERR_BOX( ' *** INVALID FIELD OPERATOR ***' ,; + ' "LT" or "<" is LESS THAN ³ "GT" or ">" is MORE THAN ',; + ' "LE" or "<=" is LESS THAN or = ³ "GE" or ">=" is GR. or = ',; + ' "EQ" or "=" is EQUAL ³ "NE" or "<>" is NOT EQUAL') + + RETURN .F. +ENDCASE +****************************************************************** + +FUNCTION CK_COMMRULE() +IF !LCOMMAND$'ID ' + ERR_BOX( 'VALID COMMANDS ARE: I = Insert',; + ' D = Delete') + RETURN .F. +ENDIF + +IF LCOMMAND=' ' + RETURN .T. +ENDIF + +IF LCOMMAND = 'D' + IF RECNO() = 1 + GOTOREC := RECNO() - 1 + ELSE + GOTOREC := 1 + ENDIF + DELETE + PACK + GOTO GOTOREC + RETURN .T. +ENDIF + +IF LCOMMAND = 'I' + GOTOREC := RECNO() + APPEND BLANK + GOTO BOTTOM + DO WHILE RECNO() <> GOTOREC + SKIP -1 + PLINE_NUM := LINE_NUM + PLOGIC_GR := LOGIC_GR + P_FIELD1 := FIELD1 + P_FIELD1TYPE := FIELD1TYPE + P_FIELD2TYPE := FIELD2TYPE + P_ALIAS1 := ALIAS1 + P_OPERATOR := OPERATOR + P_FIELD2 := FIELD2 + P_ALIAS2 := ALIAS2 + PCONT_COND := CONT_COND + SKIP 1 + REPLACE RULE_CODE WITH RULES->RULE_CODE + REPLACE LOGIC_GR WITH PLOGIC_GR + REPLACE FIELD1 WITH P_FIELD1 + REPLACE FIELD1TYPE WITH P_FIELD1TYPE + REPLACE ALIAS1 WITH P_ALIAS1 + REPLACE FIELD2 WITH P_FIELD2 + REPLACE FIELD2TYPE WITH P_FIELD2TYPE + REPLACE ALIAS2 WITH P_ALIAS2 + REPLACE OPERATOR WITH P_OPERATOR + REPLACE CONT_COND WITH PCONT_COND + REPLACE LINE_NUM WITH RECNO() + SKIP -1 + ENDDO + REPLACE RULE_CODE WITH RULES->RULE_CODE + REPLACE LOGIC_GR WITH ' ' + REPLACE FIELD1 WITH SPACE(10) + REPLACE FIELD1TYPE WITH SPACE(1) + REPLACE FIELD2 WITH SPACE(10) + REPLACE FIELD2TYPE WITH SPACE(1) + REPLACE ALIAS1 WITH ' ' + REPLACE ALIAS2 WITH ' ' + REPLACE OPERATOR WITH ' ' + REPLACE CONT_COND WITH ' ' + REPLACE LINE_NUM WITH RECNO() + REPLACE LCOMMAND WITH ' ' + RETURN .T. +ENDIF + +*********************************************************** +FUNCTION CK_CONTCOND +LOCAL CC1 +CC1 := SUBSTR(CONT_COND,1,1) +IF CC1 = ' ' + REPLACE CONT_COND WITH ' ' + RETURN .T. +ENDIF + +IF !CC1$'OA' + ERRLINE := 'Line ' + STR(RECNO(),3) + ' ' + ERR_BOX( 'VALID CONTINUE CONDITIONS ARE: "A" = "AND" ',; + ' (Blank is Also "AND") ',; + ' "O" = "OR" ',; + ' (See ' + ERRLINE + ') ') + RETURN .F. +ENDIF + +CURREC := RECNO() +SKIP 1 +ERRFLAG := .F. +** LOOK AT THE NEXT RECORD +IF EOF() +ELSE + IF !EMPTY(LOGIC_GR) + ERRFLAG := .T. + ENDIF +ENDIF + +GOTO CURREC + +IF ERRFLAG + ERRLINE := 'Line ' + STR(RECNO(),3) + ' ' + ERR_BOX( ' You May NOT Place a CONTINUATION (And/Or) ',; + ' Immediately Preceding a NEW LOGIC GROUP ',; + ' or OR" on the LAST LINE. ',; + ' (See ' + ERRLINE + ') ') + RETURN .F. +ENDIF + +IF CC1 = 'O' + REPLACE CONT_COND WITH 'OR ' +ELSE + IF CC1 = 'A' + REPLACE CONT_COND WITH 'AND' + ELSE + REPLACE CONT_COND WITH ' ' + ENDIF +ENDIF + +KEYBOARD CHR(13) +RETURN .T. + +*********************************************************** +FUNCTION CK_LOGICGR +IF RECNO() = 1 + REPLACE LOGIC_GR WITH ' 1' +ENDIF + +IF EMPTY(LOGIC_GR) + RETURN .T. +ELSE + IF LOGIC_GR == 'OR' + RETURN .T. + ELSE + IF VAL(LOGIC_GR) > 0 + REPLACE LOGIC_GR WITH STR(VAL(LOGIC_GR),2) + RETURN .T. + ELSE + ERRLINE := 'Line ' + STR(RECNO(),3) + ' ' + ERR_BOX( 'VALID LOGIC GROUPS ARE: ',; + ' - Numeric Sequence Numbers ',; + ' - "OR" (Which Will Combine Logic Groups) ',; + ' (See ' + ERRLINE + ') ') + RETURN .F. + ENDIF + ENDIF +ENDIF +RETURN .T. + +*********************************************************** +PROCEDURE LOGICERR +ERRLINE := 'Line ' + STR(RECNO(),3) + ' ' +ERR_BOX( 'LOGIC GROUPS (' + ERRLINE + ') ARE OUT OF SEQUENCE ',; + ' Please Re-enter with Consecutive ',; + ' LOGIC GROUPS or NO LOGIC GROUPS AT ALL! ') +RETURN + + +********************************************************* +FUNCTION OPT_VAL_LOOK() // CALLED FROM THE ALIAS2 FIELD +LOCAL NCHOICE := 0 +LOCAL HEADER := 'Select File' +LOCAL CHOICE_ARR := {}, SAVESEL := SELECT() +LOCAL SAVESCR := SAVESCREEN(), SAVEORD +LOCAL SAVECURSOR := SETCURSOR(), SAVEFILT +LOCAL STRT_ROW := 10 +LOCAL RETVAL := 10 +PRIVATE DISPVAL, FILTERVAL + +IF FIELD2 == '"SYSTEM "' + NCHOICE = 1 +ELSE + IF FIELD2 == '"CATEGORY"' + NCHOICE = 2 + ELSE + IF FIELD2 == '"MODEL "' + NCHOICE = 3 + ELSE + AADD(CHOICE_ARR, 'SYSTEM ATTRIBUTE Options') + AADD(CHOICE_ARR, 'CATEGORY ATTRIBUTE Options') + AADD(CHOICE_ARR, 'MODEL ATTRIBUTE Options') + + NCHOICE = LISTBOX(CHOICE_ARR,1,HEADER, STRT_ROW) + IF LASTKEY() = 27 + RESTSCREEN(,,,,SAVESCR) + SETCURSOR(SAVECURSOR) + RETURN .F. + ENDIF + ENDIF + ENDIF +ENDIF + + +IF NCHOICE = 1 + SELFILE = 'ATT_OPTS' + DISPVAL := '"-" + ATT_CODE + " " + OPT_VALUE ' +ELSE + IF NCHOICE = 2 + SELFILE = 'CAT_OPTS' + DISPVAL := '"-" + CAT_CODE + " " + OPT_VALUE ' + ELSE + IF NCHOICE = 3 + SELFILE = 'PROD_OPTS' + DISPVAL := '"-" + PROD_CODE + " " + OPT_VALUE ' + ENDIF + ENDIF +ENDIF + +SELECT (SELFILE) +SAVEORD := INDEXORD() +SAVEFILT := DBFILTER() +IF NCHOICE <> 1 + DONSETORD(2) +ENDIF +**SET FILTER TO ATT_CODE == (SAVESEL)->FIELD1 + + +FILTERVAL := 'ATT_CODE == ' + STR(SAVESEL,2) + '->FIELD1' +SET FILTER TO &FILTERVAL + +***********************GBROWSE( SELFILE ) + +RETVAL := VAL_LOOKUP((SAVESEL)->FIELD1 + (SAVESEL)->ALIAS2, ; + SELFILE, 5, {'ATT_CODE', DISPVAL} , 'Y' ,.F., ; + STR(SAVESEL,2) + '->ALIAS2') +******************* SELFILE, 5, {'ATT_CODE', DISPVAL} , 'Y' ,.F., '(SAVESEL)->ALIAS2') + +SELECT (SELFILE) +SET FILTER TO &SAVEFILT +DONSETORD(SAVEORD) +SELECT (SAVESEL) +//** CHECK FOR ENTER OR F10 +IF (LASTKEY() = 13 .OR. LASTKEY() = -9 ) .AND. RETVAL + IF NCHOICE = 1 + REPLACE (SAVESEL)->FIELD2 WITH '"SYSTEM "' + ELSEIF NCHOICE = 2 + REPLACE (SAVESEL)->FIELD2 WITH '"CATEGORY"' + ELSE + REPLACE (SAVESEL)->FIELD2 WITH '"MODEL "' + ENDIF + IF SELECT('TFILE') > 0 + REPLACE (SAVESEL)->ALIAS2 WITH TFILE->OPT_VALUE + SELECT TFILE + USE + SELECT (SAVESEL) + ELSE + REPLACE (SAVESEL)->ALIAS2 WITH (SELFILE)->OPT_VALUE + ENDIF + REPLACE (SAVESEL)->FIELD2TYPE WITH 'C' +ENDIF + +RETURN RETVAL + +**************************************************** +FUNCTION CK_CAT_MOD() +IF FIELD2 = '"CATEGORY"' .OR. FIELD2 = '"MODEL "' ; + .OR. FIELD2 = '"SYSTEM "' + RETURN .T. +ELSE + RETURN .F. +ENDIF + +**************************************************** +FUNCTION RULE_LINE1() +RETURN ' Att Code ' + +**************************************************** +FUNCTION RULE_LINE2() +RETURN ' Logic Att. /Option Attribute Cont Line' + + + + +*********************************************************** +***FUNCTION GETRULES(MRULE_CODE ) // GET ALL RULES THAT APPLY TO THIS ITEM +FUNCTION GETRULES(MRULE_CODE, SELFILE, GET_ARR, GET_ELM) +** RETURNS AN ARRAY WITH FIVE ELEMENTS, ONE ELEMENT FOR EACH SET +** OF RULES OF THAT TYPE +LOCAL RULEARR, SAVESCR, I, II, CUSTRULES := {}, LOANRULES := {} +LOCAL FSRULES := {}, TRRULES := {}, RETVAL, SAVESEL +LOCAL LVRULES := {} +SAVE SCREEN TO SAVESCR + +SAVESEL := SELECT() +RULEARR := {} +SELECT RULES + +SEEKKEY := MRULE_CODE +SEEK SEEKKEY +IF !FOUND() + ERR_BOX('PRODUCT ' + ALLTRIM((SELFILE)->PROD_CODE) + ' contains the ' + ; + 'RULE CODE ' + MRULE_CODE + '! ', ; + 'The RULE was NOT FOUND IN the RULES File!', ; + 'Define the RULE "' + ALLTRIM(MRULE_CODE) + '" and try again!') +ENDIF +DO WHILE RULE_CODE == MRULE_CODE .AND. !EOF() + + RETVAL := FILLRULE() + IF !EMPTY(RETVAL) + AADD(CUSTRULES, RETVAL) // RETARR ELE 1 + ENDIF + SELECT RULES + SKIP 1 +ENDDO +SELECT RULES + +SELECT &SAVESEL +RULEARR := CUSTRULES +RESTORE SCREEN FROM SAVESCR +RETURN RULEARR + +****************************************************************** + +STATIC FUNCTION FILLRULE() +LOCAL SEEKKEY, CURRULEPACK := {}, RULEPARMS := {}, LOGICARR := {} +LOCAL SUBGRARR := {}, SAVESEL +LOCAL TEMPADD := {} +SAVESEL := SELECT() +SEEKKEY := RULE_CODE +SELECT RULEPACK +SEEK SEEKKEY +FSTREC := .T. +LASTSUBGR := 1 +CURLG := 0 +IF FOUND() + ** IF THE LOGIC GROUP IS NOT EMPTY, EITHER NEW LOGIC OR SUBLOGIC GR. + ** THE RETURNED ARRAY MUST CONTAIN 1 ELEMENT PER LOGIC GROUP + RULEPARMS := {, RULES->RULE_CODE,; + RULES->RULE_LT, RULES->AUTO_GRADE,; + RULES->RULE_DESC, RULES->SETUP_ID} + LASTLG := LOGIC_GR + DO WHILE RULE_CODE == SEEKKEY .AND. !EOF() + IF !EMPTY(LOGIC_GR) .OR. FSTREC + FSTREC := .F. + IF LOGIC_GR = 'OR' + SUBGR ++ + ELSE + IF CURLG <> 0 + ** ADD THE RULE PACK FOR THE CURRENT SUBGROUP BEFORE ADDING LG + AADD(SUBGRARR, {CURRULEPACK, LASTLG}) + CURRULEPACK := {} + ** LOGICARR CONTAINS 1 ELEMENT FOR EACH ACTUAL LOGIC GROUP + AADD(LOGICARR, SUBGRARR) + SUBGRARR := {} + ENDIF + CURLG := VAL(LOGIC_GR) + SUBGR := 1 + LASTSUBGR := 1 + LASTLG := LOGIC_GR + ENDIF + ENDIF + IF SUBGR <> LASTSUBGR + ** CONTAINS 1 ELEMENT FOR EACH SUB GROUP (1 OR MORE PER LOGIC GR) + ** EACH SUBGROUP ELEMENT WILL CONTAIN ALL RULES FOR THAT SUBGR + AADD(SUBGRARR, {CURRULEPACK, LASTLG} ) + CURRULEPACK := {} + LASTSUBGR := SUBGR + LASTLG := LOGIC_GR + ENDIF + + AADD(CURRULEPACK, {FIELD1, OPERATOR, FIELD2, CONT_COND, FIELD1TYPE, FIELD2TYPE, ALIAS1, ALIAS2}) + SKIP 1 + + ENDDO + AADD(SUBGRARR, {CURRULEPACK, LASTLG} ) + AADD(LOGICARR, SUBGRARR) + SELECT &SAVESEL + RETURN {RULEPARMS,LOGICARR} +ELSE + ERR_BOX('RULE CODE ' + SEEKKEY + ' was called for ', ; + 'evaluation, but the RULE had NO RULE PACK ', ; + 'LINE DEFINITIONS - PRESS ANY KEY TO CONTINUE ') + SELECT &SAVESEL + RETURN NIL +ENDIF + +********************************************************************* +** ALL RULES PASSED HERE. +** EVALUATE THE CUST RULES FIRST, THEN THE LOAN RULES +** IF ANY HIT, RETURN .T. TO CALLING PROC (FOR ANCILLARY PROCESS) +** THE NEXT STEP WILL RECEIVE ALL RULES OF A GIVEN TYPE + +FUNCTION EVALCLRULES(CLRULEARR, WHENFAIL, G_ARR, SELFILE) +LOCAL I, RESULT := {}, THISRESULT := .F., HITCUST := .F. +PRIVATE CURFILE, FIELDARR +PRIVATE FAILFUNC := WHENFAIL +PRIVATE GET_ARR := G_ARR +PRIVATE RULE_SELFILE := SELFILE + +*PRIVATE SEEKVAL := SEEKKEY +CURFILE := 'C' +IF LEN(CLRULEARR[1]) > 0 // PASS WHOLE (L/C) RULE SET TO NEXT + HITCUST := EVALRULESET(CLRULEARR[1]) +ENDIF // STEP (ALL CUST RULES OR ALL +IF HITCUST + RETURN .T. +ELSE + RETURN .F. +ENDIF + + + +********************************************************************* +** ALL RULES PASSED HERE. (1ST CUST, THEN LOAN-WILL PROCESS 2 TIMES) +** EVALUATE EACH RULE SEPERATELY AND STORE RESULT IN RESULT ARRAY +** IF THE TOTAL EVALUATION IS TRUE, RETURN .T. TO CALLING FUNCTION +** THE NEXT STEP WILL EVALUATE EACH RULE AND WRITE THE GRADE RECS AS NEEDED + +FUNCTION EVALRULESET(THISRULEARR) +LOCAL I, RESULT := {}, THISRESULT +FOR I := 1 TO LEN(THISRULEARR) + THISRESULT := EVAL1RULE(THISRULEARR[I]) // PASS THE WHOLE RULE TO NEXT + AADD(RESULT, THISRESULT) // STEP + IF !THISRESULT + EXIT + ENDIF +NEXT // RESULT ARR 1 ELEMENT FOR EACH +*** STRING RESULTS TOGETHER AND // RULE IN THE SET PASSED +*** EVALUATE AS A HIT OR NOT + +** NOW, EVALUATE THE COMBINED RULES TO SEE IF ANY HITS +RETURNVAL := .T. +FOR I := 1 TO LEN(RESULT) + IF !RESULT[I] // THIS IS A MASSIVE "OR" (ANY FALSE => ALL FALSE) + RETURNVAL := .F. + ENDIF +NEXT +RETURN RETURNVAL // RETURNS T/F FOR ALL RULES EVALUATED + // IF ANY ONE WAS TRUE, RETURNS TRUE + + + + + +********************************************************************* +** EACH RULE PASSED HERE (REGARDLESS OF TYPE) +** EVALUATE THIS ONE RULE SINGLELY AND STORE RESULT IN RESULT ARRAY +** IF THIS RULE IS A HIT, WRITE OUT THE GRADE RECORD +** THE NEXT STEP WILL EVALUATE EACH LOGIC GROUP AS REQUIRED + +STATIC FUNCTION EVAL1RULE(WHOLERULE) +LOCAL I, RESULT := {}, THISRESULT, STRVAL := '' +LOCAL BAL, COLL, FACT +PRIVATE MFILE_TYPE +PRIVATE MRULE_LT +PRIVATE MAUTOGRADE +PRIVATE MRULE_DESC +PRIVATE ML2VFACTOR +MRULE_CODE := WHOLERULE[1][2] +MRULE_DESC := WHOLERULE[1][5] + + +RULE2CK := WHOLERULE[2] +FOR I := 1 TO LEN(RULE2CK) // ONE ELEMENT FOR EACH LOGIC GR. + THISRESULT := EVALLGGRP(RULE2CK[I]) // ONE LOGIC GROUP + AADD(RESULT, THISRESULT) + IF !THISRESULT // IF ANY LOGIC GROUP IN THE RULE IS FALSE, + RETURN .F. // THE WHOLE RULE IS A NON-HIT + ENDIF +NEXT + +** NOW, EVALUATE THE COMBINED LOGIC GROUPS IN THE RULE +EVALSTR := '' +STRVAL := '' +FOR I := 1 TO LEN(RESULT) + IF RESULT[I] + STRVAL := '.T.' + ELSE + STRVAL := '.F.' + ENDIF + + IF I = LEN(RESULT) + EVALSTR := EVALSTR + STRVAL + ELSE + JOINER := '.AND.' + EVALSTR := EVALSTR + STRVAL + JOINER + ENDIF +NEXT +IF EVALSTR == '' + RETURN .F. +ELSE + IF &EVALSTR .AND. FAILFUNC <> NIL + WRITEFRREC() + ENDIF + RETURN &EVALSTR // RETURNS T/F FOR ALL LOGIC GROUPS IN THE RULE +ENDIF + + + + +********************************************************************* +** EACH LOGIC GROUP PASSED HERE. +** EVALUATE LOGIC GROUP SINGLELY AND STORE RESULT IN RESULT ARRAY +** IF COMBINATION OF LOGIC GROUPS HITS, RETURN .T. TO CALLING FUNCTION +** THE NEXT STEP WILL EVALUATE EACH SUB GROUP AS REQUIRED + +STATIC FUNCTION EVALLGGRP(LGGROUP) +LOCAL I, RESULT := {}, THISRESULT +LOCAL EVALSTR, JOINER, STRVAL +FOR I := 1 TO LEN(LGGROUP) // ONE ELEMENT FOR EACH LOGIC GROUP + THISRESULT := EVALSUB(LGGROUP[I]) // PASS EACH SUBGROUP + AADD(RESULT, THISRESULT) +NEXT + +** NOW, EVALUATE THE COMBINED SUB GROUPS IN THE LOGIC GROUP +EVALSTR := '' +STRVAL := '' +FOR I := 1 TO LEN(RESULT) + IF RESULT[I] + STRVAL := '.T.' + ELSE + STRVAL := '.F.' + ENDIF + + IF I = 1 + EVALSTR := EVALSTR + STRVAL + ELSE + IF ALLTRIM(LGGROUP[I,2]) = 'OR' // THE LOGIC GROUP VALUE + JOINER := '.OR.' + ELSE + JOINER := '.AND.' + ENDIF + EVALSTR := EVALSTR + JOINER + STRVAL + ENDIF +NEXT +RETURN &EVALSTR // RETURNS T/F FOR ALL SUBGROUPS IN THE LOGIC GR. + + + + + +********************************************************************* +** EACH SUB-LOGIC-GROUP PASSED HERE. +** EVALUATE SUB-GROUP SINGLELY AND STORE RESULT IN RESULT ARRAY +** IF COMBINATION OF SUB-LOGIC GROUPS HITS, RETURN .T. TO CALLING FUNCTION +** THE NEXT STEP WILL EVALUATE EACH LINE ITEM AS REQUIRED + +STATIC FUNCTION EVALSUB(TOTSUBGROUP) +LOCAL I, RESULT := {}, THISRESULT +LOCAL EVALSTR, JOINER, STRVAL := '', CURLGVAL +SUBGROUP := TOTSUBGROUP[1] +CURLGVAL := TOTSUBGROUP[2] +FOR I := 1 TO LEN(SUBGROUP) // ONE ELEMENT FOR EACH LINE ITEM + THISRESULT := EVALLINE(SUBGROUP[I]) // PASS EACH LINE ITEM + AADD(RESULT, {THISRESULT, SUBGROUP[I,4]}) // STORE THE CONT_COND W/LINE LI +NEXT + +** NOW, EVALUATE THE SUB LOGIC GROUP +EVALSTR := '' +FOR I := 1 TO LEN(RESULT) + IF RESULT[I,1] + STRVAL := '.T.' + ELSE + STRVAL := '.F.' + ENDIF + + IF I = LEN(RESULT) + EVALSTR := EVALSTR + STRVAL + ELSE + IF ALLTRIM(RESULT[I,2]) = 'OR' + JOINER := '.OR.' + ELSE + JOINER := '.AND.' + ENDIF + EVALSTR := EVALSTR + STRVAL + JOINER + ENDIF +NEXT +RETURN &EVALSTR // RETURNS T/F FOR ALL LINES IN SUBGROUP + + + + +********************************************************************* +** EACH LINE OF THE FIELD COMPARISON RULE MADE IT TO HERE. +** EVALUATE THE LINE TO THE ACTUAL DATA IN THE PERMCUST/PERMLOAN +** THEN EVALUATE THE RESULT AND RETURN .T. IF THE RULE IS TRUE FOR DATA + +** THIS FUNCTION EVALUATES DATA IN THE RECORD AND CALCULATES THE T/F +** VALUE BASED ON THE RULE DEFINITION. + + +********************************** +STATIC FUNCTION EVALLINE(LINEITEM) +LOCAL I, RESULT := {}, THISRESULT, REPVAR1, REPVAR2, OPER, CC, ELEM +LOCAL MFIELD, SAVESEL := SELECT() + +PRIVATE AL1 // ALIAS1 := ALLTRIM(LINEITEM[7] +PRIVATE AL2 // ALIAS2 := ALLTRIM(LINEITEM[8] +PRIVATE LVAR1 := '' + +** THIS VERSION KNOWS WHICH DATABASES TO LOOK AT BASED ON THE FILETYPE +** THE SURVEY VERSION WILL HAVE TO SELECT AND SEEK ON THE FLY! +REPVAR1 := ALLTRIM(LINEITEM[1]) +REPTYPE1 := ALLTRIM(LINEITEM[5]) +IF REPTYPE1 = 'C' + REPVAR1 = ALLTRIM( STRTRAN(REPVAR1, '"', '') ) +ENDIF +OPER := LINEITEM[2] +REPVAR2 := ALLTRIM(LINEITEM[3]) +REPTYPE2 := ALLTRIM(LINEITEM[6]) +REPALIAS1 := ALLTRIM(LINEITEM[7]) +REPALIAS2 := ALLTRIM(LINEITEM[8]) +LVAR1 = '' +LVAR2 = '' +CC := LINEITEM[4] +IF EMPTY(REPTYPE1) .OR. EMPTY(REPTYPE2) + ERR_BOX('ERROR DURING RULE EVALUATION - EMPTY FIELDTYPE ' , ; + ' The line in error reads as follows ', ; + REPVAR1 + ' ' + OPER + ' ' + REPALIAS2 + ' '+ REPVAR2 , ; + ' PLEASE CORRECT AND RE-RUN THIS PROCESS') + RETURN .F. +ENDIF + +// determine value of 1st field to compare +// IF IT IS A RANCH SLIDER, THEN REVERSE THE HEIGHT AND WIDTH +IF REPVAR1 = 'WIDTH' .OR. REPVAR1 = 'HEIGHT' + ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == 'RANCH SLID' }) + IF ELEM > 0 .AND. ALLTRIM(GET_ARR[ELEM,4]) == 'RANCH SLIDER' + IF REPVAR1 = 'WIDTH' + REPVAR1 = 'HEIGHT' + ELSE + REPVAR1 = 'WIDTH' + ENDIF + ENDIF +ENDIF + +IF REPTYPE1 = 'S' + LVAR1 = SPECFLD_VALUE( REPVAR1, RULE_SELFILE ) +ELSE + IF REPTYPE1 = 'A' + ELEM = ASCAN(GET_ARR, {|X| ALLTRIM(X[1]) == ALLTRIM(REPVAR1) }) + IF ELEM > 0 + LVAR1 = GET_ARR[ELEM,4] //USER_RESP + + IF GET_ARR[ELEM,2]$'T' + REPTYPE1 := 'C' + // STRIP THE "V" OFF THE 1ST BYTE OF THE RESULT + IF SUBS(LVAR1,1,1)$'V' .AND. ISDIGIT(SUBS(LVAR1,2,1)) + LVAR1 := SUBS(LVAR1,2) + ENDIF + ELSE + IF GET_ARR[ELEM,2]$'UC' + REPTYPE1 := 'N' + LVAR1 := VAL(LVAR1) + ELSE + REPTYPE1 := 'C' + ENDIF + ENDIF + ELSE + ERR_BOX('ERROR DURING EVALUATION OF RULE - (' + MRULE_CODE + ')',; + ' ATT_CODE SPECIFIED - NOT FOUND' , ; + ' The ATT CODE WAS "' + REPVAR1 + '"' , ; + ' The line in error reads as follows ' , ; + REPVAR1 + ' ' + OPER + ' ' + REPALIAS2 + ' '+ REPVAR2 , ; + ' PLEASE CORRECT LINE ITEM - '+STR((CUR_OL)->LINE_NUM)+'/'+(CUR_OL)->PROD_CODE) + ENDIF + ELSE + LVAR1 = '' + ERR_BOX('ERROR DURING RULE EVALUATION - INVALID FIELDTYPE1 ' , ; + ' The VALUE TO LOOK FOR was ' + REPVAR1 , ; + ' The line in error reads as follows ', ; + REPVAR1 + ' ' + OPER + ' ' + REPALIAS2 + ' '+ REPVAR2 , ; + ' PLEASE CORRECT AND RE-RUN THIS PROCESS') + RETURN .F. + ENDIF +ENDIF + +IF EMPTY(REPTYPE1) .OR. EMPTY(REPTYPE2) + ERR_BOX('ERROR DURING RULE EVALUATION - EMPTY FIELDTYPE ' , ; + ' The ATT CODE WAS ' + REPVAR1 + ' or ' + REPVAR2 , ; + ' The line in error reads as follows ', ; + REPVAR1 + ' ' + OPER + ' ' + REPALIAS2 + ' '+ REPVAR2 , ; + ' PLEASE CORRECT AND RE-RUN THIS PROCESS') + RETURN .F. +ENDIF + +IF REPVAR2 = '"CATEGORY"' .OR. REPVAR2 = '"MODEL"' .OR. REPVAR2 = '"SYSTEM"' ; + .OR. REPVAR2 = '"MODEL "' .OR. REPVAR2 = '"SYSTEM "' + LVAR2 = ALLTRIM(REPALIAS2) + REPTYPE2 := 'C' +ELSE + LVAR2 := REPVAR2 + // CHECK FOR NUMERIC + DO CASE + CASE REPTYPE2 = 'S' //** P3N - 6/29/01 + LVAR2 := SPECFLD_VALUE(REPVAR2, RULE_SELFILE) //** P3N - 6/29/01 + CASE REPTYPE2 = 'N' + LVAR2 = VAL(LVAR2) + CASE REPTYPE2 = 'C' + LVAR2 = ALLTRIM(STRTRAN(LVAR2,'"', ' ')) + CASE REPTYPE2 = 'A' + FOR I = 1 TO LEN(GET_ARR) + IF ALLTRIM(GET_ARR[I,1]) == REPVAR2 + LVAR2 = GET_ARR[I,4] //USER_RESP + + IF GET_ARR[ELEM,2]$'T' + REPTYPE1 := 'C' + // STRIP THE "V" OFF THE 1ST BYTE OF THE RESULT + IF SUBS(LVAR2,1,1)$'V' .AND. ISDIGIT(SUBS(LVAR2,2,1)) + LVAR2 := SUBS(LVAR2,2) + ENDIF + ELSE + IF GET_ARR[I,2]$'UC' + REPTYPE2 := 'N' + LVAR2 := VAL(LVAR2) + ELSE + REPTYPE2 := 'C' + ENDIF + ENDIF + EXIT + ENDIF + NEXT + OTHERWISE + ERR_BOX('ERROR DURING RULE EVALUATION - INVALID FIELDTYPE2 ' , ; + ' The line in error reads as follows ', ; + REPVAR1 + ' ' + OPER + ' ' + REPALIAS2 + ' '+ REPVAR2 , ; + ' PLEASE CORRECT AND RE-RUN THIS PROCESS') + RETURN .F. + ENDCASE +ENDIF + +// LVAR2 IS SET TO EITHER CHARSTR RESPONSE, NUMERIC OR A BLANK +// MAKE LVAR/REPTYPE1 THE SAME AS TYPE2 +IF VALTYPE(LVAR1) = 'C' + DO CASE + CASE REPTYPE2 = 'N' + LVAR1 := VAL(LVAR1) // FORCE TO NUMERIC VALUE IN LVAR1 + REPTYPE1 := 'N' + CASE REPTYPE2 = 'C' // KEEP AS CHAR TO MATCH LVAR2 + REPTYPE1 := 'C' + CASE REPTYPE2 = ' ' // MAKE BOTH CHARACTER SINCE LVAR1 WAS CHAR + REPTYPE1 := 'C' + REPTYPE2 := 'C' + ENDCASE +ELSE + IF VALTYPE(LVAR1) = 'N' + DO CASE + CASE REPTYPE2 = 'N' // KEEP AS NUMERIC SAME AS LVAR1 TYPE + REPTYPE1 := 'N' + CASE REPTYPE2 = 'C' // FORCE LVAR2 TO NUMERIC TO MATCH LVAR1 + LVAR2 := VAL(LVAR2) + REPTYPE1 := 'N' + REPTYPE2 := 'N' + CASE REPTYPE2 = ' ' + LVAR2 := 0 + REPTYPE1 := 'N' // MAKE BOTH NUMERIC TO MATCH LVAR1 TYPE + REPTYPE2 := 'N' + ENDCASE + ENDIF +ENDIF + +IF REPTYPE1 = 'C' + LVAR1 = ALLTRIM( STRTRAN(LVAR1, '"', '') ) +ENDIF + +IF REPTYPE2 = 'C' + LVAR2 = ALLTRIM( STRTRAN(LVAR2, '"', '') ) +ENDIF + +VTYPE1 := VALTYPE(LVAR1) +VTYPE2 := VALTYPE(LVAR2) + +** WHEN COMPARING CHARACTER FIELDS, FORCE TO UPPER CASE + +IF VTYPE1 = 'C' + LVAR1 := UPPER(ALLTRIM(LVAR1)) + IF LEN(LVAR1) = 0 + LVAR1 := ' ' + ENDIF +ENDIF +IF VTYPE2 = 'C' + LVAR2 := UPPER(ALLTRIM(LVAR2)) + IF LEN(LVAR2) = 0 + LVAR2 := ' ' + ENDIF +ENDIF + +IF LEN(TRIM(OPER)) > 1 + DO CASE + CASE OPER = 'LT' + OPER := '< ' + CASE OPER = 'GT' + OPER := '> ' + CASE OPER = 'EQ' + OPER := '= ' + CASE OPER = 'LE' + OPER := '<=' + CASE OPER = 'GE' + OPER := '>=' + CASE OPER = 'NE' + OPER := '<>' + ENDCASE +ENDIF +CALCSTR := 'LVAR1 ' + OPER + ' LVAR2' +SELECT (SAVESEL) +RETURN &CALCSTR + + + + +******************************************************* +************************************************** +STATIC FUNCTION EVALFLD(REPVAR, REPTYPE, REPALIAS) +IF SUBSTR(REPVAR,1) = '"' + REPVAR := ALLTRIM(STRTRAN(REPVAR, '"', '')) + RETURN ALLTRIM(REPVAR) +ELSE + IF REPTYPE$'N' + RETURN VAL(REPVAR) + ELSE + IF REPVAR = 'CURDATE' + RETURN CURDATE + ELSE + IF REPTYPE$'F' + *-***************************** + *-HERE, YOU HAVE TO BE SURE THAT THE ALIAS IS OPEN AND SEEKED + *-ON THE PROPER RECORD. THEN RETSTR := TRIM(AL1 OR AL2) + '->' + REPVAR + +///////CHECK FOR CUSTOMER RECORD EXIST IN ALIAS, + FOR L = 1 TO LEN(ALIAS_LIST) + IF TRIM(ALIAS_LIST[L,1]) = TRIM(REPALIAS) .AND. ALIAS_LIST[L,2] + REPVAR := REPALIAS + '->' + REPVAR + RETURN &REPVAR + ENDIF + NEXT + RETURN NIL + ELSE + IF REPTYPE$'D' + RETURN CTOD(REPVAR) + ELSE + IF REPTYPE$'C' + RETURN ALLTRIM( STRTRAN(REPVAR, '"', '') ) + ELSE + RETURN NIL + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF +ENDIF + + + + + +******************************************************* + + +STATIC PROCEDURE UPDATENUMFAIL(MRULE_CODE) +LOCAL I, X, SEEKKEY +SELECT SURV_HIT +SEEKKEY := MRULE_CODE +SEEK SEEKKEY +DO WHILE RULE_CODE = MRULE_CODE .AND. !EOF() + X := 0 + SEEKKEY := RULE_CODE + LOCATION + SELECT RULEHIT + SEEK SEEKKEY + DO WHILE RULE_CODE + LOCATION == SEEKKEY + X ++ + SKIP 1 + ENDDO + SELECT SURV_HIT + REPLACE NUM_FAIL WITH X + SKIP 1 +ENDDO + +RETURN + +******************************************************* + +STATIC PROCEDURE WRITEFRREC +*** WRITE THE GRADE FAIL RECORD HERE + +SAVESEL := SELECT() +SELECT RULEHIT +CLNUM := MASTER->LOCATION +SEEKKEY := STR(DESCEND(CURDATE)) + MRULE_CODE ; + + SUBSTR(CLNUM+SPACE(20), 1, 20) ; + + MRULE_CODE +SEEK SEEKKEY +IF !FOUND() + ADD_REC(3) + REPLACE FAIL_DATE WITH CURDATE + REPLACE RULE_CODE WITH MRULE_CODE + REPLACE LOCATION WITH CLNUM +* REPLACE FAIL_RFILE WITH MFILE_TYPE + REPLACE FAIL_RCODE WITH MRULE_CODE +ENDIF +SELECT &SAVESEL +RETURN + + +*************************************** +FUNCTION CK_IF_NUMERIC(CKFLD) +LOCAL GOODVAR := '', I, CKCHAR +LOCAL REPVAR := ALLTRIM(CKFLD) // -- FIELD TO VALIDATE +LOCAL NUMDEC := 0 + +** CHECK FOR ALPHA FIELD (!NUMERIC) +FOR I = 1 TO LEN(REPVAR) + CKCHAR := SUBSTR(REPVAR,I,1) + IF !(CKCHAR$'0123456789-.') + I := 999 + ELSE + IF (CKCHAR >= CHR(48) .AND. CKCHAR <= CHR(57)) + GOODVAR := GOODVAR + CKCHAR + ELSE + IF CKCHAR = '-' + IF I = 1 + GOODVAR := GOODVAR + CKCHAR + ELSE + I := 999 + ENDIF + ELSE + IF CKCHAR = '.' + NUMDEC ++ + IF NUMDEC = 1 + GOODVAR := GOODVAR + CKCHAR + ELSE + I := 999 + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF +NEXT + +***IF >= 999, THEN IT WAS AN ALPHA LITERAL STRING +***IF < 999, THEN IT WAS A NUMERIC VALUE + +IF I < 999 + RETURN .T. +ELSE + RETURN .F. +ENDIF + +*********************************************** +****THIS FUNCTION WILL CHECK FOR THE VALUE **** +** IN THE SPECIAL FIELDS LIST. IF PASSED A UPDATE +** FIELDNAME, THE SPEC_FLDS LOOKUP WILL UPDATE USERFILE2 +** +*********************************************** +FUNCTION SPEC_FLD(MNAME, WHEREFROM) +// CHECK FOR MNAME IN SPECIAL FIELD LIST + +STATIC SPEC_R_FLDARR +STATIC SPEC_C_FLDARR +STATIC SPEC_M_FLDARR + +IF WHEREFROM = NIL + WHEREFROM := 'RULE' +ENDIF + +IF SPEC_R_FLDARR = NIL + SPEC_R_FLDARR := SPECIAL_FIELDS(.F., 'RULE') // NO LOOKUP, BUT GET ARRAY +ENDIF + +IF SPEC_C_FLDARR = NIL + SPEC_C_FLDARR := SPECIAL_FIELDS(.F., 'CUT') // NO LOOKUP, BUT GET ARRAY +ENDIF + +IF SPEC_M_FLDARR = NIL + SPEC_M_FLDARR := SPECIAL_FIELDS(.F., 'MISC') // NO LOOKUP, BUT GET ARRAY +ENDIF + +IF WHEREFROM = 'RULE' .AND. ASCAN(SPEC_R_FLDARR, {|X| TRIM(X)==TRIM(MNAME)}) > 0 + RETURN .T. +ELSE + IF WHEREFROM = 'CUT' .AND. ASCAN(SPEC_C_FLDARR, {|X| TRIM(X)==TRIM(MNAME)}) > 0 + RETURN .T. + ELSE + IF WHEREFROM = 'MISC' .AND. ASCAN(SPEC_M_FLDARR, {|X| TRIM(X)==TRIM(MNAME)}) > 0 + RETURN .T. + ELSE + RETURN .F. + ENDIF + ENDIF +ENDIF + + +*********************************************** +// CHECKS TO SEE IF THE FIELD IS A SPECIAL FIELD +*********************************************** +FUNCTION RULE_FIELD(UPDATE_FIELDNAME) +**FUNCTION FLD_ERR1(MNAME) +// CALLED DURING RULE PACK SETUP + +LOCAL RESULT, VERIFY_VAL, M2 +LOCAL WHCHFLD := RIGHT( ALLTRIM(UPDATE_FIELDNAME) ,1) +LOCAL REPTYPEFLD := 'FIELD' + WHCHFLD + 'TYPE' +LOCAL SAVESEL := SELECT() + +VERIFY_VAL := &UPDATE_FIELDNAME +IF LASTKEY() = -9 // F10 KEY - NO NEED TO CHECK THIS AGAIN! + RETURN .T. +ENDIF + +// CHECK SPECIAL FIELD LIST 1ST + +IF EMPTY(VERIFY_VAL) .AND. WHCHFLD = '1' + ERR_BOX('You MUST Specify an ATTRIBUTE') + RETURN .F. +ENDIF + +IF SPEC_FLD(VERIFY_VAL) + REPTYPEFLD := 'FIELD' + WHCHFLD + 'TYPE' + REPLACE &REPTYPEFLD WITH 'S' + RETURN .T. +ELSE + // BRING UP THE SPECIAL FIELD LIST + IF UPDATE_FIELDNAME = NIL + ? 'ERROR IN RULE_FIELD IN CGWRULE ' + WAIT + RETURN .F. + ENDIF + RESULT = SPECIAL_FIELDS(.T., 'RULE') // LOOK IT UP + IF !EMPTY(RESULT) +** SAVESEL = SELECT() +** SELECT USERFILE2 + SELECT (SAVESEL) +****REPLACE FIELD1 WITH RESULT + REPLACE &UPDATE_FIELD WITH RESULT + REPLACE &REPTYPEFLD WITH 'S' +** SELECT(SAVESEL) + RETURN .T. + ELSE + IF VAL_LOOKUP(FIELD1, 'ATTRIBUTES', , {'ATT_CODE', 'DESC'} , 'Y',; + .F., STR(SAVESEL,2) + '->FIELD1' ,{4,20,17,52}) +***** .F., 'USERFILE2->FIELD1' ,{4,20,17,52}) + REPLACE &REPTYPEFLD WITH 'A' + RETURN .T. + ELSE + IF WHCHFLD = '1' + M2 = '' + ELSE + M2 = 'or a CHARACTER STRING, VALUE, or BLANK' + ENDIF + ERR_BOX('INVALID ENTRY - SPECIFY AN ATTRIBUTE ', ; + M2,; + ' PLEASE RE-ENTER') + ENDIF + ENDIF +ENDIF +? 'ERROR IN RULE_FIELD IN CGWRULE ' +WAIT +RETURN .F. + +********************************************************** +FUNCTION PE_SPECFLD(FLD2CK) +LOCAL SAVESEL := SELECT() +LOCAL VERIFY_VAL, RESULT +VERIFY_VAL := &FLD2CK + +IF LASTKEY() = K_F10 + RETURN .T. +ENDIF + +IF SPEC_FLD(VERIFY_VAL) + RETURN .T. +ELSE + RESULT = SPECIAL_FIELDS(.T., 'RULE') // LOOK IT UP + IF !EMPTY(RESULT) + SELECT USERFILE2 + REPLACE &FLD2CK WITH RESULT + SELECT(SAVESEL) + RETURN .T. + ENDIF +ENDIF +RETURN .F. + +****************************************************************** +********************************************************************* + \ No newline at end of file diff --git a/CGWUGRAD.PRG b/CGWUGRAD.PRG new file mode 100644 index 0000000..1812797 --- /dev/null +++ b/CGWUGRAD.PRG @@ -0,0 +1,214 @@ +* UPGRADE - build the user manual for now! +* +* +PROCEDURE UPGRADE(CURVER) +CLEAR +@ 10,10 SAY '*** Upgrading Data Files - One Moment Please ***' +* +SELECT CONTROL +OLDVERSION = VERSION +FROMFILE = 'OLD0KA.DBF' +IF FILE(FROMFILE) + DBOPEN('CONTROL',.T.) + FIL_LOCK(5) + APPEND FROM &FROMFILE + GOTO BOTTOM + REPLACE VERSION WITH CURVER + REPLACE INSTALLED WITH .F. + UNLOCK +ELSE + FIL_LOCK(5) + REPLACE VERSION WITH CURVER + REPLACE INSTALLED WITH .F. + UNLOCK + * +* NET_USE ('GRA0UM',.T.,5, 'USERMAN') +* FROMFILE = 'USER.MAN' +* SELECT USERMAN +* ZAP +* APPEND FROM &FROMFILE SDF +* USE + * + RETURN +ENDIF +* +* WORKSTAT = M_DATA + ':' + SYSCODE + '0WS' +DBOPEN('WORKSTAT',.T.) +FROMFILE = 'OLD0WS.DBF' +IF FILE(FROMFILE) + APPEND FROM &FROMFILE + USE +ENDIF + +* PASSWORD = M_DATA + ':' + SYSCODE + '0PA' +DBOPEN('PASSWORD',.T.) +FROMFILE = 'OLD0PA.DBF' +IF FILE(FROMFILE) + SELECT PASSWORD + ZAP + APPEND FROM &FROMFILE +ENDIF +USE +* +* +*THIS IS COMMENTED OUT BECAUSE I DO NOT KNOW WHAT THE USER.MAN FILE IS? +* +* +DBOPEN('DATADICT') +GOTO TOP +DO WHILE !EOF() + + IF ALIAS = 'DATADICT' .OR. ALIAS = 'CONTROL' ; + .OR. ALIAS = 'WORKSTAT' .OR. ALIAS = 'PASSWORD' ; + .OR. ALIAS = 'IMPCUST' .OR. ALIAS = 'STDCUST' + SKIP 1 + LOOP + ENDIF + + @ 12,10 SAY '*** Current file is ' + ALIAS + + NET_USE (FILE_NAME,.T.,5, 'CURFILE') + SELECT CURFILE + ZAP +* IF __DBDRIVER = 'CDX' +* ORDLISTCLEAR() +* ENDIF + FROMFILE = 'OLD' + SUBS( DATADICT->FILE_NAME,4) + + IF OLDVERSION < '3.40' .AND. __DBDRIVER = 'CDX' + SELECT 0 + USE (FROMFILE) EXCLUSIVE ALIAS 'FROMFILE' VIA 'DBFNTX' + ELSE + NET_USE( FROMFILE, .T., 5, 'FROMFILE' ) + ENDIF + + SELECT FROMFILE + GOTO TOP + DO WHILE !EOF() + ADD_ONEREC('FROMFILE', 'CURFILE', .F., .T.) // NO AUDITPROC / ASSUME EXACT SAME STRUCTURE + SELECT FROMFILE + SKIP 1 + ENDDO +** APPEND FROM &FROMFILE + CLOSE FROMFILE + CLOSE CURFILE + + SELECT DATADICT + SKIP 1 +ENDDO + + + +/* +NET_USE ('FSB0UM',.T.,5) +FROMFILE = 'USER.MAN' +SELECT FSB0UM +ZAP +APPEND FROM &FROMFILE SDF +USE +*/ +* +** THE REST IF FOR EXAMPLE SAKE ONLY! +* +* NET_USE ('FSB0LA',.T.,5) +* FROMFILE = 'OLD0LA' +* APPEND FROM &FROMFILE +* NULLDATE = CTOD(' / / ') +* GOTO TOP +* DO WHILE .NOT. EOF() +* IF ACC_METH = ' ' +* REPLACE ACC_METH WITH '1' +* ENDIF +* IF ORIG_INDEX = ' ' +* REPLACE ORIG_PM WITH ORIG_RATE +* REPLACE ORIG_INDEX WITH 'F' +* ENDIF +* IF REPAY_NDX = ' ' +* REPLACE REPAY_PM WITH REPAY_RATE +* REPLACE REPAY_NDX WITH 'F' +* ENDIF +* IF CO_DATE = NULLDATE +* REPLACE CO_DATE WITH BB_DATE +* ENDIF +* IF REPAY_METH = ' ' +* REPLACE REPAY_METH WITH '1' +* ENDIF +* SKIP 1 +* ENDDO +* USE +* * +* +* +* NET_USE ('FSB0MA',.T.,5) +* FROMFILE = 'OLD0MA' +* APPEND FROM &FROMFILE +* REPLACE ALL CO_DATE WITH BB_DATE FOR CO_DATE = CTOD(' / / ') +* USE +* * +* +* NET_USE ('FSB0RA',.T.,5) +* FROMFILE = 'OLD0RA' +* APPEND FROM &FROMFILE +* REPLACE ALL REPAY_METH WITH '1' FOR REPAY_METH = ' ' +* +* USE +* * +* +* NET_USE ('FSB0CA',.T.,5) +* FROMFILE = 'OLD0CA' +* APPEND FROM &FROMFILE +* USE +* * +* NET_USE ('FSB0LT',.T.,5) +* FROMFILE = 'OLD0LT.DBF' +* IF FILE(FROMFILE) +* SELECT FSB0LT +* ZAP +* APPEND FROM &FROMFILE +* ENDIF +* REPLACE ALL TYPE_ACC WITH '1' FOR TYPE_ACC = ' ' +* LOCATE FOR TYPE_CODE = 'O ' +* REPLACE TYPE_ACC WITH '3' +* USE +* * +* +* NET_USE ('FSB0OI',.T.,5) +* FROMFILE = 'OLD0OI.DBF' +* IF FILE(FROMFILE) +* SELECT FSB0OI +* ZAP +* APPEND FROM &FROMFILE +* ENDIF +* USE +* * +* NET_USE ('FSB0TA',.T.,5) +* FROMFILE = 'OLD0TA' +* APPEND FROM &FROMFILE +* IF OLDVERSION < '4.10' +* REPLACE ALL TRANS_DESC WITH 'PAYMENT' FOR TRANS_TYPE = 'P'; +* .AND. TRANS_DESC = SPACE(30) +* REPLACE ALL TRANS_DESC WITH 'ADJUSTMENT' FOR TRANS_TYPE = 'D'; +* .AND. TRANS_DESC = SPACE(30) +* ENDIF +* REPLACE ALL TRANS_TYPE WITH 'Y' FOR TRANS_TYPE = 'D' +* USE +* * +* COPY FILE OLD0CN.DBF TO FSB0CN.DBF +* COPY FILE OLD0LN.DBF TO FSB0LN.DBF +* COPY FILE OLD0TN.DBF TO FSB0TN.DBF + +* +* NET_USE ('FSB0RI',.T.,5) +* FROMFILE = 'OLD0RI.DBF' +* SELECT FSB0RI +* IF FILE(FROMFILE) +* ZAP +* APPEND FROM &FROMFILE +* ENDIF +* USE + * +* +* +RETURN + + \ No newline at end of file diff --git a/FMASTER.NTX b/FMASTER.NTX new file mode 100644 index 0000000000000000000000000000000000000000..3f86e62cf2273d720ff1845f7426ccf144f85dfb GIT binary patch literal 2048 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 literal 0 HcmV?d00001 diff --git a/GRA1CS.NTX b/GRA1CS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..b6f37e3a3322a21af3971b19e006abb015192f86 GIT binary patch literal 12288 zcmeI22h?0e6@X`VLr5fqko=U;GJ!x)_$B}U2Ni5=-%Yl;?`1c{vbI=biwzqB8U?Xo z!x|elY*?{j!-h3BY_Val*s#UIEi*gizTceV$vNcY>^mocGhgnVH+SaVx%a+ZsE$@@ zjiP6zIvoDHMlDypez!6zcPmwWnl7d({V)HU$=?$TOe}EVSYWkksjcdKb-B7qU8inP zd(>2JI#Q*LQ~ZT_76x%ut+OY>LcugPDZzcIh4u)1(|At`Jt z>?rIkTwT~zK&u=Kf66oK*R9jK(i%0kjOwFO1;L^K3}{>kY*=f_w}{jWZGiiyi3p zl2Kz+FKLb7Rw00e7_h_x$)H|pXn0^u9ppf7Q>*3P>JSH#CV;eGEN?`KDFSCoBOVa| z&xpr35E^k=2%HgDI1m~U?|||QO&%I?sRN-A4~u~{;*k!7Mm#D6&WI~L5EyZ}1ECS& z`m(PZ8u70P&O#gNdP_G_U9NUCjH$oHpw{Az`cD9c&5E8KY8X>FI6qDmf^wU{e*s2- zCGf&BLtFYhj0w}Ra0N6wX2N9S9fk%c|S1{%iH2?8`2tO@|G+)S8f)fJ(YV2V@NdR-E*Z82AB>2J_#?;9%Ky3(4aUe9wS_#-Br#cXt^!?#?5h2<|LEb+blr7XfOl>aG&7s&fPYL&BIU`oMQue1nuT zxQ52e3QVP8OkwU7fjR+wxWq@~x0b%mdjDbx) zHaO6QkVI#Zb`Vo6qiPIj2k|&YfcG44?ii2+hH(ezkn*|eW&n~n(Ea~za^VRrye~jw znzkIbH?(16nzlT308>79NH%2vlE5UusKPi6sf0PYm|;bL4(MSU(zdS_WyfJ!2W-q08}d& zEj5g(`#Qkk%1(a27}&}0?*oh&_BP+@K&x3xIcUI`dVmMIIw|UbdEEy}z_0rtADF

w1}0EHQUDWn_c#Av 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 literal 0 HcmV?d00001 diff --git a/GRA2CS.NTX b/GRA2CS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..a592f7f53ab9e006f6c79f819a497a3f4b132206 GIT binary patch literal 10240 zcmeI&2XGWs7zgmTdvt=-5IRQ>f_QuV#GVU9B!T28)&#p?LBTHA!7kXrF4(~?*a17S zgI(0MfL-j0{q6gI>-|#(VMgMpcQe53Z@#zp_S;v!-J_A}pi~!SK5bQV{qG=EphlII zrYnj{)5XC7!SYO5VR`ZBijpxS2S)m9NEeqE6_=z7#|=+cl$KQt%k)R{+~2tj}o$QH_ZlL^U!L@g{YODLWFb2~lyTxT}v;j45eoD3PRa2oq8`h6$(7 zFyUOqL~^&&Oz3J66HdP)Q^eIrDncZSW0(mI9VRpkF-2W{q@qmd>PRA4Rd;4WS4S}6 z8+T&DH;yKfwf8?Z|4aD_k%tl{d37f=Vrih8!feCxic1&>-wJlS^(05EpGud~^k`qEF#xtQ44@k<9-+nb5D@ znQ;1piDa@L!i0vCn9%TWCUoK;BAMA0Oc*(pOc*))5XsWM7ZaBDy_w=B_lFTlT~d$p zzh?cP7w~HNx}E~OT7RXk_Gg;f-+K0iA*@x zNklRtPG&;XG$L8Wk0VN8EjflMY%*~?6DH`fOql=Ic%-*%dW4!oB>Bp-ylX@yBxCRr zijsV_peU(cHY1W6rzMe`z7-QDLTjQpGSP-9W9el;>HVS7X7vi*Xl zfC=B&Axn`Evf7aex$l%EU3#0`cdkucs*&kLS3{;8^E=Uv37zPkCI9rn+SH>OnbV&` zcSyFJI_7^<(-5~dirzOPih-IFNfqkle?6c2sQ=H_-|r9J6drocV8R}BRhIN+n$%p$ zgoalT$yv2klmq?z*-(f=3dqh$kz0HKEcZrgiv+pw@>I0$_qHbnFly~PcQIlx> zm#dG|^Gt|(fk<+{nh8;Bh$Q!SFd^zrBFX)8Oo)1xNOJ!X6QVvLlH7mDgs6{+B=-+8 zA!-Scap|MKlB{q}FZ?ElMj&;1c09y9?N9uYeMBP9n@yYJ3qB zcJ>FDur4hok|o>Qnq|ygogJqCCz$yKauSJcQavce3c2S>KjaW2G@hKB>{{<6n?PpA=_Uf4bJ-yo@?*wJv>qR8* z5_{84lPG=m^?e%4{9j>y0a&en1NfWY|2I&of$o+6I@9Y_6QxG!K4s)5ftY?i%Twx5 zLwE*_>ud#;I@2SmdQ}ZDm|~ly1ycl;WMev7tybE#ceO&h)(V3Wn1Cs!cVjTc6w|vY zCJ8A@@1!`zDWq3OaSG{`G*X;G`gi9)``(*--@BGS$8g}B-E%~~^ZoeWxpSw!nfo4F znSG3@8~mo3$@IU|&3Kcm*GKZzooR zc-cl^n&~nN%~G?%JZTgw? z^XbW%j!ZSPB(pLznz0psU&@$VIonyz=6VL|^;zvRXJ+lM-NG9Pb`u?#-=8mL>$7J1 zaD@Uptnz94>nUdYx?!x|KHFEG6~fM1pnM)K1 zOiPW~&c) zupr?FJy_`w${QotOAhgQ?ox87w=|qB(JWabZ`o}1Qvq3*SOc@6lFzM|Mao*t?9T*b zW%XQ znF3+BtpZ{8cM62rYkesD=yeK&+3OVuv(E|0y#2ib zVfGISgxODcfp5rp?vo0H*(ZG{d%~v_2<4}JD0{+Z6bR)XgQ^VJjiOiy{-i)C*DDY~ z__GHK!@}%e6bQ3_RUpj%&4Yd2!Yr{D`#1f6*#D2x6M*&i@AQYUNG;&k2^GF6Xgh)x zYFM`azgdBZ<1HR+NaaceLirEpP@%^zxUx&!>XZTG4t>_ba;|?~wpbmkhzaR)K5Pj1 zc?H6u8>~aaBc*a%XSq}tYt%mlWTSXR2x*;`JBNP>$duUtj@UU;>{0hpAiO`(FjZ>`qPCUmq-2^CAehFes{GY$GBN#kA~Rd>+<2vK)6iL;|NK9iiB164 z;0$1_698*FMWJ$aO4!Ax73g|eSf^eZs3MNXC=kjnD%X{1l_HL>U`o-jUkn|Bl5c%8 zAxwCz*g}DDXfSlBQpgwU?H&Gs#Fe2Eu#-)Kw{gfPq}vsUGOrHn>CCb+?+BIE!M1KO z@!qLGn7zw~be_Y!t%db$6v{oKo=Za|Ag|}$9CEYwC=d=!3+oB9vsgXt;WhPyMh`77 zvA|#D%m$DK z{~NRZk7o1}KuXv$q$WVP%fiSz0oU&bl9Ln3h8+Enl zaPU?ILb+vR7D~1ZZKXgcZ}ZIBO%N;db_GJYwP)7fKH>Ou8wEmna1_3LMF##@1wwh8 z0ulI}=PmV7zD7OeITY)_Pb&~*9_E!9>n3v)2<71lgtuSw%8YfBuPYE{?}+M23zulJ zI~54!wvkyVSvR>WQufAr-`xs?Sz`Kcp%(-S{AL>eeEoN;|7a$<0npC>*QMMIfc1A= z6b)23hz9C(5B&?xvDh0M7xyX<%I!U~v2n430--!I3RQ2pBDNJrDGn4RpEY0WZkcTphBPEjDtu8zvA#bW!I0%7)53WV8RqcUNZdApkeVRm-~ z!tATPGGnoQjRIlzaRtKc9$uNT*iKa-%uZ7v%F*NdnyoSvkHV+DpLPl$9sGyI|R{XW01|U{{MpN zWaqkEPi~;zDTdn?18jx#74NlL_V zAFHfpYq{(Yl`G8dt3a6DPl2u*dNB4tvcCeIw+e*W0|4{$5`%D{0%3N48w47MQVFwf zuz?R?r|9~l3WV8%{4z<&hTFjkgz}BP*_tTxO$vmv%{NO*R^}lJgmUMmSxh6swneO1wy&ngRwiu#}o+Vs|Z$dNGs~4$8Ek_`K5sD?q(u|u#&6Q3xjsYC>G8A z1Z3mltqh6|JPTz8W<^iCfjU#AH(R7fHhYTC7n4b$*^%O*HQ~_P7!+mB4$HJkQRZb5 z`a8h`tV4x*mU{SbEgN=jw@fr_neaB@i2oXEHiCQ)xmQ?EDET&VI5eAZ#J@Z=n{dRx zcW5@@i2nptdvw_tWP)+`e{E@P|34ui`*$?6-aG%> z$9Wdii3fQBIY7-rFd@j-h0#a|@@qKcBWmBU%!C$rHc(b5$EsayNPgu*ncecZ2kE(( zm-%ZS%6-mjBiM*3eEID67!w}?OKrp;ZQ+9X0}&>P@X6t z+cck~KqwEhRf!_RHzacu2<0r#Y&Bo!^_;ChD2eI6QAg( za{pc4f3P1|mx{juVEyf*zaUh$!mN3U3PgoV3dGJ~p@6LIPF5hyjwldj5BJ*6ddpVS zBNPa;M=B6zXHuE;UR1U+pT2#1cLz}u=& zzCBe%G}*Bh(j|vGeiHCqHV91^OJ#ny0^!hco>{A8-K0x_P`<}EE0aCnt3W7;>A%xN zgxDz4Wn++OCO-ay@xHO||8)D&pb7_}LYvsM|H#fa)rAe8U- z&B_+|fC8Z`_-4JTpv+zcLfIF=VyurA9c;cMA*xbRAk2Qyc?)H%1JCu8u|B%SSIQvF z^OdrmWe>)VPbvz8xBVWBosd)&2<3-7Z)4qLz*EM0!iRmOtmpB*Qr7b$krGWtyS-@2 z9*mUn_WY=)Y@-trrmT5N3t7Ki>nrIAi7AP_*uN>w@jsfGo3<;yUHgM~{gR#t)}{Cx zfY#qV>91NF>g%RJ`6~?u&BquN6`qe!1xgXBkCSr1uBP@ZSqAwN3PfibBD21dwLn9G zQ2v2KzV-d2U#4ukClv^@!@gNkGKWr3Ae4XPkUKP=mW1k1VK7HQYV_D=$)4f>H30&D zK+_?4F6JVnC;=M^#9BP8K)dTT7kRK)uk)wdi#^z&GY7VRCkeyv9~l zV}VH~Y5iZHvipBK7q~Zp*EOF6lK1~7p-zJ~%JFQdg$hJ8=8$`}Je0jdw6SB+I9!2H z&J~dDhUO^{%2Nbnd(=}E2<6F9Rp2cf#Ul!IWkxWb7jvotp*$jTs2GdTV)W54e0=|Z zl%m9-xm+k&;BOOR<%^uDKq&ta!FW&m zrvjn;mj`39{kH<4{Er7?f&Z@pq5MJ=gm`k$7ZnKQS&`Xz{?FM8gz`(C*;uQ5S%FZV zO+)xA=dwS3WU-yC=QrY3WRdg$3Mm31^8|3{hxi;Z+$BM4G`;6 zk5}RRP!va0xS&AHz-b0W95V`p*MFqm4Ef^FIZK*(*J=DPh-O$?C z!gyk5`-b2kgS|t|YcaQr9}uw9K4Q@i_3USGUa7y&gGW=#(A?T|NbIfdW=e7Yce+rr zRs1UgvIp36-Ea%bWV7;l3Pkv7kwcUxDuQslfGh}A21O8#iM%DVA_&JS5DpCp$d=pV z6$s@S03=cZ_O+#xzX-HO z8UN=;4T~VNR-ZtA)k^d!F=Rs?KHD9!G&}G<42o3AeHDlxkLQr*QEp{JMQOwJLAw8w zZw_tk!PttrjRH~TwhF||v7HBF%k8)bHewEK@4=WuS6S#rv5hT%Xx>p#!l7k~5>>fJ zK-Nd^RUniPa~O^{^wCE->>X;3RKUk1^zZ+lLVK3WBlW>tex5icy2y4gx{nMX?_gxM z-fi{A8z56|$GWO8Cd!%f{9C~l0j3-_^p+Gpahi5kC&=pN(VxDt` zT7{pV?~_jE{H*ItWc4g_KWWSIx_YPfRCqxF91|C zi&AUT%jvw|ehF|zdR^-IwA~>rp|^o2(`~`Z%wozCFqGeW2^H;s|0~)O(!KXbD2~C0 zdi)O_br>3@&yzCg%OM?xwhdn(rF+FcPjiCbUoJ4_%MRK`VDC|Pm|cz8E`scZ#CAg| zA2TVA(c4P?Mm=lHj^vQ{?nbz+=rFV!`8k;l^PE}c&zEI?NJdb|GbREf!{%kxc#3qsnB0 z_R2=yRFY@wcM%o_;$*-An9+6~_KLek|5emmoY~YwDqLDHalDG zFlA$Qut9KpNOq{zVRklVDnZvZU3*5`r-O~T)H)RAbJAr`xX&q)Gp@|=2`QQc2aLI# zl-`u>DM|Ih{KivowRe2o8@~2gz}^NV?GC!&RO|ka!tf;hg?EnL*F#qbu-pO8rT zMym{=NZD-N|51cC^czo+PyWJh@P@xU3-G@V&;`@us0D)Q+0Pe2tKUQaN&s8$|Mz6= zyW8Q`7ZK`oi;3OJ^p;!i|7WXht@r;EhU^RT{{K!UdGxzge?3-xw+~4AI=CDE8_fSd zk9v2oyS16-(e{k$c)kKLE^ZPq+GLUPW(7j|EKNw*ZnyIP?R)46x%iu&|37MDi-{1S&XMrF?xQnVv%RBuAL%fy$|FX#ce>*i<^js{C z+uxx;%&kY!`1h6UEdFQ(LOHEz)@AWWFC^e>^_>g~hg$jn6rC3)|9?v2^S?a_bo+jH z8tDHwKMKeVbQwZjO%+7HaR1CCpJntDmJn^p~?0h}*3z1Z3NaD-{T{cL>O~ z6?ZBS%DWT@hhAR!e{{g*w+eq{tD-;zp(RMLc#@hMA1@y?ZD7j&D%BOrq>K6s17#Dk&B64h(%s^V_5Udb#rl6y(`@Vh-^&CEZVoVg zQuH?MH_2Q77n2HAas9ff0j|7QgS*}MAYL;L{? z!>_)GZyG&BL8dPUwZ8uoT_%eR$=3IOsQ0zL|ARreiT{`sj(?Zozlv`A7n*pUfAW7F zv@4$r*@=iwyl+KCjf(fJ ztD;7Y_pPgl#@tGfAE7ZVvJgPvt(%faSZOgp&|9`opkK@Q9;q&6ScZr8Vo zzE-#OtiDC;3y*m_&&;;@Ju_RPUPGVBY2B$$&+6*DJBMM`^RFD&)-9>h*aBIX%wvZL}<% znA7FDn{OkZyP4GJ!feVjKKC~W7S>l{U9OO<>egOjJA0#Kbf^`F9x!Z%)YsO-|?`YQZiFszngs;BEux4d;MmO4>mbHTf zaq6v-bsfX{4mWH|Z@SqtR_S8H7~Ap*5kqVMGeOnJ&1RiuyXxc+Pgg_?a$tWTHr3RP zOjqj^0meCGYS^;Qu`J;jtw&gww*@w5d>rw6g!knRp2=7=%5s17Y?AiV&6n^woRVX1 zKFIw(Vu%~#>{nOjnbl>KZQ_oe$=El_dOpOnR=wKD%CL!zEcc{5bM|7wiTYW@O1x>1 zd$MQk&N&m#&c<2pDU#8hhxx|Y{~zjEx8AIIU3h(j`aTC2}THr z_W^WY|6eG^8Ngz3&m3SEWdUZ2>*)i#>O146IwzxpQIv|9PG{IcAr6mfJ(N ztzYDslVkRF%cg6()bh4mW;^(YU|nyon%O&Y%=rNFjhhEnHF3(?E60@c1T%5UG9I&l zGwYHr)s~+R_s*$8j`Vc?$ZLORo;iPH_D{jW8cIChyK>B}VTAYP7J-o?dp+4+ZyDI6 zSRdQ@tppS6W1mxDeUr_W_kY&&G$Ge)x%G`Qdv~6>^|8JDU9zqplh^m29CPc#nCAyZ z!NISO=UWJ@E&P~c*wZ8ne#~-zVpgFXg+i)7Kh68OF2~&Z5cew)vo^tUg!(>*hW#Xa zaXyYa=&-({r`(xXb9yp^S-6}KXLJ|C+B&W1d67#d9K-G^SjZ(4 zjyHE>R-K8)|2^-1S^r;7^E6XE(aubQ>~bO4`7^A~q)@z)bI$bd4krBg~&~rM+ye=I3?h!Go3$q8sjCH|$k1%XfH_}}G z2LJz6p4mJM?2(?y{0;v9>pZh^V2=X3ppu&py_V7-ctcBd8J(IfNUVUDk zxiR@1ej7223Av9s*3zv~;^GwSdVl?&hP+Xq6-)U4BIWiwxd*t5I(?xF5cdF#!k?fI z*@y}0t-6od*r%%k>(YIUTu5lMzELgjo1|&rolm_JR+5Dq@hs zm@hCaoo+T^TXsI^^67{{4mSBh&*XeyS4Yh1$#>a_hHakBs2$g=&t`-ur%14dGa_d7 zWV<^%Vr+L-ZY>2WF=kn^Glg8c>hdt$R~sT`?r9h$)kwD7J&tp@K(Nr`8!6M*YDO~OS3|$3DOl*ojc|NxNfzXI zukRIDBlLt|yR%^2r471_vMz1O{FvxdEam@4M&~EbeT86je)j&y`5hw|*%ES4YZJ!` zX5_4$@!67^eV^F>O+CN8uuu%|0T2Q9^!~-7dk)>=JZ>Y0eA_KY~^UK`ltJk@=O`^Zz)M+|-ic22}_ zkAqzj821f$KI>N}1=fh?J1b&xzNP$sr8wJ0=6oD=-zve(xnoS&=TUrqyf0?$mSGLY z2{|(+?@M`@_l(r+`>aq4p_VNn=l+6V zzV0lcw)~=CzV5Vk{xZRQO_3zrcluIbq0TL#2L7^OVm|h(uLvgQV>WLY8Eoh`B*P>0 zwdxAy`v%D{-veI_OspNX$TflmU2vXX6U^&Uf?sV3Ec7rEoaZ{&L7f`>=oft^O)lb>7Rd{d^pLLFW~OJS!rCvwd~RRRhfRigeanL!71nM(_|CG3VLq^8j=A~3 zP7d?YnE6<=l>e{BnC9?IOv(B2i4l|WO-D?|uv3Gc#wM(y*iTZk@3YeO|4a2B88dg4E<$UAid1h-0*vM@h%Q}_njH}17 zzSF~*nLV?947ua1T#x0d_IDAGJ2RFOwfeOrmra;H3%&k#?;8uZQC}1_%wzHl_l|w1_`5u_H9qQw9|zVd``#zk_X@#Gy$Bx|n2VBIhuY~oddiTU_W_-Vv2A8MFwmgW1Rs0o+y|D*Hgm-GKM5tIIZ zO2nj(ot9@VQ1Kc_&A!iJqW-_Quv?v9xL$25ET>=pto!$W|3iy?6V2e?|GR!}iQY*q zSL&(6McV7jQMc`+eY^{ec?mu~hwk0%DWNcerkmG414td4Hr)JM^)BJgEPT{}1YaHK_k@ z*!q8^GWEUb?{8Im_V}Fl@BP;Scs~IDU#kCq68X66SDW4>`?&q>+z#^bLH{4`29R%{ zW;@&Li+FEf_l)~vgZ@9>88tV^Vw?O5$wG?i2Hxg|DzXm m=nekI`+q;6nBseU?*B#5c=vIwWP|=6^-Ko+KQf8F&%XdZfEs}S literal 0 HcmV?d00001 diff --git a/OL.NTX b/OL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..4ec244a88f9736c8c9270eca2f7f6e59d63972da GIT binary patch literal 2048 zcmZQ$U}RumVE_X`22LPt!XU-qALQa16z>=6s~sE?q~YV~=L+KJ7;8clj*_DxFd72G zA_RCDau{kE`WWUjY+yLZaEakD!xsitMlnWpMhiwy#wf;Y#u~<6#(9kE84oaCWPHT< znURG_lu3=roXLYJk|~R+nyH6rF4H=u{Y)2_9x{DmVrCX$R%JG0c4v-Y&Sb7)?q;6D zyq0+%^Lge6%%A`RmNpDVhL)yA777Z6AOR*M0V9wANEu9pF-QPZI>7`?Kmx2t0;V7V zHY5QvkN`W9fH_Ej14+OFBmgSuV1`q4z%J!Q5&*jt$R7ox JAuyCe000WWIZXfn literal 0 HcmV?d00001 diff --git a/OST.NTX b/OST.NTX new file mode 100644 index 0000000000000000000000000000000000000000..a06625e25fbcbb01eee3fa6dc502359bbfcefa20 GIT binary patch literal 2048 zcmZQ$U}RumVE_Xq1}Pvd#lXwpALQa16z>=6s~sE?q~YV~=L+KJ7;9<=1o^wfJNvu1 zY6mz5#e;a-AwiCQAZdspqvU7^jE2CF2>}5H3x+6$8isic2N)hPurR7IdN5`&_Astv zyukR0QH05iDT1krX%5pqrUy(+%qq-o%o)sG%xjoI9t4&g3`T~QrbZSD3WkQJ1_lbq z0HlHmNre$s6(ECPW*B2t!G)y41YLz8P?CWgNrfp^6`%qRW{VlR3I(7f0}rwa6C+f= zfNfz#Qelp+LIEfVEH@Fhm|GYbA%}(n*bFu#6&C0!6o8Tp>_{psv8v!hs4z4@R{^$# oA4!EFRuuwBDlp;&Yz7Ci3Uo6RfRYTHNGh<$97xqD7~CNM00E3%*Z=?k literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/TEMP.NTX b/TEMP.NTX new file mode 100644 index 0000000000000000000000000000000000000000..3a6a6e7391d9458223748e14ebc72f425fc47260 GIT binary patch literal 281600 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 out.txt +CALL f:\utility\RMAKE32 %sys%.RMK 3 +call f:\utility\RMAKE32 %sys%.RMK + + rem call brow out.txt + +rem PAUSE + +rem CD.. +IF NOT ERRORLEVEL 1 GOTO PHASE2 + +rem call brow out.txt + +rem BEEP not available on WIN2000 +rem BEEP +rem BEEP +ECHO Error????????????? +GOTO END + +:PHASE2 + +echo Link Step > out.txt + rem CALL LNK + + +rem no -aa switch USED TO CREATE A CONSOLE MODE VERSION for debugger and gtwin.lib for debug console mode +rem // test - debug for xp / winnt ( NO -aa switch for console debugger) +rem ( -ap switch for console debugger) +rem pause + rem %bcc%\BIN\ilink32.exe -Gn -Tpe -s -Iobj32 -L%bcc% @%sys%.lnk + f:\prod\bcc582\BIN\ilink32.exe -Gn -Tpe -s -Iobj32 -Lf:\prod\bcc582 @%sys%.lnk + + +rem pause + + + +rem gtgui - no debug - production +rem // prod - no debug for xp / winnt + + REM %bcc%\BIN\ilink32.exe -Gn -aa -Tpe -s -Iobj32 -L%bcc% @%sys%.lnk +rem f:\prod\bcc582\BIN\ilink32.exe -Gn -aa -Tpe -s -Iobj32 -Lf:\prod\bcc582 @%sys%.lnk + + +ECHO Done! + +:END + + + + diff --git a/mh64.bat b/mh64.bat new file mode 100644 index 0000000..a4660da --- /dev/null +++ b/mh64.bat @@ -0,0 +1,86 @@ +@echo oFF + +@set oldpath=%path% +@set oldinclude=%include% +@set oldlib=%lib% +@set oldlibpath=%libpath% + +rem rem Visual C++ 2017 - as of 1/6/2019 +if exist "%ProgramFiles%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" call "%ProgramFiles%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 +if exist "%ProgramFiles%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" GOTO CONTINUEPROCESS + +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" GOTO CONTINUEPROCESS + +rem rem Visual C++ 2017 - as of 3/14/2019 +if exist "%ProgramFiles%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" call "%ProgramFiles%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 +if exist "%ProgramFiles%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" GOTO CONTINUEPROCESS + +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" GOTO CONTINUEPROCESS + +rem ********************* + +REM Visual C++ 2015 +if exist "%ProgramFiles%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" call "%ProgramFiles%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 +if exist "%ProgramFiles%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" GOTO CONTINUEPROCESS + +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" call "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" GOTO CONTINUEPROCESS + + +:CONTINUEPROCESS + + +set sys=CGW64VC + +rem ************************************************************** +rem make resource vcCGW.RES for MicroSoft / VC +rem ************************************************************** + + + + +rem ************************************************************** +rem harbour v3.2 with fwh64-1903 16.05 and MicroSoft / VC +rem ************************************************************** + + +echo Compile step > out.txt + +DEL CGW64.EXE + + +:MAKE + +CALL f:\utility\RMAKE32 %sys%.RMK 3 + + + +IF NOT ERRORLEVEL 1 GOTO PHASE2 + + +ECHO Error????????????? +GOTO END + +:PHASE2 + +echo Link Step > out.txt + +link @%sys%.lnk /nologo /subsystem:windows /force:multiple /OUT:CGW64.EXE + + +IF NOT EXIST CGW64.EXE GOTO MAKE + +ECHO Done! + +:END + + + +@set path=%oldpath% +@set include=%oldinclude% +@set lib=%oldlib% +@set libpath=%oldlibpath% + +

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 literal 0 HcmV?d00001 diff --git a/CGW1CPO.NTX b/CGW1CPO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..11100622611b0a9e98caeed78334cf1765ab5aa6 GIT binary patch literal 2048 zcmZQ$U}RumVE_YD23;U6z`()a92y)F@9CnTtq>68?-K9q@8Sw%JBEb7nEnAF@nMcW zp{@{}qvU7^jE2Ba3;{L<6^2NLK8C{#KNxfwlNhHno?&EUGGoeSTEKLbiHq5uxr7$pb`Nj24n#X1XNj&CMF;@fB-`yQv(B_3a4OyAIBhIv7%sPU}T`+6r=zV zfM^D30$GPglQC9Jpb`v^CKIfhSn+A{^Y>E-4srBzaSU=%2==B3*uMtr*NIaPUxI= z&N~;K-<-dkL+-L0yJy@V-Jjjx-M`(1+GOd4>z74&=^Wh#a?aT5paSnBP51W$utk%Mlu zE#oxkj={|w^afg|33MQ#%_L;$HIuZb5n;IG8@8gf?-% z1(=}<)d>S0;Gj2%W0)=~Fm-s413DHDagb&zie)R+8rsBi70_v4B6ygCegqwu3qhR& z817^x*J;*6@Q4Lq+jOv2I2f)ZzKSJ`8TR0DFw&VXhbjpr0>1#dDrv*R`Qb6y?N5dq z(O%bn*FUcD$-Liv2s-CN3m|h2$F$r-79~MP=6V|+e~SaUyxSafpdOLTVSQl_9S$I) zppaNI1d0PFV0v9maQ!Ey9V?*(Diog=lH77CXRD3P|!iQ-Wo^*83%Cx!fQ4F zG@9P#X2bKWA=Tu7PMB2-AQNVd0~%86b}$R6M>(J&^_T^aklNsYhSVkpG^8HqfQHl) zRbUcQM>wD%1?_uY`(6J}!5vEDZ8C70b4NL#IrlUNH0N;nOm1P#Ib1#^&>E;XtoH}w z@r zbvu}a)EgYokb2VsNJv5Zp4WcY{~5SLqe)6hbM9>pXwJP;1tvN7E(bK{-s6C7#@@F8 zvKjk;0~%5vazI1sYynt9>LU(lNPWx!opYa90GV^2+CVX+KI4Ff)aM+~kotlH8d6_! zKtt*r2Q;LYEBM4XJPKU=~u}aX>@rdk$zw{lEbYsq-Arkh%)MYSUX= z+wi;%Zv!{=(WvhyVYGWLb~vCD2HN+$7WR4mzXI-1dPWrL`;o?%r{36IHE(FxRL{UyuaQ8bOYr3YbIfcjvuk*`*58c6Y^hE@;2 zQvuRK14<|jCIC+>C=)y*pjhlrZ0V3KG1u_#7RBZ>xg?U|SWSME2`GT^fJ%qjs&l?6$qYD-5LufR?^ z_MTZ)LfSo$bQJ+6WI!*#Y8p~Zv3dqz3Ro`}Iy`=73ne*Y)g(p`&`lSUr;shB{GCTr+LSWiJpDc09ODW(Ld z)(d@DOqac9Hpl>+1vd;(%csp^Bbk@S`DUXS7M5pXiX=eYE@E)F<5<`@18^*CqJc)w zrWt@KrV7B}P9t=)48RndYoIc=$N)^SrGoMdY^$v@0H1v800Z;wVhlPFQ%uVMOffwG z#26dkT%XU-Ks~sP0@vp=HBgFK0$8lVuNLYmZCCNZmNM|<(2{D zN^}biv=W^fKt|Wi6u9WRxd0Yj*F>0>&#_hveswib00y5Lrhrt#y+-=| zUx!zU&*tmK02PK>P6{CVX|e|Dr>z6Xe%eX{_0xI*WIwI1!1dD<0j!@kKilGWW% z166mU0J88zfh&At0j%(G7J6w+(;%r83%J-_DTY?D+5@e-vH)0nxD>0z;8TnbP_8%J z91K~l8lYB6%IQ#66JqdLttMbzekjH2G58c~1h9KSR(Pkaz(6a7xF&(MS4hE{}#ao|GjLOg z@{Hm548Rm81b|Qy&KOSAKs|Vp0@vp!YoHXT2!N>M*8htch%<&$5w?ZRpj`i-#z4&G zr^n!DyE6jF+5Aim^x~W)fK9db{;;o+e*e$0B{w^;MdbSbTn>CTKQDls&Ch2bX7dX) zP>Wp1fzRd_1(5IN#WDDI^O6Am-AodD&s?g&&E}U0V6*w<8mPKg1dy}&l?q%)yh;F@ zH?L+OX7g(ZI_wCQyZLJ+4A_IzBJLQj3n1I-`WSp$-4H--+HaH)%IJZ`N7gw;F$RAy zP!hn-F?wV0DarxllUD-BbBuX0_^kQ_uyc%R3_is)2I7aB=^AJeH6wsL)Y?V^9cs-C zAeUXX)rWnJ^!wi-D#b=;=EUGnCAJSB zH;FrFaQo%}vIBS0KpnVq0NH`NC~)iMT?Me#-3=jQ(LPrLRW~0%7T&GE6 zzoL*QZO_HvTX%T?TR3FpX4>Z!*d#ERZ?gY1?GJ4>j&}#ao|9fo7uAi!D(p|S_sCC#^nR^8^>jNI{6EK)IEB2TeQrw>b zu-h{aXrK;!FhDKO$HGGlO7^$Ep@Zm$WANSa2!nDlAI{AmjlrjQj6n)>upcCk$KX>u z5g;wV8{ktci@~ROQUIF;pNhe!c$x!#D^;WZc!q&kF+3Z<1?pNcvG>e#8Yrvf3R;xn zc?1mY_MPp5V@W!dd?A2)X_Er%jLnN0iU==hsC7b$mpSkc171C|R_|m$m%V4c7C=V6uQPziSF>Zi z15$h=1F(#5YA9kE-%{XS^LH7DSo!T3d{p`l0}(5~8-q{ry#VsW;QJYn+I#j})}fJz zUy0dY$2t;#A8P1C_z?r~1=o)?P!Ik@1NGof6}Z9hGYyp0&oxk1zmNbypT^ZMHBeUe z{;;pLNBH~SU)z%1`wz=XTU+h~Hbt3N1c zQC5G{Kv})7fwKBjfMz%DsSAS`r~jM*7<~Ssz;)nX6}YzgTL3==ccu28{W^Q7bv@8b z`ws;zO7Tw(l;U3qxMPrO+JDF3UqO?D!hH(1_{hcJQ?vz;Tk!S(atl5t2A|am0@w;} zYz#idiUH(?^Cf^{+ME-A!SS*N+AF;hKyK|`)j(Uj*8<4h)$0n}?&=KzY^zEgW8I)PiV`c!&o2|nJKwQY(*7vC|!YJPQlhGM~e zTtzb!elal7mMrPbKz1eUdSIhBmY*Y*4Tt3?*iYF=r#NUnMZB#F$x-6&*yo zI1M9osxfy%3Oa9MQ`eTpd=kM|*A8iX!0E>PDgb1K^W&hIWxvgbGHBjpS literal 0 HcmV?d00001 diff --git a/CGW1DD.NTX b/CGW1DD.NTX new file mode 100644 index 0000000000000000000000000000000000000000..3254131146241975250d400fcdf8c3d5a8f63b0d GIT binary patch literal 4096 zcmeIzS8@|U5CG8b8L$aXU;F_VARK^j0Kx$X2Ou1P zZ~(#q2p0e@K$z~H-g3E$qKXep!A{jm{c1M!^vv$G0RnUYw{B?n|3xUkM735qcQUG1 zq$B^$E09;cnNReBYc7H(1isY!cjbqXYnFl!5er7AK(*wfp72w ze#URuY5L5dDVnNjnG5E!xo&Qo`{uEEZeE-B=9BqqI&7~Uup@TLHtl(P$zHR!>^=L) zKC`dvJ4?mf<&W}Yb2utH;u>Yl+^n2tmXvAaBmQLZwGHlFq`jw^qk*M_Iii%4y93J+ z_ij~|nAUx+C@|CCP$P9yFAZznp^^V;{jl#s+a%nL6UU!0~bB!obP|b7$bB zBzaU>f&>1bO4jAtJ<6){5$wxYChpCc5VtEOjRi`n z#(t$t%BsLvPF|^$BoAh+`UqAlrOso@giA+DfO3vgCaor75;-5iVt+7YL|w{?^ARjl z%AJ=eWtlBi%2HV$cuI0!r<9xzW#pXum2zjNY*7RoGV&}e51f`-tx!s>b_AxS)JME8 z(}+?TQBixR9Q7VnN>-gpSyyz%&zpnUZ}YF;|Jh%R-+li#`m|_N4O#KWlyQynJ))F} z*`$ N}w=*353qfy^C8pUwagvNlbPo+uVmiByr20L^Ht^tpu%VrjE2By2+%MD E02Xa4?f?J) literal 0 HcmV?d00001 diff --git a/CGW1GL.NTX b/CGW1GL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..ca8f966c32434614010ac37c27030f7fa23a17a4 GIT binary patch literal 2048 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 Tw6hh(9BtP3znppggWtaa8c2*W literal 0 HcmV?d00001 diff --git a/CGW1IM.NTX b/CGW1IM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..79d3db8ff8ac98fecbbc894a98c6dcec5c469b44 GIT binary patch literal 2048 zcmZQ$U}RumVE_Yu26iBA#URTN92xBA=<5m*9wkRZU^E1VZ3t8_v@=X&Sjw=4;V{D` zhKCFv82&TxG0HOPFj_NuF-9_GFqSj6F-~P%!nm375aUJ02aN9-|1t71$uMa%SuuGs zMKGl^l`*w4O<`Khw2A2;(*>scOz)WfGVw4=GixzhGJ7zGGp8|^GPf{KW?sa+k@*1g TdFFe}!!|faJvJHwLns6QCzK-M literal 0 HcmV?d00001 diff --git a/CGW1IPO.NTX b/CGW1IPO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..9b66067749a82658cf661e9df77612c57774b775 GIT binary patch literal 6144 zcmeI#Np}oU7zW^5RWVONL=ZHBpwZRc)q^q7F+@7uAu$gz#5@!8Ob~O-LClsG78aHk z78aHk7Jh(*g&$y{s=MC$-bEI2aL2tk`ValLo@W#pexuB&GqxM2j27dq z@zMBdIECtNfBEQgtXDf`pF-JjvC4F^+~>3ZR5~o4tV~tZX3Tl0^Efk5Q@$cKKXWkU z!A!Zg8!RZ+0~VI&^@Lesyr84SUxNyHV_t; z*BAt|#0JA6a<6l&JM#-hW!w-L)wvKxbsp+kC?NM1!Klu|U{vSfu#nt40!BHCVO0B( zu!yYhC>Z4!4Wsq&!Dv0kxE7}M7z?8u<6yKNB{0e{9!5DPz-T=t!e~88VNuC82}bKN z8Ads#xMoofKaBdyrVd?Qz5l1#vvGRRq8d(zQ4Iqys-X#^8U|t13n3WQFbt!fwp@!) z4I?m9)+7p}o{qsNM;u1y$qX3v^h_A#m<6L8vtiWJb6|0q-(1(Cl%otrJzWl?9P?mw z#w1|09u+Xk;T*QkT1F$XuNS~5$3ht8SOlYL%ITphxM-`0rW)em@s$sMqDH!EQ z!|05ufzjSv0;3#DVU(lRwK$!Xbuj9yWiVQg7#RZ0gX})%$;q zJsYQI;Fel zVARuFU@@uxRv6{j=9)>pupLIdumeW(+XxNH3R`%fJ(^&Y;}VS4<1&nL*wmq`xQjpkH`}vu_GXxB zcojx9yauBhKK4xZ`gIu9^@(RP?kOxTcEdB-!#7>CsQzu9$-TE=v`3zKCgX0ysNbG@ zCgWOQw01Aru{$t2CtkK=uV9wE#$C@O?`v2@#@+Kw#=U{jdffL+{>OL#qjTpWjP~mz z*COO&g zFuY*+!oa}D!zjV1!f3!~!|1^n!kECA!&t%C!Z?9(4&w^OEsO^k&oJI#e8TvF@ed;h zlL(UnlMa&wlM7P-Qw&oEQwdW8QxDS&rX@@pnD#K8V7kKefawj>4<;670cIIy4Q3N& z2WB7U2<8;#0_Ga#4(2J$3z*k1?_fT{e1Z86^9$xL%%GqKmP!o9dL{|oJQSD2WB0!WkzBpT%J7X=pw ziGm6xplG-sTro(L6^NaETpfc@MA?9%zMeil3T~c$p1~eKIiLUo2N3(YhJy<;h;oo9 gClLGlxS)vwOF@Qk56=*|6BK{~qhK@yhIt480AKVlhX4Qo literal 0 HcmV?d00001 diff --git a/CGW1MI.NTX b/CGW1MI.NTX new file mode 100644 index 0000000000000000000000000000000000000000..215e08b01beba156e327cc784584ccd9e6b2d8fe GIT binary patch literal 2048 zcmZQ$U}RumVE_Yh27Vx|#vsfP;20F*7wQWU9wkRZU^E1VX$WvK1TdsC)GN%;d$C$W+19&$NtbFVhvK*Gx>z zlFSCo?#yw_rOZ9dit5=1}MV73dHU{j={ljQ3a4NI}rQ1hAV&yE~pGhm=lQoeOwS~6%;_iY(N|w f5EKAY3X}&4a{zIOYcP^1SQsQV3PwXMr{t?qR7DUxh#&}i5J3<;h#+_q zLGS`jb~P=T9zdjlX({u~f0(v_0nEVUY{M45`_P6oGN}H*=c{UwrI`Gdr z(1TsLggbbISNMPq+hf=4o;|TQ_Q|^ZfZy;3{>K1(e}nurJCJ zsW3ispB7rIgGSOZ!a|!AN@OwFJ5$g?OB5^0g>aL>P+p{^e-SA^9H)?xM->z6 zX&EKbd9KO;w7QiV$mrzC*;r4jwNR0`fEHS#5Up+&p<@+hnKQ-e{Epk%_z=m-u6qxP zl?;t@jCxo{!8r)~EBH~+W^U9#BwU9=w7MQbT2<#D=q>0{2yMKp(n2UpP5PTPCQlQe atAUL6#xhSKns^(bTxOMMfonAxPg$=!_BYmas^rL>& zK9G6p?I7rwNp(YK>EtQhFJ)@O?(v9Dduq?qiPRkC#ldSABt40Lwf@>FY28-j#ROoH zdZ)9?1{>zPE-CZ%_h3oOCO3#4BzYeB6^F(4U6zzhu1m@`T9PzNBEJ#=n4vz3Lg&V= zhHo@0Df69^lufQl>P`za0a&4q?V0g^g^@K&vMDL^U6qvW>pvftX6bk=O=n4>q|A4X QXl@;o@-K&ARewm}2hs&?;Q#;t literal 0 HcmV?d00001 diff --git a/CGW1ML.NTX b/CGW1ML.NTX new file mode 100644 index 0000000000000000000000000000000000000000..6525fbfcbc098dc7b987bb99504491139926cce3 GIT binary patch literal 2048 zcmZQ$U}RumVE_X@1~wpV#~{z(p~?irp8h_L3JM?|usmY$c2)oa5D!!|`FQ%d1cP}X6EGx3!Dt9j8Ug^H^(too literal 0 HcmV?d00001 diff --git a/CGW1MP.NTX b/CGW1MP.NTX new file mode 100644 index 0000000000000000000000000000000000000000..6476960f35202df8ee518352c4d720a0871d7c89 GIT binary patch literal 51200 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 literal 0 HcmV?d00001 diff --git a/CGW1OL.NTX b/CGW1OL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..8f6107e6950eeee84da5f05c47ecc6501b17381f GIT binary patch literal 10240 zcmeI&ca)UX9metdz5}R;3JQpbu=J|V?99&Y+6xFMMHf)Of?X;04j2HiIbl5~|Li&B?3{zTAMd^IbAR{Vcix?0P{=}<6!aPv zwu=95gwbJf&+Iups}?O=*fz6m$qx0^;pQ(AAwFH)td?0}L7k3^eE{V30wxfGy*n_G-1--b`01 z?sNh!J2*ju7F!!A#}EVM*d{@eIL2XNW8 z1l^1=-auna0O&H&KrM>5v!ck|v4w(71}Nba19h2dpf1x4RI%cXPlLuWw8v%`XphZo zL9JR#>$0x3*aBT;7A@+j#jXZwu^YhJ?rxwKRRbk0PEib2tFn|uGeBM9&%M6-`urEQ zR5(_zsHK2?R@73!Vs$2{u_d~I_Eg4hfU4~QaFsm`RFl07RK|S_wBUOK1lt!N*nS2Y zbpHhH?0`iEy2=3n(GN7x7_$wOV~&9~-a!W1cykSkVug7IMX|zsgQ8er`M;r7?5J># zf$q!a8YtL#2Aa$H21+^qnOj4ZgW;`NFdji1OJuyKihv*~&bvfBUbv*^(RGkX2tyUXoj5P)t zV=X|Abq4Bk8o)j~-9RnQ0N6BV8mPrt2Dq!K z1`2j9zz(|3KwYjkP?y&jXc=A$u%%vSpfO%=pfTQHpfTPEP>(kmXpA=l6zDAmYVlTp zioFeBZQpL7E;kq`Sp2!yS6`q1n_`mU{CCIr+TJ%C=sn^c06X!WEr`9++x;y7>wBw# zN^l#%>fH{o6z?)nmv;j!#T^D}ai@XmdY6F~{BD57dJn)2;T{7Gdar>7y$|3-+;5;R z?=?`D2LQIjg9hsI5I{{IHc*TA8EDY=8)$MLNKih8eGp(7K4hRlKb)X^9{PxZT71+% zmwg0a2%dmY+7zqs!+2*7h?1EB9Fg z<@kJpIy?Cb2^y^27ZVh}AJ*c3hc6juj3*2tv9=`)f`h0@&q2LNoC z3cy@qj9y=Teg3y3Ts&r)&sGUKDdS*(s%;HWlOX^z-UeXC+X5Ws?Esc@sDW|}16bef z6O@m)I{*Y54zQdf0FsUbSgaiZqK^WIz7s(7(E!1APEbA(j{yj_3qY{30Kvuq1Zx8b zHXb0@1b|=@0ctu4AnD{5G|D^X6o8~t0g_GwNID%L=?s9RGXav$0!X?mK+@d+lJ1_M zybV_YlGXr{wgV)s10-z#B<%o5+5||thk>?bXM*w(stX`Tw}HCsZ=gG7uZKVWk8yqc z`Tu@|i&azFy#T7VuYp?Z4N%5?4AkNPfVv)Npcb+8hF~M-~9gb|Jvz76HsE~f&_Wwn92tO1zZS_8E>9bmR+Bq$#{&IFj;SpbuJsq;TJZ0cLR zO@IHlsc#DZ*YE$%Aslr*7oe`^0hIB4fHGbHP_+vIigZze@}XiqKutCP3_3VgDgI(o zEkB#xeAf4DrqAZxd=AmLRP`>Fp)EoAa5LUOCt?CXmx%^yG08x8s>uNRV~T;gOf^uK zX$HEvO*hbQ)iVtA3Bk-3Y+m30ZPAzS{{!N$KNKk*_j>WQ{Ba42F9d2~NC-D3C_W)< zgrOn+rG)g6L0s@=7#{x)L2JL)TOX2)3SrN509wBhj|t&F-&We<0R6B23iMatzbo)B Ds-Re; literal 0 HcmV?d00001 diff --git a/CGW1OM.NTX b/CGW1OM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..5554a518606d03026fa1218e9ed35fa2502a28e9 GIT binary patch literal 7168 zcmeI$f0R^X9LMqJ-n(rZD@j6r6e{_Z*_qjyU9!UFN7z^*MEMm$euWScLP!W9A%uhw z5<*A_At8i>5b`U8c%Jw3e9qB1bNa(Mo$X}ikDAxH&)j+6@7+6hXG=|F%zB1LQ&VdH zuQ9DnxBA*H^}Xu4@9j4f|1D0SIDu7i0ySok8D>VAab}X4W@edrW|3KH%A;0MhbR}- zM)gtes9!WN8XAp^#zqsPsnN`6ZnQ935|za*$OdfOtqeA|4Y@h^NFe z;yLkxcyU~kG*8+j9g|K;*Q7_%C+VLIPKGC=lkv&qWO_0?nV-0!+D{;pPNh=moKq}S zJGljJTb6AlLAgq|t&x;>a-UspWvJob?52{MpCuR+a zmZlP~TQjJdmCYo!ttHXY+^Zs0VV{__rHoSxiOzK-I$KKYb6tr}_W^E?y&}astRGZC zODidDpO_6K-eE(DeQqSN&y6Ma**YjqbsLF&ZX$6En@Ut~CNZ}9KmaSISF+ex%+FVWITqGbn(mKuo`i-M1p;rj1v%iQt$ zYiB2kS?nw^i(MpUQ7bWvE)uiYRbm#qNz7t*iSx3D#ChrJWpnHkv!_JMUJ@YJOa-c*@4~dq8g8Y?xu*B;QkyzPN zqVrIR&clK-%%xXQmg?R?IaVGnvF(VUJo`K{sETbz1^M%Sw8ZiCk?1@|;`ol0*ynK) z@7`Bpg2#Jh{MkG~;&mrVwDgmB-AO@y@+Vu_U1Ta~IYpx7REY_mCUM^TOT6FdL1|uh zhQ!J8EjLND+$_;DN}}Z!iI&k4Ew@Uv+$Pa- zyF|;Fpgb*iNVME3(Q=nW%UFq)yCqugk!ZPBqGg;!%Y70pM5-s0Kw0tMg^1VdMB8iqCBwBt9@^^usBwBu!X!%8=WwAuduM#c4NwoYf z(XvFM^K|t?Ea}K@oBIsTrJB^x2P30fs%&4 x|CboEqdhqO-ce=Bj5*JWZv$CVZp_m`)p^s*n19_BTCAvv6!%-4!2f3g{{YjQx{Uw; literal 0 HcmV?d00001 diff --git a/CGW1OMI.NTX b/CGW1OMI.NTX new file mode 100644 index 0000000000000000000000000000000000000000..8f719c7281b8e11c43054cb5777697628c64958b GIT binary patch literal 5120 zcmeI!XHpbF6bJAQfH|Omih(fzDu$h%VS@<+2q=Q0C}6;>1halIoWO7b!wC#0Fr2_} z0>cf|1K9nh|JJk1{ot3iikhh+?610Czkc(!XR3r0Vy>X8T1+#4V^J^q`rAADM|ubL z1ua2OcW;ONHyM-uPAiaBVDeNT78By0cqE>QSK^)cB)*BCqEgn$W?7Kka#)VbyYiuY zDqqUC@}vAJf5-||tD00^b*UjWrtYW*>WO-x-lz}ii~6p#uF;J;r#tna9@V$?ef?NJ z*RS<^{aM?pMdl}rGns5A2to@ngRF&C26nW_F|eaWo`D@L3JmOMd#2GU`6vhi3(5zZ zjLjn-yAc(DRtJ?nRQWK)hpB*^i($`GS|#sbx(_panCYO9byH^fFx!VYKG^fzE?X$N z7}Y+^^I^V&V(6yS_)zOZ9RNjM06+;BCJ=@gu?T>w*8@ai67vwdpIl?-UgDh4#A5nyf<6G?2NE!0+=zYvf*u4Q#$fSqDi{<#FA-!(mN zzl&J#00OllelK=n! literal 0 HcmV?d00001 diff --git a/CGW1OO.NTX b/CGW1OO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..6c7901be02658a1fb2088a35b573fe71bf8ca217 GIT binary patch literal 60416 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 literal 0 HcmV?d00001 diff --git a/CGW1OPT.NTX b/CGW1OPT.NTX new file mode 100644 index 0000000000000000000000000000000000000000..29ebbb9f9c2adcc71f9cd943d996e52d0aa9797d GIT binary patch literal 2048 zcmeIyO-chX6ae6tOs&85w|3E05D{fuWRkH?m$j{0&`wD!h@07pM-WdS9zi^Tcm(kX z9zi^UC-A+Q7SncQ*2)AjA>`xby%(4wFn|KYV+*RdR-pu;X|+w%y*L-H=nu^9S*P2k z?Y`ams7I1pL^n70kPirZKJxDBOic+Rn&J?Se zV#N{)GgWq?0uN!y61C=ml>MfmC4nUHKbcfp$7%x^jD-*+xFuAopti*w!x%bM(64wT zd|zT`?SY3-!KtK_s+N+6M`C>>(lU+3+EDlu0K{cLLHrS#zF`@gjq}I$!cRUHz}rGAHlyI-*W7E AC;$Ke literal 0 HcmV?d00001 diff --git a/CGW1OPW.NTX b/CGW1OPW.NTX new file mode 100644 index 0000000000000000000000000000000000000000..7d49e9d638d4ec4f871fe73e74fd49ecad89d528 GIT binary patch literal 2048 zcmeIuF%H8Z3=63y~NlM?+vV1cqe@urf3-^fAm~SjDh| z;TXdehDQt^82&NvFiJ6MFq$#CFa|LuFy=AVFm^G{U|hzyh4B#M1;%@fZy0|uaxjT8 zsW2HaIWYM##V}RZa(GVad1OQ*%D)RsU literal 0 HcmV?d00001 diff --git a/CGW1OST.NTX b/CGW1OST.NTX new file mode 100644 index 0000000000000000000000000000000000000000..cb31ada5afdfa1dc1d9051d97ceb8a8b18903fe0 GIT binary patch literal 13312 zcmeI2cYI`36~}K9M4Ae+uGmLiH4Cf0Hj^2w*(5FjHi?t$f+$ACioGEs3MvZr-a9HN z-QKV_R8&+%?7bII5I-OP@Z&k}-E-gXoHujBp-z@bPXIEzyXXp6)bbpn9rmrjg z=>>nz?8@TumC~r#Ilny9k|WKM zEKBJ>CjVy0g~gSl1#A^a{sqX)%FK|w%8*KC8_B-{nOm7Tl2;p2$?PC`jVGt3$oFp2 z4c_n<<@>cl5)&u?31l|IkxfXtKa}s+S#o)%A5Ksn{R_x^>8NE9SAMF<|J{?_;U1+` zHvfSnCw+cpXOLUj>B&tMnReTQe3x?wayLWL<|sq*AVaDgk)G;cnVW%Z)KZS*Eexq- zQgzodZw_RmmI@?qX-FkAXTK}Ct_QI7TW|7}SD zRcXoE zB!}90Mr9otlHyge%efb<=G2rW$@g%A+EWlX(y^ZY?~w+{M5n5)?KvN9%)IGsd{xMkcEws>eU5HqRen*NswC$vi^#7wt1NT2$Q}z{Bw#wP@KuZ4yM^$_ugJeK_gjLQSDAWMaYS>(wU-N$00U5~P&+l}Aqo zGTzls0g?(k_)y9WKM~}f3S`mYnGQ#=g~_J@+3r+3g}|z8J{`zTVaT9?Wu5@!l;3>> znQBrzLr6M5zDqh0$>=@BXBtx7t5Z=rNl0Fwyhou-RgRtoWMkD)Rd=!_hxXC4J(=@N zvG+cdb^=E_*3VAmhHj!;?KaKVC8KwB*nk{VpK0Odk07DpVbKrjV46xb}Bja;WzA0NGeqmG<{q z5@o8qp9N(6YVK@HqD(cX-X|p46!-o8mPDDVlFt#6JMMqJ|36Qx;q^ai&G|^$%2pm; zAS7Ic`pP0D@{J&OA(By<7gc0=n>^lE9}sfQ_dB0&(Dte#KPDtcKDxGi+>%4<^%I^f_p4Ev zpS0vqnV%AptWWI~jq>PXA=jKfpSI*s?VkZMK7BrGNtCIk&*y-QPoK|Q5@o9CL*Piq zde;9hk_N6qzOIW`%$F>QcB}sXGLTt#sOm(@#p{Fwj@Sg$-GQRo>O)YtnBTG+xvf&M_Jk?$o&>cTd!3-J^6bfc}iMRWcFC* z?}ViJG0da1B>(8i4*MP&UnVbl^e0PVHp$M~_l@U&`;6NEdpLI+iZ8{me*aGv9{#M? z>b;!X(~~`!?wE=CZJGU?>k3KP?bs(V^t%6JW?uzzlXH*qWOz;?f8@`4 zy*kLb13g)AZP~YFOFOA(Gky*8wVn)Bh#u84Th5*9$sYH=U4?3Li*sKflJ`>ucS~cU fiP3J-xyviEn!L9E>8)NrCASf_aco53dPLyAGf&7g literal 0 HcmV?d00001 diff --git a/CGW1OSW.NTX b/CGW1OSW.NTX new file mode 100644 index 0000000000000000000000000000000000000000..9d4b294ae59930f1537c04dfbfec4690061a676b GIT binary patch literal 2048 zcmeIuF%H5o3bcQa)C<8;Mg84 z`yD~R0pF)^-hPP_CTn`@$JbL`)Uw*;b< literal 0 HcmV?d00001 diff --git a/CGW1PA.NTX b/CGW1PA.NTX new file mode 100644 index 0000000000000000000000000000000000000000..29c7886a510537ac859dd94a550a3fdc9e251aed GIT binary patch literal 2048 zcmeH{&25B0427TVWb>cpo(m;#${DmwqD?j|V#(i)5-5QZD1j0vff6Wz61IfcL!z`0 zMOb<>{ybxA^bWHE0VnVg;9U26+~FaaE6ch#usHCa9ay7AgBBfn3>Y!t2v9&FMHEv` z71h*GOC9wz&`1*<2^?_95yzZ!#WgqFa>qRnJo3axh6EByB(daDNiB`E(n&9ajACA{ zRY^F9@tJX!`GWDaD&7CGeNQgkmUcl?*btXyeuOa_?{>~Qj4xDAN#?A)N} zm&%!Ye|-I%`9?WU{P<8)Tp7Ef&|}Z`D;E0?|3po3syb};<TCvHFkgaQZ!5DFj^Kq!Dv z0HFXv13&|W{gMnlfd9-&`+k)6@aq5pY9MS$sONVM(qQC+MZ-0%sK5HGR-jsezgdA4 zY`_j2zzJNy4LraLyu%l?Vj4$q5@&G%S8yG-aUYNI9Ix>npYaVpv4sX{m~v#(JT222 zZP6Yb(HULQ9X-)2eNaNA#E_T}1yL4DVpVL4U2!N*#ih6vk3v;5$&t}@-7I*DZ84|4 zkR8nI?`UVtc(jW-C5wTkX`DfyV#%135qp?MW?a`Jb}NpJX5-0?ig{@joq#h)DB8Xj zxZ$}2iY3S9tvQ1x4%0H+cx{7X!7InCW%3tQ*utF2`=;e+oIx{(?MTZHq+&lu(UwNM zR@J~W8PP$#Oy4az+{0OT6-&dnEGJys%3ZSHRsL7q*v!hgs2GHMaRzlEUB4(bMGE;d WImHb8yceI_t{5%mtlIup1-=2Yeo>+T literal 0 HcmV?d00001 diff --git a/CGW1PE.NTX b/CGW1PE.NTX new file mode 100644 index 0000000000000000000000000000000000000000..5956fc6f90e4e4850dda7208ecd77501a645173c GIT binary patch literal 11264 zcmeI&`F|uu6#(#>M3F-jK?N6&GVDSSW|>LC5)gx(o=&FOp6Q{xXG1{50|dkqybmsK zQB*F$1LeLHJW&)>5b*%yR#ZIsfq%f?@xAJ*e$`X;qMQ7*e$t;$Hv8H7eyXdh-m9vv z-kn54h)JQY{lvcTdxO|rgh6p)n06w0kW2?foc2qw{^xoRtoOkGRS#?sv*LJhmbg;f zBc2w!Hkyq=sT?1W|b zX}4OfPIu65whx(-(XoS|--$A*E+og*$*hMQPb5f&J(1|pqwIG;qaH%tz8S(Z>L-mS^PfX$;b>cp2vSkv}j zYsvrj!0j;qq1{|szSmDosAGHI$C4^7-_MdNEk8hnOUn-u;Zos4M7UJ=FcB^lKEe@ z+uBDi90jcHNB85T;#eJ(LgHRQKmqMB;R@4Q4c)esP? zxYm;Ym%{z@keBP6yNG?+Pt3DngD>+F^K3|dL!=+XiClmQ+bsUNn}6*gRzG7czw#5i zE%*9~-ImLVaI?r)h;XyWSBY@5$k!NR%_3jt2|g8+iYs`6Plexpo4(G5hnx#&heF@XoA;wF};z(aB~ zOH|+?`4$mwE<(2b*IM%b7PuYeKXfw}=eH8!;`}=dvEux@JTYlagfcy~w#@Yd9Y-FGBAaUMdcI0Sy+&1wlIIPUGL zRVTh(VVejS=Tk(uIG^?tJI-fVQpNe9EUDsr3lT2P4$L!(U21rBj?Zr&kI&S5^7 z8!yK2p!zMIbQYVOma?Z^5;fYA6+5BJ+^ra*)L#9;LQho0@UC zD~uU3)!GCVODGjb6X`@j0`tQVUe4jIyMscJtrnrP2st^eUS|)4QgJMiUKDnNejEm{ zfy#njWNJx>a6#N7qDLBsQBKa#jqr$A_lqXZFs2q^hH*dyhVe)^-%$^1{(w?(%m|rk znNsx|NoJF|(Mlwe9Dd?{9%V&72;eXYdKGq+ao#N}LsAfdw#>=HTW|zK7m|;|Pu?9A z@UL7je1ZrU44-6(6%3yuV$F-Skp{7fYc2Wz8MvQ*dM+wH>kua@&bJ5?6`v!*MaAbw zh$kv8u!%n^b}GqA$vr`Y8_)e1VvXl63^|nY|2agsA^#W=F1epggiG#U5-Fk{Y(yXz zV4}(OAt98Coh?$H|2g^JaELR~V-{gXdPsyD>5U`AGt%2^;vZ>=q)=1od?xcW2{PG~ zd69-&;Ww^H;uR|rTyVsu6$wuA;*~2BoD#)#L>98BA9kS~%W%fpNz)7l0m=SE5;%LD zle6uK=2DuLYk?xjw*Oj7{x8ApbRR;a=4NLmnlO`wX|ope1@MHibsQ_Z7D z#)&M&9VMo>R6-(|^b)*Tl!fVLB)Hh=wpg`PU4-PNilkXDm-E9o!S59Pw2-h0Kx@n9 z?n$JRH;t<1e5~aKHKJGMN=PIxtdX?nnlBgP z&CU;t6hE*a*^Nk=#Zh8fY-R55qoi!H`2c{mJa?4TTa08MA~;2q(}QWyW{IRpWEf-4 zO>EpeGgEsa94N>z9Ds^!q178}dA>s?JNbd;xg?T3{KPaG$zCqWM{0SIpV+k=ZCn2p_*&@7|DxWf^D(M%M?*t${@^^lQ@Jah$0JXdAX0|I{V9DK(_tY zUTgUNw*hXK7pmQQSD!cWWmY#G8?!GFn9tK~kO}SS)`Wh1iR56L_$TXKEn@G1b#!4Z z55P~61q1jeZYTD8BHYUTAVaK``yq>z-y+M!Lw%7fN8({3VG_Z@Qoo>7JVHeGmb1Bk z)FRC0{xKqpS+HDw6{VX&sd$`-nnkEo{SC<tbO zh;Tcae~u8(j^YF1p+v>h=|h+C%+hMWXgl zKV6ZiJ=7gU^d3s@p2{(YQgJ5{ZV&ad8u9LEeqJNq9nCL@SbLEw^Pp7RPzQMrYhmyCZB5|t$h&aBe(xwC z=KRn8?N^_Rh)E&;``WS* Os#w3)dte9Yf&T#AhT4Mw literal 0 HcmV?d00001 diff --git a/CGW1PO.NTX b/CGW1PO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..bc951b8c045d8f60dc43b261f5be3681aa753ac0 GIT binary patch literal 240640 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 literal 0 HcmV?d00001 diff --git a/CGW1PR.NTX b/CGW1PR.NTX new file mode 100644 index 0000000000000000000000000000000000000000..2ec80cdeabaf785ff979aca1a6c546215a06c9b6 GIT binary patch literal 5120 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 literal 0 HcmV?d00001 diff --git a/CGW1QL.NTX b/CGW1QL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..57c4077709fc96fd339847e24e78e27ab8dfcd42 GIT binary patch literal 4096 zcmeH|S8`J^6oyrj&`Tf*5ZVQk0ts-h?Q1)<5QqtxfiPoW26*9_vI5EqC@X+u1(X#~ zRzO(+We30lkdE~+@&iepUs71VZ&eMd3$5v9>-yZ~ z^T}9p@ltE_-0WP_cgHLH+e3?Y;XvWQKj1(~-B$P2W3`}Os<-N+`l^1YZatt!bVJYT zYxVSths7#n!Dzqd1{`U*XF(XY`z(5`|Oad*%^Dq z-mrJ<1N+22v#;zs`^kE{4!9>tvNWx@w+A_(8h|^G+9MhPm;kag03XQxO*3M2wLzYh z!-&-pD7*h^O#~_)bOVUt&pm~B3H?Hq z*)U@Ok{bt*+`$M)&_fXrrH27zn*zwz7ma+@0g2&X9#kj~A4mYnx&CikN%`7cytgpCC3K0btTm045y+u;9l7sAAFy047ZWSl^id za;BUFut%mMAi10Z5aTp}0+-wGT|JuBM3$S72!dSYxJMAiZi#eeG XCVI2Ux!6294H+4TMqmLpakyT literal 0 HcmV?d00001 diff --git a/CGW1QM.NTX b/CGW1QM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..df044dc6f0942bc30694d34801057ea76044bd00 GIT binary patch literal 4096 zcmeIzJ#0;37zgm@qpGOVqNtDFQdM7d?!7&&kE)VdBr3Uyq=SU1gTZ7l7{p*Oh@nFV zF&GSDFc`#OFo?lm5QD+c7z_rJ!64q}f6qU;gT+S>IVZXIo?p&6@Bew9`<`>!MMXLV zTbHz_-%070(~ap9jdL?+PBjmd-(?5N4*ZuL7?7)SQ*O(Bc`VQ6wJgdf`6`{-r^7m? z)7sGUdQq?F4PDTC`beMYD}ARQ^^0~`uMJwwrfkN}+6B98*KOYJ+CzJ4FYT>;u+P@! zJzntvMj|ulX&%;}86azwkHy-lM6z)2D(hl%7XP)hw%rj2aEa={R;E)K;jP zg_cmbE}mrR%sj)HOA9s6?4YV?N0w2w&~gf+te}t{kI5Lbnx`FENsWcNsPWJ$3hApu zd6s3!>!y&`Lm_Vsg}k*C^43wv>!pyloR{TDjfI+X@1s!5CJMD|rclck3bkyd zP)k3BS}GK38K6+hHVU7{-i?A|4*gLV!k;#bBsb~j#KDNLd#aJ yk+ceb;~F`ddW-)7>-A^v+?GG6-2LY}pnv=QpI+iEZ;W^~ms{C^vIBpp1K$9XIN?hG literal 0 HcmV?d00001 diff --git a/CGW1QMI.NTX b/CGW1QMI.NTX new file mode 100644 index 0000000000000000000000000000000000000000..9f72d5fa791a7623aac5779b83cbd71d13940ded GIT binary patch literal 2048 zcmZQ$U}RumVE_X`22LPt!XU-qALQa16z>=6tDvpmkX8Oc$6QGJRrVW)@*qWj14WXO3XbWUgZFW}d^mmU$oZ udFBVqpil#rHVg`;1_lO}3JQiG0VW_e1PU0NK?Oj9qhK@yMnixeApiiA<|K*$ literal 0 HcmV?d00001 diff --git a/CGW1QO.NTX b/CGW1QO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..16a0773b7bbbd2321f3a38c2dd4a8941ef19ad8e GIT binary patch literal 14336 zcmeI(ca&3Q9>(!E2_On8O+`VyASy_4k}wp(GR_1hl1auS!vGdkuvf5G&@FD!?M=5= z-QIM2)$L8USKZ!pdv*K1?@ivz^S$pOXV0Geq36s!2RP(&GWWT^x8CH=1d}mlsfmwS zX1e`%u9<3T^?_1-b9H1WS{OB&_4$=@wdDT0sJOts(${Qm?yn7$TJIYBd#nOu6?mdn zV6GW7Tg*-74s(xrz&v8cXQIri%=*l>%x#&wGWTU3$~=~to?VhHXSZf|Wbe%0n|(0* zXm&zwPHuH>G`Br>d+zSs{key8?)v{^|3p!~r>AKDUQ@1?8-tNO9Q_$okNRtsTD?Vo zQ5vjON)7j>$i8a+s#Nc*_76slN_oK1V@f0CsI*~mz9%0!`ddK#rA8yBzblOn_BErS zQnRmOUp2jU9*n~;4Z<%2A^dVBhF_t?@GF%V{+NK0@T-&<-byR{3Kt#;vr3h6vlKNq z4woYPs&S1LU$T2wC4PCJygsIJN{wc%J`}&rzG}v|Dc=(mY61u`_E6#_PYfuzVoX+IjJ*R&V(g>D82h%UH(v;NjO7^ z39WQEx;g%f_B=jcfxXb}FcKOpSJ#%JM!B_v=v7)b-0GfDWM4JQlq!8qJN}1jt&zMO zRI1tuz!k&2YlYHic|d5TP?0m#F(9 z!XKc-@H3Sd{y-&$KPaFi{46DgKS8L#%J+c~{zN5qn|>vB8@E8joy``iz;5IAth)%^ zW{ncN&00_K+JJq4pF>PEUhSCMl~Q;9u(M2S6qy%Kx;Xh2Di-=M@EKigBU&B-2rFbMtW z5G5u&REY_rfRcoBl$da?r)5FH!$3$lPl*W+S7O2=0!k7dsl zP>Bf_1(YOQti*&%JcT>2qm?){^nfrmr4=8ah4LNhAm1Azg3Ch&kiUFe~uEvpX(`H$vAPt*A+^< zt}8u-lk!y{B)nRQ-R2r4cAIOJ*ln&0DCsuWE3w<$;3=H1Zv-K{l@3QY$Nvs{o_PGb ze5}PzCD!8RfRb9=qQqJ}$y2;C;DVp5#Ci8AAk4c@RpPvRt59k%JPm{xPgi2Meufge z^)r>&t#4Cex4zv|yb9rymuG>H@YyLE>T8zjWw*;T&rw=iiJF7u{&i90=($QmBh6;5 z8rj3q^OW2tH6Szxw{{`M9ZD?J3qbg6=uRaT>V-<|hc8lMKYVdONk4pv68qsx zLAcp`S)20VEdO#4s__aX_TE>5(0gB{#NKPA!_m$0{~CK9H~#bCZPII%cvY_h;i_J* z#H)IPr*I;_3xwj{t;85_1R=(olo;d9p28{lEg-~rs}f_p4TKnPS7MBJ2&HDIcY+Y( zT}m7$?^fbCxhJ4xoZPF#aq=Ed;ZFX&AS8UB5)1Wy5DN7HB^K&~p2CUpLmLw8Q{D$c!uyq&&`O7+o8$kJ_B`?Ux5X{QwMZ`bQ%bzxPYb1P z@;?K@1%FnF7yLOTHp%A$N)moSi3z{xDPFs&>l;@Q(|lVUWu*s2PL-FAC=fz|MV2@YyJg7 z!hb7qo%|07>*PO_sor)dZdyy>38?cWR#YO$XZTWfz1TI&EMHpxs+;r8!95Mmsp#2B+ch%sAyY{f)c|Q14_d0 ze(XEx=J;PNAyVD?SP*J)oDxUZ@gR(@6O`C#`h-&R?uj78=vQLh2b5U%Qb0-F*9a}; z_kU|ah%uYl>+ zx&cD?rVzzae6ffp(92VU$czVpH-6qkTd-bAe`%ZB{t;^AT;HTN{n%nr||Y_2M95CDltaq z@junL=X*On|LdL){@Z*kug*4IEg>JwDWE;o}pS>gL(GX nquNw->%VLb<{NW*dvwLSH5pxtjM?2f*<&+|9b*-Ed{p4S#l=*! literal 0 HcmV?d00001 diff --git a/CGW1QX.NTX b/CGW1QX.NTX new file mode 100644 index 0000000000000000000000000000000000000000..8cb10a9c0e7e095ae40186e6f6a2f1448d19e7c0 GIT binary patch literal 2048 zcmeIyuT#S?6bJB^7Z~IBV6dBv;>LkU)25r`uI(M%!P@KK4mac^5;=)PPEH~xk;q9T zauSI|l8k07`3vB#5pDX(>r49;sQ>|3f%#}cP2G>64rv}IdB1ye#ZFk3r*S_@<3!DS z*LmymqMPWYQ~&tqwengfP$uwC6KFsN0~o>xCNPB=d_j%0$QijM_vDd`$qRWS9|W+8 z9MAC%AMgpE@fF|k6RVWb4$bI*4(W(a=#MtMDf2u5p4dtmBY4i zr~i&|Cx_j_eJ7bxEIQ${Pzo&zOcM*Jh1)1xU~In;r6}_ N<4&H6%kf7O_y*nCXmbDn literal 0 HcmV?d00001 diff --git a/CGW1QXO.NTX b/CGW1QXO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..599a2b835b3b8f00f72598e4286512d7f8844cb8 GIT binary patch literal 2048 zcmeH{T}s115XWaXwSLyms-;hhh$#B7*?hFGk|s1z6G5>#QzzCDo}6acH2JMie`^P72mX@-9q7Xq+`=Qg!Ur_i0UNRjyJyerjeW8< zcljm1;ScAay?Zzrh+gE)1kn?B&<{s zB~O=T1mSv16J#B$njl?YD+o)fUiICsR}eS@z8~pcHZ-Ar98=}_*hIp_E^KMKj-H^B pA6r#K$&YqHIF=$bwyTJe#*QXzN@KT*C~0&wF`J-Y-6HVk;tTfQq|N{U literal 0 HcmV?d00001 diff --git a/CGW1RP.NTX b/CGW1RP.NTX new file mode 100644 index 0000000000000000000000000000000000000000..4fe873cca27578b1a53d3482813d0d8b02774a3d GIT binary patch literal 21504 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Š@KxqpzrR;5MSVgwgL#*Fn*@*Bc>P!DQ6m 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 G-+uv9iEhXM literal 0 HcmV?d00001 diff --git a/CGW1SM.NTX b/CGW1SM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..abd37361c371c834cc15eb34506baf208a5f4ae8 GIT binary patch literal 2048 zcmZQ$U}RumVE_YO238>L#GuF!>=W$k=m!xUB}YSGGz5lg2yifTFid4w#IT-W55q}@ zYYdMWJ}~@c;9?YKRADq^v}5#Uj9^S|vbAxQuZ#;{nFAjJFt{Gk#%YWa49z zX3}6XWpZNjXNqCUWGZ87W}3h>muVH#cBUgt7n$xcy=MBs#L6thEYGaNY{~4#9L$`+ zoXcFr+|E3Oc_H&U=H1LEn6ENFVg`jTuq0wI00LtWhY89t1#v*qAQ>|d2UJ>tIOZS@ msKf$sEI=GKD8~}SVTW)G4L}?YD8~@Q83m&uFd71o5C8zERxNY@ literal 0 HcmV?d00001 diff --git a/CGW1SS.NTX b/CGW1SS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..4992220b3f849535454accc11933bbd8d9b5a9ef GIT binary patch literal 74752 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 D!`wDa literal 0 HcmV?d00001 diff --git a/CGW1TD.NTX b/CGW1TD.NTX new file mode 100644 index 0000000000000000000000000000000000000000..cdceff85529f727e2256eddbdb31db87252f8d4b GIT binary patch literal 2048 zcmeIy!AC?<6bA6~eP^1fnIU2}5qDFf&3iM`w1{CAMa*Wrp%xKsBHBc>iD(niCL$6; zBq9x`*W}B@-0qUAd(VaIZ?aUWk8~+S(}Q+8u5A3 zlLV3k+B1Q??8OV zE#1>YJ=IIS)kl4G!${J0nJ{pqW6`t2vE=DymnnO?2WHsQ4mB|q&y3@UXQyQtcy@V) awoBHt=$N;w9RHScjDK@CNhJxiV*>wwLNf^f literal 0 HcmV?d00001 diff --git a/CGW1TOL.NTX b/CGW1TOL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..cd7b2a2a49c6bb29a86d98b71572eb4648a6ed2a GIT binary patch literal 2048 zcmZQ$U}RumVE_X`22LPt!XU-qALQa16z>=6tDvnA91^7AdB#SQ&B{Y8m<%<}++yILL5`;W5J(23AHfMs-FDMo-2l#%#tK#$LvGjO!T>FkWPQ z#Q2$!g-Mi2jmezJgDH|Ji>aEahiNX;I;Q$|LsJ6-V^akMLy!Qd>_HI#DT4_ZfmE=f3jj+jxC&#Cicv5c L0;3^7RtNw9Kkh3s literal 0 HcmV?d00001 diff --git a/CGW1TR.NTX b/CGW1TR.NTX new file mode 100644 index 0000000000000000000000000000000000000000..121eb5ab52d62e7a07ed72afd304fe2a0214716c GIT binary patch literal 2048 zcmeIyzbl1N90u_3^E}s!_m&I>84NN=l6x<2R~h8jAjNPq7-TTWV35HegFyy^3BW zB#m8J`Qn&jVntr1vD&@T ZPMLUF=#+CRbBdhGo$^k}BncFE0)IgnGnxPZ literal 0 HcmV?d00001 diff --git a/CGW1TS.NTX b/CGW1TS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..81fba830ba9f4ebbbd3f7240f00a945a4386a3aa GIT binary patch literal 2048 zcmeIzy-yWE5CHJ`KtKgV6p-%|L7*|a_dd9n7~+eNAfO~b@d^{IEGVojEGUeH1qHFN zurL-B7RG{tf>2OU5DNlLV1;6JUv1iXR`_yC__2M*u|{Dx!r2QAo(<5ji19;Czy(^dIDk&Y7A_;aamPwQCnm1=A%{*>u@7 zX&N_WCjH%c?<=NJRVqlN1FfpE5Bb_unG2Cua`~b~wwp?(tD@BVFqaNfh`c5$R^nZ* z=So9lr>Nvzm}gh6n7vz7aADRra>Wcis?3G#y}9DJzFaXwzp4_)4T#F#g_#YiO0n`o zsw~ze5lyB(yoZ~nFm5S6bU;6hhl^2TqD8%BA{}Uv_C%JanQ2vhJ5L4908D^b0RR91 literal 0 HcmV?d00001 diff --git a/CGW1WS.NTX b/CGW1WS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..eefa9c60bc650bf6ae133a490f8d38e6ee0e5c54 GIT binary patch literal 5120 zcmeI!IdjuM6ae7W3KB42AlzU;A>j;%V+%WC(rBzDvqY9OTG?_6#uX(cEhQx-EhQx- zEhQx-EhQ!YfcH>z#FBZ;q~I9s%vu`lx4Y8Y%L`0n>;(Inme~ckwpf$JYAT)NVf|Z2 zppL+Q8-W(vWKY>k_LhBQUm4d{G)H@;z0%%kpR{jUgRgOyKj*Lcd;Xb!=SzB5kMtM% z8~ua+MaQ5tARF@%0t@nBOGZLPWrkn_fmEX)@WT>802>r@e6L&^pCGtQ0o>o9g-*L& z(FnG1B>}D<3r|Ht?&%D{)mdOWc~b}s3M^CL8U2azA7wegCel>w_*l-wgYmx9imE;s@a zOI5C)ba4>CP;QH=as$d3?v|d2lnBQnoK*;#2qLrM1wbP>2|4I`2<2cqd06~Ka2SCI!<}M5dXL~p3aSEu;AjTSjb2(ay&_o3fFoQtE!n*yIG%wZ zgh>-hzkm=N%fPhU2ZDn zBEWyrV;M#x+nogcp4BbRZ3O3w!0K66CvU(&(1#rRVZ})8zT_nUlVF@Lw?YF3l>Js} zvId`j{%OBEa`^{=hW4`~bi$p9=s0 literal 0 HcmV?d00001 diff --git a/CGW1XL.NTX b/CGW1XL.NTX new file mode 100644 index 0000000000000000000000000000000000000000..02d556d2cd1624c3dd50610bd756c41776585369 GIT binary patch literal 7168 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 0 + ORIGDIR := SUBS( ORIGFILE, 1, POS ) +ENDIF + +POS := RAT( '.', ORIGFILE ) +IF POS > 0 + ORIGEXT := SUBS( ORIGFILE, POS+1 ) +ENDIF + +OUTFILE := EVAL_ATSIGNS( OUTFILE ) +IF FILE( OUTFILE ) + hFile_OUT := FOPEN( OUTFILE , FO_READWRITE + FO_EXCLUSIVE ) // open the ASCII file EXCLUSIVE +ELSE + hFile_OUT := FCREATE( OUTFILE , FC_NORMAL ) // CREATE/open the ASCII file +ENDIF + +IF hFile_OUT = -1 // CAN'T OPEN + MSGSTOP( 'Can not open OUTPUT file - ' +CR_LF()+'"'+OUTFILE +'"' , ; + 'File Open Error - Invalid File Name?' ) + RETURN -1 +ENDIF + +FOR I := 1 TO LEN( FILE_ARR ) + ORIGFILE := FILE_ARR[ I,1 ] + WORKDATA := MEMOREAD( ORIGDIR + FILE_ARR[ I,1 ] ) + IF LEN( WORKDATA ) > 0 + WORKDATA := STRTRAN( WORKDATA, CHR(26), '' ) // REMOVE EOF CHAR + + RETVAL := ADD_TO_TEXTFILE( HFILE_OUT, WORKDATA, OUTFILE ) + IF RETVAL < 0 + FClose( hFile_OUT ) // close the file + RETURN RETVAL // BAD OPEN OR BAD WRITE + ENDIF + ENDIF +NEXT + +RETVAL := FClose( hFile_OUT ) // close the file +IF RETVAL + RETVAL := 0 // GOOD CLOSE +ELSE + RETVAL := -3 // BAD CLOSE + RETURN RETVAL // BAD OPEN OR BAD WRITE +ENDIF + +// ALL OK TO HERE +FOR I := 1 TO LEN( FILE_ARR ) + GDGFILE := ORIGDIR + FILE_ARR[ I,1 ] + BLD_GDG( GDGFILE, 60 ) + ERASE_RETVAL := FERASE( GDGFILE ) +NEXT + +RETURN RETVAL + +***************************************************** + +FUNCTION ADD_TO_TEXTFILE( HFILE_OUT, WORKDATA, OUTFILE ) +LOCAL RETVAL := 0, NEOF + +NEOF := FSeek( hFile_OUT, 0, FS_END) // what is the length of the file +RETVAL := FWrite( hFile_OUT, WORKDATA ) // write HEADER to TXT file +IF RETVAL = LEN( WORKDATA ) // GOOD WRITE +ELSE + RETVAL := -2 // NOT A COMPLETE WRITE +ENDIF + +RETURN RETVAL + +******************************************************* + +********************************************************************* +FUNCTION CR_LF( NUM_CRLF ) +LOCAL I, RETVAL := '' + + +IF NUM_CRLF = NIL + NUM_CRLF := 1 +ENDIF + +FOR I := 1 TO NUM_CRLF + RETVAL := RETVAL + CHR(13) + CHR(10) +NEXT + +RETURN RETVAL + + +******************************************************************** +*BUILD A GDG BACKUP OF A GIVEN FILE +* !!!!!!! NOTE: INPUT FILE CAN NOT BE OPEN EXCLUSIVE !!!!!!! +******************************************************************** +// 32-BIT VERSION MOVED HERE 10-10-03 BY DON +FUNCTION BLD_GDG(GDG_FILE, GDG_LMT) // FILE(G:LIP0DT), GDG LIMIT +LOCAL RETVAL := .T. +LOCAL I, PER_POS, TO_FILE, TO_FIL2 +LOCAL FIL_NAME, FN_LEN, ORG_FILE +LOCAL TO_EXT, TO_EXT2 +LOCAL DBTFILE +LOCAL FILEMAJOR, TO_MEMO, TO_MEMO2 + + +GDG_FILE := ALLTRIM( GDG_FILE ) // DON - TRAILING SPACES ARE VALID 32-BIT FILE NAMES 9-2-02 + +IF GDG_LMT > 99 + MSGSTOP( 'GDG Limit is 99 - ' + STR( GDG_LMT , 3 ) + ' Was Passed' + CR_LF(2) ; + + 'Limit Changed to 99 Generations' , ; + 'GDG Limit Too Large' ) + GDG_LMT := 99 +ENDIF + +PER_POS := RAT('.', GDG_FILE) +IF PER_POS = 2 //** THIS IS A ..\ CONVENTION IN THE PATH NAME W/O AN EXTENTION PASSED + PER_POS := 0 //** DEFAULT THE PERIOD POSITION TO 0 +ENDIF +IF PER_POS > 0 + FN_LEN := PER_POS-1 + FIL_NAME := SUBS(GDG_FILE, 1, PER_POS-1) + ORG_FILE := GDG_FILE +ELSE + FN_LEN := LEN(GDG_FILE) + FIL_NAME := GDG_FILE + ORG_FILE := GDG_FILE + '.DBF' +ENDIF + +IF !FILE( ORG_FILE ) + RETURN NIL +ENDIF + +IF RIGHT( ORG_FILE , 3 ) = 'DBF' + FILEMAJOR := SUBS( ORG_FILE, 1, LEN( ORG_FILE )-3 ) + IF FILE( FILEMAJOR + 'DBT' ) + DBTFILE := FILEMAJOR + 'DBT' + ELSEIF FILE( FILEMAJOR + 'FPT' ) + DBTFILE := FILEMAJOR + 'FPT' + ELSE + DBTFILE := '' + ENDIF +ENDIF + +FOR I := GDG_LMT TO 1 STEP -1 + TO_EXT := ALLTRIM( STR(I-1, 3 ) ) + TO_EXT := PADL( TO_EXT, 3, '0' ) + TO_EXT2 := ALLTRIM( STR(I, 3 ) ) + TO_EXT2 := PADL( TO_EXT2, 3, '0' ) + TO_FILE := SUBS(FIL_NAME, 1, FN_LEN) + '.' + TO_EXT + TO_FIL2 := SUBS(FIL_NAME, 1, FN_LEN) + '.' + TO_EXT2 + IF FILE(TO_FILE) // IE. IF EXIST FILE7, ERASE FILE8 + IF FILE(TO_FIL2) + ERASE (TO_FIL2) // ONLY EXECUTES IF FILE8 EXISTS + ENDIF + RENAME (TO_FILE) TO (TO_FIL2) // RENAME FILE7 TO FILE8 + ENDIF + IF !EMPTY( DBTFILE ) + TO_EXT := ALLTRIM( STR(I + 100 - 1, 3 ) ) + TO_EXT := PADL( TO_EXT, 3, '0' ) + TO_EXT2 := ALLTRIM( STR(I + 100 , 3 ) ) + TO_EXT2 := PADL( TO_EXT2, 3, '0' ) + TO_MEMO := SUBS(FIL_NAME, 1, FN_LEN) + '.' + TO_EXT + TO_FIL2 := SUBS(FIL_NAME, 1, FN_LEN) + '.' + TO_EXT2 + IF FILE(TO_MEMO) // IE. IF EXIST FILE7, ERASE FILE8 + IF FILE(TO_FIL2) + ERASE (TO_FIL2) // ONLY EXECUTES IF FILE8 EXISTS + ENDIF + RENAME (TO_MEMO) TO (TO_FIL2) // RENAME FILE7 TO FILE8 + ENDIF + ENDIF +NEXT + +COPY FILE (ORG_FILE) TO (TO_FILE) +IF !EMPTY( DBTFILE ) // DON 10/10/03 + COPY FILE (DBTFILE) TO (TO_MEMO) +ENDIF + +RETURN NIL + + +******************************************* + +************************************************************** +FUNCTION EVAL_ATSIGNS( CMDLINE ) +LOCAL STRT := AT('@', CMDLINE) +LOCAL M_END := RAT('@', CMDLINE) +LOCAL WORKVAR := SUBS( CMDLINE, STRT+1, M_END-STRT-1 ) +LOCAL EFILE, NEWCMDLINE := CMDLINE, REPVAR + +IF M_END > STRT + NEWCMDLINE := SUBST(CMDLINE, 1, STRT-1) + + REPVAR := &WORKVAR + IF VALTYPE( REPVAR )$'C' + NEWCMDLINE := NEWCMDLINE + REPVAR + ELSE + IF VALTYPE( REPVAR )$'B' + NEWCMDLINE := NEWCMDLINE + EVAL( REPVAR ) + ELSE + MSGSTOP( 'Outfile @-sign error: ' + CMDLINE ) + RETURN CMDLINE + ENDIF + ENDIF + + NEWCMDLINE += '.'+TIME() //** P3N - 03/05/07 ADD TIME TO DATE IN FILE NAME + NEWCMDLINE := STRTRAN(NEWCMDLINE,":", '') //** P3N - STRIP THE ":" FROM THE TIME + + NEWCMDLINE := NEWCMDLINE + SUBS(CMDLINE, M_END+1) +ENDIF + + +RETURN NEWCMDLINE + + +****************************************** + +************************************************** + +************************************************** + \ No newline at end of file diff --git a/CGW2AC.NTX b/CGW2AC.NTX new file mode 100644 index 0000000000000000000000000000000000000000..a9349d7a1f9cd7eaa6d8c28e9d69414e189536f1 GIT binary patch literal 6144 zcmeH~`HmY!5XRef4p@#5Si%j>5g^%2HfwX=&A!AdBRkXxEvY3ir)SJhorJ!ix~h;6}ZN4$>z+hR+EN(XXB`bBXo zn1{-kH-9%7*ks^;mVs??MXbb+;#cv97!9rtz8w5C_-*j#;Pmj?@T=j^!{3L04bP6o zqpwH5j41RWo-mWid@1A1zp3O@`Jp$_o;s9Sn88FWif z;%pD9DFrnYStj&RLYMwb$wZ}bQgCYAA2xW2P1a*2x=O=>-qw~uS9k+TT)=~Kg5T)z zY7O`)LLYCVfuiu_!p~I}Xgv9R|f4M#C2BS+A_vdR-U+v=4Qy zUY}QkK2xGS88ALzU;$6GQ2YDpFiWEX0*DLLA*ctkPFnv@LS-2s_MQq9fp9u0^%M@? zQ7lijP);X|%v&@vk<$gF?$x02w1LJ`^7?cOrLu1ez&k>tCfe9~r!|-{N`+Mu(Aav1 zM%fIMcoq-ZUwTt6{gf-MmV?B;RFcr=I%rL;Lt{ptZ=$yK*}yESjn@}CXxFPYUS9;7 z<{AyKr~aIwU;!^xX!lH86b4Y@Wjx$%@#gntHAl=4f_22f49d z>_zR4l_)oMkoSF^wEo|M!dB!stF3S}hx2v~#SAuAgIbb!0GpY5sTZxh8kD_W>7t3B zhney)1CdWc6ORv{w-$xu66L+W+(oMrw5T+bdZ!m{X*C&02u0|AhVj*&s->X-CDIz& zsXvFVxcsgHUF^f9=|5hr_#`eZ*1#FqZJ>?ftD&5M4}kJ{wgal6*BK;5BtC4R4ZS70 zBJ?AN+F9C21EUdABMJSujn>^dbj9c=4sD3EwaO^pUqFdZ9ZI*r+J(uJd(zY|dib6s z^s}|-xI)K_e(un^M%OD?02@FF8d|oCb=AT^_nO(5w}9~by|zwx|Gx%-&2YH!nGtNm znV31X*N57fPK})+pO`r{?w}E! zN$UTU5a;2lc2TBJGWtj}=g)o4;HHib>NkOQuL}0E>~21osrd5z0%)_ST{FdhXTUv` QKBhKnlYvbJ{;Lf94Lvuol>h($ literal 0 HcmV?d00001 diff --git a/CGW2AO.NTX b/CGW2AO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..cf8d579b0f570844c4a88366aa7b1ac3f25c8f6d GIT binary patch literal 20480 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 JmH%T8{4Z}?<5vIx literal 0 HcmV?d00001 diff --git a/CGW2AT.NTX b/CGW2AT.NTX new file mode 100644 index 0000000000000000000000000000000000000000..98c1e81943ad958f31bd222cd3e10654f7e9d378 GIT binary patch literal 9216 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 literal 0 HcmV?d00001 diff --git a/CGW2CA.NTX b/CGW2CA.NTX new file mode 100644 index 0000000000000000000000000000000000000000..6b127428535199087e69aee6aa298dc98d03bbcb GIT binary patch literal 10240 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ᨮD%@fitQ*W5itCGLlNy| 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 Vot=QWQ{g6p=0qnZcE$gX{{~djEP4O{ literal 0 HcmV?d00001 diff --git a/CGW2CO.NTX b/CGW2CO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..5d6c1f5f35e749867fb60423e3e986fed9fdb99d GIT binary patch literal 23552 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 NW#wOI1t8nQ_HTB~f=d7Z literal 0 HcmV?d00001 diff --git a/CGW2CP.NTX b/CGW2CP.NTX new file mode 100644 index 0000000000000000000000000000000000000000..c4e17d4de3b52d95055e5d08e5a84e3565b690bf GIT binary patch literal 81920 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%0D5R-go|A J=y~j){10+2(og^Z literal 0 HcmV?d00001 diff --git a/CGW2CPE.NTX b/CGW2CPE.NTX new file mode 100644 index 0000000000000000000000000000000000000000..c3ba808ce77eb01a7c0b4d19a3dc6698b56bbc81 GIT binary patch literal 2048 zcmZQ$U}RumVE_Yt26Z4U#K6hm92y)F@9CnTt>Ek!67THq;tFI2hXiQ^y9UPlh5G6k zX#xfO142Cg{UCZr${|&-jl~mnnv+n`sx* ZOC||scjhwYq3E+wH;;zEXb9jB0RYGS6>0zg literal 0 HcmV?d00001 diff --git a/CGW2CPO.NTX b/CGW2CPO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..bf54bbeb04b1adf16d5f778c42b54379af5cda6a GIT binary patch literal 2048 zcmZQ$U}RumVE_YD23;U6z`()a7!nfi?C;{LpsnB^5E38e=o1QJ2L$=Mz{H(HgG1sy zT_8F~$>1?>bQc!q0ZTpxH%~v$U=NT7d_8@9Kr}M2Ft7k|jg1UU nOe_oxfa)38fY>)u0a!wUWPmJS0SRK^1RzbLU^D~oCa#&?aGwxWH9H|}8B!pon>`T~}B&-+i z+$rwdxl`P^bLSu64zF9*V7-2Gz;mL?T{RO=y)Rl?-9LA0FRL+j2h;5cy9@qZVf$Gy z$>o*^`EfqZ(r_zC!w5d-GCP`PVU(S4j=`V4l)6&<=jHEZ4=j7&f7b&m%wy-+CH5ox zmHo-~)ta?&?PBeR+Ap;~YJb-b*Q5G{`uFvp>%Z6ksvm5eY@BagY5dgqt)Xu8cKET1 zW;?EBacK5>%;n}df{%*aLyXkrjeCYZ(vHIL!)jkRqdrl>)6N$(N<%y0Eq+5LeO_SIi zc#O$vF4JrTRrUx$y1J^zgCZ6|ybYQ8d@7QVD{|ZD)@HF=mIc0u~7lu%_4 z62y&#jEbSD$RUDsf^DP7Lj>u@dT@v03|Hg=5xZH*>z3{1$2-1V{T+ob7Vq3Dg9{agsP-SZRqRX|N>Qo2`(yC4cbzA5tj=h#eNicu~(k4{d zfFKTp2#j*oM~Y-7X<1WPaYY+Jl;?^J31Y{PoBtB^+|jkPI%ycfdCWtc;AcoEU zM3X*2-2OzwVRJkwx~>PrcC22{wyYgO&mjm3y%s@G=sj){9C}X>1clyH1VN$qs7Y|> zog@efJrE1D-OPU*&WE0agEF*B5R{=VK~RRa34$`zGYQVnCkcWw^f8mT);NN1AKjqJ z)C@0gdWX>4AP5RQHN){yQ0Sc_2nxODO@c#jLJ$;sX9$8qZ)y@8dTNPUp;(0hR(DD+ecqpoYC(0fypR@;SfxI^fH zSfK4@{=Wj}vz_Wip$vW3BsfFgBM8dS_X&bB^lg*i41J3rC_`T(2wFJ4L=Y5uuM-4? z-m3&bp?85GDD>Vi2@buB1VN$qj!AIneKtpS2)$1UfgLzA*_7y^jcj zLhoaOpwRooBslawCkP6??@WS2?=nG9=zT>H6nY>QXuFyJm*9Nm{GW}A7Rt~s34${8 zYm?v%{gxmoLq8-4%Fr5+mSeTso@IHKr@ztBsHhVJjfw_A+|1X@f7ri6mF*!&XPTzr z>L`-Fe$j9hLA>d}mwcP-B}i|O#!FQmC+GlX6vI8dRmg6N4 zHMx->?do3SCW3TkBrdiqHxtC0kx=Lp-C`2Y$z=#zg(2~>Ce>BM{ALZF Z)Rj3>2F?6>PIch2Eqh?u1OK@P{sAirip&52 literal 0 HcmV?d00001 diff --git a/CGW2CS.NTX b/CGW2CS.NTX new file mode 100644 index 0000000000000000000000000000000000000000..131fd639ddd4c0a2873e09a9573e11b6e4bcd044 GIT binary patch literal 12288 zcmeI&cX(7)8prW7Gl(FlC?bdmK~aMsPD>^cdlHIB0?AOU0lQ!ayI=>qU#)@^ccyZ79Ou3u_+Dwk?Z%}UKnElMp*txBy= zy_tG9^+76~9+a+5k54zJ=cX5?m!?;y*QGb7-$}op{wUo)Ga{4EG-YOI=4TdXmSZ=95aHUuS|!iaHBar+i%!QPJjv?(t%h@^t}8`8uDZd|d>xd|gOVz7~Nj zUzdU`Uzd^8`^6y3*SR3eS5!w`JG!I(7qFwcopVSUvhzSTWD7wyWLx>$YslGRqPBXG zG#Jsc6G!E8VMh3-V#?*S9sbOvNi~5+1hOfS3pAXhsQ#qd5Ebp58gh1FU7+1SIep?V zQa(hDA*uO&NNQ_WkoA5jNnPEAq~?c^3LXB;^#v8wuRbJQxHU-^_9hiO{F&Q^q^|A( zDysS2N$ToIl0LDDq)*%%RHL@`BB`xCNos2pNp0mwO7v)wdS6Yd@9<}C0H~x+Y)?`r zwj-$%+mh6Yok8_#YamH&?MPBvJCM}YAd-f|OBavssQ3>(UM+ zMfC^Sin9%B4m+b>cCQ&B2uZbm8?RP4XK^nqR(K zT|By@{;xzw^D39iNxH-3Agi-mNxJYBk}kZHq&zGGS)E-)(j>W>q&mA6WMjRAq_JK~ zQk~ravO2qsq&mAjp}5YD@B>!%C)gz%UO}M{rgWxB3B`3bnWW^L9H`=j<|LA$+DMv~ ztt4gjM3BwY6G+PHxg<4z4oPht53=QWE=i+3hot7)NgA|iAe%WYBwg4{(uGq=+DuL- zsjKrqHknQ%sjH`w^oggC^oeJJYfGn$Cx_ER){qGk& z^|ri?hv!+gGff8Bi{0TMyTd6Y<>3gB&4{TaMNIEMLo+#fZ6(?B|$` zBt>li*~`%jzRJpeQ-#W23$ollNm3`C09j>6&x*J$oA*zFY~HUUsjZbDoA+M2cyveo zukwA0@6bx`F_LcQ5t7#WM@iZ^JPfj_w1K3yUL@&3xSpg(++CoOE_@tRm+kOp?oN^_ zXaz}6m%B;YN*&~WQFhpk`nzc$O_>{Bt`uYWQFj3lA^u`vO@R{Nm1Vg z*)04$Nl||S+5Gw=Nl||R+4l7hBt`uhWRvNyBt`uVWIqYKMpD$P3HfYy_%rttlAEl$s;Ir5ZF+ivY~E}|(iHCvvSQzwq^LB=irs;1 zF#a9-rB0MI{3%9hc74n!ZT8=YqMF*urDQ9)se+=abDKNUD+$Fr)mKUC{p$(EZwarF z)YX@b8e5v<{p?F1dyKb5G-0N_gN8zA1zFT|Q6ah?+Z#^=cb36I^*zzX*C3;f%tIqaOTfR&551b*+<)Wx9UoWh2!<<_kMcMmV(Klb^+)o49Cd9Wj X%DMLw@|SOP)&9Ka=*htUQwIJ63sA!C literal 0 HcmV?d00001 diff --git a/CGW2DD.NTX b/CGW2DD.NTX new file mode 100644 index 0000000000000000000000000000000000000000..cb16911cfebe6961fcc9231818b93e78195dc293 GIT binary patch literal 4096 zcmeIzD{vGs7y#g87YdYjDbPZJEsp{P3Y1rQH@BPimS!*8BnyRMW)TP!0)apw5EUo{ z0)avx5GVu!fkGep=os_1QcpU%@~^c8(a zKhbaW7wriKg3;hY&1+vmW5k@!DoFxhZvJXX-X=_SGQG|jQ z7&Attjl#H*kG7?Z3xj>LLQZ`?%<$G zU|N?AITt}dE?Fs=5Yms+1CnMrZq3iW+=)~O5d`EoN-j$`G|Eb788gkC#WSwYL6oWK z(heL!Ku)5hIxcN$QN}At4bNP zx%FK3k}H`wVP3FUonYbTke+KWp_6qeDlPdO)RbM}Mk_KYFwGGJq|ZyI5;j%Rey0)0 zY#|LV@k~KLcC`f$7|PDJ;66~gpNK4Wy65R)H^frU|1eDMR*aj#mGnbXh2Wicyx9vJ zB%h0OAesr@gmdGvbHR(wxIdF4D3J4vo2Kit0>vZ?YVL@WQZw!QtgR%y!QJh%2gIE&p=B|X+;i4I!f9wAr{!F@VYrNp=r_Ml~fq$5RKTcmowg3PC literal 0 HcmV?d00001 diff --git a/CGW2IC.NTX b/CGW2IC.NTX new file mode 100644 index 0000000000000000000000000000000000000000..b17219a73d897f46986d34184f88819a03c9add4 GIT binary patch literal 38912 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 ao~~&>dirm}g>#Y_{?agkVFLdtfqwuPghbT< literal 0 HcmV?d00001 diff --git a/CGW2MC.NTX b/CGW2MC.NTX new file mode 100644 index 0000000000000000000000000000000000000000..8c0421cf593db168428231dbc8c73bc715dc362e GIT binary patch literal 2048 zcmZQ$U}RumVE_Y320>3#F7wW5Htf`=_;Oy_?9|Tb~N{)uWXb23K z5a49+VMt}DW0=mcf#D>>BZl7$B8<9>ZjAAa6^s)ZS1}%Dyu^nK+mgnXQR!}hXa}5U<846$klHi0$`1`n^ zNdU_qkdAN<&k$FLav%v5V_*VH7&!&``$fTJKoTH}6cmh|d>oyPbl0Vh#jmT31b6iA6Lg96di0}2~%HBA0GubPe0FK51=$qY!r-!z;Fry E0KY>wApigX literal 0 HcmV?d00001 diff --git a/CGW2MI.NTX b/CGW2MI.NTX new file mode 100644 index 0000000000000000000000000000000000000000..4cbb4d5b1d28772ca49092a2d0a048eee20b55c6 GIT binary patch literal 2048 zcmeH{K~BRk5Jkrhw9S?k%Mq(?keWhEScb$cQC&N-El6&_5jaARz!5kCN8kt?fg`YF zre(p#z#4g^Z%d;$WBW^<5eR@I*vAZ}w4Xo@jq>#&m)7J!a^U|ukkg;;UFz(t)b2vD*PdtHZu~ zZt0>cV`A Jd%q!H{I7!Ty>7;8e*jgq4wFd72G zBLu`4JQ$J~Y8a+5Y+yLW@Py$Xg9M`yqYq;mV*}$X#x0EJ7+)|lG08BQF$FMXF|{zw zW7@%ViRld!8?yql6>|u49&-otBIZ5JpwQq1VnYK13k76g2$JE#CSwGW;l?Io43ZJS zCSwAU0hU+{hOQ9-$kr$rfMl3($_M~uocu#Vd|Z)qf!)TBO$O`&K5Q~(KtTpxY%-Q0 z8BkH`?&BC7jAV@h*dA7FGT<-(1s;YTunPo%GJdY%3ZU{BZXnn+P)Us;12#<!j|355;DDe2g!MpO;IL-LDZ_zNh6gAU;u?%%7{oN7#3&em G5C8xNRbBc3 literal 0 HcmV?d00001 diff --git a/CGW2MIP.NTX b/CGW2MIP.NTX new file mode 100644 index 0000000000000000000000000000000000000000..e2fa807d70d3441a070d82bd6e918705fe47b9a6 GIT binary patch literal 2048 zcmZQ$U}RumVE_Xu1|cA=#30BJ;20F*7wW5^tq>d%q!H{I7!Ty>7;8e*jgq4wFd72G zBLu`4JQ$J~Y8a+5Y+yLW@Py$Xg9M`yqYq;mV*}$X#x0EJ7+)|lG08BQF$FMXF|{zw zW7@%ViRld!8?yql6>|u49&-otBIZ5JpwIx8Bn*ZI1{Mm)zz`(Eg+<2D2qXh4dJJ77 z0+6*Rfc3CqlL71D#wKG76lCB5Vp9t<6vH5+ L0wqSl0E7Slqw8JO literal 0 HcmV?d00001 diff --git a/CGW2ML.NTX b/CGW2ML.NTX new file mode 100644 index 0000000000000000000000000000000000000000..4f03ed541c80ac5fb1a8836b68965cab847c36cf GIT binary patch literal 2048 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 literal 0 HcmV?d00001 diff --git a/CGW2OM.NTX b/CGW2OM.NTX new file mode 100644 index 0000000000000000000000000000000000000000..2543b3381554ca5519c1c9ea98a4baa065b41f24 GIT binary patch literal 9216 zcmeI&caRlD5C-ts_l^S;6%`Rt@Wg~**z|Va8c_}u6;P51#efMhVa9}*Fk?bYm@y$H z%$N`pW=xndW5SFX?fH6FcfUF<>#FV_>bB~j>UZP3?w+36-G{ZtF{aMoYHya5zq^`t zrsv>+gNF5~uj^jde?Wb&0mJ$Y?yEzZ|7@;6a|ITm3UoDt%m_2aOfXZ-3^T{fH#JU2 z$8~x;L!D91IA@YG&6(xQbrv{nN?l6TQoqvh(&*Co(&W7>yf$IjIZ}ni-!0IU0(CQJSeq{AH(g0(}uwv{9tg(POku|Y; zDrtzw#@m1;xBJ!GdC5`$t}@u7KHq71bG3RNuqcLvo6KKphTcMGS|N`WSm8E2?u8 zD^~MZ(g3S@JS*lM%ZhnVA`OwnDXggP>8!}&OjgW$HfaU(p2LcMIF}V!oX?6Z1RHfV z)&9RwqRBeOu6G4}bP+37>k`rkRlSrI*Kv0(n_GbMswUMq?fVFkEk&9jhAu_*^jTq5Rz$WM zDL`I1HNmg`M zyG-?-7{iL{>wE9+q%k7flQcok z?N?MuM8NFNiau(UsvH$~T8q(%H)X2lV4!#8>7)r_c#sttKg5bpdzck{^hi4IRxx&$qWbzQyD8Ljll1Pb^*yktf%eW5 znWlFX-8nYFK;AB0QG6QWtyhiYwv8APRDCnms{M|~j!iIjBWMuWM^(&#s$U6>eOVwp zCF*_pa%k1{^o$Sm&7_5D6lxZ(zNzj7O`?j<>+7fWQMKDbW55dSnyQzM)fq;oY9qt` z$GQznRnX2L-$MyB`s!pF`dWn0=Hy=<*x#C~&5ZJw%A zNcEZM7FKlaR939)t*q$8+gQ;Xx3l8jdj~6e<4#ue{WMnW$h%mP@!h0)GTp<9-0o#X zZuhYwxBFR<+XJk~O|XG$(bx@rB{SQ7={E@SM$|y6%_J45ZHoJUjWHL<-1dx9$yS5;8Bea7F(5BSM7*=<8Tm+}+)cySuyp zfV;kHsR!3%*Mt|!(R;tVcYP!+0RfnUG!9`O*FC6!pM-;2C+tPtq2Eq|BUWc&><96% zf6>F=gCwqX&-;PAJ!XzfN9}kR#i3tM;&xx|XC-IfvkA;5@P{W*g%(`GEj+?2d_tL= zkcixn2l7Hb$TvBl0llX8^qIcXFS=`;Sy$Gb^<=$S@{uTBY!t%f!u1%l^9{x%kuKlK ziIZ<+WEF|uGywgIJZ39uqwJ{4j2BQ7|N0R>^ EKT!{aA^-pY literal 0 HcmV?d00001 diff --git a/CGW2OPW.NTX b/CGW2OPW.NTX new file mode 100644 index 0000000000000000000000000000000000000000..74194dbf1a28b35745faa6651444193cedf63d8f GIT binary patch literal 2048 zcmeIuF%H8Z3O`c_+~ja!Cyzva{Hn(j52y}Up6?%29zbXNZc zl~@Fdz(E8QJOUyTGFC`ZPNlv-+eQAcdo-ZyIYqc?>ecqfQdfJat(pGX zS!!%mFO*I8{N7W6o(e3+6{zAx+te z6@>+Syprn;Yg{6BdiljJsdG*hPIS?IAVkY zZ7KC|gi2Fc(3aXt!v8?aDe0`TSxAqE+3^BqUn8 z&7%lKY+2cYBli4nDItEY`?PE&Ago7?65@xuD|$47BV>Y2ZWBkS%?xRlkZ4_61cZgV zwS;IZ2zMKfke*m9BPB#zfxL;RV%0ML+mgRfkR*v9MRBuzYdZlk1BGcBEg?EJOpAJ$ z;Ev49VOm-xL|ehMv~k4VuG%?51IIeCgMgTpqZ1_oF-hYP>)?oei|CXPoe><35fBp# z9PKC}+6v^ilYp3T(W9LuL|Z|RcHxMhWjuiplMVw50sF`5l!VnAl!ol#AJkU50(&Z z1>qhdASNS(dniZjgX1s(F|i=r!v(}RLb#Iz#K;ff9w8v+(t~i16cBTxfryV15ZW3m z3zK^^N9;ZN7$<_Hk98tQ`Z$iLJzDDpkGIDQ2&?W15~8iZ(TNO6+qbL949VH&1rb%O zTIT;;@)x#7o&S-beDw1ICxRR56baDS(X8{F2()#f3kmR`aguEkB9}-=RCSj!ByVptmpKuX?n)TP(9Yc!tMdNx2iMD)( zfEY*U=M5a8*Vz?eri4Tt-6$Z;(M=Mft)S&M3kYk#EfS)wKz_G!giNrEZj%sg1q!{L zBlfi1;Y48NPL9~;++9utR%UU;enhz2iNMM|Q3P+Ru)5sK5j*MoIAY8DegQFJKr9b1 z1Xt~F_R4Ry6H&#gW&R%`e_;$%opfLe=V6Z6op?k-qS~6x5aELKsDwnVJjM}wi+G$P z_HaKTAyG$93W(_^c9EwfL|egdKP@0^xSx>_Z3V;qEJHGO($6s@YhOR-NQia>g+4DJ zEa|xtqTek?(k}=IOZr6#(eM8u>6bWSC;hU7Xe-F*6#-!xy~+`L0$y_>aP&Gy?8mq_ zBt(}ER*0x#)iVDpl0Uy#ETsIDPv^g1q__k9)&_2P6Xlhb|MJ3j}t+4mvbVRmgPBO z%WnkQWaX`AVmiq{1_%e9o;>K}b)5x^-sk19cuD^irN=8PLI$ z$wc&m9=+#8P?z_e2p)Pqav|jprrweeT{@MN=LX5ak^L#c z7aXx~gSzUO`wB0aUw{1fkBF}VxN}Za)jzeRAphHz5_yX zC|1I?Z+hP|Bxh&zgM{b?Al%=}NZ`|nLhe!pyL5jz5m@;#M1r!F!0yp6P6YD)NkEvS zesvXfB$D8`BR&)U#Vf&hWJb-siRRL|#sN|>}SnoAF~ zJDzKo5F>AF5fcQ&oPagVfA4C~f4WU?91RNJTk0MZU2;c7k@8mr!a1ekrn~1}4B>BW z&{M`442gcwkWybnyow>}y-2gs z1e|~?Z~{)if-2idKS8v_0-;!PqIP|;%fJ6hdWU6@l0M_v|zK#)jF8>`nF|`;vXn_Va1}HvgD^&41(%2gieVgHHq6 z`c3Tow@o~IdWZnQcd(BO2Nh_~$BlUD_yexA1M6L!BMt_5ZxKFGTAGstwablN<F5 zvj`ulQ;;22E8!ap9ez}I@DSliVI}A;+9sRsDT*Ash<)k6R#4s^C&9NOtRy7i)?jh) zd^C#QxQlS5oPe^>U>dik9H%JGfE*+1)rD7PqinQHEyH32=L9e9Kc+KR+xbq7+X!3J zXo=1=!WR>xd6cqLc&6B5lq1K^VRym;==oe>+3u2}1YaQ-tOCamM!4%^rDr8irxqTd zVf;<-)r~MF!f7XTPz2*C68tyYkS$mI^4nm&{%_#oX;+7|tGVq$rsz2uPKll&Sn0{H zP3-0-zPti^Rr(}aGCjg={o|h&7K?LJ9g(`u2S*^su3`63)yb9g#ERQ|qzT?9*cLUs zG79Ty$w%?jDT)gayjAN>ylCRt*7Kjgw&@Gj Mw_br>fqz+npZKUl4gdfE literal 0 HcmV?d00001 diff --git a/CGW2PE.NTX b/CGW2PE.NTX new file mode 100644 index 0000000000000000000000000000000000000000..628746af5d82cb274818d6925e0d9273e4bd15d4 GIT binary patch literal 12288 zcmeI&_m|^V6$fy61{MNYdRba{47*{LtS4&rcp(gUWX)KtY&>_@>4xvMU|A3$QfqV7zj|b{M2wVIN}|qzeq;oC>iSivG?cR2<(l( z|MLhOuzc&Jb)j{Ib*=R;>p)|pabDw+#+8lh8vkyrEcKVpU%GVZs-^3f_AMV-PM0rO zzI^%WWxn1=)5o!GyVoBnFH@6|8YgPqSy6njIuBI~Ri`smj{@b`s2p22#%(LIAyZaf*NEQ({6D(G()G4V81tw}`x9E4fc+=+%gl?>xuMZkJ0 zs`ga%PpB+N!*H0Z^HHr&)mBA41ytJ^(}@(HEZNEQ73x@hGAc9n6-U5&3@Y#Vq}yB6 z)?-1fJ6SZ`rr91$;+R&>>8L&emD@`un~T(wP?_1DYl~2=qi+5`m(Irdzcm^uw-WUf z&SeHY8u*nUR;X@p4oqy2?B=*?1W$ zGuNdu+4yc$Vm5vll+H$f!AkW8RAQce2$h&;A4DatR3AVku2k;_CFkt>P?=Gk%h`9L z5_9%lpyZsr6qT5>??q+iaV}@SkIEl*qgZXxiab*}{s2`ARlc|swZsombx`HyS)qOe zs^gT(EG~umF)E*HmSfShYUEX$fb|np>!3`xa&--;qc$khtz2D;$}M{Qop4IsZS2O3eSyqcUSZ zm;YCj3c6W1pl34Gc863ECnI{;=u?#(s$P@@1gxXUfI`C zi7UGgN?zGps48)fE4v3u&LJ07r7g@MLbZ;%`Trm~o0%Wq#9*0cCL1?UnTRNr$;Jnu z60^|;CD++!qY~?E2bGw!Td2gG4N-~fe-D+o{&VP?QI+$56O|eJx%|IBDlz}h0VU^u z80MQ{v*UM3f(RDE>Il5khN{p^cP>Ip?Do}ECy%LlhU9ScuN7w66>DhK| zJ)Fg#1gzJBl4IiapyZgiNUIyTOWYfkIFF~vsx`fr@TMungg&D<+xtMtv%Q2$ob3iG zakg&?N}g>(wT`;^|2;aJ87*4>!vU3WlxUQ*S+T3i-MKj^Il2y_5~FJZN{+4*pycSf z538}hx2SeZyU81>D1tCow?*akvVxR-*KOSimCtLHH4a;#=BHhQLI-ogxk6+Dz{Yp>|Qj->TaMM>b*)%P&_!Ey<#$s)fu2XciOM4xE<@r zIRdIx#6&p=`7hkoEkM!T9!tgov$~ExwtR;SiN~{uo3QDdL{)S4d z68?%xtP%*-I`-Fm|Nm<`n;BENy8HzyS{w7X@p=`_-^uH_{w1nb5QntLRu8_k-=OMj zr`=usUVkcC{RNavyR9WHSpUY5vmQlsJmj-%*Lx%O6m!bG@W0 z!=XpwkD%Iiu4aaVfb}O-Uan>?fz|b>biWonq5T2LbXe*Z^*D@gwS&v)o-W_~=eiu*dKvWhF}HyvKw>C5O-zDqRwMsvG_dvnbr#^d!( z`jlfY*4a0HHtxOuGc$Az&5()c|LymGr`1{i>7nsCbcN;je-^)$q=)}E!Z>(~-(Apy z#3u^H?-GUY5>fI0KvHIJTzE@Jj~mBHnSDvF8);v1cBhKU`kRp|cP|$2yi!?zYgWZG nj?=*>4pZe@%Cde>%2Yza{tRt!{1+=IKN#;Fdn0h8j=+Ba2GoyD literal 0 HcmV?d00001 diff --git a/CGW2PO.NTX b/CGW2PO.NTX new file mode 100644 index 0000000000000000000000000000000000000000..8a6673e32d763cecf425d853aada599c4d175da8 GIT binary patch literal 240640 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