//********************************************************************
//
// NAME      : marcscript.txt
// BEDEUTUNG : Plausibility checks
// VERSION   : $Name:  $
// CVS-ID    : $Revision: 1.1.1.1 $
// UPDATE    : $Date: 2013/04/29 11:21:04 $ by $Author: frankb $
// BEMERKUNG : MARC21-Version
//
//********************************************************************

// SCRIPT TO CHECK RECORDS 

proc CHECK

// WARNING MESSAGES (USER CAN IGNORE)

choose substr(&P1,3)

// TITLE
   case = "TIT"

   if :260 = "" and :FMT = "BK" then
      message "1160"
   end if

   if :310 = "" and :FMT= "SE" then
      message "1161"
   end if

   if :245/"00" # "" or :245/"01" # "" and :FMT = "BK" then
    if :700 = "" and :710 = "" then 
      message "1162" 
    end if
   end if

   if :FMT = "BK" and :580 = "" then
    if :772 # "" or :773 # "" or :774 # "" or :775 # "" or :776 # "" or :777 # "" then
      message "1163"
    end if
   end if

   if :FMT = "BK" and :440 # "" and :490 # "" then
      message "1164"
   end if
   
   if :FMT = "BK" and :490 # "" then
    if :800 = "" and :810 = "" and :830 = "" then
      message "1165"
    end if
   end if

end choose


// ERROR MESSAGES (USER CAN'T IGNORE)

// ALL RECORDS

// if :LDR = "" then
//    message :000 "0160"
// end if

// SPECIAL TYPE OF RECORDS
   
   choose substr(&P1,3)

// TITLE
   case = "TIT"

   if :LDR = "" then
      message :000 "0160"
   end if

   if :245 = "" then
      message :245 "0161"
   end if 

   if :100 # "" and :FMT = "BK" then
    if :110 # "" or :111 # "" or :130 # "" then
      message "0162"
    end if
   end if

   if :110 # "" and :FMT = "BK" then 
    if :111 # "" or :130 # "" then
       message "0162"
    end if
   end if

   if :111 # "" and :FMT = "BK" and :130 # "" then
      message "0162"
   end if

   if :245/"00" # "" or :245/"01" # "" and 
      :FMT = "BK" and :100 # "" then
      message "0163"
   end if

   if :245/"10" # "" or :245/"11" # "" and
      :FMT = "BK" and 
      :100 = "" and 
      :110 = "" then
      message "0164"
   end if 
   
// AUTHORITY-NAME
   case = "AUT"

   if :LDR = "" then
      message :000 "0160"
   end if

   if :100 = "" and
      :110 = "" and
      :111 = "" and
      :130 = "" then
      message "0165"
   end if

// AUTHORITY-SUBJECT
   case = "SUB"

   if :LDR = "" then
      message :000 "0160"
   end if

// THESAURUS
   case = "THS" 

   if :LDR = "" then
      message :000 "0160"
   end if

   if :101/"d" # "" and :230 # "" then
      message :230 "0166"
   end if

   if :101/"n" # "" and :240 # "" then
      message :240 "0167"
  end if

// THESAURUS / Persons
   case = "PER"

   if :LDR = "" then
      message :000 "0160"
   end if

   if :101/"d" # "" and :230 # "" then
      message :230 "0166"
   end if

   if :101/"n" # "" and :240 # "" then
      message :240 "0167"
  end if

// THESAURUS / Places
   case = "ORT"

   if :LDR = "" then
      message :000 "0160"
   end if

   if :101/"d" # "" and :230 # "" then
      message :230 "0166"
   end if

   if :101/"n" # "" and :240 # "" then
      message :240 "0167"
  end if

// THESAURUS / Countries
   case = "LND"

   if :LDR = "" then
      message :000 "0160"
   end if

   if :101/"d" # "" and :230 # "" then
      message :230 "0166"
   end if

   if :101/"n" # "" and :240 # "" then
      message :240 "0167"
  end if

// THESAURUS / Time periods
   case = "ZTR"

   if :LDR = "" then
      message :000 "0160"
   end if

   if :101/"d" # "" and :230 # "" then
      message :230 "0166"
   end if

   if :101/"n" # "" and :240 # "" then
      message :240 "0167"
  end if

// THESAURUS / Materials
   case = "MAT"

   if :LDR = "" then
      message :000 "0160"
   end if

   if :101/"d" # "" and :230 # "" then
      message :230 "0166"
   end if

   if :101/"n" # "" and :240 # "" then
      message :240 "0167"
  end if

