home *** CD-ROM | disk | FTP | other *** search
Text File | 2002-08-12 | 30.5 KB | 1,201 lines |
-
- BEGIN EDIT STTRND
- if #SAME(@old_chtype,STTRNH.CHTYPE)
- SUB SAVE_OLD_QUANTITIES
- endif
- END
-
- BEGIN NEW STTRND
- ; always set the following for all new records
- CDQTYREDEL=0
- CDSTATUS=0
- CDCREATION=$system_date
- END
-
- BEGIN UPDATE STTRND
- if #ISNEW(STTRND)
- select STTRNH.CHTYPE
- case "3","4","5","8"
- ;3 stock receipt ,4 issue, 5 return, 8 adjustment
- CDQTYREDEL=CDQUANTITY
- select $FORMNAME
- case "STOCKMOVEMENT","JOBMOVEMENTS"
- CDGOODSOVR=CDGOODSVAL
- endselect
- case "1"
- ;purchase order
- CDGOODSOVR=CDGOODSVAL
- endselect
- else
- if #DIFF(@old_chtype,STTRNH.CHTYPE)
- ;this is to handle the change of a transaction type (upgrade)
- select @old_chtype
- case "E","F"
- ;proforma, quotation
- CDCREATION=STTRNH.CHCREATION
- endselect
- endif
- endif
-
- ;keep the following fields inline with the header record
- CDTYPE=STTRNH.CHTYPE
- CDTRANNO=STTRNH.CHTRANNO
- CDDOCNO=STTRNH.CHDOCNO
- CDTXNDATE=STTRNH.CHTXNDATE
- CDRELDATE=STTRNH.CHRELDATE
-
- ; If the txn has a prod id then it must be valid. Look up it's
- ; product type can be 0,1 or 2 else if no prod id then set it
- ; to a type "3"
- if #DIFF($FORMNAME,"INVOICEORDERS")
- ; Not called from Invoice Orders form
- if #SAME(CDPRODID,"")
- CDPRODTYPE="3"
- else
- FIND STNAME STNAME.CNPRODID=STTRND.CDPRODID
- CDPRODTYPE=STNAME.CNPRODTYPE
- endif
- endif
-
- select CDTYPE
- case "1"
- ;purchase order
- SUB UPDATE_STOCK_HEADER
- if $FORMNAME="RECEIVEPORDER"
- SUB SET_ORDER_TXN_STATUS
- elseif CDSTATUS=0
- CDQTYBAL=CDQUANTITY
- CDGOODSOVR=CDGOODSVAL
- endif
-
- Case "3"
- ;stock receipt
- CDSTATUS=2
- CDQTYBAL=0
- CDQTYREDEL=CDQUANTITY
- CDGOODSVAL=#multDBLSTOCURR(CDQUANTITY,CDPRICE)
- CDGOODSOVR=CDGOODSVAL
- SUB UPDATE_STOCK_HEADER
-
- Case "4"
- ;stock issue
- SUB SET_ORDER_TXN_STATUS
- if $FORMNAME="INVOICEORDERS"
- CDPRINTED="NP"
- else
- ;get VAT rate.
- FIND VATRATES VATCODE=CDVATCODE
- if #RECORDCOUNT("VATRATES")
- CDVATRATE=VATRATES.VATRATE
- endif
- if $FORMNAME="INVOICESTOCK"
- CDPRINTED=~CD_PRINTED
- else
- CDQTYBAL=0
- select $FORMNAME
- case "STOCKMOVEMENT","JOBMOVEMENTS"
- CDGOODSVAL=#multDBLSTOCURR(CDQUANTITY,CDPRICE)
- CDGOODSOVR=CDGOODSVAL
- endselect
- endif
- CDQTYREDEL=CDQUANTITY
- if CDPRODTYPE="2"
- CDPROFIT=#sub(CDGOODSOVR,#multDBLSTOCURR(STNAME.CNAVGCOS,CDQUANTITY))
- endif
- SUB UPDATE_STOCK_HEADER
- endif
- select $FORMNAME
- case "INVOICESTOCK"
- ; don't want to create SL analysis records
- ; for free text
- if CDQUANTITY
- NEW SLANDT
- SLANDT.SAANALHEAD=CDANALHEAD
- SLANDT.SAREF=CDDOCNO
- SLANDT.SATYPE="I"
- SLANDT.SAVATCODE=CDVATCODE
- SLANDT.SAVALUE=CDGOODSOVR
- SLANDT.SAPRODID=CDPRODID
- SLANDT.SACOMMENT=~description
- SLANDT.SAQUANTITY=CDQUANTITY
- SLANDT.SAJOBCODE=CDJOBCODE
- SLANDT.SAVATDATE=~VATDATE
- UPDATE SLANDT
- endif
- case "INVOICEORDERS"
- ; don't want to create SL analysis records
- ; for free text
- if CDQUANTITY
- NEW SLANDT
- SLANDT.SAANALHEAD=CDANALHEAD
- SLANDT.SAREF=CDDOCNO
- SLANDT.SATYPE="I"
- SLANDT.SAVATCODE=CDVATCODE
- SLANDT.SAVATRATE=CDVATRATE
- SLANDT.SAVALUE=CDGOODSOVR
- SLANDT.SAPRODID=CDPRODID
- SLANDT.SACOMMENT=~description
- SLANDT.SAQUANTITY=CDQUANTITY
- SLANDT.SAJOBCODE=CDJOBCODE
- SLANDT.SAVATDATE=~VATDATE
- UPDATE SLANDT
- endif
- endselect
-
- Case "5"
- ;stock return
- SUB SET_ORDER_TXN_STATUS
- CDQTYBAL=0
- select $FORMNAME
- case "STOCKMOVEMENT","JOBMOVEMENTS"
- CDGOODSVAL=#multDBLSTOCURR(CDQUANTITY,CDPRICE)
- CDGOODSOVR=CDGOODSVAL
- case "CREDITSTOCK"
- CDPRINTED=~CD_PRINTED
- ;get VAT rate.
- FIND VATRATES VATCODE=CDVATCODE
- CDVATRATE=VATRATES.VATRATE
- endselect
- CDQTYREDEL=CDQUANTITY
- if CDPRODTYPE="2"
- CDPROFIT=#sub(CDGOODSOVR,#multDBLSTOCURR(STNAME.CNAVGCOS,CDQUANTITY))
- CDPROFIT=#NEGATE(CDPROFIT)
- endif
- SUB UPDATE_STOCK_HEADER
- select $FORMNAME
- case "CREDITSTOCK"
- if CDQUANTITY
- NEW SLANDT
- SLANDT.SAANALHEAD=CDANALHEAD
- SLANDT.SAREF=CDDOCNO
- SLANDT.SATYPE="C"
- SLANDT.SAVATCODE=CDVATCODE
- SLANDT.SAVALUE=#NEGATE(CDGOODSOVR)
- SLANDT.SAPRODID=CDPRODID
- SLANDT.SACOMMENT=~description
- SLANDT.SAQUANTITY=CDQUANTITY
- SLANDT.SAJOBCODE=CDJOBCODE
- SLANDT.SAVATDATE=~VATDATE
- UPDATE SLANDT
- endif
- endselect
-
- Case "8"
- ;stock adjustment
- CDSTATUS=2
- SUB UPDATE_STOCK_HEADER
-
- case "B"
- ;Sales Order
- SUB UPDATE_STOCK_HEADER
- if $FORMNAME="RELEASESORDER"
- SUB SET_ORDER_TXN_STATUS
- elseif $FORMNAME="RELEASESORDERALL"
- SUB SET_ORDER_TXN_STATUS
- else
- if CDSTATUS=0
- CDQTYBAL=CDQUANTITY
- endif
- endif
-
- case "E","F"
- ; quote or proforma
- CDQTYBAL=CDQUANTITY
-
- endselect
- END
-
- BEGIN DELETE STTRND
- select CDPRODTYPE
- case "2"
- ;full stock item (no effect on the stock file unless this type)
- FIND STNAME CNPRODID=CDPRODID
- EDIT STNAME
- select CDTYPE
- case "1"
- ;purchase order
- ;reduce the on order value by the transaction quantity
- STNAME.CNQTYONORD=#subDOUBLES(STNAME.CNQTYONORD,CDQTYBAL)
- case "B"
- ;sales order
- ;reduce the allocated value by the transaction quantity
- STNAME.CNQTYALLOC=#subDOUBLES(STNAME.CNQTYALLOC,CDQTYBAL)
- endselect
- UPDATE STNAME
- endselect
- END
-
-
- BEGIN NEW STTRNH
- CHTRANNO=~txn_batch
- CHCREATION=$system_date
- CHTYPE=~document_type
- CHDOCNO=~document_number
-
- select CHTYPE
- case "1","B","E","F"
- ;purchase order, sales order, proforma, quotation
- ;status is outstanding (still active)
- CHSTATUS="0"
- case "3"
- ;receipt
- CHTOTVALUE=0
- CHSTATUS="2"
-
- case "4"
- ;issue - it's status will depend which form is creating it
- ;the stock movements or the release sales orders.
- if $FORMNAME="RELEASESORDER"
- CHSTATUS="0"
- elseif $FORMNAME="RELEASESORDERALL"
- CHSTATUS="0"
- else
- CHSTATUS="2"
- endif
-
- default
- CHSTATUS="2"
-
- endselect
- END
-
- BEGIN EDIT STTRNH
- ;type may change if type gets promoted
- @old_chtype=CHTYPE
- END
-
- BEGIN UPDATE STTRNH
- if #ISEDIT(STTRNH)
- if $FORMNAME="INVOICEORDERS"
- ;if invoicing orders then...
- ; update STTRNH for issue
- CHORIGDOC=CHDOCNO
- CHDOCNO=~document_number
- CHSTATUS=2
- CHPRINTED="NP"
- ; create SLTRAN for issue
- NEW SLTRAN
- SLTRAN.STACCOUNT=CHACCID
- SLTRAN.STTYPE="I"
- SLTRAN.STTXNDATE=CHTXNDATE
- SLTRAN.STREF=CHDOCNO
- SLTRAN.STVALUE=CHTOTVALUE
- SLTRAN.STVAT=CHTOTVAT
- SLTRAN.STDATEDUE=CHDUEDEL
- SLTRAN.STDSGDS=CHTOTTXGDS
- SLTRAN.STTRANNO=CHTRANNO
- if #SAME(SLTRAN.STVALUE,0)
- SLTRAN.STALLOC="P"
- endif
- SLTRAN.STCOMMENT=~comment
- SLTRAN.STFACTEF=CHFACTEF
- SLTRAN.STFACTST=CHFACTST
- SLTRAN.STFACTER=CHFACTER
- UPDATE SLTRAN
- ; loop and update all sttrnd's for the
- ; current STTRNH being processed
- FIND STTRND CDTRANNO=STTRNH.CHTRANNO
- @numrecords=#RECORDCOUNT("STTRND")
- While #GREATER(@numrecords,0)
- EDIT STTRND
- UPDATE STTRND
- NEXT STTRND
- @numrecords=#SUB(@numrecords,1)
- Wend
- ;create carrage analysis (if there is any)
- if CHNETCARR
- NEW SLANDT
- SLANDT.SAANALHEAD=CHCARRGRP
- SLANDT.SAREF=CHDOCNO
- SLANDT.SATYPE="I"
- SLANDT.SAVATCODE=CHCARRVCD
- SLANDT.SAVATRATE=CHCARRVP
- SLANDT.SAVALUE=CHNETCARR
- SLANDT.SAVATDATE=~VATDATE
- UPDATE SLANDT
- endif
- endif
- if #DIFF(@old_chtype,CHTYPE)
- ;this is to handle the change of a transaction type (upgrade)
- select @old_chtype
- case "E","F"
- ;proforma, quotation
- CHORIGDOC=CHDOCNO
- CHDOCNO=~document_number
- CHTRANNO=~txn_batch
- CHCREATION=$system_date
- CHSTATUS="0"
- endselect
- endif
- endif
-
- select CHTYPE
- case "1"
- ;purchase order
- CHTOTGOODS=CHTOTVALUE
- CHTOTTXGDS=CHTOTGOODS
-
- case "B","E","F"
- ;sales order,proforma, quotation
- CHCARRGRP=$system.CARRGRP
- CHAREACODE=SLNAME.SNANAL2
-
- case "3"
- if $FORMNAME="RECEIVEPORDER"
- CHTXNDATE=$system_date
- endif
-
- case "4"
- ;issue/invoice
- select $FORMNAME
- case "RELEASESORDER","RELEASESORDERALL"
- CHAREACODE=SLNAME.SNANAL2
- CHSTATUS=0
-
- case "INVOICESTOCK"
- CHCARRGRP=$system.CARRGRP
- CHAREACODE=SLNAME.SNANAL2
- ;set the invoice to complete
- CHSTATUS=2
- ;create invoice transaction
- NEW SLTRAN
- SLTRAN.STACCOUNT=SLNAME.SNACCOUNT
- SLTRAN.STTYPE="I"
- SLTRAN.STREF=CHDOCNO
- SLTRAN.STVALUE=CHTOTVALUE
- SLTRAN.STVAT=CHTOTVAT
- SLTRAN.STDATEDUE=~date_due
- SLTRAN.STDSGDS=~discount_goods
- SLTRAN.STTRANNO=CHTRANNO
- if #SAME(SLTRAN.STVALUE,0)
- SLTRAN.STALLOC="P"
- endif
- SLTRAN.STCOMMENT=~comment
- SLTRAN.STFACTEF=CHFACTEF
- SLTRAN.STFACTST=CHFACTST
- SLTRAN.STFACTER=CHFACTER
- UPDATE SLTRAN
-
- ;create carrage analysis (if there is any)
- if CHNETCARR
- NEW SLANDT
- SLANDT.SAANALHEAD=$system.CARRGRP
- SLANDT.SAREF=CHDOCNO
- SLANDT.SATYPE="I"
- SLANDT.SAVATCODE=CHCARRVCD
- SLANDT.SAVALUE=CHNETCARR
- SLANDT.SAVATDATE=~VATDATE
- UPDATE SLANDT
- endif
-
- ;balance the nominal ledger
- if #DIFF(CHTOTVALUE,0)
- #UPDATENOMINAL($system.DEBTCONT,"S/L","2",CHTOTVALUE,"","_","")
- endif
- endselect
-
- case "5"
- ;return / credit
- select $FORMNAME
- case "CREDITSTOCK"
- CHCARRGRP=$system.CARRGRP
- CHAREACODE=SLNAME.SNANAL2
- ;create credit transaction
- NEW SLTRAN
- SLTRAN.STACCOUNT=SLNAME.SNACCOUNT
- SLTRAN.STTYPE="C"
- SLTRAN.STREF=CHDOCNO
- SLTRAN.STVALUE=#NEGATE(CHTOTVALUE)
- SLTRAN.STVAT=#NEGATE(CHTOTVAT)
- SLTRAN.STDSGDS=0
- SLTRAN.STTRANNO=CHTRANNO
- SLTRAN.STALLOC=~Alloc_Flag
- SLTRAN.STCOMMENT=~comment
- SLTRAN.STFACTEF=CHFACTEF
- SLTRAN.STFACTST=CHFACTST
- SLTRAN.STFACTER=CHFACTER
- UPDATE SLTRAN
-
- ;create carrage analysis (if there is any)
- if CHNETCARR
- NEW SLANDT
- SLANDT.SAANALHEAD=$system.CARRGRP
- SLANDT.SAREF=CHDOCNO
- SLANDT.SATYPE="C"
- SLANDT.SAVATCODE=CHCARRVCD
- SLANDT.SAVALUE=#NEGATE(CHNETCARR)
- SLANDT.SAVATDATE=~VATDATE
- UPDATE SLANDT
- endif
-
- ;balance the nominal ledger
- if #DIFF(CHTOTVALUE,0)
- #UPDATENOMINAL($system.DEBTCONT,"S/L","2",#NEGATE(CHTOTVALUE),"","_","")
- endif
- endselect
- endselect
- END
-
-
- ;### PURCHASE ###
-
- BEGIN NEW PLTRAN
- PTDATE=$system_date
- PTTXNDATE=~txn_date
- PTNOMBATCH=~nom_batch
- END
-
- BEGIN UPDATE PLTRAN
- @period=~period
- if #ISNEW(PLTRAN)
- PTOUTSTAND=PTVALUE
- PTVATOUT=PTVAT
- select PTTXNTYPE
- case "A"
- PTBATCHNO=@period
- #UPDATENOMINAL(PTNOMACC,"P/L","3",PTVALUE,"","D","")
- case "F"
- PTBATCHNO=@period
- #UPDATENOMINAL(PTNOMACC,"P/L","3",PTVALUE,"","D","")
- SUB PL_VATCASH
- case "P"
- PTBATCHNO=@period
- #UPDATENOMINAL(PTNOMACC,"P/L","3",PTVALUE,~nlcomment,"D","")
- PTALCBATCH=~alloc_batch
- SUB PL_VATCASH
- case "D"
- PTBATCHNO=@period
- #UPDATENOMINAL(PTNOMACC,"P/L","3",PTVALUE,"","D","")
- PTALCBATCH=~alloc_batch
- SUB PL_VATCASH
- PTVAT=0
- case "I","C"
- PTBATCHNO=~txn_batch
- ;invoice or credit note
- ;create the vat analysis record if required
- if PTVAT
- NEW PLANDT
- PLANDT.PAVALUE=PTVAT
- if $system.vatmonths=0
- PLANDT.PAVATCODE="N"
- else
- PLANDT.PAVATCODE="0"
- endif
- PLANDT.PATXNTYPE=PTTXNTYPE
- PLANDT.PAREF=PTREF
- PLANDT.PAVATDATE=~VATDATE
- UPDATE PLANDT
- endif
- ; if Invoice has been created as 'pay-now'
- ; then set alloc. batch no. and create VATREC
- ; record if using VAT Cash accounting
- if PLTRAN.PTALLOC="P"
- PTALCBATCH=~alloc_batch
- SUB PL_VATREC
- endif
- endselect
- EDIT PLNAME
- select PTTXNTYPE
- case "I"
- if #DIFF(PLNAME.PNLASTINV,"")
- if #greater(#DATESERIAL(PTTXNDATE),#DATESERIAL(PLNAME.PNLASTINV))
- PLNAME.PNLASTINV=PTTXNDATE
- endif
- else
- PLNAME.PNLASTINV=PTTXNDATE
- endif
- ;if equal, its a VAT only inv so dont update turnover
- if #diff(PTVALUE,PTVAT)
- #UPDATEACTUAL("PL",@period,#sub(PTVALUE,PTVAT))
- endif
- case "C"
- #UPDATEACTUAL("PL",@period,#sub(PTVALUE,PTVAT))
- endselect
- PLNAME.PNCURRBAL=#sum(PLNAME.PNCURRBAL,PLTRAN.PTVALUE)
- UPDATE PLNAME
- else
- select $FORMNAME
- case "PLPAYMENTS"
- ; if during manual allocations a transaction has only had its
- ; disputed flag toggled, without being paid/allocated,
- ; then we don't want to give it an allocation batch no.
- ; or create a VATREC entry (if VAT cash accounting in use).
- @disputedonly=~disputed_only
- if #SAME(@disputedonly,"FALSE")
- PTALCBATCH=~alloc_batch
- SUB PL_VATREC
- endif
-
- case "PLAUTOPAYM"
- ; automatic payments, so set allocation batch no. and update
- ; VAT cash if appropriate
- PTALCBATCH=~alloc_batch
- SUB PL_VATREC
-
- endselect
- endif
-
- select PTALLOC
- case "A","P"
- ;if an allocated transaction then clear values
- PTOUTSTAND=0
- PTVATOUT=0
- endselect
- END
-
- BEGIN NEW PLANDT
- PACREATION=$system_date
- PADATE=~txn_date
- PANOMBATCH=~nom_batch
- PABATCHNO=~txn_batch
- PACODE=PLNAME.PNCODE
- PAECMEMB=PLNAME.PNECMEMB
- PACOUNTRY=PLNAME.PNCOUNTRY
- PAVATREGNO=PLNAME.PNVATREGNO
- END
-
- BEGIN UPDATE PLANDT
- if #ISNEW(PLANDT)
- ;first set fields
- if PAVATCODE="0"
- PAANALHEAD=$system.plvatcode
- else
- FIND VATRATES VATCODE=PLANDT.PAVATCODE
- PAVATRATE=VATRATES.VATRATE
- endif
-
- ;search and update header
- FIND PLANHD PHCODE=PAANALHEAD
- EDIT PLANHD
- if #GREATER(#DATESERIAL(PADATE),#DATESERIAL($txn_eopdate))
- PLANHD.PHTURNADV=#SUM(PLANHD.PHTURNADV,PAVALUE)
- else
- PLANHD.PHTURNOVER=#SUM(PLANHD.PHTURNOVER,PAVALUE)
- PLANHD.PHTODATE=#SUM(PLANHD.PHTODATE,PAVALUE)
- endif
- UPDATE PLANHD
-
- ;now update the nominal
- if PAVATCODE="0"
- PANOMACC=$system.vatinput
- else
- PANOMACC=PLANHD.PHNLCODE
- endif
- if $FORMNAME="PLINV"
- if #DIFF(~jobcode,"")
- #UPDATENOMINAL(PANOMACC,"P/L","3",PAVALUE,PACOMMENT,"C",~jobcode)
- else
- #UPDATENOMINAL(PANOMACC,"P/L","3",PAVALUE,"","C","")
- endif
- else
- #UPDATENOMINAL(PANOMACC,"P/L","3",PAVALUE,"","C","")
- endif
- endif
- END
-
-
- ;### SALES ###
-
- BEGIN NEW SLTRAN
- STCREATION=$system_date
- STTXNDATE=~txn_date
- STNOMBATCH=~nom_batch
- END
-
- BEGIN UPDATE SLTRAN
- @period=~period
- if #ISNEW(SLTRAN)
- if #GREATER(#DATESERIAL(STTXNDATE),#DATESERIAL($txn_eopdate))
- STSTATE="N"
- else
- STSTATE="Y"
- endif
- STOUTSTAND=STVALUE
- STVATOUT=STVAT
- select STTYPE
- case "A"
- ST_IC_NO=@period
- #UPDATENOMINAL(STNOMACC,"S/L","2",#NEGATE(STVALUE),"","B","")
- STVAT=0
- case "F"
- ST_IC_NO=@period
- #UPDATENOMINAL(STNOMACC,"S/L","2",#NEGATE(STVALUE),"","B","")
- SUB SL_VATCASH
- case "D"
- ST_IC_NO=@period
- #UPDATENOMINAL(STNOMACC,"S/L","2",#NEGATE(STVALUE),"","B","")
- STALCBATCH=~alloc_batch
- SUB SL_VATCASH
- STVAT=0
- case "R"
- ST_IC_NO=@period
- #UPDATENOMINAL(STNOMACC,"S/L","2",#NEGATE(STVALUE),~slipref,"B","")
- STALCBATCH=~alloc_batch
- SUB SL_VATCASH
- case "I","C"
- ST_IC_NO=~txn_batch
- ;invoice or credit note
- ;create the vat analysis record if required
- if STVAT
- NEW SLANDT
- SLANDT.SAVALUE=STVAT
- if $system.vatmonths=0
- SLANDT.SAVATCODE="N"
- else
- SLANDT.SAVATCODE="0"
- endif
- SLANDT.SATYPE=STTYPE
- SLANDT.SAREF=STREF
- SLANDT.SAVATDATE=~VATDATE
- UPDATE SLANDT
- endif
- ; if Invoice has been created as 'pay-now'
- ; then set alloc. batch no. and create VATREC
- ; record if using VAT Cash accounting
- if $FORMNAME="SLINV"
- if SLTRAN.STALLOC="P"
- STALCBATCH=~alloc_batch
- SUB SL_VATREC
- endif
- endif
- endselect
- EDIT SLNAME
- select STTYPE
- case "I"
- if #DIFF(SLNAME.SNLASTINV,"")
- if #greater(#DATESERIAL(STTXNDATE),#DATESERIAL(SLNAME.SNLASTINV))
- SLNAME.SNLASTINV=STTXNDATE
- endif
- else
- SLNAME.SNLASTINV=STTXNDATE
- endif
- ;if equal, its a VAT only inv so dont update turnover
- if #diff(STVALUE,STVAT)
- #UPDATEACTUAL("SL",@period,#sub(STVALUE,STVAT))
- endif
- case "C"
- #UPDATEACTUAL("SL",@period,#sub(STVALUE,STVAT))
- endselect
- SLNAME.SNBALANCE=#sum(SLNAME.SNBALANCE,SLTRAN.STVALUE)
- UPDATE SLNAME
- else
- if $FORMNAME="SLRECEIPTS"
- ; if during allocations a transaction has only had its
- ; disputed flag toggled, without being paid/allocated,
- ; then we don't want to give it an allocation batch no.
- ; or create a VATREC entry (if VAT cash accounting in use).
- @disputedonly=~disputed_only
- if #SAME(@disputedonly,"FALSE")
- STODUETYPE=""
- STALCBATCH=~alloc_batch
- SUB SL_VATREC
- endif
- endif
- endif
- select STALLOC
- case "A","P"
- ;if an allocated transaction then clear values
- STOUTSTAND=0
- STVATOUT=0
- endselect
- END
-
- BEGIN NEW SLANDT
- SADATE=~txn_date
- SACREATION=$system_date
- SANOMBATCH=~nom_batch
- SA_IC_NO=~txn_batch
- SAACCOUNT=SLNAME.SNACCOUNT
- SAECMEMB=SLNAME.SNECMEMB
- SACOUNTRY=SLNAME.SNCOUNTRY
- SAVATREGNO=SLNAME.SNVATREGNO
- SASUBANAL=SLNAME.SNANAL2
- END
-
- BEGIN UPDATE SLANDT
- if #ISNEW(SLANDT)
- ;if this is a vat analysis record
- ;we know exactly which account to set
- ;the header to
- if SAVATCODE="0"
- SAANALHEAD=$system.slvatcode
- elseif #DIFF($FORMNAME,"INVOICEORDERS")
- FIND VATRATES VATCODE=SLANDT.SAVATCODE
- SAVATRATE=VATRATES.VATRATE
- endif
-
- ;update analysis header
- FIND SLANHD SHCODE=SAANALHEAD
- EDIT SLANHD
- if #GREATER(#DATESERIAL(SADATE),#DATESERIAL($txn_eopdate))
- SLANHD.SHTURNADV=#SUM(SLANHD.SHTURNADV,SAVALUE)
- else
- SLANHD.SHTURNOVER=#SUM(SLANHD.SHTURNOVER,SAVALUE)
- SLANHD.SHTODATE=#SUM(SLANHD.SHTODATE,SAVALUE)
- endif
- UPDATE SLANHD
-
- ;use the system parameters to determine which
- ;is the correct nominal code when this
- ;is a vat transaction
- if SAVATCODE="0"
- SANOMACC=$system.vatoutput
- else
- SANOMACC=SLANHD.SHNOMINAL
- endif
- if #DIFF(SAVALUE,0)
- select $FORMNAME
- case "SLINV","INVOICESTOCK","CREDITSTOCK","INVOICEORDERS"
- if SAVATCODE="0"
- #UPDATENOMINAL(SANOMACC,"S/L","2",#NEGATE(SAVALUE),"","A","")
- elseif #DIFF(~jobcode,"")
- #UPDATENOMINAL(SANOMACC,"S/L","2",#NEGATE(SAVALUE),SACOMMENT,"A",~jobcode)
- else
- #UPDATENOMINAL(SANOMACC,"S/L","2",#NEGATE(SAVALUE),"","A","")
- endif
- default
- #UPDATENOMINAL(SANOMACC,"S/L","2",#NEGATE(SAVALUE),"","A","")
- endselect
- else
- SANOMBATCH=""
- endif
- endif
- END
-
-
-
- ;#### NOMINAL ####
- BEGIN EDIT NLTRAN
- @oldntvalue=NTVALUE
- END
- BEGIN UPDATE NLTRAN
- ;if creating a new nltran record
- ;update the nominal account balance
- if #ISNEW(NLTRAN)
- NTENTRYNO=~nom_batch
- NTPOSTDATE=$system_date
- NTTXNDATE=~txn_date
- endif
-
- FIND NLNAME NNACCOUNT=NTCODE
- EDIT NLNAME
- if #ISNEW(NLTRAN)
- NTRECONCIL=NLNAME.NNACCTYPE
- #UPDATEACTUAL("NL",~nom_batch,NTVALUE)
- else
- #UPDATEACTUAL("NL",~nom_batch,#sub(NTVALUE,@oldntvalue))
- endif
- UPDATE NLNAME
-
- select $FORMNAME
- case "CASHBOOK","POSTJOURNAL"
- FIND VATRATES VATCODE=NTVATCODE
- if #RECORDCOUNT("VATRATES")
- NTVATRATE=VATRATES.VATRATE
- endif
- endselect
-
- END
-
- BEGIN UPDATE NLJRNL
- NLJRNL.NJENTRYNO=~nom_batch
- NLJRNL.NJDATE=$system_date
- NLJRNL.NJPRINTED=""
- Select NLJRNL.NJTYPE
- case "2"
- NLJRNL.NJNARATIVE="Sales-Posting"
- case "3"
- NLJRNL.NJNARATIVE="Purchase-Posting"
- endselect
- END
-
-
- ;##### FUNCTIONS ######
- SUB CALC_AVERAGE_COST
- ;adding to stock - average out the cost price
- if #GREATER(0,STNAME.CNQTYINST)
- if #GREATER(STTRND.CDPRICE,0)
- if STTRND.CDTYPE="5"
- STNAME.CNAVGCOS=STNAME.CNCOSPRICE
- else
- STNAME.CNAVGCOS=STTRND.CDPRICE
- endif
- endif
- else
- @stval=#multDOUBLES(STNAME.CNAVGCOS,STNAME.CNQTYINST)
- if STTRND.CDTYPE="5"
- @ordval=#multDOUBLES(STNAME.CNCOSPRICE,STTRND.CDQUANTITY)
- else
- @ordval=#multDOUBLES(STTRND.CDPRICE,STTRND.CDQUANTITY)
- endif
- @totval=#sumDOUBLES(@stval,@ordval)
- @newqty=#sumDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
- STNAME.CNAVGCOS=#RoundSTOCKPRICE(#divDOUBLES(@totval,@newqty))
- endif
- END
-
- SUB SET_ORDER_TXN_STATUS
- select $FORMNAME
- case "RECEIVEPORDER","RELEASESORDER","RELEASESORDERALL"
- if STTRND.CDTYPE="4"
- ;issue awaiting invoicing
- STTRND.CDSTATUS=0
- else
- ;product only,full stock item
- if #GREATER(STTRND.CDQTYBAL,0)
- ;part received/released order
- STTRND.CDSTATUS=1
- else
- ;completed order transaction
- STTRND.CDSTATUS=2
- ;Note: If balance is not left on order we mark status
- ;as completed but we must additionally restore the
- ;discarded balance (for use elsewhere).
- STTRND.CDQTYBAL=~CD_QTYBAL
- endif
- endif
-
- case "STOCKMOVEMENT","JOBMOVEMENTS"
- ; postings made using these forms are always
- ; immediately fully satisfied.
- STTRND.CDSTATUS=2
-
- case "INVOICESTOCK","CREDITSTOCK"
- ; ask calling prog for status as it depends
- ; if it's printed real time or by batch
- STTRND.CDSTATUS=~CD_STATUS
-
- case "INVOICEORDERS"
- ; when a released order becomes invoiced
- ; it's issues are now fully satisfied.
- STTRND.CDSTATUS=1
- endselect
- END
-
-
- SUB SAVE_OLD_QUANTITIES
- ;store the transaction quantity and balance for use
- ;in the stock update routines.
- @old_cdquantity=STTRND.CDQUANTITY
- @old_cdqtybal=STTRND.CDQTYBAL
- END
-
- SUB UPDATE_STOCK_HEADER
-
- ;if this is a new transaction then there are no old
- ;quantities to be saved so ensure that the temporary
- ;variables are cleared.
- if #ISNEW(STTRND)
- @old_cdquantity=0
- @old_cdqtybal=0
- endif
-
- select STTRND.CDPRODTYPE
- case "1"
- ;product only issue
- select STTRND.CDTYPE
- case "4","5"
- EDIT STNAME
- STNAME.CNLASTISS=STTRND.CDTXNDATE
- if #GREATER(#DATEDIFFERENCE(STNAME.CNLASTISS,$TXN_EOPDATE),0)
- if STTRND.CDTYPE="4"
- STNAME.CNQTYISSAD=#sumDOUBLES(STNAME.CNQTYISSAD,STTRND.CDQUANTITY)
- else
- STNAME.CNQTYISSAD=#subDOUBLES(STNAME.CNQTYISSAD,STTRND.CDQUANTITY)
- endif
- else
- if STTRND.CDTYPE="4"
- STNAME.CNQTYISS0=#sumDOUBLES(STNAME.CNQTYISS0,STTRND.CDQUANTITY)
- else
- STNAME.CNQTYISS0=#subDOUBLES(STNAME.CNQTYISS0,STTRND.CDQUANTITY)
- endif
- endif
- UPDATE STNAME
- endselect
-
- case "2"
- ;full stock item processing
- EDIT STNAME
- select STTRND.CDTYPE
- case "1"
- ;purchase order
- if $FORMNAME="POSTPORDER"
- ;create/edit part
- ;if this is an edit @old_cdquantity will have to be
- ;removed from the stock allocated quantity before
- ;adding on the new value.
- STNAME.CNQTYONORD=#subDOUBLES(STNAME.CNQTYONORD,@old_cdquantity)
- ;now uplift the allocated quantity by the value of
- ;the transaction.
- STNAME.CNQTYONORD=#sumDOUBLES(STNAME.CNQTYONORD,STTRND.CDQUANTITY)
- else
- ;receipt part
- ;reduce the on order value by the latest received value
- STNAME.CNQTYONORD=#subDOUBLES(STNAME.CNQTYONORD,@old_cdqtybal)
- if $FORMNAME="DELETEPORDER"
- ;do nothing
- else
- STNAME.CNQTYONORD=#sumDOUBLES(STNAME.CNQTYONORD,STTRND.CDQTYBAL)
- endif
- endif
-
- Case "3"
- ;stock receipt
- SUB CALC_AVERAGE_COST
- if #DIFF(STTRND.CDPRICE,0)
- if $FORMNAME="RECEIVEPORDER"
- @update_cost=~UPDATE_COST
- if #DIFF(@update_cost,0)
- STNAME.CNCOSPRICE=STTRND.CDPRICE
- endif
- endif
- if $FORMNAME="STOCKMOVEMENT"
- STNAME.CNCOSPRICE=STTRND.CDPRICE
- endif
- endif
- STNAME.CNQTYINST=#sumDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
-
- Case "4"
- ;stock issue
- STNAME.CNQTYINST=#subDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
- if $FORMNAME="RELEASESORDER"
- STNAME.CNLASTISS=STTRNH.CHRELDATE
- elseif $FORMNAME="RELEASESORDERALL"
- STNAME.CNLASTISS=STTRNH.CHRELDATE
- else
- STNAME.CNLASTISS=STTRND.CDTXNDATE
- endif
- if #GREATER(#DATEDIFFERENCE(STNAME.CNLASTISS,$TXN_EOPDATE),0)
- STNAME.CNQTYISSAD=#sumDOUBLES(STNAME.CNQTYISSAD,STTRND.CDQUANTITY)
- else
- STNAME.CNQTYISS0=#sumDOUBLES(STNAME.CNQTYISS0,STTRND.CDQUANTITY)
- endif
-
- Case "5"
- ;stock return
- SUB CALC_AVERAGE_COST
- STNAME.CNQTYINST=#sumDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
- if #GREATER(#DATEDIFFERENCE(STTRND.CDTXNDATE,$TXN_EOPDATE),0)
- STNAME.CNQTYISSAD=#subDOUBLES(STNAME.CNQTYISSAD,STTRND.CDQUANTITY)
- else
- STNAME.CNQTYISS0=#subDOUBLES(STNAME.CNQTYISS0,STTRND.CDQUANTITY)
- endif
-
- Case "8"
- ;stock adjustment
- if #GREATER(STTRND.CDQUANTITY,0)
- SUB CALC_AVERAGE_COST
- endif
- STNAME.CNQTYINST=#sumDOUBLES(STNAME.CNQTYINST,STTRND.CDQUANTITY)
-
- case "B"
- ;Sales Order
- if $FORMNAME="POSTSORDER"
- ;if this is an edit @old_cdquantity will have to be
- ;removed from the stock allocated quantity before
- ;adding on the new value.
- ;do NOT reduce allocated quantity on upgrading a quotation.
- if #SAME(@old_chtype,STTRNH.CHTYPE)
- STNAME.CNQTYALLOC=#subDOUBLES(STNAME.CNQTYALLOC,@old_cdquantity)
- endif
- ;now uplift the allocated quantity by the value of
- ;the transaction.
- STNAME.CNQTYALLOC=#sumDOUBLES(STNAME.CNQTYALLOC,STTRND.CDQUANTITY)
- else
- ;released sales order
- ;reduce the on alloc value by the latest released value
- STNAME.CNQTYALLOC=#subDOUBLES(STNAME.CNQTYALLOC,@old_cdqtybal)
- STNAME.CNQTYALLOC=#sumDOUBLES(STNAME.CNQTYALLOC,STTRND.CDQTYBAL)
- endif
-
- endselect
- UPDATE STNAME
- endselect
- END
-
- SUB SL_VATCASH
- ; create the VATCASH record for current SL transaction
- ; if using a VAT Cash accounting company.
- if $system.vat_cash="Y"
- if #DIFF(SLTRAN.STVATCODE,"N")
- with VATCASH
- ; Using VAT cash accounting
- ; Calculate VAT proportion of receipt.
- ; If creating an allocated receipt or a
- ; discount (identified by having a blank
- ; VAT code) then set VAT values to zero.
- if #SAME(SLTRAN.STVATCODE,"")
- SLTRAN.STVAT=0
- SLTRAN.STVATOUT=0
- SLTRAN.STVATRATE=0
- else
- FIND VATRATES VATCODE=SLTRAN.STVATCODE
- if VATRATES.VATRATE
- SLTRAN.STVAT=#ROUND(#SUB(SLTRAN.STVALUE,#DIV(SLTRAN.STVALUE,#SUM(1,#DIV(VATRATES.VATRATE,100)))))
- SLTRAN.STVATOUT=SLTRAN.STVAT
- SLTRAN.STVATRATE=VATRATES.VATRATE
- endif
- endif
- NEW VATCASH
- VCMODULE="S"
- VCACCOUNT=SLTRAN.STACCOUNT
- VCTYPE=SLTRAN.STTYPE
- VCREF=SLTRAN.STREF
- VCDATE=SLTRAN.STTXNDATE
- VCVALUE=#NEGATE(SLTRAN.STVALUE)
- VCVAT=#NEGATE(SLTRAN.STVAT)
- ; if we posted an allocated receipt
- ; then set the VCVAT value
- ; to that set within the form.
- ; (this also applies for receipts created
- ; via 'pay-now' invoices)
- if SLTRAN.STTYPE="R"
- if SLTRAN.STALLOC="A"
- if #SAME(SLTRAN.STVATCODE,"")
- VCVAT=~VATADJUSTMENT
- endif
- endif
- endif
- VCALLOC=SLTRAN.STVATCODE
- if #DIFF(SLTRAN.STVATCODE,"")
- VCVATRATE=VATRATES.VATRATE
- endif
- ; must additionally create a VATREC record if the
- ; current new tran. has also been allocated.
- if SLTRAN.STALLOC="A"
- SUB SL_VATREC
- endif
- UPDATE VATCASH
- endwith
- endif
- endif
- END
-
- SUB PL_VATCASH
- ; create the VATCASH record for current PL transaction
- ; if using a VAT Cash accounting company.
- if $system.vat_cash="Y"
- if #DIFF(PLTRAN.PTVATCODE,"N")
- with VATCASH
- ; Using VAT cash accounting
- ; Calculate VAT proportion of payment.
- ; If creating an allocated payment or a
- ; discount (identified by having a blank
- ; VAT code) then set VAT values to zero.
- if #SAME(PLTRAN.PTVATCODE,"")
- PLTRAN.PTVAT=0
- PLTRAN.PTVATOUT=0
- PLTRAN.PTVATRATE=0
- else
- FIND VATRATES VATCODE=PLTRAN.PTVATCODE
- if VATRATES.VATRATE
- PLTRAN.PTVAT=#ROUND(#SUB(PLTRAN.PTVALUE,#DIV(PLTRAN.PTVALUE,#SUM(1,#DIV(VATRATES.VATRATE,100)))))
- PLTRAN.PTVATOUT=PLTRAN.PTVAT
- PLTRAN.PTVATRATE=VATRATES.VATRATE
- endif
- endif
- NEW VATCASH
- VCMODULE="P"
- VCACCOUNT=PLTRAN.PTCODE
- VCTYPE=PLTRAN.PTTXNTYPE
- VCREF=PLTRAN.PTREF
- VCDATE=PLTRAN.PTTXNDATE
- VCVALUE=#NEGATE(PLTRAN.PTVALUE)
- VCVAT=#NEGATE(PLTRAN.PTVAT)
- ; if we posted an allocated payment
- ; then set the VCVAT value
- ; to that set within the form.
- ; (this also applies for payments created
- ; via 'pay-now' invoices)
- if PLTRAN.PTTXNTYPE="P"
- if PLTRAN.PTALLOC="A"
- if #SAME(PLTRAN.PTVATCODE,"")
- VCVAT=~VATADJUSTMENT
- endif
- endif
- endif
- VCALLOC=PLTRAN.PTVATCODE
- if #DIFF(PLTRAN.PTVATCODE,"")
- VCVATRATE=VATRATES.VATRATE
- endif
- ; must additionally create a VATREC record if the
- ; current new tran. has also been allocated.
- if PLTRAN.PTALLOC="A"
- SUB PL_VATREC
- endif
- UPDATE VATCASH
- endwith
- endif
- endif
- END
-
- SUB SL_VATREC
- ; create the VATREC record for current SL transaction
- ; if using a VAT Cash accounting company.
- if $system.vat_cash="Y"
- with VATREC
- NEW VATREC
- VRMODULE="S"
- VRACCOUNT=SLTRAN.STACCOUNT
- VRTYPE=SLTRAN.STTYPE
- VRREF=SLTRAN.STREF
- VRDATE=SLTRAN.STTXNDATE
- VRALCDATE=$system_date
- VRALCBATCH=~alloc_batch
- VRVALUE=~valuepaid
- VRVAT=~vatpaid
- ; if we posted an allocated receipt (not the
- ; overpayment part) then set the VRVAT value
- ; to that set within the form.
- if SLTRAN.STTYPE="R"
- if SLTRAN.STALLOC="A"
- if #SAME(SLTRAN.STVATCODE,"")
- VRVAT=~VATADJUSTMENT
- VRVAT=#NEGATE(VRVAT)
- endif
- endif
- endif
- VRVATCODE=SLTRAN.STVATCODE
- if #DIFF(SLTRAN.STVATCODE,"")
- VRVATRATE=SLTRAN.STVATRATE
- endif
- UPDATE VATREC
- endwith
- endif
- END
-
- SUB PL_VATREC
- ; create the VATREC record for current PL transaction
- ; if using a VAT Cash accounting company.
- if $system.vat_cash="Y"
- with VATREC
- NEW VATREC
- VRMODULE="P"
- VRACCOUNT=PLTRAN.PTCODE
- VRTYPE=PLTRAN.PTTXNTYPE
- VRREF=PLTRAN.PTREF
- VRDATE=PLTRAN.PTTXNDATE
- VRALCDATE=$system_date
- VRALCBATCH=~alloc_batch
- VRVALUE=~valuepaid
- VRVAT=~vatpaid
- ; if we posted an allocated payment
- ; then set the VRVAT value
- ; to that set within the form.
- if PLTRAN.PTTXNTYPE="P"
- if PLTRAN.PTALLOC="A"
- if #SAME(PLTRAN.PTVATCODE,"")
- VRVAT=~VATADJUSTMENT
- VRVAT=#NEGATE(VRVAT)
- endif
- endif
- endif
- VRVATCODE=PLTRAN.PTVATCODE
- if #DIFF(PLTRAN.PTVATCODE,"")
- VRVATRATE=PLTRAN.PTVATRATE
- endif
- UPDATE VATREC
- endwith
- endif
- END
-