home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2002 December / DPPCPRO1202.ISO / Full / Capital / Remote / System / fengine.sys < prev    next >
Encoding:
Text File  |  2002-08-12  |  30.5 KB  |  1,201 lines

  1.  
  2. BEGIN EDIT STTRND
  3.     if #SAME(@old_chtype,STTRNH.CHTYPE)
  4.         SUB SAVE_OLD_QUANTITIES
  5.     endif
  6. END
  7.  
  8. BEGIN NEW STTRND
  9.     ; always set the following for all new records
  10.     CDQTYREDEL=0
  11.     CDSTATUS=0
  12.     CDCREATION=$system_date
  13. END
  14.  
  15. BEGIN UPDATE STTRND
  16.     if #ISNEW(STTRND)
  17.         select STTRNH.CHTYPE
  18.         case "3","4","5","8"
  19.             ;3 stock receipt ,4 issue, 5 return, 8 adjustment
  20.             CDQTYREDEL=CDQUANTITY
  21.             select $FORMNAME
  22.             case "STOCKMOVEMENT","JOBMOVEMENTS"
  23.                 CDGOODSOVR=CDGOODSVAL
  24.             endselect
  25.         case "1"
  26.             ;purchase order
  27.             CDGOODSOVR=CDGOODSVAL
  28.         endselect
  29.     else
  30.         if #DIFF(@old_chtype,STTRNH.CHTYPE)
  31.             ;this is to handle the change of a transaction type (upgrade)
  32.             select @old_chtype
  33.             case "E","F"
  34.                 ;proforma, quotation
  35.                 CDCREATION=STTRNH.CHCREATION
  36.             endselect
  37.         endif
  38.     endif
  39.  
  40.     ;keep the following fields inline with the header record
  41.     CDTYPE=STTRNH.CHTYPE
  42.     CDTRANNO=STTRNH.CHTRANNO
  43.     CDDOCNO=STTRNH.CHDOCNO
  44.     CDTXNDATE=STTRNH.CHTXNDATE
  45.     CDRELDATE=STTRNH.CHRELDATE
  46.  
  47.     ; If the txn has a prod id then it must be valid. Look up it's
  48.     ; product type can be 0,1 or 2 else if no prod id then set it
  49.     ; to a type "3"
  50.     if #DIFF($FORMNAME,"INVOICEORDERS")
  51.         ; Not called from Invoice Orders form
  52.         if #SAME(CDPRODID,"")
  53.             CDPRODTYPE="3"    
  54.         else
  55.             FIND STNAME STNAME.CNPRODID=STTRND.CDPRODID
  56.             CDPRODTYPE=STNAME.CNPRODTYPE
  57.         endif
  58.     endif
  59.  
  60.     select CDTYPE
  61.     case "1"
  62.         ;purchase order
  63.         SUB UPDATE_STOCK_HEADER
  64.         if $FORMNAME="RECEIVEPORDER"
  65.             SUB SET_ORDER_TXN_STATUS
  66.         elseif CDSTATUS=0
  67.             CDQTYBAL=CDQUANTITY    
  68.             CDGOODSOVR=CDGOODSVAL
  69.         endif
  70.  
  71.     Case "3"
  72.         ;stock receipt
  73.         CDSTATUS=2
  74.         CDQTYBAL=0
  75.         CDQTYREDEL=CDQUANTITY
  76.         CDGOODSVAL=#multDBLSTOCURR(CDQUANTITY,CDPRICE)
  77.         CDGOODSOVR=CDGOODSVAL
  78.         SUB UPDATE_STOCK_HEADER
  79.  
  80.     Case "4"
  81.         ;stock issue
  82.         SUB SET_ORDER_TXN_STATUS
  83.         if $FORMNAME="INVOICEORDERS"
  84.             CDPRINTED="NP"
  85.         else
  86.             ;get VAT rate.
  87.             FIND VATRATES VATCODE=CDVATCODE
  88.             if #RECORDCOUNT("VATRATES")
  89.                 CDVATRATE=VATRATES.VATRATE
  90.             endif
  91.             if $FORMNAME="INVOICESTOCK"
  92.                 CDPRINTED=~CD_PRINTED
  93.             else
  94.                 CDQTYBAL=0
  95.                 select $FORMNAME
  96.                 case "STOCKMOVEMENT","JOBMOVEMENTS"
  97.                     CDGOODSVAL=#multDBLSTOCURR(CDQUANTITY,CDPRICE)
  98.                     CDGOODSOVR=CDGOODSVAL
  99.                 endselect 
  100.             endif
  101.             CDQTYREDEL=CDQUANTITY
  102.             if CDPRODTYPE="2"
  103.                 CDPROFIT=#sub(CDGOODSOVR,#multDBLSTOCURR(STNAME.CNAVGCOS,CDQUANTITY))
  104.             endif
  105.             SUB UPDATE_STOCK_HEADER
  106.         endif
  107.         select $FORMNAME
  108.         case "INVOICESTOCK"
  109.             ; don't want to create SL analysis records
  110.             ; for free text
  111.             if CDQUANTITY            
  112.                 NEW SLANDT
  113.                     SLANDT.SAANALHEAD=CDANALHEAD                
  114.                     SLANDT.SAREF=CDDOCNO
  115.                     SLANDT.SATYPE="I"
  116.                     SLANDT.SAVATCODE=CDVATCODE
  117.                     SLANDT.SAVALUE=CDGOODSOVR
  118.                     SLANDT.SAPRODID=CDPRODID
  119.                     SLANDT.SACOMMENT=~description
  120.                     SLANDT.SAQUANTITY=CDQUANTITY
  121.                                 SLANDT.SAJOBCODE=CDJOBCODE
  122.                     SLANDT.SAVATDATE=~VATDATE
  123.                         UPDATE SLANDT
  124.             endif
  125.         case "INVOICEORDERS"
  126.             ; don't want to create SL analysis records
  127.             ; for free text
  128.             if CDQUANTITY            
  129.                 NEW SLANDT
  130.                     SLANDT.SAANALHEAD=CDANALHEAD                
  131.                     SLANDT.SAREF=CDDOCNO
  132.                     SLANDT.SATYPE="I"
  133.                     SLANDT.SAVATCODE=CDVATCODE
  134.                     SLANDT.SAVATRATE=CDVATRATE
  135.                     SLANDT.SAVALUE=CDGOODSOVR
  136.                     SLANDT.SAPRODID=CDPRODID
  137.                     SLANDT.SACOMMENT=~description
  138.                     SLANDT.SAQUANTITY=CDQUANTITY
  139.                                 SLANDT.SAJOBCODE=CDJOBCODE
  140.                     SLANDT.SAVATDATE=~VATDATE
  141.                         UPDATE SLANDT
  142.             endif
  143.         endselect
  144.  
  145.     Case "5"
  146.         ;stock return
  147.         SUB SET_ORDER_TXN_STATUS
  148.         CDQTYBAL=0
  149.         select $FORMNAME
  150.         case "STOCKMOVEMENT","JOBMOVEMENTS"
  151.             CDGOODSVAL=#multDBLSTOCURR(CDQUANTITY,CDPRICE)
  152.             CDGOODSOVR=CDGOODSVAL
  153.         case "CREDITSTOCK"
  154.             CDPRINTED=~CD_PRINTED
  155.             ;get VAT rate.
  156.             FIND VATRATES VATCODE=CDVATCODE
  157.             CDVATRATE=VATRATES.VATRATE
  158.         endselect    
  159.         CDQTYREDEL=CDQUANTITY
  160.         if CDPRODTYPE="2"
  161.             CDPROFIT=#sub(CDGOODSOVR,#multDBLSTOCURR(STNAME.CNAVGCOS,CDQUANTITY))
  162.             CDPROFIT=#NEGATE(CDPROFIT)
  163.         endif
  164.         SUB UPDATE_STOCK_HEADER
  165.         select $FORMNAME
  166.         case "CREDITSTOCK"
  167.             if CDQUANTITY            
  168.                 NEW SLANDT
  169.                     SLANDT.SAANALHEAD=CDANALHEAD                
  170.                     SLANDT.SAREF=CDDOCNO
  171.                     SLANDT.SATYPE="C"
  172.                     SLANDT.SAVATCODE=CDVATCODE
  173.                     SLANDT.SAVALUE=#NEGATE(CDGOODSOVR)
  174.                     SLANDT.SAPRODID=CDPRODID
  175.                     SLANDT.SACOMMENT=~description
  176.                     SLANDT.SAQUANTITY=CDQUANTITY
  177.                                 SLANDT.SAJOBCODE=CDJOBCODE
  178.                     SLANDT.SAVATDATE=~VATDATE
  179.                         UPDATE SLANDT
  180.             endif
  181.         endselect
  182.  
  183.     Case "8"
  184.         ;stock adjustment
  185.         CDSTATUS=2
  186.         SUB UPDATE_STOCK_HEADER
  187.  
  188.     case "B"
  189.         ;Sales Order 
  190.         SUB UPDATE_STOCK_HEADER
  191.         if $FORMNAME="RELEASESORDER"
  192.             SUB SET_ORDER_TXN_STATUS
  193.                 elseif $FORMNAME="RELEASESORDERALL"
  194.             SUB SET_ORDER_TXN_STATUS
  195.         else
  196.             if CDSTATUS=0
  197.                 CDQTYBAL=CDQUANTITY    
  198.             endif            
  199.         endif
  200.  
  201.     case "E","F"
  202.         ; quote or proforma
  203.         CDQTYBAL=CDQUANTITY    
  204.  
  205.     endselect
  206. END
  207.  
  208. BEGIN DELETE STTRND
  209.     select CDPRODTYPE
  210.     case "2" 
  211.         ;full stock item (no effect on the stock file unless this type)
  212.         FIND STNAME CNPRODID=CDPRODID
  213.         EDIT STNAME
  214.         select CDTYPE
  215.         case "1"
  216.             ;purchase order
  217.             ;reduce the on order value by the transaction quantity
  218.             STNAME.CNQTYONORD=#subDOUBLES(STNAME.CNQTYONORD,CDQTYBAL)
  219.         case "B"
  220.             ;sales order
  221.             ;reduce the allocated value by the transaction quantity
  222.             STNAME.CNQTYALLOC=#subDOUBLES(STNAME.CNQTYALLOC,CDQTYBAL)
  223.         endselect
  224.         UPDATE STNAME
  225.     endselect
  226. END
  227.  
  228.  
  229. BEGIN NEW STTRNH
  230.     CHTRANNO=~txn_batch    
  231.     CHCREATION=$system_date
  232.     CHTYPE=~document_type
  233.     CHDOCNO=~document_number
  234.  
  235.     select CHTYPE
  236.     case "1","B","E","F"
  237.         ;purchase order, sales order, proforma, quotation
  238.         ;status is outstanding (still active)
  239.         CHSTATUS="0"
  240.     case "3"
  241.         ;receipt
  242.         CHTOTVALUE=0
  243.         CHSTATUS="2"
  244.  
  245.     case "4"
  246.         ;issue - it's status will depend which form is creating it
  247.         ;the stock movements or the release sales orders.
  248.         if $FORMNAME="RELEASESORDER"
  249.             CHSTATUS="0"
  250.         elseif $FORMNAME="RELEASESORDERALL"
  251.             CHSTATUS="0"
  252.         else
  253.             CHSTATUS="2"
  254.         endif
  255.  
  256.     default
  257.         CHSTATUS="2"
  258.  
  259.     endselect
  260. END
  261.  
  262. BEGIN EDIT STTRNH
  263.     ;type may change if type gets promoted
  264.     @old_chtype=CHTYPE
  265. END
  266.  
  267. BEGIN UPDATE STTRNH
  268.     if #ISEDIT(STTRNH)
  269.         if $FORMNAME="INVOICEORDERS"
  270.             ;if invoicing orders then...
  271.             ; update STTRNH for issue
  272.             CHORIGDOC=CHDOCNO
  273.             CHDOCNO=~document_number
  274.             CHSTATUS=2
  275.             CHPRINTED="NP"
  276.             ; create SLTRAN for issue
  277.             NEW SLTRAN
  278.                 SLTRAN.STACCOUNT=CHACCID
  279.                 SLTRAN.STTYPE="I"
  280.                 SLTRAN.STTXNDATE=CHTXNDATE
  281.                 SLTRAN.STREF=CHDOCNO
  282.                 SLTRAN.STVALUE=CHTOTVALUE
  283.                 SLTRAN.STVAT=CHTOTVAT
  284.                 SLTRAN.STDATEDUE=CHDUEDEL
  285.                 SLTRAN.STDSGDS=CHTOTTXGDS
  286.                 SLTRAN.STTRANNO=CHTRANNO
  287.                 if #SAME(SLTRAN.STVALUE,0)
  288.                     SLTRAN.STALLOC="P"
  289.                 endif
  290.                 SLTRAN.STCOMMENT=~comment
  291.                 SLTRAN.STFACTEF=CHFACTEF
  292.                 SLTRAN.STFACTST=CHFACTST
  293.                 SLTRAN.STFACTER=CHFACTER
  294.             UPDATE SLTRAN
  295.             ; loop and update all sttrnd's for the
  296.             ; current STTRNH being processed
  297.             FIND STTRND CDTRANNO=STTRNH.CHTRANNO
  298.             @numrecords=#RECORDCOUNT("STTRND")
  299.                 While #GREATER(@numrecords,0)
  300.                        EDIT STTRND
  301.                        UPDATE STTRND
  302.                 NEXT STTRND
  303.                 @numrecords=#SUB(@numrecords,1)
  304.             Wend
  305.             ;create carrage analysis (if there is any)
  306.             if CHNETCARR
  307.                 NEW SLANDT
  308.                     SLANDT.SAANALHEAD=CHCARRGRP                
  309.                     SLANDT.SAREF=CHDOCNO
  310.                     SLANDT.SATYPE="I"
  311.                     SLANDT.SAVATCODE=CHCARRVCD
  312.                     SLANDT.SAVATRATE=CHCARRVP
  313.                     SLANDT.SAVALUE=CHNETCARR
  314.                     SLANDT.SAVATDATE=~VATDATE
  315.                 UPDATE SLANDT
  316.             endif
  317.         endif
  318.         if #DIFF(@old_chtype,CHTYPE)
  319.             ;this is to handle the change of a transaction type (upgrade)
  320.             select @old_chtype
  321.             case "E","F"
  322.                 ;proforma, quotation
  323.                 CHORIGDOC=CHDOCNO
  324.                 CHDOCNO=~document_number
  325.                 CHTRANNO=~txn_batch    
  326.                 CHCREATION=$system_date
  327.                 CHSTATUS="0"    
  328.             endselect
  329.         endif
  330.     endif
  331.  
  332.     select CHTYPE
  333.     case "1"
  334.         ;purchase order
  335.         CHTOTGOODS=CHTOTVALUE
  336.         CHTOTTXGDS=CHTOTGOODS
  337.     
  338.     case "B","E","F"
  339.         ;sales order,proforma, quotation
  340.         CHCARRGRP=$system.CARRGRP
  341.         CHAREACODE=SLNAME.SNANAL2
  342.  
  343.     case "3"
  344.         if $FORMNAME="RECEIVEPORDER"
  345.             CHTXNDATE=$system_date
  346.         endif
  347.  
  348.     case "4"
  349.         ;issue/invoice
  350.         select $FORMNAME
  351.             case "RELEASESORDER","RELEASESORDERALL"
  352.             CHAREACODE=SLNAME.SNANAL2
  353.             CHSTATUS=0
  354.  
  355.         case "INVOICESTOCK"
  356.             CHCARRGRP=$system.CARRGRP
  357.             CHAREACODE=SLNAME.SNANAL2
  358.             ;set the invoice to complete
  359.             CHSTATUS=2
  360.             ;create invoice transaction
  361.             NEW SLTRAN
  362.                 SLTRAN.STACCOUNT=SLNAME.SNACCOUNT
  363.                 SLTRAN.STTYPE="I"
  364.                 SLTRAN.STREF=CHDOCNO
  365.                 SLTRAN.STVALUE=CHTOTVALUE
  366.                 SLTRAN.STVAT=CHTOTVAT
  367.                 SLTRAN.STDATEDUE=~date_due
  368.                 SLTRAN.STDSGDS=~discount_goods
  369.                 SLTRAN.STTRANNO=CHTRANNO
  370.                 if #SAME(SLTRAN.STVALUE,0)
  371.                     SLTRAN.STALLOC="P"
  372.                 endif
  373.                 SLTRAN.STCOMMENT=~comment
  374.                 SLTRAN.STFACTEF=CHFACTEF
  375.                 SLTRAN.STFACTST=CHFACTST
  376.                 SLTRAN.STFACTER=CHFACTER
  377.             UPDATE SLTRAN
  378.  
  379.             ;create carrage analysis (if there is any)
  380.             if CHNETCARR
  381.                 NEW SLANDT
  382.                     SLANDT.SAANALHEAD=$system.CARRGRP                
  383.                     SLANDT.SAREF=CHDOCNO
  384.                     SLANDT.SATYPE="I"
  385.                     SLANDT.SAVATCODE=CHCARRVCD
  386.                     SLANDT.SAVALUE=CHNETCARR
  387.                     SLANDT.SAVATDATE=~VATDATE
  388.                 UPDATE SLANDT
  389.             endif
  390.  
  391.             ;balance the nominal ledger
  392.             if #DIFF(CHTOTVALUE,0)
  393.                 #UPDATENOMINAL($system.DEBTCONT,"S/L","2",CHTOTVALUE,"","_","")
  394.             endif
  395.         endselect
  396.  
  397.     case "5"
  398.         ;return / credit
  399.         select $FORMNAME
  400.         case "CREDITSTOCK"
  401.             CHCARRGRP=$system.CARRGRP
  402.             CHAREACODE=SLNAME.SNANAL2
  403.             ;create credit transaction
  404.             NEW SLTRAN
  405.                 SLTRAN.STACCOUNT=SLNAME.SNACCOUNT
  406.                 SLTRAN.STTYPE="C"
  407.                 SLTRAN.STREF=CHDOCNO
  408.                 SLTRAN.STVALUE=#NEGATE(CHTOTVALUE)
  409.                 SLTRAN.STVAT=#NEGATE(CHTOTVAT)
  410.                 SLTRAN.STDSGDS=0
  411.                 SLTRAN.STTRANNO=CHTRANNO
  412.                 SLTRAN.STALLOC=~Alloc_Flag
  413.                 SLTRAN.STCOMMENT=~comment
  414.                 SLTRAN.STFACTEF=CHFACTEF
  415.                 SLTRAN.STFACTST=CHFACTST
  416.                 SLTRAN.STFACTER=CHFACTER
  417.             UPDATE SLTRAN
  418.     
  419.             ;create carrage analysis (if there is any)
  420.             if CHNETCARR
  421.                 NEW SLANDT
  422.                     SLANDT.SAANALHEAD=$system.CARRGRP                
  423.                     SLANDT.SAREF=CHDOCNO
  424.                     SLANDT.SATYPE="C"
  425.                     SLANDT.SAVATCODE=CHCARRVCD
  426.                     SLANDT.SAVALUE=#NEGATE(CHNETCARR)
  427.                     SLANDT.SAVATDATE=~VATDATE
  428.                 UPDATE SLANDT
  429.             endif
  430.     
  431.             ;balance the nominal ledger
  432.             if #DIFF(CHTOTVALUE,0)
  433.                 #UPDATENOMINAL($system.DEBTCONT,"S/L","2",#NEGATE(CHTOTVALUE),"","_","")
  434.             endif
  435.         endselect
  436.     endselect
  437. END
  438.  
  439.  
  440. ;### PURCHASE ###
  441.  
  442. BEGIN NEW PLTRAN
  443.     PTDATE=$system_date
  444.     PTTXNDATE=~txn_date
  445.     PTNOMBATCH=~nom_batch
  446. END
  447.  
  448. BEGIN UPDATE PLTRAN
  449.     @period=~period
  450.     if #ISNEW(PLTRAN)
  451.         PTOUTSTAND=PTVALUE
  452.         PTVATOUT=PTVAT
  453.         select PTTXNTYPE
  454.         case "A"
  455.             PTBATCHNO=@period
  456.             #UPDATENOMINAL(PTNOMACC,"P/L","3",PTVALUE,"","D","")
  457.         case "F"
  458.             PTBATCHNO=@period
  459.             #UPDATENOMINAL(PTNOMACC,"P/L","3",PTVALUE,"","D","")
  460.             SUB PL_VATCASH
  461.         case "P"
  462.             PTBATCHNO=@period
  463.             #UPDATENOMINAL(PTNOMACC,"P/L","3",PTVALUE,~nlcomment,"D","")
  464.             PTALCBATCH=~alloc_batch
  465.             SUB PL_VATCASH
  466.         case "D"
  467.             PTBATCHNO=@period
  468.             #UPDATENOMINAL(PTNOMACC,"P/L","3",PTVALUE,"","D","")
  469.             PTALCBATCH=~alloc_batch
  470.             SUB PL_VATCASH
  471.             PTVAT=0
  472.         case "I","C"
  473.             PTBATCHNO=~txn_batch
  474.             ;invoice or credit note
  475.             ;create the vat analysis record if required
  476.             if PTVAT
  477.                 NEW PLANDT
  478.                     PLANDT.PAVALUE=PTVAT
  479.                     if $system.vatmonths=0
  480.                         PLANDT.PAVATCODE="N"
  481.                     else
  482.                         PLANDT.PAVATCODE="0"
  483.                     endif
  484.                     PLANDT.PATXNTYPE=PTTXNTYPE
  485.                     PLANDT.PAREF=PTREF 
  486.                     PLANDT.PAVATDATE=~VATDATE   
  487.                 UPDATE PLANDT
  488.             endif
  489.             ; if Invoice has been created as 'pay-now'
  490.             ; then set alloc. batch no. and create VATREC
  491.             ; record if using VAT Cash accounting
  492.             if PLTRAN.PTALLOC="P"
  493.                 PTALCBATCH=~alloc_batch
  494.                 SUB PL_VATREC
  495.             endif
  496.         endselect
  497.         EDIT PLNAME
  498.             select PTTXNTYPE
  499.             case "I"
  500.                 if #DIFF(PLNAME.PNLASTINV,"")
  501.                     if #greater(#DATESERIAL(PTTXNDATE),#DATESERIAL(PLNAME.PNLASTINV))
  502.                         PLNAME.PNLASTINV=PTTXNDATE
  503.                     endif
  504.                 else
  505.                     PLNAME.PNLASTINV=PTTXNDATE
  506.                 endif
  507.                                 ;if equal, its a VAT only inv so dont update turnover
  508.                                 if #diff(PTVALUE,PTVAT)
  509.                                         #UPDATEACTUAL("PL",@period,#sub(PTVALUE,PTVAT))
  510.                                 endif
  511.             case "C"
  512.                                 #UPDATEACTUAL("PL",@period,#sub(PTVALUE,PTVAT))
  513.             endselect
  514.             PLNAME.PNCURRBAL=#sum(PLNAME.PNCURRBAL,PLTRAN.PTVALUE)
  515.         UPDATE PLNAME
  516.     else
  517.         select $FORMNAME
  518.         case "PLPAYMENTS"
  519.             ; if during manual allocations a transaction has only had its
  520.             ; disputed flag toggled, without being paid/allocated,
  521.             ; then we don't want to give it an allocation batch no.
  522.             ; or create a VATREC entry (if VAT cash accounting in use).
  523.             @disputedonly=~disputed_only
  524.             if #SAME(@disputedonly,"FALSE")
  525.                 PTALCBATCH=~alloc_batch
  526.                 SUB PL_VATREC
  527.             endif
  528.  
  529.         case "PLAUTOPAYM"
  530.             ; automatic payments, so set allocation batch no. and update
  531.             ; VAT cash if appropriate
  532.             PTALCBATCH=~alloc_batch
  533.             SUB PL_VATREC
  534.  
  535.         endselect
  536.     endif
  537.  
  538.     select PTALLOC
  539.     case "A","P"
  540.         ;if an allocated transaction then clear values
  541.         PTOUTSTAND=0
  542.         PTVATOUT=0
  543.     endselect
  544. END    
  545.  
  546. BEGIN NEW PLANDT
  547.     PACREATION=$system_date
  548.     PADATE=~txn_date
  549.     PANOMBATCH=~nom_batch
  550.     PABATCHNO=~txn_batch
  551.     PACODE=PLNAME.PNCODE
  552.     PAECMEMB=PLNAME.PNECMEMB
  553.     PACOUNTRY=PLNAME.PNCOUNTRY
  554.     PAVATREGNO=PLNAME.PNVATREGNO
  555. END
  556.  
  557. BEGIN UPDATE PLANDT
  558.     if #ISNEW(PLANDT)
  559.         ;first set fields
  560.         if PAVATCODE="0"
  561.             PAANALHEAD=$system.plvatcode
  562.         else
  563.             FIND VATRATES VATCODE=PLANDT.PAVATCODE
  564.             PAVATRATE=VATRATES.VATRATE
  565.         endif
  566.  
  567.         ;search and update header
  568.         FIND PLANHD PHCODE=PAANALHEAD
  569.         EDIT PLANHD
  570.             if #GREATER(#DATESERIAL(PADATE),#DATESERIAL($txn_eopdate))
  571.                 PLANHD.PHTURNADV=#SUM(PLANHD.PHTURNADV,PAVALUE)
  572.             else
  573.                 PLANHD.PHTURNOVER=#SUM(PLANHD.PHTURNOVER,PAVALUE)
  574.                 PLANHD.PHTODATE=#SUM(PLANHD.PHTODATE,PAVALUE)
  575.             endif
  576.         UPDATE PLANHD        
  577.         
  578.         ;now update the nominal
  579.         if PAVATCODE="0"
  580.             PANOMACC=$system.vatinput
  581.         else
  582.             PANOMACC=PLANHD.PHNLCODE
  583.         endif    
  584.         if $FORMNAME="PLINV"
  585.             if #DIFF(~jobcode,"")            
  586.                 #UPDATENOMINAL(PANOMACC,"P/L","3",PAVALUE,PACOMMENT,"C",~jobcode)
  587.             else
  588.                 #UPDATENOMINAL(PANOMACC,"P/L","3",PAVALUE,"","C","")
  589.             endif
  590.         else
  591.             #UPDATENOMINAL(PANOMACC,"P/L","3",PAVALUE,"","C","")
  592.         endif
  593.     endif
  594. END
  595.  
  596.  
  597. ;### SALES ###
  598.  
  599. BEGIN NEW SLTRAN
  600.     STCREATION=$system_date
  601.     STTXNDATE=~txn_date
  602.     STNOMBATCH=~nom_batch
  603. END
  604.  
  605. BEGIN UPDATE SLTRAN
  606.     @period=~period
  607.     if #ISNEW(SLTRAN)
  608.         if #GREATER(#DATESERIAL(STTXNDATE),#DATESERIAL($txn_eopdate))
  609.             STSTATE="N"
  610.         else
  611.             STSTATE="Y"
  612.         endif
  613.         STOUTSTAND=STVALUE
  614.         STVATOUT=STVAT
  615.         select STTYPE
  616.         case "A"
  617.             ST_IC_NO=@period
  618.             #UPDATENOMINAL(STNOMACC,"S/L","2",#NEGATE(STVALUE),"","B","")
  619.             STVAT=0
  620.         case "F"
  621.             ST_IC_NO=@period
  622.             #UPDATENOMINAL(STNOMACC,"S/L","2",#NEGATE(STVALUE),"","B","")
  623.             SUB SL_VATCASH
  624.         case "D"
  625.             ST_IC_NO=@period
  626.             #UPDATENOMINAL(STNOMACC,"S/L","2",#NEGATE(STVALUE),"","B","")
  627.             STALCBATCH=~alloc_batch
  628.             SUB SL_VATCASH
  629.             STVAT=0
  630.         case "R"
  631.             ST_IC_NO=@period
  632.             #UPDATENOMINAL(STNOMACC,"S/L","2",#NEGATE(STVALUE),~slipref,"B","")
  633.             STALCBATCH=~alloc_batch
  634.             SUB SL_VATCASH
  635.         case "I","C"
  636.             ST_IC_NO=~txn_batch
  637.             ;invoice or credit note
  638.             ;create the vat analysis record if required
  639.             if STVAT
  640.                 NEW SLANDT
  641.                     SLANDT.SAVALUE=STVAT
  642.                     if $system.vatmonths=0
  643.                         SLANDT.SAVATCODE="N"
  644.                     else
  645.                         SLANDT.SAVATCODE="0"
  646.                     endif
  647.                     SLANDT.SATYPE=STTYPE
  648.                     SLANDT.SAREF=STREF
  649.                     SLANDT.SAVATDATE=~VATDATE    
  650.                 UPDATE SLANDT
  651.             endif
  652.             ; if Invoice has been created as 'pay-now'
  653.             ; then set alloc. batch no. and create VATREC
  654.             ; record if using VAT Cash accounting
  655.             if $FORMNAME="SLINV"
  656.                 if SLTRAN.STALLOC="P" 
  657.                     STALCBATCH=~alloc_batch
  658.                     SUB SL_VATREC
  659.                 endif
  660.             endif
  661.         endselect
  662.         EDIT SLNAME
  663.             select STTYPE
  664.             case "I"
  665.                 if #DIFF(SLNAME.SNLASTINV,"")
  666.                     if #greater(#DATESERIAL(STTXNDATE),#DATESERIAL(SLNAME.SNLASTINV))
  667.                         SLNAME.SNLASTINV=STTXNDATE
  668.                     endif
  669.                 else
  670.                     SLNAME.SNLASTINV=STTXNDATE
  671.                 endif
  672.                 ;if equal, its a VAT only inv so dont update turnover
  673.                 if #diff(STVALUE,STVAT)
  674.                     #UPDATEACTUAL("SL",@period,#sub(STVALUE,STVAT))
  675.                 endif
  676.             case "C"
  677.                 #UPDATEACTUAL("SL",@period,#sub(STVALUE,STVAT))
  678.             endselect
  679.             SLNAME.SNBALANCE=#sum(SLNAME.SNBALANCE,SLTRAN.STVALUE)
  680.         UPDATE SLNAME
  681.     else
  682.         if $FORMNAME="SLRECEIPTS"
  683.             ; if during allocations a transaction has only had its
  684.             ; disputed flag toggled, without being paid/allocated,
  685.             ; then we don't want to give it an allocation batch no.
  686.             ; or create a VATREC entry (if VAT cash accounting in use).
  687.             @disputedonly=~disputed_only
  688.             if #SAME(@disputedonly,"FALSE")
  689.                 STODUETYPE=""
  690.                 STALCBATCH=~alloc_batch
  691.                 SUB SL_VATREC
  692.             endif
  693.         endif
  694.     endif
  695.     select STALLOC
  696.     case "A","P"
  697.         ;if an allocated transaction then clear values
  698.         STOUTSTAND=0
  699.         STVATOUT=0
  700.     endselect
  701. END    
  702.  
  703. BEGIN NEW SLANDT
  704.     SADATE=~txn_date
  705.     SACREATION=$system_date
  706.     SANOMBATCH=~nom_batch
  707.     SA_IC_NO=~txn_batch
  708.     SAACCOUNT=SLNAME.SNACCOUNT
  709.     SAECMEMB=SLNAME.SNECMEMB
  710.     SACOUNTRY=SLNAME.SNCOUNTRY
  711.     SAVATREGNO=SLNAME.SNVATREGNO
  712.     SASUBANAL=SLNAME.SNANAL2
  713. END
  714.  
  715. BEGIN UPDATE SLANDT
  716.     if #ISNEW(SLANDT)
  717.         ;if this is a vat analysis record 
  718.         ;we know exactly which account to set
  719.         ;the header to
  720.         if SAVATCODE="0"
  721.             SAANALHEAD=$system.slvatcode
  722.         elseif #DIFF($FORMNAME,"INVOICEORDERS")
  723.             FIND VATRATES VATCODE=SLANDT.SAVATCODE
  724.             SAVATRATE=VATRATES.VATRATE
  725.         endif
  726.  
  727.         ;update analysis header
  728.         FIND SLANHD SHCODE=SAANALHEAD
  729.         EDIT SLANHD
  730.             if #GREATER(#DATESERIAL(SADATE),#DATESERIAL($txn_eopdate))
  731.                 SLANHD.SHTURNADV=#SUM(SLANHD.SHTURNADV,SAVALUE)
  732.             else
  733.                 SLANHD.SHTURNOVER=#SUM(SLANHD.SHTURNOVER,SAVALUE)
  734.                 SLANHD.SHTODATE=#SUM(SLANHD.SHTODATE,SAVALUE)
  735.             endif
  736.         UPDATE SLANHD        
  737.  
  738.         ;use the system parameters to determine which
  739.         ;is the correct nominal code when this
  740.         ;is a vat transaction
  741.         if SAVATCODE="0"
  742.             SANOMACC=$system.vatoutput
  743.         else
  744.             SANOMACC=SLANHD.SHNOMINAL
  745.         endif
  746.         if #DIFF(SAVALUE,0)
  747.             select $FORMNAME
  748.             case "SLINV","INVOICESTOCK","CREDITSTOCK","INVOICEORDERS"
  749.                 if SAVATCODE="0"
  750.                     #UPDATENOMINAL(SANOMACC,"S/L","2",#NEGATE(SAVALUE),"","A","")
  751.                 elseif #DIFF(~jobcode,"")            
  752.                     #UPDATENOMINAL(SANOMACC,"S/L","2",#NEGATE(SAVALUE),SACOMMENT,"A",~jobcode)
  753.                 else
  754.                     #UPDATENOMINAL(SANOMACC,"S/L","2",#NEGATE(SAVALUE),"","A","")
  755.                 endif
  756.             default
  757.                 #UPDATENOMINAL(SANOMACC,"S/L","2",#NEGATE(SAVALUE),"","A","")
  758.             endselect
  759.         else
  760.             SANOMBATCH=""
  761.         endif
  762.     endif
  763. END
  764.  
  765.  
  766.  
  767. ;#### NOMINAL ####
  768. BEGIN EDIT NLTRAN
  769.     @oldntvalue=NTVALUE
  770. END
  771. BEGIN UPDATE NLTRAN
  772.     ;if creating a new nltran record
  773.     ;update the nominal account balance
  774.     if #ISNEW(NLTRAN)
  775.         NTENTRYNO=~nom_batch
  776.         NTPOSTDATE=$system_date
  777.         NTTXNDATE=~txn_date
  778.     endif
  779.     
  780.     FIND NLNAME NNACCOUNT=NTCODE
  781.     EDIT NLNAME
  782.         if #ISNEW(NLTRAN)
  783.             NTRECONCIL=NLNAME.NNACCTYPE
  784.             #UPDATEACTUAL("NL",~nom_batch,NTVALUE)
  785.         else
  786.             #UPDATEACTUAL("NL",~nom_batch,#sub(NTVALUE,@oldntvalue))
  787.         endif
  788.     UPDATE NLNAME
  789.  
  790.     select $FORMNAME
  791.     case "CASHBOOK","POSTJOURNAL"
  792.         FIND VATRATES VATCODE=NTVATCODE
  793.         if #RECORDCOUNT("VATRATES")
  794.             NTVATRATE=VATRATES.VATRATE
  795.         endif
  796.     endselect
  797.  
  798. END
  799.  
  800. BEGIN UPDATE NLJRNL
  801.     NLJRNL.NJENTRYNO=~nom_batch
  802.     NLJRNL.NJDATE=$system_date
  803.     NLJRNL.NJPRINTED=""
  804.     Select NLJRNL.NJTYPE
  805.     case "2"
  806.         NLJRNL.NJNARATIVE="Sales-Posting"
  807.     case "3"
  808.         NLJRNL.NJNARATIVE="Purchase-Posting"
  809.     endselect
  810. END
  811.  
  812.  
  813. ;##### FUNCTIONS ######
  814. SUB CALC_AVERAGE_COST
  815.     ;adding to stock - average out the cost price
  816.     if #GREATER(0,STNAME.CNQTYINST)
  817.         if #GREATER(STTRND.CDPRICE,0)
  818.             if STTRND.CDTYPE="5"
  819.                 STNAME.CNAVGCOS=STNAME.CNCOSPRICE
  820.             else
  821.                 STNAME.CNAVGCOS=STTRND.CDPRICE
  822.             endif
  823.         endif
  824.     else
  825.         @stval=#multDOUBLES(STNAME.CNAVGCOS,STNAME.CNQTYINST)
  826.         if STTRND.CDTYPE="5"
  827.             @ordval=#multDOUBLES(STNAME.CNCOSPRICE,STTRND.CDQUANTITY)
  828.         else
  829.             @ordval=#multDOUBLES(STTRND.CDPRICE,STTRND.CDQUANTITY)
  830.         endif
  831.         @totval=#sumDOUBLES(@stval,@ordval)
  832.         @newqty=#sumDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
  833.         STNAME.CNAVGCOS=#RoundSTOCKPRICE(#divDOUBLES(@totval,@newqty))            
  834.     endif
  835. END
  836.  
  837. SUB SET_ORDER_TXN_STATUS
  838.     select $FORMNAME
  839.         case "RECEIVEPORDER","RELEASESORDER","RELEASESORDERALL"
  840.         if STTRND.CDTYPE="4"
  841.             ;issue awaiting invoicing
  842.             STTRND.CDSTATUS=0
  843.         else
  844.             ;product only,full stock item
  845.             if #GREATER(STTRND.CDQTYBAL,0)
  846.                 ;part received/released order
  847.                 STTRND.CDSTATUS=1
  848.             else
  849.                 ;completed order transaction
  850.                 STTRND.CDSTATUS=2
  851.                 ;Note: If balance is not left on order we mark status 
  852.                 ;as completed but we must additionally restore the 
  853.                 ;discarded balance (for use elsewhere).
  854.                 STTRND.CDQTYBAL=~CD_QTYBAL
  855.             endif
  856.         endif
  857.     
  858.     case "STOCKMOVEMENT","JOBMOVEMENTS"
  859.         ; postings made using these forms are always
  860.         ; immediately fully satisfied.
  861.         STTRND.CDSTATUS=2
  862.  
  863.     case "INVOICESTOCK","CREDITSTOCK"
  864.         ; ask calling prog for status as it depends
  865.         ; if it's printed real time or by batch
  866.         STTRND.CDSTATUS=~CD_STATUS
  867.  
  868.     case "INVOICEORDERS"
  869.         ; when a released order becomes invoiced 
  870.         ; it's issues are now fully satisfied.
  871.         STTRND.CDSTATUS=1
  872.     endselect
  873. END
  874.  
  875.  
  876. SUB SAVE_OLD_QUANTITIES
  877.     ;store the transaction quantity and balance for use
  878.     ;in the stock update routines.
  879.     @old_cdquantity=STTRND.CDQUANTITY    
  880.     @old_cdqtybal=STTRND.CDQTYBAL
  881. END
  882.  
  883. SUB UPDATE_STOCK_HEADER
  884.  
  885.     ;if this is a new transaction then there are no old
  886.     ;quantities to be saved so ensure that the temporary
  887.     ;variables are cleared.
  888.     if #ISNEW(STTRND)
  889.         @old_cdquantity=0
  890.         @old_cdqtybal=0
  891.     endif
  892.  
  893.     select STTRND.CDPRODTYPE
  894.     case "1"
  895.         ;product only issue
  896.         select STTRND.CDTYPE
  897.         case "4","5"
  898.             EDIT STNAME
  899.             STNAME.CNLASTISS=STTRND.CDTXNDATE
  900.             if #GREATER(#DATEDIFFERENCE(STNAME.CNLASTISS,$TXN_EOPDATE),0)
  901.                 if STTRND.CDTYPE="4"
  902.                     STNAME.CNQTYISSAD=#sumDOUBLES(STNAME.CNQTYISSAD,STTRND.CDQUANTITY)
  903.                 else
  904.                     STNAME.CNQTYISSAD=#subDOUBLES(STNAME.CNQTYISSAD,STTRND.CDQUANTITY)
  905.                 endif
  906.             else
  907.                 if STTRND.CDTYPE="4"
  908.                     STNAME.CNQTYISS0=#sumDOUBLES(STNAME.CNQTYISS0,STTRND.CDQUANTITY)
  909.                 else
  910.                     STNAME.CNQTYISS0=#subDOUBLES(STNAME.CNQTYISS0,STTRND.CDQUANTITY)
  911.                 endif
  912.             endif
  913.             UPDATE STNAME
  914.         endselect
  915.  
  916.     case "2"
  917.         ;full stock item processing
  918.         EDIT STNAME
  919.         select STTRND.CDTYPE
  920.         case "1"
  921.             ;purchase order
  922.             if $FORMNAME="POSTPORDER"
  923.                 ;create/edit part
  924.                 ;if this is an edit @old_cdquantity will have to be
  925.                 ;removed from the stock allocated quantity before
  926.                 ;adding on the new value.
  927.                 STNAME.CNQTYONORD=#subDOUBLES(STNAME.CNQTYONORD,@old_cdquantity)
  928.                 ;now uplift the allocated quantity by the value of
  929.                 ;the transaction.
  930.                 STNAME.CNQTYONORD=#sumDOUBLES(STNAME.CNQTYONORD,STTRND.CDQUANTITY)
  931.             else
  932.                 ;receipt part
  933.                 ;reduce the on order value by the latest received value
  934.                 STNAME.CNQTYONORD=#subDOUBLES(STNAME.CNQTYONORD,@old_cdqtybal)
  935.                 if $FORMNAME="DELETEPORDER"
  936.                     ;do nothing
  937.                 else
  938.                     STNAME.CNQTYONORD=#sumDOUBLES(STNAME.CNQTYONORD,STTRND.CDQTYBAL)
  939.                 endif
  940.             endif
  941.  
  942.         Case "3"
  943.             ;stock receipt
  944.             SUB CALC_AVERAGE_COST
  945.             if #DIFF(STTRND.CDPRICE,0)
  946.                 if $FORMNAME="RECEIVEPORDER"
  947.                     @update_cost=~UPDATE_COST
  948.                     if #DIFF(@update_cost,0)
  949.                         STNAME.CNCOSPRICE=STTRND.CDPRICE
  950.                     endif
  951.                 endif
  952.                 if $FORMNAME="STOCKMOVEMENT"
  953.                     STNAME.CNCOSPRICE=STTRND.CDPRICE
  954.                 endif
  955.             endif
  956.             STNAME.CNQTYINST=#sumDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
  957.  
  958.         Case "4"
  959.             ;stock issue
  960.             STNAME.CNQTYINST=#subDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
  961.             if $FORMNAME="RELEASESORDER"
  962.                 STNAME.CNLASTISS=STTRNH.CHRELDATE
  963.                         elseif $FORMNAME="RELEASESORDERALL"
  964.                 STNAME.CNLASTISS=STTRNH.CHRELDATE
  965.             else
  966.                 STNAME.CNLASTISS=STTRND.CDTXNDATE
  967.             endif
  968.             if #GREATER(#DATEDIFFERENCE(STNAME.CNLASTISS,$TXN_EOPDATE),0)
  969.                 STNAME.CNQTYISSAD=#sumDOUBLES(STNAME.CNQTYISSAD,STTRND.CDQUANTITY)
  970.             else
  971.                 STNAME.CNQTYISS0=#sumDOUBLES(STNAME.CNQTYISS0,STTRND.CDQUANTITY)
  972.             endif            
  973.  
  974.         Case "5"
  975.             ;stock return
  976.             SUB CALC_AVERAGE_COST
  977.             STNAME.CNQTYINST=#sumDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
  978.             if #GREATER(#DATEDIFFERENCE(STTRND.CDTXNDATE,$TXN_EOPDATE),0)
  979.                 STNAME.CNQTYISSAD=#subDOUBLES(STNAME.CNQTYISSAD,STTRND.CDQUANTITY)
  980.             else
  981.                 STNAME.CNQTYISS0=#subDOUBLES(STNAME.CNQTYISS0,STTRND.CDQUANTITY)
  982.             endif            
  983.  
  984.         Case "8"
  985.             ;stock adjustment
  986.             if #GREATER(STTRND.CDQUANTITY,0)
  987.                 SUB CALC_AVERAGE_COST            
  988.             endif
  989.             STNAME.CNQTYINST=#sumDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
  990.  
  991.         case "B"
  992.             ;Sales Order 
  993.             if $FORMNAME="POSTSORDER"
  994.                 ;if this is an edit @old_cdquantity will have to be
  995.                 ;removed from the stock allocated quantity before
  996.                 ;adding on the new value.
  997.                 ;do NOT reduce allocated quantity on upgrading a quotation.
  998.                 if #SAME(@old_chtype,STTRNH.CHTYPE)
  999.                     STNAME.CNQTYALLOC=#subDOUBLES(STNAME.CNQTYALLOC,@old_cdquantity)
  1000.                 endif
  1001.                 ;now uplift the allocated quantity by the value of
  1002.                 ;the transaction.
  1003.                 STNAME.CNQTYALLOC=#sumDOUBLES(STNAME.CNQTYALLOC,STTRND.CDQUANTITY)
  1004.             else
  1005.                 ;released sales order
  1006.                 ;reduce the on alloc value by the latest released value
  1007.                 STNAME.CNQTYALLOC=#subDOUBLES(STNAME.CNQTYALLOC,@old_cdqtybal)
  1008.                 STNAME.CNQTYALLOC=#sumDOUBLES(STNAME.CNQTYALLOC,STTRND.CDQTYBAL)
  1009.             endif
  1010.  
  1011.         endselect
  1012.         UPDATE STNAME
  1013.     endselect
  1014. END
  1015.  
  1016. SUB SL_VATCASH
  1017.     ; create the VATCASH record for current SL transaction
  1018.     ; if using a VAT Cash accounting company.
  1019.     if $system.vat_cash="Y"
  1020.         if #DIFF(SLTRAN.STVATCODE,"N")
  1021.             with VATCASH
  1022.             ; Using VAT cash accounting
  1023.             ; Calculate VAT proportion of receipt.
  1024.             ; If creating an allocated receipt or a 
  1025.             ; discount (identified by having a blank
  1026.             ; VAT code) then set VAT values to zero.
  1027.             if #SAME(SLTRAN.STVATCODE,"")
  1028.                 SLTRAN.STVAT=0
  1029.                 SLTRAN.STVATOUT=0
  1030.                 SLTRAN.STVATRATE=0
  1031.             else
  1032.                 FIND VATRATES VATCODE=SLTRAN.STVATCODE
  1033.                 if VATRATES.VATRATE
  1034.                     SLTRAN.STVAT=#ROUND(#SUB(SLTRAN.STVALUE,#DIV(SLTRAN.STVALUE,#SUM(1,#DIV(VATRATES.VATRATE,100)))))
  1035.                     SLTRAN.STVATOUT=SLTRAN.STVAT
  1036.                     SLTRAN.STVATRATE=VATRATES.VATRATE
  1037.                 endif
  1038.             endif
  1039.             NEW VATCASH
  1040.                 VCMODULE="S"
  1041.                 VCACCOUNT=SLTRAN.STACCOUNT
  1042.                 VCTYPE=SLTRAN.STTYPE
  1043.                 VCREF=SLTRAN.STREF
  1044.                 VCDATE=SLTRAN.STTXNDATE
  1045.                 VCVALUE=#NEGATE(SLTRAN.STVALUE)
  1046.                 VCVAT=#NEGATE(SLTRAN.STVAT)
  1047.                 ; if we posted an allocated receipt
  1048.                 ; then set the VCVAT value
  1049.                 ; to that set within the form.
  1050.                 ; (this also applies for receipts created
  1051.                 ;  via 'pay-now' invoices)
  1052.                 if SLTRAN.STTYPE="R"
  1053.                     if SLTRAN.STALLOC="A"
  1054.                         if #SAME(SLTRAN.STVATCODE,"")
  1055.                             VCVAT=~VATADJUSTMENT
  1056.                         endif
  1057.                     endif    
  1058.                 endif
  1059.                 VCALLOC=SLTRAN.STVATCODE
  1060.                 if #DIFF(SLTRAN.STVATCODE,"")
  1061.                     VCVATRATE=VATRATES.VATRATE
  1062.                 endif
  1063.                 ; must additionally create a VATREC record if the
  1064.                 ; current new tran. has also been allocated.
  1065.                 if SLTRAN.STALLOC="A"
  1066.                     SUB SL_VATREC
  1067.                 endif
  1068.             UPDATE VATCASH
  1069.             endwith
  1070.         endif
  1071.     endif
  1072. END
  1073.  
  1074. SUB PL_VATCASH
  1075.     ; create the VATCASH record for current PL transaction
  1076.     ; if using a VAT Cash accounting company.
  1077.     if $system.vat_cash="Y"
  1078.         if #DIFF(PLTRAN.PTVATCODE,"N")
  1079.             with VATCASH
  1080.             ; Using VAT cash accounting
  1081.             ; Calculate VAT proportion of payment.
  1082.             ; If creating an allocated payment or a 
  1083.             ; discount (identified by having a blank
  1084.             ; VAT code) then set VAT values to zero.
  1085.             if #SAME(PLTRAN.PTVATCODE,"")
  1086.                 PLTRAN.PTVAT=0
  1087.                 PLTRAN.PTVATOUT=0
  1088.                 PLTRAN.PTVATRATE=0
  1089.             else
  1090.                 FIND VATRATES VATCODE=PLTRAN.PTVATCODE
  1091.                 if VATRATES.VATRATE
  1092.                     PLTRAN.PTVAT=#ROUND(#SUB(PLTRAN.PTVALUE,#DIV(PLTRAN.PTVALUE,#SUM(1,#DIV(VATRATES.VATRATE,100)))))
  1093.                     PLTRAN.PTVATOUT=PLTRAN.PTVAT
  1094.                     PLTRAN.PTVATRATE=VATRATES.VATRATE
  1095.                 endif
  1096.             endif
  1097.             NEW VATCASH
  1098.                 VCMODULE="P"
  1099.                 VCACCOUNT=PLTRAN.PTCODE
  1100.                 VCTYPE=PLTRAN.PTTXNTYPE
  1101.                 VCREF=PLTRAN.PTREF
  1102.                 VCDATE=PLTRAN.PTTXNDATE
  1103.                 VCVALUE=#NEGATE(PLTRAN.PTVALUE)
  1104.                 VCVAT=#NEGATE(PLTRAN.PTVAT)
  1105.                 ; if we posted an allocated payment
  1106.                 ; then set the VCVAT value
  1107.                 ; to that set within the form.
  1108.                 ; (this also applies for payments created
  1109.                 ;  via 'pay-now' invoices)
  1110.                 if PLTRAN.PTTXNTYPE="P"
  1111.                     if PLTRAN.PTALLOC="A"
  1112.                         if #SAME(PLTRAN.PTVATCODE,"")
  1113.                             VCVAT=~VATADJUSTMENT
  1114.                         endif
  1115.                     endif    
  1116.                 endif
  1117.                 VCALLOC=PLTRAN.PTVATCODE
  1118.                 if #DIFF(PLTRAN.PTVATCODE,"")
  1119.                     VCVATRATE=VATRATES.VATRATE
  1120.                 endif
  1121.                 ; must additionally create a VATREC record if the
  1122.                 ; current new tran. has also been allocated.
  1123.                 if PLTRAN.PTALLOC="A"
  1124.                     SUB PL_VATREC
  1125.                 endif
  1126.             UPDATE VATCASH
  1127.             endwith
  1128.         endif
  1129.     endif
  1130. END
  1131.  
  1132. SUB SL_VATREC
  1133.     ; create the VATREC record for current SL transaction
  1134.     ; if using a VAT Cash accounting company.
  1135.     if $system.vat_cash="Y"
  1136.         with VATREC
  1137.         NEW VATREC
  1138.             VRMODULE="S"
  1139.             VRACCOUNT=SLTRAN.STACCOUNT
  1140.             VRTYPE=SLTRAN.STTYPE
  1141.             VRREF=SLTRAN.STREF
  1142.             VRDATE=SLTRAN.STTXNDATE
  1143.             VRALCDATE=$system_date
  1144.             VRALCBATCH=~alloc_batch
  1145.             VRVALUE=~valuepaid
  1146.             VRVAT=~vatpaid
  1147.             ; if we posted an allocated receipt (not the
  1148.             ; overpayment part) then set the VRVAT value
  1149.             ; to that set within the form.
  1150.             if SLTRAN.STTYPE="R"
  1151.                 if SLTRAN.STALLOC="A"
  1152.                     if #SAME(SLTRAN.STVATCODE,"")
  1153.                         VRVAT=~VATADJUSTMENT
  1154.                         VRVAT=#NEGATE(VRVAT)
  1155.                     endif
  1156.                 endif    
  1157.             endif
  1158.             VRVATCODE=SLTRAN.STVATCODE
  1159.             if #DIFF(SLTRAN.STVATCODE,"")
  1160.                 VRVATRATE=SLTRAN.STVATRATE
  1161.             endif
  1162.         UPDATE VATREC
  1163.         endwith
  1164.     endif
  1165. END
  1166.  
  1167. SUB PL_VATREC
  1168.     ; create the VATREC record for current PL transaction
  1169.     ; if using a VAT Cash accounting company.
  1170.     if $system.vat_cash="Y"
  1171.         with VATREC
  1172.         NEW VATREC
  1173.             VRMODULE="P"
  1174.             VRACCOUNT=PLTRAN.PTCODE
  1175.             VRTYPE=PLTRAN.PTTXNTYPE
  1176.             VRREF=PLTRAN.PTREF
  1177.             VRDATE=PLTRAN.PTTXNDATE
  1178.             VRALCDATE=$system_date
  1179.             VRALCBATCH=~alloc_batch
  1180.             VRVALUE=~valuepaid
  1181.             VRVAT=~vatpaid
  1182.             ; if we posted an allocated payment
  1183.             ; then set the VRVAT value
  1184.             ; to that set within the form.
  1185.             if PLTRAN.PTTXNTYPE="P"
  1186.                 if PLTRAN.PTALLOC="A"
  1187.                     if #SAME(PLTRAN.PTVATCODE,"")
  1188.                         VRVAT=~VATADJUSTMENT
  1189.                         VRVAT=#NEGATE(VRVAT)
  1190.                     endif
  1191.                 endif    
  1192.             endif
  1193.             VRVATCODE=PLTRAN.PTVATCODE
  1194.             if #DIFF(PLTRAN.PTVATCODE,"")
  1195.                 VRVATRATE=PLTRAN.PTVATRATE
  1196.             endif
  1197.         UPDATE VATREC
  1198.         endwith
  1199.     endif
  1200. END
  1201.