end choose

end proc


// SCRIPT FOR CIRCULATION CHECKS

proc CHKCI

choose substr(&P1,3)

// BORROWERS
   case = "BEN"

   if :102 = "" then 
      message :102 "0100" 
   end if

   if :100 = "" then
      message :100 "0101"
   end if

   if chkfld(:202, "DATE") # "" then
      message :202 "0102"
   end if

   if chkfld(:105, "DATE") # "" then
      message :105 "0102"
   end if

// ADDRESSES
   case = "ADR"

   if chkfld(:108, "DATE") # "" then
      message :108 "0102"
   end if

   if chkfld(:109, "DATE") # "" then
      message :109 "0102"
   end if

// CASH RECORDS
   case = "CSH"

   if :200 = "" or :200 = "0000" then
      message :200 "0107"
   end if

   if :202 = "" then
      message :202 "0104"
   end if

// ACQUISITIONS CHECKS

// ORDERS
   case = "ORD"

   // NO ORDER NO.
   if :102.1 = "" then
     message :102.1 "0202"
   end if 

   // IF DIRECT=Y, THEN SET USER
   if :113 = "Y" then
     if :BEN$L = "" then
       message :BEN "0205"
     end if
   end if

   // NO NUMBER OF UNITS
   if :129 = "" or :129 = "0" then
     message :129 "0209"
   end if

  // NO VENDOR
  if :118 = "" then
    message :118 "0207"
  end if

  // NO ACQUISITION METHOD
  if :111 = "" then
    message :111 "0218"
  end if

  // NO DELIVERY TYPE
  if :123 = "" then
    message :123 "0224"
  end if

  // NO SUBLIBRARY
  if :SUB = "" then
    message :SUB "0219"
  end if

// VENDOR RECORDS
   case = "VDR"

   if :002 = "00000000" or :002 = "" then
      :002 = date("YYYYMMDD") 
   end if

   if :CU1$a = "" then
      message :CU1$a "0216"
   end if

   if :211 = "" then
      message :211 "0215"
   end if

   if :106 = "" then
      message :106 "0214"
   end if

   if :104 = "" then
      message :104 "0213"
   end if

   if :102 = "" then
      message :102 "0212"
   end if

   if :100 = "" then
      message :100 "0229"
   end if

// BUDGETS
   case = "BUD"

   if :002 = "00000000" or :002 = "" then
      :002 = date("YYYYMMDD") 
   end if

   if :100 = "" then
      message :100 "0226"
   end if

   if :101 = "" then
      message :101 "0217"
   end if

   if :111 = "" then
      :111 = &P2
   end if

   if :112 = "" then
      :112 = &P2
   end if

   if chkfld(:106, "DATE") # "" then
      message :106 "0102"
   end if

   if chkfld(:107, "DATE") # "" then
      message :107 "0102"
   end if


// INVOICES
   case = "IVH"

   // NO TOTAL AMOUNT
   if :110 = "" then
     message :110 "0220"
   end if

   // NO INVOICE DATE
   if :111 = "00000000" then
     message :111 "0221"
   end if

   // NO CURRENCY
   if :104 = "" then
     message :104 "0211"
   end if

   // PAYMENT DATE
   if :119 # "P" and :116 # "00000000" and :116 # "" then
     message :116 "0230"
   end if

// INVOICE POSITION
   case = "IVP"

   // NO TOTAL AMOUNT
   if :203 = "" then
     message :203 "0220"
   end if

// SUBSCRIPTIONS
   case = "ABO"

  // NO ITEM STATUS
  if :110 = "" then
    message :110 "0222"
  end if

  // INVALID DATE RANGE
  if :104 > :105 then
    message :105 "0105"
  end if

//CHECKS SERIALS CONTROL
// PUBLICATION SCHEDULE
   case = "PUB"

  // NO DESCRIPTION
  if :100 = "" then
    message :100 "0228"
  end if


end choose

end proc

   
// SCRIPT TO COMPLETE RECORDS

proc COMPL

// ALL TYPE OF RECORD

STRING FUNC = ""
STRING MASTER = substr(&P1,3)

  STRSET NSZ1 = { "Der ", "Die ", "Das ", "Ein ", "Eine ", 
                  "The ", "A ", "An ", 
                  "Le ", "La ", "Les ", "Un ", "Une " }
  STRSET NSZ2 = { "Der ", "Die ", "Das ", "Ein ", "Eine ", 
                  "The ", "A ", "An ", 
                  "Le ", "La ", "Les ", "Un ", "Une " }

   if :001 = "000000000" or :001 = "" then
      FUNC = "NEW"
      :001 = :SYSID
   end if

   if :001 # :SYSID then
      :001 = :SYSID
   end if

// CREATION DATE
   if :002 = "00000000" or :002 = "" then
      :002 = date("YYYYMMDD")
   end if

// IDENTICATION NUMBER
   if lpad(:001,9,"0") # :SYSID then
      :001 = :SYSID
      :002 = date("YYYYMMDD")
   end if

// UPDATE DATE
  if MASTER = "TIT" or MASTER = "AUT" or MASTER = "SUB" then
    :005 = date("YYYYMMDDHHMISS") 
  else
    :003 = date("YYYYMMDD") 
  end if

// SPECIAL TYPE OF RECORDS
   
   choose MASTER

   // TITLE   
   case = "TIT" 

   if :LDR = "" then
      :LDR = "-----nam--22------u-4500"
   end if

   if :008 = "" then
      :008 = "------s1000------------r-----000-0-eng-d"
   end if 

   if substr(:008,1,6) = "------" then
      :008 = concat(date("YYMMDD"), substr(:008, 7))
    end if
 
     choose substr(:LDR,7,1)
     case = "a" or = "t"
       if substr(:LDR,8,1) = "m" then
        :FMT = "BK"
       end if  
       if substr(:LDR,8,1) = "s" then
        :FMT = "SE"
       end if 
     case = "m"
       :FMT = "CF"
     case = "e" or = "f"
       :FMT = "MP"
     case = "c" or = "d" or = "i" or = "j"
       :FMT = "MU"
     case = "g" or = "k" or = "o" or = "r"
       :FMT = "VM"
     case = "p"
       :FMT = "MX"
     end choose 

//   if FUNC = "NEW" then
//     if begstr(:331, NSZ1) # "" then
//      :331 = concat(replace(begstr(:331, NSZ1), NSZ1, NSZ2), right(:331, " "))
//     end if
//   end if
   
   if substr(:008,36,3) # "" then
   :LNG = substr(:008,36,3)
   end if

   // AUTHORITY	
   case = "AUT"

   if :LDR = "" then
      :LDR = "-----nz----------n------"
   end if

   if substr(:LDR,7,1) = "z" then
      :FMT = "AU"
   end if

   if :008 = "" then
      :008 = "-------|-c-nn----||||||||||--|---||||--"
   end if

 
  // SUBJECTS
  case = "SUB"
  
   if :LDR = "" then
      :LDR = "-----nz----------n------"
   end if

   if substr(:LDR,7,1) = "z" then
      :FMT = "AU"
   end if
 
   if :008 = "" then
      :008 = "-------|--ann----||||||||||--|---||||--"
   end if

   // THESAURUS
   case = "THS" 

    if :LDR = "" then
       :LDR = "-----nz----------n------"
    end if

    if :FMT = "" then
       :FMT = "AT"
    end if

   case = "PER"

    if :LDR = "" then
       :LDR = "-----nz----------n------"
    end if

    if :FMT = "" then
       :FMT = "AP"
    end if

    case = "ORT"

    if :LDR = "" then
       :LDR = "-----nz----------n------"
    end if

    if :FMT = "" then
       :FMT = "AO"
    end if

    case = "LND"

    if :LDR = "" then
       :LDR = "-----nz----------n------"
    end if

    if :FMT = "" then
       :FMT = "AL"
    end if

    case = "MAT"

    if :LDR = "" then
       :LDR = "-----nz----------n------"
    end if

    if :FMT = "" then
       :FMT = "AM"
    end if

    case = "ZTR"
    if :LDR = "" then
       :LDR = "-----nz----------n------"
    end if

    if :FMT = "" then
       :FMT = "AZ"
    end if


  // HOLDINGS
  case = "HOL"

   if :LDR = "" then
      :LDR = "-----nx----------mi-----"
   end if

   if :FMT = "" then
      :FMT = "HO"
   end if

   // ITEMS
   case = "MEX"

   if :LDR = "" then
      :LDR = "MEX"
   end if 

   if :FMT = "" then
      :FMT = "ME"
   end if 

   if :A02$a = "" or :A02$a = "00000000" then
     if :A97  = "" then
        :A02$a = date("YYYYMMDD")
     end if
   end if

   if :A97 # "" and :A95 = "" then
     :A95 = "ip"
   end if

end choose
end proc
   
